Programiranje

Program za početnike dobar za programiranje

Deus ex machina sub 18.7.2009 18:21

Mi smo obsolete, Friday.

Zamijenit ce nas templatized hard-core optimizirani code generatori i nadareni studenti koji ih pisu.

 

Ovaj... brahle... procitaj malo o CASE toolovima i povijesti IT inzenjeringa, onda procitaj malo o eXtreme programmingu. Pa se vrati da nastavimo diskutirati.

naxeem sub 18.7.2009 18:27

Pretpostavljam da je Tracer profesor, pa su mi jasni njegovi stavovi i poruke i nemam ništa protiv takve situacije, iako mislim da je pogrešna ideja da se pseudo-kodom uči; pseudo kod je (a više nitko ne piše pravi pseudo kod, već skicira) tek alat za objašnjenje i najčešće je to kod kojem su izbačene specifičnosti implementacije za određeni srodni jezik. Za učenje je loša ideja kao i glupa praksa u našem edukacijskom sistemu da se programiranje polaže na papirima i sl. Da, manje studenata prođe, ali to nije smisao edukacije.

Što se tebe brahle tiče, vidim da sam bio i tu u pravu; tek si maturirao, što i objašnjava zašto si još zelen i uživljen u gluposti poput tih tvojih sortiranja i dokazivanja na stvarima koje su ti pokazane isključivo da vježbaš mozak, ali iz nikakvog stvarnog razloga.

Svoje ideje o programiranju i kodiranju radije zadrži za sebe, barem još 5-6 godina dok ne isprogramiraš nešto stvarno i nešto što ljudi zaista rade i trebaju, jer su svi ti tvoji algoritmi i većina stvari tek puka zabava za srednjoškolce i studente, a u stvarnom životu ljudi imaju stvarne probleme i razmišljaju od stvarnim algoritmima poput problema kako ubrzati pristup bazi, kako organizirati cache, kako loadati entitete bez previše RT-a, kako preklopiti kalendare za booking da imaš dovoljno cijelih termina, kako preračunati poreze uz olakšice da ti sve štima, kako izvesti najbolje REST uz obične WS i sl.

 

Izletiš li s tim nadobudnim dječačkim kako si ti programer jer ti pišeš quicksort sam i optimiziraš ga asemblerom za svaki CPU posebno uz, naravno, obavezno korištenje SSE instrukcija i da sve programe kompresiraš i pišeš unutar 64KB (i natječeš se k'o ja nekad u 64K contestima), ljudi te neće shvatiti ozbiljno.

 

Fino je znati kako sve to radi, fino je znati da znaš i ponekad je fino da znaju da znaš te stvari, ali - newsflash - to nikome ne treba.

 

Moraš još pure papati da bi skužio da postoji drastična razlika između programiranja na natjecanju i programiranja u industriji.

naxeem sub 18.7.2009 18:35
Friday kaže...
Deus ex machina kaže...

Mi smo obsolete, Friday.

 

Upravo se idem disposeati Belji se

(ili da samo sačekam GC da me pokupi?)

Pravi programeri ne koriste GC, nego otvore unmanaged kod u C++u, pozovu iz DLL-a prethodno napisanu funkciju asm-u koja oslobađa alociranu memoriju ručno.

Friday sub 18.7.2009 18:38
naxeem kaže...

Pravi programeri ne koriste GC, nego otvore unmanaged kod u C++u, pozovu iz DLL-a prethodno napisanu funkciju asm-u koja oslobađa alociranu memoriju ručno.

 

Možeš izbaciti programera iz Microsofta ali nikada nećeš izbaciti Microsoft iz programera Osmijeh

Deus ex machina sub 18.7.2009 18:40

Ma, pravi programeri nemaju DLLove nego svoj hardware baziran na arrayu RISC processora, sa rucno portanim linux kernelom koji je kompatibilan sa win binaryima.

Naravno da se sva dealociranja onda pozivaju rucno na memory management unitu; naredis procesoru da na portB iskuca deallocate funkciju i switchas EN liniju....

Tracer sub 18.7.2009 18:41
naxeem kaže...

Meni je malo smiješno ovo... Tracer spominje zadatke s natjecanja, ovaj k-te elemente. Imam neki dojam da se niste ni makli u industriji nigdje, već da se zapravo vaše poznavanje programiranja svodi na teoriju.

Kao što je Deus rekao, crna-kutija FTW. Svaka čast, čak mislim da je Tracer i neku knjigu napisao, ali učenje, trik i ispitni zadaci najčešće nikakve veze nemaju sa stvarnošću, a često su teoretski uvriježena pravila i prakse posve neupotrebljivi u stvarnosti.

 

Svijet stvarnog programiranja nisu hanojski tornjevi.

Kakva teorija? Misliš da sam ja ljudima pisao referate kad bi im radio DB klijente ili mrežne servise? Moje znanje je meni sasvim zadovoljavajuće i ne trebam se tebi dokazivati. I štoviše, ono je ponajviše i bazirano na praktičnom radu i iskustvima ;) No isto tako, niti teorija nije bezveze. Programer bi trebao biti dobro potkovan na oba područja a ne da bude robot koji bezglavno samo sjedne i piše code, jer nepoznavanje teorije će vrlo često dovesti i do upotrebljavanja krivih pristupa i rješenja.

 

A što se tiče hanojskih tornjeva.. to je vrlo lijep primjer upotrebe rekurzije i vrlo dobar za učenje. Što se tiče upotrebe u praksi ne vjerujem da nikome to nikada nije poslužilo, a pogotovo strukture poput binarnih stabala koje se interno koriste u bazama podataka i sl..

naxeem sub 18.7.2009 18:43

LOL @ oboje.

Uglavnom, eto, malo smo kroz šalu ohladili usijanu atmosferu zaključivši da je autoru teme najbolje uopće ne učiti programske jezike, nego pseudo-kod.

Konkretan jezik će koristiti koder vvlgaris, a on kao programer domesticvs će u pseudo-kodu naučiti i kasnije slagati algoritme.

 

Ne zamjeri, Tracer, ja se samo malo šalim, jer vidim da su se ljudi uspalili oko teme bez razloga. Teorija je svakako bitna, ali se samo teorijom ništa ne može, pa se praktički slažemo. Suum Cuique, kako bi se reklo.

Tracer sub 18.7.2009 18:54
naxeem kaže...

Pretpostavljam da je Tracer profesor, pa su mi jasni njegovi stavovi i poruke i nemam ništa protiv takve situacije, iako mislim da je pogrešna ideja da se pseudo-kodom uči; pseudo kod je (a više nitko ne piše pravi pseudo kod, već skicira) tek alat za objašnjenje i najčešće je to kod kojem su izbačene specifičnosti implementacije za određeni srodni jezik. Za učenje je loša ideja kao i glupa praksa u našem edukacijskom sistemu da se programiranje polaže na papirima i sl. Da, manje studenata prođe, ali to nije smisao edukacije.

Recimo da sam asistent. Ništa više. Što se tiče ovoga sad što si napisao to se mogu u gotovo svemu složiti, osim da je pogrešna ideja da se time uči. Evo, čime bi ti ljudima objasnio quick ili merge sort? To sigurno nije produktivno raditi preko source code-a. Ljudima se doslovno zacrni pred očima kad vide koliko toga ima i više se niti ne trude da to shvate. Tad proradi onaj vid razmišljanja "to ću kasnije kod kuće".. Umjesto toga preko pseudo code-a im se na što razumljiviji način predoči kako to radi.

 

Programiranje se samo na početničkim predmetima polaže na papiru. Na jačim predmetima student će sjesti uz računalo i dobiti će konkretan praktični problem koji mora rješiti sam. Znači, nikakva teorija ili sl.. Imaš aplikaciju za napraviti i gotovo.

Tracer sub 18.7.2009 19:12
naxeem kaže...

LOL @ oboje.

Uglavnom, eto, malo smo kroz šalu ohladili usijanu atmosferu zaključivši da je autoru teme najbolje uopće ne učiti programske jezike, nego pseudo-kod.

Konkretan jezik će koristiti koder vvlgaris, a on kao programer domesticvs će u pseudo-kodu naučiti i kasnije slagati algoritme.

 

Ne zamjeri, Tracer, ja se samo malo šalim, jer vidim da su se ljudi uspalili oko teme bez razloga. Teorija je svakako bitna, ali se samo teorijom ništa ne može, pa se praktički slažemo. Suum Cuique, kako bi se reklo.

Ok. Mogu se složiti da sam se krivo izrazio kad sam rekao da treba učiti pseudo code jer nema se tu što učiti kad pseudo code je sam po sebi svima razumljiv jezik. Ono što sam zapravo htio reći jest da se treba učiti kroz pseudo code. Prije svega, maksimalno se smanjuju komplikacije kod razumijevanja algoritama i postupaka umjesto da gledaš gomilu source-a i gubiš vrijeme u glavi pokušavajući shvatiti što to zapravo treba raditi. Ovako ti sam pseudo code odmah to kaže. Na takav način nisi ograničen programskim jezikom jer da bi napisao program moraš biti upoznat tek sa sintaksom, a poznavanje sintakse nije poznavanje programiranja niti to čini programera.

naxeem sub 18.7.2009 19:12

U redu, ali neću pisati pseudo kod. Uzet ću olovku, nacrtati polja i objasniti što se radi za sort... neću pisati sve. Kako ćeš objasniti BFS? (širinsko pretraživanje) npr.?

Ajmo probati to u pseudo kodu vidjeti:

 

 

int distanca [1.....size(V)]

int boja [1.....size(V)] //boje čvora

čvor_prethodni[1......size(V)] //prethodni

pointer queue Q=empty //FIFO queue

za svakiu iz V
    boja[u] = bijela

    distanca[u] = INF

    prethodni[u] = NULL
boja[s] = siva //definiranje izvora

distanca[s] = 0

enqueue(Q,s) //stavi izvor u queue

while(Q is nonempty)
    u = dequeue(Q) //u je sljedeći čvor kojeg ćemo posjetiti

    za svaki v iz Adj[u]

        if(boja[v] == bijela) //ako susjed još nije otkriven

        boja[v] = siva

        distanca[v] = distanca[u] + 1

        prethodni[v] = u

        enqueue(Q,v)
boja[u] = crna

 

Zaista misliš da je to razumljivije od stvarnog koda? - Ne slažem se. Onome tko zna, sasvim je jasno o čemu se radi, jer može zamisliti stvarni kod, razumije programiranje.

Početniku mislim da je jednako konfuzno kao i stvarni kod, dapače, stvarni možeš pokrenut i vrtit u debuggeru liniju po liniju, a ovako, tko zna što...

 

 

Friday sub 18.7.2009 19:20
naxeem kaže...

U redu, ali neću pisati pseudo kod. Uzet ću olovku, nacrtati polja i objasniti što se radi za sort... neću pisati sve. Kako ćeš objasniti BFS? (širinsko pretraživanje) npr.?

Ajmo probati to u pseudo kodu vidjeti:

 

 

int distanca [1.....size(V)]

int boja [1.....size(V)] //boje čvora

čvor_prethodni[1......size(V)] //prethodni

pointer queue Q=empty //FIFO queue

za svakiu iz V
    boja[u] = bijela

    distanca[u] = INF

    prethodni[u] = NULL
boja[s] = siva //definiranje izvora

distanca[s] = 0

enqueue(Q,s) //stavi izvor u queue

while(Q is nonempty)
    u = dequeue(Q) //u je sljedeći čvor kojeg ćemo posjetiti

    za svaki v iz Adj[u]

        if(boja[v] == bijela) //ako susjed još nije otkriven

        boja[v] = siva

        distanca[v] = distanca[u] + 1

        prethodni[v] = u

        enqueue(Q,v)
boja[u] = crna

 

Zaista misliš da je to razumljivije od stvarnog koda? - Ne slažem se. Onome tko zna, sasvim je jasno o čemu se radi, jer može zamisliti stvarni kod, razumije programiranje.

Početniku mislim da je jednako konfuzno kao i stvarni kod, dapače, stvarni možeš pokrenut i vrtit u debuggeru liniju po liniju, a ovako, tko zna što...

 

 

 

Katastrofa...

Tracer sub 18.7.2009 19:32
naxeem kaže...

U redu, ali neću pisati pseudo kod. Uzet ću olovku, nacrtati polja i objasniti što se radi za sort... neću pisati sve. Kako ćeš objasniti BFS? (širinsko pretraživanje) npr.?

Ajmo probati to u pseudo kodu vidjeti:

 

 

int distanca [1.....size(V)]

int boja [1.....size(V)] //boje čvora

čvor_prethodni[1......size(V)] //prethodni

pointer queue Q=empty //FIFO queue

za svakiu iz V
    boja[u] = bijela

    distanca[u] = INF

    prethodni[u] = NULL
boja[s] = siva //definiranje izvora

distanca[s] = 0

enqueue(Q,s) //stavi izvor u queue

while(Q is nonempty)
    u = dequeue(Q) //u je sljedeći čvor kojeg ćemo posjetiti

    za svaki v iz Adj[u]

        if(boja[v] == bijela) //ako susjed još nije otkriven

        boja[v] = siva

        distanca[v] = distanca[u] + 1

        prethodni[v] = u

        enqueue(Q,v)
boja[u] = crna

 

Zaista misliš da je to razumljivije od stvarnog koda? - Ne slažem se. Onome tko zna, sasvim je jasno o čemu se radi, jer može zamisliti stvarni kod, razumije programiranje.

Početniku mislim da je jednako konfuzno kao i stvarni kod, dapače, stvarni možeš pokrenut i vrtit u debuggeru liniju po liniju, a ovako, tko zna što...

 

 

Ne vidim kako sintaksa nekog programskog jezika može biti razumljivija od pseudo code-a. Ako govorimo o razumijevanju i jasnoći sintaksa nekog programskog jezika tek može težiti pseudo code-u. Isto tako, što ako netko uopće nije na toj razini da dovoljno razumije sintaksu tog programskog jezika da shvati taj algoritam? Onda si ga na samom startu otpilio. Ovako će kroz pseudo code bar skužiti ideju.

brahle sub 18.7.2009 19:34
naxeem kaže...

int distanca [1.....size(V)]

int boja [1.....size(V)] //boje čvora         Vrlo se rijetko koristi kod BFS-a. Vise manje samo kod DFS-a

čvor_prethodni[1......size(V)] //prethodni

pointer queue Q=empty //FIFO queue            Zasto pointer queue? :) Zasto uopce tipovi podataka? :) Pseudokod moze prozvakati sve zivo

 

 

Osobno, ja bih kad nekome prvi put objasnjavam BFS, a to sam radio i osnovoskolcima [koji su me shvatili], obicno izostavim dio s bojom, ili ako i njega objasnjavam onda koristim crvenu, zutu i zelenu - logicnije mi je tako nego bijela, siva i crna. I obicno jos ovu inicijalizaciju stavim u posebnu funkciju, bfs-init. Moj pseudokod bi onda izgledao ovako:
udaljenost[1..velicina(V)]
boja[1..velicina(V)]
prosli[1..velicina(V)]
red Q
 
BFS-init()
  za svaki u iz V
    udaljenost[u] = maximalna moguca udaljenost
    boja[u] = zelena
    prosli[u] = nitko
  Q = prazan
 
BFS( start )
  pozovi BFS-init()
 
  udaljenost[ start ] = 0
  boja[ start ] = zuta
  ubaci start u Q
 
  dok Q ima elemenata u Q
    sad = dequeue( Q )
    za sve susjede (s) od sad
      ako je boja[s] zelena
        boja[s] = zuta
        ubaci s u Q
        udaljenost[ s ] = udaljenost[ sad ] + 1
        prosli[ s ] = sad
    boja[ sad ] = crvena
To bi bio moj pseudokod. 
EDIT: izbacivanje suvisnoga. 
Bukva sub 18.7.2009 19:34
Tracer kaže...

 

Programiranje se samo na početničkim predmetima polaže na papiru.

Čisto informativno, stvarno me oduvijek zanimalo, ako možeš objasniti...

 

Zašto? Zašto, pobogu papir?

Na mom faksu, sa tako nečime se nikada nisam susreo (osim kada je trebalo nešto napisati u Turingovom stroju, ali, to opet, iz očitih razloga je tako, jel...). Ja ljudima, koji su mi govorili da njih tjeraju da pišu source code na papir, nisam jednostavno vjerovao. Ne vidim svrhu, smisao... Umjest da od prvog dana uče raditi u IDEu, da od prvog dana se uče da koriste debugger - papir.

Ne tvrdim da je taj postupak loš ili išta (u krajnjoj liniji pojma nemam o predavanju niti iskustva u istom), ali stvarno ne vidim svrhu pisanja koda po papiru. Jedino što sam uspio složiti u glavi kao objašnjenje jest da imaju manjak računala pa se snalaze kako znaju i umiju.

Tracer sub 18.7.2009 19:41
Bukva kaže...
Tracer kaže...

 

Programiranje se samo na početničkim predmetima polaže na papiru.

Čisto informativno, stvarno me oduvijek zanimalo, ako možeš objasniti...

 

Zašto? Zašto, pobogu papir?

Na mom faksu, sa tako nečime se nikada nisam susreo (osim kada je trebalo nešto napisati u Turingovom stroju, ali, to opet, iz očitih razloga je tako, jel...). Ja ljudima, koji su mi govorili da njih tjeraju da pišu source code na papir, nisam jednostavno vjerovao. Ne vidim svrhu, smisao... Umjest da od prvog dana uče raditi u IDEu, da od prvog dana se uče da koriste debugger - papir.

Ne tvrdim da je taj postupak loš ili išta (u krajnjoj liniji pojma nemam o predavanju niti iskustva u istom), ali stvarno ne vidim svrhu pisanja koda po papiru. Jedino što sam uspio složiti u glavi kao objašnjenje jest da imaju manjak računala pa se snalaze kako znaju i umiju.

Prvi razlog i jest nedostatak računala. Tada bi ispit trajao i cijeli dan. Meni osobno to čak niti ne smeta, ali nije na meni da to odlučujem.

 

Drugi razlog je što studenti te osnovne stvar moraju usvojiti što bolje jer su zaista osnovne u odnosu na ono što dolazi. On ako ne zna raditi s funkcijama sigurno neće shvatiti niti klase, a kamoli komponente i sl.. To je isto kao i da učeniku prvog razreda na testu iz matemtike dopustiš kalkulator... ipak bi takve stvari trebao naučiti sam, a kasnije na ozbiljnijim predmetima mu i dopustiš upotrebu kalkulatora (računala) jer je riječ o sasvim drukčijem nivou znanja.

Deus ex machina sub 18.7.2009 21:36

Ma, da me ubijes,

sav vas pseudokod treba 5-6 minuta za portat u Python,     <------------------------ Da li netko primjecuje kako sam savrseno uvalio poantu ovdje?

a tvoj mali monstrum naxeem, taj bi se dao kompilirati skoro i odmah.

 

@naxeem,

apropos koda i papira, daj, nemoj sad da ti ljudi koji su programirali buseci karton dodju na vrata sa sacmaricama...

itf4n sub 18.7.2009 21:41

Moje mišljenje je da je pseudo kôd izvrstna stvar. Svi programeri ga razumiju, eliminira specifičnosti jezika i smanjuje količinu kôda, pomaže u rješavanju problema (kritičnih dijelova). Ne mislim da se rješenje problema mora napisati u pseudo kôdu, pa prepisati u stvarnom jeziku; to i jest besmisleno u većini slučajeva, pogotovo kad su problemi mali. Ali zna biti korisno napisati slijed high-level radnji i iz toga promatrati rješenje. Na papiru naravno, uz prateće grafičke sadržaje (polja, grafovi, tablice, što se već koristi...) : )

 

S druge strane slažem se da je pravi jezik bolji za nekoga tko želi tek početi/probati programiranje. Basic je dobar jezik za to. Stepinanje i izvršavanje liniju po liniju, promatranje varijabli i najvažnije, prikaz što neki kôd radi na ekranu a ne u glavi. Daje motivaciju za nastavak. Pseudo kôd koliko god bio razumljiv ima nedostatak da nema svog kompajlera. Navedeno se ne odnosi na učenje algoritama ili sl. Tad je bitna razumljivost jezika kojim je program pisan, i portabilnost samog algoritma. Osim toga lakše ga je analizirati kad je u takvom pseudo obliku.

 

Što se tiće učenja na fakultetu, slažem se s Tracerom (koji i radi na fakultetu, pa ima iskustva iz prve ruke). Netko tko studira i uči programiranje valjda zna barem osnove osnova, pa bi mu pseudo kôd trebao biti dovoljno razumljiv da s njim nema problema. Iako sam jezik nije idealan (iz gore navedenih razloga), ima osobinu da je čist pa se svi koncepti mogu lagano prezentirati... a to je cilj.

 

 

naxeem kaže...

Svijet stvarnog programiranja nisu hanojski tornjevi.

Oh damn :D

naxeem sub 18.7.2009 22:57
Deus ex machina kaže...

Ma, da me ubijes,

sav vas pseudokod treba 5-6 minuta za portat u Python,     <------------------------ Da li netko primjecuje kako sam savrseno uvalio poantu ovdje?

a tvoj mali monstrum naxeem, taj bi se dao kompilirati skoro i odmah.

 

@naxeem,

apropos koda i papira, daj, nemoj sad da ti ljudi koji su programirali buseci karton dodju na vrata sa sacmaricama...

Da, a kad pišeš iz nule u Pythonu, treba ti 1 minuta. :D - Imam ja doma te s bušenim karticama...

itf4n kaže...
Netko tko studira i uči programiranje valjda zna barem osnove osnova, pa bi mu pseudo kôd trebao biti dovoljno razumljiv da s njim nema problema.

 

Gadno se varaš...

Friday kaže...
naxeem kaže...

Vidim da je dečko algoritmaš opet potpuno fulao smisao mog pseudo koda gore... ahh... Friday je shvatio.:)

Gdje da potpišem? Namigiva

Na karton! Postoje tipke za potpis!

Glamdring ned 19.7.2009 01:41

Mozda idem off topic, ali samo da kazem da sam i sam pocetnik u programerskim vodama, tj znam onoliko koliko su me naucili

u skoli i na faxu, osnove algoritama, phyton, qbasic, asebler. Sada sam u situaciji da trebam nesto konkretno isprogramirati(vizijski sustav) za potrebe diplomskog rada (mobilni robot sa kamerom). Nakon dosta vaganja i iskusavanja raznih programskih okruzenja odlucio sam se za delphi. sa tim da sve prvo napravim u matlabu pa prebacujem u delphi jer u matlabu nemogu kompajlirat.
delphi je super jednostavan a u isto vrijeme moćan alat sa kojim se ovlada kroz jedno 2-3 tjedna ucenja . pa bi to ujedno i bila moja preporuka svim soft-core programerima.