web-dev-qa-db-fra.com

Quels livres devrais-je lire pour avoir une formation de premier cycle en informatique?

J'ai toujours été un apprenant en grande partie indépendant, glanant ce que je pouvais sur Wikipedia et divers livres. Cependant, je crains d’avoir biaisé mon auto-éducation en omettant par inadvertance des sujets et des concepts. Mon objectif est de m'enseigner l'équivalent d'un diplôme de premier cycle en informatique d'une grande université (peu importe celle).

À cette fin, j'ai acheté et commencé à lire quelques manuels scolaires:

Outre quelques manuels restants des cours que j'ai suivis dans une université d'État médiocre au mieux:

Mes questions sont:

  • Quels sujets ne sont pas couverts par cette collection?
  • Existe-t-il des livres plus rigoureux ou approfondis (ou même plus faciles à lire) que l'un des livres énumérés ici?
  • Y a-t-il des livres qui me font perdre du temps?
  • Dans quel ordre dois-je lire les livres?
  • Qu'est-ce qu'un étudiant de premier cycle MIT ou à Stanford (ou UCB ou CMU ...) apprend que je risque de rater?

Les livres de génie logiciel sont les bienvenus, mais dans le cadre d’études académiques uniquement, veuillez. Je suis au courant de Code Complete et du programmeur pragmatique, mais je recherche une approche plus théorique. Merci!

35
Kyle Cronin

Les deux plus grandes omissions que je vois:

Pour les systèmes d'exploitation, je préfère le Tanenbaum à la place du Silberschatz mais les deux sont bons:

Et à propos de l'ordre, cela dépend de vos intérêts. Il n'y a pas beaucoup de prérequis, les automates pour compilateurs est le plus évident. Lisez d'abord le livre des automates, puis celui du dragon.

Je ne connais pas tous vos livres, mais ceux que je connais sont assez bons pour que les autres soient également décents. 

Il vous manque également des logic et mathématiques discrètes .

Et n'oublions pas quelques bases de données théoriques livres!

13
Vinko Vrsalovic

La meilleure approche que j'ai trouvée consiste à choisir votre université préférée, à consulter son site Web et à consulter les cours du diplôme. La plupart des grands ont leurs lectures obligatoires publiées pour chaque cours. Open Course Ware du MIT est un bon exemple.

Soit dit en passant, cela fonctionne également pour les programmes menant à un grade non CS.

12
therealhoff
9
dacracot

Le MIT a présenté son programme "OpenCourseWare" il y a plusieurs années. Ils mettent en ligne livres/devoirs/conférences et vous permettent de suivre le programme MIT:

http://web.mit.edu/catalogue/degre.engin.ch6.shtml

6
William Leara

De nombreux cours dans les meilleures universités n'utilisent pas de manuel car aucun des manuels disponibles n'est suffisant. (J'ai fait mes études à Princeton et ai enseigné pendant huit ans à Harvard.) Quand quelqu'un recommande un livre, demandez si le livre est vraiment bon ou s'il est juste le meilleur disponible sur le terrain

Par exemple, dans compilers , je ne suis pas un grand fan du "Livre du dragon"; Je n'ai jamais aimé l'approche, et l'édition actuelle est très dépassée. Je pense que vous seriez mieux avec un livre comme celui de Michael Scott, Programming Language Pragmatics , qui, bien qu'un peu scattershot, est un livre charmant à lire. (Je n'y ai jamais enseigné, je ne peux donc pas dire ce que les étudiants en pensent.) Je ne connais pas de livre vraiment bon sur la construction d'un compilateur pour autodidacte, bien que vous puissiez regarder les ouvrages de Cooper et Torczon Engineering a Compiler } _ car il est à jour et écrit par deux des meilleurs ingénieurs compilateurs du secteur.

4
Norman Ramsey

Je ne peux probablement pas suggérer les meilleurs livres, mais il manque plusieurs sujets importants:

  • Statistiques
  • Algèbre linéaire
  • Théorie des graphes et mathématiques discrètes
  • Infographie
  • Calcul scientifique
  • Réseaux informatiques
  • Génie logiciel
  • Structures de données

Certains sujets pouvant être considérés comme plus "facultatifs" pourraient être:

  • Cryptographie 
  • Traitement des images/modèles Et reconnaissance 
  • Bioinformatique
  • Informatique sur Internet
  • Physique Classique
3
MahlerFive

Désolé, vous ne pouvez pas remplacer quatre années d’université en lisant un livre ou un certain nombre de livres, quelle que soit leur qualité. Si vous pouviez, pourquoi quelqu'un irait-il à l'université?

3
Graeme Perrow

Premièrement, je ne m'inquiéterais pas pour ça. Mais si vous souhaitez qu'un livre apprenne certaines des idées abstraites du CS, je vous recommanderais The Turing Omnibus ou Introduction théorique à la programmation .

Si je décidais d'embaucher deux programmeurs sans avoir beaucoup d'expérience, mais que l'un d'entre eux avait un diplôme en informatique et l'autre pas, j'engagerais celui avec le diplôme en informatique. Mais quand on arrive à comparer deux programmeurs avec une douzaine d'années d'expérience, le degré importe peu.

3
John D. Cook

Les éléments des systèmes informatiques

Ce livre vous emmène des bases de la conception matérielle à la rédaction de programmes dans des langages orientés objet. À l'aide d'un simulateur, vous construisez un ordinateur complet. Ensuite, vous écrivez un assembleur, un système d'exploitation, un compilateur (pour un langage orienté objet compilé pour s'exécuter sur une machine virtuelle), puis un jeu écrit en utilisant ce langage.

C'est beaucoup de travail, mais les auteurs ont soigneusement rendu la tâche aussi simple que possible. Vous devrez travailler dur pour travailler sur celui-ci, mais cela vous donne une perspective complète de la programmation informatique.

Vous pouvez voir des exemples de chapitres, ainsi que jouer avec les simulateurs ici .

Fortement recommandé! (même pour les diplômés en CS)

3
Gilad Naor

Je pense que vous pouvez utiliser la plupart des autres livres à titre de référence et simplement absorber Programming Pearls dans son intégralité. Cela vous ferait mieux que 90% des programmeurs que j'ai jamais rencontrés.

2
Ben Hoffstein
  • Discrete Math I & II (mon école privée )
  • Physique I (la plupart des écoles du Du Missouri)
  • Statistiques I
  • Cryptographie (facultatif mais j’ai aimé La)
  • OpenGL en C++ (facultatif mais soigné)
  • Analyse et conception de systèmes (ingénierie logicielle Du point de vue commercial . La classe était si bonne.)

  • Éthique.

  • Mise en réseau (enseigne des algorithmes de réseau , Des modèles de bits traitant de Des données du réseau).

    Il y a certaines choses que pour les comprendre nécessitent aide; pas nécessairement un professeur (bien qu'ils le fassent pour gagner leur vie), mais peut-être un ami qui a suivi le cours ou étudié le domaine.

Lire des livres sur ces sujets ne signifie pas que vous les connaissez. Faire des maths sur les maths, coder sur le code, etc. est ce qui vous aide à comprendre et montre que vous connaissez le sujet à la fin.

2
J.J.

Mathématiques concrètes

1
user9282

Concepts, techniques et modèles de programmation informatique semble avoir la vue d'ensemble la plus large que j'ai vue sur les divers styles et techniques de programmation de langage de niveau supérieur.

1
Curt J. Sampson

Vous devriez également avoir un livre sur les bases de données générales sans entrer dans les détails d'Oracle, MySQL, SQL Server, etc.

Je recommanderais: Systèmes de base de données: The Complete Book

1
Ryan Guest

Je ne sais pas comment cela se passe aux États-Unis, mais dans mon pays, nous étudions les mathématiques discrètes et une introduction à la théorie des graphes avant les langages formels et les automates.

En outre, je ne vois aucun livre couvrant les réseaux informatiques ... pourquoi n'essayez-vous pas les réseaux Computer Networks de Andrew Tanenbaum ?

1
Pablo Marambio

Avant toute chose, lisez Informatique: une introduction moderne . Cela vous donnera une bonne base et une vue d'ensemble des sujets à aborder.

Introduction aux algorithmes est très bon. Pour une introduction à la programmation fonctionnelle, je recommande de travailler avec ML pour le programmeur qui travaille

Domaines qui différencient l'informaticien du programmeur: connaissances de base en mathématiques discrètes, compréhension de base de l'architecture VLSI et des systèmes, compréhension de la cryptographie et de la sécurité, compréhension de la théorie de la calculabilité, compréhension de la théorie de l'information.

1
moonshadow

C'est une très bonne liste. Les deux sujets que j’ajouterais certainement au mélange sont les mathématiques discrètes et les réseaux. Les autres sujets susceptibles de vous intéresser sont les compilateurs, les images de synthèse, les systèmes d'exploitation distribués. Il existe également des sous-domaines intéressants de l'IA, comme la vision par ordinateur et l'apprentissage automatique. Et pour gérer tout cela, vous avez certainement besoin d’algèbre linéaire et de probabilité.

Et il va sans dire que vous ne pouvez pas vraiment faire de la science informatique en lisant des livres. Pour bien comprendre chaque sujet, vous devez faire des projets. Je suggérerais également de regarder Open Courseware du MIT, où les professeurs post-syllabus, notes de cours et devoirs.

1
Dima

Des livres sur le développement logiciel professionnel couvrant le fonctionnement des projets logiciels, différentes méthodologies et modèles de conception sont excellents. La connaissance de la conception Web est également très utile en matière d'emploi.

Je ne comprends pas pourquoi vous essayez de le faire vous-même. Même une université «médiocre au mieux» sera en mesure de vous enseigner les compétences bien mieux que vous ne pouvez l'enseigner vous-même. Il s’agit de rencontrer des personnes qui ont déjà travaillé dans le secteur informatique. 

Il ne s'agit pas de l'université, mais des efforts que vous déployez qui déterminent votre performance.

Ma réponse ne vous est peut-être pas utile car je ne sais pas d'où vous venez. En Écosse, où je vis, je dois aller à l'université gratuitement, ce n'est peut-être pas le cas pour vous.

0
Scottm

J'ajouterais Introduction à la théorie du calcul à la liste

0
hiena

Le livre "Gang of Four" Modèles de conception . Le cours sur les modèles de conception que j'ai suivi à l'université était probablement la classe la plus bénéfique que j'ai jamais suivie.

0
Mark Carpenter

Structures de fichiers: Une approche orientée objet avec C++

Beaucoup de bonnes informations sur les blocs de périphériques et la structuration de fichiers que vous ne trouverez dans aucun des livres que vous avez énumérés. Il a eu quelques critiques sur Amazon car les gens n’aimaient pas ses exemples de code, mais le but de ce livre est d’enseigner les concepts, et non de donner des exemples de code copier-coller.

Assurez-vous également d'avoir un livre sur les compilateurs

0
Robert

Même si je suis dans le même plan: étudier l’informatique pendant mon temps libre après le travail; Voici quelques-uns des livres que j’ai sur ma tablette en ce moment.

  1. Application de modèles UML et de motifs - Larman
  2. Introduction aux algorithmes - Cormen
  3. Mathématiques discrètes et ses applications - Rosen
  4. Génie logiciel
  5. Programmation avancée sous UNIX

Est-ce que cette liste sera modifiée dès que je les aurai finies ... :-)

0
rptr87