172 votes

Quelles sont les langues importantes à apprendre pour comprendre les différentes approches et concepts ?

Lorsque tout ce que vous avez est une paire de coupe-boulons et une bouteille de vodka, tout ressemble à la serrure de la porte du hangar à bateaux de Wolf Blitzer (remplacez cela par un marteau et un clou si vous ne lisez pas xkcd).

Je programme actuellement Clojure, Python, Java et PHP, donc je suis familier avec la syntaxe C et LISP ainsi qu'avec les espaces blancs. Je connais les notions d'impératif, de fonctionnel, d'immuable, de POO et quelques systèmes de types et autres. Maintenant, je veux plus !

Quelles sont les langues qui adoptent une approche différente et qui seraient utiles soit pour le choix d'un outil pratique, soit pour la compréhension théorique ?

Je n'ai pas envie d'apprendre un autre langage fonctionnel (Haskell) ou un autre langage impératif OOP (Ruby), ni de pratiquer des langages ludiques peu pratiques comme Brainfuck.

Une chose très intéressante que j'ai trouvée moi-même sont les langages monoiconiques basés sur des piles comme Factor.

Ce n'est que lorsque j'ai l'impression de comprendre la plupart des concepts et d'avoir des réponses à toutes mes questions que je veux commencer à réfléchir à mon propre langage ludique pour contenir toutes mes préférences personnelles.

287voto

fogus Points 3909

Les questions d'ordre pratique étant très subjectives, je dirai simplement que l'apprentissage de différents paradigmes de langage ne peut que faire de vous un meilleur programmeur. Qu'y a-t-il de plus pratique que cela ?

Fonctionnel, Haskell - Je sais que tu as dit que tu ne voulais pas, mais tu devrais vraiment y réfléchir. Vous avez eu une certaine exposition fonctionnelle avec Clojure et même Python, mais vous ne l'avez pas expérimentée pleinement sans Haskell. Si vous êtes vraiment contre Haskell, les bons compromis sont ML ou OCaml.

Déclaratif, Datalog - De nombreuses personnes recommanderaient Prolog dans ce créneau, mais je pense que Datalog est un exemple plus propre de langage déclaratif.

Array, J - Je viens seulement de découvrir J, mais je trouve que c'est une langue étonnante. Il va vous faire tourner la tête comme un bretzel. Vous remercierez J pour cela.

Stack, Factor/Forth - Le facteur est très puissant et je prévois de m'y plonger dès que possible. Forth est le grand-père des langages Stack et, en prime, il est le plus puissant de tous les langages de programmation. simple à mettre en œuvre vous-même. Il y a quelque chose à dire sur l'apprentissage par la mise en œuvre.

Dataflow, Oz - Je pense que l'influence d'Oz a le vent en poupe et ne fera que croître à l'avenir.

Basé sur des prototypes, JavaScript / Io / Self - Self est le grand-père et a une grande influence sur tous les langages basés sur des prototypes. Ce n'est pas la même chose que la POO basée sur les classes et ne devrait pas être traitée comme telle. De nombreuses personnes arrivent dans un langage prototype et créent un système de classes ad hoc, mais si votre objectif est d'élargir votre esprit, je pense que c'est une erreur. Utilisez le langage au maximum de ses capacités. Lire Organiser des programmes sans cours pour des idées.

Système expert, CLIPS - Je le recommande toujours. Si vous connaissez Prolog, vous aurez probablement l'avantage pour vous mettre à niveau, mais c'est un langage très différent.

Frink - Frink est un langage à usage général, mais il est célèbre pour son système de conversions d'unités. Je trouve ce langage très inspirant dans sa volonté inébranlable d'être le meilleur dans ce qu'il fait. Et puis... c'est vraiment amusant !

Types fonctionnels+optionnels, Qi - Vous dites avoir de l'expérience avec certains systèmes de type, mais avez-vous de l'expérience avec des systèmes de type "skinnable*" ? Personne ne l'a fait... mais ils devraient. Qi est comme Lisp à bien des égards, mais son système de types va vous époustoufler.

Acteurs+Tolérance aux pannes, Erlang - Le modèle de processus d'Erlang fait l'objet d'une grande attention, mais ses mécanismes de tolérance aux pannes et de remplacement de code à chaud changent la donne. Vous n'apprendrez pas grand-chose sur la FP que vous n'apprendriez pas avec Clojure, mais ses fonctionnalités de FT vous feront vous demander pourquoi d'autres langages ne semblent pas y arriver.

Profitez-en !

33voto

Paul Points 18124

Qu'en est-il de Prolog (pour l'unification/le retour en arrière, etc.), Smalltalk (pour "tout est un message"), Forth (polissage inverse, interpréteurs threadés, etc.), Scheme (continuations) ?

Pas une langue, mais le L'art du protocole des méta-objets c'est un truc hallucinant

33voto

delnan Points 52260

Je seconde Haskell. Ne pensez pas "Je connais un Lisp, donc je connais la programmation fonctionnelle". Vous avez déjà entendu parler des classes de types ? Les types de données algébriques ? Les monades ? Les langages fonctionnels "modernes" (plus ou moins - en tout cas pas vieux de 50 ans ;) ), en particulier Haskell, ont exploré une pléthore de nouveaux concepts très puissants et utiles. Les classes de type ajoutent un polymorphisme ad-hoc, mais l'inférence de type (encore une autre chose que les langages que vous connaissez déjà n'ont pas) fonctionne comme un charme. Les types de données algébriques sont tout simplement géniaux, surtout pour modéliser des structures de données de type arbre, mais ils fonctionnent aussi très bien pour les énumérations ou les enregistrements simples. Et les monades... disons que les gens les utilisent pour créer des exceptions, des E/S, des analyseurs syntaxiques, des compréhensions de listes et bien d'autres choses encore - de manière purement fonctionnelle !

En outre, le sujet est suffisamment profond pour occuper une personne pendant des années ;)

32voto

Jonas Kölker Points 4520

Je programme actuellement Clojure, Python, Java et PHP [...] Quels sont les langages qui adoptent une approche différente et qui seraient utiles pour le choix d'un outil pratique ou la compréhension théorique ?

C

Il y a un lot de code C qui traîne c'est vraiment pratique. Si vous apprenez le C++ aussi, il y a une gros lot de plus de code autour (et le saut est court une fois que vous connaissez C et Java).

Il vous donne également (ou vous oblige à avoir) une grande compréhension de certaines questions théoriques ; par exemple, chaque programme en cours d'exécution vit dans un tableau de 4 Go, en quelque sorte. Les pointeurs en C ne sont en fait que des indices dans ce tableau - ils sont simplement un autre type d'entier. Ce n'est pas différent en Java, Python, PHP, sauf que c'est caché sous une couche de surface.

De plus, vous pouvez écrire du code orienté objet en C, vous devez juste être un peu manuel à propos des vtables et autres. Le Portable Puzzle Collection de Simon Tatham est un excellent exemple de code C orienté objet assez accessible ; il est également assez bien conçu et vaut la peine d'être lu par un programmeur C débutant/intermédiaire. C'est ce qui se passe en Haskell aussi - les classes de type sont en quelque sorte "juste une autre vtable".

Autre avantage du C : en participant à des questions-réponses avec des programmeurs C compétents, vous obtiendrez de nombreuses réponses qui expliquent le C en termes de constructions de niveau inférieur, ce qui vous permettra de construire une base de connaissances plus proche du terrain.

Il se peut que je ne comprenne pas l'objectif de l'OP - je pense que c'est le cas, à en juger par les autres réponses - mais je pense que cette réponse pourrait être utile à d'autres personnes qui ont une question similaire et qui lisent ce fil.

27voto

Galactus Points 481

Extrait du site de Peter Norvig :

"Apprenez au moins une demi-douzaine de langages de programmation. Incluez un langage qui supporte les abstractions de classes (comme Java ou C++), un qui supporte l'abstraction fonctionnelle (comme Lisp ou ML), un qui supporte l'abstraction syntaxique (comme Lisp), un qui supporte les spécifications déclaratives (comme Prolog ou les templates C++), un qui supporte les coroutines (comme Icon ou Scheme), et un qui supporte le parallélisme (comme Sisal). "

http://norvig.com/21-days.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X