Une question parmi celles qui tendent à revenir souvent autour de moi est « J'aimerais lire un peu plus sur ce sujet, que me suggères-tu? ».
Voici donc une liste de suggestions, classées par sujet. Chaque liste n'est pas exhaustive, mais est faite de quelques volumes qui me sont tombés sous la main et m'ont semblé pertinents pour un sujet ou l'autre. Sentez-vous très à l'aise de critiquer les choix, de suggérer vos propres commentaires, ou de suggérer d'autres volumes.
Les catégories couvertes sur cette page vont comme suit. Notez que je me suis occupé en priorité des catégories pour lesquelles j'ai le plus de demandes.
Ajouts récents
À la demande d'Andy Emond, étudiant en session 5 d'informatique de gestion au Collège Lionel-Groulx à l'automne 2008, voici les mises à jour les plus récentes (du plus récent au plus ancien), notées depuis le 15 septembre 2008 (plus récent ajout : 12 avril 2017) :
Bonne lecture!
D'autres pourront s'ajouter. Certains livres peuvent apparaître sur plusieurs listes. Certains livres peuvent ne pas apparaître, que ce soit parce que je ne les connais pas, parce que je n'ai pas pensé à eux ou parce que je ne les recommanderais pas (ce qui ne veut pas dire qu'ils ne seraient pas bons pour vous).
Certains livres devraient sans doute faire partie de la bibliothèque de tout(e) informaticien(ne) et peuvent être considérés comme des classiques.
J'ai déjà lu quelque part que toute programmeuse et tout programmeur de qualité devrait connaître et comprendre le langage C, qu'elle ou qu'il s'en serve professionnellement ou non. J'ai longtemps pensé que c'était de la foutaise mais, avec le temps et l'expérience, je dois admettre que c'est vrai. Le classique dans le genre est The C Programming Language de Brian W. Kernighan et Dennis M. Ritchie. Voilà assurément, pour le meilleur et pour le pire, le livre de programmation qui m'aura été le plus utile. À vie. Cela dit, certains ont des reproches (légitimes) à lui faire : http://c.learncodethehardway.org/book/learn-c-the-hard-waych55.html
Pour développer une solide pensée informatique, et aborder la programmation fonctionnelle, Structure and Interpretation of Computer Programs, par Harold Abelson, Gerald Jay Sussman et Julie Sussman, est excellent. À ce sujet, voir le texte http://vedantk.tumblr.com/post/8424437797/sicp-is-under-attack qui laisse entendre que ce classique serait sous assaut... Pourtant, les ami(e)s : quel excellent livre! Il a provoqué chez plusieurs un éveil intellectuel quant à la programmation et à la métacognition, en proposant une démarche d'apprentissage et de conception remarquable.
Dans le monde des processeurs de langages, il y a le Compilers: Principles, Techniques, and Tools, mieux connu sous le nom de Dragon Book, par Alfred V. Aho, Ravi Sethi et Jeffrey D. Ullman.
Dans le monde des systèmes d'exploitation, il y a le Operating System Concepts, mieux connu sous le nom de Dinosaur Book, par Avi Silberschatz, Peter Baer Galvin et Greg Gagne.
Plusieurs ne jurent que par Code Complete, de Steve McConnell. C'est effectivement un très bon livre, mais pas pour toutes les clientèles. Peut-être parce qu'il ratisse très large, je trouve qu'il recommande parfois des pratiques qui, a posteriori, se sont avérées douteuses ou malsaines. Ce livre doit quand même être considéré comme un classique : il examine une multitude de facettes de l'acte du développement logiciel du tout début à la tout fin (s'il existe une telle chose), donne beaucoup de conseils, examine plusieurs bonnes et moins bonnes pratiques.
Le livre Design Patterns: Elements of Reusable Object-Oriented Software, du célèbre Gang of Four (ou GoF comme les gens les nomment souvent), composé de Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides, est un livre important dans le développement de la pensée OO contemporaine.
Évidemment, il faut mentionner ici The Art of Computer Programming, par Donald E. Knuth.
Pour comprendre le matériel, le code machine, le microcode et les enjeux qui leur sont associés, l'un des livres les plus importants est sans doute Computer Architecture: A Quantitative Approach par John Hennessy et David Patterson
Merci à Matthieu Herrmann, de l'Université de Sherbrooke à la session Hiver 2009, pour avoir suggéré ce segment!
Certains livres, sans être des classiques en informatique comme tel, sont des livres pertinents pour la culture scientifique des informaticiennes et des informaticiens.
Parmi ceux-ci :
Quelques suggestions de lecture portant sur C++ 11, par Andrew Binstock en 2013 : http://www.drdobbs.com/cpp/c-reading-list/240155654?pgno=1
Je donne plusieurs cours à l'aide du langage C++, question de prédilection et de philosophie. Si vous souhaitez lire sur le sujet, vous pouvez examiner mes notes de cours (oui, je pense sincèrement que c'est une bonne source), ou encore :
Je ne l'ai pas lu, mais j'ai l'impression que Imperfect C++ de Matthew Wilson est très bien.
Si vous cherchez une liste de livres à éviter absolument pour la programmation en C ou en C++, Yechiel M. Kimchi tient une liste à jour sur http://www.cs.technion.ac.il/users/yechiel/CS/BadBooksC+C++.html (et, pour ceux que j'ai moi-même lu dans le lot, je suis assez d'accord avec lui).
Vous serez peut-être aussi intéressé(e) par cette section du présent site.
Un créneau dans lequel il y a de plus en plus de contenu...
Quelques volumes qui me sont passés par les mains, qui portent sur la gestion des T.I. et qui m'ont parus intéressants :
J'aime beaucoup ce qui a trait à l'histoire de l'informatique, des mathématiques et des sciences en général. Entre autres possibilités de lecture, ces livres-ci sont sympathiques :
Quelques volumes qui me sont passés par les mains, portant sur l'intelligence artificielle et qui m'ont inspirés :
Les interfaces personne/ machine doivent être élégantes, opérationnelles, passer un message clair aux utilisatrices et aux utilisateurs, être flexibles, scuritaires, etc. Bien que je sois moins près de ce monde qu'à une certaine époque, il m'arrive de tomber sur des volumes pas trop mal sur le sujet.
J'ai lu des tas de volumes à saveur mathématique au fil des ans, mais j'ai maintenant le loisir d'en lire par plaisir.
Plusieurs livres existent sur des manières de programmer ou des contextes de programmation (en fait, pratiquement tous les livres listés sur cette page portent sur l'acte de programmer). Cela dit, quelques livres portent plus spécifiquement sur ce que signifie programmer, et bien programmer, une acte à la fois scientifique, créateur et esthétique. En voici quelques-uns.
Vous serez peut-être aussi intéressé(e) par cette section du présent site.
J'aime beaucoup la programmation générique, la programmation générative et la métaprogrammation, plusieurs le savent. Si vous souhaitez lire sur le sujet, vous pouvez examiner mes notes de cours, ou encore :
Vous serez peut-être aussi intéressé(e) par cette section du présent site.
La sécurité est un sujet à la mode en cette époque d'interopérabilité et de systèmes répartis. Quelques livres sur le sujet :
Vous serez peut-être aussi intéressé(e) par cette section du présent site.
Il est très difficile de se passer de STL pour qui y a goûté et en comprend les métaphores, et il en va de même pour Boost. Si vous souhaitez lire sur le sujet, vous pouvez examiner mes notes de cours, ou encore :
Vous serez peut-être aussi intéressé(e) par cette section du présent site.
Matthieu Herrmann, de l'Université de Sherbrooke à la session Hiver 2009, suggère aussi le livre Operating Systems: Design and Implementation (je ne l'ai pas lu, mais Matthieu en dit beaucoup de bien alors il ne doit pas être vilain).
À propos de ces programmes qui permettent aux autres programmes de fonctionner convenablement :
La conception et le design de systèmes répartis est une tâche ardue qu'on réserve à des individus expérimentés, ces systèmes étant généralement des entités à grande échelle, complexes, riches et hétérogènes, ce qui demande une boîte à touils bien remplie (design de protocoles, sécuirité, optimisation, conception OO, maîtrise de plusieurs technologies, programmation de haut et de bas niveau, et ainsi de suite).
Prenez soin de lire les remarques asssociées à chaque volume, plus bas. Le monde des systèmes répartis est en effervescence continue et trop de livres dans le domaine sont trop focalisés sur un outil pour être utiles en général, ou encore trop sujets à devenir désuets. Certaines lecture dans cette liste sont donc là surtout pour des raisons historiques.
Quelques suggestions de lecture sur le sujet :
Même s'il a déjà été utile, évitez Web Services Essentials, de Ethan Cerami, qui a mal vieilli. Le volume COM and CORBA Side by Side. Architectures, Strategies and Implementations, par Jason Pritchard, était plus intéressant à l'époque où il a été publié qu'il ne l'est aujourd'hui. De même, bien qu'il s'agisse d'un bon livre en français, Au coeur de COM+, par Guy Eddon et Henry Eddon, ne semble plus disponible en librairie, et Learning DCOM par Thuan L. Thai est pas mal en soi mais désuet.
Évidemment, des liens vers les systèmes client/ serveur, les applications Internet et la multiprogrammation ne peuvent qu'être utiles...
Sujet qui a du vécu mais pour lequel on trouve étonamment peu de livres solides (on trouve plusieurs bons articles sur le sujet, cependant, alors vous ne manquerez pas de lecture si ceci vous intéresse!). Heureusement, quelques publications récentes ne sont pas si mal, entre autres :
Richard Gilbert, étudiant au DGL à l'Université de Sherbrooke en 2010, m'a suggéré de lire Hard Real-Time Computing Systems: Predictable Algorithms and Applications de Giorgio Buttazzo, mais je ne l'ai pas encore lu alors à vos risques et périls.
Évidemment, des liens en ligne sur les systèmes en temps réel, des liens en ligne sur l'optimisation du code et des liens en ligne sur la multiprogrammation ne peuvent qu'être utiles...
Les livres listés ici apparaissent tous dans au moins une des listes ci-dessus.
Titre | Auteur/ e/ s | Listes | Remarques |
---|---|---|---|
Michael Howard, David LeBlanc et John Viega |
Pas mauvais, mais pas transcendant non plus. Un livre qui explique relativement bien certaines problématiques clés de la sécurité dans la progammation, mais qui a parfois un biais un peu vendeur pour certaines technologies sur lesquelles les auteurs ont eux-même oeuvré. La qualité des chapitres est quelque peu inégale (il est possible de « sentir » les changements d'auteurs en cours de lecture). Certains extraits de code sont incorrects, ce qui m'agace toujours un peu. Tout de même, une ressource utile à avoir sous la main, et qui a plusieurs bons côtés, dans le contenu, la pédagogie et la présentation. En fait, le problème est probablement dans le travail de l'éditeur, qui aurait pu être plus rigoureux, que du côté des auteurs eux-mêmes. |
||
Collectif (édité par Richard Monson-Haefel) |
Dans les salles de bains, on trouve souvent un petit livre de pensées nouvel-âge ou de remarques humoristiques, destiné à passer le temps. Ce livre, 97 things..., regroupe plusieurs idées exprimées de manière concise (deux pages chacune) par des praticiens de l'architecture logicielle, et portant sur cette pratique. Ce « petit livre de salle de bains », sans être très profond, prête à réflexion, sans être conceptuellement grandiose. |
||
Ce livre se veut une introduction pédagogique à la programmation en C++. C'est sans doute raté, du moins si on souhaite enseigner à des débutant(e)s, mais c'est un bon livre pour repenser à C++ une fois qu'on en a appris et compris les bases. |
|||
Ingo Rammer |
S'adresse à des programmeuses et à des programmeurs OO, et contient des exemples exclusivement en langage C#, ce qui signifie qu'il est, avec un peu d'effort, accessible aussi aux programmeurs Java et C++. La qualité littéraire est discutable, mais les exemples sont simples (pour la plupart) et clairs. La présentation du Remoting sur .NET est compréhensible. |
||
Ce volume est un très bon livre de référence général pour l'intelligence artificielle, avec un accent sur les agents intelligents. La traduction française est excellente, mais les couvertures des éditions française et anglaise ne se ressemblent pas beaucoup. |
|||
Ian Millington |
Très appliqué et appuyé par du pseudocode (du « presque Python », en fait). Quand je l'ai lu, j'ai eu plusieurs idées intéressantes pour des manoeuvres de programmation dans le contexte du jeu vidéo comme en général. |
||
Un survol du langage C++ 11 en moins de 200 pages. Ce livre n'a pas pour objectif d'apprendre à programmer, mais bien de donner un aperçu de ce qu'est la programmation contemporaine avec C++. C'est réussi! |
|||
Diomidis Spinellis et Georgios Gousios |
Très intéressant volume comportant des réflexions sur des sujets complexes, faites par des concepteurs pertinents. Discute de systèmes répartis, d'émulateurs, de virtualisation, de réussites et d'échecs, de philosophie de programmation, etc. Évidemment, un livre pour conceptrices et concepteurs logiciels d'expérience; lire ce livre sans un solide bagage en ce sens diminuerait la compréhension et le plaisir à tirer des propos qui s'y trouvent dévoilés. |
||
Andy Oram et Greg Wilson |
Rassemble des petits textes sur une gamme très vaste de sujets associés à la programmation et à la recherche de la beauté, selon plusieurs acceptions (élégance, concision, efficacité, ouverture de l'esprit, etc.). Discute de tests, d'algorithmique, de design, de facilité d'entretien et d'évolutivité, etc. Le tout par une gamme d'auteurs assez impressionnante. Une lecture très agréable, mais pour programmeuses et programmeurs d'expérience (question d'apprécier le discours à sa juste valeur). |
||
Pas un livre d'informatique, mais bien un livre sur la sécurité, incluant la sécurité informatique comme cas particulier, par un très solide expert sur le sujet |
|||
Non seulement un bon livre pour avoir un aperçu de Boost et du futur de la bibliothèque standard de C++, mais aussi un bon livre pour assimiler des trucs de gens brillants et avoir de chics épiphanies |
|||
Bruce Tate, Mike Clark, Bob Lee et Patrick Linskey |
Un solide bouquin avec un penchant technique (sans être abusivement technique), qui détaille ce qu'on nomme des antipatterns, des techniques mal appliques ou mal choisies dans un contexte et qui mènent à des échecs commerciaux. Même si on omet la technique, ce volume a beaucoup de bons côtés et sa lecture peut prévenir de mauvaises décisions de design. |
||
Thomas Erl, Robert Cope et Amin Naser |
Plus une référence générale qu'un livre qu'on voudrait lire d'une page à l'autre. Je dirais que c'est un bon volume, mais qu'il a le défaut de ne pas définir certains termes qui sont, on le suppose, bien connus du milieu des administratrices et des administrateurs de plateformes infonuagiques. |
||
Une référence très importante sur la construction logicielle, que je recommanderais aux développeuses et aux développeurs ayant un peu d'expérience et ayant envie de se questionner sur leurs propres pratiques. Si vous souhaitez vous limiter à sa Checklist de trucs à retenir, Matthew J. Miller l'a compilé dans http://www.matthewjmiller.net/files/cc2e_checklists.pdf |
|||
Peter Seibel |
Une lecture plaisante, pour qui s'intéresse à la pratique de la programmation et à l'histoire de cette discipline qui mêle créativité brute, science, artisanat et ingénierie : des entrevues avec des tas de praticiens (dont une praticienne, particulièrement pertinente) connus de la programmation. |
||
Andrew Troelsen |
Référence technique pratique sur .NET et COM, assez complète pour être d'un grand secours en période de transition entre deux technologies massives, à la fois proches cousines et différentes. L'attitude de l'auteur est un peu désagréable, toutefois, ce qui rend la lecture inutilement déplaisante par endroits. |
||
Alfred V. Aho, Ravi Sethi et Jeffrey D. Ullman |
Le livre sur la conception de processeurs de langages que nous avons sans doute toutes et tous. Pour en savoir plus, voir le Wiki à son sujet : http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques_and_Tools |
||
Sans doute l'un des livres les plus importants pour comprendre le matériel, le code machine, le microcode et les enjeux qui leur sont associés. |
|||
Peter Van Roy et Seif Hardy |
Pas un vilain livre, mais un peu décevant tout de même. Je m'attendais, en me procurant ce volume, à une approche générale basée sur des langages dit « noyaux », à partir desquels un formalisme pour diverses pratiques de programmation pourraient être construites. Bien que cette promesse y soit quelque peu remplie, ce livre insiste surtout sur le langage Oz qui en sous-tend la démarche pédagogique, et la couverture de l'autre aspect clé de la démarche proposée, soit le lien entre le langage « noyau » et d'autres langages, est abordé de manière beaucoup moins satisfaisante. Reste qu'il y a plusieurs idées intéressantes dans ce volume (la multiprogrammation par diagrammes de flux, entre autres), mais insuffisamment dissociées d'un langage de programmation particulier. |
||
Ronald L. Graham, Donald E. Knuth et Oren Patashnik |
Livre pertinent et divertissant portant en grande partie sur les mathématiques discrètes, particulièrement importantes en informatique. Contient plusieurs bonbons pédagogiques, incluant des remarques des étudiant(e)s des auteurs, insérées ici et là en marge du texte, et le design d'une police de caractères spéciale conçue spécifiquement pour ce livre |
||
William Stallings |
Ouvrage solide et relativement pédagogique sur le chiffrement de données. Demande une solide base mathématique, cependant, mais prend soin de couvrir les éléments mathématiques requis pour comprendre les techniques qui y sont présentées. |
||
Décrit certains idiomes et certaines pratiques de programmation recommandables et recommandeés en C++. Ce n'est pas un livre sur la manière de nommer les variables (bien que ça effleure le sujet) mais bien une série de recommandations sur des manières correctes de faire les choses. Donne rapidement accès à des pratiques gagnantes et qui, si on en respecte l'esprit, mène à du meilleur code. Les remarques pour Exceptional C++ s'appliquent ici aussi. |
|||
C++ Concurrency in Action, Practical Multithreading |
Livre très solide sur les mécanismes de multiprogrammation que propose C++ 11 et sur les concepts qui les sous-tendent. Discute de façons de faire, de la distinction entre Exception-Safety et Thread-Safety (deux défis distincts), la synchronisation, les variables atomiques, le modèle mémoire, etc. Vraiment très recommandable. |
||
Excellent, formel, rigoureux mais très costaud et peu pédagogique. Pour celles et ceux qui aiment vraiment la métaprogrammation, même quand elle devient aride. |
|||
Solide et assez complet, mais pas un livre de débutants. Excellente référence pour qui doit parfois aller jouer là où la programmation générique en C++ devient inconfortable. |
|||
Volume détaillé et pertinent sur le standard C++ 17. J'ai beau en savoir beaucoup sur le sujet et avoir participé à ce standard, j'ai quand même appris quelques trucs! |
|||
Design Patterns: Elements of Reusable Object-Oriented Software |
Un des livres de programmation les plus importants qui soient, considérant son impact quant aux pratiques contemporaines de développement. Pour un témoignage mettant en relief son importance et son impact, voir ce court texte de Herb Sutter en 2013 |
||
Allan Shalloway et James R. Trott |
Un livre intéressant, qui reprend les idées du classique dans le genre à travers la lorgnette de programmeurs qui en sont venus à la conclusion que les idées de ce livre étaient importantes. Peut-être un peu léger pour des programmeuses et des programmeurs d'expérience mais pas vilain, somme toute. |
||
George Coulouris, Jean Dollimore and Tim Kindberg |
J'avais des réserves dans les premiers chapitres, mais le livre gagne en force et en qualité dans les deux derniers tiers. |
||
Ravi Kalakota et Marcia Robinson |
Bon volume, très utilisé et apprécié par les diplômé(e)s du DTI et du DGL. Définit des concepts clés de l'entreprise électronique comme les CRM, les SCM, les ERP et OLAP. Un peu plus faible dans sa vision du futur (prudence : le livre a été publié avant le crash des technos et le 11 septembre 2001). |
||
Pour qui sait déjà programmer en C++; ce livre est une excellente ressource pour apprendre à mieux programmer en C++. |
|||
Livre qui s'ajoute aux autres livres de la série Effective... du même auteur, mais se concentre sur ce que C++ 11 et C++ 14 apportent de neuf au langage. Une lecture qui en vaut la peine. Notez que j'ai lu la version « pré-publication » en format électronique, alors il se peut que votre version diffère légèrement de la mienne. |
|||
Ressource très solide pour exploiter STL de manière efficace, s'adressant à celels et ceux qui programment déjà à l'aide de cette bibliothèque. |
|||
Jason Mc C. Smith |
Une idée a priori intéressante, soit définir un langage visuel et un calcul (le ρ-calcul) pour représenter des éléments constitutifs jugés fondamentaux de la programmation, à partir desquels il est possible de construire des schémas de conception connus, en particulier ceux jugés classiques du GoF. J'ai apprécié plusieurs choses de ce livre, mais il m'a aussi laissé sur ma faim. Une chose qui ne pardonne pas avec moi, je pense, est un livre dans lequel le code est incorrect ou manque de soin, tare dont souffre ce volume. Je suis aussi un peu ambivalent quant au concept de similitude tel qu'exprimé par l'auteur – j'en comprends la pertinence mais je ne suis pas convaincu par la rigueur de sa définition. Ça reste un truc intéressant d'un point de vue puriste, cela dit. J'aime particulièrement la représentation tridimensionnelle des « secteurs » de recherche dans lesquels se positionnent les schémas de conception élémentaires proposés par l'auteur; cette catégorisation ouvre des avenues de recherche intéressantes. |
||
Alexander Stepanov et Paul McJones |
Un livre d'un grand intérêt mais aussi d'une grande densité. À cheval entre les concepts d'algèbre appliquée, la théorie de la complexité, l'optimisation des algorithmes, les structures de données, la généricité et ainsi de suite. J'ai beaucoup aimé, mais c'est pour une clientèle pointue... (disponible en ligne : http://componentsprogramming.com/elements-of-programming-authors-edition/) |
||
Enterprise SOA, Service-Oriented Architecture Best Practices |
Dirk Krafzig, Karl Banke et Dirk Slama |
Volume pas si mal (mais moins bon que SOA in Practice, The Art of Distributed System Design) sur la transformation de l'offre logicielle d'une entreprise pour que celle-ci prenne une approche orientée services. Technique légère, bons schémas. Utile pour survoler les SOA et pour essayer d'évaluer si cette approche se prête à une entreprise donnée. |
|
Livre de pièges organisé sous une forme questions/ réponses, qui expose des stratégies de programmation efficaces. Pas un livre de débutant. Prenez toutefois le contenu avec un grain de sel : il est trop facile de confondre maximes et dogmes. |
|||
Livre de pièges organisé sous une forme questions/ réponses, qui expose des stratégies de programmation efficaces. Pas un livre de débutant. À certains égards, comme par exemple dans sa recommandation de ne pas débuter les noms de symboles par un caractère de soulignement suivi d'une majuscule, ce livre explique mieux ses prises de position que les autres livres de la série (Exceptional C++ et More Exceptional C++), mais globalement, le discours se répète un peu, même à l'intérieur de chaque section du livre, ce qui rend la lecture intéressante, mais pas autant qu'elle pourrait l'être. Préférez les autres livres de la série, et ne vous procurez celui-ci que si vous êtes pleinement conscient(e) de ces bémols. |
|||
Gary Hoglund et Gary McGraw |
Une belle surprise. Au préalable, ce livre semble manquer de sérieux, les auteurs se répètent un peu, mais le contenu est solide (même si le code n'est pas toujours élégant) et offre entre autres un regard intéressant sur la décompilation et l'étude des binaires. |
||
Un livre qui a des qualités et des défauts. Parmi les qualités, on trouve un effort de formalisme quant aux itérateurs, en particulier ceux de la catégorie input_iterator, et on trouve aussi plusieurs cas concrets d'application d'un effort d'intégration de technologies disparates (MFC, COM, l'environnement des systèmes de fichiers de Unix et de Windows, les entrées/ sorties avec ACE, ce genre de truc), et plusieurs conseils venant d'un gars qui a manifestement écrit plusieurs bibliothèques dans sa vie, s'est trompé et en a tiré profit. Un bon livre (pas un livre de base du tout, par contre) d'un praticien de grande expérience. Parmi les défauts, on trouve un style un peu je-sais-tout, qui me déplaît, de même que trop d'affirmations qui ont du sens mais n'ont pas la portée que l'auteur leur donne, ou qui manquent de précision et sont amenées comme plus générales qu'elles ne le sont vraiment. À lire, à avoir pas loin, mais à intégrer dans son schème de pensée. À ne pas prendre comme un livre religieux. Beaucoup d'informations dans le livre se basent sur les efforts de l'auteur dans le développement de la bibliothèque stlsoft. |
|||
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries |
Un ami et ancien étudiant, Joël Collin, m'a recommandé ce livre (merci!). J'ai aimé, mais avec beaucoup de réserves. Cela dit, le livre est populaire et semble apprécié de plusieurs (voir ce lien) alors ne vous gênez pas pour vous faire votre propre opinion. Le livre est découpé (de mémoire) en Do, Consider et Don't, ce qui est une manière intéressante et punchée de présenter les idées du livre. Malheureusement, plusieurs Do et plusieurs Don't sont énoncés sans être appuyés et sont estimés bons parce qu'ils ont été choisis ou mauvais parce qu'ils n'ont pas été pris, et ce dans des cas où les deux auraient eu le même impact côté design. J'aurais apprécié un découpage tenant compte de bon par conformité à nos choix esthétiques mais sans autre avantage intrinsèque (peut-être une mention Follow, plus nuancée que Do, qui sert aussi à indiquer des pratiques de programmation jugées saines) de manière à mettre en relief la distinction entre bon design et proximité des standards de notre compagnie. J'ai beaucoup aimé les remarques plus personnelles et les coups d'oeil de l'intérieur: ce qui a été fait et bien réussi et ce qui a été fait mais n'a pas fonctionné. Les auteurs offrent des éléments d'expérience dans des encadrés qu'on trouve presque à chaque page; c'est là que les bribes d'information les plus importantes se trouvent. Le livre met l'accent sur une stratégie de design par laquelle le plan de test et les programmes types sont rédigés avant les classes utilisées par ces programmes, ce qui me semble fort pertinent. Il faut prendre les consignes de ce genre avec un peu de recul, par contre, parce que l'expérience montre que l'équipe de l'infrastructure a erré dans l'autre sens, offrant trop souvent des interfaces manquant d'homogénéité, ce que vous savez déjà si vous avez joué avec les collections pour découvrir qu'elles ne sont pas toutes énumérables de la même manière. Remarque essentielle aussi : le choix d'une nomenclature appropriée dans une infrastructure commerciale, au sens où il est sage de donner le nom le plus évident à l'outil le plus susceptible d'être utilisé, du moins si l'objectif est de rendre les gens efficaces rapidement. Les problèmes qu'ils ont rencontrés avec la classe File, problèmes sur lesquels l'équipe de rédaction du livre revient souvent, méritent réflexion. Le meilleur chapitre du livre sur le plan technique (et de loin) est celui portant sur les exceptions. Si je retenais une section de ce volume pour lancer une discussion quant à la programmation à l'aide de cette infrastructure, c'est de celle-là que je voudrais. Pour le reste, le livre est surtout intéressant pour une équipe oeuvrant très majoritairement avec cet outil et est d'une utilité plus limitée pour les autres. Un bon bouquin, à vous procurer si vous rencontrez ces critères, et à consulter sans acheter si vous utilisez .NET entre autres choses mais pas de manière exclusive ou quasi exclusive. |
||
From Mathematics to Generic Programming |
Alexander Stepanov et Daniel E. Rose |
Excellent volume, plus pédagogique que le (tout aussi bon mais très aride) Elements of Programming, qui nous mène d'une démarche formelle et mathématique vers l'expression de concepts complexes en programmation générique. Approche à la fois solide et ludique, regard porté vers l'application pratique des concepts et vers l'optimisation des algorithmes, sans compromettre leur élégance par ailleurs, j'ai cru revivre, à l'occasion, mon (mémorable, dans une acception extrêmement positive) cours d'algèbre appliquée donné par Bernard Courteau dans les années '90. |
|
Un beau livre qui fait un lien pédagogique et poétique entre la musique de Bach, l'art de M. C. Escher et le théorème d'incomplétude de Gödel... et, bien sûr, avec Alice au pays des merveilles, de Lewis Caroll. |
|||
James Reinders |
Un livre étonnant sur Threading Building Blocks, une bibliothèque générique conçue pour faciliter le développement de systèmes exploitant mieux le parallélisme sur des ordinateurs contemporains, et qui, malgré son nom, ne se limite pas aux processeurs Intel. Contient plusieurs bonnes idées, comme par exemple les Split Constructors (discutés à §3.1 de ce document de référence), de même que des idées simples (et moins simples) pour mieux gérer les accès aux antémémoires (à la Cache). |
||
Robert Jones |
Livre qui a beaucoup de bon, mais de le plus gros défaut est d'être un livre, donc un objet statique sur un sujet extrêmement dynamique. J'ai eu des réserves avec son côté idéaliste (« réclamons notre Internet »!) en début de parcours, mais ça demeure un livre accessible (contient du code, mais du code qui peut être escamoté sans perdre l'essence du propos) et qui a du contenu. |
||
Internetworking with TCP/ IP Volume III, Client-Server Programming and Applications |
Douglas E. Comer, David L. Stevens et Michael Evangelista |
Référence complète et relativement neutre (il existe une version Linux/ POSIX et une version Winsock). Demande des connaissances de langage C (pas C++). Utilise les sockets comme base pour la description du modèle client/ serveur. |
|
Michael T. Goodrich et Roberto Tamassia |
Bon tour d'horizon de la sécurité informatique, allant jusq'à la sécurité physique des lieux et des objets, en passant par la réseautique, les bases mathématiques de la cryptographie, l'ingéniere sociale, etc. Va rarement en profondeur (la plupart des sections font une page ou moins) mais dresse un portrait d'ensemble intéressant pour qui cherche des repères. Les schémas sont légers mais clairs. Globalement : un livre bien fait. |
||
Stoyan Stefanov |
|
Livre de schémas de conception et de meilleures pratiques dans ce langage extrêmement populaire qu'est JavaScript. Bien fait, bien expliqué, et déstabilisant pour qui connaît peu ce langage. |
|
Une réflexion et des conseils pour concevoir des systèmes à plusieurs et à grande échelle. Très bien fait; il n'y a pas suffisamment de livres de qualité sur ce sujet. Le code date un peu, par contre; si l'auteur écrivait le même livre aujourd'hui, il utiliserait assurément des idiomes plus modernes (programmation générique et espaces nommés entre autres), mais le fond de sa réflexion demeurerait pertinent. |
|||
Apostolos Doxiadis et Christos H. Papadimitriou |
Une bande dessinée de qualité, qui discute de mathématiques, de logique et de riguer scientifique de manière générale. |
||
Federico Biancuzzi et Shane Warden |
Série d'entretiens avec de nombreux concepteurs de langages de programmation. Fort intéressant dans l'ensemble, peu importe vos dispositions et préférences personnelles sur le sujet. |
||
Plusieurs idées brillantes. Excellente ressource pour qui aime penser hors des sentiers battus. |
|||
Andrew S. Tanenbaum |
Livre complet, bien construit, et qui examine son sujet en profondeur. |
||
La remarque pour Effective C++ s'applique ici aussi, mais à un moindre degré car celui-ci est un peu plus vieux. En 2012, ce livre a atteint de seuil de la 30e impression. Pas mal, en particulier pour un document aussi technique : http://scottmeyers.blogspot.ca/2012/12/more-effective-c-at-30-printings.html |
|||
La remarque pour Exceptional C++ s'applique ici aussi. |
|||
Adam Nathan |
Référence technique pratique sur .NET et COM, assez complète pour être d'un grand secours en période de transition entre deux technologies massives, à la fois proches cousines et différentes. Un peu mieux fait que COM and .NET Interoperability, bien que les deux puissent être utiles. L'auteur a personnellement oeuvré au support à l'interopérabilité entre les deux plateformes. |
||
Pramod J. Sadalage et Martin Fowler |
Réféence concise (mais non-définitive, c'est assez clair) sur la mouvance NoSQL, ses enjeux, ses avantages, ses inconvénients, ses champs d'application... Concis, ce qui est une bonne chose, mais semble avoir été publié en vitesse (plusieurs petites erreurs ici et là à l'intérieur). |
||
Avi Silberschatz, Peter Baer Galvin et Greg Gagne |
La référence la plus connue sur les systèmes d'exploitation (à ma connaissance, du moins). |
||
Richard M. Fujimoto |
Solide référence sur les systèmes répartis de simulation et de réalité virtuelle, qu'il s'agisse de plusieurs processus dans un même ordinateur ou de systèmes répartis à grande échelle. Volume scientifique, pas administratif. |
||
Timothy G. Mattson, Beverly A. Sanders et Berna L. Massingill |
Le nom indique bien le contenu de ce volume : il s'agit d'un survol explicatif des pratiques les plus souvent rencontrées dans le monde du développement des applications exploitant le parallélisme, ou du moins étant susceptibles d'en profiter. Le livre a des limites, et les exemples de code auraient mérité une relecture (les variables changent subitement de nom, des parenthèses ne sont pas balancées, le tout ressemble souvent à des programmes C retouchés pour bien paraître), mais ce n'est pas un mauvais livre pour autant. Les annexes sur MPI et OpenMP sont concises et utiles. |
||
Colin Campbell et Ade Miller |
Pas vilain sur le plan pédagogique, et présente une bibliothèque fort intéressante, mais qui a encore besoin de maturité (les éléments moins usités sont plus complexes qu'ils ne le devraient, à mon avis). Petite faiblesse au niveau des références (une trop grande proportion, selon moi, provient de Microsoft même, ce qui leur donne un petit côté publicitaire). |
||
Discute d'élégance, de concision, de rapidité, de tests et ainsi de suite. Les algorithmes sont exprimés dans une notation accessible, entre le pseudocode, le Pascal et le C. Collecte un ensemble d'articles (par l'auteur) portant sur la programmation. |
|||
Pas un vrai livre de débutants, pas un vrai livre d'experts, mais ce qu'un livre du style « Apprendre à programmer avec XYZ en quelques semaines » devrait avoir l'air s'il s'adressait à des gens possédant déjà un bagage scientifique et mathématique. Beaucoup de bonnes idées, bien écrit, met l'accent sur le plaisir de programmer et sur l'intérêt scientifique et humain de cette tâche. Quelques chapitres surprenants, dont trois sur les interfaces personne/ machine et un sur les systèmes embarqués. |
|||
Jane W. S. Liu |
Volume solide mais très formel dans sa démarche. J'ai beaucoup apprécié, mais c'est un livre qui demande un effort signifiant à la lecture. J'aurais aimé m'en servir pour mes cours mais je pense que c'est un peu rude pour la majorité des étudiant(e)s. Cela dit, beaucoup de contenu ici pour qui s'intéresse aux systèmes en temps réel. |
||
Alan Burns et Andy Wellings |
Le sous-titre de ce livre est « Ada, Real-Time Java and C/Real-Time POSIX », ce qui met l'eau à la bouche. Malheureusement, si vous souhaitez développer en Java (version temps réel), en C ou en C++, la couverture offerte par ce livre est quelque peu superficielle. Le livre reste intéressant, et très à jour à bien des égards; le chapitre 11 sur les ordonnanceurs temps réel, en particulier, est très bien. Préférable pour un lectorat expérimenté. |
||
Livre solide qui présente et met en situation des techniques pour réorganiser du code (surtout du code Java ou Smalltalk, avec les forces et les limites de cette famille de langages) une fois celui-ci rédigé. |
|||
Andrew S. Tanenbaum |
Livre de référence important sur les réseaux et la réseautique, parmi les plus connus et les plus utilisés dans l'enseignement pour ce domaine. |
||
Un vieux livre (1997|), qui met en place plusieurs des idées importantes de la programmation contemporaine. Puisque ces idées n'étaient pas adoptées à l'époque, ce livre les explique. Une lecture très pertinente! |
|||
Seven Concurrency Models in Seven Weeks |
Paul Butcher |
L'auteur examine sept manières d'approcher la programmation parallèle et concurrente sur la base d'exercices pour trois jours par semaine, le tout sur sept semaines. Les exercices proposés peuvent consommer une quantité importante de temps, et les outils tendent à demander un effort notable de configuration. Cependant, c'est un livre intéressant, particulièrement pour celles et ceux qui cherchent à utiliser le parallélisme pour enrichir l'exécution de programmes s'exécutant sur des machines virtuelles (que l'auteur semble affectionner tout particulièrement). |
|
L'un des meilleurs livres sur les systèmes répartis que j'aie eu la chance de lire jusqu'ici (et j'en lis beaucoup!), parce qu'il est pragmatique et conceptuel, là où la plupart des livres du genre cherchent à nous vendre un produit. Trop peu de practiciens de cette qualité et avec cette expérience écrivent des livres. |
|||
Harold Abelson, Gerald Jay Sussman et Julie Sussman |
Un excellent livre pour développer la pensée informatique. Aussi connu sous le nom SICP. Pour vous amuser, voici un comparatif entre ce livre et le Necronomicon : http://pjacobsson.com/articles/sicp-vs-necronomicon.html Un commentaire élogieux au sujet de ce volume : http://www.eecs.berkeley.edu/~bh/sicp.html Une critique de ce volume : http://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf Il semble exister des versions en ligne du livre : |
||
Ressource extrêmement complète pour le langage C++ tel qu'il était avant l'avènement de la norme ISO, mais qui demeure d'actualité pour plusieurs détails techniques subtils. Vous n'apprendrez pas à programmer avec ce livre, par contre. |
|||
Un livre d'histoire de l'informatique et des mathématiques qui a comme axe principal cet acte fondateur pour l'informatique que fut le texte On Computable Numbers, With an Application to the Entscheidungsproblem d'Alan M. Turing. |
|||
La référence, à plusieurs égards, mais on parle d'un oeuvre colossale et pas du tout facile d'approche. Knuth a choisi l'indépendance de tout langage et de toute convention, et définit son propre langage d'assemblage pour exprimer ses idées. Très solide, très fouillé. On a tous à apprendre au contact de ce livre. La banque d'exercices est magistrale. Je ne m'en servirai probablement jamais comme manuel(s) de base pour mes cours, cela dit. |
|||
Très solide volume de référence sur la problématique du développement multiprocesseur, incluant la description et la conception (code – académique – à l'appui) de verrous, de stratégies non-bloquantes, de barrières, de mémoire transactionnelle, etc. |
|||
Pour le meilleur et pour le pire, le livre de programmation qui m'aura été le plus utile à vie. |
|||
L'une des principales références pour comprendre ce langage et avoir une idée de ce qu'il peut pernettre de faire. Ce livre est beaucoup plus pédagogique et beaucoup plus clair qu'on pourrait le croire au préalable, et même s'il y a quelques coquilles dans la plus récente édition, on y trouve pour bien des sujets subtils (concurrence, expressions régulières et autres) des explications simples et de qualité. |
|||
Référence solide et pédagogique pour qui connaît le langage C++ et veut comprendre et bien utiliser l'arsenal puissant que constitue sa bibliothèque standard. Si vous aviez lu la 1re édition, sachez que la 2e édition vaut tout autant la peine, couvrant une bonne partie de la bibliothèque standard de C++ 11. Pour une critique de la 2e édition, par Bartolomej Filipek en 2015, voir http://www.bfilipek.com/2013/05/book-c-standard-library-2nd.html |
|||
Livre philosophique s'adressant à celles et ceux qui souhaitent comprendre pourquoi le langage est tel qu'il est présentement, pourquoi il contient certaines choses et pourquoi il en exclut d'autres. Aide à comprendre comment évolue un langage de programmation. Le livre est vieux mais reste savoureux. |
|||
The Go Programming Language |
Alan A. A. Donovan et Brian W. Kernighan |
Un bon livre, solide et simple, avec de bons exemples. Il met bien en valeur les forces du langage Go, qui sont nombreuses, et aide aussi à bien comprendre ses points plus faibles. L'esprit du langage est bien véhiculé par les auteurs, qui insistent sur la pratique de la programmation avec Go tout au long du volume |
|
The Hacker Ethic and the Spirit of the Information Age |
Pekka Himanen |
Livre qui m'a été suggéréé par mon ami (et beau-frère) Matthieu Sossoyan, anthropologue et enseignant. Avec entre autres une introduction par Linus Torvalds, ce livre cherche à décrire ce qu'a de particulier le mode de vie (et surtout la manière d'aborder le travail) des informaticiennes et des informaticiens, le Hacker Ethic, mode de vie qui met la créativité à l'avant-plan, en comparaison avec ce que l'auteur nomme (à partir de la dénomination de Max Weber) l'éthique de travail protestante, qui met quant à elle l'accent sur le travail pour le travail. Sans que je ne sois d'accord avec tout ce qui y est proposé comme vision des choses (en particulier, l'auteur semble avoir un point de vue un peu trop « rose » sur le mouvement à code ouvert, mouvement important soit mais qui n'est pas sans failles), le livre reste intéressant. |
|
The Idea Factory, Bell Labs and the Great Age of American Innovation |
Jon Gertner |
Très intéressant regard historique et philosophique sur le vécu, les réalisations, la fin et l'« après » d'un des plus grands laboratoires de recherche fondamentale et appliquée de l'histoire des États-Unis. Pour des trucs aussi simples qu'imaginer Claude Shannon se promener sur un unicycle en jonglant, ça vaut la peine |
|
On aime ou on n'aime pas, mais les auteurs sont des colosses de la programmation et posent des questions qui font mal. Faut avoir un peu d'expérience en programmation à l'aide du langage C pour les suivre, cela dit. |
|||
Tel qu'annoncé sur la couverture, ce livre examine ce qui fait (selon les auteurs) l'essence d'un programmeur efficace dans sa pratique, de la documentation au code, en passant par les tests et la saine gestion de sa carrière. Je ne l'utiliserais pas dans un cours tel quel car les exercices, bien qu'amusants, manquent de rigueur, mais c'est un très bon livre pour informaticien(ne)s souhaitant gérer l'évolution de leur carrière et de leur pratique. |
|||
Neal Ford |
Pas un mauvais livre, mais pas un grand livre non plus. La première partie de ce volume couvre des trucs et des outils, ce qui peut être sympathique à l'occasion mais conviendrait mieux à un site Web, étant donné le caractère péremptoire du propos, et la seconde partie, sans être vraiment vilaine, couvre des sujets mieux couverts ailleurs, comme par exemple dans The Pragmatic Programmer. |
||
Un point de vue réfléchi (au point de constituer un cours) sur la programmation en tant qu'activité sociale et humaine complexe, sur la question de la productivité dans une telle activité. Surtout utile pour les gens qui souhaitent mieux comprendre ces drôles d'oiseaux que sont les programmeuses et les programmeurs. |
|||
Michael Howard et Steve Lipner |
Solide bouquin décrivant les pratiques (voir ceci pour des détails complémentaires) qui ont permises à Microsoft de redresser le cap suite aux importants problèmes de sécurité vécus par cette entreprises. Clair, bien fait; s'adresse surtout aux gestionnaires encadrant les pratiques de sécurité. |
||
Naresh Apte et Toral Mehta |
Référence expliquant UDDI et son rôle dans le monde du commerce électronique. Utile pour démarrer et mettre en contexte, mais pas suffisant en soi pour construire des services Web (nécessite une référence technique d'appoint). |
||
Video Game Optimization |
Ben Garney et Eric Preisz |
Un livre qui a des qualités et des défauts. Il ratisse large, explique relativement bien et est crédible, mais ses deux principaux défaut sont (a) qu'il est près des outils, donc devient vite désuet (mais le discours demeure utile malgré tout, quand on garde le tout en perspective), ce qui est un peu naturel, et (b) que la majorité des graphiques qui y apparaissent ont des légendes obscures, incomplètes ou simplement absentes, ce qui limite fortement leur utilité. |
|
James E. Smith et Ravi Nair |
Une belle surprise que ce livre : il couvre les machines virtuelles à plusieurs niveaux, allant des plateformes servant d'isolation entre un langage machine et un langage de programmation, comme Parrot, le CLR de .NET ou la JVM de Java, aux plateformes représentant un ordinateur de manière telle qu'on puisse le virtualiser complètement et l'exécuter sur un autre ordinateur, comme VMWare. Assez complet, bien écrit, clair et détaillé. Bravo! Ce livre m'a été suggéré par Matthieu Herrmann, de l'Université de Sherbrooke à la session Hiver 2009. |
||
Web Designer's Reference, An Integrated Approach to Web Design with XHMTL and CSS |
Craig Grannell |
Petit livre clair et sans prétention sur le design d'interfaces Web. Met l'accent sur plusieurs saines pratiques dans la conception d'interfaces élégantes et utilisables. Sans que ce livre ne révolutionne quoi que ce soit, il est agréable à consulter et utile. |
|
Frank P. Coyle |
Peu technique, mais très descriptif, ce livre met en valeur la démarche XML dans son ensemble et ses différents visages |