[ koska @ 04.04.2013. 13:47 ] @
Naime, vec duze vreme planiram da se presaltujem iz web dizajna u programiranje. Naravno, za ovo vreme sam stekao dosta iskustva primoran da radim sa JS/PHP-om, ali postoje neke stvari koje mi jednostavno fale.

Dok bez problema mogu da lociram problem i editujem fajlove u Joomli, Magentu ili nekom drugom gotovom sistemu (naravno: uvek postoji i ono "Google is my best friend"), da napisem kratke skripte koje ce da se nadograde na postojece, imam na drugoj strani problem ako trebam da krenem od praznog fajla.

Recimo da mi sintaksa nije toliki problem (sumnjam da svi bas znaju sve i da se ne sluze nekim pomocnim izvorima), ni razumevanje OOP-a (trenutno ga precesljavam od pocetka da vidim da li nesto nisam propustio), a imam i (skolsko) predznanje iz baza podataka itd.
Medjutim, ono sto meni treba je to neko "lepo programiranje", kako sam negde vec cuo taj izraz. Dakle da na pravi/najbolji nacin uradim nesto i u startu umem da postavim (bilo u glavi ili u papiru) strukturu buduceg projekta (da ne kazem algoritam).
OK, znam odgovor... to je nesto sto se stice iskustvom... medjutim, ako nemam nikoga ko bi sedeo pored mene i pokazivao mi, morao bih da koristim neki drugi metod ucenja, a guglanje u tom slucaju mi ne izgleda kao pravo resenje.

Probao sam sa gomilom Lynda-like kurseva i nijedan mi nije odgovarao. Bas zbog toga sto se u njima prodje kroz sve (osnove), sto se daju primeri za svaku oblast posebno, ali nigde ne postoji povezivanje u neku veliku smislenu celinu koja ce, na primer, da rezultuje nekim gotovim projektom.
Secam se da sam za vreme studiranja imao profesora koji nas je kroz ceo semestar (C ili C++ ne secam se vise) vodio kroz svaku oblast posebno, da bismo na poslednjem casu imali priliku da sve sto smo napisali samo spojimo i napravimo, ako se dobro secam, neki mali programcic za vodjenje video kluba ili tako nesto.

Razmisljam se da li da krenem sa nekim "uzivo" kursevima (mota mi se po glavi IT Akademija), ali se opet plasim da cu mnogo vremena da izgubim dok budu objasnjavali sta su klase i pravljenje prostih primera tipa baza sa firstname, lastname, phone i email kolonama, a da na kraju nece ostati vremena za prave izazove.

Drugim recima, mislim da bi mi najvise odgovarao neki kurs/knjiga sa konkretnim resenim (pocetnickim) aplikacijama gde bih mogao da udjem u ceo proces, od File-> New do potpuno funkcionalne (web) aplikacije. Jos ako bi bilo objasnjenje kako najlakse naci problem i kako pronaci nacin za bolju optimizaciju svega, to bi bilo super.


Isto tako, voleo bih da znam da li postoje neki izvori gde mogu da saznam o "optimizaciji" rada. Za sad koristim samo Notepad++, ali vidim da mnogi pominju neke frameworke, instalacije Linuxa, programe za postavljanje MySQL strukture itd.
Recimo, kada bi trebalo da setujem masinu na kojoj bi trebalo da se "bavim programiranjem", sta mi osim editora i web servera jos treba?


Mislim da mi je zapravo najveci problem sto sam znanje stekao zbrda-zdola i sto sam sigurno preskocio dosta toga, a to nesto nije ni na pocetku, a nije ni tu gde jesam, tako da bi mi znacilo i kada bi mogao neko ko se bavi programiranjem da napise "timeline" najznacajnijih tacaka u razvoju jednog programera?



Znam da trazim mnogo i da zvucim kao neko ko bi sve na tacni, ali svaka pomoc bi mi dobrodosla. :)
Hvala
[ peromalosutra @ 11.04.2013. 07:38 ] @
Da sam na tvom mjestu, prvo bih krenuo od baza podataka, dakle kako projektovati bazu, normalizovati / denormalizovati (i zasto), pa onda SQL sintaksa itd. Najbolje da vjezbas na MySQL, jer se na njemu zasniva vecina popularnijih cms-ova.

Onda nadjes neku osnovnu PHP knjigu (npr Wrox (Dave Mercer) - Beginning PHP5), pa / ili malo napredniju (mozda PHP 5 Power Programming), u zavisnosti od toga koliko znas.

Neke osnove linux shella nisu na odmet, jer se vecina PHP sajtova vrti na nekom linuxu. Pod osnove podrazumjevam kompresovanje / dekompresovanje fajlova (tar), export / import baze (mysqldump / mysql CLI), pomjeranje fajlova izmedju servera (scp, rsync), mijenjanje vlasnika i permisija nad fajlom (chown, chmod) itd.

Nakon toga, nadjes neku knjigu o CMS-u ili frameworku koji te zanima, npr. za Joomlu Dexter M., Landry L. - Joomla! Programming pa se upoznas sa arhitekturom CMS-a sa kojim planiras raditi. Za neke prostije CMS-ove mozes samo preci tutoriale, ali Joomla ima prilicno kompleksan MVC i moras sve naming konvencije da pogodis tacno da bi ti ekstenzija uopste i radila, pa je ljepse kad sve imas na jednom mjestu. Od frameworka imas CodeIgniter, Yii, zend framework ovako na prvu..

U sklopu programiranja razlicitih ekstenzija, zatrebace ti i JavaScript, pa ako on zapinje opet obrati paznju malo na njega i nauci neku pratecu biblioteku / framework za JS (mootools / jQuery).

Nakon ovoga si vec u stanju da pises naprednije komponente koje rade, pa tek sad pocinjes da razmisljas o optimizaciji (neko rece: prerana optimizacija je majka svih bugova). Da bi uopste mogao bilo sta da optimizujes, potrebno je da znas da pregledas aplikaciju i uocis uska grla. U ovu svrhu imas brdo alata od kojih svaki testira po neki sloj. Kada dodjes do ovoga, onda postavi novu temu i pitaj za application profiling / benchmarking. Ako do sada nisi koristio neki PHP debugger, onda kreces i sa tim (xdebug).

U medjuvremenu procits neku knjigu o design patterns (da sad ne prevodim termin), kao npr. O'Reilly - Head First Design Patterns

Sto se tice razvojnih alata, na pocetku ce ti biti dovoljan text editor, medjutim kako brzina kojom razvijas aplikaciju i rokovi budu postajali sve bitniji, probaj neki IDE alat. Netbeans, Eclipse, Aptana su neki od njih koji dobro podrzavaju PHP. Takodje, vjerovatno ces raditi u timu, pa bi trebao da savladas i neki od alata kao sto su Git, koji opet moze biti oblast za sebe. :)

Setup koji ja koristim za web development trenutno izgleda ovako:

Development (local) Server side: web server u virtuelnoj masini, na njemu neki Linux i LAMP stack + xdebug i mozda jos par drugih alata.
Workstation: Netbeans + Terminal za sve sto se moze iz CLI + MySQL Workbench za neko inicijalno projektovanje baze + kCacheGrind za pregledanje xdebug profiling logova + ...