Construirea de software de la zero

De John SonmezFebruarie 23, 2017

Multor dezvoltatori de software le place să facă lucrurile complicate. Ei obțin ceva care ar putea fi simplu și ușor și, datorită a ceea ce majoritatea oamenilor spun pe internet, îl fac complicat.

Software-ul ar trebui să fie simplu. Acestea fiind spuse, este ușor de înțeles de ce atâtor dezvoltatori le este greu să creeze software de la zero. În mintea lor, este un lucru total complex și dificil și se blochează complet la mijlocul procesului.

Atunci, întrebarea este… Cum construiești un software de la zero?

Transcriere din videoclip

John Sonmez:

Ei, care-i treaba? John Sonmez de la simpleprogrammer.com. Astăzi, am o întrebare despre cum se construiește un software de la zero. Aceasta este o întrebare pe care am primit-o de multe ori de la o mulțime de oameni diferiți, pentru că este ceva dificil de făcut atunci când ești începător, pentru a-ți da seama cum ai putea face asta.

Această întrebare vine de la Akash și spune: „Hei John, videoclipurile tale sunt grozave și apreciez foarte mult sfaturile tale. O problemă cu care mă confrunt este că, atunci când vine vorba de construirea unui software mare, nu mă pot gândi cum să proiectez totul de la zero. Să zicem, cum să împart întregul lucru în mini-sub-task-uri și apoi să implementez fiecare subtask și să le pun pe toate împreună pentru a-l face să funcționeze. Ar fi foarte frumos dacă m-ați putea îndruma cum să depășesc această problemă. Mulțumesc anticipat.”

Ce aș spune aici, Akash, este că ceea ce vrei să faci este să te gândești – în loc să te gândești să iei un întreg sistem, acest tip de abordare de sus în jos, să îl descompui în toate aceste piese, să asamblezi toate aceste piese și să vezi cum se potrivesc împreună și să construiești acest Transformer masiv sau Legos din – aceste Legos uriașe. Vreți să vă gândiți la dezvoltarea de software mai mult ca la o evoluție.

Ce vreau să spun prin asta este că începeți cu ceva foarte simplu. Începeți cu cel mai simplu lucru care ar putea funcționa și care nu are o mulțime de caracteristici și apoi evoluați până acolo unde vreți să ajungeți, în loc să faceți ceea ce se numește proiectare mare la început. Acest lucru nu înseamnă că nu ar trebui să vă gândiți niciodată la arhitectura generală a lucrurilor și că nu trebuie să vă gândiți la proiecte și la anumite lucruri de la început. În multe cazuri, nu trebuie să faceți atât de mult pe cât credeți că aveți nevoie.

Acum, dacă proiectați un software care va fi încorporat în interiorul unui dispozitiv electronic și un inginer hardware va trebui să dezvolte circuitele sau un cip personalizat sau ceva de genul ăsta pentru ca acesta să funcționeze, probabil că va trebui să proiectați multe din aceste lucruri în avans și probabil că va trebui să faceți asta. S-ar putea chiar să fiți limitat acolo. Pentru majoritatea software-ului pe care îl construim astăzi, în special aplicațiile web și lucruri de genul acesta sau aplicațiile mobile, am putea construi ceva care este foarte, foarte de bază și apoi să evoluăm, să facem modificări pentru a-l crește și pentru a adăuga complexitate după cum este necesar.

Un lucru – un motiv pentru care acest lucru este atât de important este că blestemul dezvoltării de software, unul dintre cele mai rele lucruri în dezvoltarea de software este complexitatea. Acest canal se numește Simple Programmer (Programator simplu), iar afacerea mea se referă la simplificarea complexului, pentru că asta este ceea ce trebuie să facem. În calitate de dezvoltatori de software, una dintre sarcinile voastre principale este să luptați împotriva complexității, deoarece complexitatea intră în sistem și îl face dificil de întreținut și îl face dificil de înțeles. Face ca acesta să aibă mai multe șanse să aibă erori și să eșueze. Dorim să reducem complexitatea cât mai mult posibil. Vrem să simplificăm. Trebuie să începem cât mai simplu posibil, care este cel mai simplu lucru posibil care ar putea funcționa?

De multe ori, în lumea antreprenorială, se numește MVP sau produs minim viabil. Ce poți face atunci când încerci să construiești un sistem software mare sau ce poți face este că poți începe foarte mic. Începeți cu un lucru foarte, foarte mic. Încerc să mă gândesc la carte, dar am citit o carte foarte bună despre ceva, cred că era „Test driven development step-by-step” sau ceva de genul ăsta. În carte, el proiecta o aplicație de tip Notepad sau ceva de genul ăsta. A început cu foarte, foarte incremental – a făcut acest lucru într-un mod foarte incremental și a început cu, cred, aplicația lui avea nevoie de o bază de date, dar a început fără a avea o bază de date. În schimb, doar ca să stocheze datele în fișiere text pe care le citea din fișierele text. Apoi a ajuns la punctul în care avea nevoie să le pună efectiv într-o bază de date, iar apoi a modificat programul și l-a făcut să citească aceleași date, cu excepția faptului că a creat o abstracție pentru a citi din baza de date.

Aceasta este evoluția naturală a lucrurilor și așa se poate construi acest software complex. Vă garantez că cea mai mare parte a software-ului complex care este construit în prezent este construit în acest mod. O mare parte dintre ele nu sunt proiectate de la bun început și apoi se construiesc toate aceste piese și se speră și se roagă ca ele să funcționeze. În caz contrar, se ajunge să se depășească cu mult bugetul și programul. Din păcate, acest lucru se întâmplă. Dacă vreți să aveți succes, dacă vreți să puteți face acest lucru, începeți cu ceva mic. Nu există nimic care să fie dificil în această lume. Nu există nimic care să fie complex. Este doar faptul că este compus dintr-o grămadă de lucruri simple care îl fac să pară complex.

Puteți construi cea mai complexă arhitectură. Poți construi un lucru uriaș, dar trebuie să începi cu ce este simplu. Totul este compus din ceea ce este simplu. Apoi, în loc să încerci să iei toate aceste piese, doar începe. Evoluează lucrul. Începeți. Construiți ceva. Care este cel mai mic și cel mai simplu lucru pe care îl puteți scoate pe piață și care are o funcționalitate apropiată? Apoi începeți să adăugați caracteristici. Pe măsură ce adăugați funcționalități, apoi adăugați arhitectura care să le susțină și creați abstracțiuni.

O carte pe care v-o recomand și care probabil v-ar ajuta să faceți acest lucru se numește Clean Code. Este una dintre cărțile mele preferate, scrisă de Robert Martin. Vă recomand cu siguranță acea carte, dar doriți să vă evoluați arhitectura. Apoi, celălalt lucru pe care l-aș spune despre acest lucru este că, pe măsură ce evoluați lucrurile, veți crea abstracțiuni pentru a le păstra simple, astfel încât să nu aveți niciodată această complexitate uriașă, uriașă. Uneori ar putea însemna chiar să rescrieți totul sau să rescrieți părți din el, dar asta este în regulă. Acesta este modul în care funcționează evoluția software-ului. Este mai bine decât să adaugi complexitate.

De multe ori dezvoltatorii de software vor să optimizeze prematur. Ei vor să facă lucrurile extrem de flexibile. Ei fac o optimizare prematură a software-ului pentru că încearcă să construiască acest sistem foarte, foarte robust. Acest lucru eșuează adesea pentru că nu știm ce nu știm. Nu știm de ce vom avea nevoie, așa că este mai bine să nu încercăm să anticipăm, ci doar să spunem: „Bine. Acum, trebuie să adaug această nouă caracteristică sau să fac ca acest lucru să funcționeze în acest fel. Cum pot să o evoluez?”

Rețineți, dezvoltarea de software nu este ca un pod. Nu este ca și cum ați pus betonul și acum aveți de gând să schimbați arhitectura casei. Software-ul este maleabil. Este ca lutul. Îl puteți schimba. Nu are un cost mare, foarte mare pentru tine să îl modifici și să îl schimbi. Trebuie să folosești cât mai mult posibil avantajul acelui mediu, care se pretează la un proces evolutiv de dezvoltare a software-ului, spre deosebire de o proiectare mare la început.

Sper că te ajută Akash. Bună întrebare. Cred că o mulțime de oameni au întrebat despre asta în trecut. Dacă aveți o întrebare pentru mine, puteți trimite un e-mail la [email protected]. Dacă vă place acest videoclip, mergeți mai departe și faceți clic pe acel buton mare Subscribe de mai jos, dacă nu v-ați abonat deja. Dacă ați făcut-o, vă mulțumesc. Rămâneți conectați până data viitoare. Aveți grijă.

Lasă un răspuns

Adresa ta de email nu va fi publicată.