Comment devenir habile à apprendre les langages de programmation?
Apprendre un langage de programmation devient progressivement plus facile si vous connaissez plus de langages de programmation. Autrement dit, il devient de plus en plus facile d'apprendre de nouvelles langues chaque fois que vous apprenez une nouvelle langue. Vous pouvez accélérer ce processus en apprenant différents types de langues.
- 1Sachez quelque chose sur les structures de données et les algorithmes. Tous les langages de programmation du monde ne vous feront pas grand-chose si vous ne connaissez pas les algorithmes et les structures de données. Ce sont des outils qui transcendent le langage, la plate-forme et les outils de développement que vous apprendrez. Il est utile de connaître le tri, par exemple, même si vous aurez probablement des routines de bibliothèque pour effectuer le tri à votre place dans la plupart des langues.
- Connaître la logique de base, les mathématiques et la linguistique est également une bonne chose, mais pas indispensable.
- 2Connaissez les différents types de langage.
- Connaissez la différence entre un langage de script et un langage système. Cela était plus important qu'aujourd'hui: de nombreuses personnes utilisent des langages de script comme Python, Ruby et JavaScript (ECMAScript) pour des systèmes plus grands et plus complexes, tandis que les API de plate-forme deviennent disponibles dans une variété de langages.
- Connaissez la différence entre les systèmes de types. Ce qu'il faut savoir avant de débattre des systèmes de types explique bien cela.
- Connaissez la différence entre la programmation en pile et en tas
- Connaissez la différence entre le passage par valeur et le passage par référence.
- Connaissez la différence entre la programmation structurée, orientée objet, fonctionnelle et procédurale. Une langue donnée se concentrera généralement sur l'un d'entre eux, mais certains les mélangent.
- Connaissez la différence entre l'exécution de code compilé, le code interprété, le code compilé juste à temps et le code sur une machine virtuelle. Ils ont des caractéristiques de performance différentes et permettent ou nécessitent différents styles de programmation. Savoir quand utiliser une machine virtuelle et quand exécuter du code de manière native sur l'architecture de la machine peut faire la différence entre le succès et l'échec d'un projet.
- 3Essayez des langages qui vous permettent d'utiliser différentes fonctionnalités et différents styles de programmation.
- Vous constaterez souvent que pour un style de programmation particulier, il y aura un langage très pur mais quelque peu peu pratique qui peut être utilisé pour apprendre ce style de programmation, puis un langage beaucoup plus pratique que vous pouvez utiliser dans la vie de tous les jours. Pour devenir meilleur dans l'apprentissage des langages de programmation, il vaut la peine d'apprendre certains de ces langages purs (de recherche) car ils vous aideront à apprendre plus rapidement les langages pratiques.
- Comme exemple de programmation orientée objet, essayez d'apprendre Smalltalk. Vous ne pourrez pas y construire grand-chose, mais c'était l'un des premiers langages de programmation orientés objet. Ruby conserve une partie de l'héritage Smalltalk tout en étant un langage plus pratique que vous pouvez utiliser pour une grande variété de tâches de programmation. Java, C # et C ++ sont des langages de haut niveau avec prise en charge de la programmation orientée objet.
- Pour les langages qui utilisent des interfaces, essayez Java, C # ou C ++. Python, C ++ et de nombreux autres langages autorisent l'héritage multiple, tandis que Scala utilise des `` traits '', une combinaison intéressante d'interfaces, d'héritage multiple et d'abstracts.
- Pour la programmation orientée objet basée sur des prototypes, apprenez JavaScript (ECMAScript). JavaScript n'a pas de classes: à la place, il a des prototypes. Self est le langage original qui a lancé la programmation basée sur des prototypes, et ActionScript, Lua et REBOL peuvent être utilisés pour ce type de programmation.
- Pour la programmation fonctionnelle, pensez à apprendre OCaml ou Haskell. Ce sont des langages de programmation fonctionnels de type statique. Pour des langages fonctionnels un peu plus pratiques, considérez Scala (sur la machine virtuelle Java) ou F # (on.NET).
- Si vous voulez essayer un langage de programmation très dynamique, essayez Ruby, Python, Perl ou Lisp. Les systèmes de types dans ces langages sont très différents d'un langage comme Java ou C. Il vaut la peine d'essayer ces types de langages pour voir le genre de choses que vous devez faire pour coder pour ne pas avoir ce type de système de types - tests unitaires, métaprogrammation techniques, frappe de canard, etc.
- Essayez des langages spécifiques à un domaine, ce sont des langages construits à des fins très spécifiques, ou une abstraction de langage construite au-dessus d'un langage existant pour exprimer un ensemble spécifique de fonctionnalités. Certains d'entre eux sont SQL, XSLT, FreeMarker, ASP.net, C # LINQ, Shell Scripts, YACC, AWK, SED et des centaines d'autres. Ruby et Scala peuvent tous deux être utilisés pour créer des langages spécifiques à un domaine. Notez que de nombreux langages spécifiques à un domaine ne sont pas Turing Complete.
- 4Découvrez les différentes approches de la concurrence.
- La concurrence est un problème difficile en informatique, et de nombreux nouveaux langages offrent de nouvelles façons d'écrire des routines simultanées. Certaines de ces approches ne peuvent pas être facilement construites avec des bibliothèques et nécessitent à la place le support du langage lui-même.
- Le thread est le moyen le plus largement pris en charge pour prendre en charge la concurrence, mais il peut être très difficile à créer. Java, C ++ et de nombreux autres langages prennent en charge le threading, tandis que certains langages comme Python et Ruby ne prennent en charge que les «threads verts» plutôt que le vrai thread au niveau du système. Le thread devient compliqué car tous les threads ont besoin d'accéder au même ensemble de données globales, ce qui peut entraîner des conditions de concurrence et d'autres problèmes similaires. Donc, d'autres approches ont été introduites...
- La mémoire transactionnelle logicielle (STM) est une solution. Erlang et Clojure sont deux langages très différents qui implémentent cela.
- Les acteurs qui transmettent des messages sont une autre solution: Scala et Erlang méritent d'être examinés pour cela.
- En Python et Ruby, jetez un œil à Twisted et EventMachine qui fournissent des boucles d'événements. Vous pouvez également consulter Node.js, un framework JavaScript (côté serveur) pour créer des boucles d'événements.
- Les co-routines sont un autre moyen de résoudre les problèmes de concurrence: le langage Go de Google est un nouveau langage système de type statique et inféré de type destiné à être comme C en performance mais comme Python en syntaxe et en simplicité. Il utilise des "goroutines", une implémentation de co-routines. Un autre langage construit autour des co-routines est Icon.
- Les files d'attente de répartition sont une autre solution à cela: sur Mac OS X 10,6 et supérieur, «Grand Central Dispatch» est un système de files d'attente créé par Apple pour une utilisation en C, C ++ et Objective-C. L'implémentation open source de GCD est disponible en tant que "libdispatch". Une implémentation Java et Scala appelée HawtDispatch est également disponible.
- 5Lisez le code. L'un des meilleurs moyens d'apprendre une nouvelle langue et d'acquérir des compétences dans l'apprentissage des langues est de lire du code. Il y a beaucoup de code open source disponible, et une fois que vous avez lu le code de quelques applications, vous commencez à voir le bon et le mauvais code et à développer un goût pour ce que vous aimez et ce que vous n'aimez pas, ainsi que comprendre pourquoi certains les styles et les paradigmes de programmation conviennent à différentes tâches.
- 6Trouvez d'abord un projet. En général, il est plus facile d'apprendre une nouvelle langue s'il y a un projet ou un objectif spécifique à atteindre. Apprendre une nouvelle langue en écrivant "Hello World" est beaucoup plus difficile et n'exercera pas les vraies capacités de la langue.
- 7Isolez la différence entre la bibliothèque et la langue. Il peut être déroutant dans certaines langues de faire la distinction entre la «bibliothèque» et la «langue». Il peut également y avoir confusion entre les «générateurs de code» et le «langage». Lors de l'apprentissage d'une nouvelle langue similaire à une langue déjà apprise, il arrive souvent que l'apprentissage de la bibliothèque et de ses particularités soit la tâche la plus importante.
- 8Essayez différents outils. Certains langages de programmation sont conçus pour fonctionner correctement avec des outils particuliers. De nombreux langages peuvent être écrits avec juste un éditeur de texte comme Vim ou Notepad2 ou TextMate, mais le travail en langage Lisp peut être facilité en utilisant Emacs en raison de la prise en charge intégrée des environnements REPL. Lorsque vous travaillez en C # ou dans n'importe quel langage.net, Visual Studio ou MonoDevelop sont idéaux. Lorsque vous travaillez en Java, vous avez le choix entre Eclipse, NetBeans, IntelliJ IDEA et bien d'autres. Même le système d'exploitation et le système de contrôle de version choisis peuvent changer la façon dont le code est écrit.
- Ne laissez pas les outils définir la programmation et ne laissez pas le changement d'outils devenir une obsession. L'apprentissage peut venir d'essayer de nouveaux outils par pure curiosité. Souvent, l'outil utilisé peut ralentir le processus et cela ne devient évident qu'après comparaison avec un nouvel outil. Cependant, changer d'outils juste pour le "progrès" peut en fait ralentir les choses à cause de la courbe d'apprentissage, des bogues ou de la simple incompatibilité avec les processus existants. Parfois, des outils anciens et connus sont meilleurs que de nouveaux outils brillants choisis parce qu'ils sont à la mode.
- 9Apprenez dans la vraie vie. Les dojos de codage, les conférences, les camps de bar, les jours de piratage, les groupes d'utilisateurs et les camps de code sont d'excellents moyens d'apprendre. Ces groupes peuvent être utiles, même s'ils ne sont pas fréquents, pour présenter de nouvelles idées et identifier de nouvelles méthodes pour faire les choses. Il y a un avantage à être mis au défi dans un nouvel environnement.
- 10Apportez vos nouvelles langues au travail. Les programmeurs professionnels peuvent trouver des opportunités d'utiliser de nouvelles connaissances en langage de programmation au travail. Essayez de ne pas devenir un évangéliste fou, mais repérez les opportunités où d'autres langues peuvent mieux résoudre le problème. Cependant, ferrer une langue dans un projet où elle ne convient pas uniquement pour utiliser une nouvelle langue est une recette pour l'échec. Avoir plus d'outils dans la boîte à outils offre toujours plus d'opportunités et de flexibilité.
- Par exemple, tout en travaillant sur un projet Java au travail, pouvoir utiliser Ruby signifie que les scripts de construction peuvent être écrits dans Buildr, et les bibliothèques de test existantes peuvent être utilisées pour écrire du code de test (test / ruby, shoulda, RSpec etc.) et avoir il s'exécute avec l'application Java en utilisant JRuby.
- Les langages de script peuvent toujours être intégrés dans des applications existantes pour permettre la création de scripts pour du code dynamique, généré ou à liaison tardive. Ruby, Python, JavaScript, XSLT et Lua sont tous de bons candidats.
- Les plugins d'éditeur, les hooks de contrôle de version et ainsi de suite peuvent souvent être écrits plus rapidement dans un langage léger, souvent mal typé, comme JavaScript, Perl ou Ruby qu'il ne le peut en Java ou C.
- Si vous devez écrire un frontal pour une application simple, essayez d'utiliser un langage de script comme IronPython ou MacRuby.
- Si vous avez besoin d'écrire un back-end complexe pour une application haute performance, retirez l'un des langages qui vous offre une meilleure prise en charge de la concurrence: Erlang, Scala, Clojure, etc.
- Attention: toutes les entreprises n'apprécieront pas que vous vous faufiliez dans des langages de programmation non approuvés. Et si tout va mal, c'est vous qui serez blâmé!
- 11Contribuez à l'open source. Si vous ne pouvez pas intégrer vos nouveaux langages de programmation au travail, vous pouvez toujours travailler sur des projets open source. Il existe de nombreuses applications amusantes à créer pour n'importe quelle plate-forme (Linux, Windows, Mac, etc.) ainsi que des outils de ligne de commande, des bibliothèques, des fonctionnalités de langage ou même un tout nouveau langage. Un projet open source peut être un excellent substitut si un projet personnalisé ne peut pas être trouvé lorsque vous essayez d'apprendre une nouvelle langue.
- 12Apprenez de nouveaux trucs de langage sans programmation. Apprenez une nouvelle base de données chaque année ou une nouvelle API. Ou mieux encore, apprenez quelques compétences hors programmation. La cuisine, les instruments de musique et la photographie sont toujours populaires dans les cercles de geek. Un sport ou une activité vous donne le temps de réfléchir et de laisser transparaître les idées sur la programmation. C'est tout aussi important.
- 13Une nouvelle langue chaque année? Le livre Pragmatic Programmers suggère que vous devriez apprendre un nouveau langage de programmation chaque année. Chaque année peut être trop souvent, mais essayez de vous engager à apprendre périodiquement de nouvelles langues et de vous tenir au courant des derniers développements. Même si vous ne finissez pas par utiliser les langues pour le travail ou pour des projets open source ou personnels, les connaître vous rend toujours plus précieux pour l'emploi et devrait également vous donner une certaine satisfaction personnelle.
- Certains langages de programmation vous offrent plusieurs façons d'écrire du code. Par exemple, il existe de nombreuses façons de faire en sorte qu'un script C # change la couleur de quelque chose en rouge, bleu, etc.
Lisez aussi: Comment installer Microsoft Office?
En parallèle