Scala în expertul verifică De ce Scala și nu Java

În dosarul subiect Scala investigăm problema unde se află în prezent limbajul popular JVM și unde se îndreaptă. În verificarea de către experți, șase dezvoltatori Scala cu experiență ne oferă perspectiva lor despre Scala. Partea 1 se ocupă de ceea ce face Scala atât de fascinant și ce are de fapt Scala înainte de Java.
Comentează și câștigă!
Vorbește cu! Printre toate comentariile constructive asupra verificării expertului Scala Oferim trei exemplare ale cărții „Noțiuni introductive despre Scala” de Heiko Seeberger.
parerea ta conteaza!
De ce ești dezvoltator Scala? Ce vă fascinează personal în ceea ce privește limba?
Heiko Seeberger: Ceea ce mă fascinează în special despre Scala este că poți - ca în alte câteva limbi - să scrii un cod concis și ușor de înțeles în același timp. Acest lucru este cel mai bine văzut cu clasele de cazuri, care reprezintă obiecte cu valoare imuabilă cu implementări „încorporate” de egal și cod hash și model de potrivire - cvasi „pornire steroizi”. Akka folosește aceste caracteristici pentru a determina modul în care un actor reacționează la mesaje:
Dacă ar fi să implementați acest exemplu în Java, ar trebui să scrieți clase cu mai multe linii cu câmpuri, mai mari și mai presus de toate cu implementări pentru egal și hashCode în locul claselor de cazuri cu o singură linie. Și în loc să se potrivească modelul, ar trebui să lucrați cu instantof și să tastați exprimări. Chiar dacă un IDE modern ușurează o parte din muncă, codul rezultat rămâne mult mai extins și mai neclar, cu Java accentul nu este atât de clar asupra „ceea ce” real.
Experții Scala
Heiko Seeberger: Coleg la codecentric. Autor al cărții „Noțiuni introductive despre Scala.” @Hseeberger
Julian Tournay: CTO la @mfg_labs și autor al jto/validation
Daniela Sfregola: Blogger și lider tehnic la PayTouch. @DanielaSfregola
Ivan Kusalic: inginer software la AICI. Organizator al întâlnirii Craftsmanship software din Berlin, SoCraTes. @ikusalic
Daniel Westheide: Consultant la innoQ. Autor al „The Neophyte’s Guide to Scala.” @Kaffeecoder
Markus Hauck: consultant IT și antrenor Scala la codecentric.
Daniel Westheide: Inițial eram interesat de Scala pentru că începusem deja să programez în Java într-un stil ceva mai funcțional, dar la un moment dat nu aveam chef să folosesc boilerplate-ul necesar. Ceea ce mă fascinează în mod deosebit despre Scala este sistemul puternic de tip care există cu greu în orice limbă de masă.
Două exemple interesante: Cu ajutorul unor tipuri și tipuri de clasă superioare, de exemplu, îmi este posibil să rezum prin Spark RDD-uri (o colecție distribuită pe mai multe computere dintr-un cluster) și colecțiile Scala - logica aplicației mele nu știe atunci nimic despre rulați-l într-un cluster Spark pe un RDD sau local pe o mașină pe o mică colecție Scala. Așa-numitele tipuri fantomă îmi permit să mă asigur în momentul compilării că nu scriu accidental accesul la baza de date sclavă citită.
Ivan Kusalic: Scala este un limbaj de programare excelent, care este deosebit de potrivit pentru procesarea backend-ului în medii de întreprindere. Ceea ce îmi place cel mai mult este multitudinea de stiluri de programare acceptate: prefer un amestec de programare funcțională și orientată obiect, în care abordarea funcțională asigură imuabilitatea și fluxul de proces, în timp ce abordarea orientată obiect oferă o încapsulare bună a datelor.
Scala este un limbaj foarte expresiv și o adevărată plăcere de a lucra cu. Permite crearea unor modele flexibile și sigure, care pur și simplu nu sunt posibile în multe alte limbi. De la DSL-uri simple la clase de tip sau chiar macrocomenzi, dacă aveți nevoie de ele. De cele mai multe ori, lucrul cu Scala simte că îmi pot traduce gândurile direct în cod, fără a fi nevoie să mă deranjez cu traduceri greoaie și lungi.
Și apoi, desigur, sunt băieții! Nu-mi mai pot imagina să lucrez cu un limbaj care nu are tipuri expresive. Nu în ultimul rând, ar trebui menționată frumusețea caracteristicilor care se construiesc una pe cealaltă. De fapt, faptul că ai clase de tip în față ca model de design și nu ca caracteristică încorporată, spune totul.
Markus Hauck: Scala mă fascinează deoarece combină programarea funcțională pe JVM cu un sistem de tip expresiv. Interoperabilitatea cu Java este un alt bonus, mai ales când vine vorba de migrarea incrementală dintr-o bază de cod crescută din Java în Scala.
Daniela Sfregola: Într-o viață anterioară am fost dezvoltator Java. Mi-a plăcut foarte mult să lucrez cu limba. Dar, după câțiva ani de dezvoltare, am vrut să încerc un limbaj mai flexibil și mai expresiv, motiv pentru care am decis să mă joc puțin cu Scala. La acea vreme, era încă una dintre limbile noi și strălucitoare cu care se jucau copiii drăguți.
Nu m-am întors niciodată din călătorie. În opinia mea, Scala este un limbaj fascinant și puternic care permite programatorului să decidă cum ar trebui să arate codul. Pentru alte limbi, această decizie este mai probabil să fie luată de sintaxa limbii.
Julien Tournay: În jurul anului 2009 am început să joc cu Scala. Principalul motiv pentru aceasta a fost lambdas, pe care mi-a lipsit foarte mult în Java. În acel moment lucram în aceeași companie cu Guillaume Bort, care a dezvoltat Play Framework. Guillaume și restul companiei s-au interesat de Scala câteva luni mai târziu. Am profitat de ocazie pentru a folosi limba profesional și am rămas cu ea.
Pe măsură ce mă înțelegeam mai bine cu Scala, lucrurile care îmi plac la limbă s-au schimbat foarte mult. La început, lambdas s-a simțit bine. Am făcut multe în JavaScript și poate suna ca un paradox, dar Scala se simțea mai aproape de JavaScript decât Java. Apoi am aflat ceva mai mult despre asta, am descoperit clase de tip, apoi programare funcțională pură, teoria categoriilor, programare la nivel de tip, logică, teoria limbajului de programare - și încă învăț!
Ceea ce îmi place mai ales la Scala este călătoria. Limba nu te ajută doar să scrii programe mai bune. Scala și comunitatea sa se pot asigura că „creșteți” ca dezvoltator. Începe cu probleme foarte de bază („Java este prea vorbăreț”, „Vreau lambdas”, „Vreau să folosesc Spark”) și, cu cât ajungi mai departe în limbaj, cu atât ești mai expus la o lume întreagă de concepte noi. Nu există doar biblioteci sau instrumente noi, ci idei complet noi. La început se simte complet copleșitor, dar după un timp îți place să înveți.
De ce Scala și nu Java?
Daniel Westheide: În plus față de sistemul de tip mult mai puternic, există o serie de alte motive pentru care aș prefera, în general, Scala. Două pe care aș dori să le evidențiez în acest moment și care sunt într-o anumită măsură legate între ele sunt, pe de o parte, posibilitatea de a defini tipurile de date algebrice și, pe de altă parte, potrivirea modelelor pentru a lucra cu aceste tipuri de date cu un cod ușor de citit.
În următorul exemplu de cod le vedem pe ambele în acțiune: Definim un tip de date algebric numit Sesiune și diferențiem între o sesiune a unui utilizator conectat și o sesiune anonimă. Apoi folosim potrivirea modelelor pentru a returna recomandări personalizate sau generale:
Daniela Sfregola: Deși Java este pe cale să profite de un stil mai funcțional, Scala are câteva caracteristici pe care Java nu le are (încă) și o sintaxă mult mai compactă. Acest lucru face ca programarea cu Scala să fie mult mai distractivă și mai productivă decât cu Java - deși trebuie să recunosc că este mai greu să înveți Scala.
Ivan Kusalic: Fiabilitatea tipului, expresivitatea, concizia, paradigma funcțională, posibilitățile de abstractizare etc. vorbesc pentru Scala. Concluzia este că Java și Scala sunt pur și simplu două limbaje foarte diferite. Scala este mult mai mult decât Java și ar fi nevoie de ore pentru a identifica toate aceste puncte.
Desigur, Scala are și dezavantaje: complexitatea mai mare și curba de învățare abruptă. Și piața muncii. Viteza ar putea fi discutată, dar consider că bitul de cod care are nevoie de modificări nu este proporțional cu lizibilitatea. În plus, dacă aveți dubii, puteți scrie acest lucru direct în Java dacă optimizarea este cu adevărat necesară. Dar piața locurilor de muncă este într-adevăr marele punct minus în comparație cu Java. Cu toate celelalte, Scala câștigă - și mai ales mare.
Markus Hauck: Din cauza sistemului de tip Scala. Java are unele slăbiciuni grave și, în practică, tastarea tinde să deranjeze mai degrabă decât să ajute. În Scala arată diferit, puteți preveni un număr mare de erori cu compilatorul Scala.
Julien Tournay: Pentru mine, cea mai mare provocare în dezvoltarea profesională este „scalarea” unui proiect. Prin asta mă refer la lucrul la un proiect care continuă să devină din ce în ce mai mare și cu o echipă care include din ce în ce mai mulți dezvoltatori. În opinia mea, sistemele de tip ajută foarte mult la atenuarea acestei probleme.
Dacă sunteți dezvoltator Java, puneți-vă următoarea întrebare: De ce prefer Java peste Python sau JavaScript? Dacă răspunsul dvs. este „Pentru că îmi plac limbajele statice”, vă recomandăm să verificați ce alte limbi au de oferit în acest domeniu. Există limbaje care au un sistem de tip mult mai bun decât Java. Puteți încerca apoi Scala, de exemplu, sau Haskell, un meta-limbaj sau chiar Idris. Scala are avantajul că rulează pe JVM, facilitând migrarea de la o bază de cod Java existentă la Scala.
În partea 2 a verificării experților, analizăm diferențele dintre Scala și programarea funcțională cu expresiile Java 8 Lambda. Rămâneți aproape!
Si tu? Comentează și câștigă!
Care este fascinația Scala pentru tine? Unde vedeți avantajele - sau dezavantajele - Scala față de Java?
Comentează aici!
Printre toate comentariile constructive asupra verificării expertului Scala Oferim trei exemplare ale cărții „Noțiuni introductive despre Scala” de Heiko Seeberger. (Nu uitați să introduceți adresa de e-mail pentru aceasta).