Mala skola software developing-a

gost 390446

Iskusan
Poruka
5.726
Razmisljam da "otvorim" malu skolu za software developere, kroz upravo ovu temu, gde bismo prolazili kroz lekcije o najboljim principima razvoja softvera (naravno, sve u zavisnosti od toga sta bismo razvijali).

Cilj bi bio da kroz jedan hipoteticki projekat (koji ce vremenom prerasti u pravi projekat), ljudi upoznaju neke best practices kako u vezi frontend, tako i u vezi backend developinga.

Tema bi bila za one koju vec znaju da programiraju ali nemaju preteranog prakticnog iskustva, a mi koji vec radimo to godinama, mozemo im direktno preneti kako se to radi "in real world".

Naravno, samo ako bude bilo bar troje zainteresovanih....pa....ima li vas? :)

P.S.
Sam ne bih mogao ovo da izvedem, jer nisam previse iskusan u frontend-u, tako da bi mi dobrodosla pomoc nekog iskusnijeg za taj deo. I podrazumeva se, sve bismo radili besplatno.
 
Razmisljam da "otvorim" malu skolu za software developere, kroz upravo ovu temu, gde bismo prolazili kroz lekcije o najboljim principima razvoja softvera (naravno, sve u zavisnosti od toga sta bismo razvijali).

Cilj bi bio da kroz jedan hipoteticki projekat (koji ce vremenom prerasti u pravi projekat), ljudi upoznaju neke best practices kako u vezi frontend, tako i u vezi backend developinga.

Tema bi bila za one koju vec znaju da programiraju ali nemaju preteranog prakticnog iskustva, a mi koji vec radimo to godinama, mozemo im direktno preneti kako se to radi "in real world".

Naravno, samo ako bude bilo bar troje zainteresovanih....pa....ima li vas? :)

P.S.
Sam ne bih mogao ovo da izvedem, jer nisam previse iskusan u frontend-u, tako da bi mi dobrodosla pomoc nekog iskusnijeg za taj deo. I podrazumeva se, sve bismo radili besplatno.

javi se na PP
 
ima mali milion tutorijala na internetu..

Ima tutorijala, ali nema projekata. Cesto me ljudi pitaju, nakon sto su procitali tutorijale, da li mogu da ih uputim na nekoga, gde bi radili neki konkretan projekat i videli u praksi kako to izgleda.
Ovde bismo mogli bas to: da kreiramo pravu stvar, koja bi zaista radila, i na nacin kako se to zaista radi u softverskoj firmi (ne metodoloski i organizaciono, necemo se zayebavati sa scrumom jer je nemoguce, vec iskljucivo implementaciono).
 
Ima tutorijala, ali nema projekata. Cesto me ljudi pitaju, nakon sto su procitali tutorijale, da li mogu da ih uputim na nekoga, gde bi radili neki konkretan projekat i videli u praksi kako to izgleda.
Ovde bismo mogli bas to: da kreiramo pravu stvar, koja bi zaista radila, i na nacin kako se to zaista radi u softverskoj firmi (ne metodoloski i organizaciono, necemo se zayebavati sa scrumom jer je nemoguce, vec iskljucivo implementaciono).

a koji jezik bi koristio?
 
a koji jezik bi koristio?

Za pocetak je to potpuno nebitno. Do implementacije bi se doslo kasnije. Prvi cilj bi bio da ljudi shvate samu arhitekturu resenja jedne enteprise aplikacije - kako sve postaviti, kako ce sve da se vrti, kako ce delovi aplikacije da komuniciraju medjusobno, itd.
Glavni cilj i jeste da ljudi shvate kako treba software developer da razmislja, a kasnije kada dodjemo do implementacije, onda bismo se fokusirali opet na metode (programski jezik je opet tu nebitan), konkretno da se objasni zasto se nesto implementira na bas taj i taj nacin, a ne na neki drugi, zasto je bitno razdvojiti UI od logike, zasto se koristi dependency injection, itd, itd.
 
+1

Trenutno pokušavam da spojim c# i mysql, barem u lokalnom desktop okruženju.

Interesuje me kako da napravim kada user na aplikaciji uploaduje podatke (tipa: osnovni string podaci.... fajlovi: npr. slike... itd) i gdje onda da to pohranim... na nekom serveru ili šta već dođe kao neki storage podataka kojima bi se to moglo dinamički pristupiti preko net konekcije. Zatim editovanje istih stvari od tog istog usera itd itd.... Ima tu svega...
 
+1

Trenutno pokušavam da spojim c# i mysql, barem u lokalnom desktop okruženju.

Interesuje me kako da napravim kada user na aplikaciji uploaduje podatke (tipa: osnovni string podaci.... fajlovi: npr. slike... itd) i gdje onda da to pohranim... na nekom serveru ili šta već dođe kao neki storage podataka kojima bi se to moglo dinamički pristupiti preko net konekcije. Zatim editovanje istih stvari od tog istog usera itd itd.... Ima tu svega...

Sve to implicira da moras da implementiras enterprise resenje.

Nemoj da te zbuni rec "enterprise" - to podrazumeva softversko resenje koje se sastoji iz vise delova - kao sto si naveo, treba ti baza podataka, treba ti nesto gde ces da cuvas fajlove, treba ti klijent (User Interface) preko kojeg ces da izvrsavas sve to, treba ti neki servis, koji ce da prima zahteve koje mu posalje klijent.

OK, dvojica, nije lose :)
 
Imaš li neku literaturu za preporučiti?

Literature je puno, raznolika je, i lako se izgubis u svemu. Zato i hocu da "otvorim skolu" ovde, gde bismo kroz jedan primer objasnili kako se pravi dobar software.

Nema "quick and dirty" resenja, tako necemo.

Najvaznija osobina software developera je strpljenje, ako toga nema, nema ni dobrog proizvoda.
 
Jer koristiš neki generator koda. Nešto što će umesto mene da napravi klase, forme za unos na osnovu tabele u Sql bazi? Da se rešim tog dosadnog posla.

Ne bih da te obeshrabrim, ali ako zelis brzo i lako resenje, onda bolje odustani od programiranja. Glavna osobina programera je strpljenje.

Pravljenje softvera je kao pravljenje bilo kojeg drugog proizvoda. Recimo, treba da napravis vozilo na cetiri tocka. Mozes uzeti kutiju, prisrafiti cetiri tocka, i ta kutija ce se kotrljati nizbrdo.
Ali ako zelis da ta kutija se ne raspadne kada udari u prvu rupu, onda ti trebaju amortizeri. Ako zelis da kutija moze da skrece levo-desno, onda ti treba osovina za tockove sa diferencijalom koji ce omoguciti da se jedan tocak okrece brze drugi sporije, i upravljacki mehanizam koji ce da pomera tockove jedne osovine levo ili desno. Ako zelis da ne pokisnes dok se vozis u toj kutiji, treba ti krov i stakla sa strane koja dihtuju. Ako zelis da te neko vidi nocu, trebaju ti svetla. I tako dalje, i tako dalje.....do beskonacnosti.

Tako je i sa softverom: mozes napraviti formu sa koje se podaci direktno upisuju u bazu podataka. A sta ako ta forma treba da bude na jednom racunaru, a baza podataka na drugom, i ta ista baza podataka, i ta forma, treba da budu dostupni i u Kaliforniji i u Pancevu? A sta ako hoces da tvoja baza podataka moze da opsluzuje aplikacije i na androidu, iPhone-u, klasicne desktop aplikacije, ili obicnu web stranicu? Sta ako hoces da se zastitis da ne moze svaka budala da pristupi toj bazi? Sta ako hoces da izbegnes redudansu podataka u bazi, i da tvoja baza bude lako citljiva i da rezultate daje brzo? I tako, opet, do beskonacnosti.

Sve to mozes ovde da naucis, ali samo ako budes imao strpljenja. Na generatore koda zaboravi, iako cemo koristiti framework-e koji omogucuju automatizaciju puno toga, moracemo dosta da kodiramo.

Kao sto sam napisao u uvodnom postu, necu nikoga da ucim brza i laka resenja, vec iskljucivo nesto sto se zove best practice.
 
Poslednja izmena:
Najbitnije kod svakog rešenja je njegova skalabilnst, niko ne može da predvidi koliko će se zahtevi vremenom menjati i koliko će transformacija biti neophodno zbog zahteva korisnika. Zato treba u startu postaviti sistem tako da sve kasnije integracije/migracije prođu što bezazlenije, a ne da kada naiđe prvi komplikovan zahtev udarimo u stenu i tu stanemo zauvek.

Pošto vidim da smo uspeli da dobjiemo konsenzus oko formiranja teme, da li bi možda trebalo da prodiskujemo o samom hipotetičkom projektu kroz koji bismo zajedno prošli? Da li ćemo postaviti na početku neku vrstu projektnog zadatka (o kakvoj aplikaciji se radi, koji problem aplikacija rešava, koje sve funkcionalnosti želimo da objedinimo u njoj, u kakvom okruženju će aplikacija raditi, sa kojim rešenjima će naša aplikacija biti integrisana, kakvi su zahtevi korisnika po pitanju pouzdanosti naše aplikacije, koliko će naša aplikacija imati korisnika...)
 
Najbitnije kod svakog rešenja je njegova skalabilnst, niko ne može da predvidi koliko će se zahtevi vremenom menjati i koliko će transformacija biti neophodno zbog zahteva korisnika. Zato treba u startu postaviti sistem tako da sve kasnije integracije/migracije prođu što bezazlenije, a ne da kada naiđe prvi komplikovan zahtev udarimo u stenu i tu stanemo zauvek.

Pošto vidim da smo uspeli da dobjiemo konsenzus oko formiranja teme, da li bi možda trebalo da prodiskujemo o samom hipotetičkom projektu kroz koji bismo zajedno prošli? Da li ćemo postaviti na početku neku vrstu projektnog zadatka (o kakvoj aplikaciji se radi, koji problem aplikacija rešava, koje sve funkcionalnosti želimo da objedinimo u njoj, u kakvom okruženju će aplikacija raditi, sa kojim rešenjima će naša aplikacija biti integrisana, kakvi su zahtevi korisnika po pitanju pouzdanosti naše aplikacije, koliko će naša aplikacija imati korisnika...)

To je sledeci korak: da postavimo projektni zadatak. S tim sto necemo da preterujemo sa zahtevima, jer je ovo, ipak, skolski primer, tako da bi pri postavljanju zahteva trebalo da stavimo akcenat na ono sto ce biti kljucno da ucesnicima projekta pomogne da nesto konkretno nauce. Tako da bi, pre postavljanja projekta, trebalo da odgovorimo na pitanje "sta ljudi moraju da nauce iz ovog projekta?"
 
Po meni morali bi da nauče da u startu gledaju što dalje, da se prvo dobro zamisle na koji način bi nešto realizovali i da pokušaju da u svojoj glavi zamisle ono što žele da dobiju od rešenja. Koji su prioriteti našeg softverskog rešenja, šta nam je najbitnije. Svakako po meni tu dolazi i razumevanje modularnosti jednog sistema, predviđanje unapred grešaka koje se mogu javiti u toku rada korisnika, onemogućavanje neželjenih akcija korisnika, najbolja praksa kada je u pitanju administracija aplikacije, dobra praksa kada je u pitanju projektovanje sistema tako da performanse budu što bolje.

Ako bih nešto izdvojio to je mogućnost da se unapred predviđaju situacije, da se u startu sistem postavi tako da u kasnijem toku životnog ciklusa softvera zahtevi za izmenama i prilagođavanjima ne budu neizvodljivi i kompleksni, već da se sistem ustroji tako da je održavanje aplikacije bezbolno, da imamo kontrolu u svakom trenutku i da znamo kada je poterbno da se izvrši neka modifikacija koji je najbolji način da se to izvede i na koje komponente sistema bi takva izmena uticala.
 
Poslednja izmena:
Ne bih da te obeshrabrim, ali ako zelis brzo i lako resenje, onda bolje odustani od programiranja. Glavna osobina programera je strpljenje.

Pravljenje softvera je kao pravljenje bilo kojeg drugog proizvoda. Recimo, treba da napravis vozilo na cetiri tocka. Mozes uzeti kutiju, prisrafiti cetiri tocka, i ta kutija ce se kotrljati nizbrdo.
Ali ako zelis da ta kutija se ne raspadne kada udari u prvu rupu, onda ti trebaju amortizeri. Ako zelis da kutija moze da skrece levo-desno, onda ti treba osovina za tockove sa diferencijalom koji ce omoguciti da se jedan tocak okrece brze drugi sporije, i upravljacki mehanizam koji ce da pomera tockove jedne osovine levo ili desno. Ako zelis da ne pokisnes dok se vozis u toj kutiji, treba ti krov i stakla sa strane koja dihtuju. Ako zelis da te neko vidi nocu, trebaju ti svetla. I tako dalje, i tako dalje.....do beskonacnosti.

Tako je i sa softverom: mozes napraviti formu sa koje se podaci direktno upisuju u bazu podataka. A sta ako ta forma treba da bude na jednom racunaru, a baza podataka na drugom, i ta ista baza podataka, i ta forma, treba da budu dostupni i u Kaliforniji i u Pancevu? A sta ako hoces da tvoja baza podataka moze da opsluzuje aplikacije i na androidu, iPhone-u, klasicne desktop aplikacije, ili obicnu web stranicu? Sta ako hoces da se zastitis da ne moze svaka budala da pristupi toj bazi? Sta ako hoces da izbegnes redudansu podataka u bazi, i da tvoja baza bude lako citljiva i da rezultate daje brzo? I tako, opet, do beskonacnosti.

Sve to mozes ovde da naucis, ali samo ako budes imao strpljenja. Na generatore koda zaboravi, iako cemo koristiti framework-e koji omogucuju automatizaciju puno toga, moracemo dosta da kodiramo.

Kao sto sam napisao u uvodnom postu, necu nikoga da ucim brza i laka resenja, vec iskljucivo nesto sto se zove best practice.

Rođače, ja sam programer skoro 20 godina. C/C++/C#/VB.Net+ SQL Server+ Oracle... Imam stotinak projekata iza sebe. Minumum.Jednostavno me mrzi da pišem za svaki projekat klase , SP i forme za editovanje jovo nanovo.
Postoje generatori koda koji imaju neki meta jezik za pravljenje templatea na osnovu kojih se to generiše. EazyCode npr. Imam ja i svoje generatore ali nemam vremena da ih završim. Lako ću ja kod koji generator napravi da doteram.
Eto, to sam pitao. Ima li ko iskustva sa nekim takvim alatom..
 

Back
Top