@Nedeljko,
poceo si da smaras sa te dvije petlje, jer te dvije petlje niko nije spomenuo osim tebe i sam se sa sobom oko toga prepucavas. Kao neko malo dijete.
Ja ne znam sta mogu da programiraju ljudi koji ne mogu upetljati dvije petlje, ali sam imao kolege koji mogu "iz rukava" napisati bilo koji skolski sort algoritam za nizove ili pretragu za stabla, ali se zaglave po 3-4 sata na mnozenju dviju matrica 3x3.
Citat:
Ivan Dimkovic:E sad ako neko misli da su MIT, Stanford ili CMU puni budala ili da su ljudi koji placaju petocifrene sume novca da uce koncepte koji im nece trebati u zivotu, sta da kazem, bacite se na posao i otvorite nove skole koje uce to "sta ljudima treba". Ako je to zaista "to sta ljudima treba", ljudi ce se otimati da plate za mesto u klupi.
Da, ako neko misli da su religijske skole pune budala, ili da su ljudi koji zalazu svoj zivot u to da uce koncepte koji im nece trebati u zivotu...
Salu na stranu :) ne misli niko da algoritmi nisu potrebni. Naprotiv.
Pretpostavljam samo da jos neki, poput mene, smatraju da poznavanje odredjenog uzeg skupa (ima ih milion, nemoguce ih je poznavati sve) algoritama ne predstavlja nikakav elitizam, pamet ili narocitu sposobnost, vec pretezno
opredeljenost ka necemu isto kao sto se npr. neko opredjeli da bude mesar, a neko tesar.
Svaka cast onom ko je
izmislio/pronasao/otkrio algoritam; ali po meni, svaki sledeci onaj ko te - unapred vec poznate korake algoritma - samo prevodi iz nekog algoritamskog jezika na neki konkretan programski jezik radi na istom nivou pameti i strucnosti kao i oni koji ga uzimaju gotovog iz biblioteke, a koje ovdje neki nazivaju obicnim sljakerima i fizikalcima.
U tom pukom prevodjenju ima pameti koliko i u postupcima dresiranog konja u cirkusu ili koliko i u "rijesavanju" rubikove kocke pomocu napamet naucenog niza poteza na osnovu nekoliko predefinisanih situacija u pogledu polozaja sarenih polja.
Po meni, na intervjuima za programere bi bilo smislenije testirati ljude nekim testom inteligencije nego poznavanjem algoritama.
Pored onih kolega gore pomenutih Nedeljku, imao sam neke koji su u toku skolovanja uspjesno polozili nekoliko kurseva programiranja, sa sve algoritmima, ali nista od tog "elitnog" znanja i "razmisljanja" ne mogu da primjene na najednostavnijem zadatku programiranja simulacije robota koji treba da se krece bilo kako kroz hodnik samo da ne udara u zidove - problem koji se rjesava bukvalno u dva-tri reda jednostavnih if naredbi (ili jednom case naredbom).
Sa druge strane, poznavanje nekih osnovnih algoritama (nekoliko mjeseci ili godina nakon odslusanog i polozenog skolskog kursa) koji se cesto javljaju u softverskoj praksi obicno
ukazuje na zainteresovanost i posvecenost programerskoj struci, pa ta cinjenica u tom smislu moze predstavljati neku indikaciju necega, ali tvrditi da je onaj koji poznaje iznutrice nekih algoritama bolji (pametniji, sposobniji, produktivniji, brzi, elitniji) programer od onog koji ih ne poznaje nego ih uzima iz biblioteke je po meni besmislica (ne mislim tu na tebe, ali ima nekih koji imaju tendenciju da tako misle).
Narocito zbog toga sto sem tih osnovnih algoritama pretrage, sortiranja, obilazenja... razlicito struktuiranih podataka, postoji milion drugih algoritama iz milion drugih oblasti i problema koji se rjesavaju kompjuterski, tako da je jednom programeru nemoguce poznavati ikakav znacajan procenat svih njih da bi to imalo nekog znacajnog uticaja na 'univerzalnost' nekog programera.
Za vecinu ljudi je potrebno poznavanje algoritama
iz uzeg domena kojim se bave na nivou black-box: da znas koji postoje, kad se i za sta upotrebljavaju i kakvi su im parametri u smislu procesorskih, memorijskih i vremenskih zahtjeva.
Danas imas more dobrih inzinjera koji konstruisu bagere i avione, ali ne znaju da naprave sraf ili oprugu: jednostavno, postoji "biblioteka" srafova i opruga koja mu je na raspolaganju; i da su se oni u svom skolovanju i praksi umjesto na kompleksne koncepte bagera, hidraulike, aviona i koriscenja aktuelnog CAD softwera koncentrisali na detalje pravljenja srafova, opruga, limova, celika, navoja, valjanja sipki, varenja, zupcanika, lanaca, poluga, lezajeva.... nikad ne bi ni stigli do bagera i aviona, jer tih bazicnih stvari ima toliko da niko za jednog zivota ne bi stigao svime detaljno da se pozabavi.
U npr. mojoj struci, debugging (koji se manje-vise nigdje sistematski ne izucava) je esencijalna vjestina bez koje je gotovo nemoguce ista napraviti. Moze neko biti teoretski super-genije za algoritme, ali i najmanji bug koji se odgovarajucim prakticnom metodom ili alatkom za debagiranje otkriva za par minuta moze ga zaglaviti danima da bukvalno kao slijepac baulja kroz svoj kod bez ideje sta da radi.
Znam, sad ide poznati argument da poznavalac algoritama moze nauciti debugging kad mu zatreba, samo sto ja znam da je ucenje debugginga 10 puta napornije i intelektualno zahtjevnije nego ucenje algoritama, pa ce tako poznavalac debugginga lakse i brze da nadoknadi rupu u algoritmima nego obratno.
To je po meni jedna od stvari koje bi bilo bolje ubaciti u nastavni plan i program, a na ustrb detaljisanja oko algoritama.
Ne znam kakva je sad trenutno situacija u tom desktop/server/HAL 9000... segmentu softverske struke (jer se ja jos uvijek krecem u par stotina KB do par MB), ali pretpostavljam da je ili na prekretnici kada ce se skole u nekoj mjeri morati odreci detaljnog proucavanja "srafova i opruga" i nauciti ucenike da uzimaju zdravo za gotovo da to postoji odnekud gotovo za upotrebu i tako dobijeno vreme iskoristiti na ucenje neceg 'hitnijeg' i 'potrebnijeg', ili ce se to desiti u skorijoj buducnosti.
Industrija i ekonomija nisu bas lude za onima koji vole da repriziraju izmisljanje tocka i tople vode.
Kazem opet, mozda je situacija sad trenutno takva da ima dovoljno vremena i prostora da se algoritmi u skolama izucavaju i vjezbaju
detaljno (jer nema nista pametnije, hitnije, potrebnije, prakticnije, isplativije...), ali sumnjam da ce dugo tako ostati.
Ja bih licno radije platio nekom da me je dva semestra ucio debugging iz realnog zivota - a koji mi treba ne svaki dan nego svaki minut - na konkretnim alatima i paketima koji su u tom trenutku vremena aktuelni, nego da me je ucio neke teorijske algoritme koje uglavnom nikad kasnije nisam primjenjivao.
Ali nazalost, ja taj izbor nisam ni imao.
Takve promjene desavale se vec ranije i desavaju se stalno za razne kurseve.
Prije 15-tak (ili vise, kako gdje) godina vise od pola (a negdje i vise) materije kursa elektronike na vecini univerizteta je otpadalo na proucavanje tranzistora kao poluprovodnicke strukture i nekakvih jednacina iz fizike poluprovodnika. Danas (a sto nije narocito daleko od onda) to vise nije tako: to je stvar koja je prebacena na specjalisticke studije (npr. mikroelektronike) - za one koji hoce da
prave cipove. Ostali (a to je vecina) studenata to vise ne slusa u svojim kursevima elektronike nego se bave gotovim tranzistorima na nivou black-boxa, operacionim pojacavacima itd.
Ne znam kad ce i da li ce to da se desi sa programiranjem, ali cinjenica da se o tome prica, i da ima drugih misljenja, i da ima programera koji rade i primaju plate, a ne poznaju iznutrice algoritama,... sama po sebi govori da negdje postoji prostor i za takve izmjene.