Un programator, un dezvoltator și un inginer intră într-un bar. Barmanul este confuz de ce o persoană are picioarele peste 3 scaune de bar.

Dacă te-ai uitat vreodată la fișele posturilor pentru oameni care au ocupația de a scrie cod, vei observa adesea o lipsă de corespondență în modul în care postarea este creată între companii. De cele mai multe ori, veți vedea un titlu de post care indică că compania caută să angajeze un „programator”, „dezvoltator” sau „inginer”. Mai des decât nu: aceste postări sunt făcute de cineva din HR care adesea nu s-ar ocupa de niciunul dintre aspectele tehnice ale jobului - și nu se gândește cu adevărat la conotația pe care o oferă fiecare cuvânt.

La sfârșitul zilei, pentru oamenii din această meserie; Atâta timp cât vă dovediți a fi eficient în poziția dvs., eticheta desemnată pentru dvs. de HR are foarte puțină semnificație și puteți folosi aceste cuvinte în mod interschimbabil. Dar, ca profesionist tehnic, poate că conotația din spatele acestor cuvinte do are sens pentru tine!

Deci, care este diferența dintre aceste trei terminologii strâns legate? Acesta este un subiect care a fost în dezbatere de ani de zile. Există un pic de nuanță în definiția auto-descrisă a fiecăruia, totuși, comportamentul de bază al acestor trei roluri a fost destul de stabil în comparație cu perspectiva fiecăruia. Sunt un învățător foarte vizual, așa că cred că cel mai bun mod de a comunica modul în care interpretez diferențele este cu această diagramă:

Probabil vă întrebați „de ce există un triunghi care este cu susul în jos”. Pentru o vreme m-am întrebat de ce am tot văzut viziuni ale unui triunghi invers. Claritatea acestei diagrame va veni pe măsură ce vom explora fiecare strat al triunghiului, începând cu stratul programator.

Programatorul

Veți descoperi că comportamentele tipice ale unui programator sunt legate de a vedea o sarcină ușoară sau repetitivă și de a încerca să le automatizeze.

Programatorii lucrează de obicei cu o singură limbă și creează software care va îndeplini sarcini simple. Codul software-ului în sine este, de obicei, foarte umflat și poate fi plin de anti-modele, dar încă își face treaba. Un programator este de obicei capabil să scrie cod cu limba aleasă, dar nu înțelege cu adevărat modul cel mai eficient de a-și scrie codul. De asemenea, poate lipsi multe dintre semantica necesară pentru a colabora într-un mediu în care există mai multe persoane care contribuie la aceeași bază de cod.

Cu toate acestea, acest lucru nu înseamnă că programatorii sunt „incompetenți”. Uneori nu aveți nevoie de o soluție extrem de scalabilă, extrem de extensibilă - s-ar putea să aveți nevoie doar de ceva care pur și simplu funcționează. Soluția s-ar putea să nu funcționeze după poate 6 luni, dar o soluție care a durat 10-20 de minute și a îmbunătățit productivitatea sau a economisit timp timp de 6 luni este încă o performanță neprețuită; și a putea crea asta este o abilitate impresionantă.

Programatorii sunt la propriu, doar un vârf al aisbergului (sau triunghiul invers), iar „programarea” este o abilitate eficientă care nu necesită nicio pregătire intensă sau studiu pentru a învăța. Dacă nu sunteți tehnic și credeți că ați putea scrie scripturi simple pentru a vă automatiza o parte din sarcinile zilnice, vă încurajez să puneți programarea ca una dintre abilitățile în buzunarul din spate.

Dezvoltatorul

Este oarecum obișnuit ca un dezvoltator să petreacă ore sau zile scriind cod, apoi iese în sfârșit din izolare pentru a se pregăti să își trimită munca. Apoi li se spune că va avea nevoie de unele schimbări...

Dezvoltatorii de software lucrează de obicei rapid. De obicei își cunosc bine stiva, au o bună înțelegere a limbii alese și știu cum să implementeze proiecte și idei cu cod. Dacă aveți nevoie de software; un dezvoltator vă va oferi rezultate și chiar va fi gata să repetați acele rezultate pe toată durata de viață a software-ului.

SDLC: Ciclul de viață al dezvoltării software

Dezvoltatorii de software sunt foarte bine pregătiți și, de obicei, sunt la curent cu tendințele actuale, cum ar fi noi funcții de limbaj, cadre sau instrumente de dezvoltare. La fel ca un programator, ei caută adesea să-și automatizeze propriul comportament prin instrumente și biblioteci, astfel încât să se poată dezvolta și mai rapid.

Așadar, de ce ți-ai dori chiar un inginer când poți obține doar un dezvoltator? Răspunsul este simplu, dezvoltatorul are nevoie de o direcție tehnică consecventă. De multe ori trebuie să fii explicit cu privire la ceea ce vrei de la software. De exemplu, să presupunem că doriți să construiți un site web pentru a vinde DVD-uri oamenilor de pe tot globul. Ei vă vor spune „nicio problemă” să creați o aplicație de reacție, să vă conectați/faceți un backend și să vă ofere un site web care le permite oamenilor să facă clic pe DVD-ul pe care îl doresc, apoi să le fie trimis. Apoi te vei uita la telefon și vei spune „de ce arată așa?” Ei bine, asta pentru că nu ai spus că vrei să fie compatibil cu dispozitivele mobile.

Dezvoltatorii sunt foarte capabili; dar dacă nu sunteți alături de ei la fiecare pas al procesului de dezvoltare, ei se dezvoltă adesea într-un ritm atât de rapid încât nu se gândesc la niciun caz limită. Codul lor va avea nevoie adesea de multă refactorizare și dacă codul lor rămâne neverificat pentru prea mult timp, veți rămâne cu munți de datorii tehnice. S-ar putea să te uiți la un cod de dezvoltator și să spui „dar de ce ai pus toate astea aici?” sau „de ce ai început să folosești carcasa pentru cămilă, apoi ai trecut la funcția de mijloc a carcasei pentru kebab?”. Dezvoltatorii adesea nu se preocupă de viitor și se concentrează în principal pe furnizarea de rezultate pentru prezent.

Inginerul

Când vii la un inginer cu o problemă, uneori acesta nu îți va da un răspuns imediat. Îți vor oferi 3 – 4 soluții diferite, cu argumente pro și contra pentru fiecare strategie și chiar te vor ajuta să iei cea mai bună decizie din alegeri.

Scopul inginerului software este întregul triunghi invers. Se așteaptă ca aceștia să aibă aceleași capacități ca un programator și dezvoltator; pe lângă nevoia să-și aducă propriul set de abilități unice. S-ar putea să credeți că un inginer de software este un expert absolut în limbaje de programare, dar adesea un inginer va petrece mai mult timp uitându-se la documentație decât ar face-o un dezvoltator.

Inginerii de software nu evită problemele, le disecă. Aceștia iau o problemă, apoi creează sub-probleme și mai multe sub-probleme, apoi le rezolvă pe fiecare folosind bogăția lor de experiență și arsenalul de teorii informatice, precum mult detestatul subiect „Structuri și algoritmi de date”.

Inginerilor de software le place ideea de scalabilitate. Dacă asculți vreodată un inginer de software care prezintă o idee și îi întrebi „dar este scalabil?” foarte probabil le veți vedea făcând o pauză pentru un moment, apoi vă oferiți mai multe moduri în care se poate scala și în ce măsură. Nu au nevoie să memoreze funcțiile și metodele unei limbi, deoarece știu exact cum ar trebui să manipuleze structura de date cu care lucrează și știu exact cum să găsească acea metodă în documentele de limbă.

Inginerii de software colaborează adesea intens și lucrează pentru a defini orice caz marginal posibil și încearcă să anticipeze fiecare eroare posibilă cu care s-ar putea confrunta înainte chiar de a scrie orice cod. Pentru a face un pas mai departe, inginerii software vor scrie cod care testă codul pe care îl scriu. Acest lucru asigură că pot izola imediat o problemă și pot împinge codul în siguranță.

Abilitățile de proiectare a sistemului ale unui inginer software pot fi înfricoșător de bune. Ei sunt adesea capabili să traducă sisteme simple pe care le putem comunica între ei ca oameni (cum ar fi un joc pacman), într-o traducere care poate fi înțeleasă de un computer. Dacă nu știai, computerele pot vorbi doar în binar (01001000 01001001). Nu vom discuta despre modul în care codul cu aspect oarecum lizibil este transformat în binar, deoarece aceasta este o discuție extrem de extinsă.

Pot continua la nesfârșit despre amploarea și profunzimea talentelor și responsabilităților unui inginer de software, dar aș prefera să vorbesc despre dezavantajul lucrului cu un inginer de software, și anume: sunt scumpi! Așa cum ar trebui să fie; aceștia sunt oameni care pot executa idei într-o infrastructură infinit scalabilă și extensibilă. Dezvoltarea cu un inginer software poate fi mult mai lentă, mai ales la început. Peste timp, un inginer de software vă poate construi o infrastructură tehnică atât de solidă, care poate crește viteza de dezvoltare până la viteze care îi vor șoca chiar și pe acționari.

Este dificil să devii inginer de software, pentru că este mult mai mult decât să înveți profundele și dezavantajele unei limbi. Există concepte care trebuie înțelese și aplicate corespunzător în fiecare scenariu. Trebuie să dovediți că vă puteți ocupa de proiectarea sistemelor în mod independent și că puteți comunica bine soluțiile prin documentare și comunicare directă atunci când colaborați. Inginerii de software știu că nu știu totul, dar știu și că pot învăța orice.

Încheierea

Triunghiul ciudat pe dos, sper că am putut să-mi comunic eficient gândurile despre diferențele dintre aceste roluri. Deși HR s-ar putea să te aibă ca un cod de muncă care nu reflectă abilitățile tale, sperăm că poți folosi acest triunghi pentru a determina unde te afli și unde ai vrea să fii. De asemenea, sper că acest articol poate oferi o perspectivă bună pentru a ajuta pe oricine caută să găsească pe cineva care să „scrie un cod”. Există cu siguranță cazuri de utilizare eficiente pentru fiecare strat al triunghiului. De asemenea, nu trebuie să începem să facem de rușine PC-ul pe oameni dacă nu știu diferența.