Šta je novo?

Programiranje za APSOLUTNE pocetnike -> MS Small Basic

  • Začetnik teme Začetnik teme jox
  • Datum pokretanja Datum pokretanja
Možeš li obrazložiti?

I pre toga naravno reći čime se baviš i koliko dugo.

Zahvaljujem se
 
@Pharos:
Do sada sam uradio nekoliko programa koji se uspesno koriste u oblasti motion capturing-a, TV braodcastinga, mobilnoj telefoniji, bankama, plugini za mayu, max, xsi, motionbuilder, pisao sam dodatke za Visual Studio, gomilu custom kontrola, programirao mikrokontrolere, pravio raytracing renderer, koristio graficku kartu za resavanje ogromnih sistema jednacina... Nisam odavno brojao, ali samo za potrebe motion capture-a sa napisao preko pola miliona redova C/C++ programa.

Sa C# mozes da se slikas kada pokusas da uradis nesto sto nije integrisano u .NET.

Ajde sada od gore navedenog napisi sta mozes da uradis u C#!?
 
Činjenica je da C# nije prevashodno namenjen embedded programiranju i da na tom polju C odnosi prednost po pitanju brzine.
Mogu se i u njemu pisati embedded aplikacije (treba proguglati, videti koji se framework koristi i sl., recimo .net micro framework) ali zašto voziti golfa u trkama formule 1

Pisanje AddIn-ova za VS, softwer za banke... zar tu nije C# dobro rešenje?

Svakako da u njemu možeš pisati unmanaged kod i izaći van domena framework-a, koristi WinApi, direktno pristupati memoriji i sl... jednostavno ne postoje ograničenja.

Poenta mojih postova je da embedded programiranje je veoma malo zastupljeno u odnosu na ostale tipove programiranja.

Zašto učiti nešto što je verovatnoća 0.5% da će ti ikada zatrebati, a ne učiti nešto što je verovatnoća od 99% da će ti zatrebati?
 
Poslednja izmena:
@Pharos
Razmisli koji deo softvera koji se vrti na tvojoj mashini je napisan u C#u (ili bilo kom drugom .NET jeziku). Shvatices da 99% softvera NIJE 🙂

Uostalom, i u C#u imas pointere, ne bez razloga...
 
@Pharos:
Zato sto ako znas samo ono sto i 99% progamera zna onda neces dobro naplatiti taj posao ma koliko bio trazen. Ako znas nesto sto 99% programera nezna ili nece da uce i to jos nekome treba, e onda si na dobrom putu da lepo zivis.

Sta god ti mislio, jos kao pocetnik moras da naucis rad sa pointerima.

Ne tvrdim da ne treba uciti C# vec samo kazem da nije sve u C# i .net-u.

Ostao sam ti duzan odgovor na povezivanju programskih jezika... U principu, svaki jezik je zgodan za resavanje nekih programerskih problema. Ako bi znao da npr... jedan deo programa uradis npr u C#, drugi deo u unmamaged C/C++, a treci deo u JScriptu, Pythonu ili PHP-u i da sve to povezes u funkcionalni program/aplikaciju i da sve to uradis u sto kracem roku, e onda mozes da kazes da je nebo limit.
 
@yoyoo
Mislim da se nismo razumeli najbolje.

Zato sto ako znas samo ono sto i 99% progamera zna onda neces dobro naplatiti taj posao ma koliko bio trazen. Ako znas nesto sto 99% programera nezna ili nece da uce i to jos nekome treba, e onda si na dobrom putu da lepo zivis.
Da, ali ja sam govorio da se 99% ljudi ne bavi programiranjem embedded uređaja, drajvera, video igrica i tome sl. I normalno je da neko sa više znanja biva bolje plaćen od početnika. Zato imamo junior developere, senior developere, analitičare, arhitekte...
Nisu pointeri nešto što je neizbežno i nešto što svako mora da koristi.
Ti programiraš hardver i tebi su pointeri svakodnevica, drugi rade nešto drugo (a opet jako ozbiljno) i pointer su videli samo u školi/fakultetu.
Zašto svi ne forsiraju GDI?

Jedan od projekata na kojima sam radio bio je softwer za kontrolu HDTV rutera u mreži. Upoznao sam ljude koji su programirali atmel i pic mikrokontrolere i koji vrhunski poznaju hardver, c/c++... a plate su im manje od recimo java/c# developera. I to je generalno situacija u Srbiji.

@Pharos:
Sta god ti mislio, jos kao pocetnik moras da naucis rad sa pointerima.
Zašto bi ako želiš da se baviš izradom informacionih sistema, web programiranjem...?
Navedi mi tu jedan primer gde se tu primenjuju pointeri?

@Pharos:
Ne tvrdim da ne treba uciti C# vec samo kazem da nije sve u C# i .net-u.
Ni ja ne tvrdim da je sve u C# i da je on sveti gral programiranja

@Pharos:
Ostao sam ti duzan odgovor na povezivanju programskih jezika... U principu, svaki jezik je zgodan za resavanje nekih programerskih problema. Ako bi znao da npr... jedan deo programa uradis npr u C#, drugi deo u unmamaged C/C++, a treci deo u JScriptu, Pythonu ili PHP-u i da sve to povezes u funkcionalni program/aplikaciju i da sve to uradis u sto kracem roku, e onda mozes da kazes da je nebo limit.
Jel može neki primer, link?

edit:

Vezano za ovo poslednje... Ako i postoji takav neki zbudž, da li si razmišljao o održavanju te aplikacije.
Iskombinuješ C# i recimo ASM, a ja blage veze o ASM-u nemam. Kako ja da provalim šta si ti tu napisao, a dobro poznajem c#.
Ili zaposliš nekog ko dobro poznaje ASM ali ne poznaje .net framework i šta da radi... budži nešto umesto da iskoristi punu moć framework-a.
To što ti hoćeš je jako loše rešenje.
Ako misliš da te ložim, popričaj sa nekim arhitektom koga dobro poznaješ i uveri se.
 
Poslednja izmena:
Evo ti nekoliko primera...
1. Autocad. Napisan je u C/C++ a u sebi ima AutoLisp i gomila stvari u programu je uradjena kroz doticni Lisp...
2. MS Office.. sta mislis koliko ima VBA scripta iza pojedinih opcija u programu?
3. Visual Studio i opet VB ili JS script.
4. Autodesk MotionBuilder... ima Python u sebi (gomila funkcionalnosti je uradjena kroz script)
5. Autodesk Maya.. ima Mel script i Python u sebi (gomila funkcionalnosti je uradjena kroz script)
6. Bilo koja igra danas ima u sebi script jezik i ceo gameplay je uradjen u njemu. Uglavnom se koristi LUA mada i ima custom resenja (kao Unreal engine)

Sto se ASM-a tice, to nije moj problem sto ti neznas ASM. Ako npr treba uradini neki brzi image processing ili pomnoziti matrice, ti to mozes u C# a ja mogu i u C# pa kasnije i u ASM ako primetim da je tu bottleneck.

To nije budzenje.. danas se to tako radi.
 
Kad ucis programiranje treba da ti je i najmanji detalj jasan. Da bi ti sve bilo jasno moras da razumes pokazivace bilo da ucis Javu bilo C#. Ima ih, samo nema pokazivacke aritmetike (osim naravno u unsafe oznacenom delu koda kod C#).
 
Poslednja izmena:
Evo ti nekoliko primera...
1. Autocad. Napisan je u C/C++ a u sebi ima AutoLisp i gomila stvari u programu je uradjena kroz doticni Lisp...
2. MS Office.. sta mislis koliko ima VBA scripta iza pojedinih opcija u programu?
3. Visual Studio i opet VB ili JS script.
4. Autodesk MotionBuilder... ima Python u sebi (gomila funkcionalnosti je uradjena kroz script)
5. Autodesk Maya.. ima Mel script i Python u sebi (gomila funkcionalnosti je uradjena kroz script)
6. Bilo koja igra danas ima u sebi script jezik i ceo gameplay je uradjen u njemu. Uglavnom se koristi LUA mada i ima custom resenja (kao Unreal engine)

Ne znam šta da ti kažem... može ovo ovako u nedogled...
Ako neke stvari ne razumeš ili ne znaš kako tačno funkcionišu, ne trebaš uporno tvrditi neko svoje viđenje stvari, već saslušati i naučiti nešto novo.
Džabe da ja tebi pričam o arhitekturi softvera ako je tebi kao hardverašu nepojmljiva višeslojna arhitektura ili kao skriptašu OOP.

Ali da odgovorim, nekome može biti korisno.
Postoji nešto što se zove Interpreter pattern koji omogućava developeru da razvije neki svoj skripting jezik koji bi mogli koristiti krajnji korisnici za lako manipulisanje aplikacije pomoću skriptinga, kao npr. VBA unutar office paketa.
Znači ako ja razvijam aplikaciju, i unutar nje napravim yooyo_script_language, to nije novi programski jezik koji se može samostalno iskompajlirati ili nešto što pokreće moju aplikaciju. To je jednostavno osobina programa kojom se krajnjim korisnicima pruža mogućnost da na višestruko brži način i sa velikom lakoćom implementiraju neku svoju funkcionalost u zadati program.

Sto se ASM-a tice, to nije moj problem sto ti neznas ASM. Ako npr treba uradini neki brzi image processing ili pomnoziti matrice, ti to mozes u C# a ja mogu i u C# pa kasnije i u ASM ako primetim da je tu bottleneck.
To nije budzenje.. danas se to tako radi.

Jeste tvoj problem ako si ti project leader ili finansijer projekta. Ne košta samo razvoj neke aplikacije, već košta i njeno održavanje.
Na fakultetu smo imali neki zadatak sa nekim sortiranjem... nebitno... i kolega koji je dobro poznavao ASM odlučio da pozove njegove funkcije jer lakše može da napiše algoritam za sortiranje (ili ima neke ugrađene fje) nego da koristi foreach petlju.
A sve je to u frameworku mogao da uradi da je pozvao Array.Sort()
Šta smo na kraju dobili? Nešto što je bilo veoma jednostavno za implementirati, bilo je veoma komplikovano za razumeti jer je samo on mogao da iščita to što je napisao. A da je bolje poznavao framework, svi posle njega bi kasnije mogli da nastave tamo gde je on stao.

Zamisli da ti šveđanin piše aplikaciju u javi i nazive promenljiva i klasa piše na švedskom i posle 6 meseci rada napusti firmu. I ti sad angažuješ nekog programera iz Srbije da nastavi razvoj... koliko bi mu vremena trebalo samo da skonta šta je legenda pisao i da nastavi razvoj na tom projektu? A koliko bi mu vremena trebalo da je šveda sve pisao na engleskom?
 
Kad ucis programiranje treba da ti je i najmanji detalj jasan. Da bi ti sve bilo jasno moras da razumes pokazivace bilo da ucis Javu bilo C#. Ima ih, samo nema pokazivacke aritmetike (osim naravno u unsafe oznacenom delu koda kod C#).

Za pisanje J2EE aplikacije ti je potrebno u najsitnije detalje da poznaješ kernel operativnog sistema na kojem će se vrteti tvoja aplikacija? Ili kako se viši programski jezik prevodi u mašinski?

Nešto moraš da poznaješ ukoliko ti je to nešto zaista potrebno.
Postoji nešto što se zove apstrakcija. Da nije tako, vozačku dozvolu ne bi mogao da dobije niko ko ne zna ručno da sklopi automobil.
 
Poslednja izmena:
opet ti pominjes pattern-e 🙂

Nije bez razloga GangOfFour istovremeno knjiga koju mnogi i hvale i ne podnose...
Nebrojeno puta sam slusao ljude koji su je procitali da posle toga u svemu vide neki pattern i sve im onda lici na ekser.

U toku ucenja, patterne ne bih uvodio u pricu prvih godinu-dve programiranja nikako.
Iskusan programer ce iz njih izvuci dobro, a neiskusan ce se frljati istima i sakom i kapom...
 
@Pharos:
Uff ala si tvrdoglav.. skroz si me pogresno procenio... nemogu da ti vise odgovaram. Imam puno posla, ne zelim ni minut da izgubim zbog tebe.
 
Poslednja izmena:
@Pharos: cini mi se da mnogo pojednostavljujes sve. Yoyo-vo vidjenje mi je mnogo realnije, da ne kazem identicno mojem.
 
@Pharos:

Ne mozhe se programirati u patternima. Patterni su samo skelet, morash nekako popuniti "meso". U odredjenim situacijama to meso je ASM, nekad je embedded script, nekad je biblioteka pisana u drugom jeziku, itd. Shto vishe stvari znash, mogucjnosti ti se proshiruju i u prilici si da odaberesh najoptimalnije reshenje, u zavisnosti od prioriteta (nekad je prioritet development time, nekad je prioritet execution time, nekad opet arhitektura, itd.)

Svaka vrsta programskog jezika ima razlog za svoje postojanje, inache ne bi ljudi troshili vreme da ih prave 🙂 OOP, functional, procedural, sve to ima svoje "zashto".

Kada budesh razumeo koncepte i primene svih softverskih paradigmi, tek cesh tada videti "out of the box". Da su arhitekte C# jezika slepo gledale OOP i design patterns, nikada ne dobili elemente funkcionalnog programskog jezika u C#.

Nema kraja uchenju ako si programer, shto je meni lichno najprimamljiviji aspekt te profesije.

Ti ochigledno radish neke vece web aplikacije ili tako neke projekte gde je bitno dobro osmisliti arhitekturu i framework ne bi li se maksimalno smanjila mogucnost da najloshiji programer u timu napravi katastrofu. To su tipichni outsource projekti, ljudi ne provode mnogo vremena na projektu a nisu ni bog zna kako kvalifikovani/talentovani, pa intenzivno korishcenje patterna svakako ima smisla.
 
Sada će još da ispadne kako sam pobornik toga da se treba znati samo jedna tehnologija i slepo se držati nje 🙂

Ne mozhe se programirati u patternima. Patterni su samo skelet, morash nekako popuniti "meso"
Slažem se sa tobom. Ne vidim gde sam napisao da se programira samo pattern-om bez "mesa" 🙂

U odredjenim situacijama to meso je ASM, nekad je embedded script, nekad je biblioteka pisana u drugom jeziku, itd. Shto vishe stvari znash, mogucjnosti ti se proshiruju i u prilici si da odaberesh najoptimalnije reshenje, u zavisnosti od prioriteta (nekad je prioritet development time, nekad je prioritet execution time, nekad opet arhitektura, itd.)
Sa ovim se takođe u potpunosti slažem.
Ja živim od programiranja, ne bavim se njime usputno u okviru nekog školskog projekta. Vreme je najskuplji resurs svakog programera! Ako treba da isparsiram sadržaj nekog sajta, svakako da ću iskorisiti recimo Perl ako ću u njemu potrošiti znatno manje vremena nego da kodiram nešto u C# from scratch. Ali ako će više vremena oduzeti instalacija perla nego referenciranje neke gotove biblioteke sa neta, opredeliću se za ovo drugo.
Svaka vrsta programskog jezika ima razlog za svoje postojanje, inache ne bi ljudi troshili vreme da ih prave 🙂 OOP, functional, procedural, sve to ima svoje "zashto".
Upravo to.
Zašto onda forsirati nešto na samom početku ako se to nešto generalno izbegava i koristi samo ako nemamo drugu soluciju?
U C# sam morao da ga koristim isključivo kada sam koristio biblioteke pisane u C++ koje su kao argument funkcije primale *some_value i gde nije postojala odgovarajuća biblioteka koja bi mogla tu da zameni. U ostalim sitacijama - nikad.

U C++ je pointer osnova i bez njega programiranja nema, ali zbog čega je nastala Java koju je posle MS iskopirao i pretočio u C#?

Ti ochigledno radish neke vece web aplikacije ili tako neke projekte gde je bitno dobro osmisliti arhitekturu i framework ne bi li se maksimalno smanjila mogucnost da najloshiji programer u timu napravi katastrofu. To su tipichni outsource projekti, ljudi ne provode mnogo vremena na projektu a nisu ni bog zna kako kvalifikovani/talentovani, pa intenzivno korishcenje patterna svakako ima smisla.
Svi moji postovi na ovoj temi vezani su za C# (i ko pronađe sličnost sa javom) i generalno za enterprise aplikacije. Osim ako neko želi celog života da bude šljaker pa mu je glavna stavka u CV-u poneki addin za Visual Studio ili neka custom kontrola za .NET framework. Tako nešto se podrazumeva prilikom izrade složenijih aplikacija.
Ono što je bitno jeste dobra arhitektura i odlično prepoznavanje pattern-a i zato mislim da oni treba da se uče uz sintaksu jezika. Ne moraju da se znaju svi, ali patterni tipa Observer, Factory, Proxy, Facade, State... su obavezni.
Bez njih će se programer izgubiti u nekoj kompleksnijoj aplikaciji jer ne zna da se BL razdvaja od DAL-a ili kako klijent komunicira sa serverom.
A i ako treba rešiti neki problem, mnogo je manja verovatnoća da će nešto kasnije krenuto naopako ako postoji pattern koji to rešava, a i potrošiće se mnogo manje vremena nego da developer smišlja logiku za nešto koju su developeri pre njega već osmislili.
Opet ponavljam: vreme je najskuplji resurs.

Kada neko to savlada znaće šta dalje treba da uči i kako konstantno da se usavršava. Ukoliko neko smatra da su mu pointeri esencijalni, neka ih nauči ali postoje mnogo važnije stvari pre toga tipa regex.

Još jednom napominjem da je moja priča vezana za C#. Ukoliko forsirate neki drugi jezik, verovatno tamo važe druga pravila. Ne osporavam ni jedan drugi jezik niti njegovu moć. Ukoliko možete pristojno da živite od njega - super.
 
Poslednja izmena:
E sad posto ste ovde svi u poslu i vidim imate znanja hoce li neko mene da nauci programiranju koji sam apdolutni pocetnik (slepa veverica u sumi) . Bolje vama da dam parice nego nekoj satro skoli za programere 🙂
 
Nazad
Vrh Dno