Comentariul acesta va fi mai lung, asa ca probabil veti vrea sa sariti complet peste el.
Pe scurt: Noi rezolvam probleme, sau “scriem cod frumos”? Pentru ca, de multe ori, mai ales la scala mica, cele doua sunt incompatibile, sau cel putin incompatibile cu cerintele de timp si fonduri/bani ale clientului.
Pe lung:
Technical Debt si Deprecation apare ca parte a procesului de rezolvare a problemelor, indiferent de domeniu. In unele domenii, avansul tehnologic si trendurile operationale rezulta in schimbari mai mari decat in alte domenii.
Spre exemplu, in agricultura, mai nou se foloseste drip-irrigation, in loc de umplerea cu apa a unor canale in fiecare zi sau o data la cateva zile. Astfel, canalele de irigare, care folosesc mai multa apa decat drip-irrigation, dar care nu folosesc furtunuri de plastic, genereaza technical debt diferit fata de drip-irrigation. Picurarea genereaza technical debt prin necesitarea intretinerii furtunurilor de plastic, a legaturilor dintre mai multe furtunuri de plastic (joins/junctions), si a motorului. Canalele de irigatie genereaza technical dept prin necesitarea intretinerii canalelor, pentru a asigura ajungerea apei la toate plantele din jurul canalului de irigare, a motorului, a “portilor” canalelor de irigare (daca se folosesc in locul lasarii furtunului in canalul/santul de irigare), si a furtunelor care duc apa de la pompa pana in canalul de irigare.
Fiecare din acele parti are o rata diferita de degradare (decay), fiecare necesita altfel de mentenanta (inclusiv motoarele, deoarece irigarea prin picurare necesita un motor mai mic), si fiecare se va strica diferit. In functie de cum organizezi canalele de irigare sau furtunurile de picurare, iti va fi mai usor sau mai greu sa obtii recolta, si schimbarea modului de recoltare si plantare poate cauza, de asemenea, probleme.
In mod similar, in programare apar limbaje noi, probleme noi, solutii noi, erori noi, fix-uri noi, trenduri noi (i.e. framework-uri noi), etc. Similar, in mecanica auto apar diferite parti, diferite necesitati (i.e. calculatorul de bord care sa controleze si coordoneze partile mecanice si electrice), diferite probleme si solutii, si diferite trenduri.
Din acest motiv spuneam ca technical debt apare ca urmare a rezolvarii unei probleme. Pana si pe vremea epocii de piatra, aparitia de tehnologii noi (precum agricultura) a dus la schimbari majore si technical debt (daca nu intretineai terenul agricultural, puteai sa nu obtii recolta.
De-asta cred ca nu ar trebui sa ne concentram atat de mult pe a nu crea technical debt, sau produse deprecate, cat ar trebui sa ne concentram pe a comenta suficient (cu risc de a comenta excesiv) codul produs, pentru a scadea costurile asociate cu repaprarea codului deprecated sau codului cu technical debt.
Iar aici intervine conceptul de vendor-locking. Daca ne structuram codul astfel incat sa fie mai usor sa eliminam sau inlocuim bucati majore de cod, inca de la inceput, cresc sansele ca aplicatiile create sa fie structurate mai “curat”, mai usor de inteles, mentinut, reparat, refactorizat, si chiar refacut folosind technologii moderne.
Si acum revenim la ce a zis mai sus @isti37 :
Cu alte cuvinte, putem scrie cod “cu picioarele” indiferent de limbaj si framework. Unele limbaje si framework-uri fac mai usoara standardizarea codului si urmarea unor standarde de calitate, insa nu asigura aceste lucruri.
Totusi, atata timp cat dezvoltatorii pun accent pe urmarea standardelor de organizarea a codului in mod citibil si usor de inteles, mentenanta si repararea devin mai usoare, portarea de la un vendor la altul (i.e. trimiterea de mail prin MailChamp in loc de Gmail SMTP) devine mai usoara, si tot asa.
Problema e ca, in viata reala, urmarea standardelor acelora costa atat timp cat si bani. Iar daca urmarea standardelor duce la pierderi mai mari decat castigurile cauzate de codul creat/modificat, atunci devine mai economic sa scriem cod “cu picioarele”, si sa il rescriem de la 0 atunci cand nu il mai putem repara. Mai ales daca produsul produce din ce in ce mai multi bani in timp, astfel punand la dispozitie fonduri mai mari pentru mentenanta/intretinere/reparare, astfel scazand investitia necesara inaintea lansarii produsului si inaintea recuperarii investitiei initiale a produsului.
Degeaba scriem cod care ruleaza si azi fara probleme, daca nu e folosit de nimeni VS degeaba scriem cod care rezolva probleme la timpul lor, daca nu ruleaza si azi fara probleme.
Daca inca nu ai inteles, presupun ca ar fi mai eficient sa discutam pe privat, ca sa nu umplem aceasta discutie cu mesaje irelevante sau doar marginal relevante.