| Accueil >> Varia >> Génie logiciel

Quelques bons livres de Génie logiciel

1) Table des matières

2) Commentaires généraux sur les livres d'informatique
3) Génie logiciel en général
4) Livres de C++ pour les tronches («geeks»)
5) Livres plus spécialisés
6) Quelques mauvais livres d'informatique

2) Commentaires généraux sur les livres

Voici selon moi quelques bons livres de génie logiciel  (SVP me le dire si vous en connaissez de meilleurs!). J'ai essayé de les trier grosso modo en ordre décroissant d'importance. En d'autres mots, si vous allez être perdus sur une île déserte, chargez votre radeau de sauvetage en commençant avec le haut de cette liste!

Aussi, attention aux éditions! Normalement, vous devriez acheter la plus récente. C'est aussi une raison pour éviter les traductions françaises (qui sont généralement en retard d'au moins une édition). Voir aussi la Section 3.6 de Comment choisir un bon livre pour des maisons d'édition à éviter, ainsi que la liste sus-mentionnée de mauvais livres.

3) Génie logiciel en général

Code Complete

Code Complete, 2nd Ed.
McCONNELL, Steve. Microsoft Press, 2004.

Excellent livre. L'auteur explique comment programmer (comment coder, commenter, débugger, comment s'améliorer en tant que programmeur, etc). C'est un livre inspirant, et son auteur a transformé et continue de transformer le paysage du Génie logiciel.

Il est peut-être un peu faible lorsqu'il parle de conception orientée-objet, et ses exemples de programmation sentent un peu «liste de paie en COBOL», mais c'est mineur tout compte fait.

The C++ Programming Language

The C++ Programming Language, 4th ed.
STROUSTRUP, Bjarne. Addison-Wesley, 2014.

Voilà LE livre de C++, incontestablement. Ce livre est gros, cher, et difficile à lire, mais il remplace plusieurs livres moches sur le C++ et la programmation orientée-objet (que j'ai fini par jeter). De plus, l'auteur réussit à éviter presque complètement de: (i) passer des commentaires négatifs sur les autres langages de programmation; (ii) présenter son langage comme le Sauveur du Monde; et (iii) nous vendre quelque chose (trois qualités malheureusement très rares dans ce genre de livre). Un investissement sûr.

Désavantages: le commentaire de Verity Stob à propos du «C cruft-cruft» (en québécois on pourrait traduire: «C chnoutte-chnoutte») sonne de plus en plus vrai avec le passage des années et l'accumulation de fonctionnalités attachées avec de la broche à foin. Aussi, l'auteur est probablement un athée, ce qui paraît dans son choix de citations en exergue, mais aussi avec son niveau de confort élevé lorsqu'il est entouré d'ambiguité, de confusion et d'absence de but. Un chrétien devant le même langage de programmation voudrait faire jaillir la lumière et l'ordre, au moins dans un autre langage de programmation, pour qu'il puisse ensuite dire: «Si nous avions une table rase, nous intégrerions cette nouvelle fonctionnalité ainsi, mais puisque nous devons demeurer rétro-compatibles, nous l'avons fait ainsi dans le C++», etc.

Object-Oriented Analysis and Design, with applications

Object-Oriented Analysis and Design, with applications, 3rd Ed.
BOOCH, Grady, et al. Addison-Wesley, 2007.

Très bonne introduction à tout ce qui s'appelle Orienté-Objet. Son auteur est un des trois inventeurs de la notation UML, et un des inventeurs de la conception orientée-objet. L'organisation du livre en trois parties est excellente: d'abord les concepts (qu'est-ce qu'un système? un objet? etc.), ensuite la notation (UML 2.0), et enfin des EXEMPLES d'architectures.

Désavantages: Je pense que ce livre pourrait être écrit en anglais moins verbieux, avec moins de publicité extravagante pour la méthode orientée-objet.

Structured Computer Organization

Structured Computer Organization, 6th Ed.
TANENBAUM, Andrew S. Pearson, 2013.

Mais quel auteur agréable à lire! Il est drôle, concis, clair. Ce livre explique comment fonctionne un ordinateur, des niveaux les plus bas (à ras les transistors) jusqu'au plus hauts (près des applications en tant que tel qui roulent sur l'ordinateur).

Modern Operating Systems

Modern Operating Systems, 4th Ed.
TANENBAUM, Andrew S. Prentice Hall, 2014.

Un autre livre sur les systèmes d'exploitation de Tanenbaum, mais plus théorique. Je n'ai pas lu tous les manuels scolaires sur les systèmes d'exploitation, mais celui-ci semble un des meilleurs.

Computer Networks

Computer Networks, 5th Ed.
TANENBAUM, Andrew S. Pearson/Prentice Hall, 2011.

Excellent livre d'introduction sur les réseaux.

Software Project Survival Guide
McCONNELL, Steve. Microsoft Press, 1998.

Si vous devez n'avoir qu'un seul livre sur la gestion de projet, le voici! Court, plein de bonnes références, pratique.

Rapid Development; Taming Wild Software Schedules
McCONNELL, Steve. Microsoft Press, 1996.

Si vous êtes étudiant, vous ne comprendrez pas trop le rapport de ce livre. Si vous êtes sur le marché du travail, ce livre peut vous sauver! La vie du programmeur est une lutte perpétuelle pour ne pas manquer l'échéance. Ce livre explique comment diminuer la probabilité de retards dans l'échéancier.

Distributed Systems: Principles and Paradigms
TANENBAUM, Andrew S. Prentice Hall, 2002. (2e éd., 2006, est disponible)

Apparement, une introduction potable sur les systèmes répartis.

Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers
McCONNELL, Steve. Pearson Education, 2004.

McCONNELL défend la nécessité pour les programmeurs de mieux se former, de suivre des cours de génie logiciel (et non pas d'informatique), et d'être membre d'une association professionnelle, etc.

Operating Systems; Design and Implementation, 2nd Ed.
TANENBAUM, Andrew S. Prentice Hall, 1997. (3e éd., 2006, est disponible)

Un livre sur les systèmes d'exploitation en général, et Minix en particulier (l'ancêtre de Linux). Code source, CD-ROM, etc. La matière sur les systèmes d'exploitation semble bien correcte.

Désavantages: J'ai de sérieuses réserves sur le code source de Minix. Remarquez que je ne veux pas dénigrer cet auteur qui est très bon. C'est en fait une plainte générale contre «L'univers du C», les choses codées en C, pas orientées-objet, et pas documentées avec UML. Plusieurs personnes (et plusieurs compagnies) codent comme ça, mais c'est mal. Le même système d'exploitation bien codé en C++, avec une bonne documentation en UML serait beaucoup plus facile à comprendre. Si Linux avait été basé sur un tel «Minix-Moderne», Microsoft serait peut-être mort depuis longtemps.

An Embedded Software Primer
Simon, David E. Addison-Wesley, 1999.

Un bon petit livre d'initiation aux systèmes embarqués. Nécessaire dans la formation d'un programmeur. Mais c'est vraiment un livre de rudiments pour les programmeurs. Si vous êtes plus une personne du côté «matériel» que «logiciel», ce livre sera trop simple pour vous.

Doing Hard Time; Developing Real-Time Systems with UML, Objects, Frameworks and Patterns
DOUGLASS, Bruce Powel. Addison-Wesley, 1999.

Avec un titre comme ça, le livre doit être épais! Oui, il est épais, et bon! M. Douglass est drôle, compétent et il explique bien les systèmes temps réel.

Fundamentals of Database Systems

Fundamentals of Database Systems, 6th Ed.
ELMASRI, Ramez, NAVATHE, Shamkant B. Addison-Wesley, 2011.

Une brique d'introduction sur les bases de données. Trop de formalisme et pas assez de code source pour être à mon goût, mais semble couvrir au moins un peu tout ce qui a rapport au sujet.

Designing the User Interface, 3rd Ed.
SHNEIDERMAN, Ben. Addison-Wesley, 1998. (4e éd., 2004, est disponible)

Un livre de référence sur les interfaces usager. J'aimerais en connaître un meilleur.

Programming Pearls,
BENTLY, Jon. Addison-Wesley, 1989.

More Programming Pearls; Confessions of a coder
BENTLY, Jon. Addison-Wesley, 1990.

Deux petits livres qui rassemblent des articles écrits par M. Bently parus dans la revue «Communications of the ACM». Il est drôle, intelligent, et présente des problèmes de programmation vécus ainsi que les solutions ingénieuses. Pas essentiel, mais c'est bon pour la culture! Moi j'aime bien son chapitre sur «Bumper-Sticker Computer Science», avec des proverbes du genre «When in doubt, use brute force!» :-)

Principles of Software Engineering Management
GILB, Tom. Addison-Wesley, 1988.

Un livre un peu vieux, mais encore très bon, sur les choses essentielles pour bien gérer un projet. L'auteur est intéressant à lire, et il donne de bons conseils.

The Mythical Man-Month, Anniversary Edition
BROOKS, Frederick P. Addison-Wesley, 1995.

Pas un livre essentiel, mais si vous avez le budget, c'est intéressant. M. Brooks a dirigé le projet du OS 360 de IBM, du temps d'Abraham et de Moïse. Mais il est un penseur profond, qui en plus écrit très bien. Plusieurs de ses remarques (sur la gestion de projet et les outils de développement logiciel) sont encore valables aujourd'hui.

Object Solutions; Managing the Object-Oriented Project
BOOCH, Grady. Addison-Wesley, 1996.

Plusieurs dissertations sur la gestion de projet orientés-objet, par un gars qui en a géré de tels projets! Le livre est un peu vieillot (1995). Pas essentiel, mais bon tout de même.

The Unified Modeling Language (UML) User Guide

The Unified Modeling Language (UML) User Guide, 2nd Ed.
BOOCH, Grady, RUMBAUGH, James, JACOBSON, Ivar. Addison-Wesley, 2005.

UML sert à développer des systèmes logiciels, et tout programmeur doit connaître ce langage. Il y a une foule de livres sur UML sur le marché. Les deux suivants sont loin d'être parfaits, mais au moins ils sont écrits par les gars qui l'ont inventé.

Désavantage de celui-ci: Horriblement verbeux, et rempli du style d'écriture typique de Grady: des mots étrangement concrets pour parler de choses abstraites (comme «capturer» les exigences, ou des concepts «croustillants», etc.), mélangés avec des mots excessivement abstraits pour parler de choses plutôt concrètes (comme «artéfact» pour un DLL ou un EXE, etc.). Le livre pourrait être une fraction de sa taille actuelle. J'aurais préféré une demi-douzaine d'exemples de systèmes logiciels modélisés avec UML, du simple au complexe.

The Unified Modeling Language (UML) Reference Guide
BOOCH, Grady, RUMBAUGH, James, JACOBSON, Ivar. Addison-Wesley, 1999. (voir commentaire précédent sur nouvelle édition)

The Unified Software Development Process
BOOCH, Grady, RUMBAUGH, James, JACOBSON, Ivar. Addison-Wesley, 1999.

La notation UML peut être utilisée avec n'importe quelle méthode de développement. Les Trois Amigos présentent leur méthode ici. Bof. Oui. Aucune méthode de développement n'est parfaite. La leur est probablement une des meilleures. Aussi connue sous le nom de RUP (Rational Unified Process)

Design Patterns; Elements of Reusable Object-Oriented Software
GAMMA, Erich, HELM, Richard, JOHNSON, Ralph, VLISSIDES, John M. Addison-Wesley, 1994.

Je ne suis pas d'accord avec plusieurs choses dans ce livre, et les patterns présentés sont trop limités à mon goût, mais c'est le livre qui a «parti le bal» sur les patterns logiciels (des «gros morceaux de solution» qu'on peut réutiliser d'un projet à l'autre). Un programmeur devrait lire ce livre au moins une fois.

4) Livres de C++ pour les tronches («geeks»)

Effective C++, 2nd Ed.
MEYERS, Scott. Addison-Wesley, 1998.

More Effective C++
MEYERS, Scott. Addison-Wesley, 1996.

Deux livres que vont apprécier les «bolés» du C++. Il donne toutes sortes de trucs pour mieux coder en C++.

Large-Scale C++ Software Design
LAKOS, John. Addison-Wesley, 1996.

L'auteur explique comment développer des gros systèmes en C++, et donne plusieurs très bons conseils (et d'autres qui sont maintenant dépassés avec la version ANSI/ISO du C++). Mais sa contribution la plus remarquable est dans son explication de l'architecture physique des systèmes (l'organisation des fichiers, des modules, le processus de compilation et de testage, etc.).

The Design and Evolution of C++
STROUSTRUP, Bjarne. Addison-Wesley, 1994.

Ça se lit comme un roman! Bjarne décrit comment il a inventé ce langage important. La deuxième moitié du livre est maintenant périmée. Le livre est néanmoins important pour comprendre pourquoi le C++ est comme il est, et pourquoi Bjarne aurait pu inventer l'équivalent du Java, mais ne l'a pas fait pour de très bonnes raisons.

5) Livres plus spécialisés

Artificial Intelligence, A Modern Approach, 2nd Ed.
RUSSELL, Stuart, NORVIG, Peter. Pearson Education, 2003.

Semble être un bon livre d'introduction sur ce sujet.

Numerical Recipes in C, 2nd Edition
PRESS, William H., FLANNERY, Brian P., TEUKOLSKY, Saul A., VETTERLING, William T. 1992. (une édition C++, 2002, est disponible)

Introduction to algorithms
CORMEN, Thomas H., LEISERSON, Charles E., RIVEST, Ronald L. McGraw Hill, 1990. (2e éd., 2001, est disponible)

J'aimerais dire que je suis capable de comprendre de tels livres!

3D Computer Graphics, 2nd Edition
WATT, Alan. Addison-Wesley, 1993.

Apparemment, une bonne introduction au sujet. Mes maths sont trop faibles pour que je comprenne vraiment.

Concepts of Programming Languages, 4th Edition
SEBESTA, Robert W. Addison-Wesley, 1999. (8e éd., 2007, est disponible)

Je le trouve peu inspiré, mais un programmeur a besoin d'au moins un livre à ce sujet.

Compilers; Principles, Techniques and Tools, 2nd Edition
AHO, Alfred V., LAM, Monica S., SETHI, Ravi, ULLMAN, Jeffrey D. Addison-Wesley, 2006.

J'aimerais connaître un meilleur livre sur les compilateurs... (Pas seulement parce que celui-ci a beaucoup de coquilles, surtout étant donné le prix très élevé, le nombre élevé d'auteurs, et le fait que ce n'est pas une première édition.) J'aimerais avoir un livre qui:

- Explique toute la théorie essentielle (la plupart des livres existants satisfont ce critère).

- Donne tout le code source pour construire un compilateur pour un language de programmation système, un langage moderne, d'usage général (incluant la gestion des exceptions, les gabarits, la surcharge des opérateurs, les fonctions virtuelles, etc.).

- Présente du code source de bonne qualité, «Catégorie Steve McCONNELL» (pas la cochonnerie typique qui vous ferait échouer si vous étiez un étudiant en génie logiciel de première session, première année).

- Possède une architecture orientée-objet pour le compilateur, et une documentation UML.

The Psychology of Computer Programming
WEINBERG, Gerald M. Dorset House, 1998.

Software Inspection,
GILB, Tom, GRAHAM, Dorothy. Addison-Wesley, 1993.

Applied Cryptography, 2nd Edition.
SCHNEIER, Bruce. John Wiley and Sons, 1996.

Data Mining
ADRIAANS, Pieter, ZANTINGE, Dolf. Addison-Wesley, 1996.

Compiler Design in C

Compiler Design in C
HOLUB, Allen I. Prentice Hall, 1990.

Un des moins mauvais livres sur les compilateurs que j'aie pu trouver. Il présente la théorie, mais il présente aussi tout le code source pour compiler un sous-ensemble du C en une sorte d'assembleur-maison (en passant par la construction de sa propre version de «lex» et «yacc»).

Désavantages: S'il avait été publié en 1975, ce livre aurait été génial. Mais en 1990, le C++ et la programmation orientée-objet étaient bien connus. Le code source sent mauvais. Dommage, très dommage.

6) Quelques mauvais livres d'informatique

Voir Section 6 de Quelques mauvais livres.

| Accueil >> Varia >> Génie logiciel