Apprendre quoi? Lisp ou OCaml ou...?
J'ai déjà quelques langues sous ma ceinture (en gros, de l'ordre de l'expertise): Python, C, C++, PHP, Javascript, Haskell, Java, MIPS, assembleur x86. Mais cela fait presque 2 ans que j'ai appris un nouveau, et je commence à avoir des démangeaisons. J'ai quelques critères:
- Doit (répéter: doit) avoir un Linux libre de la mise en œuvre
- Doit être différent de celui des langues que je connais déjà. En d'autres termes, il doit avoir des fonctions qui m'a fait réfléchir sur la résolution de problèmes dans une nouvelle façon.
- Doit avoir un certain potentiel pour une utilisation pratique. Il n'a pas besoin d'être la prochaine Java, mais cette Brainf* et Shakespeare 🙂 je ne m'en soucie pas vraiment combien d'offres d'emploi a-t-elle, mais dans le monde réel les applications et les bibliothèques sont un plus.
- Doit avoir au moins juste assez de matériel d'apprentissage pour me faire elle.
Je pensais Lisp (CL? quelque chose d'autre?) ou OCaml. J'ai déjà une certaine expérience avec les langages fonctionnels avec Haskell (oui, je sais que Lisp/OCaml sont multi-paradigme). Je ne suis pas un expert, par exemple, des parties de code à partir de Real World Haskell peut encore se contorsionner mon cerveau, mais je comprends les concepts de base et avancés (des foncteurs, les monades).
Lequel choisir? Toutes les autres langues que j'ai oublié? Aussi, pourriez-vous s'il vous plaît inclure quelques liens utiles pour les livres/tutoriels etc.
- Dupliquer: stackoverflow.com/questions/362226/... et stackoverflow.com/questions/231951/...
- sa question est plus spécifique
- Pas vraiment les mêmes réponses fondamentalement appliquer.
- Je ne suis pas poser la question "quelle est votre prochaine langage de programmation", mais "quelle est MA prochaine langage de programmation", ou plutôt "ce qui est une pratique qui diffère le plus de <liste>".
- D'accord, c'est une question plus spécifique orientée vers les OP besoins spécifiques. Pas une réplique exacte par tous les moyens.
Vous devez vous connecter pour publier un commentaire.
Ni Lisp, ni OCaml est super loin de ce que vous savez déjà. Voici quatre suggestions choisi en partie pour l'intérêt intrinsèque et, en partie, pour étirer vos horizons.
Une logique de langage de programmation, probablement Prolog. Je n'ai pas trouvé de bons matériaux en ligne, mais le livre L'Art de Prolog par Sterling et Shapiro est excellent. Les plus manuels de base par Clocksin et Mellish est également bon. Le principal point d'intérêt est de programmation avec des relations, des fonctions pas.
Un pur langage orienté objet, soit
Smalltalk ou Auto. Si vous n'avez utilisé hybride langages orientés objet, vous serez étonné de voir comment belle pur l'orientation de l'objet peut être. Je suis lié à la Squeak mise en œuvre de Smalltalk. Personnellement, je recommanderais d'apprentissage Smalltalk avant de s'attaquer à Soi; il y a une très grande et très actif de la communauté et le logiciel est bien développé. Auto se tient sur Smalltalk épaules et est encore plus inspirant de la conception, mais la communauté est beaucoup plus petite. Pour ceux qui ont accès à l'ACM Digital library, je recommande le excellent exposé par Dave Ungar à HOPL-III; le papier est également très bon.
La Icône de langage de programmation a deux grandes choses pour elle; un puissant et inhabituel modèle d'évaluation implicite de recul, et un utilisateur extensible modèle de la chaîne de traitement qui bat des expressions régulières tous les creux. Je suis désolé de dire que l'Icône ne s'est jamais vraiment gardé le rythme avec le temps, et de toutes mes recommandations, c'est le moins pratique. En fait j'ai peur de la langue est moribonde. Mais il va étirer votre esprit presque autant que Haskell, et sauvagement dans différentes directions. L'icône est toujours très utile pour la chaîne de traitement des tâches de taille modeste.
Vous pouvez lire sur l'Icône de la chaîne de traitement dans un article de Ralph Griswold de Ordinateur Journal.
La Langage de programmation Lua est ma dernière et moins radicale de la suggestion. Son intérêt n'est pas tellement dans les nouvelles fonctionnalités de la langue ou de paradigmes, mais dans le superbe génie de la langue et de sa mise en œuvre. Lua occupe un certain nombre de niches, y compris les scripts, les jeux, la chaîne de traitement, et léger de la programmation fonctionnelle. Mais son principal point d'intérêt est sa fluidité intégration avec C, et pour obtenir le plein bénéfice, vous devez lier une bibliothèque C en Lua.
La HOPL-III site web contient également une excellente parler et papier sur Lua.
string processing
vs regex? Je ne peux pas google.Tant en Common Lisp et Ocaml sont certainement utiles pour apprendre. Si vous savez déjà Haskell, CL peut-être le plus différent de l'expérience.
SBCL et Clozure CL sont à la fois très utile implémentations de Common Lisp sur Linux. (Vue d'ensemble sur les différentes implémentations: Common Lisp enquête.)
Comme un point de départ je vous recommande d'utiliser Peter Seibel excellent ouvrage Pratique Common Lisp, qui est à la fois disponible en ligne et imprimés.
Communauté pointeurs sont ici: CLIKI.
Prolog peut être ce que vous cherchez.
Modifier
Le premier intervenant est bon, ma réponse a été d'assez courte et pas très utile, donc:
Mon préféré de mise en œuvre est complexe SWI-Prolog. Personnellement, j'ai appris à partir du Prologue de la Programmation de l'Intelligence Artificielle. Le style est assez clair et il contient de nombreux exemples, mais je n'ai pas tout autre livre sur la programmation logique (c'est une honte, vraiment 🙂 donc je n'ai pas de base de comparaison.
Erlang est assez intéressant pour apprendre, grâce à son super efficace simultanéité modèle, et la facilité avec laquelle vous pouvez écrire des systèmes distribués (pour un exemple de cette, CouchDB a été écrit en Erlang). C'est un typées dynamiquement langage fonctionnel, mais vous pouvez aussi écrire du code dans une procédure de la mode. Le tutoriel que j'ai appris qu'il s'appelle "Débuter avec Erlang", qui couvre à peu près tous partie de la langue.
Je vais vous recommander quelque chose que je n'ai pas encore essayé, mais le plan de, de sorte que vous avez à juger par vous-même ce un. Il y a cette langue, appelée IO, ce qui est particulier, en ce que son prototype basé sur, comme le JavaScript, mais aussi emprunte des concepts à partir de nombreuses autres langues. Son marché du travail, c'est probablement inexistant, mais j'ai pensé que je vous parle de cette langue.
Sinon, une langue de la famille du Lisp peut être assez différent de ce que vous savez déjà. À cet égard, je vous recommande Programme, qui est, à mon avis, plus élégante que la Common Lisp. Le nouveau concept que vous pourriez trouver intéressant dans le Schéma est continuations.
Si vous prenez le Régime de chemin, prenez le temps de regarder ces vidéos à partir de 1986. Ils sont étonnants.
Avoir un regard sur Smalltalk ! Soit Cincom VWST ou Smalltalk/X - ne prennent pas la peine avec le Bruit que l'interface est terrible). VASTE est bon aussi, mais vraiment uniquement centrée sur Windows. Et ne pas se préoccuper de la sceptiques que les pores de mépris sur Smalltalk-ils arent de l'utiliser et sont coincés dans le bourbier de l'édition-run-debug cycle de langues et de multiples dispirt des librairies. 🙂
Pourquoi ces Smalltalks - eh bien, ils sont livrés complets avec une excellente IDE, d'outils graphiques intégrés, le meilleur débogueur que vous ne verrez jamais, aide en ligne, et est totalement indépendant de l'OS sous-jacent. Par exemple, un ST/X de programmation fonctionnant sous Linux, peut être transféré ( code source) pour Windows ST/X et il doit s'exécuter.
ST/X est libre avec seulement de très petites licience restrictions, Cincom offrir gratuitement un NC ( Non Commercial ) de la version qui n'est PAS limité. J'utilise ST/X comme je préfère le défaut look & feel
qu'il offre. Leurs interfaces IDE sont très similaires.
Langues sans IDE & outils d'interface graphique êtes juste de gaspiller votre temps comme le monde est vraiment GUI, peu importe combien terrible le langage sous-jacent est. Par exemple, Ruby est grande, mais avec aucune IDE ou facile outils d'interface graphique c'est vraiment frustrant.
Smalltalk n'est pas facile d'entrer dans, et il n'est pas parfait,(quelle langue?) mais très satisfaisant pour apprendre & utiliser. Et maintenant que le matériel et les systèmes d'exploitation ont finalement rattrapé avec Smalltalks besoins . très efficace.
Si vous souhaitez faire usage de votre Java et de la programmation fonctionnelle des connaissances, et vous voulez apprendre Lisp, puis essayez Clojure.
La mise en œuvre est gratuit et multi-plateforme, y compris Linux, parce qu'il tourne sur la JVM. Être un Lisp, c'est assez différent (en utile et de merveilleux moyens) de la plupart des autres langues pour rendre les choses intéressantes. Certaines fonctions, telles que des données immuables structures, multimethods, prise en charge des métadonnées, l'accent sur la sécurité de la concurrence, etc. sont assez original par rapport aux langues que vous avez énumérés. Clojure est fortement orientée vers la pratique et utile de la langue plutôt qu'académique. C'est un langage fonctionnel, mais pas "pure", qui est sans doute une bonne chose. Vous pouvez aussi trivialement faire usage de n'importe quelle bibliothèque Java de l'intérieur Clojure.
Clojure est un nouveau langage, de sorte que le seul livre à ce jour est Programmation Clojure, mais il est assez bon. Il y a aussi un wiki qui peuvent ne pas être totalement à jour, parce que la langue est encore en train d'évoluer très rapidement. Le liste de diffusion et canal IRC sont très sympathiques, des lieux accueillants à poser des questions. Le site officiel est également une bonne ressource, bien sûr.
J'deuxième Rainer Common Lisp recommandation.
CL a toutes les choses que vous cherchez et de fournir une véritable expérience inédite qui permettra également de faire vos travaux de codage et les approches dans d'autres langues mieux.
Mais apporter de patience et de persévérance, vous aurez à saisir beaucoup de concepts qui semblent étrangers au premier abord.
Vous pouvez essayer de Tcl. Il a été suffisamment différentes pour provoquer une réaction indésirable dans mon cerveau, donc je ne peux pas vraiment vous dire comment je l'ai trouvé différent, mais il y a eu beaucoup de bonnes choses qui y sont écrites (peut-être moins aujourd'hui que plus tôt).
C# est une implémentation libre de Linux sous la Mono projet, et on peut dire que c'est un très commercialisable de compétence, sauf si vous êtes complètement anti-Microsoft.
Mon préféré C# livre est Pro C# 2008 et le .NET 3.5 Plate-forme, la Quatrième Édition.
Si vous êtes vraiment envie exotiques, F# est un OCaml style de langage qui s'exécute sur le .NET plate-forme et noir et blanc, et est l'objet de beaucoup d'attention ces jours-ci.
http://msdn.microsoft.com/en-us/fsharp/default.aspx
Livres pour F#:
http://www.amazon.com/s/ref=nb_ss_gw?url=search-alias%3Daps&field-keywords=f%23
Des suggestions que j'ai vu jusqu'à présent, j'aime Lisp (voir Secko) et Smalltalk (voir brett), comme les deux vous donnera un autre point de vue de langues. Prolog encore plus.
Une autre langue qui est différent est Erlang -- je n'ai pas eu la chance d'apprendre encore, mais il gère la simultanéité d'une manière différente. Le meilleur lien que je puisse vous donner est le site web principal.
En termes de recommandations, Lisp est bon à la fois parce qu'il est actuellement utilisé et parce qu'il est très vieux. Les autres, vous devrez regarder les sources et de voir que l'on appel le plus.
Essayer FORTRAN, alors? J'entends c'est toujours activement utilisées par les scientifiques et mathemematical communautés, plus il devrait être assez dissemblables pour être un défi.
Compilateurs:
http://gcc.gnu.org/wiki/GFortranBinaries
http://www.g95.org/
http://www.fortran.com/compilers.html
http://www.thefreecountry.com/compilers/fortran.shtml
Ide:
http://www.eclipse.org/photran/
http://force.lepsch.com/ (FORTRAN 77 uniquement)
Tutoriels:
Introduction à la Moderne FORTRAN: http://www-uxsup.csx.cam.ac.uk/courses/Fortran/
FORTRAN 90 Tutoriel: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/fortran.html
Vous pouvez également apprendre Visual Basic.NET, au cas où vous seriez obligés de maintenir que. De toute évidence mono a un travail Linux mise en œuvre de celui-ci:
http://www.mono-project.com/Visual_Basic
Facteur de est assez radicalement différent de tout ce que vous avez dit que vous savez, et aussi tout le reste répertoriés. Elle est basée sur la pile, à l'instar de Suite, mais a un assez complet de la bibliothèque et beaucoup de fonctionnalités intéressantes.
Ada est très pratique, il y a un compilateur basé sur gcc, mais il est également tout à fait différent de l'autre impératif langues que vous connaissez. Je trouve le système de type un peu étouffante, mais cela valait la peine d'apprendre quelque chose sur.
Lisp est un grand HLL, il a tout ce que les autres langues de l'absence. À mon avis, c'est un très bon langage qui permet de "satisfaire" toutes les programmeurs besoins.
Perl est également un HLL comme Lisp, c'est intéressant et amusant en même temps. Il dérive de C, de sorte que vous pouvez le ramasser, comme vous allez. Il peut être difficile parfois, et certaines personnes ont tendance à se perdre en apprentissage, mais il est utile de connaître.
Les deux langues sont libres d'utilisation et de venir avec Linux.
Liens
Lisp:
Si Lisp est si grand,
Une Introduction et un Tutoriel pour Common Lisp
Perl:
PERL -- Practical Extraction and Report Language
Livres
Sur Lisp - Grand livre de Paul Graham sur le langage Lisp. C'est gratuit et vous pouvez le télécharger ici.
Scala a été très bonne pour me faire voir la programmation dans une nouvelle lumière. Je ne l'ai pas utilisé pour quoi que ce soit worklike encore, mais il est encore affecté la façon dont j'écris du code dans d'autres langues - et pas seulement de Java, mais PHP. J'ai récemment écrit un simple analyseur pour un plugin pour WordPress, et le code est beaucoup plus fonctionnelle et immuable qu'il ne l'aurait été il y a six mois, et le mieux pour elle, malgré le manque de l'application en PHP.
La seule autre langue qui ont affecté la façon dont je travaille de manière spectaculaire à l'est du Perl, près d'une décennie plus tôt. Perl a beaucoup contribué à la façon dont je le pseudo-code, même si je n'ai jamais toucher à la langue elle-même.
Beaucoup de gens de comparer les aspects fonctionnels de la Scala à Haskell. Vous pouvez même imaginer que la connaissance de Haskell signifie que vous savez déjà tout Scala pourrait vous enseigner, mais je ne le crois pas. La façon Scala combine OO et la fonction a une façon de faire croire que c'est en fait la forme la plus vraie de deux d'entre eux.
Comme vous, j'ai plus d'une douzaine de langues sous ma ceinture. Lors de l'achat de quelque chose à jouer avec l'écriture d'un compilateur croisé, j'ai couru à travers ML et de la famille. Beaucoup de très bonnes idées, et qu'ils m'ont appris à écrire du code est de façon bien différente; par exemple, mon JavaScript a maintenant résolument fonctionnelle plié.
Après jongle avec OCaml sous Windows un certain temps (et frustré problèmes de stabilité), j'ai couru à travers F#, un rejeton de OCaml. Les deux sont très semblables (peut-cross-compiler beaucoup de code), mais OCaml a apparemment un très bon système de macro (P4) et par type de cours (à l'appui de l'écriture "fortement typé" opérateurs contre les types génériques), tandis que F# a un excellent support pour asynchrones et les opérations en parallèle, les monades, les unités de mesure pour les types numériques, ainsi que filtre OO syntaxe et génial intégration EDI (VS2008 & sera publié dans-the-box avec VS2010). Je préfère de beaucoup de F# ces jours, depuis que j'ai accès à l'ensemble .NET et des charges de la 3e partie des bibliothèques. En fait, j'écris la plupart de mes one-off et de l'utilité de code en F#, maintenant; pour moi, il est en général beaucoup plus productif que de C++, JavaScript, C#, PowerShell, ou quoi que ce soit d'autre.
F# fonctionne assez bien sous Mono sous Linux, et a un bon après de là. Le compilateur et l'exécution sera open source une fois stable (publié avec VS2010), et les développeurs doivent prendre en compte Mono support assez prioritaire pour être sérieusement pris en compte pour la non-utilisation de Microsoft.