Dezvoltare software – retrospectiva pentru 2016

În 2016 preocupările legate de dezvoltare software au fost orientate către partea de proces, învățare, bune practici, soluții de business și arhitectură folosind tehnologii moderne.

Anul l-am început alături de Koding Tehnology cu o colaborare pe partea de consultanță și dezvoltare software.

  • am realizat un studiu exploratoriu privind soluțiile de business (ERP, CRM, BPM)
  • am lucrat la o soluție custom de raportare
  • am urmat cursul de MongoDB
  • am experimentat cu Neo4J
  • am prototipat alături de echipa Koding o arhitectură pentru catalogul de produse bazată pe baze de date nerelaționale și tehnologii cloud

Cea mai mare provocare si cea mai bogată din punct de vedere al satisfacției personale a fost să împărtășesc cunoștințele către studenții de la ASE.

  • am lucrat împreună cu grupele 1070, 1074 și 1075 în laboratorul de tehnologii web
  • am facilitat seminarul de Afaceri Electronice
  • am organizat două workshop-uri cu tema “Agile în practică” la invitația doamnei prof. Bodea în cadrul cursului de Management al Proiectelor Informatice, master SIMPRE

Practică deliberată

Pe peretele unui prieten am văzut o interfață familiară. Te îndeamă să dai share dacă primul tău mediu integrat de dezvoltare (IDE) a fost albastru. 

Mi-am amintit de zecile de programe pe care le-am scris în C++

Toate din plăcerea de a realiza ceva gândit de mine. Cred că nimeni nu te poate forța să înveți programare. Cel mult să te inspire și să te ghideze. În rest e nevoie de foarte multă practică deliberată.

omg

Se spune că ai nevoie de cel putin 10.000 de ore pentru a deveni expert într-o meserie.

Plăcerea de a scrie cod de calitate

Plăcerea de a scrie cod de calitate mi-a fost insuflată de doi oameni pe care îi respect foarte mult și sunt tare recunoscător că am avut ocazia să lucrez alături de ei. Pe amândoi i-am considerat mentori și modele în perioada în care am lucrat la Zitec. Cei doi sunt Ionuț VODĂ și Lucian DAIA. Ambii fac parte din echipa de conducere unde Ionuț este CTO, iar Lucian este Chief Software Engineer.

Amândoi au standarde înalte de calitate pe care le pun în practică așa că am luat decizia să îi urmez și să le ascult sfaturile. A fost o decizie inspirată pentru că după ce am început să mă preocup de calitatea codului munca mea a căpătat o nouă dimensiune. Am început să mă bucur atât de rezultatul muncii cât și de procesul de a ajunge la soluție într-un mod elegant.

Lucian mi-a făcut cunoștința cu PHP MessDetector un tool de analiză statică pe cod. Se întâmpla prin anul 2011 când am început să lucrez pe unul din proiectele pe care el îl conducea. A avut mare răbdare să îmi explice conceptele și ce înseamnă fiecare indicator. Apoi ne-am chinuit împreună să îl facem să meargă. Foarte puțin mai conta ora de încheiere a programului pentru că eram tare curios să văd rezultatele. L-am rulat pe toate proiectele pe care le făcusem până la momentul respectiv. Am găsit variabile nefolosite, clase foarte lungi și metode greu de înțeles datorită numărului mare de puncte de decizie.

Tot Lucian mi-a prezentat conceptul de refactorizare și am lucrat împreună să optimizăm un script care prelucra date foarte multe extrase din AppStore. Am rescris codul pentru a fi mai ușor de înțeles și de extins. Am optimizat interogările în baza de date pentru a obține o viteză cât mai bună pentru utilizatori. Mi-a recomandat cartea Code Complete pe care m-am grăbit să o descarc și am citit-o cu mare interes.

Cu Ionuț am început să lucrez tot în 2011. El avea un stil diferit. Fiind implicat în mai multe proiecte și activități își gestiona timpul într-un mod foarte eficient așa că majoritatea conversațiilor le purtam pe email. Realiza analize foarte riguroase asupra codului pe care îl scriam și era foarte ferm cu modificările pe care le cerea. Stilul direct combinat cu cel directiv îl făcea să pară rece și de multe ori provoca frustrare celor cu care interacționa. Am reușit să depășesc acest mod de comunicare și să văd experiența ca pe una de învățare. Și cu adevărat am avut multe de învățat, iar atunci când am scris cod bun nu a ezitat să mă felicite atât privat cât și public printr-un email către conducere. Pe măsură ce am lucrat mai mult împreună și am început să mergem împreună la client aveam conversații foarte interesante despre principii de arhitectură și design patterns. De la el am primit recomandarea să citesc Head First Design Patterns și Design Patterns: Elements of Reusable Object-Oriented Software.

La rândul meu urmăresc să transmit mai departe ce am învățat când am văzut că există dorință și deschidere pentru a obține rezultate. Am petrecut niște sâmbete frumoase la birou împreună cu George ȚUȚUIANU să facem o analiză despre evoluția codului pe un an de zile pe proiectul în care eram implicați și am observat trendul ascendent al evoluției indicatorilor. Ne-am ambiționat și l-am făcut să scadă chiar dacă lucram la o integrare complexă cu presiunea deadline-ului imediat după sărbătorile de iarnă. Asta pentru că dacă îți dorești cu adevărat se poate.

calitate

Acum PHP Mess Detector e integrat în majoritatea mediilor de dezvoltare și pentru Code Review există o grămadă de soluții care permit inspectarea codului și adăugarea cu ușurință de sugestii de îmbunătățire. Totuși cred că interesul și dorința de a scrie cod de calitate nu vine de la unelte sau reguli impuse. Vine din setea de cunoaștere, dorința de a învăța și din interacțiunea cu oameni care sunt un exemplu prin orientarea lor către calitate.

Scriț cod frumos! Se merită!

Dezvoltarea primului produs software – minimul utilizabil

Am povestit în postarea anterioară despre cum am început ca angajat într-o companie de software și contextul în care am ajuns să dezvolt primul produs software.

Compania se numește PIT Software și dezvoltă soluții pentru industria Ho.Re.Ca. La momentul respectiv produsul principal era Pitos® POS o soluție desktop dedicată restaurantelor. Extinderea portofoliului cu un client important a venit cu necesitatea de a dezvolta cât mai repede o soluție pentru a gestiona comenzile la domiciliu.

Timpul era foarte limitat și pentru a câștiga contractul era important să ne mișcăm rapid. Am avut la dispoziție aproximativ 3 săptămâni pentru a veni cu o variantă funcțională. Opțiunile erau să dezvoltăm un modul nou în soluția existentă sau să dezvoltăm un nou produs. Fiindcă era vorba de o aplicație complexă cu o durată lungă de învățare și ne având cunoștințele necesare pentru a o extinde am ales varianta de a porni cu noua aplicație de la zero.

De vreme ce resursele erau limitate cea mai importantă parte a fost să definim un minim utilizabil. În literatură și în practică de cele mai multe ori acest lucru se referă la a defini un MVP (https://en.wikipedia.org/wiki/Minimum_viable_product). Desigur că la momentul respectiv nu aveam habar de această terminologie. Știam doar că trebuie să lucrăm cât mai repede pentru a oferi o soluție.

Experiența proprie în dezvoltarea de produse software – începutul

Mi-am început cariera de programator web ca angajat în August 2007 când m-am angajat la PIT Software companie ce dezvoltă soluții pentru Ho.Re.Ca

Dezvoltasem deja un portofoliu de proiecte proprii folosind tehnologiile web (HTML, CSS, PHP, MySQL și JavaScript) așa că am devenit productiv încă din prima zi de muncă.

Așa tare m-am entuziasmat de oportunitate încât m-am dus acasă, mi-am luat unitatea centrala și am început să lucrez la primul program pentru ei. Aveau nevoie urgent să deblocheze un proiect pentru un client foarte important care avea un lanț de cafenele și restaurante în Buzău. Din portofoliu lipsea o aplicație pentru gestionarea comenzilor cu livrare la domiciliu. Am schițat câteva idei împreună cu Adrian Poenaru și Ovidiu Roșu și m-am apucat de treabă. După prima zi de muncă aveam o interfață în HTML. După 3 săptămâni am făcut prima instalare de Pitos Delivery.

Situația în 2007 se prezenta astfel

  • dezvoltarea se concentra pe aplicațiile desktop
  • foarte puține locații aveau conexiune la internet
  • PHP trecea de la versiunea 4 la versiunea 5

Limitările de la momentul respectiv și natura aplicației ce presupunea comunicarea cu casa de marcat și imprimantele m-au forțat să am o abordare hibridă desktop/web. Am optat pentru a înstala pe calculatorul respectiv un server web care rula aplicația scrisă în PHP și am dezvoltat o interfață în C# care se folosea de componenta de browser pentru a randa paginile. Asta a dus la o restricție de a folosi exclusiv Internet Explorer 7 ca navigator web. Mozilla era mult mai capabil la momentul respectiv decât IE7, dar dat fiind limitarea am dus chinuri groaznice să adaptez anumite comportamente diferite pe cele două browsere.

Web-ul se bazează pe operații de Request și Response între client și server. Încărcarea conținutului unui website se face prin navigarea pe link-uri. Fiind vorba de o aplicație a trebuit să ofer o experiență cât mai fluidă de utilizare care se obținea cu greu dacă aș fi folosit refresh la fiecare acțiune. Pentru a depăși aceatstă problemă m-am orientat către request-uri asincrone folosind JavaScript (AJAX). Așa s-a născut prima mea aplicație web. Ceea ce se numește în prezent Single Page Application (SPA). Deci mare hipstereală din partea mea la vremea respectivă. Am făcut SPA-uri înainte să fie cool 😉

Cu toate limitările setup-ul mi-a permis să obțin o productivitate încredibilă în comparație cu ceilalți colegi care dezvoltau aplicații desktop. Flexibilitatea limbajului HTML îmi permitea să adaptez foare ușor înterfețele. PHP lucrează foarte bine cu MySQL și structurile de date le gestionam ușor folosind array-uri (vectori). Pe lângă asta a contribuit și faptului că eram sunt un workaholic.