Închis. Această întrebare este
off-topic . În prezent, nu acceptă răspunsuri.
Comentarii
Răspuns
Întrucât doriți un practic limbaj:
Observați că Haskell și Lisp sunt utilizate mai mult decât celelalte din industrie, deși există a existat un interes recent pentru Clojure și F #.
Dar uite ce se întâmplă când adăugăm Scheme la mix:
Hmm, acum nu seamănă atât de mult cu un limbaj academic, nu-i așa?
De fapt, graficul de mai sus este probabil o minciună; cuvântul „schemă” poate apărea în ajutor reclame dorite în alte contexte în afară de limbaje de programare. 🙂
Deci, iată un alt grafic care este (puțin) probabil mai reprezentativ:
Dacă doriți să explorați cu adevărat un dialect al schemei, aruncați o privire la Racket.
Comentarii
Răspuns
Dacă doriți să învățați programarea funcțională, s-ar putea să fiți mai bine serviți pentru a învăța mai întâi Haskell, apoi folosiți limba pe care o doriți. Puteți învăța programarea funcțională folosind celelalte limbaje, dar acestea permit totuși codul imperativ și orientat obiect. Dacă scrieți un program real în Haskell, veți învăța programarea funcțională mai repede, deoarece celelalte paradigme nu vor mai fi disponibile.
După ce ați scris programul dvs. Haskell, veți avea instrumente precum monade și tehnici cum ar fi codificarea fără puncte pentru a aduce la limbajul ales de dvs. Conceptele par să se potrivească în mod deosebit bine cu Scheme.
Comentarii
Răspuns
De fapt, dacă ați reușit să implementați un sistem rezonabil de complex în Scheme, ați fi destul de de dorit la companiile unde probabil ai vrea să lucrezi. La începutul carierei mele am întâlnit niște studenți care făcuseră o mulțime de muncă în Scheme și singura dată când a fost un dezavantaj a fost când nu au putut să-și explice munca sau chiar nu au înțeles-o suficient de bine pentru a pune în aplicare datele de bază. structuri și algoritmi într-un interval rezonabil de timp. Am lăsat întotdeauna candidații să răspundă la astfel de întrebări în limba lor preferată; am dat peste unii oameni care credeau că sunt cei mai buni la Scheme, care au reușit să se lupte destul de mult cu lucruri care ar trebui să fie ușoare, cum ar fi adăugarea unui element la o listă legată, ceea ce m-a mistificat.
Dar dacă ați fi capabil să „obțineți” schema suficient de bine pentru a scrie chiar și o aplicație web medie, cel mult ar fi un punct de vânzare destul de bun companii serioase de software.
Dacă ați fi intervievat la un magazin „blub” și dezvoltatorii ar crede că sunteți ciudați din cauza competenței dvs. la Scheme sau Haskell sau F #, probabil că nu ați vrea să lucrați acolo. În majoritatea cazurilor, dezvoltatorii competenți aleg alegerile, așa că nu „transpirați” practic, cu excepția cazului în care singurele opțiuni pe care vi le puteți imagina în viitorul dvs. sunt corporative. Lucrați pentru a fi competenți, flexibili și rezolva problemele.
olegiul nu este despre practic. „Este vorba despre crearea unui mediu sigur pentru explorare și învățare. Aceasta este, de fapt, util, chiar dacă ajungi să scrii software obișnuit pentru restul carierei tale.
Acestea fiind spuse, eu nu” Nu vezi de ce ați dori să vă limitați doar la una dintre acele alegeri atât de curând. Ați putea obține cu ușurință o înțelegere a tuturor celor patru limbi în aproximativ 4 săptămâni, apoi alegeți una pentru a vă concentra pe cele mai bune rețele cu capriciile dvs. actuale. reveniți la o altă opțiune și încercați să implementați ceva similar. Treceți la ceva mai complex și luați în considerare opțiunile dvs. Experimentarea este bună. Dacă nu încercați să vă câștigați existența luna viitoare, nu trebuie să a devenit încă un specialist.
Am scris câteva în Scheme, F #, Emacs Lisp și Common Lisp și am citit cel puțin o parte din Haskell, cel puțin ocazional în ultimii ani. Nu pot să spun că sunt expert în oricare dintre ele, dar fiecare excursie în aceste limbi m-a beneficiat în toate celelalte limbi în care lucrez profesional (C #, Java, Ruby și, ocazional, Boo, Perl și Python). Curiozitatea vă va construi o carieră mai durabilă și mai satisfăcătoare decât orice altceva.
Comentarii
Răspuns
Am intrat o vreme în Haskell, dar concluzia la care am ajuns a fost că a fost puțin prea academică. A fost foarte greu să faci ceva practic. Într-un limbaj funcțional pur, lucruri precum IO pur și simplu nu se încadrează în model, așa că trebuie să aveți de-a face cu monade. Am decis că va trebui să pun un timp extraordinar pentru a fi abia competent, așa că am continuat .
Am făcut Scheme în facultate. S-ar putea să pară banal, dar toți părinții chiar distrag atenția / deranjează. Este greu să mă întorc la asta după ce am folosit limbaje precum Python.
Recent am a explorat F #. Este funcțional, dar poate fi, de asemenea, imperativ și orientat spre obiecte atunci când doriți. Acest lucru, împreună cu posibilitatea de a utiliza orice biblioteci .NET, face posibilă amestecarea cu ușurință a părților funcționale pure cu lucruri mai practice, cum ar fi GUI, IO și rețea. Puteți obține o versiune independentă a F #.
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5&displaylang=en
Comentarii
Răspuns
Am evaluat toate limbajele funcționale majore cu un an sau doi în urmă, din perspectiva dorinței unui limbaj de programare funcțional practic, cu scop general.
Am ajuns să aleg Clojure , care s-a dovedit ulterior a fi o alegere excelentă.
În linii mari, principalele motive au fost:
-
Ecosistemul bibliotecii – pentru ca o limbă să fie utilă, aveți nevoie de acces la biblioteci bune. A fi pe JVM înseamnă că aveți acces ușor la cea mai mare bibliotecă open source și la un ecosistem de instrumente, așa că a merge pentru un limbaj JVM a fost o neînțelegere dintr-o perspectivă pragmatică. Scala a obținut un scor foarte mare aici.
-
Macro-metaprogramare – Acest aspect de Lisp mereu m-a atras, mai ales că am anticipat să fac destul de puțin generarea de cod. „Am apreciat foarte mult argumentele făcute în scurtul eseu al lui Paul Graham„ Beating The Averages ”. Diferitele Lisps au obținut un scor puternic aici.
-
Performanța a fost „bună” suficient „- Clojure este întotdeauna compilat și beneficiază de avantajele optimizatorului JVM JIT și GC excelent. Ca întotdeauna, există unele cheltuieli generale în utilizarea unui limbaj funcțional, dar cu Clojure a fost clar că fiecare se poate apropia de viteza Java cu un pic de efort (Clojure acceptă primitive Java și tastare statică opțională pentru acele situații în care aveți nevoie de ea). Estimarea mea este că Clojure este de 2-5 ori mai lent decât ceea ce ați putea realiza cu codul Java sau C ++ optimizat, ceea ce este în concordanță cu ceea ce vedeți în repere defecte și, de-a lungul timpului, mă aștept să se reducă mai mult. De asemenea, este suficient de ușor să scrieți coduri deosebit de sensibile la performanță în Java pur și să îl numiți din Clojure.
-
Concurență – Clojure are o abordare destul de unică și puternică a concurenței, în special pentru concurența extrem de multi-core. Este „puțin greu de explicat, dar acest videoclip este excelent pentru a da un gust al principiilor. Cred că în prezent Clojure are cel mai bun răspuns la întrebarea complicată „cum ar trebui să gestionezi starea partajată, concurentă și modificabilă într-un limbaj de programare funcțional?”.
-
Designul limbajului – Clojure este IMO un design al limbajului foarte bine gândit. Exemplele includ literele vectoriale [] și map {} în plus față de parantezele obișnuite Lisp, utilizarea structurilor de date persistente imuabile, susținerea leneșului în tot limbajul prin abstractizarea secvenței și furnizarea programatorului cu o varietate de caracteristici ortogonale pentru a rezolva diferite probleme . Consultați arta abstractizării și simplu ușor .
-
Comunitate – întotdeauna subiectivă, dar mi-a plăcut ceea ce am văzut în comunitatea Clojure. Atitudinea a fost foarte utilă, constructivă și pragmatică. Există un puternic accent pe „a face lucrurile”, care reflectă, probabil, faptul că o mulțime de oameni din Clojure (inclusiv Rich Hickey însuși) provin dintr-un fundal al construirii sistemelor complexe de întreprindere. Faptul că și comunitatea Clojure are legături puternice cu comunitatea Java a fost important pentru a mă convinge că Clojure nu va risca să se blocheze într-o „nișă”.
Dacă ar trebui să numesc câteva dezavantaje minore ale Clojure, acestea ar fi:
-
Tastare dinamică – adesea acesta este un avantaj în termeni de productivitate, dar în medie cred că aș schimba acest lucru pentru verificarea și inferența mai puternică a tipului. În cea mai mare parte, acest lucru este atenuat de faptul că aveți o suită de teste automată bună, dar dacă vă plac tipurile dvs. validate static de compilator, atunci Haskell sau Scala pot fi mai mult ceașca dvs. de ceai.
-
Avangardă – Clojure se dezvoltă foarte repede și acolo multe inovații se întâmplă – dezavantajul este că există o mulțime de experimentări, unele biblioteci și instrumente sunt încă imature și există ocazional schimbări de rupere între versiunile majore ale Clojure pe care trebuie să le urmăriți.
În general, nu cred că poți greși cu Clojure dacă vrei un limbaj funcțional modern excelent și pragmatic!
Comentarii
Răspuns
Se pare că ți-ai făcut temele, așa că probabil știi deja acest lucru, dar Scheme este un dialect al Lisp la fel cum este Common Lisp. Dacă îți plac multe lucruri despre Scheme, dar nu îți place natura sa academică, încearcă Common Lisp. Conform indexul TIOBE , acesta este al 13-lea cel mai popular limbaj vs schemă din poziția 26.
Puține dintre limbile pe care le-ați văzut menționate apar pe fișele postului pe care le-am văzut recent, deși ar putea fi doar micul meu set de eșantioane. Eu personal voi învăța Haskell, chiar dacă nu mă aștept să folosesc această limbă direct în slujba mea. Conceptele de programare funcțională sunt pentru mine mai valoroase pentru proiectele de programe viitoare decât comercializarea directă a limbajului în sine.
Comentarii