Programare pe de rost

Dupa cum spuneam, fiecare are stilul lui de a invata si de a prinde. Faptul ca are 1000 de pagini nu inseamna ca trebuie sa o citeasca pe toata, ci sugereaza faptul ca este stufoasa si gaseste multe lucruri acolo.
In fine, am incercat sa nu fiu subiectiv si sa ii dau niste principii, dincolo de exemplele de carti. Cel mai probabil isi va face o lista de resurse din toata discutia asta si va pastra ce i se potriveste cel mai mult.

Speaking of which:

Un video foarte interesant, eu l-am vizionat in 3 transe din lipsa de timp. Este deranjant pentru unii, prezentat de un batranel haios, care expune exact aceasta idee de organizare… sau lipsa ei in randul programatorilor.
@RedGuard, mi se pare foarte legitima intrebarea ta. Eu ma bat in fiecare zi de ea. Cred ca i-am oferi un exercitiu dragut de gandire lui @AlucardSama04 daca am raspunde la ea fiecare, in cazul in care @iamntz nu considera offtopic.

De unde ai tras tu concluzia aia cu dezordinea? Nu de alta, dar altii, in aproape aceeasi categorie de pseudo stiinta, zic ceva cam pe dos: https://www.psychologicalscience.org/news/releases/tidy-desk-or-messy-desk-each-has-its-benefits.html

O caracteristica importanta a unui programator bun e lenea (nu numai aia de a-si face ordine in camera). Ala ‘harnic’ va scrie 10000 de linii de cod, pe cand cel lenes va implementa aceeasi functionalitate cu max 100 :slight_smile:

Problema e că ai recomandat-o în primul rând.

1 Like

Nu am tras-o eu, ci nenea din clip.
Lenea in acest context este o figura de stil. IMHO, cel mai bun programator va scrie 10000 de linii de cod ca sa gaseasca cea mai buna cale de a scrie o bucata de cod, apoi il va refactoriza pana ajunge la cele 100 scrise de lenes din prima.
Beneficiile de-o parte si de alta? You do the math :slight_smile:

Aia in nici un caz nu se face scriind cod ca negrisorul.

N-ai intalnit de-astia: https://definingcreativity.com/einsteins-cluttered-desk/

scopul unui programator este (prin definitie) sa scrie cod.
totusi, cum definesti un cod bun?
e cel scris in cel mai scurt timp posibil (si atinge specificatiile, asta e o conditie pentru a il considera livrabil)?
e cel care care foloseste cele mai putin resurse hardware?
e cel care e cel mai prietenos cu utilizatorul?
e cel care are cele mai clare comentarii? sau documentatie / manual?

eu cred ca un cod bun este cel care raspunde in cel mai simplu / ieftin / rapid mod posibil cerintelor (care nu sunt numai tehnice).
si asta nu inseamna mereu cel mai eficient cod dpdv al resurselor hardware si nici cel mai “maintainable” cod posibil.
si de aici pot sa exitind si sa spun ca un programator bun e acela capabil sa imi livreze ce imi trebuie, inclusiv cum imi trebuie.
o astfel de persoana e capabila sa se orienteze in functie de prioritati (variabile de la proiect la proiect sau chiar de la pas la pas in acelasi proiect), deci o persoana pentru care alinierea pixurilor pe birou e ok, dar nu e o prioritate.

un ocd care are mereu un birou impecabil aliniat e foarte probabil sa se impiedice in multe detalii neimportante in cod si sa consume foarte mult timp si foarte multe resurse pentru un beneficiu prea mic sau chiar nenecesar.
eu as alege mai degraba un birou “einstein” dect unul “ocd” daca astea ar fi singurele diferente.

@iamntz, muta ultime raspunsuri pe topicul de chat ca lucrurile o iau razna
Deja au intrat indienii in joc :rofl:


Scz de offtopic !

Mi se pare eronat, noi nu suntem secretare.

Programatorii vin la job ca sa rezolve problemele clientilor folosind acest mijloc de exprimare, codul. Daca unui client ii e suficient un google doc sa-si rezolve problema, nu ne vom apuca de facut aplicatie de mobil…

Fireste ca intelegerea domeniului de business este critica, la fel si dorinta de a nu insela clientul prin vanzarea unei solutii prea complexe pt nevoile sale.

4 Likes

lol.
Eu in clasa a 8-a incepusem cu “C++ pentru incepatori” de Brian Overland. Nu m-am tinut serios de ea la inceput dar am invatat niste fundamente.

programatorii scriu codul.
faptul ca in multe situatii se ocupa si de arhitectura software, analiza de business, project management, client management si alte conexe… inseamna ca sunt multicalificati, nu inseamna ca asta e definitia programatorului.

eu sunt de acord ca in practica e ok ca un programator face mai mult decat sa scrie cod, dar daca asta se intampla in mod extins / recurent intr-o firma mare… as paria destul de sigur ca firma respectiva nu e in cea mai eficienta forma posibila a ei.

A cam deviat subiectul…

Arta programarii calculatoarelor de D. Knuth e carte de matematica, are 10% programare, 90% matematica de aia de te uiti la pereti si te gandesti oare ce vrea asta sa zica. Daca cineva nu e olimpic national la matematica nici sanse sa inteleaga si sa rezolve problemele din carte. Nici macar in facultate. Daca s-ar preda undeva dupa cartea lui Knuth nici 10% din studenti n-ar trece clasa.

Nu inteleg cum vine cineva si il recomanda doar fiindca a auzit de ea. Daca luam primele 10 probleme din carte si le punem pe forum 2-3 persoane vor sti sa le rezolve cu tot cu Google.
Dupa la programare inveti memory management in stil Fortran/ASM.

Nu inteleg cum vine cineva si il recomanda doar fiindca a auzit de ea.

Sunt aici și citesc ce scrii :wink:

Scopul meu nu este sa ma iau de tine sau sa te supar. Doar mi-am exprimat parerea ca nu inteleg de ce recomanzi cuiva o carte care a fost scrisa (dupa parerea multora) doar pentru a arata cat de destept este Knuth. Nu zic ca n-are informatii utile, doar ca e la un nivel de geniu si nu ne prea ajuta pe noi, oamenii de rand.

Nici cu C/C++ nu sunt de acord, e un limbaj antic, aproape inutil fara Qt daca nu ai un motiv extrem de bun sa-l folosesti. Ceea ce il limiteaza la roboti, jocuri 3d, orele de informatica, aplicatii Qt si microcontrollere. (cel putin pana ajungi la facultate)

In rest sunt de acord sa experimenteze cu cat mai multe lucruri.

Antichitatea unui limbaj e un motiv foarte prost ca sa il critici. Majoritatea limbajelor noi au ceva legatura cu antichitatea aia. Fie folosesc biblioteci implementate in ‘limbaje antice’, fie ruleaza intr-o masina virtuala implementata intr-un ‘limbaj antic’, etc. C++ impreuna cu C cam sunt in top tiobe: TIOBE Index - TIOBE Java, un alt limba antic, e pe locul 1, dar C++ impreuna cu C il iau.
Pe locul urmator e python, un alt limbaj antic (ce are succes datorita unor biblioteci implementate in limbaje antice precum C, C++ si Fortran).

3 Likes

Exceptand faptul ca daca iti trebe musai ceva modul de python pe care nu-l gasesti si dispui de resurse, il scrii in C++ si ai rezolvat problema.

2 carti am recomandat (cu un scop precis), si in rest am dat niste principii pe care mi-ar fi placut sa mi le fi spus si mie cineva atunci cand am inceput sa invat porgramare.

Suntem in era vitezei in care programatorul incepator nu are vreme sau nu ii este permis sa invete calumea din carti, trebuie sa invete din tutoriale sau surse cat mai usoare, nu cumva sa aiba vreme sa aprofundeze. :slight_smile:
Baiatul poate ca nu este nici la varsta liceului, are timp sa ia efectiv la rand toate recomandarile noastre sa vada care ii este potrivita. Poate ca cine stie, descopera ca este chiar un geniu intelegand cartea lui knuth sau cea de c++.

Realizezi că ai postat acest mesaj dintr-un browser scris în aceste limbaje “antice”, right? :slight_smile: De fapt chiar sunt curios, ce aplicaţii serioase foloseşti şi care ştii că sunt scrise într-un limbaj “la modă”?

Am precizat clar că e un limbaj ‘antic’, pe care nu îl folosești dacă nu ai un motiv foarte bun.

Când ai un motiv foarte bun cu chiu cu vai îl înveți. Până ajungi de la începător la omul care știe când are un motiv foarte bun trec 10 ani. Intradevar si eu consider C++ 14 un limbaj fain, dar 98% din codul de pe github e legacy stuff. Plus ca am invatat assembly de x86 in paralel cu C, daca nu stiam assembly si microcontrollere eram total paralel cu C++. (cand erai sarac si vroiai un program/joc mai greu de gasit pe net sau ti-ai permis doar un ATMega8 in loc de arduino invatai assembly de vroiai, de nu vroiai, era o carte faina in romana pe elforum) Azi cu 3-5$ iti iei microcontrollor cu wifi si Mb de memorie de rulezi si JS/Python. De 2-3 ori pe an ma intalnesc cu probleme unde mai pun mana pe C++, in rest il uit pe zi ce trece la fel cum am uitat Pascal.

=>

Eu am avut o problemă similară - învăţarea conceptelor de bază şi a unui mod de gândire care are diverse denumiri şi e greu de obţinut. Două cărţi despre algoritmi care m-au ajutat pe mine (ca începătoare în capul căreia era o mare varză) au fost astea:

Discovering computer science: interdisciplinary problems, principles, and Python programming - te învaţă concepte esenţiale, dar prin prisma unor situaţii de zi cu zi. Mie asta mi-a folosit foarte mult.

Algorithms (autori Dasgupta, Papadimitriou şi Vazirani) - pentru că e foarte clar scrisă, explică pe larg cele mai simple lucruri, nu presupune c-aş fi eu Einstein care deja le ştie.

Le găseşti în diverse locuri. admin edit: nu avem voie cu materiale piratate

Avantajul lor faţă de altele este că sunt cumva “for dummies”, adică inteligibile chiar dacă nu eşti as la algebră, pentru că explică aproape tot ce trebuie să ştii, iar pentru acel 1% pe care nu-l înţelegi, există google şi khan academy.

Ca sfat general: găseşti extrem de multe recomandări pe net, pe forumuri, pe quora, peste tot, dar până la urmă, trebuie să le încerci şi să găseşti cartea cea mai potrivită pentru stilul tău şi pentru ceea ce cauţi când spui

Eu una, tot începătoare, am încercat peste 30 de cărţi de introducere în algoritmi până m-am oprit la astea, poate te vei opri la altele, dar încearcă mai multe.


Oarecum off-topic şi o să râdă lumea de aşa ceva, dar pe cuvânt că m-au ajutat enorm: jocurile de la Zachtronics - Human Resource Machine şi TIS-100, în ordinea asta, pt. că al doilea este foarte greu. Sunt nişte jocuri care simulează limbajul de asamblare şi cumva îţi intră-n cap fără să vrei modul în care se desfăşoară lucrurile în calculator, la nivelul cel mai “de jos” - nu înveţi nimic factual, jocurile nu sunt factual corecte, dar îţi deprinzi o abilitate, un fel de a gândi, un fel de… abilitate de problem-solving la nivel foarte abstract, înveţi să gândeşti în paşi foarte mici. Sunt cumva nişte metafore vizuale care îţi transmit concepte esenţiale din programare, inclusiv iteraţii - mai ales primul, Human Resource, pentru mine a fost incredibil de util, de aia îmi şi permit să-l recomand. Dar evident, e doar ceva auxiliar.

5 Likes