30th Jan 2008

Informatica in facultati

Facultatea este facuta ca sa te pregateasca de lumea reala, de conditiile de munca din industrie, dar de cele mai multe ori isi rateaza obiectivele.

Dar ceea ce nu prea te pregateste facultatea sunt:

1. Munca in echipa

Majoritatea facultatilor desemneaza proiecte in echipe in anul 2 deobicei dar nu in timpul facultatii ci acasa. Adica ti se da o tema si iti alegi colegii cu care vrei sa lucrezi si faceti asta in privat. Nu te verifica nimeni, nu stie nimeni sigur cat a facut fiecare si de ce. De aceea sunt cativa care prefera sa faca grosul pentru toata echipa si astfel nu se castiga experienta din munca in echipa.

Nu se invata sa se citeasca si sa se utilizeze codul altora si nu se invata coordonarea. In ciuda acestui fapt multi trec pe cv ca sunt buni coechipieri.

Solutie propusa: Sa se formeze echipe de cate 2 studenti ca sa fie cat mai multe echipe. Se va face schema de lucru pentru un soft si apoi se vor delega sarcinile. Aceeasi sarcina sa fie facuta de cate 2 sau 3 echipe, separat; fiecare echipa va crea sarcina independent ce celelalte echipe. Dupa ce acestea au fost facute sa se trimita ce a lucrat fiecare echipa la alta echipa care va implementa ce a lucrat cu ce a primit de la cealalta echipa. Lucrul acesta sa se faca aleator, si daca se poate, echipele sa nu comunice intre ele, avand la dispozitie doar documentatia pentru subprogramul/clasa/libraria primita.

2. UI

Interfata grafica este ceea ce atrage utilizatorul si ceea ce face programul mai usor sau mai greu de utilizat. Ar trebui sa se predea in facultati despre importanta interfetelor grafice si niste concepte importante despre intefete. Desigur, un programator nu ar trebui sa se omoare sa gaseasca el interfata grafica propriu-zisa ci inginerul software, iar cu asta se lauda facultatile ca “produc”: ingineri software.

Solutie propusa: O materie noua introdusa despre interfete grafice si utilizabilitate. Ca test se va da o cerinta in care sa se gandeasca o interfata grafica cat mai intuitiva/usor de utilizat pentru un anumit soft.

3. Source control

Tot ca parte importanta cand lucrezi in echipa o are si source control-ul. Este aplicatia care tine evidenta codului scris, modificat cand, la ce ora si de catre cine. Este foarte important acest lucru fiindca ajuta la depistarea bugurilor si poti aduce un fisier la versiune anterioara chiar daca ai uitat ce modificari ai facut.

Solutie propusa: Ar trebui sa se creeze un curs despre inginerie software in care sa se predea despre aceste concepte si sa invete sa utilizeze programe de source control precum svn.

Nota: Nici eu nu am folosit vreodata source control si presupun ca nu voi invata acest lucru la facultate.

4. Deployment

Invatam sa programam si sa compilam dar cum publicam ce am lucrat? Da, poti sa arhivezi si sa urci pe un site si sa pui la downloadat dar cat de atractiva este optiunea asta?

Ar trebui sa se predea despre crearea unui installer pentru aplicatie, despre salvarea si reutilizarea setarilor, despre user space si program space, despre versiuni si updatare automata. Daca folositi Visual Studio atunci lucrurile acestea sunt foarte usor de utilizat si creat. In Delphi nu stiu cum sta treaba. Dar pentru java? Multi colegi ma intrebau cum se creeaza un executabil (sau de ce nu are executabil) sau daca merge aplicatia creata in java pe orice calculator.

Solutia propusa: In cadrul aceluiasi curs propus mai sus sa se predea si despre cum se creeaza un installer, cum se foloseste registry-ul, unde ar trebui salvate datele folosite de program (setari de ex.) si unde ar trebui salvate datele prelucrate de utilizator, cum se face un updater automatic, etc.

Acestea sunt unele din problemele despre care nu inveti in facultati dar care te vei lovi mai mult ca sigur cand vei lucra pentru o firma adevarata de software.

Inspirat din articolul How Should We Teach Computer Science? al lui Jeff Atwood, Coding Horror.

3 Responses to “Informatica in facultati”

  1. Sorcerer Says:

    Punctul despre source control este deja de domeniul SF-ului, inseamna deja planificare adevarata… Nu m-am gandit vreodata ca ar putea exista asa ceva, daramite sa ai un fel de log cu modificarile. Windows-ul a castigat batalia OS-urilor in momentul cand a avut interfata utilizator de genul “UI for Dummies”, ceea ce este de fapt Windows-ul. Sigur, se poate spune ca si Apple sau Linus are interfata utilizator, dar nici una nu a fost atat de bine “marketizata”. Cea mai importanta parte, cea cu deployment-ul, cum ai numit-o tu, am aflat-o de la un coleg de liceu care mi-a dat cu mult timp in urma primul program de tip installer. Mai am si acum prin compul asta nou un proiect salvat atunci. Sa stii ca Delphi vine cu propriul program de acest tip, eu l-am folosit de cateva ori si e destul de bun. Orice kit de Delphi are in el asa ceva. La munca in echipa intram in alt domeniu, pentru ca toti (hai sa spun majoritatea) vor sa fie buni coechipieri, dar daca te pot fura, o fac fara sa clipeasca. Tu sa incerci sa pui in practica punctul 3 :P.

  2. Cristian Ciofu Says:

    curs de inginerie software exista, dar nu te invata de SVN sau altele asemanatoare.

    pana sa muncesc intr-o firma de web-development nu stiam de conceptul SVN - stiam de existenta lui, dar nu stiam cum exact se foloseste. nici acum nu pot spune cu exactitate ca stiu perfect ce si cum, dar macar stiu care e conceptul de baza acum [l-am folosit foarte putin].

    SVN-ul se foloseste in special in cazurile cand lucreaza mai multi la un proiect si nu vrei sa-ti distruga colegul munca de ieri… merge folosit si individual, desigur :)

    referitor la Deployment - legat de JAVA - o solutie de “transport” exista din cate am inteles, o solutie care iti face o structura ce contine JAR-ul + ceva fisiere care sa ajute la deschiderea si procesarea sa.

    oricum - jar-ul rulat fara JVM [parca asa ii zicea :D] nu merge… e dependent, nu indepentent…

    UI-ul il faci in facultate [eU l-am facut in anul 4], dar faci chestiile de baza. mai mult comparatii bazate pe studiu de caz de genul - asta e OK - asta NU…

    munca in echipa daca vrei o inveti in facultate. asta nu au cum sa te invete ei. nu te pot obliga :)

    se dau proiecte, se pot face in grup daca ii ceri profesorului [ma rog - conditia ar fi sa fie si ceva mai complicat odata ce faci treaba in echipa...]

    in fine - ar fi multe de zis, dar din pacate niciodata nu vom face in scoala ceea ce dorim noi :)

  3. Bogdan Says:

    La Infoiasi se face ceva de UI: http://www.infoiasi.ro/bin/Programs/CS3209O1_06

    Cat despre lucru efectiv in echipa si cu SVN … deocamdata singura modalitate de invatare ar fi implicarea in proiecte Open Source

Leave a Reply