Forum » Programiranje » Kje/kako ste se naučili programiranja?
Kje/kako ste se naučili programiranja?
Marat ::
@DarKel, v bistvu niti ni važno s katerim jezikom začneš, ker so osnove programiranja iste v vseh programskih jezikih. Bolj je pomembno, da imaš dober vir za učenje. Jaz ti predlagam tole knjigo: Head First Programming. Odlična za začetnika in v vsakem poglavju narediš nov mini projekt
pitbull1336 ::
Jerry000 ::
pitbull1336 je izjavil:
v bistvu niti ni važno s katerim jezikom začneš, ker so osnove programiranja iste v vseh programskih jezikih.]
Torej osnove v LISP-u in C++ so iste? In what universe.
No pikolovski pa tut ni treba bit, sej pa ja dobr veš o čem in kako.
Egidij88 ::
S katerim programskim jezikom začeti? Kateri je najbolj uporaben in univerzalen, da potem lažje uštekaš še katerega drugega?
Yacked2 ::
S katerim programskim jezikom začeti? Kateri je najbolj uporaben in univerzalen, da potem lažje uštekaš še katerega drugega?
Java, da se naučiš urejenega programiranja, marsikdo ti bo priporočil python, čigar sintaksa je res preprostejša, a zato saj meni slabše pregledna. Pri javi nisi omejen na OS, lahko pa hitro prešaltaš na C#, ki ima skoraj isto sintakso.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!
AndrejO ::
Ni enega, so trije: C, Haskell in Prolog.
C zato, ker je to jezik, ki te najbolj izpostavi načinu kako računalnik deluje, hkrati pa se v njem lahko posvetiš algoritmu in ne zgolj mnemonikom določenega procesorja (torej ni zbirnik).
Haskell zato, ker je dobro razumeti kaj je to funkcijsko programiranje, ki se dokaj razlikuje od siceršnjega strukturiranega (proceduralnega ali objektnega).
Prolog zato, ker je dobro razumeti kaj so to ekspertni sistemi, kjer ne govoriš o programu, temveč o naboru znanja, nato pa tako naučenemu (t.j. "sprogramiran") sistemu postavljaš vprašanja.
C zato, ker je to jezik, ki te najbolj izpostavi načinu kako računalnik deluje, hkrati pa se v njem lahko posvetiš algoritmu in ne zgolj mnemonikom določenega procesorja (torej ni zbirnik).
Haskell zato, ker je dobro razumeti kaj je to funkcijsko programiranje, ki se dokaj razlikuje od siceršnjega strukturiranega (proceduralnega ali objektnega).
Prolog zato, ker je dobro razumeti kaj so to ekspertni sistemi, kjer ne govoriš o programu, temveč o naboru znanja, nato pa tako naučenemu (t.j. "sprogramiran") sistemu postavljaš vprašanja.
driver_x ::
Še en glas za Javo, v njej lahko programiraš širok spekter zadev, od igrač (LEGO Mindstorms), telefonov (Android), klasičnih, web do enterprise serverskih aplikacij. Je tudi strožja od npr. C++, kar je za začetnika bolje,
Zgodovina sprememb…
- spremenil: driver_x ()
Rias Gremory ::
Mirno gledamo, kako naš svet propada,
saj za časa našega življenja ne bo popolnoma propadel.
saj za časa našega življenja ne bo popolnoma propadel.
detroit ::
Upam da falotje niste preveč pristranski in navajate vaš najljubši jezik brez argumentov, da se ne zgubil že na začetku. Hočem reč, da jst mu na primer nisem svetoval začet z js, ker te ne nauči ravno reda. Ni type safe... Tudi za python se ne spomnim več če je. Zato pa po moje java/c# je super, ker kot smo že omenil večkrat sta si precej podobna.
Za OP pa upam da je že pljunil v roke;)
Za OP pa upam da je že pljunil v roke;)
Skero
AndrejO ::
Še en glas za Javo, v njej lahko programiraš širok spekter zadev, od igrač (LEGO Mindstorms), telefonov (Android), klasičnih, web do enterprise serverskih aplikacij. Je tudi strožja od npr. C++, kar je za začetnika bolje,
Če je cilj pridobitev čim boljše osnove za karierno programiranje, potem je Java slaba izbira, ker skrije način delovanja strojne opreme. V tem kontekstu je tudi upravljanje robotkov samo distrakcija in sama po sebi ne služi zastavljenem cilju.
Zgodovina sprememb…
- spremenil: AndrejO ()
detroit ::
Misilm da mu taka abstrakcija ne bo škodila, dvomim da ravno rabi začet z assemblerjem. Mogoče pa C niti ni tako slaba izbira, kazalci pa to...
Skero
AndrejO ::
Assembler sem zapisal izrecno, da ne. Zakaj C, pa tudi. Po mojih izkušnjah se tisti, ki so se naučili C, zelo hitro prilagodijo na vse ostale jezike iz iste družine. Za Javo, Python, ... velja ravno nasprotno.
driver_x ::
Še en glas za Javo, v njej lahko programiraš širok spekter zadev, od igrač (LEGO Mindstorms), telefonov (Android), klasičnih, web do enterprise serverskih aplikacij. Je tudi strožja od npr. C++, kar je za začetnika bolje,
Če je cilj pridobitev čim boljše osnove za karierno programiranje, potem je Java slaba izbira, ker skrije način delovanja strojne opreme. V tem kontekstu je tudi upravljanje robotkov samo distrakcija in sama po sebi ne služi zastavljenem cilju.
Za karierno programiranje je vsekakor potrebno še kaj več, kot zgolj poznavanje Jave, tako da strinjam s tabo. Da pa Java zadosti osnove, ki jo lahko potem nadgradiš npr. s C++.
Mavrik ::
Assembler sem zapisal izrecno, da ne. Zakaj C, pa tudi. Po mojih izkušnjah se tisti, ki so se naučili C, zelo hitro prilagodijo na vse ostale jezike iz iste družine. Za Javo, Python, ... velja ravno nasprotno.
S tem da je posiljevanje začetnikov z jezikom polnih min norost.
The truth is rarely pure and never simple.
AndrejO ::
Za "degustacijo" potem raje Python, ker je bolj uporabniku prijazen. Javo bi dal na drugo mesto in res v povezavi s kakšnimi igračami, ki dajo hiter pozitiven feedback loop.
Ko se pa nekdo odloči, da je to pač to, potem pa več ne vidim potrebe za bergle.
Nekako tako kot fizika in kemija. Za prve korake se malo meče, riše in meša. Za karierno pot, pa se uči drugače in druge stvari.
Ko se pa nekdo odloči, da je to pač to, potem pa več ne vidim potrebe za bergle.
Nekako tako kot fizika in kemija. Za prve korake se malo meče, riše in meša. Za karierno pot, pa se uči drugače in druge stvari.
AndrejO ::
Mesar ::
S tem da je posiljevanje začetnikov z jezikom polnih min norost.
Odvisno od starosti in cilja. Vendar nekdo, ki postavi vprašanje "najboljša osnova" si verjetno zasluži točno to, da se ne bo kasneje vračal ravno k tem osnovam.
This! Če se slučajno nauči, kr tak ker bi rad znal programirat, osnove C++, kaj bo potem s tem? Zanke pa polja skupaj zlagal programiral XO in vislice? Potem ga bo verjetno hitro minlo do vsega...
Your turn to burn!
Zgodovina sprememb…
- spremenil: Mesar ()
PARTyZAN ::
Ne, potem si bo naročil en ARM evaluation board in počel awesome stvari.
Vsi jeziki so lahko zabavni.
Vsi jeziki so lahko zabavni.
alexa-lol ::
Mogoče je zanj bolje da se nauči osnove JS in AngularJS/jQuery ter naredi preprosto TODO stran, ki jo malo oblikuje s CSS. Nadaljuje lahko npr. z družinskim drevesom ob tem pa se nauči nekaj o podatkovnih tipih in algoritmih.
Po drugi strani ko vidi output C-ja v konzoli ga vse mine in sploh ne pride do naslednje stopnje. Objektivno je izgled HTML dokumenta v večini primerov "lepši" od outputa v konzoli.
Pri kombinaciji JS+AngularJS/jQuery rabiš malo znanja in dela da se že nekaj pozna, pri C pa malo več in to lahko začetnika motivira/demotivira.
To je podobno kot hujšanje. Koristno je da imaš že od začetka dokaj zahtevne treninge ampak če jih imaš si zmatran in nisi motiviran za nadaljne treninge in dolgoročno si še vedno prekomerno prehranjen. Lahko pa začneš z manj intenzivnimi treningi a se jih držiš pol leta in po pol leta si na boljšem.
Po drugi strani ko vidi output C-ja v konzoli ga vse mine in sploh ne pride do naslednje stopnje. Objektivno je izgled HTML dokumenta v večini primerov "lepši" od outputa v konzoli.
Pri kombinaciji JS+AngularJS/jQuery rabiš malo znanja in dela da se že nekaj pozna, pri C pa malo več in to lahko začetnika motivira/demotivira.
To je podobno kot hujšanje. Koristno je da imaš že od začetka dokaj zahtevne treninge ampak če jih imaš si zmatran in nisi motiviran za nadaljne treninge in dolgoročno si še vedno prekomerno prehranjen. Lahko pa začneš z manj intenzivnimi treningi a se jih držiš pol leta in po pol leta si na boljšem.
PARTyZAN ::
Odvisno od posameznika. Jaz sem začel s C/C++ pa so bile naloge, ki sem jih dobil zabavne, čeprav je bil output v terminalu. Reševanje problemov je zabavno, ne "bling".
Mimogrede, če že govorimo o orgazmiranju pri outputu, meni je zadovoljstvo ko krmilim nekaj (pa naj bodo to samo LEDice) večje, kot zrenderirana spletna stran. Vsak ima svoje veselje, zato je najboljše, če poskusiš več stvari, si prebereš, kaj se s katerim programskim jezikom pogosto počne in se na podlagi tega odločiš.
Mimogrede, če že govorimo o orgazmiranju pri outputu, meni je zadovoljstvo ko krmilim nekaj (pa naj bodo to samo LEDice) večje, kot zrenderirana spletna stran. Vsak ima svoje veselje, zato je najboljše, če poskusiš več stvari, si prebereš, kaj se s katerim programskim jezikom pogosto počne in se na podlagi tega odločiš.
AndrejO ::
Če človek napiše vprašanje: "Kateri je najbolj uporaben in univerzalen, da potem lažje uštekaš še katerega drugega?" to razumem in razberem kot: "želim karierno programirati".
Če je to cilj, potem so izbire čisto drugačne, kot pa "nekaj malega želim programirati", "poskusil bi programirati", "sem 10 let star", idr.
Predlogi, ki sem jih dal, so osnovani na mojih osebnih izkušnjah o temu katero znanje mi je do sedaj pri programiranju dalo "konkurenčno prednost" in kateri manjki držijo nazaj tiste, ki niso nikoli rabili "hoditi po minskem polju".
Seveda se lahko motim in sem vprašanje razumel čisto narobe. Lahko tudi dajem tudi slabe predloge. Osebne izkušnje do sedaj pa so vsaj meni osebno potrdile, da za kariernega programerja hkrati potrebuješ znanja, ki se zadevajo tako načina delovanja operacijskih sistemov in do neke mere tudi strojne opreme (zato C), kot tudi širino v pristopih (zato Haskell in Prolog).
Srečal sem tudi veliko programerjev, ki izven okolja Jave ne zmorejo ničesar ali komaj kaj, ker bodo takoj stopili na mino in izgubili vso voljo. Nisem pa še srečal programerja, ki bi znal C, pa ga bi kakšen drug jezik potem še lahko tako "prestrašil". Če sem vprašanje pravilno razumel, je moj predlog seveda takšen, kot je: C, Haskell in Prolog. Vrstni red je pri temu nepomemben.
Če je to cilj, potem so izbire čisto drugačne, kot pa "nekaj malega želim programirati", "poskusil bi programirati", "sem 10 let star", idr.
Predlogi, ki sem jih dal, so osnovani na mojih osebnih izkušnjah o temu katero znanje mi je do sedaj pri programiranju dalo "konkurenčno prednost" in kateri manjki držijo nazaj tiste, ki niso nikoli rabili "hoditi po minskem polju".
Seveda se lahko motim in sem vprašanje razumel čisto narobe. Lahko tudi dajem tudi slabe predloge. Osebne izkušnje do sedaj pa so vsaj meni osebno potrdile, da za kariernega programerja hkrati potrebuješ znanja, ki se zadevajo tako načina delovanja operacijskih sistemov in do neke mere tudi strojne opreme (zato C), kot tudi širino v pristopih (zato Haskell in Prolog).
Srečal sem tudi veliko programerjev, ki izven okolja Jave ne zmorejo ničesar ali komaj kaj, ker bodo takoj stopili na mino in izgubili vso voljo. Nisem pa še srečal programerja, ki bi znal C, pa ga bi kakšen drug jezik potem še lahko tako "prestrašil". Če sem vprašanje pravilno razumel, je moj predlog seveda takšen, kot je: C, Haskell in Prolog. Vrstni red je pri temu nepomemben.
Zgodovina sprememb…
- spremenil: AndrejO ()
Egidij88 ::
Tako ja. Cilj je, da bi se naučil jezika in bi se potem znal prilagoditi še na kaj drugega, če bi rabil v službi. Na faksu sem se kar dobro izmaknil programiranju, kot večina tistih, ki ni programirala že v srednji šoli. Pri tistem enem predmetu iz programiranja, pa smo imeli C# in sestavljali neke bedne obrazce in templejte. Tipkovnica skozi okno... ker ne rabim takih zadev ročno pisati. Je pa res, da je treba začeti iz osnove...
Zgodovina sprememb…
- spremenilo: Egidij88 ()
DarKel ::
Egidij88 se strinjam isto pri meni, kar se tiče isto na faksu mel sam en predmet programiranja in to je to... sedaj bi ga pa sam se naučil kokr pravi @AndrejO za neko "karierno" programiranje, da mi bo bolj koristil v kakšni službi..se pravi sam bi mislim da bi bilo dobro programirat v podakovni bazi (SQL) in potem še kakšen C#?
zraven pa bi nadgradil znanja JS HTML/CSS pomoje nebo škodilo?
zraven pa bi nadgradil znanja JS HTML/CSS pomoje nebo škodilo?
nyler ::
V srednji šoli v velenju prvo c++ nato php, c#, asp.net,javaskript, html, css, ajax(po lastni iniciativi) pa tudi mysql podrobno.
DarKel ::
moj prvi stik s programiranjem je bil tud v c++, sam ni bil ql :D pa potem v konzoli C# ter visual C#
Mesar ::
Afaik v vseh srednjih šolah kjer imajo predmete ki pokrivajo osnove ali pa začetke programiranja začnejo z Javo ali pa C++...
Your turn to burn!
DarKel ::
ja mi smo začel z C++ to je blo zame prvo srečanje s programiranjem, imel nas je pa profesor, ki ni bil lih kompatibilen za programerja ni bil tudi on navdušen s tem, da ns uči programiranje tako, da je blo vse bol švoh
Jerry000 ::
ja mi smo začel z C++ to je blo zame prvo srečanje s programiranjem, imel nas je pa profesor, ki ni bil lih kompatibilen za programerja ni bil tudi on navdušen s tem, da ns uči programiranje tako, da je blo vse bol švoh
Isto pri meni...učil je profesor v prvem letniku, razlagal je pa tko kot da že 10 let programiramo. No saj ne rečem, nekateri so se naučili (so tut od prej že znali) ampak men kot frišnemu pa ni blo ušeč in mi je tudi motivacija ornk padla ker so asistenti raj j**** v glavo kot pa znanje iskali. Ampak ok, se da to še vseen naučit :)
Smurf ::
d4vid ::
Ne, potem si bo naročil en ARM evaluation board in počel awesome stvari.
Vsi jeziki so lahko zabavni.
Evo, ravno dobil TI LaunchPad, vlečem dol Energia software, da ga sprogramiram ter da zraven usposobim še WiFi. Tako da je tale (C++?) jezik naslednji na vrsti za učenje. Trenutno je na prvem mestu Java za razvoj android aplikacij.
Main PC: Asus PN50 | AMD Ryzen 5 4500U | 16 GB RAM | 256 GB SSD
PC2: HP Z400 | Intel Xeon L5630 | 6 GB RAM | 120 GB SSD
Laptop: HP Elitebook 840G1 | Intel i5 | 8 GB RAM | 256 GB SSD
PC2: HP Z400 | Intel Xeon L5630 | 6 GB RAM | 120 GB SSD
Laptop: HP Elitebook 840G1 | Intel i5 | 8 GB RAM | 256 GB SSD
Mavrik ::
Na FE-ju se pa recimo v 1. letniku zacne z JS v drugem semestru pa se preklopi na C++.
O wow, en braindead jezik in potem preklopiš na drugega kjer začetnik prvih 6 mesecev ni sposoben classa napisati brez da bi si nogo odstrelil :D
(Pač, kot sem že enkrat tu razložil, programski jezik za začetnika je tisti, ki mu omogoča začeti razmišljati in implementirati delovanje algoritmov brez da bi se ukvarjal s samimi low-level implementacijskimi sposobnostmi. Samo programersko razmišljanje je dovolj "težko" brez da bi ljudem moral razlagati vse probleme in luknje C-jevih str* funkcij in JS wartov :) )
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
AndrejO ::
(Pač, kot sem že enkrat tu razložil, programski jezik za začetnika je tisti, ki mu omogoča začeti razmišljati in implementirati delovanje algoritmov brez da bi se ukvarjal s samimi low-level implementacijskimi sposobnostmi. Samo programersko razmišljanje je dovolj "težko" brez da bi ljudem moral razlagati vse probleme in luknje C-jevih str* funkcij in JS wartov :) )
Bistvena razlika je, če učiš programiranje kot "razumeti za kaj se gre" ali pa programiranje kot "karierna odločitev".
Samo "programersko razmišljanje" je tako samo polovica zgodbe. Druga polovica je dejansko razumevanje organizacije pomnilnika ter uporabe kopice in sklada, Von Neumannove arhitekture, razlike med podatkom in kazalcom na podatek, načinov prenašanja parametrov, aritmetika kazalcev in še kaj se bi našlo.
Tudi razumevanje delovanja str* funkcij je pomembno, da razumeš kaj to pomeni za jezike, ki imajo spremenljive znakovne nize in jezike, ki imajo samo nespremenljive znakovne nize. Dejansko je to, kar ti imenuješ "problemi in luknje" osnovna tema razumevanja delovanja in dobro izhodišče za kasnejšo večjo rigoroznost pri programiranju v katerem koli drugem jeziku iz družine proceduralnih in OO jezikov.
Seveda pa je učenje tega smiselno samo in izključno pod pogojem, da nekdo želi postati široko izobražen programer, ki se bo zlahka prilagajal drugim jezikom, ki danes predstavljajo večino programerskega "kruha". Od C++ do Jave, JS, PHP in česarkoli drugega na to temo, kar se spomneš. Npr. brez znanja osnov, ki ti jih da C, sploh ne veš kaj je v CPython tako narobe z upravljanjem pomnilnika, da to omejuje njegovo uporabnost. Nekdo, ki ima izkušnje v C, mu lahko problem pojasniš v 30s ali manj.
Za širino pa sam predlagam še Haskell in Prolog, kot dva tipična predstavnika drugačnih pristopov k programiranju. Pristopov, ki so v nekaterih domenah uporabe upravičeno bolj učinkoviti in zato tudi priljubljeni, kot pa "proceduralni" jeziki.
chironex ::
Seveda pa je učenje tega smiselno samo in izključno pod pogojem, da nekdo želi postati široko izobražen programer, ki se bo zlahka prilagajal drugim jezikom, ki danes predstavljajo večino programerskega "kruha". Od C++ do Jave, JS, PHP in česarkoli drugega na to temo, kar se spomneš. Npr. brez znanja osnov, ki ti jih da C, sploh ne veš kaj je v CPython tako narobe z upravljanjem pomnilnika, da to omejuje njegovo uporabnost. Nekdo, ki ima izkušnje v C, mu lahko problem pojasniš v 30s ali manj.
Če bi obstajali všečki bi ti rade volje stisnil enega. To je dejansko kar manjka danasnjim developerjem, ucijo se iz high levela navzdol in dostikrat, ko vidijo, da je pa mickeno manj high level lahko že precej zakompliciran za nekoga, ki celo zivljenje stoji na lazanji, do dejanskega razumevanja kaj se sploh dogaja v "njegovem" tehnoloskem stacku, niti ne pride.
AndrejO ::
Učenje je proces v katerem je delujoča povratna zanka zelo pomembna. Merjenje znanja je kompleksen problem in pri programiranju se ga največkrat rešuje tako, da se daje učencu možnost, da lahko hitro vidi rezultate svojega dela.
Učenje programiranja je tako tudi iskanje ravnotežja med različnimi, tudi konfliktnimi cilji, kjer se bo učenca sočasno motiviralo in izpostavljalo izzivom, ki vedno za malenkost presegajo njegovo znanje in ga silijo v dejansko učenje in premikanje njegovih mej.
Zato moram še enkrat poudariti. Jezik in okolje sta zelo odvisna od starosti učenca in od ciljev učenca. Enoznačnega odgovora ni in moji predlogi, čeprav jih zagovarjam na podlagi lastnih izkušenj, niso edina pot. Marsikdo se je naučil "od zgoraj navzdol", ko ga je radovednost silila v spoznavanje vedno nižjih nivojev. Zaradi tega ni nič slabši programer, samo do svojega znanja je prišel po drugi poti.
Kar opažam, pa je, da imajo dobri programerji vedno nizkonivojska znanja, ne glede na to na kakšen način ali v kakšni smeri so jih pridobivali. Moje razmišljanje je, da bi lahko začeli tudi "na spodnji strani" oziroma pri jeziku, ki ima najmanj pomagal in učenca najbolj izpostavi elementarnim obrtniškim spretnostim. Na osnovi teh pa je potem verjetno lažje graditi naprej in prehajati v okolja, ki imajo bistveno bolj bogat razvojni okvir, bistveno bogatejše osnovne knjižnice, bistveno bolj jedrnate in berljive sintaktične konstrukte in še kaj.
Morda se motim in ima takšna pot več "osipa", kot pa "od zgoraj navzdol". Lahko pa tudi ne. Se je pa moje razmišljanje izoblikovalo v letih, ko sem gledal "programerje v VisualBasic", ki so bili prvi za katere sem opazil, da nekdo dejansko ni sposoben narediti prehoda med sorodnimi jeziki, ker so ti za njega popolnoma tuji in v celoti nerazumljivi. Pa čeprav so vsi postopki, algoritmi in način analize problema identični, dokler ostajaš v isti družini jezikov.
Učenje programiranja je tako tudi iskanje ravnotežja med različnimi, tudi konfliktnimi cilji, kjer se bo učenca sočasno motiviralo in izpostavljalo izzivom, ki vedno za malenkost presegajo njegovo znanje in ga silijo v dejansko učenje in premikanje njegovih mej.
Zato moram še enkrat poudariti. Jezik in okolje sta zelo odvisna od starosti učenca in od ciljev učenca. Enoznačnega odgovora ni in moji predlogi, čeprav jih zagovarjam na podlagi lastnih izkušenj, niso edina pot. Marsikdo se je naučil "od zgoraj navzdol", ko ga je radovednost silila v spoznavanje vedno nižjih nivojev. Zaradi tega ni nič slabši programer, samo do svojega znanja je prišel po drugi poti.
Kar opažam, pa je, da imajo dobri programerji vedno nizkonivojska znanja, ne glede na to na kakšen način ali v kakšni smeri so jih pridobivali. Moje razmišljanje je, da bi lahko začeli tudi "na spodnji strani" oziroma pri jeziku, ki ima najmanj pomagal in učenca najbolj izpostavi elementarnim obrtniškim spretnostim. Na osnovi teh pa je potem verjetno lažje graditi naprej in prehajati v okolja, ki imajo bistveno bolj bogat razvojni okvir, bistveno bogatejše osnovne knjižnice, bistveno bolj jedrnate in berljive sintaktične konstrukte in še kaj.
Morda se motim in ima takšna pot več "osipa", kot pa "od zgoraj navzdol". Lahko pa tudi ne. Se je pa moje razmišljanje izoblikovalo v letih, ko sem gledal "programerje v VisualBasic", ki so bili prvi za katere sem opazil, da nekdo dejansko ni sposoben narediti prehoda med sorodnimi jeziki, ker so ti za njega popolnoma tuji in v celoti nerazumljivi. Pa čeprav so vsi postopki, algoritmi in način analize problema identični, dokler ostajaš v isti družini jezikov.
Zgodovina sprememb…
- spremenil: AndrejO ()
pegasus ::
To je dejansko kar manjka danasnjim developerjem, ucijo se iz high levela navzdol in dostikrat, ko vidijo, da je pa mickeno manj high level lahko že precej zakompliciran za nekoga, ki celo zivljenje stoji na lazanji, do dejanskega razumevanja kaj se sploh dogaja v "njegovem" tehnoloskem stacku, niti ne pride.Naj tu omenim julio, ki je primarno sicer mišljena za inžinersko publiko (matlab et al), a omogoča točno to: enostaven vpogled pod kožo. Za tiste, ki jih to zanima, a se bojim, da jih bo čisto premalo.
Mavrik ::
(Pač, kot sem že enkrat tu razložil, programski jezik za začetnika je tisti, ki mu omogoča začeti razmišljati in implementirati delovanje algoritmov brez da bi se ukvarjal s samimi low-level implementacijskimi sposobnostmi. Samo programersko razmišljanje je dovolj "težko" brez da bi ljudem moral razlagati vse probleme in luknje C-jevih str* funkcij in JS wartov :) )
Bistvena razlika je, če učiš programiranje kot "razumeti za kaj se gre" ali pa programiranje kot "karierna odločitev".
Samo "programersko razmišljanje" je tako samo polovica zgodbe. Druga polovica je dejansko razumevanje organizacije pomnilnika ter uporabe kopice in sklada, Von Neumannove arhitekture, razlike med podatkom in kazalcom na podatek, načinov prenašanja parametrov, aritmetika kazalcev in še kaj se bi našlo.
Tudi razumevanje delovanja str* funkcij je pomembno, da razumeš kaj to pomeni za jezike, ki imajo spremenljive znakovne nize in jezike, ki imajo samo nespremenljive znakovne nize. Dejansko je to, kar ti imenuješ "problemi in luknje" osnovna tema razumevanja delovanja in dobro izhodišče za kasnejšo večjo rigoroznost pri programiranju v katerem koli drugem jeziku iz družine proceduralnih in OO jezikov.
Seveda pa je učenje tega smiselno samo in izključno pod pogojem, da nekdo želi postati široko izobražen programer, ki se bo zlahka prilagajal drugim jezikom, ki danes predstavljajo večino programerskega "kruha". Od C++ do Jave, JS, PHP in česarkoli drugega na to temo, kar se spomneš. Npr. brez znanja osnov, ki ti jih da C, sploh ne veš kaj je v CPython tako narobe z upravljanjem pomnilnika, da to omejuje njegovo uporabnost. Nekdo, ki ima izkušnje v C, mu lahko problem pojasniš v 30s ali manj.
Za širino pa sam predlagam še Haskell in Prolog, kot dva tipična predstavnika drugačnih pristopov k programiranju. Pristopov, ki so v nekaterih domenah uporabe upravičeno bolj učinkoviti in zato tudi priljubljeni, kot pa "proceduralni" jeziki.
Hmm, mislim da se ne razumeva. Jaz samo pravim, da človeka ne greš učit Newtonovega algoritma za iskanje korenov funkcije dokler ga nisi naučil sploh kaj kvadratna funkcija je. Isto s programerjem - za ZAČETNIKA je učenje Cja/C++a resen problem in ovira pri učenju. V šolah v Sloveniji, kjer srednješolci zapravijo toliko časa s problemi z NUL-stringi, kazalci in vsem ostalim, da jim ne ostane dovolj časa (volje? energije?) da bi razmišljali o tem, kaj njihov program počne in kako se k njemu pristopi. Podobno kot da bi ti med učenjem matematike vsakih 5 minut crknil svinčnik, kalkulator bi bil v sosednjem prostoru, listi papirja pa bi se ti spontano samovžgali vsakih 15 minut - motnje, ki jih RES ne rabiš ko se probaš koncentrirati na nek problem. In to ni nekompatibilno s tem kar ti praviš - se strinjam, čisto vsak profesionalni programer mora (vsaj grobo) poznati kako Von Neuman arthitektura deluje, vse gor do vrha stacka. Samo, tako kot ne posiljujemo matematikov na začetku kariere kar takoj z diskretno matematiko, dajmo tudi ne začetnikov programiranja posiljevat z neumnostmi okoli 40 let starih zajebov pri designu stringov ter ostalimi problemi, ki jih samo motijo pri razumevanju velike slike.
Ko enkrat to poštekaš potem pa ja - je KRITIČNO da razumeš kako deluje stack, kako se podajajo argumenti, kako se alocira pomnilnik, kam spada kaj, koliko kaj stane. Samo če ti trenutno dela problem razumevanje while/for zanke, se stvari iz prejšnjega stavka nisi sposoben niti naučiti in se potem moraš učiti cargo cultinga - "daj public static void main tule, ker mora tako bit".
Zato mi je recimo trenutno bistveno bolj všeč FRIjev pristop k učenju, kjer ljudi najprej naženejo programirat v Pythonu (ki ima za tako uporabo kar precej pozitivnih lastnosti), potem pa jih komaj potunkajo v C :)
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
AndrejO ::
Hmm, mislim da se ne razumeva. Jaz samo pravim, da človeka ne greš učit Newtonovega algoritma za iskanje korenov funkcije dokler ga nisi naučil sploh kaj kvadratna funkcija je. Isto s programerjem - za ZAČETNIKA je učenje Cja/C++a resen problem in ovira pri učenju. V šolah v Sloveniji, kjer srednješolci zapravijo toliko časa s problemi z NUL-stringi, kazalci in vsem ostalim, da jim ne ostane dovolj časa (volje? energije?) da bi razmišljali o tem, kaj njihov program počne in kako se k njemu pristopi.
Da, s tem se v celoti strinjam. Najin nesporazum se verjetno skriva v temu, da sem se sam pri odgovoru omejil zgolj na vprašanje nekoga, ki bi rad dobro osnovo za naprej in hkrati ni popoln začetnik. Moj predlog in argumentacija v celoti sledita iz te premise.
Zato mi je recimo trenutno bistveno bolj všeč FRIjev pristop k učenju, kjer ljudi najprej naženejo programirat v Pythonu (ki ima za tako uporabo kar precej pozitivnih lastnosti), potem pa jih komaj potunkajo v C :)
Tudi s tem se strinjam. Predvsem zato, ker FRI na začetnih stopnjah za cilj nima ustvarjanja kariernih programerjev, temveč spoznavanje s procesom programiranja - tudi za popolne začetnike na tem področju. Na višjih stopnjah pa se nivo spremeni primerno ožji usmeritvi.
phyro ::
(Pač, kot sem že enkrat tu razložil, programski jezik za začetnika je tisti, ki mu omogoča začeti razmišljati in implementirati delovanje algoritmov brez da bi se ukvarjal s samimi low-level implementacijskimi sposobnostmi. Samo programersko razmišljanje je dovolj "težko" brez da bi ljudem moral razlagati vse probleme in luknje C-jevih str* funkcij in JS wartov :) )
This. Naprej se je treba naučit reševat probleme algoritmično, pol ostalo. Se strinjam tudi z AndrejO glede jezikov, ki so mal drugačni in jih je fajn znat.
Tisti ki začenjate si naredte uslugo in vzamte python. Pri začetku programiranja ni trik, da veš vse low level ampak je treba najprej razumet high level, pol pa greš na low pogledat kaj se dogaja v ozadju.
DarKel ::
iskreno je tok informacij od enkrat, da se človek kar malo izgubi oziroma. zmede.. mi je pa všeč pri AndrejO, da pove po svojih izkušnjah..
in če sem prav razumel je dobro, začeti v Pythonu ali pa v C če že maš malo osnove?
in če sem prav razumel je dobro, začeti v Pythonu ali pa v C če že maš malo osnove?
Mesar ::
Ja, tuki http://www.ariel.com.au/a/teaching-prog... si zberi enega pa začni...
Your turn to burn!
AndrejO ::
iskreno je tok informacij od enkrat, da se človek kar malo izgubi oziroma. zmede.. mi je pa všeč pri AndrejO, da pove po svojih izkušnjah..
in če sem prav razumel je dobro, začeti v Pythonu ali pa v C če že maš malo osnove?
Jaz bi predlagal tako: če si že kdaj prej programiral in, če imaš vsaj nekaj izkušenj s procesom prevajanja, povezovanja in razhroščevanja, potem vzemi C in se z njim uči o osnovnih algoritmih in podatkovnih strukturah.
Če se ti bo preveč zatikalo, odloži in vzemi Python preden boš nad vsem skupaj obupal. Zagotovo bo nekaj zatikanja, zato ne obupaj takoj. Včasih pomaga, če problem malo prespiš in se vrneš nazaj spočit. Če pa se bo to začelo vleči, "cut the losses" in menjaj orodje. Vedno se boš lahko vrnil nazaj.
Če nimaš nekih izkušenj s programiranjem od prej, potem vzemi Python in in v njemu predeluj osnovne algoritme in podatkovne strukture, pa boš s časom videl če te ta smer dejansko vleče. Če te, potem začni raziskovati kaj se dogaja pod havbo - vrni se na C/C++.
Moj prvi programski jezik je bil dejansko Pascal (Turbo Pascal), skoraj takoj za tem (leto kasneje) je sledil C oz. Turbo C++. Vse ostalo je izhajalo iz te osnove. Tako navzdol (x86 asm) kot navzgor (VB, Java, C#, Eiffel, Go, ...) in levo (Turbo Prolog).
In da ne bo pomote, nisem se rodil kot kakšen genij. Prvi teden v C sem porabil za ugotavljanje zakaj mi printf() ničesar ne izpiše ali pa izpisuje neko naključno smetje. Potem je pa počasi šlo naprej.
phyro ::
lebdim ::
na pedagoški fakulteti je bilo takole:
- pri uvodu v računalništvo smo programirali v zbirniku (bili so neki ukazi, LDA, JMP, JNZ, itd....)
- pri računalniškemu praktikumu smo programirali v pascalu
- pri programiranju smo programirali v pascalu, C, PHP, javascript
- pri algoritmih in podatkovnih strukturah smo programirali v pascalu
- pri računalniški grafiki smo programirali igrico v C++
kolikor sem pa seznanjen, pa sedaj na PEF-u začnejo s phytonom.
- pri uvodu v računalništvo smo programirali v zbirniku (bili so neki ukazi, LDA, JMP, JNZ, itd....)
- pri računalniškemu praktikumu smo programirali v pascalu
- pri programiranju smo programirali v pascalu, C, PHP, javascript
- pri algoritmih in podatkovnih strukturah smo programirali v pascalu
- pri računalniški grafiki smo programirali igrico v C++
kolikor sem pa seznanjen, pa sedaj na PEF-u začnejo s phytonom.
čuhalev ::
Začel sem s Turbo Pascalom in prešel na novodobne tipa python, PHP, vendar po nekaj letih čutim, kako bi mi sedlo znanje jezika C.
youPlonker ::
Malo ot, sam res nisem vedel, kam naj postam:
Si lahko dandanes web developer brez hudega poznavanja LAMP in microsoftovih rešitev? Pač da se "vržeš" zgolj in samo v javascript in MEAN stack. Je to prihodnost? Učenje česa se najbolj splača? Na faksu ne dajo neke podlage v tej smeri, tko da vsak komentar zelo zaželjen. :)
LP
Si lahko dandanes web developer brez hudega poznavanja LAMP in microsoftovih rešitev? Pač da se "vržeš" zgolj in samo v javascript in MEAN stack. Je to prihodnost? Učenje česa se najbolj splača? Na faksu ne dajo neke podlage v tej smeri, tko da vsak komentar zelo zaželjen. :)
LP
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | FRIOddelek: Šola | 4113 (3127) | |
» | Želim se naučiti programiranja - najbrž mi to manjka (strani: 1 2 3 )Oddelek: Programiranje | 33773 (17629) | Strato5 |
» | Programiranje nasplošnoOddelek: Programiranje | 7824 (5900) | kunigunda |
» | Programiranje (strani: 1 2 )Oddelek: Programiranje | 23404 (18981) | def0r |
» | postal bi programer (strani: 1 2 )Oddelek: Programiranje | 10416 (8745) | videc |