De ce nu sunt eu programator
Ca orice baiat cu cablul, stiu putina programare. Ca asta-i lumea din ziua de azi – nu mai poti fara sa stii macar un pic. Nu-s vreun genial sau ceva. Stiu cate putin din diverse epoci, de la basic-s la asm, python, perl, juma’ de un pic de go si chiar si un pic de php. Stiu ca nu-i mare lucru, da’ nu o spun pentru a ma lauda.
Chestia e ca imi place cand pot scrie un mic program care sa faca o chestie frumoasa. Sau sa faca o chestie urata mai rapid.
Din cand in cand mai bag ochii in cate un tutorial de programare. Asa, de lucrat dupa exemplu, cum ar veni. Mai scriu o chestie, mai testez, mai nu merge, mai corectez, mai dau cu chit si scuipat si pana la urma iese cate ceva (uneori). Dar cum ziceam, nu-s programator.
Si uite de ce nu-s programator:
Nu-i clar? Hai sa va zic in cuvinte atunci:
Pentru ca nu am vazut in viata mea un tutorial decent. Un “howto” decent. NICI. MACAR. UNUL. De cand stiu sa citesc.
Nu am vazut in viata mea un tutorial care sa spuna “pai, bun, astea-s tipurile de variabile, iata aici niste exemple bune; sa zicem ca vrem sa ghicim numele de familie al lui Gheorghe dintr-o baza de date”. Sau “sa zicem ca definim un form si vrem sa trimitem ce completeaza Gheorghe acolo intr-o baza de date”. Sau “sa zicem ca vrem sa comparam ce avem in baza noastra de date cu ce scrie pe interneti despre Gheorghe”. Sau ceva de genul asta, ceva UTIL.
Nu.
Intr-o lume de client-server de cand am pus eu mana pe PC prima data, toate tampeniile incep “sa zicem ca vrem sa obtinem radical din coispe inmultit cu sugipula si ridicat la puterea mataicurva”. Si ma uit la ele si efectiv mi se blocheaza creierul. Si nu-i doar pentru ca nu dau doua flegme pe matematica. Nu. E din cauza ca in viata mea nu mi-a cerut cineva sa-i scriu un program care sa calculeze cat e 2^8. NICI. MACAR. O. SINGURA. DATA. Ce-mi cere mie lumea cand trebuie sa scriu/modific ceva?
“sa fie butonul ala mai incolo sau mai lat/lung”
“sa am un form pe site si clientii sa introduca”
“sa am alt form si clientii sa ceara ceva care sa fie obtinut din baza de date”
“sa le faca o conversie din X in Y” (nu, nu din string in int, ci din pdf in doc, sa zicem; sau alte alea)
“daca Gheorghe face X, atunci noi sa facem Y; daca face Z, atunci sa facem T; iar daca nu face X sau Z, atunci sa suga pula”.
“as dori sa caut pe tot internetul herpaderp si sa-mi stochezi in baza asta chestiile apoi sa fie sortate dupa relevanta cand da Gheorghe click pe butonul de search”
“vreau sa fur tot ce-i pe un site, cum fac sa fur asta cu 90 de conexiuni simultane, ca daca fac cu mai multe ma blocheaza IPS-ul lor si daca fac cu una singura, dureaza 9 luni?”
De-astea imi cere mie lumea, nicidecum radical din coispe.
Si uneori, cum ziceam, ma mai uit la un tutorial de limbaju’ X. Hai, ca poate o sa-mi fie de folos la ceva. Hai sa vedem… Dar nu. Nu-mi e de folos. Pentru ca-n toate sunt invatat cum sa obtin limita de X, sa calculez radical din Y si ceva-ceva fibonacci miau.
Incerc sa-mi dau seama daca am folosit vreodata teorema lu’ Pitagora la ceva (excluzand vreo lucrare de control din generala). Cred ca nu. Da’ e-n toate tutorialele de programare. Cine stie? Poate o sa pornim urmatorul unicorn calculand ca 3^2+4^2=5^2. Ca poate lumea chiar vrea sa dea bani pe asta. Sigur e undeva un nene cu un teren triunghiular care face un unghi drept (da’ perfect, nu 90.1), stie cat masoara catetele la perfectie, da’ pur si simplu nu gaseste ipotenuza si ar da miliarde pentru a afla. Cum sa nu fie? Tre’ sa fie. Iar daca doamne-fereste-i mai trebuie si aria, o sa-mi ceara Zuckerberg bani de paine.
…si cam de-asta nu-s eu programator. De-asta si pentru ca de fiecare data cand ma apuc sa incerc sa invat ceva cat de cat, devine urgent obsolete. Pana cand incepe sa fie folosit de altceva, moment in care e iarasi ultimul racnet. Dupa care ma uit mai cu atentie la el – ca, dom’le, trebuie! – si-n cel mult doua luni toata lumea-l declara mort.
Din exemple de genul asta poti sa vezi maxim cum se declara o variabila, o functie, un for…basics. Ceea ce pentru tine e inutil, dat fiind ca ai vazut cateva limbaje de programare la viata ta. Sunt utile doar pentru cei care invata programare prima data.
C++ si Java au fost si cred ca vor mai fi o vreme. Tot d-aia nu mi-a placut nici mie programarea, ca nu eram as la matematica …. stiam sa fac integrale si cu chiu cu vai integrale duble dar cam pe acolo ma opream.
Dar nu se stie niciodata cand te intreaba un bodyguard teorema lui Pitagora , Lagrange sau altii ca sa intri undeva :))))))
https://m.youtube.com/watch?v=IoZEqeEQkYI
In alta ordine de idei, au ajuns programatori pana si aia de culegeau porumb inainte lol. Stiu vreo doua cazuri, nu chiar de la porumb, dar pe acolo.
Pai d-aia imi crapa mie un jeg de platforma NMS pe un jaf de i7 cu 8gb ram, ca e scrisa de handicapati d-astia…. “programatori” java. Ca sa nu zic ca cel mai frumos e cand dau pe un buton un task o chestie acolo si nu face nimic…bai da nimic… :))) gen…zici ca dau click pe un printscreen ceva. Pas la care dau eu singur alt F4 si pornesc iar jegul….
Hai conasule, se poate?… Pai aia cu piramidele… pula mea, nu tot cu Pitagora au facut alea-alea? Sa-ti mai zic de criptare si hashing? Pai aia e 99% matematica de numere intregi, caci daca intri in quantum, ti se incovriga la intrare, de la tot calculul ala matricial.
Radem-glumim, iti dau dreptate pana la un punct, sunt multe tutoriale de kkt. Prea multe… Dar nu toate. Uite aici bulan de bulan:
Acum 20 si ceva de de ani, eram proaspat iesit din facultate, mancasem C/C++ pe paine, dar ce pacat ca pe vremea aia programarea care platea bani era in FoxPro si dBase: programe de contabilitate, manca-mi-ar pula toti contabilii!
Asa ca si eu, tot networkist si unixar am fost o vreme. Vremea cand, daca faceai $500 pe luna, era ca si cand iti masurai pula la concurs cu Sf Petru, gen.
Intr-o zi am pus mana pe o carte care te baga in Java. De la Microsoft Press :))) – ma rog, inca nu se daduse pe post Sun vs M$, C# inca era secret de secret, etc. Dar sa moara Claudia daca nu era cartea aia scrisa de Dumnezeu, si parca nici Moise nu avusese acces la ea, desi a fost primul bulangiu care a folosit tablete si a downloadat din Cloud… Cartea aia, cu sublima soarta, mi-a inviat pula moarta – pula de programator; a nu se intelege alte confuzii sau arogante…
Azi, casa e platita, inca 500K+ pe tufla, 100K++ salariu, maxim 5 ani si ma retrag, desi as putea si maine… Ma laud! Fiindca am cu ce. (Ma rog, sunt dolari canadieni, un fel de pule din Botswana, ar zice unii…)
Am gasit multe alte carti si tutoriale bune de-a lungul timpului. Nu neaparat de Java, dar mai multe de Java, caci aia ma interesa pe mine. Pacat ca le-am citit si n-am dat mai departe… Muist pana la capat.
Oricum, in zilele astea e o companie, se numeste Pluralsight, are tutoriale video pana si de luat in cur fara vaselina, let alone programare. Nu stiu cat costa caci plateste compania, desi am auzit ca e rezonabil, dar am invatat Node.js in 5 zile, nivel advanced – recunosc, stiam JS, dar nu la nivelul ala. Am prins Firebase pt Android in 2 saptamani – 2 ore pe seara – si Flutter – un super-framework hibrid pt aplicatii mobile – in 4-5 zile.
Alternativa e sa gasesti un bulangiu cu suflet de mama, care intelege cat de cat, si care sa vrea sa-ti explice si tie niste chestii. Chestii care dealtfel sunt si in carte, numai ca sunt scrise ca in contractul de la cartea de credit.
Ai drepate, Pitagora si Fibonacci nu folosesc la nimic in 99% din cazuri. Alea sunt doar un fel de cross-fit pentru “neoron”.
Aoleu, uitam temelia: de baza sunt principiile, nu limbajul X sau frameworkul Z. Cacaturi pe care am avut norocul sa le inteleg in facultate, inca se mai aplica si acum de parca tocmai s-a inventat motul de la basca.
@miki: ai idee care sunt scorurile pe prin fintech si , grosso modo, cat sunt taxele?
*pe acolo
Revenind la subiect: de obicei, daca vreau sa vad ceva util si mai aproape de realitate, mai trag cu ochiu prin codul unor chestii open source. E nitel mai dureros daca e limbaj nou ( deh, nu ma prind de toate chestiile de sintaxa din prima si tre sa mai stau cu gugalu), dar ma ajuta mult sa inteleg cum se fac niste chestii mai high level.
Dar, cum zicea si Mikimoto, ca sa poti sa faci asta cu un nivel decent de efort, tre buie sa ai deja sudate niste concepte de algoritmi, structuri de date si oop: lista, vector, sortare, mostenire, design patterns…laba in cerc.
Pentru quick win-uri cu cod putin, incearca python. Sintaxa e banala si are o gramada de framework-uri dezvoltate in jurul lui: panda pentru lucrul cu date, django pentru web, sqlite daca vrei o baza de date la oha sa te joci etc
Ai putea sa incerci si la Udemy. Eu am facut cursul de Java de acolo, ce-i drept cam lungut da l-am facut pe timpul si banii firmei. Te poti uita pentru ce te intereseaza, vezi sectiunile cursului si decizi daca ai timp/chef. Din ce am vazut mai toate cursurile incep de la 0 (variabile and shit) si merg spre advanced.
Pățită pe pielea proprie din dotare: m-am apucat să învăț Python, am observat că e foarte potrivit pentru scripting/automation la ceea ce am nevoie unde dau cu sapa. Bun, am făcut rost de un .PDF (Learn Python The Hard Way, despre care zice-se că e printre cele mai bune cărți pentru învățat Python) și pe la lecția 15 m-am blocat. M-am blocat pentru că de la exercițiile alea simple cu declarat variabile and shit, bazele sintaxei de Python gen, a sărit di(n)rect în def [function_name], fără măcar să explice cine PLM e def, da’ avea ceva gen „if you encounter something you don’t understand, do a bit of research and find out what that does”. Păi PLM, ori îmi dai mură-n gură ca să pricep ce și cum, ori mă trimiți în altă parte ca să îmi dau seama ce înseamnă rahaturile din cartea ta.
So yeah, dacă îmi poate recomanda careva dintre voi un curs/o carte din care să învăț noțiunile de bază într-ale programării, aș aprecia foarte mult fapta.
Referitor la obsolete: da, cam toate devin obsolete dupa un timp din varii motive: apar frameworkuri noi, compilatoarele si interpretoarele au fost gandite prost, tehnologiile care le foloseau devin prea scumpe si prea greu de intretinut..etc
Doar ca ideile raman si sunt imbracate intr-o alta sintaxa, mai simpla si mai usor de folosit: geen raii-ul care era miezu cpp vine cam default in java, reflectia care era miezul spring-ului din java vine in python din voleu cu atributele obiectului, procesarea asincrona din java/cpp/c# vine in python cu un simplu yield…
Ce vroiam sa zic de fapt: efortul depus pentru a invata serios un limbaj nu se pierde, chiar daca el devine obsolete. Raman conceptele, trebuie doar sa inveti sintaxa noua, care e cea mai usoara parte. Si , reversu medaliei : doar cu sintaxa nu prea faci mare cacat.
Disclaimer: nu sunt expert…
Fintech – GTA/Ontario
– bancile platesc moderat pt permanent positions, ie 75K-85K Sr Dev, dar poti lua intre $55-$70/hr la contract, fa si tu socoteala inmultind cu avg 2000hr/yr. Pt mobile dev e aprox inmultit cu 1.2 caci cererea e mai mare decat oferta.
– investment/wealth management firms platesc relativ prost la permanent, dar unele dau bonusuri anuale egale cu salariul – asa am auzit, personal nu am lucrat niciodata in domeniu. E greu de patruns, mafia e la putere. Nu stiu daca se risca sa angajeze contractors.
Taxe: depinde de forma de angajare.
La post permanent ai taxe progresive, un ex find vreo 40% pt tot ce trece de 140K. Cifre aproximative, ca nu am rabdare sa sap. Atentie: ex taxa federala si taxa provinciala, nu le dau separate, caci e complicat. Ca exemplu, pana in 120K perm, daca iti maximizezi contributia la pensia privata poti reduce taxele totale pana pe la 22%. Poanta e ca banii bagati in pensia privata e mai complicat sa-i scoti inainte de termen.
La contract, daca esti Inc/Corp platesti o taxa fixa pe firma, si inca o taxa progresiva pe salariul pe care ti-l platesti tie. Daca esti sole ownership, platesti taxa progresiva, ca si cum toti ce incasezi pe firma sunt banii de salariu brut.
Detalii la
https://en.m.wikipedia.org/wiki/Income_taxes_in_Canada
https://www.canada.ca/en/revenue-agency.html
https://www.fin.gov.on.ca/en/tax/cit/index.html
E posibil sa fi spus prostii la taxe, ca aia e treaba contabilului…
@Florin: a prins firma promotia cu 9.99€ ORICE CURS? :))))) Ca asa erau cand am luat eu ceva de cybersecurity lol. Cateva zile mai tarziu am gasit toate cursurile pe la niste prieteni care scriu cu caractere chirilice.
https://www.coursera.org/learn/learn-to-program#syllabus
@Sarius: ia-o piano daca n-ai mai programat niciodata. Cu rabdare si tutun. Vezi curxsul de mai sus.
Cica nu vei reusi niciodata sa programezi AI\ML\DL daca nu stii matematica la nivel avansat 😀
Nu esti programator pentru ca nu ai inteles la ce foloseste cu adevarat programarea. Nu spun asta ca o critica, ba chiar confirm ca 80% din lumea asta nu inteleg la ce e buna programarea, chiar daca unii se incadreaza la programatori. Si, din cauza ca cei mai prosti in general fac toturiale, lumea ajunge sa nu priceapa nimic din programare.
Tot ce se discuta pe aici sunt chestii de automatizare, chestii care te ajuta sa faci o chestie mai rapid dar e ca-n expresia aia cu aschia care nu sare prea departe.
Programarea tocmai asta e cu adevarat, sa sari departe, nu doar sa faci chestii care iti usureaza tie anumite taskuri repetitive.
Mai e totodata o parere gresita ca majoritatea programarii implica munca de patching (carpeala). Sunt de acord putin, ca doar trebuie sa existe si suport pe softurile lansate. Partea adevarata a muncii de programator e sa creezi ceva, nu neaparat sa automatizezi ceva (ma gandesc la amazon challenge de acum cateva posturi care n-are treaba cu programarea).
Pe unde am dat cu sapa chiar am lucrat la ceva creatie, nu doar patching. Ideea e ca programatorii cam trebuie sa cam stie matematica daca vor sa evolueze. De ce? Pentru ca programarea nu ajuta ITistii in primul rand ci oamenii de rand. Si potentialii clienti au imprimante 3d, roboti si simulatoare unde daca nu stii vectori, cosinusuri, sinusuri, proiectii, ceva geometrie 3d si, de ce nu, pitagora’s theorem s-ar putea sa o cam sugi putin cand ti se cer niste chestii pur matematice.
Desigur sunt multe aplicatii de baze de date dar… si acolo e important sa nu fii retard fara matematica (urmatorul paragraf).
Apoi complexitatea algoritmilor (vezi cartea lui Cormen, sau Knuth daca te tine) aia e matematica superba. De aia avem queryuri scrise prost, algoritmi oligofrenici, ca nimeni nu intelege ce e un hash, ce e o lista, cum cauti prin ea si de ce mortii ma-sii de interfata scrisa in react native/angular merge asa prost, ca astea-s rapide nu?? de ce???!??!!
O greseala tot mai deasa pe care o vad e faptul ca oamenii confunda tehnologiile (limbaje, frameworkuri) cu programarea. Nimic mai eronat. Python, C, Java, etc sunt doar niste tooluri pe care le folosesti. Fundamentele in schimb sunt cea mai delicata parte, nu niste rahaturi de sintaxe si modalitati de a declara variabile. Daca ai fundamentele bine puse la punct faci switch intre limbaje in decurs de saptamani.
—
Daca esti php boy si nu stii cum dracu ajunge fopen sa cheme functia fopen din C care apoi cheama open (man 3 open) si ce se intampla mai departe prin kernel in linii mari atunci nu te poti numi cu adevarat programator.
Daca dintr-o specificatie nu prea ai inteles ce limbaj trebuie folosit, ce se preteaza, poate ca nu trebuie sa te numesti programator.
Daca ti-e frica sa te uiti la ceva low level cand ajungi sa optimizezi atunci poate nu trebuie sa te numesti programator. Aici poti ajunge si sa optimizezi in assembly pe anumite arhitecturi de procesoare (NEON de pe ARM de exemplu) direct in ASM daca nu ai un api wrapper in limbaje de nivel superior. Si nimeni nu face wrappere, ca nu e platit (putin) pentru asa ceva.
Ai ajuns sa corectezi cod fortan scris acum 40 de ani (f77 anyone? f2c ca sa mai respiri?) si nu crezi ca meriti asa ceva? (in general e matematica, hello lapack, hello Matlab?) Poate ca nu trebuie sa te numesti programator.
Ai un cod legacy la care au programat si unii morti de batranete (exemplul meu) si tremuri cand faci o modificare la un fisier din “core” nemodificat de 10 ani? poate ca nu ar trebui sa te numesti programator.
Ce vreau sa spun e ca programarea asta nu prea are granite clar definite. Adica ai intrat in ea, esti in cacatul asta si din cand in cand mai respiri, ca la inot. Nu e visul frumos ca programarea iti face cafeaua sau ai tu un script in linux care de eject/mount la cd ca sa-ti miste caruciorul copilului. Nu, e mizerie, e jeg si e naspa, e de nervi tari de cele mai multe ori. Cam ca lumea reala. De aia urlam cand unu castiga un proiect cu un “produs inferior” si ne vaitam cand castiga X o licitatie, dar adevarul e ca nu exista alternative in cele mai multe cazuri. Incercam sa demonstram cu un proof of concept ca “nu e mare lucru”, dar adevarul e ca nu intelegi ce-nseamna un proiect daca prezinti doar un proof of concept. Nici macar un algoritm genial nu inseamna un proiect, un site extraordinar nu inseamna un proiect samd.
Asa ca pana nu pui mana pe treaba si vezi ce implica cu adevarat, nu prea ai de ce sa-i zici lui Bagadi, Sahay, Peija, Zhang, ChenYao, Motewar, Gavade, Ashutosh, Dhruv, Kumar ca-s prosti.
Mno, cam asta e ideea in mare.
@Fog: nimeni nu stia sa programeze calculatoare in anii 50 fara matematica, fizica si electonica la nivel avansat. Acum chestiile de baza poti sa le faci de pe la 9 10 ani.
@Sarius – cartea aia iti spune la inceput ca nu o sa iti explice mura-n gura si ca o sa ai exercitii care te vor pune sa faci x, chit ca nu stii ce face x, si ca daca vrei sa inveti tre sa citesti pe langa. Mi s-a parut un pic mai utila decat unele cursuri online, pentru ca te ia prin exercitii si dupa te pune sa faci debugging. Dar exercitiile tot de kkt sunt.
Daaar, revenind la subiect, totate tutorialele pe care le-am facut sunt cum spune Manowar, creeaza o functie care transforma gradele celsius in kelvin si alte mizerii de genu’. Un singur tutorial a fost cu ceva aplicatii mai utile (Python, pe Udemy), pacat ca era tipul plictisitor si vorbea incet de trebuia sa bag la 2x ca altfel adormeam
Referitor la tutoriale, ca tot am fost implicat in ceva gen “student training” pe aici pe la firma:
– nicaieri nu se prezinta chestii concrete
– mereu esti luat de la nivel de loază
– ideea dupa tutorialul ala e sa stii sa “citesti” in limbajul ala (poti sa-l vezi ca pe un curs de limba straina)
Asadar asta e scopul tutorialelor de programare in general. Da, de cacat, stiu.
—
Cine vrea mai mult vrea ceva hands-on, un proiect cap coada sau macar sa lucrezi la ceva la care are ceva vizibil, tangibil. De aia trebuie, din punctul meu de vedere, sa pornesti cu ceva gen plugin based pentru a vedea ceva concret dupa putin timp de cand ai inceput sa scrii. Sa ai o finalitate cu alte cuvinte.
De aia vedem multi antrenati in web development, ca se vede repede rezultatul. Similar pentru jocuri pe calculator. Personal am inceput sa invat programare scriind intro-uri de jocuri pe un jeg de pentium la 60 mhz cu hdd de 420.5 mb cu win95 osr2 citind pcgpe 1.0 (fisiere .txt) si cu helpul de assembly de dos cu intreruperi (33H mouse interrupt anyone?). Asta era acum ~21 de ani si transformam cod din pascal si ASM in C (Borland c++ 3.1 #include graphics.h + egavga.bgi da!) cu inline assembly. Ma rog, am renuntat la graphics.h ca era prea lent si am trecut direct la memoria video, dma ca erau niste fisiere .txt in arhiva aia (da o mai gasiti pe net sa-ntelegeti de ce rotirea matricilor e importanta – ascii artul cu explicatii e de nota 10 – mie mi-a luat atunci cam o luna sa inteleg matricile, dupa aia am zburat prin vectori ca un zeu si la scoala la geometrie analitica ma amuzam… ba chiar le-am facut un program sa simuleze hiperbole, cercuri, elipse etc cu parametri modificati in timp real).
De aia cand am facut acel “student training” aveam deja un framework in care ei faceau ceva si vedeau ceva rapid. Asta pentru ca experienta mea a fost placuta cand vedeam ceva, chiar daca la mine mouseul a aparut in msdos dupa o luna de citit .txt. Am luat in calcul ca oamenii acum sunt mai nerabdatori… deci cut the crap, show them the real stuff.
—
Acum, pervers fiind, as putea sa ma ofer sa fac un training pentru doritori; evident, daca spuneti ce vreti si daca consider ca pot. nu moka, ca doar intelegeti de ce cand e moka aveti parte de “tutoriale”.
IulianS din ce zici aici nu prea ai futut tu in timpul scolii nu?
Programator autodidact aici, pe mobile, in special iOS. Dupa IulianS probabil nu’s mare programator, ca n-am auzit in veci de ce zice el, asa ca o sa dau perspectiva mea, dupa ce am invatat singur de la 0 tot, Java la inceput si Objective C/Swift dupa:
1. incepe cu conceptele de baza. Nu te poti apuca de scris cod pentru Android daca nu intelegi conceptele OOP. Asta e cea mai grea parte, e ca inainte de pierderea virginitatii. Sa intelegi vocabularul de baza, care e diferenta dintre o variabila statica si una normala, ce e mostenirea, diferenta dintre interfete si clase si structuri, etc. Aici e partea dureroasa fiindca nu poti face progrese repede, trebuie sa intelegi intai mai abstract. Eu am inceput cu Java din ceva carte care te pregatea pentru SCJP, dar acum ai coursera, udemy, treehouse, etc. Sunt platite, dar nu e free facut de vreun indian cu accent de Bangladesh. Adica au accente mai ok.
2. uita de algoritmii super complecsi si matematica avansata a lui Iulian. Ai timp mai tarziu de ai chef. Acum fa ceva simplu. O aplicatie cu un textfield si un buton. citest texfieldul si il afisezi pe un label. Apoi incerci sa faci o baza de date si sa intelegi cum merge. Dupa ce ai reusit sa salvezi ceva in baza de date si ai inteles ideea, esti boss. Ai bazele. Problema e ca se schimba super rapid, nici tutorialul oficial de la Google nu mai era up-to-date cu ultima versiune de Android candva. Nu poti decat sa te descurci cumva.
3. extinde incet incet baza de date. Citesti din ea, scrii chestii in ea, afisezi liste, etc. Morala era incet, incet.
@Iulian
inteleg perfect ca ce zici tu e ok, adica m-am izbit de multa matematica mai tarziu. Dar rare instantele in care nu s-a rezolvat cu niste research. Daca nu intri in algoritmi de machine learning, cea mai mare parte e de scos si pus chestii in baze de date. Aici putem complica treaba, dar treptat de tot. 90% din munca pe care o fac eu pe bani ok pentru Romania poate fi facuta de orice homeless cu o luna de training. Sau o maimuta mai isteata platita in banane.
Raspunsul corect era pentru ca e platit mai prost si e mai multa munca/futere de utere pentru nimic.
Eu am ajuns la facultate de pe şantier. Băgam piatră cu furca între şi ele de cale ferată. Şi pentru că am eșuat în ce-mi doream eu am ajuns la…. informatică, facultate de stat. Primul curs a fost ASM. Move ax etc. Profu’ ne-a zis ălora care nu pricepeam să luăm la studiat Algoritmi(i) Fundamentali a lui Knuth. De atunci mi-am dat seama că programarea nu-i de mine. Dar na, e nevoie şi de Gigi Şurubel în lumea ăsta.
*între şinele de cale ferată
L.E. Manowar, pune și tu posibilitatea de editare activă timp de 2-3 minute după postare.
Mă fut în autocorect.
@Sfantul
E nasol ca te sperie de mic. Cand nu stii nimic si dai prima oara de ASM, iti faci o cruce mare si zici ca nu e de tine.
Foarte fals, ce faci in general nu e nici aproape de ASM. FFS, nu am dat niciodata de ceva sa imi ceara ASM. Am mai dat de dubiosenii in C super rar, dar am optimizat sau am intrebat pe cine trebuie.
Pana si o maimuta ar putea face 90% din ce fac eu, am mai zis mai sus. Si moda asta sa incepi cu programare low level mi se pare ca sperie cea mai mare parte din oameni. Incepe cu ceva lejer nu ASM care iti da cosmaruri.
As zice multe. Deci daca faci un text field si iei valoarea lui si ai copiat un sql INSERT esti ok? Dar cand spui la capat ca ai bazele ma apuca rasul.
Since acum, ce dracu’ finalitate e aia?
Nu am zis sa pierzi ani cu matematica avansata (rotiri de puncte cu matrici e avansat?), dar parca ai vrea sa fii in stare sa pricepi un algoritm complicat care face referire la altii nu? Sau sa stii ce-nseamna complexitate? Sau nu conteaza daca iti da androidu’ un ANR nu?
Mai tarziu s-ar putea sa nu prea ti se ofere sansa sa faci asta, mai ales ca timpul nu mai e prieten cu tine cand ai plozi. Ia apuca-te acum de gramatici, context-free grammar, AST, compilatoare cand astea necesita timp nefragmentat. Si sa mor de nu m-am lovit de astea mai peste orice aplicatie serioasa.
@Vinil
Da, 90% din treaba o faci cu copy paste si-n cazuri mai grele de pe stackoverflow. Nu neaga nimeni asta. Eu spun daca esti in stare sa zici “sa facem” cand se-mpute treaba rau si e nevoie de vidanjori de calitate. Si de obicei se-mpute treaba daca acel10% nu merge bine (performanta, situatii ciudate, modul de functionare al threadurilor, race conditionuri, memory leaks, servere care nu raspund in timp util etc).
Da-mi un exemplu de o aplicatie care face doar asta si din care scoti bani. Nu de alta dar parca vorbim de “bucata mea de cod” si confundam cu o aplicatie. Datele neprocesate sunt irelevante in 99% din cazuri. Cum le procesezi fara algoritmi, chiar banali?
@vinil Dar nu a inceput cu ASM, din cate am inteles era curs la facultate pentru sfantudracu. Ceea ce nu e anormal pentru ca daca ai intrat la facultate se presupune ca esti toba de un limbaj high level gen Pascal sau C/C++
….sa-nteleg ca m-au depasit?
La fel de aiurea mi se par si mie tutorialele de linux / sysadmin. Pentru ca cultura mea in domeniu nu e atat de vasta.
In programare se-ntampla sa faci chestii fix dupa tutoriale si sa dai chix,pen’ ca sunt niste detalii care nu-s cuprinse in chestia aia si daca faci mot-a-mot e greu sa unesti toate punctele.
Si fix asa e si cu tutorialele de instalat chestii pe linux, de exemplu. Ajung la un punct si ma gandesc “de ce pula mea nu merge, ma, ca uite, fac fix aia”. Si dupa aia iau si dibui si daca nu ma plictisesc ajung la concluzia ca DE AIA nu merge. Da’ de unde pula mea sa fi stiut eu de aia in the first place.
Personal nu am nimic impotriva modelelor abstractizate ( calcule matematice) in tutoriale. Important e sa inveti operatiile de baza – caramizile. Ce vrei sa construiesti cu ele ar trebui sa stii deja. Te gandesti tu cum le imbini.
Programarea e doar o descriere de caramizi si de moduri cum le poti lipi.
Replica asta e foarte amuzanta, dac-o bagi cuiva care e in timpul scolii.
Da’ daca i-o spui unuia care la ceva timp dupa ce a terminat scoala aia face niste caramizi de bani, inca din tinerete, si eventual calatoreste incolo si si mai incolo si mai vorbeste si niste limbi straine, nu neaparat ca limbile in pizda, da’ ajuta, umorul ar putea fi pe seama ta.
Mai ales daca de la o varsta incolo iti pasa si ce futi. Da’ plm, unii ar putea ramane cu ideea ca programarea e o treaba scarboasa de nefututi.
@Manowar
Pana nu incerci nu ai de ce sa te compari cu ei, aia e. Ii vad, le fac review si, culmea, produc ceva. Nu se sperie de jeg, nu-i consider cine stie ce programatori, dar fac treaba. Aia e tot.
Nu vei sti pana nu “face your fear”/”jump in the fire” daca e greu sa usor.
Si vorbim de ceva finalitate, nu tutoriale in care descoperi ca in C se spune print in java write sau ceva de genul. Astea nu au nici cea mai mica treaba cu programarea. Sunt facute, dupa cum am zis, de oameni care nu inteleg treaba asta si au ajuns sa ii invete pe altii.
Pana nu incerc….ce?
Sa faci ceva, orice si sa vezi daca scoti bani din el. Sa faci suport (ei fac si asta), adica sa iti asumi ce e acolo. E ok? Merge? Iti place?
Am zis, domeniul nu are granite, face cam tot ce vrei tu, daca poti.
@Iulian
Anr pe Android e cam greu de obtinut, stii, ca lectie scurta, nu faci chestii serioase pe UI thread. Daca simti ca ceva poate bloca interfata, o treci pe un thread secundar. Si e chestie super simpla si ok.
Legat de SqlInjection…. 2 chestii:
1. Eu explic cum sa intelegi la inceput, nu cum sa fii as si sa validezi querryuri like there’s no tomorrow. pe parcurs creste levelul, eu explic asa cum sa o iei initial
2. Pe masura ce trece timpul, intelegi cum e cu complexitatea mai bine. Dar nu, nu sugerez nimanui sa isi bata capul cu asta la inceput, e cam greu sa blochezi serios main threadul cu orice nu e API request care asteapta raspuns. Zic la nivel de incepator. Cand ajungi sa faci ceva asa complex care iti blocheaza UI-ul, probabil ai inteles deja cum e treaba cu complexitatea.
Tu ai dreptate, numai ca nu zici nimic beginner friendly. Ideea e sa incepi usurel, pe cand in Ro cel putin se incepe super greu si apoi zice lumea ca “bai, programarea nu e pentru mine”. Inca imi amintesc de backtrackingul si problema reginelor pe care le copiam prin liceu. Stii de cate ori am folosit backtracking pana acum? Sub zero, ca la Mortal Kombat. Adica deabia cu asta blochezi UI-ul :)).
Nu inteleg de ce se incepe cu comunismele alea dubioase in loc sa se inceapa cu un web dev usurel si ceva frameworkuri prin liceu. Gen “uite, mami, am facut un site misto, ce tare e IT-ul, hai sa intru mai adanc in domeniu” in loc de “Omfg, am calculat daca un gunoi e palindrom in ceva C stalinist, cui Satan ii foloseste, hai sa ma tin departe de programare ca e nasoala”
Adica eu sunt pentru bani in domeniu, ca nu m-a prins liceul deloc, si facultate nu am facut.
Supraestimezi importanta programarii si-a programatorilor. Grav.
Cat despre bani, n-as paria, da’ e posibil sa scot mai multi decat badawi, sandeep si tot neamul lor de la om la maimuta.
ASM am facut un semestru la facultate sa programam ceva……ATMEL daca imi aduc bine aminte.
@IulianS ti-o ardeai cumva pe la jumatatea anilor ’90 pe la CPI (ala din curtea ICI de la 1 Mai) ? Era un baiat pe acolo Iulian, care m-a invatat niste animatie direct pe memoria video.
In alta ordine de idei te-ai uitat peste Q# ? Daca da, ce parere ai de el ? Eu nu mai fac programare de vreo 15 ani, deci ia-ma usor.
@Sfântu Dracu, facultatea de Informatica fiind fosta facultate de Matematica? Daca da, atunci proful cu pricina merita batut cu pietre in piata publica (eventual aia de la Arhitectura). Aproape numai elitisti printre fosilele de acolo, care put a aroganta. Atat de tipica pentru cretinii aia comunistoizi afirmatia ca “daca vrei sa te apuci de programare, incepe cu Knuth”, pisa-m-as pe harfele lor.
Cartile lui Knuth (sau “cartea” daca e sa consideri “Arta programarii calculatoarelor” o singura carte), sunt o preocupare pentru cei care deja sunt tatici in programare (la modul la care descrie IulianS programatorul), in niciun caz pentru unul care abia se apuca de programare.
@Schipix
Is din orasul Dragnea, nu din B.
Foarte posibil. Dar eu iti explicam doar cu ce se mananca pe bune si am ajuns la altceva.
Am facut programare si la liceu si la facultate (oarecum). Singurul lucru util pe care l-am invatat din asta e cum sa ii rog pe altii sa faca treaba pentru mine. Pacat ca nu m-am tinut de el.
Oricum a devenit un fel de excel, nu poti face absolut nimic fara 1-2 linii de cod “undeva”.
@Schipix: Nu undeva prin Ardeal. Una mai mica, fiind înființată de mai puțin de 10 ani pe atunci.
Poate ca dacă m-aș preocupa aș reuși sa înțeleg ceva din programare și să construiesc un buton care sa schimbe o culoare pe monitor, dar cumva mi se pare mai ușoară mandarina decât programarea. Cel puțin mandarina încep s-o pricep.
pentru ca sunt alte meserii din care se castiga un ban asta e raspunsul corect.
tutorialele sunt naspa, cartile explica nasol, help-ul deschide o mie de ferestre cu zeci de referirnte in alte parti. la scoala se preda nasol, la facultate la fel.
nu trebuie sa confunzi programarea cu limbajul de programare asta e abordarea corecta. peste tot sunt prezentate astea 2 amestecate. ma este si faza ca, pentru a fi programator iti trebuie niste skill-uri pe care Multi le-au neglijat ..a explicat IulianS mult prea detaliat ca sa mai pot adauga si eu ceva.
Nu paria. Lucrez cu un Rajesh care baga si el aproape 700 de euro pe zi + cheltuieli de deplasare, cand e cazul. De acasa, asa ca tine.
Si e priceput pe treaba lui.
Da, boss. Si eu vad contracte pe ceva mai mult de-atat (si cine stie, poate ma bag la unul). Avantaje si dezavantaje cand lucrezi pe contract, nu zice nimeni.
Da’ eu momentan nu concurez cu Rajesh la nimic, din cate-mi amintesc. Concurez cu aia de pe felia mea. Si aia de pe felia mea imi iau mie pula-n gura de 700 de euro pe zi.
Corect, dar despre aia nu stiu eu si nu am ce comenta.
Daca-mi spui ca nu exista indieni competenti care castiga bani buni din ce faci tu, pot doar sa ridic din umeri, ca nici eu nu am intalnit.
Exista destui care castiga bani buni din ce fac eu.
Da’ aia cu care concurez eu sunt buni cel mult sa mi-o suga. Cel mult.
Am mai spus: cei care nu sunt in stare de ceva mai bun ajung sa predea. Si, ironic, nu prea stiu ce predau. The same goes for (most of the) tutorials.
Nu am facut liceu de informatica si nici programare la scoala. Tot ce am invatat am invatat pe barba mea, efortul meu, timpul meu. Nu mi-am sacrificat nimic, ba chiar mi-a placut la nebunie faptul ca puteam sa vad intr-un final ceva (calculatorul programat corespunzator) care sa-mi explice pana la epsilon cum functioneaza integralele, derivatele, legile fizicii (electrostatica, mecanica, electricitate etc), sa vad grafice-n timp real. Apoi simulari 3d cum arata orbitalii d2sp3 si ce dracu mai era pe la chimie ca nu mai tin minte, dar daca acum ma apuc iti explic in 2 zile cu lux de amanunte dupa ce dau refresh la chimia aia. Apoi iti pot arata efectiv frameworkuri wireframe cu toate transformatele de perspectiva si rotatii si tot ce vrea muschiul tau, cum se formeaza imaginea pe retina si alte cacaturi pe care trebuie sa le stii cand proiectezi 3d-ul pe un monitor plat, frameraturi, refresh, modalitati de realizare stereograme, you name it. Totul e acolo, latent, pentru ca ce ai facut cu un scop nu se pierde niciodata.
Repet: toate astea fara nici o presiune, de placere si cu satisfactii enorme.
Apoi revenim in lumea asta reala:
– explica-i, te rog, unuia cum functioneaza un GUI (da, din ala single thread) cum sunt mesajele alea procesate si cum “nu se poate niciodata sa ai un ANR asa usor” (obvious hint: gui-ul e single thread)
– explica-i, te rog, unuia cu threaduri care sa nu blocheze GUI-ul si cum comunici eficient cu acel thread (in general) si mai ales, ce-nseamna mai exact un thread cu tot rahatul de pe langa?
– explica-i tu cum folosesti frameworkul de networking “X” care iti face server in trei linii de cod si nu stii de ce se-neaca la vreo 200 de conexiuni cand nginx merge la mii, zeci de mii
– explica-i tu cum aplicatia ta merge mai incet decat alta pe iOS, Android cand tu “ai folosit corespunzator ios/android api”
– explica-i tu cum nu poti realiza nu stiu ce detectie de fete (ascunse) intr-o geometrie pentru ca e prea complicat si din cauza aia jocul tau are un framerate de cacat cand mai apar inca 3 playeri pe langa tine
Nu asa ca mai frumos faci un tutorial fara nici un scop definit, in care arunci cateva probleme clasice gen a*b si rezolvarea ecuatiei de gradul 1/2? De ce sa-i explici omului contextul cand poti sa ii dai ceva pe langa subiect masiv, care mai mult il deconecteaza de chestiile importante? Simplu: ca nu poti, pentru ca cei care pot nu au timp de asta, fie cer bani grei pentru asta.
Asta cu in “ro e super greu” e o aberatie. Algoritmii sunt peste tot la fel, matematica e un limbaj universal, ca si algoritmii. Adevarul e ca peste tot sunt puturosi oamenii si prefera calea usoara. Aia care totusi inteleg ca “there’s more” sunt cei care vor pricepe ce-nseamna sa programezi indiferent ca au inceput cu o pagina web sau cu un cod in C/ASM. Si nu o dati in aberatii cu assembler si mov ax ca alea-s cele mai usoare chestii, plus ca nu trebuie sa le inveti, ca de obicei verifici de 10 ori documentatia pentru ele, dar si aia e o discutie separata (de genul RTFM). Adevarata chestie e sa stii ce vrei sa faci si sa incepi sa sapi pana cand dai de ce trebuie. Aia e programarea. Si cand iese e destul de satisfacator/interesant, cel asa a fost pentru mine in primii ani.
Si s-ar putea ca unii profesori sa aiba un rol demotivant pentru elevi. Partea buna pentru mine e ca mereu am fost un semi-jeg uman care cand nu pricepea ceva facea gura mare. Nu am avut modele ci doar bucati de modele si poate ca asta m-a ajutat sa nu iau de bun mai nimic.
Si ca incheiere: nu se scriu singure firebird, oracle, mysql/mariadb, apache, nginx, sshd, firefox, chromium, autocad. Ultima oara erau binare, nu scripturi scrise de admini. OpenGL nu se scrie singur, nici kernelul de windows, linux, drivere de USB, minix si tone os-uri / aplicatii. Nu apar singure problemele de securitate. Nu apar singure limbajele de programare, parserele, lexerele, implementarile de regex; grep, sed, awk, cut sunt tot binare. Fisierele de configurare se parseaza tot in cod ~binar last time I checked. Cineva trebuie sa le scrie pe astea.
Problema e efectiv de intelegere ca in lumea asta e nevoie de tone de aplicatii in tone de domenii, nu doar in IT. E posibil ca suntem prea imbibati in domeniul nostru pentru a intelege nevoile celor din afara lui. Si asta nu crea ca e bine.
oricum, nu e o meserie de invidiat in situatia actuala. pe de-o parte din cauza celor care nu prea inteleg ce este/ cu ce se mananca programarea si pe de alta parte din cauza celorlalti “programatori” prosti gramada.
programatorul e vazut ca un parazit care beleste pula pe Facebook si care ar trebui sa rezolve ORICE problema in secunda 2 daca nu cumva si inainte sa apara
Alex.X3s – estimez ca ai tu un job mai nasol :).
@Schipix
Abia acum am auzit de Q#. Dar si aici e valabil ca nu sintaxa e problema, ci intelegearea arhitecturii si efectiv sa vezi ce poti face cu el.
@Iulian si Alex
Bai, eu sunt genul ala de programator care nu prea e interesat de ce se intampla sub capota. NU ti-as putea explica prea concret cu ce se mananca un Thread nici sa ma picuri cu ceara. Bine, acum o fac un pic pe-a durul, dar adevarul e ca nu mi-a fost necesar vreodata pana acum. De asta limbaje de nivel inalt, ca sa nu te intereseze partea de sub capota. Cam din acelasi motiv pentru care poti asambla un scaun fara sa stii cum se prepara plasticul/metalul din care e facut.
Adica sigur, e util sa stii, dar parca nu vital.
Si pana acum nu am avut probleme. Adica nu m-am imbogatit, dar nici nu a fost vreun caz in care sa fie importanta diferenta dintre heap si stack. Sau sa stiu cum functioneaza threadurile in spate. Stiu ce fac componentele, ma pot juca cu lego si fara sa stiu din ce e facut plasticul lor, si cum se extrage petrolul.
Nu era ideea ca in Romania e greu, era ideea ca in Romania e nasol cu programa scolara, nu prea e updatata prea des. Si nici nu face vreun efort sa educe copilasii in programatori macar mediocri, ci fix opusul.
Uite, recunosc ca esti un programator exponential mai bun ca mine daca chiar te pricepi la ce zici tu. Adica simt pasiune, pari sa stii ce zici. Respect asta. Eu sunt programator de 2 lei, nu imi pasa cum functioneaza sau ce e sub capota.
Daaaar….termin proiectele la care sunt asignat? le termin si inca ok, asa zice firma pentru care lucrez. Castig bine pentru RO? Castig. Nah, nu sunt un programator talentat, avem nevoie si de oameni ca tine. Dar eu zic ca decat sa dai la matura pe undeva, mai bine esti programator ca mine. Nu bun, dar super functional pentru cerintele din industrie. Nu dau 2 lei pe ce fac, desi incerc sa fac bine din respect pentru mine. Sunt scarbosenii care nu o sa ajute vreodata candva pentru niste corporatii infecte care sper sa crape. Iau banii si gata, mai bine ca la matura. Si asta le recomand celor ca la matura. Mai putina pasiune si mai mult pragmatism.
@Vinil
Ti-am mai zis: n-am nimic cu tine, ba dimpotriva, eu vreau cat mai multi oameni in domeniul asta. Cum ai intrat tu e perfect, e un inceput. Acum depinde ce vrei sa faci in continuare. Si crede-ma, daca ai timp si iti pui capul poti ajunge cam pe ce bucata de cod vrei tu, ca devreme ce termini aplicatiile nu esti robot retardat care executa ordine. Aia e ideea, sa gandesti, nu sa inveti tehnologia X sau Y ci sa vezi partile comune si cum sa faci saltul de pe una la alta, de la low-level la high level fara sa te doara capul prea mult.
Cat despre corporatiile alea care sa crape… mai bine decat cu matura nu? Nu de alta dar nu cred ca ne permitem luxul de a ne baga pula-n corporatii asa usor.
@Sarius:
Cauta pe youtube dupa Derek Banas. Explica foarte bine omul.
Learn Python the Hard way e greu. Am ajuns pana pe la capitolul 47 si m-am oprit. Mi se parea deja prea greoi si parca lipsea multa informatie. Ceva foarte util si placut e o carte care se numeste “automate the boring stuff with Python”. O gasesti gratuit la automatetheboringstuff.com.
Bafta si nu dispera. Ia-le incet. Si gandeste-te in primul rand cam ce vrei sa faci cu Python sau whatever program intentionezi sa inveti. Gaseste-ti o problema reala: la tine la munca. Cum ai putea sa automatizezi. Fa-o sa fie cat mai monkey friendly posibil. Uita-te peste wx python si construieste-ti o interfata prietenoasa.
Dar cel mai important lucru este sa faci ceva care sa-ti usureze tie munca. In felul asta incepi sa inveti. Bafta si nu te lasa!
N-am apucat sa citesc toate raspunsurile, poate a mai zis cineva inaintea mea, dar la baza programarea e algoritmica, nu sa pui un form pe un site. Inveti la inceput notiuni de baza, cum sa lucrezi cu memoria si cum sa optimizezi algoritmul, si majoritatea implica matematica. Limbajul nu conteaza, ca e Turbo Pascal sau C++ (eu asta am facut la liceu si mai apoi la facultate).
De aia firmele adevarate, nu alea care vor sa angajeze tocilari si te intreaba care e diferenta intre o Interfata si o clasa abstracta, iti dau un test si te lasa sa-ti alegi tu limbajul de programare.
Sa-ti dau un exemplu clasic: sortarea de numere. Daca nu stii algoritmi ajungi sa faci o sortare cu complexitate O(n*n) in loc de O(n*log n) sau O(n). Cand sortezi 100 sau 1000 de numere nu se vede diferenta, dar cand ai milioane e diferenta intre (ipotetic vorbind) 1.000.000 sec si 1.000.000*1.000.000 sec, nu?
Sunt idioate aceste tutoriale. Programarea tine in principiu de invatarea paradigmelor/primitivelor: variabile, atribuire, if, bucle si a structurilor de date primare: structuri, vectori, matrici, liste, stive, cozi, mapuri, seturi, grafuri. Pe langa asta trebuie sa inveti cum se folosesc si aici incepe nebunia. Toata lumea incepe cu exemple de baza pentru aplicatii din matematica: suma a doua numere, maxim dintre doua numere, suma de la 1 la n cu bucle si restul de mui. Pana si sortarea prin metoda bulelor e cel mai inutil lucru pe care il invata toata lumea(unii chiar ajung sa scrie in productie asta). Abordarea asta fugareste multa lume din programare, pentru ca multi doresc sa realizeze ceva concret(un buton care aprinde un bec, sau trimite un mesaj). Multi nu sunt buni matematicieni, eu de exemplu n-am reusit sa invat nush ce cacat de obiect din anul 3, pentru ca desi scriam cod in C era o muie cu statistici si numere random si chestii – n-am inteles nici o pula, eu atat intrebam, care pula mea sunt datele de intrare si de iesire si gata.
Muile alea de matematica exista pentru ca asa invata toate gastile care ajung sa scrie tutoriale. Cei care stiu programare la un nivel serios, nu ar scrie niciodata tutoriale. Mai ales tutoriale despre un limbaj – in pula mea. Mi-a luat doua ore sa scriu ceva chestii cu butoane pentru Android si sa ia date de pe site si sa le puna pe ecran (atat a fost nasol sa intelegi frameworkul pacii) fara sa stiu java deloc – fain Android Studio, nu iau bani degeaba aia de la tooluri. Perl, pula mea, voiam eu sa parsez niste chestii. M-am uitat pe net ce si cum (variabile globale, vectori si cum ii indexez, regex, replace etc) si gata, 900 de linii de cod mai tarziu aveam un code generator – bine, codu pulii inauntru, dar facea ce voiam. Zic de codu pulii pentru ca e clar ca dupa ce inveti un limbaj trebuie sa mai inveti si chestii specifice lui, sau a frameworkului. De exemplu in Android sau Qt, te futi in el de limbaj, chit ca-i java sau c++, trebuie sa inveti api urile lor. C++ la fel, ma uit la codul meu de acum 10 ani, si arata fix cum arata perlul mai sus amintit. Cat despre programatori si utilitatea sau inutilitatea lor, ma doare la banana de ce crede lumea. Momentan o invat si pe nevasta programare si c++. Merge treaba, de cand am trecut de la afisarea a n numere dintr-un vector a [] la afisarea angajarilor dintr-un vector angajat [] altfel se prinde.
Alta balarie foarte-foarte rar utila. In orice limbaj mai business asa gasesti instructiunea SORT. Si te doare in pula cum functioneaza.
Iar daca nu stii cred ca-ti ia vreo 3 minute pe google sa gasesti un cod mai de doamne ajuta gen divide et impera recursiv, la fel de clasic ca teorema lu’ pitagora, ca-i scris pe toate gardurile.
Parerea mea subiectiva, de om care am invatat C si Pascal dupa cartile lu’ Tudor Sorin ( Una verde , una galbena si una albastra) si programare cu debug pe hartie si tot ce vrei in materie de bazele programarii si ale algoritmilor este ca e contraproductiv sa pui un adult sa-nvete programare cu C++. You don’t need that shit!
Ca si cum m-as duce acum la Manowar si i-as spune : Boss, cum invat si eu ceva linux ca am nevoie sa mananc si eu o paine, iar el m-ar trimite direct la slackware compilat din surse. Unde mi-as pierde toti dintii si parul din cap si acolo as muri injurand, pierzand timpul cu inutilitati.
Vrei sa “iti faci” sotia programator de C++ ( habar nu am de ce ai vrea, dar hei, nu le stiu eu pe toate) – ok, o inveti mizeria aia.
Vrea sa lucreze ceva mai nou mai high level si, eventual, mai bine platit? Pai cred ca-i mai eficient sa-nvete algoritmi cu bazele chestiei aceleia, cu cat mai putini vectori si cu cat mai multi angajati, date financiare si de business. Ca sa-mi spui si mie cand vine primul client sa te puna sa-i sortezi datele dintr-un vector cu metoda cea mai buna.
O sa vrea sa-i sortezi angajatii/ clientii/ tranzactiile dintr-un fisier/baza de date si-l doare in pula cum o faci. Iar daca nu-ti iese optim si lasa buza in jos, nu-i bai, in 10 minute poti gasi pe net cum s-o faci mai bine.
OK – nu toate-s pe net. Dar la nivel de incepator mi se pare pierdere de vreme sa futi pozitii prin vectori si ce zicea Manowar mai sus. Zic, lasa abstractizarea pentru aia care au reusit sa iasa din meandrele concretului.
@IulianS si @Vinil:
Eu sunt genul de programator care face totul intr-un singur thread. Un mic exemplu: Nu stiu daca poti sa ii vorbesti Photoshopului prin win32com in 2 sau mai multe threaduri.
Chiar m-ati inspirat sa mai insist putin pe threading. Am vaga senzatie ca poti parsa vreo 10k xml-uri in mai multe threaduri.
A se citi ca nu sunt programator. Dar mi se rupe cata vreme iese ce trebuie.
@orbu: instructiunea SORT exista la unele sisteme, si lipseste cu desavarsire la altele. Nu toata lumea programeaza aplicatii pt un calculator cu monitor, tsatatura, etc.
Sunt convins ca ai auzit de IOT – acolo ai device-uri cu sisteme de operare cvasi-primitive, si/sau relativ putine resurse de memorie ori de calcul. Si totusi trebuie sa functioneze, sa fie rapide, fiabile, gen…
@Mikimoto, pai cum am zis. Da’ hai cu IOT. Copilul de nici 9 ani troglodea ceva robot in scratch ala , grafic plm , pentru prosti. Sau copii, whatever.
Vrei sa vezi cat de repede gasesti cum sa face un sort IN AIA ? pentru IOT?
Am scris in google si am gasit asta. Amuzant si alta nu.
https://scratch.mit.edu/projects/170717750/#editor
Bineinteles ca daca esti platit pentru asta nu cred ca scrii cod in scratch, plm, probabil bagi cu text mode in arduino , altceva. Dar ideea e aceeasi. Intrebi pe goagle ” cum fac un sort?”. Zbang – ASA. Daca chiar nu stii.
Maicamea a fost profesoara de info, cand vedeam cum sta cu orele in calculator mi-am dat seama ca nu e de mine treaba asta. Am invatat ceva programare pana la urma si stiu sa scriu/citesc cateva chestii, dar n-as face asta full time.
Problema cu tutorialele, chiar si a celor care prezinta subiecte mai realiste, e ca tintesc spre putin mai mult decat minimul exemplu viabil pentru a realiza functionalitatea respectiva.
De multe ori, sunt diferente foarte mari intre codul pe care-l scrii cand implementezi ceva care sa functioneze in mod imediat si izolat si codul pe care trebuie sa-l scrii cand vrei ca functionalitatea respectiva sa opereze in productie:
– Ca parte a unui sistem mai amplu, cu un numar mai mare de responsabilitati, posibil afectate de noul segment de cod.
– In mod sigur si previzibil, chiar si in scenarii de posibil abuz din punctele de vedere ale integritatii datelor procesate si ale frecventei de rulare.
– Intr-o maniera corecta si rezonabil scalabila la accesari concurente.
Codul unei functionalitati in izolare poate chiar sa nu fie un subset al codului din productie.
Modul in care o anumita functionalitate poate fi implementata corect e sensibil la context, iar absenta unor atare exemple de contexte este marele viciu al multor tutoriale. In multe cazuri, te poate educa doar experienta obtinuta cu pretul invatarii din greseli.
Da orbu. Bine punctat. Practic vreau s-o invat ceva de baza. Am zis eu c++, dar inca n-am ajuns la mui din oop. Momentan imi doresc s-o fac sa inteleaga cum merge un program, un algoritm, cum sa gandeasca o problema de programare. Ca baza de invatare, ma ghidez fix dupa Tudor Sorin, clasa a 9-a, care e c chior(c cu cin si cout). Scopul meu e sa ajung acolo unde putem sa vorbim despre chestii programatorice. Eu atat stiu la nivel de “training”, c si c++. E foarte low level dar nu o sa insist foarte mult pe cacaturi de limbaj, momentan. Asa cum am zis, eu nu cred foarte mult in limbaj; ca daca esti prost, o sa scrii cod prost si in c si in c# si in java. De exemplu n-o sa insist sa stie ea sortarea unui vector cand, asa cum ai mentionat deja, sunt algoritmi facuti: std:sort (care face ceva hibridizare intre tim sort si nush ce, incat sa-ti dea ologn in loc de alte mui liniare sau exp). Nici macar nu am deschis subiectul de complexitate inca. Doar ma concentrez sa o fac sa inteleaga cum merg treburile. De fapt, daca ma gandesc bine, scopul meu e sa gandeasca in asa fel sa se inteleaga cum transformi probleme de programare in cod. Nu stiu cat de bine procedez, dar sunt deschis la idei(as deschide un topic pe forum chiar).
In ce priveste viziunea mea, vreau s-o bag la “uzina”, la conti iasi; sa treaca de interviu si dupa aia sa faca ei mentoring. Din cate vad, e simpla treaba acolo. Am prietene bata la programare, dar care au ajuns manageri si alte chestii; si care iau bani buni – dilbert paradox – cel mai prost dev va deveni manager)
Eu numai asta vad in domeniul meu – toti incompetentii ajung ceva sefi si iau bani mai multi, ca sa nu incurce echipa de dezvoltare gen.
Ca fapt divers, plec din nemtia unde sunt contractor de doi ani si ma duc sa traiesc “romanian dream”; eu o sa le ofer consultanta lui TiVo, in timp ce doamna sper sa dea cu tarnacopul la conti. Clar ca daca nu merge treaba,(nu pentru ea, dar pentru mine, ca deja vad derapaje inca de la discutiile cu contractul meu cu ei) o sa ne bagam pula in RO si onsa mergem unde vrem: bracelona, UK, bag to natzies etc.
Am mai zis de 1000 de ori cred, si de vreo 325 aici. Un amic si fost coleg a inlocuit la o companie o alta colega care era cam slaba. El era mai bun, la nivelul la care nu intelegea ca “a ia valoarea b” nu e acelasi lucru cu “muta a in b” .
Nu stiu daca asta inseamna suficient de bata pentru tine.
Praf, nu a facut vreodata un singur program care sa functioneze, gen sa fie facut de el de la cap la cap.
A lucrat la compania aia 2 ani, apoi a mers inaintea mea la altii care plateau mai bine unde l-au dat pana la urma afara, dupa 5 ani, timp in care a invatat altceva ( migrari de date) si castiga mai bine decat toti colegii de la jobul de la care a fost dat afara.
Asa ca, atunci cand vad infatuari cu “programatorul trebuie sa stie bazele pulii si pizdii” ma apuca rasul. Bah, e nevoie grava ( vorbesc de zilele noastre) de programatori care sa stie sa faca chestii de baza, ca un mecanic auto gen, sa lasam figurile de stiintologie si SF. Daca poti sa scrii cod de baza in orice limbaj cerut pe piata esti bun.
Cred ca C ( cu toate variatiunile +#$ si ce-o mai fi) nu e un exemplu bun. De obicei cerintele sunt mari in C si gasesti genul de angajatori care vor ce zicea Iulian pe acolo ( si eu am uitat jumatate din ce vorbeste el) , iar de platit platesc, in general, nu mai mult decat unii care vor sa le faci UI-uri si sa le futi date prin tabele, chestii de gradinita, daca e sa compari nivelul de intelegere de care ai nevoie.
@Orbu: eu dadeam un exemplu cu sortarea, ca ala mai sunt multe. Poti sa rezolvi o problema printr-un algoritm in mai multe moduri, unele mai bune, mai eficiente, mai usor de inteles si intretinut si altele mai proaste. Presupun ca si in SAP-ul ala al tau poti sa scoti un raport care sa ruleze in 10 sec sau 5 minute. Cam asta e diferenta intre cineva care are bazele si amatori.
Poti sa iti dau exemple de cod vazut de mine de te iei cu mainile de cap: ce putea fi scris intr-un SQL query un pic mai complicat era facut in sute de linii de cod de PHP; cod cu cometarii gen “hack” sau “quick and dirty, needs refactoring”. Cod scris de amatori, care atunci s-au apucat de programare si compania avea nevoie de cineva care sa le faca ceva mai mult decat puteau in Excel, oameni care bineinteles au ajuns CTO si VPs.
Ce zici tu acolo, ca algoritmii astia sunt peste tot e partial adevarat, dar ei isi structureaza gandirea si poti sa transpui o problema in cod in orice limbaj. E ca si cum ai zice ca nu trebuie sa stii sa citesti o harta, ca bagi in google maps sau nu mai trebuie sa inveti sa scrii de mana ca oricum scrii pe laptop/telefon.
Pana la urma ajungem la vorba veche: “teoria ca teoria, dar practica ne omoara”.
Fiecare dintre noi invata sa faca “chestii” in felul lui. Fiecare dintre noi are ritmul lui de a invata/realiza ceva si , ca atare, rezultatele vin mai repede sau mai greu. Cred ca totul tine de pasiune si/sau motivatie.
Subscriu si eu: multe tutoriale sunt niste mizerii. Dar unele astfel de mizerii, pentru un anumit tip de oameni sunt ok.
Pentru mine echivalentul unui exemplu este cat o biblioteca cu carti de teorie…..
Pentru cei interesati de aprofundare aruncati un ochi aici: http://www.foxebook.net/
Babaetz, pare un fel de ad labam in cerc aici, unii care vor sa para zei ai programarii si zen-masterii care zic ca programarea nu conteaza (ceea ce e dubios, avand in vedere ca folosesc scule animate de jdemillioane de linii de cod ca sa puna commenturile alea aici – apropo si de “moarte corporatiilor” pe stil “ne-au futut americanii” in timp ce bem cola, vorbim la ifon si mergem cu gpsu’ prin trafic, eventual si prin vreun ford sau ceva).
Singurul care pare mai legat de subiect e IulianS, dar boss, precum vezi in principiu iti racesti gura de pomana, esti (suntem) prea oldschool. Si Orbu are dreptate: programarea e destul de usoara la cati prosti o mimeaza cu succes in prezent, nu e nevoie sa stii ce face STL-ul in spate sau modulele de py sau ce dracu rontaie HANA aia atat. Nu mai sunt vremurile de alta data cand malloc si free si ocazional poc, acum vine cineva (sa zicem programator de mobile) pe care-l doare la banana de memory management, el instantiaza p-acolo si sa se ocupe garbage collectorul cand are timp. N-are nevoie sa stie de threaduri si d-astea, face frameworku’ in spate daca vrea si are nevoie, nu-i bai. Desigur, neinteresandu-te detaliile astea nici n-o sa avansezi mai mult de nivelul curent, dar hei, pentru majoritatea e suficient un loc caldut.
Revenind la rant-ul initial, tutorialele sunt scrise de niste gigei in timpul lor liber, si nu neaparat de gigeii de la care ai vrea sa inveti programare. Aia de la care ai vrea sa inveti ceva n-au chef/timp nici macar sa-si documenteze codul lor, ce sa mai zic de sa tina tutoriale pentru altii. Ca atare tutorialele sunt cum sunt. De la un nivel incolo insa, a invata un nou limbaj de programare e chestie de cateva zile, nu prea te mai intereseaza tutoriale. Te uiti pe o sursa existenta care lucreaza cu ce ai nevoie si aia e, in zilele noastre si goagal search powah e deja banalitate.
Oameni buni, pentru cineva asa un pic incepator, nivel ‘Hello world’, de unde ati recomanda sa inceapa sa invete programare? Un limbaj anume?
@Altcalic: De acord cam cu tot ce zici. Dar uite, pentru un profan care vrea sa invete bazele programarii, e o informatie buna, care poate fi gasita la un simplu search si mai e si gratuita. Poti gasi ce-i drept, zeci de tutoriale clasice gen adunari, scaderi, impartiri, sortari, bucle for, loop, chestii pe care le gasesti in mai toate. Treaba e ca sunt multe tutoriale in care omul nu prea stie sa explice, nu are o metoda anume. Dar ideea e ca inveti sa rezolvi probleme cu un limbaj de programare. Si ai acolo baza. Chestii de sintaxa, concepte. E un inceput. Si daca vrei mai mult, exista comunitate. Te duci la un meetup unde vezi prezentari, citesti niste carti. Ce faci cand nu esti in domeniu, dar ti-ai dori sa intri in domeniul ala? Ei?
Depinde doar de tine in ce masura cauti sa aprofundezi subiectul.
Pai eu ma mai uit in urma pe cate un cod scris acu 3 ani si imi dau seama cat de prost l-am scris prin comparatie cu ce scriu acum. Si stii ce? Nici acum nu ma pot lauda ca vai ce ma pricep la scripting.
@Turmentescu
Ia o problema care stii/simti ca se poate rezolva mai usor cu ajutorul unui program. Aici depinde de tine, eu unu am inceput cu ceva grafica – nimic spectaculos, linii, dreptunghiri, ceva text etc – suficient pentru a afisa niste grafice frumoase. Ia un limbaj in care ai auzit ca se poate face asta si tine-te de treaba. Dupa ce ai terminat, adica copy paste de pe diverse site-uri sau documentatii, incearca sa intelegi mai bine ce e acolo. Cand esti in stare sa ii poti explica unuia ce e acolo cat de cat detaliat te-ai scos. Tu poti incepe cu altceva, dar din experienta iti pot spune ca daca nu stii ce sa faci ia un manual de matematica/fizica/chimie de liceu/facultate etc, ia un fenomen de acolo (plan inclinat de la mecanica sau ceva electricitate (curentul alternativ e un exemplu misto ca sa vezi sinusoidele alea cand tu modifici pe acolo parametri la bobine sau condensatori) sau mai simplu ceva matematica – sisteme de ecuatii, derivate, integrale) si incearca sa iti imaginezi ce ai vrea sa vezi tu, sa rezolvi etc.
Hint: pe manualele alea vechi (manualul.info) era pe la sfarsitul capitolelor si ceva exercitiu de programare in fortran sau ceva de genu. Foarte interesant si nu stiu daca s-a pastrat obiceiul asta si acum.
—
Multe pareri de mai sus sunt foarte corecte: nu trebuie sa stii toate dedesubturile, kernel, arhitectura (386, 486, pentium, mmx, x86-64, arm, c167 etc) toti algoritmii. La naiba, n-am scris un algoritm de arbori de cand cu lumea (15 ani?), red-black trees sau balanced trees am doar idee ce e acolo, n-am scris in viata mea; n-am rescris ceva algoritmi de sortare de cand invatam programare si prin niste teme absurde (15 ani).
Dar trebuie sa fii totusi dispus sa te arunci in rahat cand se impute treaba. Am avut frustrari maxime cand un cod imi mergea pe debug si nu mergea pe release din cauza unui bug de optimizare in compilator (si cu ala de la borland pe win32 si cel de la gcc pe arm). Acolo ajungi fara sa vrei direct la assembly si intr-un timp rapid ajungi sa fii mana in mana cu un nou limbaj de assembly. Sau sa corectezi algoritmi care nu merg bine sau drivere care din cand in cand mai pierd un pachet. Spun sincer ca prefer buguri cu crashuri de aplicatii (core dump etc) pentru ca ajungi usor la problema. Cand e vorba de ceva logica, algoritmi, optimizari, ai sanse sa stai si 2 saptamani si sa fii ca-n prima zi: fara solutie.
@Ala: n-am mai programat niciodată în sensul că n-am scris cod per se, să deschid un editor de text/framework și să scriu eu un program/script de la zero absolut. Dar am făcut oarece analiză de cod, în sensul de inspectat cod (de regulă malware, nu chestii legit) scris de alții și identificat/extras chestiile de interes din el. Mulțam de recomandare, am dat deja Enroll.
@Ctr: exactly my point și cred că e și subiectul articolului. Pe lângă faptul că exercițiile mi s-au părut și mie de căcat, asta mi-a futut mie meciul cel mai grav, că ăla își recomandă cartea ca fiind curs de Python da’ te pune să cauți nu știu ce noțiune/termen/element de sintaxă în alte părți. PLM, eu sunt omul care dacă merge la un curs se așteaptă să învețe exclusiv din cursu’ ăla ce e de învățat, nu să o ardă pe Gugăl în timpul cursului.
@CrazyVibes: mulțam de recomandări, am băgat deja bookmark la carte și pe canalul de YT al omului. Eu cam știu ce vreau să fac cu Python pentru plantația unde dau cu sapa. Și, apropo, wxPython se mulează fix pe cerințe, că am o grămadă de maimuțe pe care le bate o fereastră de Notepad, un GUI monkey-friendly ar fi bun la casa omului. Mulțam și de urări, o iau ușor și cu cafea/țigări, lol.
@Sarius
Ca tot ai mentionat ceva de wxPython poate asta te ajuta: https://github.com/undergraver/PythonPresentation/tree/master/03_demo
Ai si un gui designer misto: wxFormBuider care-ti genereaza cod python pe care-l poti utiliza – e in exemplu.
Face parte dintr-o prezentare mai mare facuta pentru a fi interactiva:
https://www.slideshare.net/undergraver/python-a-practical-perspective-36369154
https://github.com/undergraver/PythonPresentation/
@ IulianS: mulțam și ție pentru resurse, le-am băgat la bookmark și o să le studiez.
Crazyvibes: pai asta zic, tutorialele alea par stupide pentru ca se adreseaza unor oameni care nu prea au treaba cu programarea, nu neaparat cu limbajul respectiv in sine. Daca vrei programare, nu tutorialele de limbaje sunt inceputul, ci teoria programarii: algoritmi, complexitati, ceva arhitectura procesor si cum e cu memoria, liste, d-astea. De asta n-o sa se poata numi programatori niste oameni carora nu le e foarte clar ce e in spatele framework-ului pe care-l folosesc, dar ei se lauda ca stiu X (unde X e angular sau whatever). Nu, baietii aia sunt niste executanti de 3 la kil care cata vreme nu sunt scosi din bula lor o sa faca o treaba semi-ok, dar inevitabil vor ajunge la ceva buguri sau probleme de functionalitate pentru ca la un moment dat nu vor intelege cum codul lor interactioneaza cu alt cod sau cu lumea inconjuratoare (retea, procesor, latente, whatever). Iar astea sunt chestiile finute, nu buguri de compilator/kernel/microcod cpu la care debughezi cu zilele, cum zicea si IulianS (da, been there, pun pariu ca nu multa lume stie ca si microcodul are update periodic pentru ca sunt buguri la interpretarea unor instructiuni, desi dupa spectre si meltdown s-a mai popularizat conceptul).
Din punctul meu de vedere alea este o confuzie majora sa te astepti sa inveti programare din tutoriale de sintaxa, that shit won’t work. Vrei programare, incepe cu Cormen, Knuth si alti baieti de genul (cred ca si astia doi iti ajung ca sa fii decent). Vrei limbaj de programare, any tutorial will do cata vreme vezi cum se declara o functie, cum se paseaza parametrii, care sunt structurile de date si control si apoi daca te intereseaza mai mult poti vedea si subtilitatile limbajului.
@clawbc chestia asta cu performanta e relativa rau. Adica pt tine diferenta intre 10 sec si 5 minute este mare, dar revenind la exemplul lui @Orbu majoritatea “aplicatiilor” care se dezvolta acum sunt chestii care sa imbunatateasca/automatizeze un proces.
De multe ori acel proces este o chestie care dura x ore si era facut de y oameni. Daca vine un programator praf si in loc de x ore dureaza x ore – 1 minut doar ca acei y oameni au treaba acum doar 5 minute (cu acel proces) niciunui manager nu o sa ii pese* ca se putea “automatiza” mai bine. Chestia asta e doar asa de mandrie la programatori, ca o solutie nu e optima sau ca eu as fi facut mai bine.
*Nu o sa ii pese atat timp cat costul cu processing power si dev/maintenance cost este mai mic decat ce salveaza/castiga in plus avand y oameni care se pot ocupa de altceva in timpul ala.
@turmentescu
Ti as recomanda javascript, e usor, flexibil si poate in timp ajungi sa faci si chestii interesante gen webservice odata/ soap. Asta ti ar deschide multe perspective nu doar sa tragi de butoane prin pagini web. O carte buna e a lui david flanagan, definitive guide javascript. Or mai fi si altele
Personal am trecut prin multe limbaje de la turbopascal, c/c++, c#, js, chiar si cobol :))) sau ruby. De la un punct incolo incep sa semene si te adaptezi mai usor decat daca o iei de la zero. Nu cred ca matematica e de cheia programarii ci logica. Matematica in schimb te ajuta sa intri in anumite cercuri, exemplu matematica/automatica unde poti sa ai norocul sa dai peste unii chiar foarte talentati. De la care poti sa inveti. Sigur ca poti sa inveti programare si pe genunchi la filologie dar e mai simplu s o faci organizat, sa iti explice cineva, sa inveti devreme, sa ai probleme complicate de rezolvat etc…
Cu tutorialele cam asa e… majoritatea sunt gunoaie. Aia care chiar stiu n au motive sa piarda vremea cu povesti. Totusi ai mii de forumuri, codeproject, stackoverflow etc unde orice dilema ai poti sa afli o sugestie sau sa intrebi ce ti trece prin cap
Success tuturor. La cum stau lucrurile, majoritatea programatorilor de azi sunt oricum niste utilizatori de frameworkuri, ‘manageri de cod’ si mai putin scriitori de cod plus valoare. Programarea ramane un domeniu oarecum inaccesibil doar pentru ca logica elementara incepe sa fie un fruct rar sau prea complicat
N-are treaba cu logica elementara. Are treaba cu cat de dificil e sa gasesti ceva materiale de training bune. Si nu-i doar la programare problema asta, am vazut-o si la cisco/linux/mysql. De bine, de rau, cu ultimele 3 te descurci singur fara mare bataie de cap. Cu programarea…mai greu. Mai ales cand se schimba de la o zi la alta ce e cerut. Sigur, sigur “stiu conceptele de baza, restul e banal”. Bineinteles ca-i banal. E atat de banal incat nici nu stiu de ce nu se muta toti aia cu java pe go fix acum, de exemplu. Nu de alta, da’ cererea e imensa, salariul enorm. Da’ cumva, desi “au conceptele”, tot pe java-i gasesti. CSF, NCSF.
Inca mai rad la asta. Poti sa definesti un scriitor de cod plus valoare?
Cre’c-o trec in CV p-asta :)).
sigur si materialele conteaza dar cred ca are treaba mai mult cu cat timp/efort e dispus sa aloce cineva, mai ales ca rezultatele nu se vad imediat.
lucrurile se schimba de o zi la alta, cateodata o moda, o tehnologie noua etc
go e pe piata de cativa ani, ‘evanghelizat’ puternic de google, ma indoiesc ca se ‘muta’ toti programatorii de java fix acum. dar normal ca daca apare ceva care se plateste mai bine, inveti si aia. si cobol se plateste bine, pentru cine are ghinionul sa mai tina vreo masina ibm la care se uita toti ca la dinozauri
daca isi imagineaza cineva ca c/c++ o sa fie inlocuit de altceva prea curand, e neinformat sa nu zic naiv. pentru cine are nevoie de viteza de procesare, nu exista alternativa la c++. daca viteza nu conteaza, da atunci putem sa ne ‘mutam’ pe frameworkuri, garbage collector etc
@orbu
e destul de simplu, c++ inseamna plus valoare
success la trecut in cv
@ Altcalic
Bai, cu Iulian ma intelegeam intr-o masura, adica ajunsesem la ceva punct comun, dar cum tine e mai complicat ca ai trecut “programatori care stiu doar X framework/limbaj nu se pot numi programatori”.
Bai, sunt sigur ca ala care ti-a montat baia a stiut exact cum sa produca un vas WC de la 0 cu o mana de lut sau din ce e facuta chestia aia. Apoi a batut metalul pentru dus, a asamblat de la 0 partea electrica, sticla si suportul pentru cabina de dus. Baiatul care ti-a asamblat unitatea i-a fabricat si procesorul si portile alea dubioase intai, fiindca asa merge lumea.
Nah, eu stiu ce stiu, nu’s zeu ca voi, dar tin asta tare, clar, si nici nu m-am izbit de scenarii serioase in care trebuia sa stiu ASM sau diferenta dintre heap stack si parabeng. Programarea in limbaje de nivel inalt e un fel de lego. Stii niste componente, le asamblezi cat sa iti iasa ce trebuie. Si ti-as recomanda o gaura in care sa iti introduci dispretul asta dubios pentru programatorii care nu stiu sa-si scrie singuri compilerul si limbajul de programare, dar prefer sa las asta la imaginatia ta.
Pana acum am vandut faptul ca stiu sa fac proiecte iOS, si nu am gafat prea serios in asta. Adica proiectele ies, fac super ok ceea ce sunt platit sa fac. Tam tam.
Legat de programare si de topic, e mai usor sa inveti ceva de nivel inalt intai, inveti sa conduci masina, apoi te uiti sub capota sa vezi de te intereseaza cum functioneaza motorul. Si sa te amuzi ca te dispretuiesc astia ca stii doar node si nu poti discuta 1 la 1 cu procesorul in binar. Am mai intalnit din astia la interviuri, si am ajuns mereu sa-i intreb sa imi dea exemplu de un caz concret in care i-a ajutat ca au stiut diferenta dintre stack si heap. Genul de sinistri care cred ca garbage collectionul automat e unealta lui Satan si fura puritatea programarii in gen ca nu mai dealoci tu pointerii. Damn. Ma amuza fantastic cum zic “…dar… e bine sa stii”. Da?…
@vinil
“Si sa te amuzi ca te dispretuiesc astia ca stii doar node si nu poti discuta 1 la 1 cu procesorul in binar.”
confunzi lucrurile, nu e nici un dispret, e diferenta intre 200-400£/ zi si 5-600£ sau 800-1000£/zi, atata tot. ITul e un domeniu vast, chiar e loc pentru toata lumea si cam orice ai face tangent cu asta iti asigura un salariu de la decent in sus oriunde in lume
Ca nu mi-am terminat povestea: din cauza acestor amatori (care intre timp au plecat / au fost dati afara) compania inca trage si la 8 ani distanta, ca e f greu sa schimbi ceva care e deja in productie si a acumulat sute de functionalitati.
IT-ul este un domeniu foarte vast, nu merge cu generalizari. Si chiar asa, daca procesul ala dureaza 28 de ore sa agrege date sau sa faca nu stiu ce minune pentru ultimele 24h, crede-ma, o sa ai nevoie de optimizari.
De ex. in web-development, adica facutul de site-uri, care include si aplicatii interne dar web based, este foarte important sa dai un raspuns sub cateva secunde, altfel userul se plictiseste si pleaca de pe site. 99% din site-uri doar muta date dintr-o parte in alta si le afiseaza frumos, iar web-developmentul e un domeniu la fel de mare ca si optimizarea de procese.
Pai am in CV, da’ ala e cam minus valoare. De prin 2002 oricand am avut sansa sa lucrez productiv pe C sau altceva , C a fost minus valoare , un fel de C–.
Altceva ( orice-ar fi fost ala ) a fost ++ in comparatie cu banii de pe C, desi eram mai putin cunoscator.
Si cam aia e plus valoare pentru mine. Ma lasa absolut rece viteza de procesare pe, ca eu calculez eficienta limbajului si plus valoarea in $/s nu in operatii pe secunda.
Daca viteza de procesare a lu’ C++ era atat de importanta zburau dolarii in toate directiile si erau cele mai bune platite joburi din galaxie. Da’ nu prea-s, nu?
Ceea ce inseamna ca nu prea aduc plus valoare $$$$.
Parerea mea. Valoarea se masoara in bani, nu in instructiuni pe secunda.
Boss, Java de OOP, golang e programare functionala. Alta mancare de peste.
E ca si cum ai zice: “Nu inteleg de ce admini de linux nu trec maine pe windows, tot aceleasi concepte sunt.”
EXACT
In cazul in care am fost prea subtil, aia era o ironie – o chestie pe care o auzi des de la programatori. Ca “stiu conceptele, asa ca invat rapid herpaderp”. Mda, dar mnu prea.
E overrated C++ la capitolul viteza oricum.
Adica, sigur, daca discuti de sisteme vechi (single core) si servicii mai vechi, da, in comparatie cu restu’, ruleaza (daca poti trece pe droguri ca sa supravietuiesti la capitolul tooluri, probabil). Cand discuti insa de multicore si de ce se cere acum (coispe miliarde de threaduri/tranzactii, queues etc), nu as paria ca iese chiar castigator.
Zilele astea se merge nitel mai mult spre alte chestii, chestii care sa aiba coispe milioane de clienti din coispe tari. Nu-s programator, da’ cred ca stiu cine castiga.
Vinil, nu era dispret, nu mai mult decat al tau propriu cu “ce fac eu poate face si o maimuta cu o luna de training”, deci ce sa zic. Hai s-o luam simplu, eu am facut ce faci tu printre multe altele, tu n-ai facut inca ce am facut eu, asa ca nu m-as lansa in katerink ca tine despre programare, ASM, C, optimizari si “aproape toata programarea inseamna insert/select din db”. Eu am zis doar ca ai locul tau caldut cu aplicatii pe iOS, cu care de altfel pare ca esti si tu de acord (“imi da lumea sa fac pe ios, le fac si ma platesc pentru asta”), mai faci un lego, deci care e problema? Nu zic, e misto sa faci asta decat sa-ti bati capul, cand lucrez la asa ceva e aproape relaxant (ma rog, cat de relaxanta poate fi munca in loc de stat degeaba).
Asta e din cauza ca n-ai discutat cu prea multi programatori. Aia pe care-i mai cunosc eu sunt genul care fac tooluri in go/ruby/nodejs doar ca sa vada care e treaba cu ele. Ce-i drept nu stiu multi “programatori de java”, mai degraba programatori care “stiu si java”.
Domeniul asta e prea vast ca sa emiti generalizari simpliste despre ce inseamna programarea. Si baietii aia care au trimis apollo pe luna tot programare faceau, la fel ca un blogger care-si customizeaza un pic tema de wordpress. In teorie toti sunt programatori, in practica e ceva mai complicat. Cam la fel cum sunteti acelasi fel de admini si tu si tipul ala de care povesteai ca nu stie sa dea “ls”.
@orbu
cauta dezvoltator c++ pe londra, eventual banci, vezi cat se plateste si daca se ridica la “plus valoarea in $/s nu in operatii pe secunda”.
@manowar
“E overrated C++ la capitolul viteza oricum.”
:))) sincer seamana a gluma de targovetz nu ITst. Suntem si noi cunoscatori de linux, stim sa dam ‘ls’, dar cum ruleaza oare, cum e SO scris, in ‘GO’ ? vxworks daca ati auzit, de fapt cam tot ce misca in materie de sistem de operare, real-time.
Ok, pentru cine s-a trezit mai tarziu, cand va urcati intr-un avion airbus/boeing sa stiti ca sistemul de operare asa zis calculator de bord ‘in spate’ ruleaza c/c++. Toata partea de comunicatii/interfete tot c/c++. Cand apesi butoane prin masina scumpa, tot c/c++ ruleaza e in spate. Sigur, o fi si vreo interfata in html/js sa arate frumos si colorat, a, da si help-ul! Dar sigur, poti sa le povestesti ca e ‘overrated’ in materie de viteza :)))
Poate daca citeai ce-am zis legat de sisteme vechi si single core intelegeai. Poate. Improbabil totusi.
…si astea sunt sisteme noi cu milioane de “tranzactii” si au in spate procesoare cu 12-18 cores, nu-i asa?
E DOAR overrated. Gandit aiurea, sintaxa si erori cretine in unele cazuri (de ex: template-urile), lasat de izbeliste pana cand au inceput sa mai faca si labagiii aia de la standard ceva C++0x, C++11, C++14 … (nu de alta dar parsarea unui string in C/C++ era treaba de psihopati comparativ cu alte limbaje … psihopati cam ca mine ar zice unii pe aici) Un limbaj lent in evolutie dar stabil in general. Binary compatibility e un cacat sinistru intre compilatoare samd. Noroc acum cu clang ca au aparut tooluri de analiza statica si acum fiecare editor isi poate rula diverse teste pe codul sursa cu ajutorul lor mai scapam de dezastrele de sintaxe si probleme comune ( if (x = 1) … si slava pulii are destule si te sperii cand citesti de el la inceput) (da, acel clang inceput si sponsorizat de apple da?).
Adevarul e ca 80% din proiecte merg intr-un limbaj mai lejer cu partile hardcore, de performanta scrise in limbaje low level (aici dupa gustul fiecaruia: Rust, C, C++, D etc).
DAR
Inca nu e ceva mai rapid decat el, single threaded, multi threaded ce vrei tu, nu de alta dar e un layer foarte subtire intre cod si bare-metal, asta e avantajul lui. Acum cu clang exista noi posibilitati in optimizarea codului (deja rapid), deci inca mai e ceva de imbunatatit la battery lifetime pe mobile/laptops.
E printre ultimele refugii cand limbajele de nivel inalt isi arata limitele (Hello Python, Hello php – HHVM anyone?). Dar rapiditatea nu e data doar de limbaj ci si de alte lucruri precum algoritmi eficienti, structuri de date ok, cache misses care vrei nu vrei tot la nivelul ala de cacat de C/C++ te duc, daca nu chiar mai jos. Evident, daca ajungi vreodata sa ai nevoie. Cele mai tari web servere inca-s scrise-n C, deci inca e nevoie. La embedded la fel, s-ar misca telefoanele ca pula daca ar fi scrise-n altceva softurile de baza de pe ele. N-am auzit inca de kernel scris in altceva decat C/C++ si utilizat pe scara larga. Jocurile pe calculator tot de acolo isi trag seva, ca bucle de genul “while(!quit) DrawScene()” nu prea-s asa eficiente in alte limbaje. API-ul de opengl/openal e C.
Deci, da, e un limbaj neinteles prea bine de lume, dar folosit corespunzator e foarte eficient. Depinde daca e “the right tool for the job”.
N-am zis nicaieri ca ar fi inutil. Pe aplicatii vechi, pe single core, probabil nu avea rival – all things considered.
Doar ca intre timp lumea s-a schimbat si procesoarele n-au mai mers pe coispe ghz, ci pe coispe cores a cate coispe ghz, iar serviciile oferite/cerute s-au schimbat.
Atata tot.
Manoware,
nginx, lighthttpd, apache, astea-s aplicatii vechi? merg doar pe single core?
Last time I checked C/C++ mergea bine pe multi core, multi thread si ce vrei tu. De unde ideea asta bizara?
@Lumi:
Am cautat acum de curiozitate. 30 -70k.
Am gasit cu range de 70-90k dar tre’ sa stii o caruta, nu numai C++. UIte.
“C++ Developer – Trading, C++, SQL, Boost, Python, Java, Oracle, Multithreading / Multithreaded”
Gen – mai da-i in pula mea cu cerintele lor, da’ o muie nu vor, pe nouaj’ de mii?
Ma intreb cat din 90k e pentru C++ din treaba asta.
Am cautat contracte , ca asta ma intereseaza pe mine de exemplu – desi, in momentul de fata nu-s la nivelul la care sa ma prezint pentru interviu de programator senior de C, ca matura aia cu mine pe jos.
Tot ce trece de 400 de lire/euro pe zi e pe C++, iar plus plus e reprezentat de alte limbaje, python, Java, .js etc. Si-atunci mi-e greu sa stiu cat face C-ul din treaba asta.
La treaba cu aviatia si auto, nu comentez legat de cat de rapid e. Eu stiu de ce se foloseste C++, tine mai mult de embedding decat de viteza, dar refuz sa fac asemenea asocieri
Daca avionul merge repede nu-mi trezesti o reactie in creier cum ca e din cauza ca C++ e la fel de rapid, sau ca-i pe baza de C++, sau ceva asociere.
Raman la -ma uit cu cat se plateste un altfel de job si cam atat.
Si cate joburi gasesc, desigur.
Da. Care parte n-ai inteles-o din milioane/miliarde de tranzactii? Ce vrei sa-mi arati, un apache basit cu 1000 de clienti?
Incearca sa gandesti la nivelul de aplicatie cum ar fi…google maps la ora 6 PM prin US. Nu la nivelul “apache”.
Simte-te liber sa citesti pe tema concurrency/go – gen de ce l-au facut (vezi partea cu threads/cores/goroutines in special). Eu deja am facut-o – ca eram curios de ce se cere din ce in ce mai mult in ultima vreme. Gen de ce plm e go all the new rage prin toate job descriptionurile pizdii. Ca ma cam deranja ideea ca m-am chinuit sa inteleg ceva python si acum toata lumea imi rupe pula cu go, asa c-am vrut sa aflu de ce, ce-i asa de special la el.
N-am zis nicaieri c-o sa inlocuiasca C++. N-am zis nicaieri ca o sa porteze lumea tot ce-i pe C++ pe go sau ceva. Am zis ca C++ e overrated la viteza. Ca era bossul bosilor pe vremea single core, probabil. Doar ca lucrurile se cam schimba. Sincer, mi se cam rupe pula daca pricepeti sau sunteti dementi de-aia dispusi sa se ia de gat cu lumea ca “a zis ala ceva de limbaju’ meu de programare…”
@Orbu
sunt si de 30k si de 50k si de 90k si de mai mult, uite cateva mai jos
C++ Developer Windows Fixed Income Banking Contract
Talented C++ Developer required to join a leading European Bank within the Fixed Income technology space. The successful applicant will join a well performing technology team and will be responsible for the development of new applications requested by the business.
The successful candidate can look to receive up to £650pd
Skills, experience and qualifications required:
Exceptional C++ development experience on Windows platforms
Thorough knowledge of STL and Boost libraries
Strong experience with multithreaded development
Strong experience with multi-process architectures
Fixed Income knowledge is useful but not essential
No prior financial knowledge is required
C++ Low Latency Developer – eTrading – Tier 1 Investment Bank- £125K
Our client is a multinational Tier 1 investment bank in London looking for highly skilled C++ developers to join their high-frequency, ultra-low latency eTrading team.
The ideal candidate will have extensive knowledge and experience in C++ development, and experience working Front Office, ultra-low latency environments.
In the role, the successful C++ developer will be building greenfield FX eTrading components for one of the market leaders within this space. This role offers fantastic business exposure, and an opportunity to work very closely with senior traders, quants and sales people within the organisation
The C++ developer can expect a salary between £95k – £125k base plus a healthy bonus + package.
Skills Required
Highly skilled C++ development background
Skilled in ultra-low-latency environments
A strong desire to build greenfield eTrading software
Strong academic background in; Computer Science, Engineering, Maths, Stats, Physics
Able to work competently both in a team and independently
A full job specification is available upon application
C++ Developer Low Latency Prop Trading Market Making
Growing proprietary trading firm seeks an exceptionally talented C++ developer to join its small, close-knit team with the task of solving complex software development challenges related to latency, performance and optimization. The successful applicant will be required to work closely with a variety of trading teams in order to improve the efficiency of trading strategies and improve trading platforms utilizing low level technology.
The successful applicant can look to receive up to £150,000 depending on experience level
Skills, experience and qualifications required:
Expert level C++ low level development skills
Experience designing, architecting, coding, and optimizing low level Real Time systems
Strong problem solving ability with a passion for software development
Strong communication skills
Strong knowledge of working on a Linux platform
Knowledge of Python is desirable
Buni banii aia . Atunci poate-i doar experienta mea de vina si-mi retrag cuvintele. Nu am intalnit oportunitati de genul.
C/C++ are (si) in zilele noastre aplicabilitate buna, pentru ca e un domeniu in expansiune unde se plateste bine si discuti doar in asa ceva: hipervizoare si aplicatiile legate de asta. Also daca algoritmul tau e serial (si nu poate fi paralelizat), orice calculator din zilele noastre tot single core e. Overrated la viteza nu e, doar ca viteza nu mai este un factor diferentiator in multe din “branchurile” programarii actuale. Acolo insa unde se cere performanta, n-ai cu ce sa-l inlocuiesti (ma rog, il poti inlocui cu alte limbaje care-ti compileaza un binar, dar nu sunt prea multe din astea).
Nu am zis absolut nicaieri ca “e pe cale de disparitie” sau ceva de genul ala.
Tot ce-am zis e ca e overrated la viteza, acum, in 2018.
Go e specializat intr-o anumita directie. Foarte bine pentru el.
Am zis mai sus destule chestii negative de C++, pe mine nu ma-ncalzeste un limbaj sau altul, si am mentionat si “right tool for the job”. Mai citesti o data si tragi propriile concluzii.
La fel putem discuta si despre erlang, tot definit cu un scop precis (concurency/fault tolerance/hot swapping). Depinde la ce-l folosesti.
Pai tocmai asta e ideea, ca nu el e overrated la viteza, acolo unde se cere viteza e still king. Problema lui e ca procesoarele acum sunt de 10 ori mai rapide ca acum coispe ani, in timp ce perceptia umana e aceeasi (adica perceptia de “sa-mi bag pula cum zboara” vs “vai ce lag are fereastra asta”) si ca atare plusul de viteza pe care ti-l da C/C++ nu mai conteaza la modul general.
Cand or aparea drivere de windows sau o sa fie kernelul de linux sau macar vmware/kvm/xen scris in java/go/.net atunci poti spune ca c/c++ e overrated la viteza. Zic si io.
Uite, daca vrei un exemplu de limbaj care chiar a devenit overrated la viteza asta e ASM. Chiar nu mai ai nevoie de el, pentru ca si “hand written” shit se cam apropie de ce scoate un compilator decent din C, iar efortul de dezvoltare e 10x. De asemenea, nu mai ai nevoie de el nici ca sa ai acces la diverse chestii “ascunse”, gen instructiuni MMX (pe vremuri) sau AVX (recente), pentru ca orice compilator iti pune intrinsici la dispozitie pentru ele, asa ca asm chiar e overrated aproape din orice punct de vedere, exceptand cateva corner cases (init-uri de sistem, diverse arhitecturi dubioase unde nu ai compilator, etc).
Meanwhile in London
“Tutorialele” bune, cu exemple, sunt facute tot de utilizatori. Pe mine m-au ajutat foarte mult comentariile de pe php.net atunci cand cautam informatii despre o functie sau alta pentru ca oamenii dadeau acolo diverse exemple practice.
Mai am juma de comentarii de citit, d3ci daca repet idei, plm, cacat se întâmplă.
1. Ifu nu e programare. Eventual sa nu fie chestii dubioase.
2. Exemplele sunt cu chestii abstracte. Nu poti sa cauti tutoriale specifice ca is aiurea. Tutorialele te invata, exemplele alea ale tale te platesc
3. Adevaru e ca programarea suge. Se schimba la an. Imi pare rau ca nu am mers si mai tare pe baze de date.
Spor la calculat facturi, rapoarte numa cu selecturi din baze/de pe net, fara sa intelegi chestii de biznis, chestii de conta etc
Nu vorbesc de programarea complicata, unde matematica e d-aia fara cifre
Baietii care de fapt erau o tipa si niste baieti. 😀
https://en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)