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.
NB: Ceci est le port de la question que j'ai posée dans stackoverflow et a été fermé pour être subjectif et argumentatif.
programming-languages
Gulshan
la source
la source
Réponses:
Python, Lisp, C, Haskell
En supposant que la question concernait 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érerais de lire l'essai de Norvig sur la façon d'apprendre la programmation dans 10 ans , puis:
Python : commencez par un langage dynamique, de haut niveau, OO et fonctionnel. Parce qu'il est vraiment important pour les débutants de se sentir productifs dès que possible, et ne pas être désactivé par la syntaxe étrangère, 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), est facilement exécuté à 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 alors que 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 afin de le comprendre facilement.
Lisp: En particulier, parcourez au moins 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 la 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 le PAIP de Norvig pour voir ce qu'un maître peut faire avec la langue. Découvrez 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 en code, et être totalement à l'aise avec les paradigmes ici :
la source
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. Immense bibliothèque (Python est le meilleur pour cela, je suppose). Vous pouvez approfondir les algorithmes car il n'y a pas de distraction. Aucune compilation nécessaire, lancez-la. De plus, avec Python, vous enseignez implicitement un bon style, car l'indentation en Python est obligatoire. Vous pouvez également enseigner l'orientation des objets (à Lua, c'est plus un problème). Le but ici est d'avoir beaucoup de plaisir et de montrer à 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 plus bas niveau (Java ne permet pas ici), et d' enseigner des pointeurs bien . 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 élèves enquêter davantage s'ils le souhaitent.
(Ces 3 premiers sont la "profondeur". Jusqu'à présent, nous avons baissé jusqu'à ce que vous touchiez le fond, qui est "proche du métal", comme on dit. Je pense que c'est très important, beaucoup de questions en programmation sont résolu 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 Common Lisp 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 n'a pas de 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 agréables, 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é le 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 obliger les élèves à penser sans état. Haskell a également d'autres choses très intéressantes, 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.
Quatrième : un langage de pile. Cela brise à nouveau votre logique (si Lisp et Haskell ne suffisaient pas). J'irais jusqu'à enseigner à Jones's Forth car ils connaissent l'assemblage 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 : Une (belle) langue 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.
la source
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 particulièrement eu besoin de les utiliser et je ne vois pas vraiment de quelle manière ils ont influencé mon utilisation des autres langues, sauf peut-être une mauvaise application des paradigmes les uns des autres. Il m'a fallu beaucoup de 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 vraiment grogner OOP quand j'ai commencé à utiliser Objective-C et Java. D'un autre côté, depuis que je travaille (presque) exclusivement dans les langages OO, j'ai pu me concentrer sur l'amélioration de mon utilisation des langages OO, sans essayer de les faire ressembler à Scheme ou PostScript.
la source
Il est difficile de prétendre qu'une séquence est idéale, mais je vais exposer 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 utilisées par les ordinateurs pour traiter 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 pour élever le 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 en 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 à part le débogueur de Perl - ne vous aura préparé à l'expérience de programmation interactive avec un REPL capable ("lecture, évaluation, boucle d'impression"). Travailler avec une image-based environment - qui change la relation entre votre code source et l'idée d'un "programme exécutable" - changera votre idée 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 quelle voiture: vous n'aurez peut-être pas plaisir à 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 découvrirez comment le faire fonctionner, et tirerez sûrement plus de la pauvre bête qu'un amateur.
la source
1. Smalltalk
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 et du plafond élevé».
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 de nombreux 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 a une grande sous-population d'éducateurs professionnels.) Il existe également une autre liste pour les débutants.
2. PROLOG
Un langage de programmation logique qui vous donnera une vision du calcul très différente de n'importe quel autre langage. Prolog est également hautement déclaratif (mais pas complètement: l'
!
opérateur or cut peut avoir un effet sémantique significatif sur un prédicat).3. Lisp commun
Remplacez le schéma ici si vous le souhaitez. Common Lisp prend en charge plusieurs paradigmes, en particulier OO et fonctionnels. Il a également une longue histoire (Lisp est la deuxième langue la plus ancienne encore largement utilisée: seulement FORTRAN est plus ancienne).
4. Haskell
(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é. Des livres d' introduction pratiques existent.
5. C ou Delphi
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 pour l'assemblage.
Pourquoi cette commande?
Smalltalk est très facile à apprendre, vous pouvez donc commencer 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 bonne idée du fonctionnement d'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 vous garantit de ne pas commencer pensant que OO est le seul moyen. Prolog est très différent de la plupart des langues et va étirer vos muscles mentaux afin que vous ne commenciez pas à penser que vous savez tout.
Le Common Lisp, à 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. Le lisp commun est également un peu verruqueux, et vous trouverez la verrue partout où vous allez.
Haskell est le quatrième sur la liste parce que (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 fonctionnait assez bien pour une machine de niveau des années 80. Votre téléphone est si puissant!
Enfin, je ne l' ai pas mis Erlang dans la liste ci - dessus , même si je devrais vraiment.
la source
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 cette première et Python ensuite. Une alternative serait Python d'abord, puis Common Lisp au lieu de Scheme: plus de 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 tout 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. Le Common Lisp vaut la peine d'être appris, 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.
la source
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.
la source
Je suggérerais d' abord de 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érerais également Haskell, Prolog, SQL et le langage d'assemblage (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.
la source
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 progressez. 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 + je construis votre 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.
la source
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 auxquels les gens ont besoin d'être exposés 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 une structure trop importante dans le processus crée un groupe de personnes qui pensent exactement de la même manière. Une monoculture pour ainsi dire.
la source
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 la langue, donc l'étudiant peut se concentrer davantage sur les concepts de programmation et moins sur les particularités syntaxiques d'une langue particulière. 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 car 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:
la source
Langage d'assemblage, C, SQL, C #
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.
la source
Vous avez besoin des fondamentaux:
Après cela, cela n'a probablement plus d'importance.
la source
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.)
la source
Schéma, C, C ++
Je serai biaisé et utiliserai 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 langues de haut niveau vers les langues 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 le C et le schéma, 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 grands 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 d'apprentissage les 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.
la source
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.
la source
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 - de la lingua franca pour l'accès aux données.
XHTML. C'est - pour l'instant - la lingua franca pour la présentation des données.
CSS.
Peut-être C si cela devenait nécessaire.
la source
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.
la source
Pourquoi ne pas aller directement et apprendre VB ou C #. Les deux, à mon avis, sont des langues complètes allant du débutant à l'avancé, à mon humble avis.
la source