Alegerea limbajului de programare

Ok, deci stiu ca Python se foloseste foarte mult in Data Science iar Java si C# in industrie. Pe de alta parte stiu si multe firme care folosesc Python in industrie. Intrebarea mea e: De ce as alege sa lucrez in Java sau .NET cand Python pare o alternativa mult mai simpla? Mie personal mi se pare ca, curba de invatare la Java spre exemplu e mult mai mare decat la Python. Deci, care sunt avatajele pe care le aduce un limbaj ca Java(aici ma refer la frameworkuri) vs Python? Si ce fel de programatori(tipologia) aleg Java, dar Python?

Din felul in care formulezi problema deduc faptul ca esti la inceput de drum si ca vrei sa stii in ce limbaj de programare sa iti investesti timpul de invatare. Te rog sa ma corectezi daca nu e asa.

Nu exista o cale “corecta” in cariera de programator, exista doar cea care ti se potriveste tie. Iti voi da exemplul meu personal: toata lumea mi-a explicat sa nu insist pe PHP (vorbim de anii 2003-2004), incercand sa ma convinga ca Java si/sau C++ sunt “ce trebuie”. Am perseverat pe PHP si am lucrat la proiecte extrem de frumoase si am avut multe satisfactii. Am chiar organizat conferinta RomaniaPHP de 2 ori in ultimul an.

Incerc mai jos sa iti raspund la intrebarile punctuale.

Acest lucru este partial adevarat, dar nu prea sunt de acord cu acest mod de a pune problema. Limbajul de pogramare este la fel de simplu in ambele cazuri. Problemele sunt mai degraba:

  1. asimilarea si utilizarea corecta a notiunilor OOP (dureaza cativa ani de practica)
  2. invatarea sistemului de operare pe care va fi instalat codul (larga majoritate e vorba de Linux)
  3. ecosistemul necesar pentru deploymentul codului
  4. testarea automata a codului livrat
    Se pare ca cineva a descris mult mai frumos ca mine exact ceea ce scriam mai sus. E o carte despre invatat Clojure (care e bazat pe Lisp).

Fiecare limbaj are propria lista de frameworks, si toate rezolva cam aceleasi probleme. Inca o data, nu aici se face diferenta. Nu mai exista de mult diferente de viteza intre codul scris in limbaje compilate si limbaje dinamice.

Ti-ai alege limbajul in functie de tipul de programatori (asumand ca ar exista o astfel de divizare)?
Sfatul meu ar fi sa incepi cu ceea ce ti se pae cel mai usor pentru a porni la drum, si sa incepi sa scrii cod care rezolva probleme. Pe parcursul carierei de programator vei schimba limbajul de mai multe ori, pentru a-ti largi orizontul, si vor fi lucruri pe care le vei purta cu tine, altele pe care va trebui sa le inveti (cel mai usor exemplu in acest context este node.js unde ai nevoie de un alt mindset decat la limbajele clasice de backend).

Bafta!

4 Likes

Asta e bancul zilei.

2 Likes

ma refeream strict la ce pare ca il i tereseaza pe OP, si anume web-exposed apps

stiu ca privind din zona limbajelor compilate strugurii sunt acri, pt ca avansul tehnologic al ultimei decade a fost in alta parte

Python nu e cel mai rapid limbaj nici macar cu pypy, python e un limbaj bun si cautat, se foloseste foarte mult pentru scripting de AI, data wrangling, scripting de jocuri, backend pentru aplicatii web, hacking, dar nu e neaparat mai simplu sau mai bun.

Daca te uiti la George Hotz pe youtube/twitch o sa vezi ca el rupe pyhon-ul la machine learning si computer vision, adica implementeaza fara blocaje in 2 ore un algoritm destul de complex si dupa il perfectioneaza. Dar nu cred ca doar python e de laudat.

Ca si viteza de gandire si programare, python, golang si javascript bat cu mult limbaje precum C/C++/.NET/Java. Dar nu vei avea arhitectura enterprise facuta cu golang sau js, nici macar python.

E probabil cel mai rapid programator pe care l-am vazut.

1 Like

Sigur ca da. Astia cu fortran sunt atat de invidiosi pe lentoarea abisala a pythonului, ceva de speriat. Deja se gandesc ca implementeze librarii pentru fortran in python :slight_smile:

1 Like

python e unul dintre cele mai lente limbaje. ‘Trucul’ e ca se folosesc librarii scrise in limbajele alea fara avantaje si fara avans tehnologic, care fac mai toata treaba. Cand 0.00001% din ce face programul se intampla in codul tau, iar restul intr-o librarie scrisa in fortran, sigur ca poti sa arunci cu ‘lipsa avansului tehnologic’ si cu ‘nu exista diferente de viteza’. Daca insa codul scris de tine trebuie sa faca ceva mai mult, se impute treaba. Poate de exemplu incepi sa-ti dai seama ca avansul tehnologic cu https://wiki.python.org/moin/GlobalInterpreterLock e de fapt un regres tehnologic.

1 Like

Si eu m-am intrebat de ce se foloseste atat de mult Python in AI si data science, acolo unde viteza este importanta, unde C/C++ compilat nativ ar fi recomandat. Cred ca simplitatea limbajului si structura blocurilor fara acolade (doar aliniere) au facut ca Python sa se impuna.

1 Like

python se foloseste pentru ca de fapt nu prea foloseste :stuck_out_tongue: Adica mai toata treaba se intampla in alta parte, nu in python. Exemplu pentru deep learning: https://github.com/tensorflow/tensorflow Cod in C++. Exemplu pentru computer vision: https://github.com/opencv/opencv Cod in C++. Examplu o librarie destul de importanta chiar si pentru AI, lapack: https://github.com/Reference-LAPACK/lapack Cod in Fortran.

Sau pentru alt progres tehnologic, de ce sa nu dam exemplu CERN: https://github.com/root-project/root C++.

4 Likes

python se foloseste de fapt de “neprogramatori” (intr-o masura destul de mare), de asta e popular.
in science / research, omul care face treaba nu e de fapt programator si atunci are nevoie de o unealta cat mai simplu de folosit.
diferenta de performanta se poate face si din hardware, insa curba de invatare nu prea poate fi scurtata.

in plus, rezultatul “rezultat” din cercetare este publicat si validat / completat apoi de altii, caz in care este util sa se lucreze cu aceeasi unealta pentru referinta.
motiv pentru care o gramada de librarii de tot felul sunt integrate in python (care uneori este o simpla interfata) si apoi toti vorbesc aceeasi limba / folosesc aceeasi referinta.

ps. nu spun nici de bine si nici de rau de python sau de un alt limbaj, e pur si simplu o observatie personala pe care am considerat-o utila topicului de fata

7 Likes

Oricum, ca “programator” e puţin probabil să te descurci dacă nu ciupeşti cam toate limbajele mai populare, pe lângă cele de bază pe care le stăpâneşti cel mai bine.

2 Likes

S-ar putea chiar sa fie o alternativa mai simpla.

Insa decizia ar trebui sa fie bazata pe urmatoarele intrebari:

  1. Ce trebuie sa faca acum software-ul la care lucrezi?
  2. Ce va trebui sa faci in viitor software-ul la care lucrezi?
  3. Care este curba de development pe care ti-o poti permite in proiect?

Daca vorbesti despre un proiect care incepe in momentul X, se termina in momentul X+y, si dupa aceea ramane o liniuta pe CV si atat, cel mai indicat este sa pui accent pe rapid development, daca este posibil (evident, daca ti se cere performanta maxima posibila, nu vei merge (doar) pe Python).

Daca observi, proiectele “din industrie”, si in special proiectele permanente sau cele atacate prin perspectiva “time and materials”, tind sa fie axate pe Java/.NET/C++. Aceste ecosisteme, spre deosebire de Python, sau JS, sau chiar PHP, sunt favorizate de gandirea pe termen lung, deoarece:

  • Performanta conteaza - daca mentii un produs online fara downtime (gen o platforma), odata ce ai ajuns la zeci de mii de utilizatori online, fiecare strop de performanta poate sa insemne cateva servere in minus de rulat; in cel mai rau caz, aplicatia va fi mai fluida, in cel mai bun caz, balanta contabila va reflecta situatia (apropos, cand spun “performanta” nu ma refer la “performanta mediului default”, ci la “performanta data de modul in care poti scrie codul”; ai de exemplu IronPython sau Jython ca sa iti compilezi cod scris in Python pentru .NET repsectiv JVM, deci atuul de performanta al ecosistemului limbajului nu mai este atat de relevant, insa modul in care scrii cod in acel limbaj determina intr-o oarecare masura si performanta algoritmului)

  • Complexitatea creste - Din propria experienta, constat ca, pe cat un produs software creste in complexitate, pe atat creste riscul ca sa se vrea dezvoltat ceva mai ezoteric, gen ceva care sa aiba de-a face cu facilitati foarte low-level ale sistemului de operare, sau ceva care sa necesite un control foarte fin al firelor de executie, etc. Acestea sunt usor de facut in C++, relativ usor de facut in Java sau .NET, dar aproape imposibil in unele technology stacks (ex. bazate pe Node.js)

  • Specificul limbajelor - Java/.NET/C++ sunt limbaje care pot fi folosite cu succes din mai multe perspective de programare, insa alte limbaje au fost gandite special pentru anumite stiluri (exemplu F# pentru programare functionala); aici Pythion pare sa aiba un avantaj fiind un limbaj in general bun pentru multe, insa deja dezvoltare de general-purpose libraries (pentru altceva decat Python), poti sa incerci sa folosesti altceva

  • Ecosistemul - cred ca cel mai bine e exprimat de Istvan:

…si oarecum mai din topor (dar totusi perfect corect) de Adrian:

(P.S.: Exemplele pe care le-a dat Adrian ar fi bine sa le studiezi, caci ofera o imagine foarte buna asupra a ce poti sa faci cu Python si ce ar trebui totusi sa faci in alt limbaj)

Sincer, faptul ca poti importa librarii cat cuprinde in Python poti sa il privesti ca un avantaj, insa este un avantaj si mai mare pentru limbaje in care marshalling-ul este mai avansat (ex. Java/C#) sau unde nu este neaparat necesar (C/C++). Vei scrie cod mai rapid cu Python la inceput, insa, pe masura ce avansezi si il dezvolti intr-o aplicatie serioasa si mare, vei dori sa il treci in alt limbaj daca ai de facut mult feature development in acea zona.

  • Natura oamenilor - Daca traiesti intr-o zona unde toata lumea programeaza in, spre exemplu, PHP, si ai <1% programatori in alte limbaje, sau faci outsourcing la greu, sau accepti situatia; surprinzator, insa, sunt astfel de situatii

Daca te uiti in proiectele software existente, majoritatea celor “enterprise” sunt facute in limbaje gen .NET/Java/C++, probab il si din ratiuni istorice. Insa, pe masura ce cresti complexitatea, vei vedea ca, de la un anumit nivel in sus, nici un proiect nu mai e facut in doar 1 limbaj de programare. Ex: Google, Facebook, Amazon, Microsoft, etc., toate se folosesc de Python intr-o oarecare masura. Insa niciunul nu se foloseste DOAR de Python, asa nu se folosesc nici DOAR de C++/Java/C#.

Cred ca cea mai simpla concluzie ar fi: use whatever is right for that job at that time.

Desi nu sunt de-acord cu termenul “neprogramatori”, totusi cred ca observatia este corecta. Python este usor de folosit ca scripting language pentru domenii unde este nevoie de niste picaturi de automatizare, mult mai usor decat Java/C#.

Indeed. In special daca ai si titulatura de “senior” inainte.

6 Likes