Ce ar trebui să ştie un programator PHP de nivel mediu?

TL:DR; Ce concepte şi abilităţi practice ar trebui să deţină un programator de nivel mediu. Cel mai bine ar fi să răspunzi la întrebările din secţiunea: “Aş avea nevoie de păreri/despre”:


Un pic de context înainte de a spune exact ce am de spus: anul trecut pe vremea aceasta eu încă mai făceam marketing (am terminat management, deci sunt economist de ‘meserie’), dar din cauza stresului asociat cu acest job şi pentru că niciodată nu am simţit că am avut mână liberă în acţiunile mele de marketing (marketingul e ca politica, toată lumea are o părere), am decis să migrez înspre IT şi să învăţ web development, un domeniu unde progresul mi se pare mai vizibil şi mai tangibil pentru o persoană interesată de învăţare continuă, cum sunt eu.

Obiectivul meu principal iniţial a fost să îmi găsesc un job în IT. Am reuşit în cam 2 luni şi sunt web developer din iunie anul trecut (2014).

Principala provocare peste care am dat pe tot parcursul experienţei mele, a fost să acopăr gap-ul de cunoştinţe pe care îl aveam faţă de cei care au luat decizia de a deveni developeri acum 2-3 ani. Făcusem destul HTML/CSS şi modificări în PHP (copy & pasting şi hacking the code) pe diverse instalări de Wordpress încât să nu fiu 100% intimidat de acest mediu.

Totuşi sunt multe lucruri care îmi lipsesc şi sincer am nevoie de ajutorul unor profesionişti, măcar să mă îndrume în direcţia potrivită.

Iniţial tutorialele au fost un bun educator, dar mi-am dat seama că în loc să învăţ să gândesc în cod, învăţam doar să recunosc instrucţiunile, un fel de învăţare superficială. Practic, ştiam să citesc codul, înţelegeam în mare ce se întâmplă, dar nu puteam reproduce gândirea, să înţeleg partea logică. În ultimele 3-4 luni am făcut mai multe progrese şi am început să gândesc mai programatic şi să rezolv diverse erori, fără ajutorul celor mai experimentaţi din birou.

Aş avea nevoie de păreri/sfaturi despre:

  • care sunt cele mai bune cărţi şi resurse la zi despre programarea în PHP (eu în principal mă folosesc de documentaţia de la PHP şi phptherightway.com ca surse de învăţare şi apoi scriu cod încercând să extind exemple pe care le găsesc în documentaţia PHP)?
  • ce fel de software-uri ar trebui să aibă în workflow un programator serios (version control, să ştie să folosească composer , maşini virtuale precum vagrant)
  • ce concepte mai high-level ar trebui să înţeleagă, eventual şi resurse de unde să le înveţe (design patterns de ex)
  • cum ar putea un programator începător să îşi accelereze progresul şi să mai taie din perioada de trial & error

Ca idee, nu caut neapărat scurtături, ci mai degrabă caut să tai din redundanţă şi să îmi stabilesc o traiectorie clară pentru procesul meu de învăţare.

Apreciez orice răspuns şi dacă credeţi că vă pot ajuta cu ceva înapoi, voi întoarce favoarea cu cea mai mare plăcere.
PS: sper că am încadrat bine postul.

3 Likes

Înțelegi conceptul de tipuri (bool, int, str etc), variabile, loop-uri, arrays?

Sintaxa de bază o cunosc şi o exersez destul de des pe task-urile de la muncă. La funcţiile specifice array-urilor mai am de lucrat zic eu.

Pe tipurile de date am insistat foarte mult la început că a trebuit să repar, editez şi să creez foarte multe loopuri (foreach-uri în principal) şi structuri condiţionale.

Atunci ai putea să practici diverse Kata pe algoritmi pe care îi înțelegi (e.g. un calculator, convertor de numere arabe în numere romane șamd), începând cu cel mai simplu algoritm posibil, ajungând la chestii complexe. Este foarte important să știi cum trebuie să funcționeze un… ceva, pentru a te putea concentra pe cod, nu pe algoritm.

Partea interesantă la Kata este că nu este nevoie să găsești mereu algoritmi noi; este suficient să găsești abordări noi.

Dacă înțelegi cât de cât OOP, îți recomand să acorzi atenție și testării automate (unit tests, tdd).

Ca resurse, îți pot recomanda câteva cursuri interesante pe tuts+. Nu te învață baza PHP-ului, ci cum să abordezi anumite lucruri. Ca începător absolut, tot pe tuts+, ai putea încerca acest curs.

1 Like

ai putea sa citesti si revista pentru programatori si manageri http://www.todaysoftmag.ro/ (e free) si sa vezi daca unul din termenii prezentati prin ea iti sunt neclari, atunci stii unde ai de sapat ca sa acumulezi noi cunostinte.

2 Likes
  • Eu zic ca cel mai important amanunt pentru un programator in dezvoltare este sa adere la o comunitate, cum este devforum.
    In felul asta aflii ce folosesc altii, cum folosesc altii si cum te situezi fata de altii.

  • Chestiile vechi, si bazice, raman in continuare foarte importante de reamintit(unele precizate de si iamntz): tdd(phpunit), bdd(behat), docker, vagrant, deployment(dploy), continuous integration(travis, ansible, jenkins), quality testing(scrutinizer, php code sniffer), profiler(xdebug, symfony blackfire)

  • Face parte din chestiile vechi dar iesise prea lung.
    Jeffrey Way se zbatea inainte sa promoveze testing-ul in PHP. Cartea lui(oricum iti plac cartile) “Laravel testing decoded” o sa te ajute destul de mult sa ai o viziune mai “ROR” peste workflow-ul PHP.
    (amintim ca Laravel este, totusi, o copie foarte fidela a Rails, dar adaptata pe PHP)

  • In programare cu cat mai veche cartea, cu atat mai buna. Recomand cartile de la sectiunea de jos: https://laracasts.com/recommended-reading

  • Twitter ramane cea mai buna sursa de noutati. Ce se mai baga in PHP 7, ce a mancat Taylor la micul de jun, cat de mult a baut Phil Sturgeon la ultimul podcast si despre cum Zeev se joaca de-a House of Cards cu PHP Internals.
    Atata timp cat ai grija pe cine urmaresti pe twitter, e okay. Uite aici pe cine urmaresc eu: https://twitter.com/IonutBajescu/following
    Mereu apar chestii noi de invatat, e bine sa aflii de ele prin primii.

  • Reddit, alte stiri, aceeasi oameni. Daca lasam canelele cu gif-uri amuzante si cele cu putine posturi, gasesti cam zilnic informatii utile pe /r/php. http://www.reddit.com/r/php
    (microframework-uri, librarii noi, trick-uri, glume cu si despre PHP, statistici)

  • Un IDE ca nici ciorba nu poti sa faci doar cu apa si leustean. PHPStorm e unul din cele mai bune.
    Ai o gramada de optiuni respectiv unelte noi de jucat cu.

(corectez textul cand ma intorc de la magazin)

5 Likes

Mulţumesc tuturor pentru răspunsurile de până acum :D.

Deşi cumva încercaţi să vă raportaţi la situaţia mea, sunt convins că posturile pe care le-aţi scris, o să ajute şi alte persoane aflate într-o situaţie similară cu a mea.

Dacă puteţi redacta un răspuns cam pe aceeaşi structură ca al lui Ionuţ, ar fi awesome :smiley:, pentru că oferă foarte mult insight, mai ales pentru un începător ca mine.

Aș zice că asta e calea sigură pentru a descuraja pe cineva :smile:

docker, vagrant, deployment(dploy), continuous integration(travis, ansible, jenkins), quality testing(scrutinizer, php code sniffer), profiler(xdebug, symfony blackfire)

Astea sunt overkill.

Cărțile recomandate de Jeffrey? La fel. Nu poți pune omul să citeasca 15 cărți (din care 11 nu au nici o legătură directă cu PHP) pentru că pur și simplu nu va știi ce să aplice mai întâi.

Dar nici nu te apuci să faci Foie gras și rață împănată cu porumbel afumat în fum de trufe nu te apuci să faci în prima zi când intri în bucătărie…

Dacă vrei să înveți limbajul va trebui să te concentrezi pe… limbaj. Nu pe editor. Ori Storm (sau orice alt IDE) este mult prea complex și automatizează suficient de multe lucruri pentru a încetini procesul de învățare…

1 Like

Dacă citeam postul lui @IonutBajescu acum vreo o lună, aş fi fost poate descurajat, cum m-am jucat cu Laravel în ultima vreme şi am folosit mai mult şi diverse tool-uri, chiar şi daor să văd cum sunt, mi se par ok sugestiile lui pentru că reprezintă puncte de informare.

Legat de IDE, prefer editor, nu IDE, deocamdată sunt încă la Sublime 3, PHPStorm e cam overkill pentru începător, mai ales dacă vrei să îl foloseşti cum îl foloseşte Way în Laracasts. Din cauza asta am zis că nu caut scurtături, scurtăturile sunt pentru când vrei să scalezi output-ul pe care ştii că îl controlezi. Până nu controlez sintaxa de bază nu caut să îmi încarc workflow-ul cu tot felul de tool-uri de automatizare, testare şi IDE.

Oricum, postarea lui @IonutBajescu îmi este foarte utilă pentru că arată cam pe unde trebuie să ajung (să ştiu ce fac toate tool-urile pe care mi le-a sugerat şi să le si folosesc să îmi fac o impresie validă).

Foarte interesante subiectele abordate, dar poate găsesc și ei un programator să le implementeze un RSS :smiley:

Hmm, aici sunt de acord, sa te bazezi pe un IDE este o chestie nasoala. Dar are un aspect pozitiv care i-ar fi de mare ajutor: daca prinzi doar 10% din tool-urile pe care le integreaza, esti super.

Eu unul de exemplu nu foloseam xdebug pe sublime. Nu-mi placeau cum se seteau breakpoint-urile, plugin-urile aratau foarte iesite din context si mai mult ma incurcau.
(acuma cred ca m-as descurca pe sublime, dar asta doar pentru ca m-a “ajutat” phpstorm sa inteleg cum sta treaba)

Terminalul incorporat face toti banii. Imi puneam foarte des terminalul default de la Ubuntu pe “stay on top” si parca simteam cum imi intra in ochi mereu, cum se baga in fata iar el n-are ce cauta acolo. Terminalul asta se potriveste in editor si nu se joaca cu nervii mei.
Alt+F2, si kaboom.

Fisiere locale, alta solutie n-ai. Daca esti incepator si mai si lucrezi remote pe un FTP, pentru o modificare de o ora sa zicem o sa fie o provocare destul de mare sa gasesti unde trebuie sa modifici si mai exact ce.
Faptul ca-i local ma ajuta sa dau un Find in path si dupa aceea sa sar din clasa in clasa cu ctrl+click.

  • (chiar de-i prima oara cand lucrez cu Magento, de exemplu - iar un incepator are destul de multe “prime ori” intr-o zi)

Atata timp cat nu te uiti la sutele de optiuni din meniul de sus, care o sa te ameteasca, IDE-ul este doar un editor mai complet si chiar deloc mai complicat.

banuiesc ca te referi la revista, nu prea vad de ce ar implementa rss tinand cont ca articolele apar o data pe luna in revista iar cei abonati la newsletter primesc notificarea pe email si pot intra sa descarce revista. Implementezi un feed rss cand stii ca ai articole care apar regulat si nu au treaba cu revista, dar nu e cazul la ei, se focuseaza pe a distribui mai bine revista (atat varianta online cat si cea printata care e aceeasi)
articolele care le vezi pe site sunt de fapt articolele din diverse numere ale revistei.
revista si numerele anterioare le poti descarca gratuit de pe site de la ei.

1 Like
  • Sa stie sa faca debugging,
  • OOP,
  • MVC,
  • sa fie in stare sa faca un proiect mediu ca dificultate cap-coada,
  • sa poata face o estimare si se incadreze in deadline-ul dat de el.

Practic, cand ajungi sa estimezi corect cam orice task, ai ajuns acolo.
Mediu in acceptiunea mea, ca sa nu discutam definitia lui “mediu”.

2 Likes

Din proprie experienta cea mai rapida cale ar fi sa apelezi la cineva experimentat care sa te indrume in munca de zi cu zi (parca sunt si sites/startups pe tema asta).
Asta presupune un efort de 1-2 ore pe zi din partea cuiva care sa faca code review, sa-ti spuna la ce sa fii atent, care sunt punctele slabe … intr-un cuvant mentorat.

Exista o problema cu auto educarea, eu mam lovit de ea. Se poate intampla ca sa fii pe o cale gresita fara sa-ti dai seama de asta, in acest caz un punct de vedere extern este foarte util.

3 Likes

OP: de ce ai ales php?

Când mi-am schimbat jobul anul trecut, mi-am găsit de lucru într-o firmă în care server-side se foloseşte PHP, nu aş putea spune că am ales eu PHP, contextul a fost de aşa natură :smile:. De ce întrebi?

1 Like

nu im place php :slight_smile: si sunt curios care sunt motivele de ce careva ar alege php in 2015 cand sunt alte limbaje/framework-uri/librarii :smile:

Tie nu iti place PHP dar lui X ii place, asa cum tu ai ales altceva asa el a ales PHP, asa cum tu aduci n motive ca nu esti “fan” php la fel va face z si va aduce n motive cum ca este “fan” php.

Intreabrea care trebuie pusa nu este “De ce?” ci “De ce nu?”.

4 Likes

Vă rog să rămâneți on-topic. Puteți discuta în thread-ul dedicat despre argumente pro și contra PHP.

1 Like

Asta e o problemă mai degrabă ideologică, cum sunt în general mai agnostic, nu prea îmi pasă de construcţia limbajului, dacă e elegant sau nu, cum a evoluat, ci de ce probleme pot să rezolv eu cu el.

Cel mai ok ar fi să scrii în topicul indicat de @victorstanciu, că acolo sunt discuţii mai high-level şi să nu uităm că eu sunt mai începător de fel :smile:.

3 Likes