web-dev-qa-db-fra.com

Comment puis-je étudier complètement l'informatique?

Étant un programmeur complètement autodidacte, j'aimerais que je puisse m'améliorer en auto-apprenant le cours d'informatique enseigné à un diplômé CS typique.

Trouver des ressources différentes sur Internet a été facile, il y a bien sûr le matériel de cours ouvert du MIT , et il y a des cours Coursera de Stanford et d'autres universités. Il existe de nombreuses autres ressources ouvertes disséminées sur Internet et de bons livres qui sont recommandés à plusieurs reprises.

J'ai beaucoup appris, mais mon étude est très fragmentée, ce qui me dérange vraiment. J'adorerais Si quelque part, je pouvais trouver un chemin que je devrais suivre et une pile à laquelle je devrais me limiter, afin d'être sûr de ce que essentiel parties de l'informatique que j'ai étudiées, puis approcher systématiquement celles que je n'ai pas.

Le problème avec Wikipedia est qu'il ne vous dit pas ce qui est essentiel mais insiste pour être une référence complète.

MIT open course ware for Computer Science and Electrical Engg. a une énorme liste de cours qui ne vous dit pas non plus quels cours sont essentiels et quels sont facultatifs selon l'intérêt/les exigences de la personne. Je n'ai trouvé aucune mention d'un ordre dans lequel on devrait étudier différents sujets.

Ce que j'aimerais, c'est créer une liste que je peux suivre, comme celle-ci

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

Comme vous pouvez le voir clairement, je ne sais pas en quoi consistent les sujets spécifiques de l'informatique.

Il serait extrêmement utile, même si quelqu'un indiquait des cours essentiels de MIT Ware Course Course (+ sujets essentiels non présents à MIT OCW) dans un ordre recommandé de étude.

Je vais lister les messages que j'ai déjà consultés (et je n'ai pas obtenu ce que je cherchais là-bas)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - la première réponse indique qu'il ne vaut pas la peine d'étudier cse

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - pointe vers MIT OCW

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming

46
Optimus

J'ai vu du matériel de cours du MIT, et c'était choquant . Ils avaient du matériel pédagogique qui nécessitait du VC5, des paquets de variables globales implicites, passant des couleurs comme "Blue" au lieu d'ARGB 32 bits, sans parler de 4x [0,1] flotteurs, ce genre de chose. Je ne ferais pas confiance à un programme ou à un code simplement parce qu'il vient d'une grande université.

Mon diplôme CS (d'une université qui est top 10 au Royaume-Uni pour CS) consistait en:

Première année:

  1. OOP- les super basiques
  2. Systèmes informatiques - des trucs comme, des représentations d'entiers binaires.
  3. Théorie de la base de données relationnelle de base
  4. Mathématiques pour CS- géométrie 2D et 3D simple.
  5. Un peu de HTML/JS - trucs complets pour débutants
  6. Un tout petit peu de PHP.
  7. Un peu de programmation fonctionnelle

Deuxième année:

  1. Problèmes juridiques liés à l'informatique, par exemple des lois concernant la protection des données des utilisateurs
  2. Langages de programmation - La hiérarchie Chomsky et lexing ont été couverts
  3. Systèmes d'exploitation, réseaux et Internet - principalement des éléments comme la mémoire virtuelle et la pagination, la pile IP
  4. Infographie 2D - principalement des théorèmes de démonstration des mathématiques sous-jacentes
  5. AI - descriptions de base des réseaux de neurones, des systèmes de croyances bayésiens, etc.
  6. Analyse des exigences - bref aperçu des exigences UML, fonctionnelles/non fonctionnelles.
  7. Projet d'équipe

Troisième année:

  1. Analyse d'algorithmes - théorie de la complexité, principalement
  2. Implémentation de langages de programmation - techniques d'analyse LL/LR, CFG, etc.
  3. Gestion de projets logiciels - un aperçu des modèles Waterfall/Agile
  4. Informatique internationale - Unicode et autres divertissements de localisation
  5. AI avancée - je ne sais pas, honnêtement, et j'ai un examen bientôt
  6. Infographie 3D - surtout, encore une fois, juste pour prouver les théorèmes des matrices de rotation et autres
  7. Systèmes basés sur les agents - principalement sur les agents asynchrones communiquant, prenant des décisions de groupe, etc.
  8. Applications de microprocesseur - traitement numérique du signal
  9. Robotique - couvre des sujets comme la vision par ordinateur et la prise de décision de robot à un niveau élevé

Comme vous le remarquerez, à peu près tout est "les bases" de quelque chose et presque rien n'est couvert à une profondeur utile.

Ce qui valait vraiment la peine d'être fait, essentiel:

  1. OOP- et puis un peu plus, puis un peu plus
  2. Programmation fonctionnelle - aussi un peu plus. Essayez de choisir un langage comme C++ ou C # où vous n'avez pas à réapprendre la syntaxe et les outils, etc., pour couvrir les deux styles.
  3. La mémoire virtuelle de la partie OS est bonne à connaître, tout comme le mode noyau vs le mode utilisateur. Ignorer la segmentation et la pile IP.
  4. Analyse des exigences - doit être utile pour tout projet
  5. Analyse d'algorithmes - il est important de savoir ce qu'est la complexité algorithmique, comment la réduire et quelle est la complexité des opérations courantes.
  6. Modèles de gestion de projets logiciels - de nombreux magasins utilisent Agile et de nombreux anciens utilisent toujours des modèles de style Waterfall.
  7. Informatique internationale - Unicode est essentiel

Les trucs qui valaient la peine, éventuellement:

  1. Langages de programmation - Hiérarchie Chomsky, les outils de lexing et d'analyse. Ignorez la théorie derrière les analyseurs LL ou LR - un analyseur LR peut accepter pratiquement n'importe quel CFG réaliste et sans ambiguïté, et quand il ne le peut pas, la documentation de votre générateur d'analyseur vous en informera.
  2. Graphiques 3D. Je ne veux pas dire "Prouver que c'est une formule matricielle de rotation" une perte de temps, je veux dire des choses réelles "Ceci est un vertex shader", ou GPGPU. C'est amusant, intéressant et différent.
  3. Certains éléments de l'IA sont amusants comme des champs potentiels et des indications de chemin.

Des trucs qui sont essentiels mais je ne les ai pas couverts quand même:

  1. Concurrence - un must-know, au moins les bases, pour quiconque en 2012.

Le reste était une perte de temps complète. Malheureusement, la plupart de ces neuf points que je connaissais déjà, ou que j'ai ramassé les pièces utiles ailleurs. Si vous lisez des choses comme le problème FizzBuzz il devient rapidement évident que vous n'avez pas vraiment besoin de tout savoir pour être au sommet du paquet - ce qui est une chance, car mon diplôme et beaucoup de les documents que j'ai vus en ligne pour d'autres diplômes n'enseignent vraiment pas grand-chose.

24
DeadMG

Essayez les recommandations du programme d'informatique 2001 d'ACM/IEEE, liées ici: http://www.acm.org/education/curricula-recommendations

ainsi que les mises à jour CS 2008.

À la page 17 du rapport de 2001, un tableau pratique souligne toutes les connaissances "essentielles" et énumère toujours les cours au choix.

Un programme de premier cycle n'aurait pas le temps de couvrir même les cours considérés comme essentiels par ces recommandations, ils regrouperont donc certaines catégories et laisseront les étudiants choisir parmi eux (par exemple, les systèmes d'exploitation, les langages de programmation et le génie logiciel). Logiciel et les élèves choisissent une piste).

Vous pouvez trouver les cours requis sur le site Web du département CS pour à peu près n'importe quelle école, et ils devraient en être une version.

5
Ruan Caiman

Open Course ware n'est qu'une liste de cours qu'ils ont mis à disposition. Si vous voulez savoir ce qu'un étudiant aurait pris, passez par le site Web du MIT (non OCW) et regardez le programme réel. Ils ont une liste de ce qui est requis et de ce qui est considéré comme une condition préalable à quoi. Voici leur page.

5
stonemetal