Sunt curios, din experienta voastra, care script sau aplicatie facuta de voi de la 0 vi sa parut cea mai complexa?
Personal, pana acum am crezut ca un forum si un shop (facute de la 0 cu facilitati similare cu produsele existente pe piata) sunt cele mai complexe, pana am inceput sa creez jocuri unde am observat ca aici complexitatea creste (+ cunostiintele de mate/fizica). Pentru mine, crearea de jocuri web based e o noua provocare
da, orice problema poate fi rezolvata intr-un fel sau altul, eu ma refeream la complexitate, cat de dificil ti sa parut in comparatie cu ce ai mai facut pana atunci.
prima oara cand am creat un forum, eram la inceput cu programarea, si datorita interogarilor complexe care trebuiau facute pe o pagina sa afisezi topicul + posturile + detaliile userilor si ce mai trebuie, la vremea respectiva mi se parea cel mai complex script facut de mine…
ulterior cand am inceput sa creez magazine virtuale pentru clienti si pe masura ce adaugam noi facilitati si api-uri cerute de clienti scriptul a crescut atat de mult ca pana recent, consideram ca e cel mai complex script facut de mine (cine lucreaza cu oscomerce si similare stie despre ce vb)
acum, de cand m-am bagat pe crearea de jocuri web baset, ma lovesc de chichite gen formule matematice, vectori, probleme de incompatibilitate sau de randare si alte chestii de gen si ca sa reusesc ceva bine facut scriptul devine asa de complex ca incep sa ma pierd prin el (desii nu e la fel de lung ca un shop de exemplu, cel putin in faza in care sunt eu acum)
deci, la tine care a fost cel mai complex cod facut de tine? dar cel care ti-a dat cele mai multe batai de cap?
Am inceput sa fac un server GTAV cu akka acum un an, dupa ce am scris toate functiile de baza si am inceput sa invat despre hitbox-uri, tick-uri, animatii (blend tree-uri), compensare lag, sistemul de actori, memory hacking si vectori, akka in .Net, programare functionala in Scala deja era cam mult si era clar ca n-aveai cum sa iti faci un server public cu rockstar. Cred ca inca as putea explica cum functioneaza Counter-Strike/Quake sau orice joc multiplayer de la A-Z.
La jocuri daca nu ai un limbaj de programare vizual te omori si cu quest-urile, devin rapid foarte complexe.
Nu ma prea ocup acum cu jocuri dar de exemplu un forum gen Discourse nu e usor de scris nici macar cu un framework care iti da mura in gura.
Cred ca depinde foarte mult si de echipa din care faci parte.
O chestie pe care a trebui sa o inteleg singura ca si model de business si sa mulez codul pe nevoile din piata, atunci pot nominaliza rescrierea imobiliare.ro din 2007-2008. Mi s-a parut cel mai greu sa fac asta.
Cel mai recent proiect complex, insa, e rescrierea siteului unei linii aeriene din US. Aici am lucrat cu un foarte bun prieten si ne-am putut schimba idei. Desi e mai complex domeniul, privind retrospectiv mi s-a parut mai usor din cauza colaborarii.
eu m-am referit la cod facut singur, de tine de la 0 nu in echipa.
apropo de imobiliare, a trebuit sa implementez api-ul lor la un client (o banca), legat de api-uri si documentatii nu am gasit decat la paypal documentatie ok pentru implementare, la restul a trebuit sa o iau uneori pe ghicite (stiu ca nu e vina ta, doar mi-am adus aminte)
mi-am batut ceva capul sa pot trimite prin api de pe site-ul clientului cereri (adaugare/stergere/modificare) catre imobiliare dar am reusit pana la urma (si dupa cateva discutii prin email cu ei)
cel mai aiurea mi sa parut la partea de localitati/orase… nu stiu cine a gandit aia dar nu mi sa parut deloc ok.
La imobiliare desi eram o echipa mica, eu am scris peste 75% din cod. Pt ca unii programatori sunt vedete si vorbesc in loc sa munceasca (in absolut toate locurile am intalnit cel putin unul de acest fel). Din fericire au trecut 8 ani si proportia s-a mai schimbat.
Eu m-am luptat din interior cu sistemul de localitati / zone, si tot nu am izbandit. Pur si simplu nu s-a inteles ca in alte parti ale tarii din afara Timisoarei exista cartiere, etc si ca oamenii cauta altfel. Ce sa mai vorbim de google-like search… Pur si simplu in viata trebuie alese bataliile pe care le porti, si eu pe asta am abandonat-o. Problema e ca nici concurenta nu a rezolvat asta mai bine.
Un tester de bandwidth in Javascript/Html/CSS care sa mearga pe telefoane Android cu versiunea 2.x. Era un tool intern prin care vedeam daca aveam probleme cu CDN-urile.
O aplicatie web CRUD complet dinamica: de la generarea meniului de entitati, la pagina de cautare cu filtre complexe, pana la formulare pentru introducerea datelor de orice fel (input-uri simple, relatii parinte, relatii copil a.k.a. sub-tabele si subview-uri formate din toate de mai sus). Practic a iesit un fel de CMS, desi domeniul era unul destul de reglementat.
Cu ocazia asta mi-am amintit de o materie dificila din facultate - limbaje de metamodelare si am realizat cat de mult se complica lucrurile cand urci un nivel de abstractizare. In terminologie OOP, e ca si cum ai defini notiunea de clasa.
Vad ca ati mentionat jocurile, asta ca dau si eu din casa
Lucrez la un engine mic de joc (si la jocul efectiv) in JavaScript, apoi portat pe TypeScript.
Cand m-am apucat initial de engine nu a fost complicat, am aruncat niste clase pe acolo.
Mai tarziu cand l-am refactorizat si am vrut sa-l fac bine - adica sa pot face jocuri pe el - mi-am dat seama ca nu e ceva trivial. Am intampinat probleme la: geometrie si matematica, game loop (concept nou pt mine atunci), tehnici de rendering, multiplayer, events, design patterns specifice jocurilor - multe dintre ele nefolosite de mine etc.
can m-am angajat prima oara ca programator, 6 luni am facut si eu ceva asemanator in cadrul acelei firme, stiu ce complexistate si batai de cap iti poate da asa ca te inteleg. Cel mai mult ma enerva cand terminam ceva, era functional, iar clientul isi schimba decizia si trebuia refacuta acea sectiune de la 0 dupa noile specificatii. Mi-am dat seama la un moment dat ca in felul asta fac munca de sisif, nu va iesii nimic ok din acel proiect daca il tot rescriu si modific dupa cum vrea clientul (clientul era o corporatie mare dar cu manageri tineri si fara experienta care nu stiau exact ce vor si abia dupa ce vedeau aplicatia isi dadeau seama ca stai ca nu e ok asa ci trebuie altfel si tot asa, nu ne-am gandit ca trebuie si aia asa ca refa si implementeaza…). Proiectul a avut gradul lui de dificultate dar cea mai mare frustrare a fost ca nu se stia de la inceput cum trebuie sa fie si trebuiau refacute parti intregi din ea odata la cateva luni…
exact peste astea ma lovesc si eu acum, asa ca te inteleg. Sunt curios de jocul final cand o sa il ai gata sa il dai la teste pe aici sa te putem felicita (sau critica )
La mine, abia invat notiunile de baza, nu am apucat sa fac ceva complicat, dar cine stie in viitor ce o sa iasa
M-am apucat sa imi facun repository pe github cu algoritmi de deep learning care implementeaza astfel de matematici dar pentru inceput sunt chestii destul de basic.
Cred că cel mai complex este cât se poate de relativ la experiența avută în acel moment.
Pentru mine, cea mai complexă chestie a fost acum vreo șase+ ani, când trebuia să fac o aplicație folosind Sencha Touch. Privind în urmă, nu mai pare dificil, dar atunci a fost al dracului de greu: ciuciu experiență, ciuciu documentație…
O să pară ciudat, dar mie îmi place să lucrez pe legacy. Mă rog, dacă ce era legacy este scris câtuși de puțin decent…
Este foarte greu sa raspunzi la intrebarea originala deoarece:
Cand lucrezi singur, nu faci chestii foarte complexe. Lucrezi la proiecte relativ mici, si relativ clare.
Cand lucrurile se complica, natural mai angajezi ajutori, sau esti angajat intr-un proiect ori echipa.
Complexitatea depinde de experienta fiecaruia
Asa ca voi raspunde din mai multe perspective:
Cel mai complex proiect facut singur de la zero a fost lucrarea mea de masterat. Mai precis analiza imaginilor medicale (CT/RMN) prin procesare paralela pe Cuda (Nvidia). Pe scurt, analizam imagini pentru a detecta anumite neregularitati ce pot indica o tumoare sau alte boli. Totul a fost realizat din punct de vedere technic prin procesare paralela pe core-uri Cuda de la Nvidia.
Cel mai complex proiect la care am lucrat de la zero in echipa: Syneto Storage OS. Un system de operare si aplicatie de manament al echipamentelor de stocare date enterprise. Asta inseamna kernel, management software, web UI, build-system, package management ca si componente. Iar ca si provocari de coding inseamna arhitectura de la zero, TDD, code design, agile environment and practices.
Cel mai complex feature: Implementare de High Availability intre mai multe echipamente mentionate la punctul 3. Mersi Syneto pentru oportunitatea de alucra pe un proiect atat de complex.
Cea mai complexa provocare pe termen lung insa este unul surprinzator: people management. Am constatat ca e simplu cu calculatorul. Ii zici sa faca ceva, si face, ori da eroare. Cu oamenii este cu totul diferit. Cu o echipa de developeri de diverse varste si experienta este o provocare si mai mare.