Pratique de la programmation
Ce qui suit couvre divers sujets en lien avec la pratique de la programmation,
pour ne pas dire l'art de coder. Pour l'essentiel, ce document liste des liens
sur divers sujets associés à l'acte de programmer, mais des réflexions
personnelles s'ajouteront quand j'en aurai le temps. Notez que plusieurs des
sujets exposés ici entraînent chez les gens des réactions
épidermiques, à la limite du religieux. Restons calmes...
Certaines thématiques autrefois discutées ici ont été relocalisées dans des
pages à part entière, soit :
Si la pratique de la programmation vous intéresse, je vous invite aussi
à examiner la question des schémas
de conception.
Idées et opinions sur la pratique de la programmation
La pratique de la programmation est une chose large et complexe; beaucoup plus complexe que ne le croient les gens qui n'y participent pas. En partie scientifique, en partie philosophique, en partie artisanale (le Craft, la Praxis), la programmation est affaire de discipline et de créativité à la fois, pour résoudre chaque fois de nouveaux problèmes et pour le faire chaque fois mieux, mais aussi de manière à ce que les solutions trouvées survivent au passage du temps.
Personnellement, je penche vers certains principes de base, mais je suis d'accord
avec la plupart des principes listés – colligés, en fait
– par Christopher
Diggins dans http://www.artima.com/weblogs/viewpost.jsp?thread=331531 :
- Programmer dans un langage demande de comprendre ses idiomes. Il ne faut pas essayer de faire du Java ou du C en C++ ou en Erlang
(ou l'inverse), du moins pas si on veut être efficaces et si on souhaite une
expérience enrichissante
- Viser petit (petits fichiers, petites fonctions, tâches simples et bien
définies), parce que (a) cela s'optimise mieux, (b) cela se comprend mieux,
(c) cela réduit drastiquement le nombre de bogues (et l'effort de débogage
correspondant), et surtout (d) cela résulte en des composants logiciels plus
« composables », donc plus réutilisables
- Viser du code rapide malgré tout, et sans compromis quand c'est important
- Viser la portabilité du code dans la mesure du possible
- Viser l'esthétique et le plaisir
J'aime bien aussi les critères préconisés par http://sourceforge.net/apps/wordpress/ogsa-dai/2011/08/22/on-code-quality/
mais je ne suis pas certain qu'il soit raisonnable de les transformer en métrique
quantitative. Il y a un volet esthétique à la pratique de la programmation.
Principes de design, tirés de
Programming Pearls par Jon Bentley (source) :
- Work on the right problem
- Explore the design space of solutions
- Look at the data
- Use the back of the envelope
- Build prototypes
- Make trade-offs when you have to
- Keep it simple
Thématiques générales et philosophiques
Des idées et opinions émises par d'autres auteurs sur cette pratique
suivent, et pas nécessairement avec lesquelles je suis d'accord; vive
la variété des points de vue!
« Code is never "done" imo. Coding is not like making a statue, it's like cultivating a garden.
You try out a vegetable patch and it doesn't work out because the light wasn't right. Next year you do something else in that part of the garden.
You try, learn, adapt and grow. » – Patricia Aas (source)
« I find that programming, like many creative endeavours, involves being at times a blacksmith, at times a gardener.
Sometimes code needs to be forged, shaped, worked into compliance. Sometimes it needs time, nurturing, and the conditions to bring forth the beauty within » – Ben Deane (source)
- À propos de l'importance d'être une programmeuse paresseuse
ou un programmeur paresseux, une opinion d'Alfredo Aguirre en
2011 : http://theteam.co.uk/blog/the-importance-of-being-a-lazy-developer
- Les vertus de la simplicité :
- La secte de Silicon Valley? Un texte de M. E. Driscoll en
2011 : http://medriscoll.com/post/9117396231/the-guild-of-silicon-valley
- La programmation empirique, pour étudier comment se font les programmes,
un texte de 2011 : http://www.americanscientist.org/issues/feature/2011/6/empirical-software-engineering/1
- Aimer programmer, un texte de 2011 : http://thecodergirl.wordpress.com/2011/12/07/why-i-love-to-code/
- Mémoriser les concepts est préférable à mémoriser
les API, selon Kresimir Bojcic en
2011 : http://kresimirbojcic.com/2011/12/16/memorize-the-concepts-not-the-apis.html
- La programmation polyglote, ou l'art de connaître et d'utiliser une
multiplicité de langages :
- En 2011, Paul Chiusano propose sa vision du
futur de la programmation : http://pchiusano.blogspot.com/2011/12/future-of-programming.html
- En 2012, Jon Beltran de Heredia Olazabal explique
qu'il veut « réparer » la programmation, qui
nous mène selon lui à des produits trop fragiles : http://jonbho.net/2012/01/24/i-want-to-fix-programming/
- La programmation comme construction interactive entre l'humain et la machine,
un texte d'Oleg Kiselyov et de Chung-chieh Shan en 2012 :
http://okmij.org/ftp/Computation/index.html#collaborative-PL
- En 2012, Vic Cherubini avoue être un excellent
programmeur mais un très mauvais « algorithmiste » :
http://leftnode.com/entry/i-am-a-great-programmer-but-horrible-algorithmist
- Texte de 2009 par un programmeur qui dit être
un ingénieur (au sens anglais de Software Engineer), pas un
compilateur : http://www.numbergrinder.com/2009/02/im-an-engineer-not-a-compiler/
- Texte de 2012 par Scott Hanselman et qui décrit
les 99% « invisibles »,
celles et ceux qu'il qualifie par analogie avec la physique de « matière
noire » des programmeuses et des programmeurs, soit celles et ceux
qui font le travail dans l'ombre, sans être flamboyant(e)s ou transcendant(e)s :
http://www.hanselman.com/blog/DarkMatterDevelopersTheUnseen99.aspx
- Les programmeurs peuvent être des artistes, de l'avis d'Ethan Fast
en 2012 : http://ethanfast.com/2012/03/programmers-can-be-artists/
- Où se trouve la science dans le développement logiciel? La
vision de Jens Schauder en 2012 : http://blog.schauderhaft.de/2012/02/12/where-is-the-science-in-software-development/
- De l'avis de Laurissa Wolfram, en 2012, écrire
des textes et des programmes sont deux tâches qui se ressemblent plus
que certains ne le croient : http://laurissawolfram.wordpress.com/2012/05/27/writing-and-programming-more-alike-than-you-think-part-1/
- En 2012, Gintautas Miliauskas suggère
de distinguer idéologies de programmation et idéologies politiques :
http://blog.miliauskas.lt/2012/08/why-software-engineering-is-not-politics.html
- Une retranscription partielle d'opinions émises par John
Carmack sur la pratique de la programmation comme acte social, par Andrew
J. Ko en 2012 :
http://blogs.uw.edu/ajko/2012/08/22/john-carmack-discusses-the-art-and-science-of-software-engineering/
- Idées controversées sur la programmation :
- Programmer nous placerait dans un état d'esprit négatif, de
l'avis de Myles Recny en 2012 : http://edu.mkrecny.com/thoughts/be-nice-to-programmers
- En 2012, Edward Z. Yang discute de
programmation « extrémiste », comme celle qu'on retrouve dans un langage où les
concepteurs auraient pensé « tiens, les fonctions, c'est chouette alors
faisons un langage qui n'a que des fonctions! »... et explique
que, selon lui, c'est pas une si mauvaise idée que ça :
http://blog.ezyang.com/2012/11/extremist-programming/
- La programmation est un combat contre l'incertitude, selon Nathan Marz en
2013 :
http://nathanmarz.com/blog/principles-of-software-engineering-part-1.html
- Programmer ressemble plus à la rédaction d'un roman qu'à la construction
d'un pont, de l'avis de Kurt Leafstrand en 2013 :
https://medium.com/on-startups/305a31ff609
- La philosophie pour les programmeurs, un texte de Peter Evjan en
2013 :
http://peterevjan.com/posts/philosophy-for-the-software-engineer/
- En quoi programmer s'apparente à peindre, texte de
2014 :
http://thewebbedblog.blogspot.ca/2014/02/how-coding-is-like-painting.html
- En quoi programmer n'est pas comme construire une automobile :
http://hexatlas.com/entries/3
- Comment trouver l'inspiration? Texte de 2009 :
http://halffull.org/2009/01/03/10-ways-to-get-inspiration-as-a-programmer/
Certains abordent aussi la programmation sur la base de la poésie :
Notez que je ne partage pas nécessairement les opinions émises dans les textes vers lesquels mènent les liens sur cette page, en particulier en ce qui a trait à des considérations d'esthétique.
La beauté et l'élégance touchent à des questions d'esthétique et de goût.
Certains ont même écrit des livres (souvent fort intéressants par ailleurs) sur la
beauté dans le code – je pense par exemple à
Beautiful Code ou à
Beautiful
Architecture. À
ce sujet :
Portabilité culturelle et technique
- Un texte de 2003 par Joel
Spolsky sur le biculturalisme, au sens de comprendre les pratiques et
idiomes à la fois de Windows
et de Linux :
http://www.joelonsoftware.com/articles/Biculturalism.html
- Ce que les gens du monde Microsoft peuvent apprendre du monde Apple,
texte de 2008 :
- Confessions d'un programmeur de systèmes propriétaires, qui
s'en remet : http://www.kernel.org/pub/linux/kernel/people/paulmck/Confessions/
- Quitter le monde .NET,
un texte de 2010 : http://whatupdave.com/post/1170718843/leaving-net
- Migrer de DOS
vers Windows,
un texte écrit en... 2009 (!) par Jari
Komppa : http://sol.gfxile.net/dr_gdm.html
- Migrer vers Vista x64,
un texte de Daniel Pistelli publié dans le
Code Project en
2009 : http://www.codeproject.com/KB/vista/vista_x64.aspx
- Un registre de ressources pour le développement multiplateforme :
http://sydlawrence.me/post/6396410652/cross-platform-application-development
- Comment améliorer ses propres pratiques de programmation? Faire l'acquisition
d'un vieil ordinateur, une suggestion de Jacques Mattheij en
2011 : http://jacquesmattheij.com/How+to+Improve+the+quality+of+your+software-find+an+old+computer
- Un texte de 2012 sur le regard que porte son
auteur sur la réalité du développement de code portable
contemporain : http://www.dodgycoder.net/2012/01/modern-cross-platform-development.html
- Faire évoluer une technologie et rester compatibles avec l'existant;
comment trouver un équilibre? Texte de
Herb Sutter
en 2012 :
http://herbsutter.com/2012/12/04/compatibility/
- Texte de Jacques Mattheij, en 2013, portant
sur l'importance d'acquérir un peu de connaissances sur le domaine
d'application d'un logiciel avant de chercher à le développer :
http://jacquesmattheij.com/domain-knowledge-or-a-lack-thereof
- Depuis la version 4.8,
gcc est écrit en
C++ plutôt qu'en
C :
- En 2013, dans un texte plutôt détaillé, Steven Sinofsky réfléchit tout haut
sur la question du développement de logiciel destiné à plusieurs plateformes :
http://blog.learningbyshipping.com/2013/07/08/juggling-multiple-platforms-and-the-bumpy-road-ahead/
- Un chapitre du livre de
Raymond Chen,
The Old New Thing, portant justement sur la question de la
portabilité :
http://ptgmedia.pearsoncmg.com/images/9780321440303/samplechapter/Chen_bonus_ch01.pdf
- Réaliser des binaires portables n'est pas une sinécure, comme le rappelle
Simon Grondin en 2015 :
http://simongrondin.name/?p=394
Dans cette présentation de 2016 portant sur le
Universal CRT, un effort signifiant du point de vue de la portabilité et de la compatibilité, James McNellis présente la compatibilité sous trois angles, soit :
- La compatibilité applicative, qui fait en sorte qu'une mise à jour des
outils ou du système d'exploitation n'empêche pas les programmes existants
de fonctionner. Ceci est à son sens une contrainte critique
- La compatibilité. binaire, qui fait en sorte que compiler une
bibliothèque à liens statiques un jour, puis de la lier avec une
DLL ultérieurement, fonctionne sans heurts. Ceci est selon lui une
propriété hautement désirable
- La compatibilité du point de vue du code source, qui est essentiellement
une question de stabilité des API.
Ceci est désirable, mais il est clair que ne pas l'avoir cause beaucoup,
beaucoup de maux de tête
L'acte de programmer
- Comment être un programmeur, selon Robert L. Read en
2002 : http://samizdat.mines.edu/howto/
- Le mot « programmeur » est en soi une généralisation
abusive, selon ce texte court mais intéressant d'Erik McClure en
2012 : http://blackhole12.blogspot.ca/2012/02/programmers-are-overgeneralized.html
- Ce qui rend difficile la compréhension des programmes une fois ceux-ci
rédigés : http://freedom-to-tinker.com/blog/felten/why-understanding-programs-hard
- Confessions d'un terrible programmeur : http://blog.kickin-the-darkness.com/2007/09/confessions-of-terrible-programmer.html
- Sur le futur de la programmation, par Danny Kalev en
2004 : http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=225
- Des non-mythes sur la programmation, selon Mordechai Ben-Ari en
2010 : http://stwww.weizmann.ac.il/G-CS/BENARI/articles/nonmyths.pdf
- Au sujet du besoin, de la pulsion de coder, selon Jacques Mattheij en
2011 : http://jacquesmattheij.com/The+need+to+code
- Les programmeurs de sont pas jardiniers mais bien diplomates, un texte de
2011 :
http://nljr.blogspot.com/2011/05/not-gardeners-but-diplomats.html
- Programmer et pessimisme, texte d'Allen Cheung en 2011 :
http://allenc.com/2011/07/code-pessimism/
- Steven Pigeon conseille de « programmer Zen » :
http://www.stevenpigeon.org/Essais/Zen/zen_prog.html
- Programmation comme artisanat :
- Voir le code en tant que design; trois essais de Jack W. Reeves :
http://www.developerdotstar.com/mag/articles/reeves_design_main.html
- Comment les programmeurs et les autres scientifiques perçoivent la
programmation, une opinion de John D. Cook en 2011 :
http://www.johndcook.com/blog/2011/07/21/software-exoskeletons/
- Comment apprendre à programmer en dix ans, selon
Peter
Norvig en 2001 :
http://norvig.com/21-days.html
- Quatre trucs pour apprendre à programmer, par Jamis en
2011 :
http://37signals.com/svn/posts/3014-four-tips-for-learning-how-to-program
- Ce qui fait que les idées « sexy » ne fonctionnent
pas toujours, un texte de 2011 :
http://blog.ravn.com/post/12211269799/skyara-ravn-pivot
- Lorsque nous sommes trop fatigués, nous faisons des erreurs...
- En 2011, Rob
Pike réfléchit tout haut sur la programmation et l'imagination,
de même que sur l'importance, pour un programmeur, de programmer :
http://commandcenter.blogspot.com/2011/12/esmereldas-imagination.html
- En 2012, Alex Yumashev explique pourquoi les
programmeurs n'aiment pas, mais vraiment pas, les antiviraux : http://blog.jitbit.com/2012/01/why-developers-hate-antiviruses.html
- Dans un texte de 2012, John Graham-Cumming relate
quelques trucs qu'il a appris au fil des ans à propos de la programmation :
http://blog.jgc.org/2012/07/some-things-ive-learnt-about.html?m=1
- À propos des distinctions entre ingénieur, développeurs et
scientifiques, par Jeremy C. Khan en 2012 :
http://jeremyckahn.github.com/blog/2012/09/23/developers-vs-engineers-vs-scientists/
- Réflexion de Dean Michael Berris, en 2012, sur la tension entre deux
modes de pensée pendant l'acte de programmer, soit le mode qui met l'accent sur
la conception et le design et le mode qui insiste plus sur la tâche de
calcul en soi :
http://www.cplusplus-soup.com/2012/10/musings-design-and-computation.html
- L'impulsion créatrice, par Erik McClure en 2013 :
http://blackhole12.blogspot.ca/2013/02/im-slowly-losing-my-mind.html
- Ce qu'implique « être un programmeur », selon Robert L. Read en
2003 :
http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
- Les impacts négatifs de Stack Overflow, selon Miro Samek en
2014 :
http://embeddedgurus.com/state-space/2014/02/are-we-shooting-ourselves-in-the-foot-with-stack-overflow/
- Pouvoir construire des abstractions est le propre de la programmation,
mais encore faut-il que le coût de ces abstractions soit raisonnable. Texte de
Josh Haberman en 2014 sur le coût comparatif des
abstractions dans des langages « de haut niveau » et « de bas niveau » :
http://blog.reverberate.org/2014/10/the-overhead-of-abstraction-in-cc-vs.html
« The function of good software is to make the complex appear to be simple » –
Grady Booch
Gérer la complexité
À propos de la complexité et de sa gestion en programmation :
- Mieux vaut réduire la complexité, un texte de
Jon Skeet
en 2009 : http://msmvps.com/blogs/jon_skeet/archive/2009/11/02/omg-ponies-aka-humanity-epic-fail.aspx
- La complexité est l'ennemi, selon Evan Martin en
2011 : http://neugierig.org/software/blog/2011/04/complexity.html
- Comment rendre simple un système a priori complexe,
par Kelly Elton en 2012 : http://www.kellyelton.com/2012/06/15/making-complex-software-less-complex/
- Dompter la complexité des programmes, un texte d'Adam Domurad
en 2012 : http://adam-dev-blog.blogspot.ca/2012/06/taming-program-complexity.html
- En 2012, Jacques Mattheij propose une échelle
(plutôt qualitative) de la complexité des tâches de
programmation : http://www.jacquesmattheij.com/the-scale-of-programming-complexity
- En 2013, Craig Gidney nous invite à réduire
les méthodes à leur plus simple expression :
http://twistedoakstudios.com/blog/Post3477_rule-of-thumb-use-purposefully-weakened-methods
- Texte de 2013 par Thomas Becker, programmeur
bien connu du monde
C++, sur la complexité de ce langage :
http://blog.greaterthanzero.com/post/58482859780/c-and-the-culture-of-complexity
- L'évolution de la complexité dans un système, une réflexion de Mark
Tiele Westra en 2013 :
http://akvo.org/blog/the-ball-of-mud-transition/
- Réflexion d'Andrew Koenig en 2014 sur ce
qui rend l'acte de programmeur si difficile :
- Programmer est fondamentalement difficile, selon Bryan Woods en
2010 : http://writing.bryanwoods4e.com/1-poor-poor-child
- Programmer est facile, mais le développement logiciel, lui, est
ardu. Un texte de 2011 : http://www.thoughtclusters.com/2011/01/programming-is-easy-software-development-is-hard/
- Court mais intéressant texte de Scott Porad en
2012 sur la difficulté inhérente à l'acte
de programmer : http://www.scottporad.com/2012/05/06/why-do-web-sites-and-software-take-so-long-to-build-and-why-is-it-so-hard/
- De l'avis de Ben Augarten en 2012, pour
programmer, il faut apprivoiser la frustration : http://benaugarten.com/learning/2012/07/08/learn-to-love-frustration/
- Les cinq choses les plus difficiles à faire en programmation
sont, du point de vue de Chris McKenzie en 2012,
l'optimisation, le
réseautage (j'aurais parlé de réseautique et de multiprogrammation,
mais l'auteur parle du réseautage humain), la sécurité,
la fiabilité et l'échelonnabilité (néologisme
que j'utilise pour Scalability). C'est pas faux. Évidemment,
fallait que ce soit à peu près ce que j'enseigne, ce qui
explique bien des choses : http://qaa.ath.cx/The5HardestThings.html
- Goran Milovanovic, en 2013, se dit de ceux qui estiment que programmer est un dur labeur, et que la valeur des sites ou des livres annonçant « apprenez à programmer en quelques jours » est plutôt limitée.
Il trace une analogie entre les auteurs de romans (dans la littérature) et
ceux de bibliothèques (en programmation) :
http://www.nilunder.com/blog/2013/04/28/programming-is-not-easy/
- En 2015, Arne Mertz discute de ce qui se
produit lorsqu'on abuse de généralisation :
http://arne-mertz.de/2015/01/over-generalization/
- Un bon remède à la croissance de la complexité? Plus de petites
fonctions simples, comme le suggère ce texte de 2014 :
http://rgbz.blogspot.ca/2014/01/what-world-needs-now-is-more.html
- Vivre simplement, programmer dans la simplicité, un crédo mis de
l'avant par Brian S. Lam en 2014 :
https://brianslam.wordpress.com/2014/03/16/thank-god-for-simple-code/
- Plaidoyer pour une plus grande simplicité, par
Kevlin Henney en
2014 :
http://www.artima.com/weblogs/viewpost.jsp?thread=362327
- La relation entre complexité du design et difficulté d'entretien,
texte de Robert C. Martin en 2015 :
http://blog.cleancoder.com/uncle-bob/2015/04/15/DoesOrganizationMatter.html
- Combler les besoins en allant à l'essentiel, par Sam Gentle en
2015 :
https://samgentle.com/posts/2015-04-26-less-is-moore
- Texte de Paul Watt en 2015 sur la
complexité, accidentelle ou non, et sa gestion dans un projet réel :
http://codeofthedamned.com/index.php/complexity
- Selon Stephen Young en 2015, on devient
une meilleure programmeuse ou un meilleur programmeur en domptant la
complexité :
https://medium.com/on-coding/you-must-tame-complexity-to-become-a-better-programmer-8594ce21808a
- En 2015, Robert Nystrom décrit le plus
difficile programme qu'il ait écrit dans sa carrière. J'atteste, c'est
l'une des choses qui est véritablement ardue à faire (ça et le traitement
du calendrier, en fait : deux cauchemars) :
http://journal.stuffwithstuff.com/2015/09/08/the-hardest-program-ive-ever-written/
À propos de « la zone »
Cette section est devenue une page à part entière :
la-zone.html
« Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program » –
Linus Torvalds (source)
« Each routine you read turns out to be pretty much what you expected. You can call it beautiful code when the code also makes it look like the language was made for the problem » puis « Beautiful code reserves its beauty for those familiar with the language and the problem. Careful study of beautiful code will enhance familiarity of both » –
Ward Cunningham (source,
source)
Plaisir de programmer
La question de l'acte de programmer comme chose plaisante et
créative est au coeur de ce qui motive plusieurs programmeuses et plusieurs
programmeurs (dont votre illustre serviteur). Plusieurs individus critiquent
le passage de l'apprentissage (et de l'application) de la programmation à
un modèle qui favorise l'apprentissage et l'utilisation d'outils (souvent
de Frameworks ou de bibliothèques de classes). Considérant
la difficulté élevée de l'acte de programmer, assurer
le maintien du plaisir et l'entretien de la pulsion créative associés
à cet acte est, à mes yeux, chose essentielle.
À propos du plaisir de programmer :
L'acte de programmer – façons de faire
- Réflexion de Kragen Javier Sitaker, en 2007,
sur l'évolution de ses propres pratiques de programmation : http://lists.canonical.org/pipermail/kragen-tol/2007-March/000849.html
- En 2012, Christian Posta explique que selon
lui, le design d'un programme ne s'arrête jamais : http://www.christianposta.com/blog/?p=62
- En 2012, texte postulant qu'on tend à
la fois à faire de la surconception (Overengineering) et à
trop rapidement adopter de nouvelles technologies (Overadoption)
pour le bien-être de nos entreprises. Le texte avance que c'est en partie
parce que les programmeuses et les programmeurs aiment trop les nouveaux défis...
Ce n'est pas 100% faux, selon toute probabilité :
http://bits.shutterstock.com/?p=263
- Pourquoi les programmeurs rédigent-ils du code inutile? Une opinion
de John D. Cook, en 2009 : http://www.johndcook.com/blog/2009/10/05/yangi/
- Divers styles de programmation, texte de 2008 :
http://www.codeinstructions.com/2008/10/styles-of-programming.html
- La programmation pataphysique, un texte de 2006 par
Darko Svitek : http://www.illposed.com/philosophy/pataprogramming.html
- Nous programmons tous à l'aveuglette, selon Vivek Haldar en
2010 : http://blog.vivekhaldar.com/post/1243047026/coding-blind
- Le programmeur interruptible, un texte de Steve Streeting en
2010 : http://www.stevestreeting.com/2010/09/04/work-2-0/
- Cinq types de programmeurs, selon Steven Benner en
2010 : http://stevenbenner.com/2010/07/the-5-types-of-programmers/
Quand le programmeur est dans les limbes (un schéma) : http://xyne.archlinux.ca/img/xyne_misc/programmers_limbo.png
- Comment les programmeurs résolvent leurs problèmes, selon
John D. Cook en 2010 : http://www.johndcook.com/blog/2010/10/22/programmer-problem-solving-sequence/
- « Je pratique le développement de type ...DD » :
http://blankdd.com/
- Le Lean Programming, une proposition de Mary Poppendieck en
2010 : http://www.leanessays.com/2010/11/lean-programming.html
- Optimiser les pratiques de programmation pour maximiser le plaisir, proposition
de Geoff Bradwell en 2005 : http://www.oreillynet.com/onlamp/blog/2005/10/ofun.html
- Visez la simplicité d'abord et avant tout, un conseil de Tomasz Dabrowski
en 2011 : http://dabroz.scythe.pl/2011/07/16/simplicity-oriented-programming
- Les programmeurs sont aussi de bons designers, un texte de
2011 : http://method.ac/blog/design/programmers-designers.html
- « Mon paradigme est meilleur que le tien », une réflexion
de Luke Palmer en 2011 sur les chicanes de basse-cour :
http://lukepalmer.wordpress.com/2011/09/15/my-paradigm-is-better-than-your-paradigm/
- En 2011, David Green nous dit que s'il avait
eu plus de temps, il aurait écrit moins de code : http://blog.activelylazy.co.uk/2011/02/09/if-i-had-more-time-i-would-have-written-less-code/
- « Meilleures pratiques » ou « Pratique
appropriée dans les circonstances »? Une réflexion
de James Morle en 2011 : http://jamesmorle.wordpress.com/2011/09/16/right-practice/
- Réflexions de Kent
Beck sur le design en programmation, en 2011 :
http://casestatement.tumblr.com/post/11213857807/lunch-and-learn-articulate-coding
- Le pire ennemi du programmeur serait « rester coincé »,
selon Jeff Wofford en 2011 : http://www.jeffwofford.com/?p=835
- En 2011, David Green écrit sur la programmation
motivée par la honte : http://blog.activelylazy.co.uk/2011/09/06/shame-driven-development/
- En 2011, Alex Tatiyants décrit la programmation
nmotivée par la culpabilité : http://tatiyants.com/guilt-driven-development/
- En 2012, Nathan Marz écrit sur la programmation
orientée souffrance (le principe : ne conçoit un logiciel
que si tu souffres toi-même de son absence) : http://nathanmarz.com/blog/suffering-oriented-programming.html
- Paul Stamatiou, en 2011, écrit sur la
création d'une bonne ambiance de travail pour programmer : http://paulstamatiou.com/coding-zone
- La pratique de la programmation, selon Steve Yegge en
2005 : https://sites.google.com/site/steveyegge2/practicing-programming
- Une proposition de méthodologie de développement de jeu se
voulant pratique et efficace, étape par étape, par Eagan Rackley
en 2011 :
- En 2011, John Carmack recommande de programmer
sans peur sur une implémentation parallèle, une copie, d'un
logiciel existant : http://altdevblogaday.com/2011/11/22/parallel-implementations/
- Un texte de 2011 par Swizec Teller relatant des raisons pour lesquelles
les programmeurs tendent à travailler la nuit : http://swizec.com/blog/why-programmers-work-at-night/swizec/3198
- Le Duck Programming, cousin du Duck
Typing, un texte de 2012 : http://unspace.ca/blog/duck-programming/
- En 2012, Jeff Knupp met en relief qu'on programme
souvent « à l'envers », produisant ce qui sera
simple à utiliser pour les autres plutôt que pour nous... et
que c'est sain : http://www.jeffknupp.com/blog/2012/02/07/coding-backwards/
- Une façon intéressante de programmer est le style Point-Free,
où chaque appel de fonction est sans état et qui mène
naturellement à une approche analogue à celle de la programmation
fonctionnelle. À ce sujet, un texte d'OJ Reeves en
2012 : http://buffered.io/posts/point-free-style-what-is-it-good-for
- Un ensemble de saines pratiques avec C++,
par Don Olmstead en 2011 : http://altdevblogaday.com/2011/12/24/include-best_practices/
- À quel point devrait-on cacher la complexité des opérations
dans nos programmes? Une mise en garde de Larry Osterman en
2004 : http://blogs.msdn.com/b/larryosterman/archive/2004/12/01/273160.aspx
- Critique d'ordre général des méthodologies de développement
logiciel, par Jez Humble en 2012 : http://continuousdelivery.com/2012/08/why-software-development-methodologies-suck/
- En 2012, Davor Babić soumet une critique de
la programmation dite « visuelle » :
http://blog.davor.se/blog/2012/09/09/Visual-programming/
- Dans ce texte de 2012, John Sonmez soumet
l'hypothèse que l'on ne fait vraiment que deux types de catégories de
fonctions, soit les algorithmes et les coordonnateurs, et qu'il est sage de
ne pas mêler ces catégories dans une seule et même fonction :
http://simpleprogrammer.com/2012/10/21/there-are-only-two-roles-of-code/
- Les habitudes de programmeurs efficaces, texte de Phil Chu en
2012 :
http://gamasutra.com/blogs/PhilChu/20121212/183405/Seven_Habits_of_Highly_Effective_Programmers.php
- Texte de 2013 par Bernard Lambeau, mettant de l'avant l'importance
d'avoir des principes de design, et de les appliquer :
http://www.revision-zero.org/design-principles-do-matter
- Liste de saines pratiques de programmation, colligées par Thomas Davis :
https://github.com/thomasdavis/best-practices
- Selon Reginald Braithwaite en 2013, mieux vaut
du code explicite que du code astucieux :
http://raganwald.com/2013/04/02/explicit-versus-clever.html
Revues de code (Code Reviews)
Cette section est devenue une page à part entière :
revue-code.html
Manifestes et écoles
de pensée
- Le manifeste intitulé The Motherfucking Manifesto for Programming,
Motherfuckers (que je vous laisse traduire par vous-mêmes), par
Zed A. Shaw
: http://programming-motherfucker.com/
- Le manifeste de programmation destructive : http://dpm.pen.io/
- Un manifeste recommandant de programmer pour la flexibilité, écrit
en 2010 : http://coderoom.wordpress.com/2010/04/16/code-for-flexibility-a-manifesto/
- Le développement STFU, pour Shut The Fuck Up : http://chriscontinanza.com/2010/09/10/STFUDD.html
- Le Big Ball of Mud, mis de l'avant par Brian
Foote et Joseph Yoder :
- L'approche spartiate :
- L'approche agile :
#agile
- Le programmeur cowboy (une sorte d'antipattern de la
gestion
de carrière), selon Chris Eargle en 2011 :
http://www.kodefuguru.com/post/2011/08/22/The-Cowboy-Coder.aspx
- Le manifeste pour la programmation scientifique, en
2011, par plusieurs signataires dont
Peter
Norvig : http://sciencecodemanifesto.org/
- La programmation confiante, présentation de
2011 :
http://avdi.org/talks/confident-code-rubymidwest-2011/
- Le manifeste du README, par Philip Dorrell en
2011 :
http://www.1729.com/blog/TheREADMEManifesto.html
- Le manifeste de KDE :
http://manifesto.kde.org/index.html
Le texte de Nikita Popov, sur le code STUPID, est quelque peu provocateur, ce qui n'est pas nécessairement une mauvaise chose, mais met aussi en relief (à mon avis), malgré lui peut-être, le fait que plusieurs pratiques (incluant des schémas de conception usités) peuvent être appliquées de manière abusive. Lisez avec discrimination et souvenez-vous qu'en pratique, bien peu de choses sont « tout noir » ou « tout blanc ».
- Éviter le code STUPID, par Nikita Popov en 2011 :
http://nikic.github.com/2011/12/27/Dont-be-STUPID-GRASP-SOLID.html
- Le manifeste du MicroPHP, texte faisant l'Éloge des choses petites
et simples, par Ed Finkler en 2012 : http://funkatron.com/posts/the-microphp-manifesto.html
- Le manifeste UTF-8 Everywhere, par Pavel Radzivilovsky, Yakov Galka et Slava
Novgorodov en 2012, dont le titre dit tout :
http://www.utf8everywhere.org/
- En 2012, Stephen Wyatt Bush relate les dix commandements
du programmeur sans égo, maximes que lui avait proposé son père
Frank Bush (aussi programmeur) avant de décéder. Sans constituer
un manifeste ou une école de pensée, ces quelques maximes peuvent
vous intéresser : http://blog.stephenwyattbush.com/2012/04/07/dad-and-the-ten-commandments-of-egoless-programming/
- Dans ce texte de 2012, John D. Cook parle de l'importance d'écrire le
code plutôt que de se limiter au copier/ coller :
http://www.johndcook.com/blog/2012/12/18/the-value-of-typing-code/
- En 2014, Andrey Karpov met en relief que la
majorité des erreurs de copier/ coller surviennent sur la dernière ligne d'une
fonction, et nomme ce phénomène le Last Line Effect :
http://www.viva64.com/en/b/0260/
- Le Slow Science Manifesto, en 2010,
qui réclame le droit prendre le temps de réfléchir :
http://slow-science.org/
- Le Principled Documentation Manifesto, par Emin Gün Sirer en 2013 :
http://hackingdistributed.com/2013/02/11/principled-documentation/
- Un manifeste en faveur de la production de rapports d'erreurs
pertinents, par David R. MacIver en 2013 :
http://www.drmaciver.com/2013/03/a-manifesto-for-error-reporting/ pour un
premier jet, puis
http://www.drmaciver.com/2013/03/a-rewritten-manifesto-for-error-reporting/
- Le manifeste de Mozilla :
https://www.mozilla.org/en-US/about/manifesto/
- Le Recomputation Manifesto, proposé par Ian Gent en
2013, qui vise à garantir que les algorithmes proposés dans des textes
scientifiques puissent être testés et vérifiés pour toujours :
http://www.software.ac.uk/blog/2013-07-09-recomputation-manifesto
- Le Future Programming Manifesto, par Jonathan Edwards en
2014 :
http://alarmingdevelopment.org/?p=893
- Le No TCP Manifesto, qui proclame que l'on devrait tous utiliser
UDP, publié en 2015 :
http://notcp.io/
- Le Reactive Manifesto, publié en 2014 :
http://www.reactivemanifesto.org/
- Le Two Day Manifesto, un plaidoyer pour les projets personnels et
l'expérimentation :
http://twodaymanifesto.com/
Travail d'équipe
- Refactoriser le code des autres n'est pas toujours sage, comme l'a constaté
Peter Faraday Weller en 2011 : http://01welp.co.uk/2011/09/lesson-learned/
- Les outils tels que Team Foundation Server nuiraient à la capacité
de développement de ses utilisateurs, selon Derek Hammer en
2011 : http://www.derekhammer.com/2011/09/11/tfs-is-destroying-your-development-capacity.html
- Histoire d'un individu qui ne travaillait pas mal, mais dont les pratiques
se fusionnaient plus ou moins bien avec celles de ses collègues, par
Reginald Braithwaite en 2011 : https://github.com/raganwald/homoiconic/blob/master/2011/11/COMEFROM.md#readme
- En 2012, Jay Fields relate son expérience
lorsqu'il a introduit un nouveau langage de programmation (Clojure,
dans ce cas, mais c'est preque secondaire à son propos) dans son milieu
de travail : http://blog.jayfields.com/2012/01/lessons-learned-while-introducing-new.html
- Réflexion sur le travail d'équipe quand les membres de l'équipe parlent
plusieurs langues distinctes (et pas nécessairement anglais), par Ber
Kessels en 2012 :
http://berk.es/2012/10/05/programming-on-a-none-english-project-best-practices/
- Un texte s'adressant aux nouveaux développeurs, par John Pignata en
2012 :
http://tx.pignata.com/2012/11/being-for-the-benefit-of-future-developer.html
- L'importance du travail d'équipe, ou la tragédie du programmeur solitaire.
Un texte de François Fortin en 2013 :
http://www.letx.org/can-you-work-on-a-team/
- Travailler avec des ingénieurs et des informaticiens quand on est un
gestionnaire de projet, texte ironique de Kenneth Norton en
2013 :
https://www.kennethnorton.com/essays/how-to-work-with-software-engineers.html
- Travailler en équipe de manière asynchrone serait une pratique paresseuse
et improductive, de l'avis de Vivek Haldar en 2013 :
http://blog.vivekhaldar.com/post/54192213683/the-laziness-of-synchronous-work
« Agile is a set of values and principles generalized from the practices of several similar methodologies. Agile does not define any particular practices; but it has no meaning without them. Agile is the abstract class. Practices are the implementation » –
Robert C. Martin
(source)
Approche Agile
Le processus unifié de développement, ou UP, et l'approche
RUP, pour Rational Unified Process, préconisée par
IBM :
Le passage du modèle de développement en cascade au modèle
itératif de développement, selon Peter Kroll en
2004 :
http://www.ibm.com/developerworks/rational/library/4243.html
À propos de l'approche agile :
- Le célèbre manifeste agile, qui a lancé ce mouvement :
http://agilemanifesto.org/
- Un manifeste anti agile :
http://antiagilemanifesto.com/
- Un Wiki sur le sujet : http://en.wikipedia.org/wiki/Agile_programming
- http://www.agileaxioms.com/
- http://www.agileadvice.com/
- Un texte de Danny Kalev sur le sujet, en 2005 :
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=233
- Développement de jeux avec approche agile, par Rory McGuire en
2006 : http://www.gamasutra.com/view/feature/2742/paper_burns_game_design_with_.php
- La pyramide agile, une critique de 2007 :
http://thedailywtf.com/Articles/The-Great-Pyramid-of-Agile.aspx
- Ce qui se produit quand un projet agile tourne mal, selon James Turner
en 2008 : http://www.cio.com/article/464169/When_Agile_Projects_Go_Bad
- L'année 2011 marquait le
10e anniversaire du manifeste agile :
http://david.ing.name/2011/02/27/what-next/
- Selon Dapeng Liu en 2014, l'approche agile est
simple, quand on y pense :
http://sgdev-blog.blogspot.sg/2014/09/agile-is-simple-topic.html
- En 2015,
Andrew Hunt
fait le constat que l'approche agile, telle qu'elle a été appliquée, est
un échec :
http://blog.toolshed.com/2015/05/the-failure-of-agile.html
- En 2015,
Robert C. Martin rappelle que
l'approche agile n'a jamais été une forme d'approche en cascade (Waterfall) :
http://blog.8thlight.com/uncle-bob/2015/10/16/agile-and-waterfall.html
À propos de la programmation extrême (eXtreme Programming) :
À propos de Scrum :
La programmation par binômes, ou Pair Programming :
Critiques :
- Selon Dave Moran, en 2010 :
- Selon Cédric
Beust, en 2006, les tenants de l'approche
agile doivent repenser leur pédagogie : http://beust.com/weblog/2006/06/07/agile-people-still-dont-get-it/
- Daniel B. Markham, en 2010, raconte que
l'approche agile a ruiné sa vie (mais le texte est plus nuancé que cela) : http://www.whattofix.com/blog/archives/2010/09/agile-ruined-my.php
- En 2011, J. D. Hildebrand parle de ceux
qu'il qualifie d'esclaves de l'approche agile, faisant la distinction
entre considérer « Agile » comme un nom ou
comme un adjectif : http://www.sdtimes.com/blog/post/2011/11/11/Agile-slaves.aspx
- En 2012, Eleftheria Drosopoulou dit percevoir
des signes du déclin de l'approche agile : http://www.javacodegeeks.com/2012/01/4-warning-signs-that-agile-is-declining.html
- En 2012, Nirav Assar expose quelques pratiques
qui ne sont pas agiles à ses yeux : http://assarconsulting.blogspot.ca/2012/02/thats-not-agile.html
- Les risques associés à l'estimation du temps dans une approche
agile, par Ron Jeffries en 2013 :
http://pragprog.com/magazines/2013-02/estimation-is-evil
- En 2013, Jim Bird indique sept aspects de
l'approche Agile que vous pourriez très bien ne pas appliquer selon lui :
http://swreflections.blogspot.ca/2013/05/7-agile-best-practices-that-you-dont.html
- Jim Bird prétend, dans ce texte de 2013, que l'approche Agile peut
entraîner une forme d'Alzheimer :
http://swreflections.blogspot.ca/2013/07/agile-development-leads-to-alzheimers.html
- Qu'entend-on par « documentation agile »?
http://www.sparcedge.com/agile-documentation-not-an-oxymoron/
- Dans cette entrevue de 2015 avec Tim
Anderson,
Erik Meijer
s'estime d'avis que « Agile doit mourir » :
http://www.theregister.co.uk/2015/01/08/erik_meijer_agile_is_a_cancer_we_have_to_eliminate_from_the_industry
- Le « manifeste fragile », texte de 2015 :
https://m4i3.wordpress.com/manifesto-for-fragile-software-development/
Est-ce la fin de l'approche agile?
L'acte de programmer – gestion de carrière
- Comment faire passer une entrevue à un programmeur? Quelques experts
se prononcent sur le sujet, en 2003 : http://www.artima.com/wbc/interprogP.html
- Réflexions sur le rôle et la tâche de programmeur :
- À propos du rôle d'architecte logiciel :
- À propos des salaires, un texte de Derek Thurn en
2011 : http://www.thurn.ca/the_programmer_salary_taboo
- Selon Dave Fecak en 2014, les programmeurs
sont trop bien payés :
http://jobtipsforgeeks.com/2014/01/23/overpaid/
- Comment les ressources humaines liront votre curriculum vitae...
comment les autres programmeurs le liront : http://www.hanovsolutions.com/resume_comic.png
- Réflexions sur la longévité des programmeurs, par Davy
Brion en 2011 : http://davybrion.com/blog/2011/03/thoughts-on-developer-longevity/
- En 2012, Neil McAllister se questionne à
savoir s'il est vrai que les programmeurs plus âgés ne se trouvent
plus de travail : http://www.infoworld.com/d/application-development/where-do-all-the-old-programmers-go-191766
- Conseils pour atteindre le bonheur en programmant, selon Alex Payne en
2008 : http://al3x.net/2008/09/08/al3xs-rules-for-computing-happiness.html
- Le chemin pour devenir un hacker, par Kurtis Rainbolt-Greene en
2011 : http://krainboltgreene.heroku.com/log/2
- Programmer, dépression et Burn-Out, par Lance Cameron Kidwell
en 2011 : http://muddylemon.com/2011/05/depression-burn-out-and-writing-code/
- Gestion de carrière et paix intérieure, un essai de Rahul
Bijlani en 2010 : http://rahulbijlani.com/essays/you-are-not-running-out-of-time-essay/
- L'éthique du programmeur, selon Scott Raymond en
2010 : http://www.zdnet.com/blog/perlow/ethics-of-code/13961
- Concevoir une présentation de type Screencast, par Scott
Hanselman en 2011 : http://www.hanselman.com/blog/TheGuideToCreatingQualityTechnicalScreencasts.aspx
- Comment « monter de niveau » en tant que programmeur,
selon Jason Rudolph en 2011 : http://jasonrudolph.com/blog/2011/08/09/programming-achievements-how-to-level-up-as-a-developer/
- Avdi Grimm, en 2011, dans une « lettre
aux jeunes programmeurs », suggère lui aussi des trucs pour
« montrer de niveau » en tant que programmeur :
http://avdi.org/devblog/2011/08/19/letter-to-a-young-developer/
- Selon Mike Champion, en 2011, le marché
du travail est toujours accueillant pour les informaticiennes et les informaticiens :
http://graysky.org/2011/09/software-developer-job-market/
- Gérer les priorités et l'urgence, selon Reg Braithwaite en
2011 : http://raganwald.posterous.com/javas-comb-over
- Devenir un « programmeur graphique », selon Keith
Judge en 2011 : http://altdevblogaday.com/2011/05/10/so-you-want-to-be-a-graphics-programmer/
- Devenir un programmeur dans le monde du jeu vidéo, une série
d'articles par Andy Gavin en 2011 :
- Réapprendre C++
après l'avoir quitté pendant plusieurs années, un texte
de Josh Reuben en 2011 : http://geekswithblogs.net/JoshReuben/archive/2011/10/29/post-build-c-skill-rebuild.aspx
- Les programmeurs sont-ils des extravertis? La position de Greger Wikstrand
en 2011 : http://www.gregerwikstrand.com/blog/2011/09/15/extroverted-programmers/
- En 2011, Patrick McKenzie offre quelques conseils
de gestion de carrière, dont « ne vous qualifiez pas vous-mêmes
de programmeurs » : http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/
(c'est un texte déprimant par moments, mais qui contient des éléments
de sagesse; le plus important, à mon avis, est que ce sont les aptitudes
en communication qui comptent le plus dans une carrière en informatique
– les problèmes sont complexes, les tâches sont immenses,
et pratiquement tout se fait en équipe pour tout ce qui ressemble
à un projet de taille décente pour une application commerciale)
- Réflexion portant sur le respect des échéances de livraison
pour un programmeur, par Randall Degges en 2011 :
http://rdegges.com/on-programming-deadlines
- Dans le même ordre d'idées, en 2012,
Swizec Teller explique qu'à son avis, les programmeurs sont (trop)
optimistes dans leur évaluation du temps requis pour accomplir une
tâche : http://swizec.com/blog/programmers-are-optimists/swizec/4509
- En 2011, David Eisinger décrit ce qui
constitue à ses yeux un développeur équilibré :
http://www.viget.com/extend/the-balanced-developer/
- Comment ne pas perdre son temps? Une opinion de Jason Freedman en
2011 : http://www.humbledmba.com/dont-waste-time
- En 2011, Bartosz Milewski nous rappelle que
« matériel intéressant » n'implique pas
nécessairement « tâche intéressante » :
http://bartoszmilewski.wordpress.com/2011/11/21/supercomputing-an-industry-in-need-of-a-revolution/
- Neuf choses qu'un programmeur professionnel fait, selon Christoffer Pettersson
en 2011 (qui tire ses idées du livre The
Clean Coder: A Code of Conduct for Professional Programmers par
Robert C. Martin) : http://blog.christoffer.me/2011/11/9-things-i-learned-from-reading-clean.html
- Notez que tout comprendre n'est plus possible, selon James Hague en
2012 : http://prog21.dadgum.com/129.html
- Texte assez particulier sur la maladie mentale (même si ce n'est pas
évident au premier regard), par Chris McKenzie en
2012 : http://qaa.ath.cx/LoseThos.html
- Votre et code et vous êtes deux choses différentes, comme le
rappelle Zach Moazeni en 2012 : http://collectiveidea.com/blog/archives/2012/03/16/your-identity-your-code/
- Sur la question des NDA, ou Non-Disclosure
Agreements, que les informaticiennes et les informaticiens se font fréquemment
demander de signer :
- Texte détaillé expliquant, du point de vue de Robert L. Read
en 2002 et en 2003,
comment devenir (ou plutôt, « comment être »)
un programmeur : http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
- Le monde change rapidement, à plus forte partie en informatique,
mais comme le rappelle James Hague en 2012, il
change peut-être moins rapidement qu'on ne le pense : http://prog21.dadgum.com/140.html
- Un programmeur n'est pas que le cumul de ses aptitudes techniques, comme
nous le rappelle Martin Anderson en 2012 :
http://bloodredsun.com/2012/08/01/not-sum-of-technical-skills/
- Programmer en période de jeune (par exemple, durant le Ramadan, pour
celles et ceux qui le pratiquent), un texte de Mahdi Yusuf en 2012 :
http://www.mahdiyusuf.com/post/28530166837/fasting-programming
- Cinq surprises qui attendent la programmeuse ou le programmeur en début
de carrière, selon Henrik Warne en 2012 :
http://henrikwarne.com/2012/08/22/top-5-surprises-when-starting-out-as-a-software-developer/
- Éviter le burnout, texte de 2012 :
http://disruptiontheory.com/go-home-already-dont-let-burnout-happen-to-you/
- En 2012, James Hague soulève une question
importante, à savoir « est-ce que programmer est quelque
chose que vous souhaiterez encore faire à 50 ans? »,
laissant entendre que la résolution intensive de problèmes est
« pour les jeunes » :
http://prog21.dadgum.com/154.html. Sans grandes surprises, il y a des
réactions :
- Estimer le temps qu'il faudra pour réaliser une tâche de programmation,
par Anders Abel en 2012 : http://coding.abel.nu/2012/06/programmer-time-translation-table/?repost
- Réflexion de Yakov Fain en 2012 sur ce
qu'indiquent certains programmeurs sur leur curriculum vitae en lien avec
la réalité, et sur une vision de la programmation : http://yakovfain.com/2012/10/11/the-degradation-of-java-developers/
- À propos de l'importance de se fixer des objectifs, un texte de
2012 :
http://blog.buildbettersoftware.com/post/35091174820/as-a-developer-setting-expectations-is-the-single-most
- Le mythe du hacker solitaire, décrit par Ashton Kemerling en
2012 :
http://ashtonkemerling.com/2012/11/27/the-myth-of-the-lone-hacker/
- Être intelligent est important, mais il faut livrer la marchandise. Texte
de Reginald Braitwaithe en 2012 :
https://github.com/raganwald/homoiconic/blob/master/2011/12/smart-and-gets-things-done-is-necessary-but-not-sufficient.md
- Texte de 2012 par Henrik Warne sur ce que cela
signifie d'être une programmeuse ou un programmeur :
http://henrikwarne.com/2012/12/12/working-as-a-software-developer/
- Quelques conseils de gestion de carrière prodigués par Steve Salter en
2013 :
http://objrefnotset.blogspot.ca/2013/03/programming-in-real-world.html
- Ce qui fait que certains programmeurs deviennent des « débutants experts »
et restent là, par Erik Dietrich en 2012 :
- À qui devrait appartenir le code?
- l' opinion de Jim Bird en 2013
- Comment s'articule la gestion du temps des programmeuses et des
programmeurs? Un article de Lauren Orsini en 2013 :
http://readwrite.com/2013/04/25/how-software-developers-really-spend-their-time
- Gérer son temps en travaillant à distance, un texte de Mark Campbell en
2013 :
http://markcampbell.me/tutorial/2013/05/23/how-to-work-remotely.html
- Obtenir un poste chez Google sans diplôme? Texte de David Byttow en
2013 :
https://medium.com/this-happened-to-me/8f381aa6bd5e
- Aider les programmeurs novices à « prendre le rythme », un texte d'Esther
Schindler en 2013 :
http://www.mendix.com/think-tank/tips-for-bringing-novice-developers-up-to-speed/
- Quelle est la valeur du travail accompli par une programmeuse ou par un
programmeur? Un texte de James Somers en 2013 :
http://www.aeonmagazine.com/living-together/james-somers-web-developer-money/
- Comment « monter de niveau » en tant que programmeur, un texte de Matt
Fisher en 2013 :
http://mjfisher.net/articles/levelling_up_as_a_developer/
- En 2013, Brendan Sterne recommande aux gens de
faire ce pour quoi ils ont été engagés... Do The Right Thing, dans ses mots,
et si personne ne vous renvoie, c'est que vous avez bien agi (sinon, selon
lui, vous aviez le mauvais employeur) :
http://brendansterne.com/2013/07/11/do-the-right-thing-wait-to-get-fired/
- Combien « charger » à vos client?
- Comment ne pas tomber dans le piège de se prendre pour un expert,
texte de Tyr Chen en 2013 :
https://medium.com/i-m-h-o/231d7499a75
- À propos de l'importance de savoir communiquer en anglais, texte de Pavel Volgarev en
2013 :
http://volgarev.me/blog/why-knowing-english-is-important-for-every-software-developer
- Estimer le temps requis pour réaliser une tâche lorsque l'on est
imputable, un texte de Dan Milstein en 2013 :
http://blog.hut8labs.com/no-deadlines-for-you.html
- Qui sont les développeurs? Étude démographique par Janel Garvin en 2013 :
http://www.drdobbs.com/architecture-and-design/who-are-software-developers/240162014
- Quelques conseils pour un jeune programmeur, texte de
2013 :
http://www.gamedev.net/blog/355/entry-2258769-advice-to-a-young-programmer/
- Quelques conseils pour un programmeur indépendant à Montréal, série de
textes par mon ancien étudiant et ami Julien Gilli :
- Quelques conseils de gestion de carrière par Nicholas C. Zakas en
2013 :
http://www.nczonline.net/blog/2013/10/15/the-best-career-advice-ive-received/
- Stabilité ou innovation? Réflexion de Reginald Braithwaite en 2013 :
http://braythwayt.com/2013/11/27/herd-thither-me-hither.html
- En 2014, Shamoon Siddiqui explique pourquoi,
selon lui, votre expérience actuelle en entreprise est certainement bien
meilleure que la précédente :
https://medium.com/@shamoons/why-your-previous-developer-was-terrible-506a06ae35ea
- Selon Ashton Kemerling en 2014, mieux vaut
diversifier vos horizons :
http://ashtonkemerling.com/blog/2014/06/09/the-swordsman-and-the-software-engineer/
L'acte de programmer – Productivité
Un programmeur est-il productif? Que signifie cette question?
À quel point est-ce pertinent de mesurer la productivité des
programmeuses et des programmeurs? Comment y arriver?
Accroître sa productivité :
L'acte de programmer – technique
- Un Wiki sur les types de structures de contrôle en programmation :
http://en.wikipedia.org/wiki/Category:Programming_constructs
- Questionnement sur l'abus de constantes symboliques et d'alias sur des types
là où des littéraux et des types plus primitifs pourraient
être préférables :
- Sur la détection de cycles et les tortues qui se téléportent :
http://www.penzba.co.uk/Writings/TheTeleportingTurtle.html
- Sur le concept de null/NULL/nil/Nothing/nullptr etc. :
- Proposition de principes de bonne programmation :
- Sept raisons d'haïr votre code, écrit en
2010 : http://coderoom.wordpress.com/2010/04/22/7-reasons-to-hate-your-code/
- Le problème avec les outils, un texte de Mike Taylor en
2010 : http://pragprog.com/magazines/2010-04/tangled-up-in-tools
- Un mouvement pour programmer sans
IDE :
http://www.secretgeek.net/NoVS.asp
- Dix trucs qui agacent les programmeuses et les programmeurs, texte de
2008 : http://www.kevinwilliampang.com/2008/08/28/top-10-things-that-annoy-programmers/
- Des croyances malsaines qu'entretiennent les programmeuses et les programmeurs
au sujet des noms des individus, texte de 2010 :
http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/
- Sur la beauté du code inefficace, par Niraj Chokshi en
2010 : http://www.theatlantic.com/technology/archive/2010/07/the-beauty-of-inefficient-code/60613/
- Sur les limites des compilateurs
à produire des avertissements devant du code suspect, selon
Eric Lippert
en 2011 : http://blogs.msdn.com/b/ericlippert/archive/2011/03/03/danger-will-robinson.aspx
- Avoir le courage de supprimer du code, un texte de
2011 : http://horia.me/on-deleting-code?utm_source=hn
- Pourquoi a-t-on besoin de modules? Une réflexion de Joe
Armstrong, en 2011 : http://erlang.org/pipermail/erlang-questions/2011-May/058769.html
- Programmer comme s'il n'y avait pas de cas particuliers, une proposition
de James Hunt en 2011 : http://ohthatjames.github.com/2011/05/22/there-are-no-special-cases/
- Quelques extraits du volume C++
Coding Standards, par Herb
Sutter et Andrei
Alexandrescu : http://www.artima.com/cppsource/codestandards.html
- Un script pour mesurer le couplage dans un programme C++ :
http://bfish.xaedalus.net/2010/02/a-script-for-measuring-the-coupling-in-your-c-design/
- Quelques réflexions tirées d'entrevues avec Scott
Meyers entre 2002 et
2003 :
- Écrire du code général, c'est une bonne chose, dans
la mesure où c'est fait de manière pragmatique, sinon... Une
réflexion de Tomasz Dabrowski en 2011 :
http://altdevblogaday.com/2011/04/01/vicious-circle-of-generalization/
- Diverses pratiques répandues mais particulières, telles que
les « conditions Yoda » ou la « gestion d'exceptions
de type Pokémon », répertoriées en
2011 : http://www.dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
- En 2011, Carlos Oliveira discute de la saine
pratique d'isoler les dépendances dans le code : http://coliveira.net/software/day-23-isolate-code-dependencies/
L'acte de programmer – qualité

- Le goto est-il toujours aussi dommageable que
le prétendait Dijkstra?
- Sur les textes qui s'intitulent « ... Considered Harmful » :
http://jeff.over.bz/?04_Miscellaneous/03_Considered_Harmful
- La réécriture de code considérée dommageable,
selon Neil Gunton en 2011 : http://www.neilgunton.com/doc/rewrites_harmful
- Réduire la quantité d'états statiques dans les programmes;
une réflexion de Gilad
Bracha, en 2008 : http://gbracha.blogspot.com/2008/02/cutting-out-static.html
- Sur la distinction entre Software Engineeering et Computer
Science :
- Élimination des bogues dans le Firmware, texte de
2009 : http://www.eetimes.com/discussion/other/4008255/Bug-killing-standards-for-firmware-coding
- Avec le temps, le code pourrit, un texte de 2009 :
http://wordaligned.org/articles/code-rot
- Pourquoi le logiciel plante, et ce qu'il faut faire pour régler ce
problème, selon Chuck Connell en 2010 :
http://drdobbs.com/architecture-and-design/223700002
- « Votre code est mauvais » nous indique Sarah Chipps
en 2010 : http://www.girldeveloper.com/2010/07/your-code-sucks.html
- Accepter que notre code est mauvais, selon Jared Richardson en
2010 : http://java.dzone.com/articles/youre-bad-programmer-embrace
- Comment écrire « les bonnes choses » ?
http://www.fastcompany.com/node/28121/print?
- À la défense du beau code, un texte de Maarten van Emden en
2010 : http://vanemden.wordpress.com/2010/10/05/in-defense-of-beautiful-code-2/
- Dix dangers du code malpropre, selon Chad Austin en
2008 : http://chadaustin.me/2008/10/10-pitfalls-of-dirty-code/
- Sept raisons de produire du code propre, par Cory House en
2013 :
http://blog.pluralsight.com/7-reasons-clean-code-matters
- Douze erreurs de programmation à éviter, selon Peter Wayner
en 2010 : http://www.infoworld.com/d/developer-world/12-programming-mistakes-avoid-292
- Quelques péchés de programmation, par des praticiens experts
dans le monde du jeu vidéo (texte de 2011 par
quelques auteurs) : http://www.gamasutra.com/view/feature/6426/sponsored_feature_programming_.php
- Est-il impossible d'écrire du bon code? Textes de John Blanco en
2010 :
- Au sujet de la difficulté de faire accepter l'analyse statique, un
texte de John Regehr en 2010 : http://blog.regehr.org/archives/259
- En 2012,
John Regehr s'interroge sur le moment
où la vérification formelle de programmes comptera vraiment
aux yeux des décideurs : http://blog.regehr.org/archives/710
- Selon John
Carmack, en 2011, ne pas avoir recours à
l'analyse statique est pratiquement irresponsable : http://altdevblogaday.com/2011/12/24/static-code-analysis/
- Sur la complexité de régler un bogue, un texte d'Eric Lippert
en 2003 : http://blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298.aspx
- Le code réutilisable est une mauvaise chose, surtout s'il finit par
ne pas servir, selon Mike Mooney en 2010 :
http://mooneyblog.mmdbsolutions.com/index.php/2010/07/30/reusable-code-is-bad/
- N'écrivez pas du code pour qu'il soit réutilisable... À moins qu'il ne
s'agisse d'une solution vraiment novatrice. C'est du moins l'avis d'Elliotte
Rusty Harold en
2013 :
http://cafe.elharo.com/programming/dont-design-for-reuse/
- Réduire le gaspillage, un texte de Hamlet D'Arcy en
2011 : http://www.canoo.com/blog/2011/03/08/waste/
- Comment Microsoft développe du logiciel, selon David Gristwood
en 2004 : http://blogs.msdn.com/b/david_gristwood/archive/2004/06/24/164849.aspx
- La taille du code sera le meilleur prédicateur de qualité,
selon Vivek Halder en 2011 : http://blog.vivekhaldar.com/post/10669678292/size-is-the-best-predictor-of-code-quality
- Des signes que vous êtes un mauvais programmeur, selon C. Lawrence
Wenham en 2011 : http://www.yacoset.com/Home/signs-that-you-re-a-bad-programmer
- Mieux vaut régler un bogue dès qu'on le rencontre, pour éviter
que le mauvais code ne s'accumule, du moins de l'avis de Bozhidar Bozhanov
en 2011 : http://techblog.bozho.net/?p=725
- Un article de 2011 par Patrick Thibodeau qui
prétend qu'un langage a moins de bogues qu'un autre, ce qui est plus
ou moins intéressant, mais les raisons suggérées par
les analystes, elles, sont intéressantes : https://www.computerworld.com/s/article/9222503/Java_apps_have_most_flaws_Cobol_apps_the_least_study_finds
- Y a-t-il des moments dans l'année où le code rédigé
est de moins bonne qualité? Il semble que oui, selon Fergal Glynn en
2011 : https://threatpost.com/en_us/blogs/quality-coding-takes-break-holidays-why-122011
- Écrire du code robuste :
- Quelques outils pour améliorer la qualité des programmes :
- Sympathique réflexion de Christian Lindholm, en
2012, à l'effet qu'on ne devrait pas chercher à tirer
un « Wow! » de nos clients, mais bien chercher à
obtenir un « Bien entendu! » d'eux. Un bon design devrait
mener à quelque chose d'évident : http://om.co/2012/04/05/the-of-course-principle-of-design/
- À propos de la présentation du produit et de son impact sur
la perception de la qualité, une réflexion de Jordan Wages en
2012 : http://jordanwages.com/2012/03/29/presentation-matters/
- Réflexion de Scott Hanselman en 2012 sur
le fait que plus rien ne fonctionne vraiment et que trop peu de gens se plaignent.
Je suis assez d'accord avec lui : attendre après une machine me
rend très grognon. Cela explique sans doute que je sois critique de
plusieurs outils, de plusieurs langages de programmation et du fait que trop
de gens se satisfassent de programmes qui vont « suffisamment vite »
ou qui consomment beaucoup de mémoire car « il y en a suffisamment,
après tout » : http://www.hanselman.com/blog/EverythingsBrokenAndNobodysUpset.aspx
- Texte de John Somnez en 2012 sur
l'importance de réfléchir au « pourquoi » plutôt qu'au « quoi » dans le
design logiciel :
http://simpleprogrammer.com/2012/10/14/the-why-is-more-important-than-the-what/
- Existe-t-il une tension fondamentale entre efficacité et élégance? La
position de Yosef Kreinin (que je ne partage pas), en 2013 :
http://www.yosefk.com/blog/efficiency-is-fundamentally-at-odds-with-elegance.html
- En 2013, François Fortin exprime une opinion sur l'importance d'avoir la fierté
du travail de qualité :
http://www.letx.org/on-bad-code-and-pride/
- Texte de
Bjarne Stroustup en 2013 sur le
développement de code de qualité :
http://www.stroustrup.com/Software-for-infrastructure.pdf
- Texte de 2013 par Nolan Frausto à propos de ce
réflexe que nous avons souvent de critiquer le code que nous rencontrons :
http://www.fraustollc.com/blog/shit_code/
- Comme le dit Jeremy Ckahn en 2013, « Ship
it, but don't ship shit », donc restons prudent(e)s avec la qualité de ce
que nous produisons :
http://jeremyckahn.github.io/blog/2013/11/29/software-and-amplification/
- Rapporter des bogues :
Entretien
du code
En pratique, la plupart des informaticiens passent une part important de leur
temps à entretenir, adapter, raffiner, « refactoriser »,
corriger du code déjà écrit. Le soin apporté à
la rédaction initiale influence la suite des choses, mais l'entretien
du code est un art en soi. De saines pratiques de documentation
et d'indentation permettent d'alléger ce fardeau.
- Utiliser la connascence (la codépendance? la co-naissance?)
comme métrique de design logiciel, une suggestion de Gregory Brown
en 2011 : http://blog.rubybestpractices.com/posts/gregory/056-issue-24-connascence.html
- Écrire du code plus facile à entretenir? Une proposition de
Michael Williamson en 2011 : http://www.simple-talk.com/dotnet/.net-framework/writing-maintainable-code/
- Gérer la laideur lorsqu'elle se glisse dans nos sources, un texte
de 2011 : http://www.gamedev.net/blog/355/entry-2250790-there-are-many-kinds-of-ugly/
- On devrait enseigner l'entretien du code à l'école, selon
Isaac Schlueter en 2007 : http://isaacschlueter.com/2007/06/the-most-important-things-they-dont-teach-in-compsci-101-but-should-maintainability/
- En 2012, Russ Olsen relate le plus important
conseil qu'on lui ait refilé dans toute sa carrière de programmeur.
Littéralement : Stay the hell out of other people's code.
C'est pas bête : http://www.informit.com/articles/article.aspx?p=1926692
- Que faire lorsqu'on on hérite de code de qualité discutable? Une opinion
de Niklas Frykholm en 2012 :
http://www.gamasutra.com/view/news/176218/Indepth_Cleaning_bad_code.php
- Éliminer les zombies de nos programmes, ou les affres du code « mis en
commentaire », un texte de Cory House en 2012 :
http://www.bitnative.com/2012/10/22/kill-the-zombies-in-your-code/
- Optimiser pour l'évolutivité ou pour la stabilité? Un texte de Marcus Hammarberg
en 2013 :
http://www.marcusoft.net/2013/04/WhatDoYouOptimizeFor.html
- Dean Michael Berris, chez Google Australie, a dû faire de l'entretien
d'une bibliothèque de grande taille, de laquelle beaucoup de logiciels
dépendent. Dans ce texte de 2013, il offre ses
réflexions à ce sujet :
http://www.cplusplus-soup.com/2013/05/hiatus-and-reflections.html
- Paolo Torelli donne, dans ce texte de 2013, quelques conseils pour ce qui
est de l'entretien et de l'évolution des sources :
http://www.altdevblogaday.com/2013/07/24/theres-nothing-like-a-tidy-codebase/
- En 2013, Matt DuVall discute de ce qu'il nomme le « mythe de la
" maintenabilité " », et insiste sur
l'importance de livrer du logiciel opérationnel dès maintenant :
http://mattduvall.com/blog/myth-of-maintainability/
- Écrire du code impossible à entretenir, selon Greg Jorgensen en 2013 :
http://typicalprogrammer.com/how-to-develop-unmaintainable-software/
- À propos de l'importance de la modestie dans l'entretien du code,
réflexion de Ben Howell en 2014 :
http://www.benhowell.net/craft/2014/06/25/code-incomplete/
- Le code Zombie, qui attaque directement notre capacité de l'entretenir, un
texte de Steven A. Lowe en 2015 :
http://techbeacon.com/zombie-code-when-maintainability-goes-out-window

Refactoriser
Refactoriser est une activité importante pour les programmeuses et les
programmeurs.
-
http://en.wikipedia.org/wiki/Refactoring
- Ce que la « refactorisation » est, et n'est pas, un
texte de 2012 :
http://www.javacodegeeks.com/2012/04/what-refactoring-is-and-what-it-isnt.html
- Ce que « refactoriser » est, et ce que ce n'est pas, de l'avis de Swizec
Teller en 2012 :
http://java.dzone.com/articles/what-refactoring-and-what-it
- Refactoriser, soit, mais de manière responsable. Texte de David Bryant Copeland en
2013 :
http://www.naildrivin5.com/blog/2013/08/08/responsible-refactoring.html
- En quoi avoir plus de méthodes peut signifier avoir un meilleur
programme, par Henrik Warne en 2013 :
http://henrikwarne.com/2013/08/31/7-ways-more-methods-can-improve-your-program/
- Avec
C++ :
- Refactoriser pour « dompter les lapins », texte de Mark Bernstein en
2014 :
http://www.markbernstein.org/Mar14/RefactoringTamingTheBunnie.html
- Refactoriser du code vraiment très mauvais, texte de Brad Bollenbach en
2014 :
http://bugroll.com/ratcheting.html
- Adapter du code existant pour mieux utiliser un service tiers, par
Martin Fowler
en 2015 :
http://martinfowler.com/articles/refactoring-external-service.html
- Quand vaut-il mieux cesser de refactoriser? Une opinion de Joe Ferris en
2012 :
http://robots.thoughtbot.com/post/25853313661/how-much-should-i-refactor
- Quand faut-il « défactoriser »? Opinion de Reginald Braithwaite en
2013 :
http://raganwald.com/2013/10/08/defactoring.html
- À propos de la refactorisation des structures de contrôle, en particulier
les alternatives, texte de Drew Csillag (difficile de dire si c'est son vrai nom ou s'il s'agit d'un(e) fan de
Buffy ou
d'Angel) en
2014 :
https://drew.thecsillags.com/refactoring-flow-control-and-conditionals/
- Refactoriser pour survivre à l'enfer de la multiplication des paramètres,
par Daniel Bingham en 2014 :
https://ellislab.com/blog/entry/escape-from-parameter-hell
- Combattre la tentation de tout réécrire, texte de 2007
par Dharmesh Shah :
http://onstartups.com/tabid/3339/bid/2596/Why-You-Should-Almost-Never-Rewrite-Your-Software.aspx
- Survivre à une réécriture complète, par Dharmesh Shah en
2013 :
http://onstartups.com/tabid/3339/bid/97052/How-To-Survive-a-Ground-Up-Rewrite-Without-Losing-Your-Sanity.aspx
- Réduire le code en ajoutant de la fonctionnalité, par Edaqa Mortoray en
2014 :
http://mortoray.com/2014/07/08/removing-code-by-adding-features/
- Illustration du processus de refactorisation, par Ron Jeffries en
2014 :
http://ronjeffries.com/xprog/articles/refactoring-not-on-the-backlog/
- Constat de Fredrik Norén en 2014, que nous faisons tous un jour : trop généraliser est une perte de temps :
https://medium.com/@fredriknoren/on-generalization-608949214e63
- Gérer le code mort, par Wes Higbee en 2014 :
http://www.weshigbee.com/the-cost-of-dead-code-and-the-only-technique-you-need-to-know-to-clean-it-up/
- À propos des « grosses réécritures » et des mensonges à leur sujet, texte
de 2014 par Maurits van der Schee :
https://www.leaseweblabs.com/2014/09/lies-nessecity-big-rewrite/
- Certaines parties d'une interface ne peuvent être modifiées sans briser
le code existant, surtout quand elles dépendent d'éléments statiques. Texte
de Raymond
Chen en 2014 :
http://blogs.msdn.com/b/oldnewthing/archive/2014/10/10/10563736.aspx
- Texte de 2015 portant sur l'importance
pratique de la refactorisation :
http://www.codergears.com/Blog/?p=2211
- En 2015, Lindsey Kuper propose de refactoriser le code
pour mieux le comprendre :
http://composition.al/blog/2015/12/29/refactoring-as-a-way-to-understand-code/
- Texte du Code Project
par
Alasdair Craig en 2016, qui propose des techniques pour
réduire la duplication de code :
http://www.codeproject.com/Articles/1078771/Techniques-for-Avoiding-Code-Duplication
- En 2016, Andrew MacLeod relate son expérience
de refactorisation d'un en-tête de gcc qui était
très, très fortement couplé avec des tas de trucs qui auraient bénéficié de ne
pas s'y trouver associés :
https://developerblog.redhat.com/?p=419348
- Refactoriser pour « sauver » le code hérité (Legacy Code), texte
de Jeroen Moons en 2016 :
http://marketing.intracto.com/paying-technical-debt-how-to-rescue-legacy-code-through-refactoring
- En 2016, Brian Barto relate le choc qu'il a
vécu en examinant une prise de position, code à l'appui, formulée par
Linus
Torvalds à propos du « code de bon goût ». Le constat émanait d'une
critique d'un extrait de code réalisant de la gestion de noeuds dans une
liste simplement chaînée, et menait à une refactorisation simplifiant le code
en éliminant une alternative et en réduisant son envergure de . Fort intéressant :
hhttps://medium.com/@bartobri/applying-the-linus-tarvolds-good-taste-coding-requirement-99749f37684a
- Texte de 2017 par Rob Napier, qui parle de
l'intérêt de refactoriser en douceur :
http://robnapier.net/refactoring
Expérience et expertise
- Matrices de compétence de programmeuses et de programmeurs (l'une
aurait-elle été « inspirée » de
l'autre?) :
- Sur l'importance de comprendre les statistiques, par Zed
A. Shaw : http://www.zedshaw.com/essays/programmer_stats.html
- Trente leçon apprises avec l'expérience, un texte de
2010 : http://blog.mathgladiator.com/2010/10/30-lessons-learned-in-computing-over.html
- Commencer à programmer, un conseil de Joe
Armstrong en 2011 : http://erlang.org/pipermail/erlang-questions/2011-July/059966.html
- Des techniques de programmation d'une autre époque : http://www.computerworld.com/s/article/9132061/Old_school_programming_techniques_you_probably_don_t_miss
- Les seuils d'expertise de programmeurs Scala,
selon Martin
Odersky : http://www.scala-lang.org/node/8610
- Ce que les programmeuses et les programmeurs d'hier savent, et que celles
et ceux d'aujourd'hui devraient savoir, selon Daniel P. Dern en
2011 : http://www.itworld.com/print/190213
- Les programmeurs perdent-ils intérêt envers leur travail en
vieillissant? Le point de vue de Kent
Beck : http://www.quora.com/Do-people-lose-interest-in-programming-as-they-age/answer/Kent-Beck?srid=pRa
- Langages d'élite ou programmeurs d'élite? Un point de vue
de Michael Fogus en 2011 : http://blog.fogus.me/2011/10/02/the-elite-programming-language-fallacy/
- Raphaël Doré, en 2011, est d'avis
que les programmeurs, d'une génération à l'autre, en
savent de moins en moins sur les détails de bas niveau : http://freeworld.posterous.com/why-every-new-generation-of-programmers-are-b
- En 2012, un texte relatant que les programmeuses
et les programmeurs Old School ont ceci de particulier qu'elles/
ils parviennent à faire plus avec moins : http://www.dodgycoder.net/2012/07/old-school-developers-achieving-lot.html
- Qu'est-ce qu'un programmeur « bas niveau » devrait
savoir?
- Texte de 2004 par Randall Hyde décrivant
des raisons pour lesquelles apprendre la programmation en langage d'assemblage
demeure une bonne idée : http://onlamp.com/pub/a/onlamp/2004/05/06/writegreatcode.html
- Réflexions de Larry Osterman sur la relation entre les programmeurs
et le code machine généré par leurs compilateurs :
- Le programmeur mûr, selon Charles Bloom en 2011 :
http://cbloomrants.blogspot.com/2011/11/11-22-11-mature-programmer.html
- Devenir un grand programmeur, selon Mark Glenn en 2012 :
http://www.codefixes.com/2012/01/becoming-great/
- Il se passe quelque chose de vraiment pas chouette chez les programmeurs
contemporains, de l'avis de William Edwards en 2012 :
http://williamedwardscoder.tumblr.com/post/18065079081/cogs-bad
- Quel est le principal trait d'un grand programmeur? C'est un bon jugement,
du moins de l'avis de Tammer Saleh en 2011 :
http://www.engineyard.com/blog/2011/the-number-one-trait-of-a-great-developer/
- À quel point une solide compréhension de la théorie
des catégories (des groupes, des anneaux, etc.) rend-elle une programmeuse
ou un programmeur meilleur(e)? Opinion de Debasish Ghosh en
2012, avec code Scala
à l'appui : http://debasishg.blogspot.ca/2012/07/does-category-theory-make-you-better.html
- Vous vous estimez lent(e) lorsque vous programmez? Benjamin Barreth suggère
quelques raisons possibles dans ce texte de 2012 :
http://www.banterant.com/2012/08/7-reasons-why-youre-slow-programmer.html
- En 2012, John Sonmez est d'avis que chercher
le « super programmeur » est une cause vouée
à l'échec : http://simpleprogrammer.com/2012/08/12/the-myth-of-the-super-programmer/
- Selon Andrei
Alexandrescu en 2012, le programmeur expert
est d'abord est expert à devenir expert :
http://www.informit.com/articles/article.aspx?p=1945828
- Jeremy Morgan, dans ce texte de 2012, estime
que les programmeurs « d'avant » étaient meilleurs
que ceux « d'ajourd'hui » : http://www.jeremymorgan.com/blog/programming/the-programmers-before-us-were-better/
- Être un programmeur sénior, texte de 2012 :
http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/
- Il y a de la place pour les expert(e)s comme pour les ouvrières et les
ouvriers. Texte de Ted Neward en 2013 :
http://blogs.tedneward.com/2013/01/24/On+The+Dark+Side+Of+Craftsmanship.aspx
- Devenir expert(e) implique apprendre efficacement, de l'avis de Victor
Arias en 2013 :
http://victorarias.com.br/2013/05/16/learning-effectively.html
- En 2013, John Graham-Cummings relate comment
il programmait... en 1985 :
http://blog.jgc.org/2013/04/how-i-coded-in-1985.html
- S'acclimater à un nouveau Codebase, par Lars Avery en
2013 :
http://www.larsavery.com/blog/a-process-for-learning-a-new-codebase/
- Comment mesurer la productivité d'un programmeur? Texte de
Martin Fowler
en 2003 :
http://martinfowler.com/bliki/CannotMeasureProductivity.html
- Comment aborder la lecture d'une vaste quantité de code? Ce que propose
Ayende Rahien en 2013 :
http://ayende.com/blog/164129/reading-large-codebases
- Trucs pour améliorer sa pratique :
- Pour bien estimer le temps qu'il nous faudra pour réaliser une tâche de
programmation, mieux vaut multiplier nos estimés par π, selon Yossarian King
en 2013 :
http://www.altdev.co/2013/11/15/always-multiply-estimates-by-pi/
- Programmeurs étoiles et autres :
- Quelques leçons que peuvent nous enseigner les « anciens » de la
programmation, colligées par Peter Wayner en 2015 :
http://www.javaworld.com/article/2894748/core-java/7-timeless-lessons-of-programming-graybeards.html
- Le maître, l'expert et le programmeur, une fable de
Zed A. Shaw en
2015 :
http://zedshaw.com/archive/the-master-the-expert-the-programmer/
- Quel est le rôle d'une programmeuse ou d'un programmeur senior? Texte de
Matt Briggs en 2015 :
http://mattbriggs.net/blog/2015/06/01/the-role-of-a-senior-developer/
Apprentissage
- Apprendre à programmer n'est pas apprendre à être un
programmeur, de l'avis de Jacob Harris dans ce texte de
2011 : http://www.niemanlab.org/2011/11/in-praise-of-impractical-programming/
- Apprendre à programmer est difficile, comme l'indique en toute humilité
Michelle Bu en 2013 :
http://blog.michellebu.com/2013/03/21-nested-callbacks/
- Apprendre à apprendre, par John Somnez en 2012 :
http://simpleprogrammer.com/2012/09/23/learning-to-learn/
- Regarder son propre « vieux » code :
- En 2013, Joshua Kemp indique qu'à son avis,
il est normal qu'un « nouveau » développeur écrive du code de piètre qualité :
http://joshuakemp.blogspot.ca/2013/12/why-new-developers-should-write-crappy.html
- Distinguer « apprendre à programmer » et « apprendre l'informatique »,
par Terence Eden en 2014 :
http://shkspr.mobi/blog/2014/02/learning-to-code-vs-learning-computer-science/
- Peter
Norvig, dans ce texte Teach Yourself Programming in Ten Years,
recommande de prendre son temps pour bien comprendre ce que nous faisons :
http://norvig.com/21-days.html
- David Chisnall, dans ce texte de 2013,
recommande aux nouveaux programmeurs de choisir leur premier langage avec soin
(je me permets d'indiquer qu'en pratique, c'est probablement la vie qui le
choisira pour vous) :
http://www.informit.com/articles/article.aspx?p=2166724
- L'évolution d'un programmeur, texte humoristique de Sean Hickey en
2013 :
https://medium.com/@webseanhickey/the-evolution-of-a-software-engineer-db854689243
- Gérer sa propre évolution en tant que programmeuse ou en tant que
programmeur, selon Andrew Wulf
en 2014 :
http://thecodist.com/article/your_progress_as_a_programmer_is_all_up_to_you
Mentorat
Questions de documentation
Cette section est devenue une page à part entière :
Documentation.html
Questions de nomenclature
Cette section est devenue une page à part entière :
Nomenclature.html
La question des commentaires
Cette section est devenue une page à part entière :
Commentaires.html
La question de l'indentation
Cette section est devenue une page à part entière :
Indentation.html
Quelques standards de programmation au sens large
Cette section est devenue une page à part entière :
Standards-programmation.html
Développement d'une
API
Cette section est devenue une page à part entière :
API.html
Bien programmer
Quelques réflexions sur la question de la bonne programmation (au sens large) :
- Comment écrire du code facile à entretenir :http://www.squarebox.co.uk/download/javatips.html
- Comment ne pas écrire en Fortran,
peu importe le langage : http://queue.acm.org/detail.cfm?id=1039535
- Prendre son temps : http://www.ibm.com/developerworks/websphere/techjournal/0508_col_johnson/0508_col_johnson.html?ca=drs-
- S'apprendre à programmer... en dix ans (de Peter
Norvig) : http://www.norvig.com/21-days.html
- Écrire du code portable : http://www.theregister.co.uk/2006/11/19/cross_platform_development_win_mac/
- Pourquoi programmer est-il si difficile? http://www.cioinsight.com/c/a/Expert-Voices/Scott-Rosenberg-What-Makes-Software-So-Hard/
- Six manières d'écrire du code plus compréhensible :
http://www.ibm.com/developerworks/linux/library/l-clear-code/?ca=dgr-FClnxw01linuxcodetips
- Comment recycler et réutiliser le code : http://www.htmlist.com/articles/the-lazy-clever-programmer-a-compendium-of-code-reuse-and-recycling/
- http://www.codinghorror.com/blog/2009/02/the-ferengi-programmer.html
- Pratiques de programmation : http://www.omninerd.com/articles/Coding_Practices
- Le Koan de la programmation
Unix (de Éric
S. Raymond) : http://catb.org/~esr/writings/unix-koans/index.html
- Apprendre à bien programmer, selon Jason Brennan : http://nearthespeedoflight.com/article/rudiments_of_computer_science:_learning_to_write_code_well
- Une des principales qualités d'un bon programmeur, selon Tammer Saleh
en 2011, est un bon jugement : http://www.engineyard.com/blog/2011/the-number-one-trait-of-a-great-developer/
- Devenir un bon programmeur en six étapes très ardues, un texte
de 2011 : http://www.gamedev.net/blog/355/entry-2250592-become-a-good-programmer-in-six-really-hard-steps/
- Selon Mike Grouchy en 2012, un bon programmeur
est celui qui écrit moins de code : http://mikegrouchy.com/blog/2012/06/write-less-code.html
(ce qui s'apparente au principe de paresse)
- Quelques signes que vous êtes un bon programmeur, texte de C. Lawrence
Wenham en 2012 : http://www.yacoset.com/Home/signs-that-you-re-a-good-programmer
- À propos de la distinction entre un bon programmeur et un grand programmeur,
un texte de Andrew Binstock en 2012 : http://www.drdobbs.com/architecture-and-design/240001472
- Réflexion de Henrik Warne en 2014 sur ce qui
fait d'un programmeur un bon programmeur :
http://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/
- En 2010, Jonathan Danylko répertorie
une série de saines pratiques simples qu'un bon programmeur devrait,
selon lui, intégrer : http://www.dcs-media.com/Archive/20-20-top-20-programming-lessons-ive-learned-in-20-years-FH
- comment ne pas écrire du Fortran...
peu importe le langage, une réflexion sur la bonne programmation (surtout
sur le plan de l'écriture) par Donn Seeley en
2004 : http://queue.acm.org/detail.cfm?id=1039535
- Sept habitudes qu'ont les programmeurs efficaces, de l'avis de Philip Chu
en 2012 : http://drupal.technicat.com/writing/programming.html
- Ensemble de bonnes pratiques de programmation, article de Jonathan
Callahan en 2013 qui résume quelques éléments clés
d'un texte plus touffu d'un collectif d'auteurs (avec lien sur le texte en
question, si vous souhaitez en savoir plus) :
http://java.dzone.com/articles/best-best-practices-ever
- Une archive d'extraits de code dans plusieurs langages, extraits jugés
intéressants (par Keith Schwartz, qui tient l'archive à jour) :
http://www.keithschwarz.com/interesting/
- Cinq conseils de Vic Cherubini en 2013. Vous
remarquerez que suivre ses conseils nous rapproche des pratiques de la
programmation fonctionnelle :
https://leftnode.com/blog/five-tips-to-make-your-code-better.html
- Présentation par Arjan van Leeuwen en 2014 sur
l'évolution du « bon code », mettant de l'avant le caractère relatif et
évolutif de ce qui est « bon » :
http://fr.slideshare.net/ArjanvanLeeuwen/evolution-of-good-code-33441353
- Les risques de la programmation par copier/ coller, rapportés par
Eric Lippert
en 2014 :
http://ericlippert.com/2014/07/17/copy-paste-defects/
- Texte de 2014 mettant de l'avant que le bon
code est parfois du code ennuyant :
http://programmingisterrible.com/post/102153932958/how-i-write-software
- Quelques conseils simples mais organisés de manière intelligente et
productive, proposés par
Howard
Hinnant en 2014 :
http://howardhinnant.github.io/coding_guidelines.html
Gestion des erreurs
Les liens et les réflexions sur ce sujet ont été groupés dans
Gestion-erreurs.html
Assertions dynamiques
Les liens et les réflexions sur ce sujet ont été groupés dans
Gestion-erreurs.html#assertion_dynamique
Préconditions, postconditions, invariants
Dans la documentation d'une unité de code telle qu'une fonction ou une classe, il est d'usage de porter une
attention particulière aux caractéristiques suivantes :
Au sens de son interface, les préconditions d'une fonction en sont les a priori, ce
que la fonction tient pout acquis, parfois même sans pouvoir les valider. C'est
une forme de contrat destiné au code appelant. Par
exemple, une fonction comme strlen() à droite ne peut garantir que s pointe
sur une adresse valide au préalable (seul le code client peut offrir
cette garantie), mais elle peut toutefois garantir que s
soit non nul (ici, par une assertion dynamique).
Faire connaître ses a priori au code client est une responsabilité de chaque fonction. En étant
informé, le code client devient responsable de les respecter. Concrètement,
un client qui n'est pas en mesure
de respecter les préconditions d'une fonction est en erreur s'il utilise celle-ci malgré tout.
Au sens de son implémentation, les préconditions
d'une fonction décrivent ce à quoi l'appelé est en droit de s'attendre au
moment où l'appel est initié, ce sur quoi l'appelé peut compter a priori.
| //
// pre: s non nul
// pre: s pointe sur une séquence contiguëe
// en mémoire de caractères
//
std::size_t strlen(const char *s) {
assert(s);
using std::size_t;
size_t n = 0;
for(; *s, ++s)
++n;
return n;
}
|
Les postconditions d'une fonction sont les garanties
qu'offre cette fonction à qui s'en sert correctement, donc en respectant ses préconditions.
Au sens de l'interface, elles décrivent ce à quoi l'appelant peut
s'attendre comme effet de l'exécution de la fonction. Au sens de
l'implémentation, elles décrivent ce à quoi l'appelé s'engage avant de
retourner le contrôle à l'appelant.
Par
exemple, une fonction comme sqrt() à droite exige
que son paramètre r soit strictement positif
(précondition), et garantit en retour que la valeur
retournée, si elle est élevée au carré, sera proche de
celle de r (postcondition).
| //
// pre: r > 0
// post: abs(résultat^2-r) <= ε
//
double sqrt(double r) {
assert(r>0.0);
// etc.
}
|
Comme l'indique
Scott Meyers dans
Effective
Modern C++ :
« It's worth noting
that some library interface designers distinguish functions with wide
contracts from those with narrow contracts. A function with a wide contract has no preconditions. Such a function may be called regardless of the state
of the program, and it imposes no constraints on the arguments that callers
pass it. Functions with wide contracts never exhibit
undefined behavior. Functions without wide contracts have narrow
contracts. For such functions, if a precondition is violated, results are
undefined. »
Ceci donne un aperçu d'une approche pour la documentation de fonction avec (ou sans) préconditions.
Enfin, les invariants d'une classe sont les
caractéristiques qui s'avèreront pour toute instance de ce type entre deux
appels de méthodes, et ce de la fin de sa construction au début de sa
finalisation. Garantir le respect des invariants est la clé de voûte de
l'encapsulation.
Les invariants d'un type ne sont pas garantis pendant sa construction, pas
plus qu'ils ne le sont pendant sa destruction, du fait que ce sont justement
des périodes de fluctuation pour ses états. De même, les
invariants d'un type peuvent ne pas être respectés pendant l'exécution
d'un appel de méthode, mais il est de la responsabilité dudit type de
s'assurer que, suite à un tel appel, et peu importe comment l'appel se sera conclu
(fin normale, retour hâtif, levée d'exception, etc.), les invariants
de ce type demeureront respectés.
Un exemple typique d'invariant pour une tableau dynamique serait que sa
capacité soit supérieure ou égale au nombre d'éléments qu'il contient.
Il importe qu'un tel invariant s'avère à la fin de chaque constructeur, incluant le
constructeur par défaut, de même que suite à l'exécution de toute méthode
susceptible de modifier la structure sous-jacente du tableau.
Un invariant est aussi ce que l'on vérifie dans la condition d'une
répétitive. En effet, dans les cas à droite, le corps de la
répétitive (le traitement) est exécuté seulement si la condition de poursuite
s'avère. Pour cette raison, avec une répétitive correctement construite, la
condition de poursuite représente un invariant qui est présum¸é tenir pour la durée de l'itération courante du
traitement. Cet argument explique entre autres pourquoi il est prééférable de
suivre la forme classique, selon laquelle les éléments testés dans la condition
de poursuite ne devraient normalement pas changer pendant le traitement de la
répétitive : la condition est présumée s'avérer du début à la fin d'une
itération du traitement (ceci explique aussi en partie pourquoi les boucles do...while
sont moins utilisées que d'autres formes répétitives en pratique : leur invariant est validé à la fin du traitement!).
Par exemple, parcourant un conteneur, si la condition est de poursuivre tant
que le conteneur n'est pas vide, alors il est raisonnable de ne pas changer cet
état avant la toute fin de l'itération en cours. Si la condition est i<N, alors
mieux vaut ne faire ++i qu'à la fin de l'itération car cette expression
pourrait faire en sorte que l'invariant vérifié par cette condition devienne
faux. | template <class T, class F>
void appliquer_et_vider(vector<T> v, F fct) {
while(!v.empty()) {
fct(v.back());
v.pop_back();
}
}
| template <class T, class Pred>
typename vector<T>::size_type
compter_si(const vector<T> &v, Pred pred) {
using size_type = typename
vector<T>::size_type;
size_type n = 0;
for(size_type i = 0; i < v.size(); ++i)
if (pred(v[i]))
++n;
return n;
}
| template <class T, class Pred>
typename vector<T>::size_type
compter_si(const vector<T> &v, Pred pred) {
using size_type = typename
vector<T>::size_type;
size_type n = 0, i = 0;
while (i < v.size()) {
if (pred(v[i]))
++n;
++i;
}
return n;
}
|
Les préconditions, postconditions et invariants peuvent être documenté(e)s à
travers des commentaires, des assertions (statiques ou dynamiques), ou des
validations suivies de potentielles levées d'exceptions. Dans une
hiérarchie de classes, l'idiome NVI
peut faciliter la validation des préconditions et des postconditions à
partir d'une même classe racine. La clause noexcept
est une forme normée
de postcondition.
Quelques textes pertinents sur le sujet :
Programmation par contrats
La programmation par contrats met de l'avant la pratique selon laquelle il
importe de documenter, idéalement à même le code, les
préconditions
et les postconditions de nos fonctions, de même parfois que les effets
secondaires qu'entraîne leur exécution. Certains langages, en particulier
Eiffel,
offrent un support direct de ce concept (voir
http://www.eiffel.com/developers/design_by_contract.html pour des détails).
Mal programmer
Savoir comment (ne pas) mal programmer est presque aussi utile que savoir comment bien le faire. À ce sujet...
Bourdes et bêtises
Il est parfois sage de réinventer la roue. Cependant, il arrive que l'on
s'empêtre alors en perdant de vue l'objectif réel de notre démarche. Un cas
vécu, relaté en 2013 :
http://www.drmaciver.com/2013/03/what-the-fuck-are-we-doing/
À propos du code spaghetti
Le code spaghetti est ce code entremêlé qui est si difficile à lire et à entretenir. Quelques liens sur le sujet :
Débogage
Cette section est devenue une page à part entière :
Debogage.html