Simple FileSystem

Vă mai amintiți de ‘concursul ochilor vineți’? Pentru prima oară în ceva vreme mi-am făcut timp ca să termin un proiect pe care l-am pornit acum un an și jumătate – chiar înainte ca eu să încep să nu mai am deloc vreme.

Proiectul respectiv era proiectul pe care îl propusesem studenților – iar pariul a fost să îl pot face cu tot cu concepție, implementare și testare: un sistem de fișere care să emuleze modul de citire ‘în bloc’ de pe disk.

Așteptările mele erau să se poată introduce fișiere, să se poată crea subdirectoare și să se poată adăuga un set de fișiere. Ideea era să înțeleagă studentul teoria sistemelor de operare – ce e ăla un sistem de fișiere, cu ce se mănîncă, și cum funcționează prin interior.

Abia azi și ieri am apucat să revitalizez proiectul. Avînd în vedere că nu mai făcusem nimic la proiect de cam un an și jumătate și pentru că în cele din urmă am schimbat cam 95% din codul pe care îl scrisesem atunci, pot considera că nu am avut decît un avans minimal – să zicem o oră.

Am ajuns cu proiectul într-un stadiu ‘utilizabil’ de la care se poate construi. Timp de lucru: 24 de ore. Timp de lucru efectiv? Ehm… undeva pe la 14 ore, chiar mai puțin. Și asta în ideea că nu aveam nici o schiță de lucru, doar laptopul în față și nimic altceva (nici niște amărîte de scheme nu am apucat să-mi fac, deci totul a fost scris ‘pe chior’, fără nici un material ajutător).

Note asupra distribuției muncii:

  1. Prima încercare de a realiza proiectul (2007) a eșuat. De ce? Nu mai știu unde m-am încurcat – sau ce a intervenit de nu am mai putut să fac acest proiect. 95% din ce am scris atunci era naiv și defectuos – dar ar fi ok avînd în vedere că atunci nu am muncit mai mult de 4 ore timp efectiv
  2. O mare problemă a fost pentru mine împiedicatul în opțiuni. Totul a mers mult mai repede în momentul în care mi-am spus: „Ok, hai să încercăm variantele ca să știm care e mai bună”. Lecție de învățat? NIMIC nu se compară cu experiența venită din experimentarea propriu zisă, în loc de teoretizare.
  3. 60% din timpul de lucru l-am petrecut nu scriind cod, ci făcînd debugging. Sunt sigur că același lucru îl pățesc și studenții. Timpul s-ar fi putut scurta dacă aș fi lucrat un pic mai organizat – dar am preferat să iau problema în mînă studențește – adică dezorganizat, aproape fără structură (deși am experimentat un pic pe-acolo cu d pointers). Nu au fost însă probleme irezolvabile – dovadă că intuiția mi-a funcționat cît de cît.
  4. cam 20% din timpul de coding l-am petrecut făcînd refactoring (dacă aș fi pregătit mai bine proiectul înainte să mă apuc de el ar fi fost mai simplu).
  5. tot vreo 20% din timpul de coding mi l-am petrecut jucîndu-mă cu git și git-hub

Obiectivul meu a fost să fac proiectul ăsta la limita acceptabilului de studenție. Am făcut scheletul sistemului de fișiere și două programe ajutătoare – un ‘creator’ de astfel de sisteme de fișiere și un program care copiază un fișier din și în arhivă. Se compilează folosind qmake&&make. De continuat nu știu dacă o să-l continui – pe măsură ce îl construiam am observat cîteva optimizări foarte frumoase pe care poate ar merita să le încerc… dar nu mi-e clar dacă ajută pe cineva.

Concluzia? Proiectul pe care l-am propus se face în, hai să nu zic o zi, cum l-am făcut eu, dar o săptămînă sigur. Pentru 14 săptămîni studenții nu mai au nici o scuză. Piedica principală în realizarea proiectului nu este DELOC dificultatea implementării (deși pe alocuri pare a magie codul scris și necomentat de mine). Piedica principală e faptul că studenții se opresc la un nivel incipient, fără să atace problemele – NU se încearcă deloc, ci doar se contemplează tema și se dă verdictul facil: „e prea greu pentru mine”. Nu tema e dificilă, maniera de abordare este însă vitală.

Poftă, și dacă apucați să vedeți sursele să-mi aruncați un pic de feedback.