
Auzim de multe ori despre conceptul de cod ideal (sau cod perfect). Ce inseamna insa un cod perfect? A vazut cineva un asemenea cod ? Din punctul meu de vedere un cod ideal este codul care intruneste toate cerintele si standardele software si de programare. Mai mult decat atat un cod ideal este dezvoltat folosind si cele mai bune practici in domeniu.
Putem sa punem la punct o lista de atribute ale unui cod perfect? Cred ca fiecare companie si fiecare developer are propriile reguli legate de modul in care ar trebui sa arate un cod perfect, insa sunt cateva caracteristici generale pe care cred ca un cod ideal ar trebui sa le respecte.
Lizibilitatea codului este prima caracteristica. Developerii petrec aproape 95% din timp citind cod scris de altii. Daca acel cod nu este usor de inteles acel developer va petrece mai mult timp descifrand codul si mai putin timp facand schimbari in el. Daca un programator nu poate intelege o parte a codului, mai degraba il va rescrie de la zero. Si asta consuma timp si energie.
Un cod ideal trebuie sa fie si concis. Daca nu este concis si compact timpul petrecut pentru a-l parcurge si intelege este foarte mare.
Caracteristica numarul trei este claritatea. Codul sursa nu trebuie sa contina surprize. Ar trebui sa fie clar pentru ceilalti developeri chiar daca nu te cunosc pe tine sau stilul tau de programare. Cum poti sa faci asta? Ar trebui sa te asiguri ca respecti standardele, principiile si conventiile din domeniu. Exista cazuri destul de dese de programatori care incearca sa reinventeze roata.
In ceea ce priveste comentariile inserate in cod exista discutii si aici. Uneori ar trebui sa scriem comentarii insa acestea nu sunt legate de cod, doar ca atunci cand schimbam codul trebuie sa fim atenti sa schimbam si comentariile. De aceea codul de tip self describing este vital.
Si flexibilitatea codului conteaza. Aplicatiile de succes pot sa evolueze de-alungul anilor. Fiecare noua cerinta duce la schimbari de design si cod. Cu cat codul este mai flexibil cu atat mai rapid pot fi implementate schimbarile si noile facilitati. Un cod lipsit de flexibilitate este fragil. Fiecare schimbare duce la aparitia bugurilor sau comportamente ciudate ale sistemului. Componentele non functionale sunt greu de suportat si in cele mai multe cazuri greu de rescris de la zero.
Codul trebuie sa fie si testabil. Robert Martin spunea ca un cod netestat este materia neagra a universului software. Doar testarea automatizata si code coverage pot sa asigure o calitate adecvata a produsului si sa reduca numarul de defecte. Daca acel cod nu este testabil trebuie sa petrecem mai mult timp dezvoltand mocks si stubs pentru unit tests.
Un cod de calitate este si scalabil. Aplicatiile moderne se confrunta cu incarcarea dinamica acolo unde utilizarea resurselor se poate schimba de la 0 la 100% sau chiar mai mare. In acest caz codul tau nu se va bloca daca gradul de incarcare creste. Spre exemplu, daca timpul de executie pentru pentru 100 de itemi este de o secunda si pentru 1000 de itemi este de 100 de secunde atunci codul tau nu este scalabil.
Eficienta codului este un alt aspect care trebuie avut in vedere. Este singurul atribut care poate fi masurat si tunat. Nu este atat de usor sa definim eficienta unui cod in cadrul procesului de revizuire a acestuia sau a designului acestuia. Deoarece de multe ori nu stim in avans gradul de utilizare si resursele pe care le avem la dispozitie. Exista insa reguli generale despre scrierea unui cod eficient si optimizarea codului lent sau ineficient. Pe de alta parte nici optimizarea prematura nu este recomandata deoarece scade lizibilitatea si concizia codului in schimbul unui castig mediu la nivel de performanta.
Limbajele de programare evolueaza. Fiecare versiune noua vine la pachet cu sintaxe noi, facilitati, librarii si bune practici. Ele fac codul mai concis, rapid si usor de inteles. Ca atare trebuie sa ramai mereu la curent cu cele mai noi limbaje si functionalitatile noi cu care vin.
Componentele software sunt ca o gaura neagra. Stii care sunt parametrii de input sau output dar nu stii detaliile interne de procesare. Componentele sunt in marea lor majoritate reutilizabile dar este important ca acest cod sa fie sigur. Orice parametri incorecti, invalizi sau care lipsesc nu ar trebui sa afecteze codul.
Respectand aceste principii poti sa asiguri un grad cat mai ridicat de calitate al codului tau, chiar daca nu este perfect.