Comment est-ce que j'étudie complètement l'informatique? [fermé]

46

Étant un programmeur complètement autodidacte, je voudrais bien pouvoir améliorer moi-même le cours d'informatique enseigné à un diplômé CS typique.

Trouver des ressources différentes sur Internet a été facile, il existe bien sûr des outils de cours ouverts MIT et des cours Coursera de Stanford et d'autres universités. Il existe de nombreuses autres ressources libres dispersées sur Internet et quelques bons livres qui sont recommandés à plusieurs reprises.

J'ai beaucoup appris, mais mon étude est très fragmentée, ce qui me gêne vraiment. J'adorerais Si, quelque part, je pouvais trouver un chemin que je devrais suivre et une pile que je devrais me limiter à moi-même, afin de pouvoir être sûr des éléments essentiels de l'informatique que j'ai étudiés, puis d'approcher systématiquement ceux que je n'ai pas encore étudiés.

Le problème avec Wikipedia est qu’il ne dit pas ce qui est essentiel mais tient à être une référence complète.

MIT Open Course Ware pour Computer Science et Electrical Engg. a une liste énorme de cours ne vous indiquant pas non plus quels cours sont essentiels et quels cours optionnels selon les intérêts / exigences de la personne. Je n'ai trouvé aucune mention d'un ordre dans lequel on devrait étudier différentes matières.

Ce que j'aimerais, c’est de 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 constater, j’ai une petite idée de la matière informatique.

Ce serait extrêmement utile, même si quelqu'un indiquait les cours essentiels du logiciel de cours du MIT (+ sujets essentiels absents du MIT OCW) dans un ordre d'étude recommandé.

Je vais énumérer les messages que j'ai déjà traversé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 meilleure réponse est 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-computer-science - pointe vers MIT OCW

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

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

Optimus
la source
Complètement? Tous les trucs amusants théoriques aussi?
Oui, j’aime vraiment les trucs théoriques amusants, je pense que cela augmentera ma compréhension du sujet (même si c’est un sujet de débat dans mon cercle). De plus, je me sens seul lorsque mes amis CS discutent de sujets liés à CS ou que je les énerve en leur posant trop de questions.
Optimus
2
Notez qu'il existe certains types d '"îlots" dans le programme où les choses vont ensemble. Par exemple, vous avez rarement besoin du lambda calcul en théorie des graphes. Considérez également qu’il pourrait être intéressant d’avoir des mentors dans les environs: vivez-vous près d’un établissement d’enseignement approprié?
En fait, je le suis et je suis amical avec les profs mais je ne peux pas les déranger tout le temps. Ils ont contribué à beaucoup de connaissances fragmentées que j'ai au départ.
Optimus
3
Dans ce cas, vous pourrez peut-être suivre un ou deux cours choisis, ce qui vous permettra de bousculer les profs tout le temps.

Réponses:

24

J'ai vu du matériel de cours du MIT et c'était terriblement mauvais . Ils avaient du matériel didactique qui nécessitait VC5, des groupes de variables globales implicites, des couleurs passant de "Bleu" à la place 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 provient d'une université réputée.

Mon diplôme CS (issu d’une université classée parmi les 10 meilleurs universités britanniques du secteur des sciences de la vie) était constitué de:

Première année:

  1. OOP - les super basics
  2. Systèmes informatiques comme, représentations binaires entières.
  3. Théorie de base des bases de données relationnelles
  4. Mathématiques pour CS - Géométrie 2D et 3D simple.
  5. Un peu de HTML / JS - complet pour débutant
  6. Un tout aussi petit peu de PHP.
  7. Un peu de programmation fonctionnelle

Deuxième année:

  1. Problèmes juridiques liés à l'informatique - lois régissant la protection des données des utilisateurs
  2. Langages de programmation - La hiérarchie et le lexing de Chomsky ont été couverts
  3. Systèmes d’exploitation, réseaux et Internet - principalement de la mémoire virtuelle et de la pagination, pile IP
  4. Infographie en 2D - la plupart du temps juste pour prouver les théorèmes des mathématiques sous-jacentes
  5. Description de base des réseaux de neurones, des systèmes de croyances bayésiennes, etc.
  6. Analyse des exigences - bref aperçu de l'UML, des exigences fonctionnelles / non fonctionnelles.
  7. Projet d'équipe

Troisième année:

  1. Analyse algorithmique - théorie de la complexité, principalement
  2. Mise en œuvre de langages de programmation - techniques d'analyse syntaxique LL / LR, CFG, etc.
  3. Logiciels de gestion de projet - 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 bientôt un examen
  6. Infographie 3D - encore une fois, il suffit de prouver des théorèmes pour les matrices de rotation et autres
  7. Systèmes basés sur agents - principalement sur les agents asynchrones qui communiquent, prennent des décisions de groupe, etc.
  8. Applications de microprocesseurs - traitement du signal numérique
  9. Robotique - couvre des domaines tels que la vision par ordinateur et la prise de décision d'un robot à un niveau élevé

Comme vous le constaterez, presque tout est "l'essentiel" de quelque chose et presque rien n'est couvert à une profondeur utile.

Ce qui en valait vraiment la peine, c'est 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. Il est bon de connaître la mémoire virtuelle partielle du système d'exploitation, ainsi que le mode noyau et le mode utilisateur. Ignorer la segmentation et la pile IP.
  4. Analyse des besoins - il faut être utile pour tout projet
  5. Analyse d’algorithme: il est important de connaître la complexité de l’algorithme, de la réduire et de déterminer la complexité des opérations courantes.
  6. Modèles de gestion de projets logiciels - de nombreux magasins utilisent Agile et de nombreux anciens utilisent encore des modèles de style cascade.
  7. Informatique internationale - Unicode est essentiel

Ce qui en valait la peine, facultativement:

  1. Langages de programmation - Hiérarchie de Chomsky, les outils du lexing et de l'analyse. Évitez la théorie derrière les analyseurs syntaxiques LL ou LR: un analyseur syntaxique LR peut accepter pratiquement n'importe quel CFG réaliste et sans ambiguïté. Dans le cas contraire, la documentation de votre générateur d'analyseur syntaxique vous en informera.
  2. Graphiques 3D. Je ne veux pas dire "Prouvez que c'est une formule de matrice de rotation" des pertes de temps, je veux dire des choses "C'est un vertex shader", ou GPGPU. C'est amusant, intéressant et différent.
  3. Certains éléments de l'IA sont amusants, comme les champs potentiels et l'orientation.

Des choses essentielles mais je ne les ai pas couvertes quand même:

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

Le reste était une perte de temps totale. Malheureusement, la plupart de ces neuf points que je connaissais déjà ou avaient repris les parties utiles ailleurs. Si vous lisez des articles tels que le problème de FizzBuzz, il devient rapidement évident que vous n’avez pas vraiment besoin de savoir beaucoup pour être au top de la liste. car les autres diplômes n'enseignent pas grand-chose du tout.

DeadMG
la source
3
@ ThorbjørnRavnAndersen: La théorie est un outil pour écrire du code, rien de plus. Une théorie ne vaut rien si vous ne pouvez pas l'utiliser pour créer un meilleur code.
DeadMG
3
@Optimus: La grande majorité de la théorie ne peut pas vous aider à créer un meilleur code.
DeadMG
3
La théorie est la base pour savoir quel code peut être écrit et ce qui ne l'est pas.
17
Il y a de très bons conseils dans cet article, mais vous êtes trop dogmatique pour déclarer que certains champs sont une perte de temps. La programmation des emplois de programmation est considérable ces jours-ci, et une perte de temps pour un emploi peut être essentielle pour un autre emploi. Plutôt que de simplement rejeter quelque chose comme une perte de temps, il serait utile de décrire le type de développement dans lequel vous avez été impliqué.
Charles E. Grant
4
J'ai eu beaucoup d'interviews ces dernières années et il me semble que la plus grande lacune dans les collèges concerne l'enseignement des structures de données et des algorithmes. La deuxième lacune concerne la compréhension de la mise en œuvre des outils en interne. À mon avis, utiliser un outil en particulier est une perte de temps. Il n’est pas utile de connaître la syntaxe C ++ si vous ne pouvez pas expliquer quand utiliser une table de hachage et quand utiliser un arbre.
Gort le robot
5

Open Course ware est simplement une liste de cours qu’ils ont mis à disposition. Si vous voulez savoir ce qu'un élève aurait pris, consultez le site Web du MIT (non OCW) et regardez le programme actuel. 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.

pierre précieuse
la source
Je me penche sur la question, mais j’ai trouvé leurs exigences plutôt laconiques. et où est la longue liste de cours?
Optimus
1
web.mit.edu/catalog/degre.engin.ch6.html est la grande liste. CS est
appelé
merci, cela sera également utile, il est bon de savoir quel programme suivent les grandes universités
Optimus
1
Je suis en train de faire l'EECS à Berkeley en ce moment. Si le programme EEC de MIT est structuré de la même manière que celui de Berkeley, vous n’obtiendrez pas beaucoup de conseils: nous avons une courte séquence d’introduction, puis nous faisons littéralement tout ce que vous voulez dans l’ordre de votre choix, à condition de disposer d’un minimum de fonctions avancées. cours. Je pense que c'est génial, mais cela ne vous aidera probablement pas à choisir les cours à suivre: je devais prendre les mêmes décisions moi-même. (J'ai eu l'aide de mon conseiller pédagogique, mais par coïncidence, son conseil était de prendre son séminaire d'études supérieures :)).
Tikhon Jelvis
@TikhonJelvis Il est plus facile de choisir ce que vous voulez apprendre ou pas, une fois que vous avez une idée de la portée du domaine et du champ à couvrir au moins. En tant que diplômé en génie civil, je ne sais pas ce qui se passe entre Computer Science et Engg. Field
Optimus le
5

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

avec les mises à jour 2008 de CS.

La page 17 du rapport de 2001 contient un tableau pratique qui souligne toutes les connaissances "fondamentales" tout en énumérant les cours à option.

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 les choisir (par exemple, les systèmes d'exploitation, les langages de programmation et le génie logiciel). Logiciel, et les étudiants choisissent une piste).

Vous pouvez trouver les cours requis sur le site Web du département CS de presque toutes les écoles, et ils devraient en être une version.

Ruan Caïman
la source
bon, un peu désuet, mais beaucoup de sujets laissés au choix dans un programme normal sont considérés comme essentiels, il est bon d’avoir un choix plus large d’études disponibles si vous manquez de choses que vous avez fait la queue +1
Optimus
Pour les paresseux, cette liste contient: Structures discrètes (DS) Principes de base de la programmation (PF) Algorithmes et complexité (AL) Architecture et Organisation (AR) Systèmes d'exploitation (OS) Calculatrice Net-Centric (NC) Langages de programmation (PL) Homme-Machine Interaction (HC) Graphiques et calcul visuel (GV) Systèmes intelligents (IS) Gestion de l'information (IM) Questions sociales et professionnelles (SP) Génie logiciel (SE) Science et méthodes numériques (CN).
Damien Roche
-4

Si vous me le permettez, j'aimerais suggérer de rejoindre github.com dans le cadre de votre processus d'apprentissage.

Ensuite, vous pouvez rechercher un code qui a une application réelle qui vous intéresse, le cloner pour vous-même, le travailler avec, coder dessus, apprendre à le connaître et éventuellement commencer à soumettre des correctifs au projet source. , et plus tard, travaillez sur un projet open source qui vous intéresse.

Et, bien sûr, vous vous familiariserez avec git, qui n'en est que meilleur.

Kzqai
la source
5
-1: Bien que précieux, cela ne l'expose pas aux aspects théoriques de l'informatique qu'il a besoin de connaître.
Ken Bloom
Cela fait déjà, nous avons aussi un dépôt personnel git, traîner autour de github fait de vous un meilleur programmeur cependant
Optimus