Inainte de toate, recunosc ca unele asemanari sunt fortate : berea si laptele au in comun faptul ca-s lichide. ha ha ha, ce comparatie tare ….
In post-ul “Dota.Limbaje de programare.Comparatie” (link http://dlsana.wordpress.com/2009/03/14/dota-limbaje-de-programare-comparatie/ ) am spus ca voi continua sa scriu despre cele doua lumi aparent diferite, dar care au si foarte multe lucruri in comun.
Inainte de a trece la treaba, vreau sa spun ca e posibil sa fi jignit anumite limbaje de programare, insa am fost constrans si de trastaturile eroilor din dota. Sa dau si un exemplu, Razvan a spus ca am subevaluat python-ul zicand ca leaga module si ca ar fi Warlock. Intr-adevar, exista aplicatii misto scrise in python, cum exista si battle Warlock (power threads, stygian si refresher), insa sunt si alti carry mai buni, parerea mea.
Pana sa trec la lucruri “palpabile”, incerc sa discut putin la nivel superficial. Consider ca este mai usor de citit o paralela cu liniute :
- Dota este un invelis al Warcraft 3-ului; programarea este un invelis al hardware-ului. Nu sunt entitati independente de context.
- Jucatorii de dota se numesc “gamers“; utilizatorii limbajelor de programare se numesc “programmers”. Exista o ierarhie a “participantilor”; in dota : noob pana la gosu/pro, iar in programare (cred, nu sunt sigur) : programator junior pana la software architect. Exista jucatori buni de warcraft si de dota, dupa cum exista si programatori buni care stiu si software si hardware ( nici chiar pana la Ebers Moll sau Giacoletto ). Din fericire, cei mai buni sunt cei mai buni doar intr-un domeniu
.
- Cand X ( X > 1) pro gameri sau X programmeri (asemanator, nu?) vorbesc despre lumea lor nimeni din exterior nu ii intelege. Tot aici intra si diversele glume : a fulgerat afara deci a dat Zeus ultimata; tipul accidentat de masina a primit un SIGKILL si tot n-a murit ?!?!
- Exista “companii” mari care fac lucruri spectaculoase. Google, Microsoft etc, pe de o parte, si Ks.Int, MYM, VP, SAY_PLZ etc, pe de o alta. Desi, din ce-am observat, desi la noi, in anunturile de angajare, se insista pe experienta ( trebuie sa ai 20 de ani de programare in spate sa fi software architect ), in dota lucrurile nu stau deloc asa. Exista clanuri foarte bune cu jucatori nu foarte experimentati, dar cu o imaginatie bogata; nu de putine ori clanuri foarte cunoscute au luat bataie de la adversari necunoscuti – cel mai celebru caz ar fi VP, cea mai buna echipa la momentul respectiv, a luat bataie de la niste amatori si jucatorii vroiau sa se desparta (la moralul lui ARS-ART cred c-am avut si eu cu nein o contributie importanta, cu saptamani in urma, cand l-am ars _mai rau ca la politie_ pe high level room 1). Echivalentul echipei necunoscute in lumea programarii este firma startup; sunt dese situatiile in care afaceri mici se vand pe bani buni gigantilor – jucatorii buni de dota din echipe necunoscute ajung in echipe mari.
- Noobii ii intreaba pe pro ce item-uri sa-si faca pe un erou; programatorul junior il intreaba pe software architect ce framework sa foloseasca pentru a rezolva o anumita problema intr-un limbaj de programare dat. Pornind de la aceasta afirmatie o sa dezvolt, in partea a doua, acest post.
- Preconceptia este la mama ei acasa; daca incerci un item diferit de cele standard pe un erou atunci esti considerat noob, retardat etc; voi ce parere aveti de incercarea utilizarii a unei biblioteci scrisa in Python (sa zicem ca e cod intermediar, nu e compilata in nativ cu pypy) intr-o aplicatie scrisa in Java ? (eu as rade, dar n-as zice ca e o prostie, desi multi zic ca pe Lina n-ai de ce sa-ti faci buriza
). Ce-i scris in java tre sa se fie interfatat cu altceva scris in java, ca doar asa e standard.
- Organizarea echipelor este asemanatoare : team leader programmer / captain, developer / carry, tester / support. La nivelul superior se afla un project manager.
- Sunt fenomene de masa; sunt foarte multi programatori si foarte multi jucatori de dota. Din fericire, nu sunt multi foarte buni
. Pentru a fi bun in dota trebuie sa cunosti : substratul (warcraft 3 pentru coordonare, lupte cu eroi, farm etc), stratul (eroii, in pricipiu cam ce face fiecare erou si la ce e bun) si suprastratul (itemurile, ce face fiecare item, pe ce erou si in ce moment al jocului se mapeaza mai bine etc). Substratul in cazul programatorilor este hardware-ul; e ok sa programezi, cu 0 notiuni de hardware, pe o platforma care vine cu un compilator smecherit, dar ce te faci cand nu stie sa faca nici macar loop fusion ? Stratul reprezinta modelarea, dupa parerea mea in pseudocod, a structurii programelor; trebuie sa stii cu ce limbaj cam ce poti face (sa nu crezi ca poti face site-uri in C si kernel-uri in PHP). Suprastratul este reprezentat de framework-urile care fac utilizabile anumite limbaje de programare; ce e Java fara tonele de librarii din spate ? ce poate face N’aix fara item-uri ?
- Alte lucruri pe care le aveam in minte dar le-am uitat.
Scriu despre acest subiect pentru ca-mi plac cele doua lumi; sunt competitive. Te lupti cu adversarii, evoluezi. Chiar daca nu esti cel mai bun sau in varful piramidei sentimentul de apartenenta e placut. Imi place sa cred ca atat in dota cat si in programare nu exista o singura reteta de succes si ca totul e intr-o continua schimbare, iar la fiecare moment trebuie sa alegi combinatiile cu trades-off-ul cel mai bun pentru tine ( intr-o vreme se juca Sniper cu Divine Rapier, cum se programa in C++ cu MFC; lucrurile s-au mai schimbat intre timp ).
Lista framework-urilor cu care am lucrat :
1. STL este in standardul de C++, cum si Dagger-ul este un item standard de Slayer. Ambele iti permit saritura peste anumite chestii : STL peste structuri de date si algoritmi uzuali, Daggerul peste spatiu. Se poate juca Slayer si fara Dagger cum se poate programa in C++ si fara STL.
2. Qt este o biblioteca moderna, foarte misto, de GUI Toolkit scrisa in C++. Este o alternativa la GTK si MFC, despre care nu stiu mare lucru asa ca nu-mi dau cu parerea. Scopul este sa impresioneze utilizatorul prin widget-uri misto. Item-ul echivalent este Divine Rapier, care iti da mult damage in plus; scopul fiind acela de a macelari adversarii si a-i impresiona pe cei ce te urmaresc
.
3. Eclipse API este un framework, scris in Java, pus la dispozitie de IDE-ul Eclipse. Radiaza de frumusete, fiind scris foarte misto si avand un GUI foarte dragut, este apreciat atat de programatori cat si de utilizatori. Item-ul echivalent este Radiance, acesta facand damage adversarilor si crescand sansele eroului sa faca bahaos ( ce vor amatorii sa vada
). Problema lor e cantitatea mare de resurse consumata : Eclipse mananca memorie cu sutele de mega, iar Radiance se face dintr-un item foarte scump, care iti ofera doar damage.
4. pthread este standardul POSIX pentru thread-uri si implementarea este la nivelul kernelului in C. Kernelul unei echipe de dota este erou de baza din early game, Lina in cazul nostru. Item-ul care ofera Linei posibilitatea procesarii paralele este Necronomicon – se spawneaza doi creepy, cu vraji, destul de puternici pe care trebuie sa-i controlezi. Pentru sisteme singlecore paralelismul e pseudoparalelism, cum si pentru jucatorii slabi de dota utilizarea necronomiconului este greoaie – abia ma descurc cu un erou, vrei sa mai controlez si doi creepy ?!?! pana dau click pe ei imi scapa adversarul; insa in meciurile competitive necronomiconurile pot face diferenta, damage-ul facut fiind comparabil cu cel al unui erou de suport.
5. openMP simplifica lucrul cu mai multe fire de executie si are extensii pentru C, C++, Fortran si altele. Manta Style permite crearea a doua iluzii ( a trecut ceva vreme de cand nu m-am mai jucat, sper sa nu se fi schimbat ) si se foloseste pe multi eroi. Manta e mai usor de folosit decat necronomicon pentru ca iluziile nu au vraji.
6. openMPI este folosit pentru programarea distribuita, insa mi se pare ca se mapeaza bine pe masini/probleme de timpul SIMD (Single Instruction Multiple Data). Mekasm este un item SCMU (Single Cast Multiple Units) pentru ca face heal pe arie si se casteaza atunci cand sunt multi eroi/creepy in jurul tau.
7. openGL este un framework este satisfacerea poftelor umane in materie de grafica. Majoritatea oamenilor care se uita la un replay de la dota vor sa faca “senzatie”, ceva spectaculos. Buriza ofera eroilor aceasta sansa, crescand damage-ul considerabil si putand duce usor la “Triple KILL!!!” si la “Holy SHIT !!! Beyond GODLIKE”. Din ce stiu, openGL poate fi interfatat cu aplicatii scrise in diverse limbaje de programare, cum si Buriza se poate folosi pe mai multi eroi carry.
8. BSD sockets permite trimiterea/primirea mesajelor pe retea. Boots Of Travel permite unui erou teleportarea in diverse locuri pe harta, cu conditia sa fie un creepy aliat in locul respectiv. Aceeasi conditie o pune si BSD sockets : existenta unui receptor care sa faca recv() la send()-ul unui proces.
9. .NET 3.0 e sub protectia celor de la Microsoft cum si un erou cu Linken’s Sphere e protezat de vrajile adversarilor. Framework-ul poate fi folosit atat in aplicatii C++ cand si C#. Asemanator, Puck(C#) si Lina(C++) sunt eroi pe care Linken’s Sphere e ceva obisnuit, mai mult pe Puck insa.
10. boost este cea mai mare biblioteca de C++ si va intra in standardul C++0x (de fapt, C++1x
). Soul booster este un item ce va intra in lista de item-uri standard pe Lina ( nu garantez
). Au in comun dimensiunea mare (un proiect ce foloseste boost sare de 10 Mega, un erou ce are soul booster sare de 1500 viata) si flexibilitatea ridicata : boost are multe extensii (MPL – meta programming language rullz,iar Boost::asio ar trebui studiat la facultate, ca model de how to wrap I/O functions), iar din soul booster se poate face Aghanim’s Scepter sau Blood Stone.
11. JFC (Java Foundation Class Libraries) este frameworkul de baza al lui Java. Diffusal blade este item-ul de baza pe Mirana, in meciuri competitive. Ambele incetinesc entitati : JFC – program, Diffusal blade – adversar. Pana la urma, toate-s bune si frumoase, nu ? Reusesc sa-mi termin adversarul cat si proiectul Java.
12. Swing este GUI toolkit destul de slabut, dupa parerea mea. Mjolnir este un item inefectiv pe Mirana. Le leaga gradul mare de utilizare.
13. Nu am folosit alt framework ori nu-mi aduc aminte de el
.