15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romani
5Am fost intrebat de numeroase ori cum poate un incepator sa se apuce de programare, cum poate evolua, ce resurse (carti, ghiduri samd) trebuie sa aiba in vedere un incepator in programare pentru a deveni mai bun.
De aceea, am provocat patru romani ce s-au evidentiat de-a lungul timpului prin rezultate exceptionale in diverse arii ale domeniului IT (in special dezvoltare sofware si algoritmica) atat in Romania cat si in strainatate sa imi raspunda la cateva intrebari si sa ofere sfaturi punctuale.
Adrian Budau, Bogdan Gaza, Ionut Budisteanu si Mihai Maruseac ne vor impartasi din experienta lor in acest domeniu vast si ne vor da sfaturi utile pentru primii pasi in cariera de programator/inginer software – cum te poti apuca de programare, ce ar trebui sa inveti, care sunt cele mai bune tehnici de programare, cum te poti evidentia fata de ceilalti programatori samd.
Adrian Budau: Nu te descuraja de rezultatele sau de viteza cu care pricepi tehnicile de programare
Desi in Romania ne bucuram de numeroase etape pregatitoare in domeniul IT inca din timpul liceului si uneori chiar din generala, viteza cu care se dezvolta tehnologia depaseste puterea de reactie a cadrelor didactice din Romania.
„Incearca sa inveti totul progresiv, internetul este profesorul tau cel mai bun. Informatica spre deosebire de multe alte materii variaza enorm si tine cont de viteza cu care poti sa o inveti. De aceea, in general, scoala nu este perfecta pentru a o preda. Pe internet insa sunt multe saituri unde poti sa inveti orice limbaj de programare doresti sau tehnici de programare sau orice altceva iti vei mai dori.”, ne povesteste Adrian Budau – olimpic, internship la Adobe, Twitter si Dropbox. .
Adrian este in prezent student la Universitatea Bucuresti, in perioada liceului a obtinut numeroase rezultate la cele mai importante concursuri din Romania si din lume, printre acestea numarandu-se o Medalie de Aur (Locul 7) la Etapa Internationala de Informatica 2012 si Aur absolut la Olimpiada Central Europeana de Informatica 2012. A avut internshipuri la Adobe Systems Romania, Twitter si Dropbox.
Alege un limbaj de programare mai simplu decat cele predate in scoli
Adrian recomanda sa incepem cu un limbaj de programare usor de inteles, mai simplu decat cele predate in scoli.
„Incepe cu un limbaj mai simplu decat C/C++/Pascal. Unul din aceste 3 limbaje este deobicei predat in scoli insa niciunul nu este potrivit pentru un incepator. Alte limbaje mult mai usoare cu care poti sa incepi informatica sunt Python, PHP sau Javascript.”, adauga Adrian.
Imbina algoritmica cu probleme matematice
Adrian a fost pasionat de mic de algoritmica si matematica si este de parere ca daca esti bun in una din aceste categorii, o buna resursa educationala ar putea fi projecteuler.net, un site cu probleme matematice ce pot fi rezolvate cu ajutorul algoritmicii doar dupa ce ati rezolvat partea matematica a acesteia.
„Daca iti place matematica si ai rezultate exceptionale in ea, sau daca deja stii deja informatica destul de bine si iti doresti sa inveti un nou limbaj de programare recomand foarte tare: projecteuler.net. Este un site cu probleme de mate care nu pot fi rezolvate doar cu un calculator de buzunar, necesita implementarea unui algoritm, deobicei simplu dupa rezolvarea partii matematice.”, incheie Budau.
Mihai Maruseasc: E foarte usor sa inveti o tehnologie si sa te plafonezi
Datorita numarului foarte mare de resurse disponibile, in ziua de astazi este foarte usor sa aplici ceea ce citesti, sa inveti o singura tehnologie si sa te plafonezi.
„Ca sa devii un programator avansat, trebuie sa parcurgi un drum lung. E foarte usor sa inveti un singur limbaj si un singur framework ca apoi sa te plafonezi acolo dar nu asta e drumul optim.
Ideal ar fi sa inveti cat mai multe limbaje si cat mai diverse. Învata cel putin 2-3 framework-uri pentru web, cel putin 2-3 biblioteci de parsing, etc. Nu te opri la 1 dar nici tu te concentra sa inveti prea multe solutii din acelasi domeniu.”, sugereaza Mihai Maruseac, doctorand in Boston.
Mihai este pasionat si unul dintre cei mai activi promotori ai Haskell in Romania, al aplicatiilor Open Source, Privacy si inteligenta artificiala. Mihai Maruseac este in prezent doctorand in Boston dar si activ in cadrul comunitatilor Softbinator si ROSEdu din Romania.
Scrie cod cel putin o ora pe zi, porneste un proiect personal
Mihai recomanda incepatorilor in programare sa identifice un proiect si sa se apuce de el imediat. El mai este de parere ca pentru a deveni un bun programator ar fi bine sa scrii cod cel putin o ora pe zi si sa revii asupra acestuia ori de cate ori consideri ca pot fi aduse imbunatatiri.
Mult mai important e sa te antrenezi zilnic. Scrie cod cel putin o ora in fiecare zi. Întoarce-te la codul scris de tine, reorganizeaza-l, fa-l mai citibil, mai rapid, mai usor de inteles. Porneste de la un proiect personal: time-tracking app, todo-list app, o aplicatie prin care sa-ti analizezi evolutia intr-un joc, etc.”, ne recomanda Maruseac.
Diferenta dintre un programator oarecare si un programator bun sta in diversitatea cunostintelor
Mihai ne incurajeaza sa intelegem si conceptele care stau in spatele fiecarei tehnologii. E foarte important sa stim ce se intampla in spatele cortinei si de ce pentru a nu fi surprinsi de evolutia unui scenariu in etapele ulterioare ale dezvoltarii softului.
„La final, nu uita ca diferenta intre un programator oarecare si un programator bun este diversitatea cunostintelor. Învata ceva despre nucleul sistemului de operare, despre compilatoare, despre web, despre conceptele din matematica ce stau la baza teoriei calculatoarelor, etc. Cu cat ai cunostinte mai vaste, cu atat iti va fi mai usor sa te adaptezi unui nou proiect in viitor.”, incheie Mihai Maruseac.
Ionut Budisteanu: Programarea nu este un talent sau ceva cu care te nasti, ci se dobandeste in timp
Nu este nici un secret, nici unul dintre noi nu se naste cu un avantaj in acest domeniu ci il dobandeste in timp. De aceea l-am invitat pe Ionut Budisteanu, un tanar ce a renuntat de la o varsta frageda la multe din „beneficiile” copilarie pentru a se specializa in domeniu si a inova.
Ionut este un tanar programator care pune foarte multa pasiune si dedicatie pentru crearea de tot felul de aplicatii software si dispozitive electronice ce incearca imbunatatirea vietii umane. Acum Ionut lucreaza la lansarea pe piata a robotul industrial VisionBot Pick and Place machine ce va ajuta inginerii in electronica sa asambleze acasa proprile lor dispozitive electronice in volume de pana la 100,000 de unitati pe an.„Programarea nu este un talent sau un har Divin cu care te-ai nascut, ci se dobandeste in timp… in ani de zile “pierduti” in scopul realizarii de software si solutionarii unor probleme.
Nu s-a auzit de omul care s-a nascut programator sau inovator, ci s-a auzit doar de omul care a muncit zeci de ani ca sa devina programator. Nu conteaza limbajul de programare ci conteaza ce faci in el.
Programarea este destul de dura… este doar 0 si 1… ori merge ori nu merge. Cu mult timp „investit” in fata calculatorul, oricine obtine mai multa experienta in domeniul programarii. Dar, in acleasi timp conteaza foarte mult si ce faci pe calculator. Daca iti pierzi timpul in fata calculatorului, automat nu vei face progrese. Rezultatele nu apar peste noapte.”, ne povesteste Ionut Budisteanu, nominalizat de revista Times ca unul dintre cei mai influenti tineri din 2013.
Una din cele mai importante realizari ale lui Ionut reprezinta castigarea marelui premiu, Gord E. Moore award reprezentand 75.000 de dolari la competitia Intel International Science and Engineering Fair in Phoenix, SUA pentru conceperea unor softuri cu Inteligenta Artificiala ce pot fi folosite in masinile fara sofer.
Revista americana Time l-a nominalizat pe Ionut ca unul dintre cei mai influenti tineri ai anului 2013 pentru realizarile lui si ca promoveaza valorile autentice romanesti. Institutul MIT Lincoln Laboratory a numit un asteroid cu numele tanarului.
Malcolm: Pentru a deveni un programator, trebuie sa ai cel putin 10,000 de ore de experienta
„Eu cred in filozofia lui Malcolm Gladwell: pentru a deveni un programator, trebuie sa ai cel putin 10,000 de ore de experienta. Programator nu este cel care rezolva probleme de algoritmica in 3 ore.
Programatorul este o persoana complexa care schimba lumea prin dezvoltarea software, care programeaza microcontrolere, proiecteaza dispozitive electronice, stie assembler, face software design, stie tehnologii web, are cunostinte de teoria compilarii, programare logica, Inteligenta Artificiala si mult mai multe.”, incheie Budisteanu.
Bogdan Gaza: Nu invata programare, invata sa dezvolti software
Bogdan Gaza este inginer software si o persoana pasionata in general de tehnologie. De aproape un an locuieste in San Francisco si lucreaza pentru Twitter facand parte din echipa de search infrastructure.„In primul rand, cred ca termenul >> incepatori in programare << nu e termenul cel mai potrivit pentru cineva care de abia incepe sa descopere aceasta lume. Cred ca mai potrivit ar fi: >> incepatori in a dezvolta software << – programarea fiind o parte integrata a acestui lucru.
Recomand tuturor celor care sunt la inceput: SA AIBA RABDARE! Am observat acest trend prin care persoanele care de abia incep, incearca sa devina foarte repede productive si competitive pe piata de dezvoltare software.”, ne recomanda Bogdan Gaza, Software Engineer la Twitter.
Inainte de Twitter a lucrat tot ca si inginer software pentru Amazon Romania, a fost tech-lead pentru un mic startup din Timisoara numit SimplySocial si consultant software pentru cateva firme mici pe care le-a ajutat sa porneasca intr-o directie tehnica cat mai buna.
Bogdan este absolvent al Facultatii de Informatica din Iasi si multi ani la rand a fost participant si apoi voluntar al concursului Infoeducatie.
Invata sisteme de operare bazate pe GNU/Linux
Majoritatea infrastructurilor mari stau pe sisteme de operare bazate pe GNU/Linux. A devenit o cerinta default pe mai toate pozitiile de dezvoltatori software cunoasterea distributiilor Linux. Bogdan nu regreta ca a luat aceasta decizie inca din liceu.
„Recomand sa invatati sisteme de operare bazate pe GNU/Linux. Personal cred ca a fost cel mai important lucru faptul ca am inceput sa le folosesc de cand eram in liceu. Nu trece o zi fara sa trebuiasca sa interactionez cu un sistem baza pe GNU/Linux; a sti sa folosesc ceea ce acestea imi pun la dispozitie ma face sa fiu foarte productiv.”, ne spune Bogdan.
In primii ani de cariera trebuie sa devii un generalist foarte bun
Si Bogdan este de parere ca e foarte important sa cunoastem cat mai multe tehnologii si tehnici de programare. El considera ca primii ani de cariera nu ar trebuie sa aiba ca scop specializarea, ci descoperirea.
„In primii ani nu incercati sa va axati doar un limbaj, o platforma, o tehnica de dezvoltare etc. Cred ca pentru primii 2-3 ani din cariera voastra este important sa deveniti niste generalisti foarte buni. Invatati mai multe limbaje de programare, mai multe abordari asupra aceleasi probleme. Invatati programare orientata pe obiecte dar si programare functionala. Invatati sa faceti pagini web dar si aplicatii de mobil.
Descoperiti cat mai multe aspecte ale acestei lumi si vedeti care va place cel mai mult. Dupa aceea, specializati-va in acest domeniu. Faptul ca aveti un job in aceasta industrie nu ar trebui sa va opreasca sa invatati in continuare in timpul vostru liber.„, completeaza Gaza.
Citeste carti tehnice, iar mai tarziu continua cu cele ce te invata sa dezvolti software mai bine
Bogdan Gaza ne recomanda sa citim cat mai multe carti de specialitate si ne da si un exemplu de carte ce ne va ajuta sa devenim dezvoltatori software mai buni.
Cititi cat mai mult: incepeti cu cartile tehnice care va invata sa folositi punctual un limbaj nou, o platforma noua. Apoi continuati cu acele carti care va invata sa fiti dezvoltatori mai buni (recomand cu incredere: The Clean Coder de Robert C. Martin de exemplu). Mai tarziu cititi paper-uri tehnice. Incercati sa intelegeti ce abordari au alti ingineri care lucreaza la probleme asemanatoare. Descoperiti detaliile ce definesc performanta si scara unui sistem software, nu neglijati niciodata securitatea aplicatiei voastre.
Perseverati, la inceput s-ar putea sa fiti coplesiti de cate lucruri sunt de invatat. Peste ani daca sunteti perseverenti veti acumula toate cunostintele pentru a putea face aplicatii mai rapide, mai usor de folosit si mai scalabile.
Inconjoara-te de persoane care au aceleasi pasiuni cu tine
Bogdan este de parere (si il sustin) ca unul dintre cele mai importante aspecte ce ne vor ajuta in cariera este cercul de prieteni. Cu cat persoanele apropiate ne provoaca mai des, cu atat vom fi mai motivati sa ne autodepasim.
Inconjurati-va de persoane care au aceleasi pasiuni. Creati-va un mediu competitiv, unde prietenii vostri sunt persoane curioase care incearca sa se dezvolte si ei la randul lor.
Persevereaza – tu poti fi parte din schimbarile fundamentale ale omenirii
Nu poate fi o incheiere mai buna decat sfatul dat de Bogdan Gaza ce ne incurajeaza sa nu renuntam si sa fim perseverenti pentru ca toate schimbarile ce la va simti omenirea in urmatorii ani ar putea pleca de la noi.
„Cel mai important sfat pe care as putea sa vi-l dau, precum am descris mai sus, este sa perseverati! Sunt probleme fundamentale ale omenirii pe care inginerii software le vor rezolva in urmatorii ani! Fiti voi aceasta schimbare, aveti toate conditiile de a va indeplini aceste vise!”
Este un articol interesant, dar totusi, cum pot proceda cei care stau prost la capitolul matematica ?
Sunt multi dornici, dar cu lipsuri pe acest capitol, exista o alternativa ?
Nu iti fa probleme la capitolul matematica. Eu am facut muzica si la capitolul asta stau prost, insa ma descurc destul de bine ca programator. Daca stii cele 4 operatii de baza, fractii si ecuatii de gradul 1 si 2 esti OK to go. Eu lucrez in domeniul jocurilor si cateodata mai am nevoie de functii trigonometrice pt a calcula anumite distante si unghiuri, insa deja exista implementate librarii de care sa te folosesti , asa ca matematica nu e un impediment pt a deveni programator, ci doar lipsa curiozitatii si a perseverentei.
Interesanet sfaturi si conteaza cu atat mai mult cu cat vin de la specialisti in domeniu.
Alin o sa iti zic doar ca partea cu matematica duce spre mit, cunosc multi care au facut filologie nu doar in liceu ci si in facultate si totusi sunt programtori foarte buni. Ca sa fii programator din punctul meu de vedere trebuie sa iti doresti asta, sa fii curios sa nu te plafonezi si cel mai important sa nu te dai batut. La mine vin anual intre 5-10 studenti si am observat ca cei care nu sunt curiosi sunt si cei ce se dau batuti cel mai usor asa ca „Fii curios!”
Eu am facut muzica la liceu si conservator, insa am decis sa invat programare pt ca asta m-a atras. La matematica sunt slab, in sensul ca mai mult de functii trigonometrice si ecuatii de gradul 2 nu stiu sa folosesc, insa asta nu m-a impiedicat sa lucrez cu matrici n-dimensionale sau mai stiu eu ce algoritmi complexi. Pe de-o parte inteleg si cererea de matematica avansata in programare , insa atata timp cat eu folosesc librarii facute de altii pt a-mi rezolva partea de matematica avansata, mie imi ramane doar sa ma concetrez asupra functionalitatii „hi-level” si a produsului finit.