Ce ar trebui predat studentilor

Deschid un subiect important despre ce nu se preda in facultate si se invata doar in productie.

Am cativa studenti in practica pe care vreau sa ii duc pe repede-inainte spre cariera de programator. Pentru asta am facut o lista cu subiecte din care sa alegem ce sa le predam. Dau lista mai jost si sper sa contribuiti cu “ce v-ar fi placut sa stiti cand ati terminat facultatea”

  • Salvarea configurarilor unei aplicatii: xml, json, yaml, ENV
  • Regex
  • Git repos si github pages
  • LAMP install
  • Agile programming: Scrum & Kanban
  • CSS
  • Bootstrap
  • SQL Relational
  • NoSQL databases
  • API
  • CMS fundamentals
  • Time management
  • Scheletul unui proiect de licenta
  • Cum sa cauti eficient pe Google
  • Pastrarea motivatiei
  • Scheme logice si pseudocod
  • OOP Design patterns
  • Authentication and Authorization, RBAC
  • Bundling tools (Wepack, Gulp)
  • WebComponents
  • Reactive programming
  • Isomorphic JavaScript
  • Test driven development
  • Mvc & servicii
  • Cum se scrie si se organizeaza codul
  • Cum functioneaza Internetul
3 Likes

Salut,

Sunt faine subiectele si ar trebui abordate in functie de nivelul celor care vor veni. Daca persoana respectiva nu a pus mana pe un terminal, cred ca cu aia ar trebui sa incepi :slight_smile:
Daca au facut un site in php(chiar obiect orientat) care se conecteaza la o baze de data si face CRUD-uri simple, poti trece la subiecte mai avansate cum ar fi structura, in mare a aplicatiei, principii SOLID, API etc.

Lista de subiecte este destul de consistenta si cred ca ar fi bine sa ai si o discutie cu viitori colegi :slight_smile:

Un lucru pe care ar trebui sa il iei in cosiderare este ce vor sa faca la sfarsit. Unii o sa vrea backend, altii frontend sau alt ceva sau pe ambele.

Mai adaug si aceste doua puncte valabile pentru toata lumea:

  • cum sa invete si sa se organizeze
  • cum sa caute pe net

In 2015 internship-ul meu a fost orientat pe invatare si am inceput cu tehnologiile care se foloseau in proiect. A durat cam 2 luni si ceva si la final am facut, impreuna cu colegii o aplicatie in care am pus cap la cap cele invatate.

In 2019 am avut 2 persoane la practica si au fost expusi la task-uri reale. Nu erau nici cele mai usoare, dar nici cele mai dificile. Sigur, li s-au prezentat cum comunica diferite componente in aplicatie, ce este un repository etc.


Si ca o paranteza, Cosmin(care era in anul 3 la Automatica si Calculatoare si a pus mana pe C# si putin asp.net mvc) din 2015 ar fi vrut sa stie cate ceva despre:

  • Git
  • API
  • SQL
  • Design patterns
  • Cum sa caute pe Google
  • Cum sa puna o intrebare buna pe StackOverflow :grin:
  • Cum sa invat
  • Organizare de cod
  • Basic testing
  • MVC
  • eventual regex :stuck_out_tongue:
1 Like

Subscriu la treaba cu time management, dar nu știu sigur cum ai putea sa predai asta și să și rămână lumea cu ceva. Eu am dat ++ la skillul de time management încercând diverse chestii, mai mult din experiența am învățat.

eu si acum am o provocare reala in “continuous delivery”.
mi se pare o adevarata arta sa poti duce in productie modificarile pe care le faci si in acelasi timp sa nu strici chestii, fara sa mai zic de roll back sau alte chestii.

bine, poate tine si de mine… care am inceput pe vremea in care era ok / normal sa "operezi un site / aplicatie direct live :slight_smile:

Stai sa vezi ce fain e cand nu-ti spun ca-l pun in productie, tu crezi ca esti inca in faza de development… si afli ca e in productie cand se plang ca s-a stricat ceva (cu ceva ce inca n-ai prevazut - conectarea la un server cu niste date, deconectare, ‘conectare’ la un server inexistent, apoi conectare la unul real, dar altul decat primul, cu alte date).

1 Like

in facultate trebuie sa te invete concepte. chestii abstracte. in facultate trebuie sa te invete cum sa gandesti, nu ce sa gandesti. dupa aia aplici ce ai invatat. daca simti ca ai nevoie sa te invete cum sa cauti pe google sau cum sa pui in picioare un amarat de apache schimba naibii domeniul.

3 Likes

in facultate au existat mereu si laboratoare sau alt fel de locuri pentru a invata chestii practice.
si e bine ca dincolo de concept te invata si cum sa il aplici in practica pentru ca la job ai nevoie sa livrezi chestii foarte practice, nu concepte.
da, putem discuta despre punctul de echilibru dintre teorie si practica… dar chiar nu cred ca discutia ar trebui sa fie despre utilitatea practicii.

1 Like

Atentie, nu confunda intrebarea cu “ce ar trebui sa invete in facultate”. Pur si simplu ce ar trebui sa invete in firma, cat mai repede, ca sa fie “programator complet”.

1 Like

corect, n-am citit intrebarea cum trebuie.

In urma cu 5-6 luni eram ferm convins ca o facultate, de informatica in cazul asta, trebuie sa te invete concepte. Iar apoi omul sa stie cum sa invete pe cont propriu ca pe viitor sa ajunga sa fie productiv relativ repede.

Nu mai sunt de aceeasi parere. M-au contrazis cativa colegi proaspat absolventi de informatica, nu din Romania din pacate, care au rupt practica in ultimii ani si pot produce ceva palpabil din ziua 1.

Anyway, revenind la subiect, eu cred ca e ok lista din postarea initiala, doar ca as adauga structura acelei liste.

Adica as preda 1-2 aplicatii end-to-end folosind o parte din tehnologiile specificate initial. Bineinteles depinde si de timpul tau. Cat vrei sa aloci acestui training.

Dar as pune accent pe training end to end, de la business requirements si system design. Apoi definire de user stories, estimare efort. Apoi tot ce tine de UX. Apoi backend, baza de date, model de date, api-uri rest(nu te complica cu graphql sau grpc la nivelul asta, dar de avut in vedere pe viitor). Apoi unit & acceptance testing. Apoi punere in productie(CI/CD poate, dar nu Jenkins daca nu il folosesti) si load testing. De analizat ce latenta si throughput are aplicatia. Tracing de erori, elk stack, prometheus, grafana. Apoi containerizare si k8s.

Visez si eu…stiu…mai taie din ele…vezi care ar fi un minim necesar pentru tine dar cam asta as face eu. :slight_smile:

Later edit 1: Schema de mai sus o aplic si eu IRL, dar sunt la inceput asa ca rezultatele nu au relevanta statistica :grin:

Later edit 2: dupa ce e gata si pus in prod acel app, simuleaza si o cerinta business din aia ce implica o schimbare majora a modelului de date existent. De exemplu, ai users care pot face anumite actiuni. Adauga posibilitatea ca un user sa aibe mai multe “accounts”, si acele accounts sa poata face vechile actiuni din aplicatia ta in loc de users. Apoi pune-i sa isi faca code review intre ei si fa-le review “la review”. Sky is the limit.

2 Likes

As adauga doua chestii:

  • intelegerea business value. Cand eram la inceput cu programarea, cand auzeam ca vine o cerinta de la client, repede saream sa scriu cod. De multe ori insa se poate gasi o alta solutie, mai simpla. Des clientul zice ca vrea cum crede el ca ar trebui facut ceva, dar in realitate el vrea altceva. E super valoros sa stii cum sa afli ce e cu adevarat valoros.
  • “politica” - in sensul de cum se intampla lucrurile la birou, cum sa inveti care is regulile dupa care functioneaza lucrurile, ce trebuie sa faci ca sa fii promovat, sa primesti o crestere de salar sau sa faci o schimbare organizationala. Am patit-o de destule ori ca schimbari la nivelul managers manager (sau chiar inca un nivel) au avut impact asupra proiectului pe care lucram. Intr-un caz, a plecat din firma tipul care era marele proponent al proiectului, si peste 2 saptamani s-a anuntat ca proiectul devine deprecated.
1 Like

E o idee buna in principiu :+1:

Dar cred ca depinde mult si de cum anume se invata.
Daca e doar un curs nu prea are mare valoare. Intra pe o ureche, iese pe alta.
Majoritatea lucrurilor sugerate in mesajul original trebuie luate prin osmoza cat sunt embedduiti intr-un proiect. Altfel sunt destul de seci, si nu le vad utilitatea reala a lor.
O sa ramana cu ceva din asta, dar nu toata lista.

De ce? La “merge”, face build la imaginile de docker, si automat deploy pe staging. Testezi acolo si apoi deploy live. Pentru rollback se face foarte usor cu imagini de docker tag-uite(nu as mai lucra fara asa ceva)

cred ca depinde foarte tare si de proiect.
in teorie pare simplu, dar in practica lucrurile nu sunt mereu asa. mai ales cand vb de proiecte cu istorie.

1 Like

//offtopic
lucrez acum pe un proiect (cu istorie) unde devii s-au gandit ca ar fi o idee foarte buna sa lege mediul de dev de url (de fapt, niste cuvinte din url. nici macar segmente). si daca tot au facut asta ar fi ok puna path-ul catre winrar spre c:\program files… problema a aparut cand au avut nevoie sa schimbe url-ul si din intamplare noul url continea unul din cuvintele cheie pt dev.

Personal prefer o abordare in care studentii sa fie obligati sa lucreze la un proiect cap coada unde sa fie nevoiti sa foloseasca conceptele listate mai sus totul impartit pe mai multe etape.

Proiect - construirea unui cms minimalist (listare, detail view article), construit cu tehnologii folosite in companie

  1. Construire backend
  2. Refactorizare backend folosind nosql in loc de sql
  3. Implementare securitate in sistem folosind cea mai simpla forma de auth
  4. Reimplementare securitate folosind securitate mai avansata RBAC

Si grupezi din lista de mai sus conceptele in etape astfel incat sa poata fi asimilate cat mai usor.

Important

  • sa nu fie introduse intr-o etapa prea multe concepte noi, asta de obicei e problema
  • ca si perioada de timp etapele pot varia
  • important e sa se faca un ciclu de code review + refactoring in cadrul fiecarei etape, progresul se va discuta zilnic, nu doar la sfarsitul unei etape.
2 Likes

In facultate era o materie de un semestru (4-5 luni) in care 12 persoane trebuiau sa faca un proiect cap-coada.

Pentru mine a fost foarte edificator, desi atunci am dat cu mana prin aer in semn de “Nu e asa in realitate”:

  • 75% din timp l-am consumat sa atribuim responsabilitatile
  • 20% din timp l-am consumat sa atenuam conflictele (Eu nu vreau sa fac asta, eu stiu mai bine chestia astalalta, eu saptamana viitoare sunt plecat din oras)
  • 5% din timp am discutat despre aplicatie

Dupa cum va dati seama, asta a insemnat 100% din timp. Concret nu am facut nimic tot semestrul. Aplicatia a fost facuta de un coleg impreuna cu mine in seara dinaintea zilei predarii.

2 Likes

trainingul perfect pentru jobul de dupa :))
inlocuieste facultate cu oricare dintre cele o gramada de firme de programare (atentie, nu generalizez) si povestea ramane 100% adevarata.

Debugging

Google Searching