30 votes

Que faut-il apprendre ? Lisp ou OCaml ou... ?

J'ai déjà quelques langages à mon actif (dans un ordre approximatif d'expertise) : Python, C, C++, PHP, Javascript, Haskell, Java, MIPS, assembleur x86. Mais cela fait presque 2 ans que je n'en ai pas appris un nouveau, et ça commence à me démanger. J'ai quelques critères :

  1. Doit (je répète : doit) avoir une implémentation libre de Linux
  2. Devrait être différent des langues que je connais déjà. En d'autres termes, il doit présenter des caractéristiques qui m'amènent à envisager la résolution de problèmes d'une manière nouvelle.
  3. Il devrait avoir un certain potentiel pour une utilisation pratique. Il n'est pas nécessaire que ce soit le prochain Java, mais cela exclut Brainf* et Shakespeare :) Je ne me soucie pas vraiment du nombre d'offres d'emploi, mais les applications et les bibliothèques du monde réel sont un plus.
  4. Il devrait y avoir au moins juste assez de matériel d'apprentissage gratuit pour me permettre de commencer.

Je pensais à Lisp (CL ? quelque chose d'autre ?) ou OCaml. J'ai déjà une certaine expérience des langages fonctionnels avec Haskell (oui, je sais que Lisp/OCaml sont multi-paradigmes). Je ne suis pas un expert - par exemple, certaines parties du code de Real World Haskell me font encore mal au cerveau, mais je comprends les concepts de base et certains concepts avancés (foncteurs, monades).

Lequel choisir ? Y a-t-il d'autres langues que j'ai oubliées ? Pourriez-vous également inclure des liens utiles vers de bons livres/tutoriels, etc.

27voto

Norman Ramsey Points 115730

Ni Lisp ni OCaml ne sont très éloignés de ce que vous connaissez déjà. Voici quatre suggestions choisies en partie par intérêt intrinsèque et en partie pour élargir vos horizons.

  • Un langage de programmation logique, probablement Prolog. Je n'ai pas trouvé de bons matériaux en ligne, mais le livre L'art de Prolog de Sterling et Shapiro est excellent. Le manuel plus basique de Clocksin et Mellish est également bon. Le principal point d'intérêt est programmation avec des relations, et non des fonctions .

  • A langage purement orienté objet soit Smalltalk o Self . Si vous n'avez utilisé que des langages hybrides orientés objet, vous serez étonné de voir à quel point l'orientation objet pure peut être belle. J'ai fait un lien vers le Squeak de Smalltalk. Je recommanderais personnellement d'apprendre Smalltalk avant de s'attaquer à Self ; il y a une communauté très importante et active et le logiciel est bien développé. Self se tient sur les épaules de Smalltalk et est une conception encore plus inspirante, mais la communauté est beaucoup plus petite. Pour ceux qui ont accès à la bibliothèque numérique de l'ACM, je recommande les ouvrages suivants excellent exposé de Dave Ungar à HOPL-III ; le papier est également assez bon.

  • En Langage de programmation Icon a deux atouts majeurs : un modèle d'évaluation puissant et inhabituel avec un retour en arrière implicite, et un système d'évaluation de la qualité de l'eau extensible par l'utilisateur. modèle de traitement des chaînes de caractères qui bat les expressions régulières à plates coutures. . Je suis désolé de dire que l'Icône n'a jamais vraiment suivi le rythme du temps, et de toutes mes recommandations, c'est la moins pratique. En fait, je crains que le langage ne soit moribond. Mais il vous permettra d'enrichir votre esprit presque autant que Haskell, et dans des directions très différentes. Icon est encore très utile pour les tâches de traitement de chaînes de caractères de taille modeste.

    Vous pouvez lire des informations sur le traitement des chaînes d'icônes dans un article de Ralph Griswold de Journal informatique .

  • En Langage de programmation Lua est ma dernière suggestion, la moins radicale. Elle ne s'intéresse pas tant aux nouvelles caractéristiques ou aux nouveaux paradigmes de la langue qu'à l'évolution de la langue. une superbe ingénierie du langage et de sa mise en œuvre . Lua occupe un certain nombre de niches, notamment les scripts, les jeux, le traitement des chaînes de caractères et la programmation fonctionnelle légère. Mais son principal point d'intérêt est sa transparence. intégration avec C et pour en profiter pleinement, vous devez lier une bibliothèque C à Lua.

    En HOPL-III ce site contient également un excellent discours et un document sur Lua.

25voto

Rainer Joswig Points 62532

Common Lisp et Ocaml sont certainement utiles à apprendre. Si vous connaissez déjà Haskell, CL pourrait être l'expérience la plus différente.

SBCL y Clozure CL sont deux implémentations très utiles de Common Lisp sous Linux. (Aperçu des différentes implémentations : Enquête sur le Common Lisp .)

Comme point de départ, je recommande d'utiliser l'excellent livre de Peter Seibel Pratique du Common Lisp qui est à la fois disponible en ligne et imprimé.

Les conseils de la communauté sont ici : CLIKI .

9voto

fishlips Points 671

Prolog peut être ce que vous recherchez.

Editar

Le premier intervenant a raison, ma réponse était assez courte et pas très utile, donc.. :

Mon implémentation préférée est SWI-Prolog. J'ai personnellement appris de Prolog Programming for Artificial Intelligence. Son style est assez clair et il contient de nombreux exemples, mais je ne possède pas d'autre livre sur la programmation logique (c'est une honte, vraiment :) donc je n'ai pas de base de comparaison.

8voto

Sasha Chedygov Points 36783

Erlang est assez intéressant à apprendre en raison de son modèle de concurrence super efficace et de la facilité avec laquelle vous pouvez écrire des systèmes distribués (pour un exemple de ceci, CouchDB a été écrit en Erlang). C'est un langage fonctionnel dynamiquement typé, mais vous pouvez également écrire du code de manière procédurale. Le tutoriel avec lequel je l'ai appris s'appelle "Débuter avec Erlang" qui couvre pratiquement tous les aspects de la langue.

5voto

Ionuț G. Stan Points 62482

Je vais vous recommander quelque chose que je n'ai pas encore essayé, mais que j'ai l'intention d'essayer, donc vous devez juger par vous-même. Il y a ce langage, appelé IO qui a pour particularité d'être basé sur des prototypes, comme JavaScript, mais qui emprunte également des concepts à de nombreux autres langages. Son marché du travail est probablement inexistant, mais je pensais mentionner ce langage.

Sinon, un langage de la famille Lisp peut être assez différent de ce que vous connaissez déjà. À cet égard, je recommande Schéma qui est, à mon avis, plus élégant que Common Lisp. Le nouveau concept que vous pourriez trouver intéressant dans Scheme est le suivant continuations .

Si vous prenez le chemin du schéma, prenez le temps de regarder ces vidéos de 1986. Ils sont étonnants.

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