Qu'est-ce que tu penses? Quelle est la séquence d'apprentissage de langage de programmation idéale qui couvrira la plupart des langages et paradigmes les plus utilisés aujourd'hui et aidera à saisir les bases, les idées et les pratiques de programmation communes? Vous pouvez même suggérer une séquence d'apprentissage pour les paradigmes plutôt que pour les langues.
N.B. : Ceci est le port de la question que j'ai posée dans stackoverflow et a été fermé pour être subjectif et argumentatif.
En supposant que la question portait sur une séquence d'apprentissage idéale pour les nouveaux arrivants à la programmation (puisque les anciens à la programmation auront eu leur propre séquence d'apprentissage (probablement accidentelle)), je suggère de lire Essai de Norvig sur la façon d'apprendre la programmation en 10 ans , puis:
Python : Commencez avec un langage dynamique de haut niveau OO & langage fonctionnel. Parce que c'est vraiment important pour les débutants de se sentir productifs ASAP , et ne pas être désactivé par la syntaxe extraterrestre, le manque de bibliothèques, le manque de multiplateforme, le manque de ressources d'apprentissage et le manque de communauté. Python est très lisible, possède des tonnes de bonnes bibliothèques (en particulier des bibliothèques scientifiques - un scientifique/ingénieur moderne doit savoir programmer), s'exécute facilement à partir de la plupart des systèmes d'exploitation, a des tonnes de tutoriels et des livres gratuits entiers, et est généralement convivial - tout en étant suffisamment puissant pour évoluer avec vous lorsque vous devenez un programmeur avancé travaillant sur de gros problèmes. Il est également important de renforcer les conventions importantes et utiles pour un débutant: la lisibilité du code compte BEAUCOUP, et vous devriez écrire du code pour vous-même et pour les autres à comprendre facilement.
LISP: En particulier, au moins écrémez La structure et l'interprétation des programmes informatiques ou regardez les vidéos SICP , et ouvrez grand les yeux en voyant les fondements et le pouvoir expressif de programmation - on peut faire tellement avec si peu. Apprenez comment LISP peut exprimer non seulement le paradigme fonctionnel, mais OO, logique/déclaratif, etc. - comme la création de nouveaux langages spécifiques au domaine. Lisez PAIP de Norvig pour voir ce qu'un maître peut faire avec la langue. Découvrez ensuite Clojure , un dialecte LISP moderne qui pourrait être l'une des prochaines grandes choses.
C: Seulement parce que c'est la lingua-franca de l'informatique. :) Peut-être facultatif de nos jours si l'on est principalement un programmeur dans un domaine non logiciel particulier. Je trouve ça moche mais ça vaut le coup de savoir pour obtenir une appréciation du matériel sous-jacent. Allez avec K&R , bien sûr.
Haskell : Puissance fonctionnelle pure. Où Com.Sci actuel. la théorie et le pouvoir expressif pratique se rencontrent. Voir Real World Haskell .
Après la tournée ci-dessus, on serait très habile pour s'attaquer aux problèmes et exprimer des solutions dans le code, et être totalement à l'aise avec les paradigmes ici :
Voici comment je le ferais:
Python (ou Ruby ou Lua): un langage interprété, pas de types, vous pouvez faire des choses en quelques lignes. Énorme bibliothèque (Python est le meilleur pour cela, je suppose). Vous pouvez approfondir les algorithmes car il n'y a pas de distractions. Aucune compilation nécessaire, exécutez simplement. En plus de cela, avec Python vous enseigner implicitement le bon style, car l'indentation en Python est obligatoire. Vous pouvez également enseigner l'orientation des objets (en Lua est plus un problème). Le but ici est d'avoir beaucoup de plaisir, et montrez à l'élève ce qui peut être fait.
C++ (ou peut-être Java): Un langage typé et rapide. Si vous avez besoin de l'orientation d'objet, vous connaissez déjà certains concepts. L'idée principale est de "traduire" ce que vous avez fait en Python et de le faire avec les nouvelles contraintes (principalement les types). Maintenant, si vous avez les bons concepts, l'ajout de types n'est pas un problème. La prochaine étape consiste à penser à un niveau plus bas (Java n'aide pas ici) et à enseigner aux pointeurs enfin. J'entends par là expliquer l'espace d'adressage, le CPU, le système d'exploitation, un peu pour que vous puissiez commencer à voir sous votre programme. Un langage compilé introduit la distinction entre interprétation et compilation, très utile pour expliquer ce qu'est le langage machine, etc.
Assemblage : Enfin, pas de magie, il suffit de parler à la machine. Il y a un débat sur la syntaxe Intel et GAS, ce n'est pas important. Si vous avez MIPS, je pense que c'est mieux pour l'enseignement, mais je suppose que x86 est plus pratique car il est plus répandu (x86_64 est meilleur car a plus de registres et de subtilités). Il vous suffit de supprimer une partie de la complexité et de laisser les étudiants approfondir s'ils le souhaitent.
(Ces 3 premiers sont la "profondeur". Jusqu'à présent, nous descendons jusqu'à ce que vous touchiez le fond, qui est "proche du métal", comme on dit. Je pense que c'est très important, de nombreuses questions de programmation sont résolues lorsque vous avez une idée claire de ce qui se passe. Lorsque vous le savez, vous pouvez acquérir davantage de connaissances en toute confiance.)
Schéma (ou LISP commun ou Clojure): Comme l'a dit @dukeofgaming, les langages LISP vous permettent d'enseigner bien la récursivité (pour ce schéma est le meilleur, car ne avoir des boucles explicites). Mais j'irais enseigner deux autres choses: les fermetures et les macros. Les macros sont ce qui sépare les langages LISP des autres. Personnellement, je n'aime pas les macros Scheme mais ce n'est pas trop important. Je pense que les macros Clojure sont Nice, par exemple (mais la récursivité dans Clojure n'est pas aussi propre, car la JVM n'a pas de récursivité de queue). Les fermetures sont un concept très important, une fois que vous les bloquez, vous "voyez" Javascript instantanément. Après avoir étudié C++, Python et LISP, Javascript devient "trivial".
Haskell : Pour un langage fonctionnel, je ne pense pas que vous puissiez battre Haskell. LISP et Scheme sont considérés comme fonctionnels, mais pour mettre l'accent sur la programmation fonctionnelle, vous devez forcer les élèves à penser sans état. Haskell a également d'autres choses très sympas, comme le curry et la correspondance de motifs pour la "déstructuration". Je ne connais pas beaucoup Haskell, mais la concision du code que vous pouvez écrire est tout simplement magnifique. Bien connaître Haskell facilite grandement la compréhension d'Erlang.
Forth : Un langage de pile. Cela brise à nouveau totalement votre logique (si LISP et Haskell ne suffisaient pas). J'irais jusqu'à enseigner Jones's Forth car ils connaissent Assembly et alors vous pouvez totalement comprendre ce qui se passe. (Connaître Forth ouvre PostScript, par exemple.)
(Donc, ces 3 derniers sont l'ampleur que vous disiez. Pour moi, ces langues sont assez étranges qu'elles changent votre façon de penser. Elles l'ont fait pour moi au moins. Et je pense qu'avec elles, vous comprenez suffisamment de paradigmes pour apprendre une nouvelle langue très rapidement.)
En option, vous pouvez étudier ces éléments:
Smalltalk : Un langage purement orienté objet. Pour voir ce qui se passe lorsque vous prenez l'Orientation au sérieux, le langage n'a pas besoin de "si", "pour". Tout est un message: encore une grande réalisation. (Cela rendrait Objective-C facile maintenant.)
Go : Un (beau) langage mettant l'accent sur la concurrence. Je trouve Go très agréable et confortable pour programmer avec.
Prolog : Un autre paradigme de programmation. Je n'ai écrit aucun Prolog mais je comprends que c'est encore un autre langage époustouflant.
Sérieusement, j'ai peut-être appris le BASIC, le COBOL, le Fortran, le Forth, le Pascal et le Prolog de mon temps, mais je n'ai jamais eu particulièrement besoin de les utiliser et je ne vois vraiment pas en quoi ils ont influencé mon utilisation des autres langues, sauf peut-être une mauvaise application des paradigmes les uns des autres. Il m'a fallu du temps pour désapprendre suffisamment BASIC pour écrire réellement Pascal structuré, quelques années pour arrêter d'écrire du code Pascal en C, et encore quelques années pour réellement grok OOP quand j'ai commencé à utiliser Objective- C et Java. D'autre part, depuis que je travaille (presque) exclusivement dans des langages OO), j'ai pu me concentrer sur l'amélioration de mon utilisation de OO langages, sans essayer de les faire ressembler à Scheme ou PostScript.
Il est difficile de prétendre qu'une séquence est idéale, mais je vais présenter un plan que je peux justifier:
C
L'apprentissage du langage C demande de la patience et de la diligence et vous présentera les méthodes de base avec lesquelles les ordinateurs traitent les données et vous montrera le plus large éventail de responsabilités qu'un programmeur peut accepter pour gérer une telle machine.
Perl
Comme antidote à la rigueur requise par C, essayez le Perl incroyablement indulgent. Ce qui a pris une semaine pour écrire en C, vous pouvez écrire en une heure en Perl. Il introduit un autre type de plaisir dans la programmation et montre comment l'exclusion de certaines préoccupations et de certains détails libère le programmeur de se concentrer sur différentes choses.
C++, ou peut-être Java
Ensuite, voyez comment l'accent mis par C sur les aspects bas et primitifs de la programmation sert de base à l'augmentation du niveau d'abstraction, en notant les métiers que l'on fait en termes d'efficacité lors de la progression dans l'abstraction. Découvrez comment former des abstractions qui peuvent conserver les efficacités importantes pour votre programme.
LISP commun
C'est la récompense du slog précédent. Vous trouverez des échos de ce que vous avez appris dans toutes les langues précédentes, et vous verrez à quel point tant de concessions précédentes semblent idiotes lors de la programmation dans LISP. Le préprocesseur C et les modèles C++ en préparent un pour apprécier le système de macro de LISP. Vous retrouverez la facilité d'expression de Perl, les opportunités d'optimisation de bas niveau de C, les capacités de construction d'abstractions de C++ ou Java, et vous les dépasserez tous. Aucun des trois précédents - peut-être à l'exception du débogueur de Perl - ne vous aura préparé à l'expérience de programmation interactive avec un [~ # ~] repl [~ # ~] ("read, eval, print boucle"). Travailler avec un environnement basé sur image - qui change la relation entre votre code source et l'idée d'un "programme exécutable" - changera votre idée globale de ce que signifie construire un programme.
Au-delà de ces quatre, l'exploration d'autres styles de programmation, tels que la programmation fonctionnelle dans Haskell, ou la programmation logique dans Prolog, permet une compréhension plus complète de la gamme de programmation - des connaissances à l'échelle, si vous voulez - mais à ce stade, votre temps est mieux servi en améliorant votre métier - connaissances approfondies - avec n'importe quelle langue que vous connaissez.
Ayant goûté suffisamment de langues distinctes, votre point de vue s'élèvera pour se concentrer sur les idées qui transcendent l'une d'entre elles. C'est un peu comme la différence entre apprendre à conduire la voiture de son père et savoir conduire n'importe quoi voiture: il se peut que vous n'aimiez pas avoir à conduire la mini-fourgonnette de location pendant quelques jours, sachant très bien les plaisirs de conduire une voiture de sport préférée, mais vous comprendrez comment la faire fonctionner et vous tirerez sûrement plus de la pauvre bête qu'un amateur.
Conçu à l'origine au moins en partie comme un moyen pour les enfants d'utiliser les ordinateurs pour apprendre. La syntaxe est assez simple à décrire dans un paragraphe. Comme LOGO, il illustre le principe de la "barrière basse à l'entrée, du plafond haut".
Smalltalk est un pur langage OO dans le sens où "tout est un objet".
Il enseigne également de nombreuses techniques fonctionnelles, en particulier dans son API de collecte: chaîner des messages, des fonctions d'ordre supérieur, mapper, réduire, etc.
La communauté Squeak est dynamique et accueillante. Vous verrez également de nombreuses discussions sur les techniques avancées: tout comme la communauté LISP, il y a beaucoup de Smalltalkers très expérimentés sur la liste de diffusion désireux de partager leurs connaissances. (Cela ne fait pas de mal que la communauté Squeak ait une grande sous-population d'éducateurs professionnels.) Il y a aussi ne autre liste pour les débutants.
Un programmation logique langage qui vous donnera une vue très différente du calcul à peu près n'importe quel autre langage. Prolog est aussi fortement déclaratif (mais pas complètement: le !
ou l'opérateur cut peut avoir un effet sémantique significatif sur un prédicat).
Remplacez le schéma ici si vous le souhaitez. LISP commun est compatible avec plusieurs paradigmes, en particulier OO et fonctionnel. Il a également une longue histoire (LISP est le deuxième plus ancien langage encore largement utilisé: seul le plus ancien de FORTRAN est ).
(Attention: je viens juste de commencer à l'apprendre.) Probablement le langage fonctionnel le plus pur de la planète. Il dispose d'un système de type statique très avancé. Handy introbooks existe.
Vous devez savoir comment fonctionnent les ordinateurs. Vous devez savoir comment la mémoire et le CPU fonctionnent réellement. Les deux sont traditionnellement "proches du métal" et ont des communautés qui encouragent à réfléchir à la façon dont leur langage se compile à l'Assemblée.
Smalltalk est très facile à apprendre, vous pouvez donc rapidement vous concentrer sur la résolution de problèmes plutôt que de combattre un compilateur ("faible barrière à l'entrée"). Une fois que vous commencez à programmer, il n'y a pas non plus de limite artificielle à ce que vous pouvez faire - "plafond haut".
Une fois que vous avez une idée juste de la façon dont fonctionne OO (et - à condition qu'il y ait BEAUCOUP de compréhensions différentes de ce que signifie "OO" - il est juste de dire que OO domine le marché), passer à Prolog garantit que vous ne commencez pas à penser que OO est la seule façon. Prolog est très différent de la plupart langues, et étirer vos muscles mentaux afin que vous ne commenciez pas à penser que vous savez tout.
Le LISP commun, à son tour, est le langage d'un adulte. Il a un standard mature, il est à la pointe de la conception de langages depuis des décennies (avec Smalltalk) - toutes ces nouvelles fonctionnalités sophistiquées que votre langue préférée vient d'acquérir? Les chances sont les idées incubées dans LISP ou Smalltalk. LISP commun est également un peu verruqueux, et vous trouverez la verrue partout où vous allez.
Haskell est le quatrième sur la liste car (on me dit: je viens juste de commencer à l'apprendre) sa pureté signifie que certaines choses très courantes (comme les E/S) sont plus difficiles à faire que dans des langages moins purement fonctionnels. Les gens de Haskell utilisent également des terminologies assez exotiques (des mots comme "catamorphisme", par exemple), et vous feriez probablement mieux d'avoir une expérience de programmation à votre actif avant de vous y attaquer. (Mais je dois réitérer, je viens juste de commencer à l'apprendre! Prenez cet avis avec une pincée de sel!)
Et pourquoi C/Delphi dure-t-il? Parce qu'à moins que vous ne travailliez dans des systèmes embarqués, vous ne devriez vraiment pas avoir à apprendre la programmation en pensant que la gestion manuelle de la mémoire est tout ce qu'il y a. La collecte des ordures a fonctionné assez bien pour une machine de niveau des années 80. Votre téléphone est si puissant!
Enfin, je n'ai pas mis Erlang dans la liste ci-dessus même si je le devrais vraiment.
Python. Une excellente introduction à la programmation. Cela sera également lié à toute exposition antérieure à la programmation.
Schème. Aussi une excellente introduction à la programmation. Si vous travaillez avec des novices en programmation, vous voudrez peut-être enseigner cela en premier et Python seconde. Une alternative serait Python d'abord, puis LISP commun au lieu de Scheme: plus travail, mais plus de récompense.
C. Un langage de bas niveau qui reste proche du silicium. Bon pour apprendre ce qu'un ordinateur peut faire. Vous pouvez remplacer une certaine forme de langage assembleur, mais C est assez proche des bases et beaucoup plus facile à utiliser.
Prolog. Alternativement, remplacez n'importe quel langage à usage général de style déclaratif, si vous pouvez en trouver un que vous préférez.
Haskell. Pour le système de type et la fonctionnalité pure, si rien d'autre.
Il y a plusieurs candidats ici, car il est impossible de couvrir tous les concepts en six langues. LISP commun vaut bien l'apprentissage, ne serait-ce que pour le système macro et le système objet (qui est différent de la plupart des autres que j'ai vus). Forth, Tcl et APL sont toutes des langues étranges qui ont connu un certain succès, et l'une d'entre elles serait bonne pour empêcher l'élève de se sentir comme s'il ou elle a tout appris. Erlang serait bon pour la concurrence.
De nombreuses bonnes réponses ont été fournies, mais je n'ai vu personne proposer SQL. C'est un animal complètement différent de la plupart des autres énumérés et très important pour tout programmeur qui doit gérer des bases de données.
Vous pouvez également envisager certains "langages" de script au niveau du système d'exploitation, tels que Batch, grep, awk, etc. "Make" peut également entrer dans cette catégorie.
Une autre langue que vous voudrez peut-être considérer (si elle n'est pas encore complètement morte) est COBOL. Il est suffisamment différent des autres langages procéduraux qu'il mérite d'être mentionné. Les variations de C, Fortran, Basic, etc. sont devenues si similaires qu'une fois que vous en connaissez un, passer à un autre n'est pas un gros problème, mais COBOL manque de beaucoup de constructions considérées comme acquises dans les autres. (Cela fait au moins 20 ans que je n'ai rien fait avec COBOL, donc mes observations peuvent ne plus être valables concernant cette langue.)
Vous voudrez peut-être mentionner APL uniquement d'un point de vue historique - ou laissez-le reposer en paix. Votre choix.
Un nouveau venu n'a besoin que d'une langue pour commencer, après avoir appris la deuxième langue, il progresse déjà au-delà de nombreux développeurs concurrents. J'apprendrais dans l'ordre suivant:
Vous pouvez demander "où est C++?" et qu'en est-il de X? Honnêtement, l'apprentissage de plusieurs langues fait deux choses: il enrichit votre expérience et fournit une motivation pour apprendre plus de langues. La liste des langages que je connais bien (Java, C #, Ruby, C++, Javascript) sont tous orientés objet - mais c'est principalement parce que c'est ce que je dois faire au travail tous les jours. La liste des langues auxquelles j'ai été exposé (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) m'ont toutes donné de précieuses leçons. Je peux au moins comprendre ce qui se passe avec ces langues. Il y a beaucoup de choses que je n'ai pas explorées, mais très bien à l'avenir. Il existe également quelques langages de balisage: HTML, XSL: FO, XSLT, CSS, XML, SGML que les gens doivent connaître s'ils veulent travailler avec le Web de quelque manière que ce soit.
Après avoir appris au moins deux langues différentes, je ne pense vraiment pas que vous devriez restreindre ce que quelqu'un qui a le désir d'apprendre décide de reprendre ensuite. L'apprentissage devrait être une expérience organique, et trop de structure dans le processus crée un groupe de personnes qui pensent exactement de la même manière. Une monoculture pour ainsi dire.
La plupart de ces réponses semblent à peu près les mêmes, je vais donc offrir une opinion différente. Je pense depuis longtemps que la meilleure première langue est Tcl.
Pourquoi? D'une part, c'est très facile à apprendre. Il n'y a pas beaucoup de syntaxe dans le langage, l'étudiant peut donc se concentrer davantage sur les concepts de programmation et moins sur les particularités syntaxiques d'un langage particulier. Au moment d'écrire ces lignes, Tcl a exactement 12 règles qui régissent l'ensemble du langage (contre onze pour les deux dernières décennies).
D'autre part, Tcl est livré avec un fantastique langage GUI intégré, vous pouvez donc obtenir une satisfaction relativement instantanée et apprendre les bases de la programmation événementielle.
Troisièmement, il est extensible. Vous voulez enseigner une boucle de répétition? Vous pouvez écrire une commande qui fait une boucle de répétition afin que vous puissiez non seulement apprendre à utiliser la répétition ... jusqu'à ce que vous puissiez apprendre en quoi elle est différente d'une boucle while parce que vous l'avez écrite vous-même.
De plus, comme il est extensible, il est facile de passer à C. Vous pouvez apprendre les bases de C et apprendre à a) étendre Tcl avec de nouvelles commandes écrites dans un autre langage, ou b) apprendre à ajouter un langage de script à un programme écrit en C.
Une fois que vous avez appris Tcl et C, la plupart des autres langues se situent quelque part entre ces deux extrêmes et devraient être relativement faciles à comprendre. Ma liste complète, avec les quatre que j'enseignerais après Tcl et C sont:
Je suggérerais premier lire Eric Raymonds "Comment devenir un pirate informatique" car il a des points très intéressants sur la façon de commencer, y compris LISP qui a la notion de "code est des données et des données est du code".
Pour la programmation, je suggère également le langage Haskell, Prolog, SQL et Assembly (juste quelques uns).
Peu importe ce que vous voulez apprendre, prenez le temps de l'apprendre correctement et d'écrire des quantités de code non triviales. C'est un peu comme faire du vélo - vous ne pouvez pas l'apprendre d'un livre.
Premièrement> Que voulez-vous faire lorsque vous démarrez la programmation? Apprendre à être un programmeur de jeux est différent que d'apprendre à être un programmeur de base de données pour une entreprise ... est différent d'un programmeur basé sur le Web ...
Deuxièmement> Une fois que vous commencez à apprendre, voulez-vous commencer haut et descendre? Ou commencez bas et montez. L'apprentissage du C # (haut niveau) est très différent de l'apprentissage de l'assemblage (bas niveau).
Un choix énorme dépendra de ce que vous voulez faire. La programmation d'un pilote inclura très probablement C ou Assembly ... La programmation d'un site Web sera PHP, C #, asp, etc ... Vous ne toucherez pas Assembly pour la programmation web ... etc ...
En ce qui concerne les bases ... une fois que vous décidez de ce que vous voulez faire, il est plus facile de choisir une langue. Par exemple, je suis devenu analyste de données dans un hôpital. Mon "choix" de langues est donc SQL/TSQL/DB2 pour l'accès aux données, C # WPF pour les clients Windows, Silverlight pour les clients Web, certains RPG/CL pour la logique back-end IBM ...
Personnellement, je m'en tiens à un bon livre + crée ton propre programme pour pratiquer la langue. J'aime APress et j'ai adoré lire C # 2008 Illustrated lors de l'apprentissage de C #. Ils ont d'autres livres qui englobent les bases pour les non-initiés ainsi que pour les experts.
Je sais, ennuyeux et old-skool. Et toute la question ignore la partie vraiment difficile de la programmation, qui est la résolution de problèmes, la modélisation de domaine et la construction d'algorithmes. Mais voici pourquoi:
vous ne pouvez pas vous frayer un chemin à travers le langage d'assemblage; vous l'obtenez ou vous ne le faites pas. le compilateur ne vous sauvera pas, il n'y a pas de surcharge de framework ou de bibliothèque, et vous ne pouvez pas vous cacher de l'architecture de la machine; c'est de la programmation pure (au niveau débutant à deux chiffres)
après avoir écrit quelques programmes en langage assembleur de plus de quelques centaines de lignes, les pointeurs et la gestion de la mémoire ne sont plus mystérieux, et vous devriez avoir commencé à remarquer des modèles dans le code (if, switch, array, loops, etc. ). C fait ressortir ces motifs au soleil et les fait briller. La bibliothèque standard est utile sans être immense, mais ne vous embêtez pas avec les macros/modèles/etc. à ce stade.
sauter maintenant dans les bases de données avec SQL. N'exagérez pas avec les procédures stockées, obtenez simplement les bases des tables et des requêtes.
après avoir écrit quelques programmes C de plus de quelques centaines de lignes, les pointeurs, les structures et la gestion de la mémoire sont une seconde nature et les constructions procédurales sont de vieux amis. Vous commencerez à remarquer des modèles d'ordre supérieur: ces fonctions vont toujours avec cette structure de données, cette partie du code est exactement comme cette partie du code, sauf pour les méthodes X, Y et Z, etc. Ajoutez à cela votre compréhension des données relationnelles et vous êtes maintenant prêt pour un langage orienté objet. Avec un cadre massif et une documentation généralement obtuse. Bienvenue dans le monde réel! Explorez les interfaces graphiques, écrivez des applications de bureau, écrivez des sites Web, écrivez des services Web, écrivez ce que vous voulez. Allez chercher un emploi si vous êtes si enclin.
Êtes-vous maintenant un programmeur Jedi? Un code ninja? Non, maintenant vous êtes simplement compétent. Mais vous avez une base solide sur laquelle vous pouvez explorer les nouveaux trucs amusants et brillants.
Vous avez besoin des fondamentaux:
Après cela, cela n'a probablement plus d'importance.
Commencez près du métal:
Maintenant, le problème avec une approche aussi large est que personne ne peut devenir même capable à distance dans ces langues sans des années d'études.
Sauf si votre intention est de leur apprendre "Bonjour tout le monde", ce qui devrait prendre environ un mois pour tous 6.
Je vais être partisan et utiliser le modèle que mon université utilise actuellement pour son programme de base en informatique. J'étais contre pendant ma première année mais dans mes dernières années, je lui en suis reconnaissant. Le modèle est basé sur le fait de ne nécessiter aucune expérience de programmation mais de pouvoir apprendre.
Schéma
Nous sommes vous apprenez d'abord la programmation, moins il y a de magie, mieux c'est. La langue d'enseignement de Scheme présente une définition claire et raisonnable d'une langue, un très petit ensemble d'axiomes (la "magie") que vous pouvez construire et développer. Quiconque peut comprendre les fonctions en mathématiques peut tracer et raisonner les programmes Scheme. Commencer par Scheme fournit un moyen propre mais puissant de penser au calcul sans se soucier des détails spécifiques à la langue.
C
Le passage du schéma au C est radical, mais vous permet d'en savoir plus sur le mappage très important des langages de haut niveau vers les langages de bas niveau. Apprendre le modèle de mémoire (pointeurs, tas, pile, etc.) et comment les programmes sont compilés et exécutés, comment les pointeurs, la pile et le tas sont des compétences essentielles. Grâce à cette compréhension de bas niveau, vous pouvez commencer à analyser les programmes à un niveau supérieur (Big O). Vous pouvez commencer à rouler vos propres types de données abstraits, en jouant avec différentes implémentations (disons une simple table de hachage par rapport à un arbre binaire pour un ensemble).
C++
En apprenant C et Scheme, nous commençons à voir différents paradigmes de langages de programmation et comment ils peuvent s'appliquer à différents problèmes. Vous pouvez maintenant aborder les aspects les plus effrayants de la programmation: choix et compromis. Le choix du langage de programmation peut affecter les performances, la lisibilité, la maintenabilité, la robustesse, etc. Pour résoudre des problèmes plus gros que des choses que vous pouvez avoir en tête, ce choix est grand mais aussi dangereux. C++ essaie de faire le moins de choix possible pour le programmeur. En apprenant le C++, vous apprendrez comment faire ces compromis et ces choix vous-même pour résoudre vos problèmes.
Il est possible que vous n'utilisiez aucune de ces langues dans l'industrie ou que vous ne les touchiez plus jamais, mais le processus de leur apprentissage vous aide à comprendre les autres langues que vous utiliserez. Un autre aspect est que vous apprenez les outils autour d'une langue spécifique. Exécuter gcc via la ligne de commande, apprendre Vim, parcourir un programme à l'aide de GDB, créer des fichiers Make, archiver du code à l'aide de SVN, écrire des scripts Shell pour automatiser les tests, etc.
Remarquez que le programme de base comprend également d'autres cours (architecture informatique, structures et algorithmes de données, compilateurs, systèmes d'exploitation, etc.). Il ne suffit donc pas simplement d'apprendre ces langues pour maîtriser la programmation.
Passer d'une langue de base à une langue de haut niveau est la voie à suivre. De cette façon, vous avez toujours une idée de ce qui se passe dans le dos.
OK, c'est le dernier jour pour la prime. Et j'ajoute ma réponse. Ma séquence suggérée-
C, C++, Java/C #, Python/Ruby, tout autre langage (Assembly/LISP/Prolog etc.)
Python. Pour faire avancer les choses, faites une programmation ordinaire. Procédurale, OO et (dans une certaine mesure) fonctionnelle.
Expressions régulières. Ils sont dans la bibliothèque Python, mais c'est une DSL distincte.
Shell (BASH ou autre). Les "&", "|", ";" les opérateurs pour combiner les processus sont critiques et désagréables en Python.
SQL. Il s'agit - pour l'instant - du lingua franca pour l'accès aux données.
XHTML. Il s'agit - pour l'instant - du lingua franca pour la présentation des données.
CSS.
Peut-être C si cela devenait nécessaire.