De ce esti un programator PHP prost

Toți avem obiceiurile noastre proaste. În acest articol, vom trece peste o listă de practici incorecte care merită examinate, reevaluate și corectate imediat.

Tutorial publicat

La fiecare câteva săptămâni, revizuim câteva postări preferate ale cititorului nostru de-a lungul istoriei site-ului. Acest tutorial a fost publicat pentru prima dată în februarie 2011.


Cine iadul crezi ca esti?

De fiecare dată când deschid un proiect care nu este al meu, este însoțit de o nuanță de frică că intru într-un scenariu de Temple of Doom, umplute cu uși capcane, coduri secrete și că o linie de cod care, după modificarea, aduce în jos întreaga aplicație (și, eventual, trimite un bolovan gigantic care se mișcă spre mine pe un hol îngust).

Când ne înșelăm și totul este bine în afară de unele diferențe minore în "cum aș fi făcut-o", vom respira un oftat de ușurare, ne vom rostogoli mânecile și vom scufunda în proiect.

Dar când avem dreptate ... Ei bine, asta eo poveste cu totul diferită.

Primul nostru gand de a vedea aceasta mizerie nefericita este, de obicei, dupa cum spune: "Cine naiba il crede acest tip?" Și pe bună dreptate; ce fel de programator ar crea de bună voie o astfel de dezordine necinstită dintr-un proiect?


Răspunsul ar putea să te surprindă

Codul grozav este acumularea de comenzi rapide sau concesiuni mici.

Primul dvs. instinct ar fi să presupunem că tipul care a construit proiectul este un novice sau poate că este doar un idiot. Dar nu este întotdeauna cazul.

Teoria mea este că un cod groaznic este acumularea de comenzi rapide sau de concesii multiple - la fel de des ca și produsul lipsei de experiență sau prostie. Acest lucru face Apocalipsa Templului Doom mult mai înspăimântătoare, pentru că oricine a construit-o ar putea fi la fel de inteligent, inteligent și bine citit ca și tine. Au fost doar leneși sau au pus lucrurile împreună într-o grabă și fiecare dintre aceste mici scurte s-au adunat în coșmarul care a căzut în poala ta.

Chiar mai înspăimântătoare, acest lucru ar putea însemna că, la un moment dat, cineva a moștenit codul tău și a izbucnit imediat în lacrimi.


Ești mai bună decât asta, bebelușule!

Nu doare niciodată să vă reexamineze practicile curente și să vă asigurați că nu luați comenzi rapide care ar putea contribui la somnul pierdut al altcuiva.

Să luăm câteva minute și să trecem peste niște comenzi rapide, concesii și alte practici rele pentru a ne asigura că proiectele noastre nu sunt frică în inimile sătenilor.


Nu planificați înainte de a începe codarea

Înainte de a scrie o singură linie de cod, ar trebui să aveți un plan solid de atac.

Înainte de a scrie o singură linie de cod, ar trebui să aveți un plan solid de atac. Acest lucru vă ajută să vă mențineți pe drum și evitați codul rătăcitor care vă va deruta mai târziu, să nu mai vorbim de un alt suflet sărac.

O abordare care mi-a salvat timpul - atât în ​​dezvoltare cât și în comentare - este de a scrie mai întâi un comentariu în comentariile:

 

După cum puteți vedea, fără a scrie o singură linie de cod, știu deja exact exact ce va arăta fișierul. Mai presus de toate, aveți posibilitatea să planificați o întreagă aplicație în acest fel și, dacă ajungeți într-un punct în care o caracteristică necesită o funcționalitate optimizată pentru alta, tot ce trebuie să faceți este să modificați comentariul.

Aceasta necesită o schimbare în modul de abordare a dezvoltării, dar va face ca abilitățile dvs. de organizare a proiectului să treacă prin acoperiș.

NOTĂ: Unele dintre aceste observații nu sunt necesare; unele dintre ele se vor schimba; altele vor trebui adăugate - este de așteptat. Acest lucru este un fel de a scrie o schiță pentru o hârtie sau de a scrie o listă de produse alimentare: vă ține doar pe calea cea bună când mergeți pentru a termina de locuri de muncă.


Nu comentați nimic

Cu toate acestea, cea mai gravă problemă cu cele mai multe coduri pe care le întâlnesc este că este prost comentat sau nu a comentat deloc.

Mă face trist că trebuie să scriu asta. Când ceva este la fel de ușor ca și comentarea, nu ar trebui să fie ceva ce trebuie să ne reamintim.

Cu toate acestea, cea mai gravă problemă cu cele mai multe coduri pe care le întâlnesc este că este prost comentat sau nu a comentat deloc. Acest lucru nu numai că adaugă o bună parte din timp la familiarizarea mea inițială cu proiectul, dar garantează destul de mult că o remediere făcută din necesitate de o metodă neconvențională mă va deruta. Apoi, dacă sfârșesc să fac orice refactorizare, o să rupe din neatenție aplicația, pentru că nu am întâlnit circumstanțele atenuante care au necesitat reparația.

Acest proces poate dura de la 10 minute la 6 ore. (Și mi-ai făcut asta, știu unde locuiți, vin pentru tine).

Deci spune asta cu voce tare:

eu, [spune-ți numele], prin prezenta jur, să fac observații în orice situație în care scopul codului pe care l-am scris nu este imediat evident.

"Apariția imediată" se referă la un cod care nu poate fi auto-documentat (deoarece nu ar fi rezonabil să facă acest lucru) și / sau nu finalizează o sarcină mortală-simplă. Gândiți-vă în acest fel: dacă a trebuit să vă opriți și să vă gândiți la soluția dvs. pentru mai mult de câteva secunde, probabil merită o scurtă linie de explicație.

Pentru a ilustra punctul meu de vedere, voi folosi un exemplu dintr-un articol pe care l-am scris recent pentru incepatori. Luați în considerare următoarele:

 $ pieces = explode ('.', $ image_name); $ extension = array_pop ($ bucăți);

Ce face asta? Trebuie să te oprești și să te gândești la asta? Încă nu știi sigur ce sunt stocate extensie $?

Uitați-vă din nou la acest fragment, dar cu un comentariu rapid:

 // Descărcați extensia de pe fișierul cu imagini $ pieces = explode ('.', $ Image_name); $ extension = array_pop ($ bucăți);

Cinci secunde la un moment dat se vor adăuga într-un mod mare.

Acum, privirea la acest cod nu necesită nici o putere suplimentară a creierului: vedeți comentariul, vedeți codul și nu trebuie să puneți niciodată întrebări cu privire la intenția sa.

S-ar putea să vă salveze doar cinci secunde de contemplare, dar dacă aveți o aplicație complexă, cinci secunde la un moment dat se vor adăuga într-un mod mare.

Așa că nu mai face scuze. Scrie comentariul.


Sacrifici Claritatea pentru Brevet

Exemple bune de sacrificare a clarității pentru scurtcircuit includ nume variabile neclare și abandonarea bretelelor.

Este o tentă universală de a face ceva făcut în cât mai puține personaje posibil, dar că ispita este un fel de tentatie de a avea doar o pereche de lenjerie: sigur, rufele se fac rapid, dar problemele care apar din alegerea ta enorm depășesc beneficiile.

Exemple bune de sacrificare a clarității pentru scurtcircuit includ nume variabile scurte, neclare (cum ar fi $ a - ce face $ a magazin?) și picătură bretele curry.

Scăderea coaselor curbate din structurile de control este un animal de companie deosebit de moale. Dacă nu vă plac coastele curl, treceți la Python. În PHP, este prea ușor să pierzi sensul fără ei.

De exemplu, uitați-vă la acest set de declarații if-else imbricate fără bretele coiterale:

5) ecou "Mai mare de 5!"; altceva ecou "Mai puțin de 5!"; altceva echo "Mai mare de 10!"; ecou "
O altă notă. ";

Pe scurt, se pare că ultima linie ar trebui să declanșeze numai dacă valoarea lui $ foo este mai mare de 10. Dar ceea ce se întâmplă de fapt este un caz de indentare necorespunzătoare; ultima declarație de ecou va da foc indiferent de ce
$ foo magazine.

Poți să-ți dai seama dacă te uiți la ea pentru câteva secunde și știți că dacă-altceva declarații fără acolade arcuite afectează doar linia imediat următoare? Desigur.

Ar trebui să pierdeți energia imaginând asta? Absolut nu.

Adăugarea de bretele curlate adaugă câteva linii, dar clarifică afirmația imensă, chiar și cu indentarea ciudată:

5) ecou "Mai mare de 5!";  altceva echo "Mai puțin de 5!";  altceva echo "Mai mare de 10!";  ecou "
O altă notă. ";

Da, este bine să vă păstrați codul concis, dar nu în detrimentul clarității. Merită liniile suplimentare pentru a vă asigura că nimeni nu trebuie să lovească capul de o tastatură care încearcă să vă treacă prin cod.


Nu respectați un standard de codificare

Alegeți un standard și respectați-l.

Obținerea de dragoste cu formatarea dvs. ar putea satisface nevoile dvs. artistice, dar nu este de nici un folos pentru nimeni. Alegeți un standard (recomand standardul de codare PEAR) și lipiți-l. Toată lumea vă va mulțumi. (Inclusiv, într-o zi.)

Aveți încredere în mine. Am fost tipul asta odată - am vrut să am un "stil de semnătură" - și am pierdut o grămadă de ore pentru a-mi stabili formatarea atrocească mai târziu. Este timpul să fii diferit și să ai timp ca toți ceilalți.

Când vine vorba de programare, gândiți-vă la ea ca la un limbaj vorbit. Gramatica și punctuația există pentru un motiv: pentru a ne înțelege în mod clar reciproc când scriem lucrurile în jos. Gândiți-vă la standardele de codare ca la o versiune geeky a Elementelor de Stil ale lui Strunk & White - respectarea liniilor directoare înseamnă că oamenii înțeleg ceea ce încercați să spuneți, nu că sunteți o persoană plictisitoare.


Dumneavoastră duplicați codul

O faci gresit.

Încearcă să te uiți la fiecare bucată din aplicația ta ca ceva care va trebui să se schimbe la un moment dat. În caz contrar, va trebui să actualizați mai multe fișiere? Dacă ați răspuns da, este timpul să reevaluați modul în care scrieți codul.

Dacă aveți cod care face același lucru în mai mult de un loc în aplicația dvs., faceți acest lucru greșit.


Nu urmați un model de dezvoltare

Ar trebui să aveți întotdeauna o structură când codați.

Ar trebui să aveți întotdeauna o structură când codați. Nu vreau să spun că trebuie să urmați modelul MVC sau ceva la fel de rigid, dar vreau să spun că trebuie să știți cum să clasificați componentele și unde ar trebui să meargă.

Urmând un model de dezvoltare logică, multe decizii devin automate și cineva care intră în codul dvs. nu trebuie să ghicească mult atunci când caută o anumită funcționalitate în baza de cod.

Nu durează mult și va clarifica aplicațiile într-un mod mare.


Ești prea inteligent pentru binele tău

Cea mai simplă soluție este de obicei cea mai potrivită

Există o linie fină între o soluție greșită și una supercomplicată.

Este întotdeauna tentant să încerci un nou truc dulce pe care l-ai învățat, dar trebuie să rezistăm nevoii de a forța o soluție complexă într-un spațiu în care este suficient unul simplu.

La un nivel de bază, cea mai simplă soluție este de obicei cea mai potrivită. Încercați să ajungeți punctul A la punctul B - luând un ocol prin punct minunat este distractiv, dar într-adevăr nu adaugă nici un beneficiu.

Soluția dvs. super-dulce reprezintă totuși o problemă în care altcineva ar fi putut să nu fi văzut această soluție și să se piardă. Nu pentru că nu sunt la fel de inteligenți ca tine; probabil pentru că nu au văzut acel articol special sau nu au încercat să forțeze un concept pătrat într-o problemă rundă.

Nu vă înșelați, dar nu uitați să evitați lucrurile complicate "doar pentru".


Ești un Wang

Evitați să creați în mod activ codul greu de înțeles cu orice preț.

Când am început să dezvolt, am lucrat cu un tip care era un programator "expert" auto-proclamat. Ori de câte ori am avut o întrebare despre un concept, el nu mi-a dat niciodată un răspuns direct; pentru a obține răspunsul la întrebarea mea inițială, a trebuit să răspund la câteva întrebări preliminare pentru a "demonstra că poți face față răspunsului".

Acest tip a fost, de asemenea, foarte bun la scrierea unui cod care a fost critic, obfuscat și, în general, confuz.

Fișiere asemănătoare lui sunt rezultatul programatorilor care cred că trebuie să-și facă codul greu de citit pentru a "ține idioții afară".

Filozofia generală din spatele acestui lucru tinde să fie: "Dacă nu sunteți suficient de inteligenți pentru a înțelege acest cod, nu ar trebui să vă aflați în primul rând în acest domeniu".

Aceasta este o abordare adesea greșită și antisocică a programării. Este o modalitate foarte elitistă de a privi lucrurile și arată că programatorul a pierdut legătura cu rădăcinile începătorului, când el însuși avea nevoie de ajutor.

Evitați să creați în mod activ codul greu de înțeles cu orice preț. Nu te face să fii mai răcoros sau mai deștept și nu susține respectul. Asta te face să fii un wang.


Tipule, despre ce vorbești?

Dacă vă opriți de învățare, atunci proiectele pe care le lucrați sunt blocate în orice perioadă de timp ați decis să se stabilească.

În plus față de comenzile rapide și lenea generală de mai sus, un alt lucru care ar putea să vă țină înapoi este lipsa continuării procesului de învățare și progres.

Tehnologia nu se schimbă deoarece comunitatea în ansamblu este plictisită și am decis să redecorăm; majoritatea tehnologiilor noi apar în mod mai eficient și rezolvă cu ușurință problemele existente. Alegerea să ignori progresul este alegerea pentru a începe procesul lent de marginalizare a abilităților tale.

Iată câteva lucruri pe care le putem întrerupe cu toții pentru a ne asigura că seturile de competențe sunt actualizate, toate fără a fi nevoie să renunțăm la weekend-urile noastre.


Încercați să faceți totul

Aflați care dintre acești programatori au o abordare similară și lăsați-i să vă completeze știrile mari.

Nu puteți ține pasul cu întreaga comunitate. Ca oricine a încercat vreodată să țină pasul cu un abonament la blogurile de 200+ tehnologii vă va spune că pur și simplu nu se poate face într-un interval de timp rezonabil.

Din fericire, există cei din cadrul comunității care își dedică timpul să urmărească progresul tehnologiei și să-și raporteze constatările. Dacă vă faceți timp pentru a afla care dintre acești programatori are o abordare și stil similar, le puteți lăsa să vă completeze știrile mari.

Urmărind 2-5 dintre acești bloggeri de tip "adopter devreme" poate fi mai benefic decât să vă abonați la fiecare blog tehnic pe care îl întâlniți din mai multe motive:

  • Dacă ai încredere în opinia lor, vor fi tehnologii de screening pentru tine.
  • Dacă o tehnologie apare pe mai multe dintre aceste bloguri, știți că ar trebui să faceți cel puțin câteva minute pentru a afla mai multe despre el, deoarece este în mod evident popular.
  • Adesea, aceste bloguri vor avea un tutorial rapid intro, care vă poate salva durerea de cap de la zero, cu o nouă tehnologie.

Printre bloggerii PHP am încredere în David Walsh și Chris Shiflett.


Nu sunteți în afara zonei dvs. de confort

Pur și simplu vreau să vă sugerez să vă simțiți mai mult împlinită ca programator și să vă vedeți talentul progresând din ce în ce mai mult dacă alegeți să căutați mereu la următorul nivel de programare.

Dacă nu faci ceva care te provoacă, ceva e în neregulă. Găsirea de noi provocări în cadrul proiectelor este cea mai mare parte a ceea ce face recompensarea programării (sau cel puțin ar trebui să fie).

Încercați să vă puneți următoarele întrebări atunci când începeți să căutați proiecte noi:

  • Există o nouă tehnologie care mă interesează aici?
  • Am aflat despre o modalitate mai bună de a face acest lucru de la ultima dată când am luat un proiect ca acesta?
  • Există o bună practică pe care trebuie să o pun în aplicare, pe care aș putea să o monitorizez pe parcursul întregului proiect?

Rețineți: Nu vorbesc despre a face ceva extrem de complex, aici.

Poate fi la fel de simplu ca amintirea adăugării documentelor Docblocks la obiectele dvs. sau la fel de complexă ca și cum ați face aplicația compatibilă cu XMLRPC, astfel încât utilizatorii să poată posta mai ușor actualizările.

Încercați să nu vă stabiliți și să vă convingeți că ați învățat tot ce veți învăța. Atunci când va începe să devină urât pentru tine.


Nu sunteți de acord

Discutați întotdeauna codul dvs. cu colegii dvs. de programatori.

Cea mai bună modalitate de îmbunătățire este să discutați codul cu colegii dvs. de programatori. Acest lucru se poate face prin mai multe căi: dacă vă simțiți în mod deosebit, scrieți un tutorial sau lansați un proiect open-source; dacă nu vă simțiți la ceva de această scală, poate că puteți să vă implicați într-un forum al comunității și să oferiți asistență noilor veniți.

"Cum ajută noobii să mă ajute să progresez?" tu intrebi. De obicei, dacă postați o soluție care ar putea fi optimizată, alți programatori experimentați vor merge și vor oferi trucuri. Deci, această abordare este o dublă surprinzătoare: nu numai că ajuți să progresați în comunitate, oferindu-vă cunoștințele pentru începători, dar vă ascuțiți propriul set de competențe, atârnând copacii pe care toată lumea să vă vadă și să vă ajute să vă dezvoltați.


Nu aveți proiecte de o parte

Dacă doriți să intrați în ceva nou și rece, care este un pic prea implicat pentru a pune într-un proiect real, cel mai bun mod de a învăța este să începeți un proiect lateral care utilizează tehnica menționată.

În acest fel, puteți să progresați în propriul ritm, în timpul liber și să riscați niciodată să pierdeți un termen sau să faceți "greșit".


Suntem toți vinovați

Dacă o facem bine, ar trebui întotdeauna să ne îmbunătățim. Iar logica ne spune că, dacă suntem mai buni acum, atunci eram mai răi înainte. Și dacă urmărim acea linie de raționament înapoi destul de departe, era un punct în care eram teribili.

Știu că atunci când mă uit înapoi la codul pe care l-am scris în trecut, sunt îngrozit.


Deci ... Opriți-vă.

Nu vom fi niciodată perfecți. Dar putem face tot ce ne stă în putință pentru a ne asigura că ajungem cât mai aproape posibil.

Care sunt puii de companie atunci când se ocupă de codul altor dezvoltatori? Anunță-mă în comentariile!

Cod