Mám čerstvou (letošní) zkušenost se středoškolskou výukou „programování“ v Borland Delphi 7… V dnešní době kdy máme sexy frameworky je to zbytečné ne teoreticky ale prakticky. Kdo by proboha dobrovolně učil na střední když jako programátor dostane několikanásobně víc a nemusí denně přicházet o nervy s ignorantními puberťáky… Na jakémkoli jazyce to jde vysvětlit jen na málo z nich použít v praxi…
Půlrok to probíhalo tak, že jsme si v separovaném předmětu udělali vývoják a ten pak realizovali v delphi (přičemž nás nikdo nenaučil jak ochránit pole před špatným inputem nebo jak ochránit aplikaci před pádem… Raději (prakticky) jak obarvit dva labely najednou a podobné těžké a potřebné věci…)
Půlroční práce: program na hádání čísla, fakt instantní orgasmus… Je to hold těžké, když učitelé nic jiného než delphi, které je učili na vejšce neumí, to že by(chom) měli jít s dobou jim je jedno…
Já si tu sice mohu vylévat srdce nad mizernou úrovní českých (středních) škol, ale nic tím nezměním, tak tedy Dobrou noc všem.
PS: Ano, je to otrava 4 roky chodit do školy jen kvuli maturitě a chabému doplnění elementárních znalostí :/ …
Výuka na škole musí být cílena na průměrného žáka (který jak známo ve třídě žádný není).
Schválně se poptejte ostatních v ročníku, jestli jim to přišlo stejné.
A také by bylo zajímavé vědět, kolik je mezi nimi čtenářů roota, kteří vědí, co je framework :-)
A pokud jde o to, kdo umí a kdo učí:
Být vydělávajícím programátorem znamená kromě znalosti univerzálních principů (to se dá naučit za rok) také pitvat se v technických detailech vývojových prostředí a knihoven a samozřejmě také oblíbený debugging.
A ne každého to baví, přitom ke kvalitní výuce to potřeba není.
A rozhodně neplatí, že dobrý programátor umí učit (pracovat s lidmi).
Jo, škola dá člověku obecný rozhled, specializovat se musí sám.
A to platí i pro VŠ se zaměřením softwarové inženýrství:
Programátor, analytik, vlastník SW, vedoucí vývoje – každý potřebuje jiné specializované schopnosti.
Ja mam prakticky 3 letou zkusenost jako student se stredoskolskou vyukou programovani, dokonce na skole ktera mela retezec „informatiky“ v oficialnim nazvu :). Do nas za cele 3 roky lili ANSI C a potom Borland C++, a nebyla to zadna vyhra. Jeden ucitel ktery to relativne umel, hned na prvni hodine zacal vysvetloval pointry a nikdo ho nevnimal (nevedeli „vo co gou“) a nebo je to jeste k tomu nezajimalo :), druhy ucitel pro zmenu „kradl“ ukazkove priklady z netu, pote co jsem ho taktne upozornil ze jeho priklad demostrujici faktorial mu bude na veky veku vracet 0… Vrcholem pak byla maturitni zkouska. Vzhledem k tomu ze jsem prakticky Turbo C++ za cele 2 roky co jsme jej brali ve skole nezapl kvuli celkove lenosti (toho prostredi, ne me :D ) a pouzival radeji CodeBlocks (coz taky neni zadna vyhra, NetBeans jsou Netbeans :) byla ma konfrontace s nim den pred maturitni zkouskou usmevna :D. A jaky ze priklad sem si (po 3 letech!! „vyuky“ programovani na SPS) vlastne vytahl? Vygenerovat do nejake TextArea tabulku s goniometrickou funkci kterou si vybere uzivatel. Tresnickou pak bylo to ze demonstracni ukazkovy program „umel“ vypocitat i tangens 90°… takze na stredni jsem chodil 4 roky jenom kvuli papiru a naucil jsem se tam leda tak ze mereni osciloskopem nejakych charakteristik operacniho zesilovace v serioparalelnim zapojeni uz nikdy v zivote nechci videt/delat nebo jen o tom slyset… :D
Což je pro mě jenom důkaz, že škola dokáže odradit člověka prakticky od jakékoli činnosti, kterou by třeba jinak dělal dobrovolně, rád, z přesvědčení a se zaujetím… Možná mám kliku, že jsem nešel študovat elektro – třeba bych se teď z čirého znechucení FELem živil jako obchodník nebo profesionální managor…
Všechno dokáže odradit člověka od čehokoli a není k tomu zapotřebí ani velkého úsilí.
Svalovat na školu, že odrazuje, je často alibismus nedostudovaných.
Já jsem prošel FEL a musím říct, že to je v podstatě dobrá škola. Jen musí být člověk aktivní. Dělají se tam zajímavé projekty, ale ty nejsou součástí standardní výuky. Když si k tomu vezmete zajímavé předměty, tak máte možnost se dostat k věcem, ke kterým se v praxi často nemáte ani šanci dostat.
Jistě, matiku, fyziku musíte projít. I bez cvičení stupnic si dokážete zahrát písničku, ale není to důvod stupnice z výuky konzervatoře vyhodit. Chtěl bych vidět někoho, kdo řeší filtry bez znalosti FT nebo regulátory bez ZT a diferenciálních rovnic. atd.
Ale kdo potřebuje vodit za ručičku nebude z žádné školy nadšen.
Učit na střední delphi je naprostá blbost. Podle mě úplně stačí pascal zmíněný v články, klidně i bez objektové nadstavby. Na střední by se měli lidi učit základy algoritmizace a ne technologie jazyka. Potom ze střední zaměřené na informatiku vyleze absolvent, který neví co je to halda, hešovací tabulka, quicksort nebo dokonce spojový seznam.
Tak to byl dobre vtip, na stredni naucit nekoho co je hashovaci tabulka, tam budou mit problem pochopit quicksort.
Jako kdyby to byla spacializovana stredni na pocitace pak ano, ale tam kde je to doplnek to udela jenom blazen.
Otec na stredni uci, a to co je tam dneska za zver, bych chtel videt kolik lidi by se to naucilo…
Přesně tak, rozlišoval bych nějaký volně volitelný předmět (ročník-dva) na nějaké obecné střední škole, otevřený „široké veřejnosti“, od povinného programování na informaticky zaměřené škole.
S úctou vzpomínám na jistého pana Cepníka, který učil za mých mladých let programování v počítačové speciálce na litoměřickém gymplu. Podotýkám, že já jsem do té speciálky nechodil. Co ti kluci ve čtvrťáku předváděli, to mi tehdy hlava nebrala – samozřejmě objektoviny, hezké věci v Turbovision, vybavuju si že jako jednu školní úlohu měli Simplex (optimalizační algoritmus, jinak vyučovaný až na vejškách), jako závěrečnou práci tam někdo programoval aplikaci pro tvorbu rozvrhu, s optimalizací asistovanou algoritmem… ten program se pak ve škole fakt používal, pokud vím k plné spokojenosti. To všecko v DOSovém TurboPascalu – Cčko ve škole oficiálně nebylo (dost možná ani neoficiálně). To byly časy…
Informatika je velmi široký pojem. Dá se učit mnoha různými způsoby a vychovat tak velmi rozdílně vzdělané lidi. Co je hash tabulka, graf nebo lineární seznam mě osobně naučili až na VŠ, a to jsem v té době měl za sebou již roky programování v assembleru. Takže to asi nijak zásadní informace nebudou.
Nemá smysl přít se tady o to, co je a co není základní IT znalost. Osobně mi spíš vadí, že řada učitelů na to ani nemá názor a ve snaze nic nezanedbat chrlí hromadu nesmyslů bez ladu a skladu. Kdybych měl učit IT na střední škole já, asi bych se soustředil na tohle:
0. Umět pustit počítač, pouštět programy, vědět co je to adresář, otevřít soubor jak z „průzkumníka“ tak z programu atd. Umět se pohybovat na webu, umět používat email. Tohle sice není žádné specifikum pro IT, ale věřím, že to je základ, který by se měl minimálně ověřit.
1. Umět sestavit slovně algoritmus pro faktoriál, největší společný dělitel apod.
2. Umět toto naprogramovat v nějakém jazyce neinteraktivně. Zkrátka udělat z počítače kalkulačku.
3. Umět to samé naprogramovat interaktivně
4. Umět si ručně vytvořit statickou HTML stránku
5. Tuto webovou stránku jednoduše ostylovat
6. Vytvořit jinou statickou HTML stránku, ale tentokrát s pomocí nějakého programu (Frontpage?) Tuto stránku pak pak zobrazit jako text a okomentovat
7. Zkusit si nějaký shell a command.com
8. Zbytek výuky bych se soustředil na MS Excel, jeho pokročilé funkce (VLOOKUP, MATCH, PivotTable apod.) a možná i na VBA (v Excelu). Ono se to možná nezdá, ale tabulkový procesor je velice účinná metoda jak někoho naučit práci s množinami a zpracováním dat. A hlavně je to velmi vizuální :-)
9. Pokud by zbyl čas, tak bychom si řekli něco o SQL databázích, ale to už není nic snadného.
Na střední školu podle mého dostatečné. Dokud po nich nechci aby programovali svůj vlastní OS nebo databázový server, tak proč je zatěžovat spojovými seznamy apod.? Jen aby věděli, že to existuje? Na to je SŠ příliš krátká a děti příliš malé :-)
Tada takovahle vyuka by byla nuda k ukousani. Meli jsme na prumce podobnej predmet kde se mimo jine do zblbnuti psaly skripty na rekurzivni vytvareni a mazani adresaru v shellu MS-DOSu. A to prosim v dobe kdy jsme uz pred rokem meli pascal a umeli bychom to z neho udelat daleko cisteji.
Myslim ze by se melo rozlisovat mezi `praktickym pouzivanim pocitace' a programovanim a nerikat tomu nic nerikajicim slovem informatika.
Proc je zatezovat spojovymi seznamy? No prece proto aby pochopili jak to funguje. A vymluva na to ze jsou jeste male je uboha. Kdy jindy to udelat nez dokud maji tvarny moznek. Na VS uz na to nebudou mit cas a hlavne schopnosti, pokud v nich takovouhle vyukou vytvorite predstavu ze pocitac je magicka krabice v niz makaji trpaslici a interpretujou VBA nebo SQL. Pak budou misto programovani jen opisovat zaklinadla aniz by vedeli jak to cele pracuje.
Tvrdit ze clovek v patnacti neni schopen uvazovat trochu abstraktne je blbost. Jen na ne nesmite ty abstraktni veci chrlit ‚axiomaticky‘, ale od konkretniho k obecnemu, jak to rikal Komensky. R. P. Feynmann se napriklad naucil integrovat a derivovat ve dvanacti letech tim ze si o tom precetl vhodnou knihu.
Duraz na okamzite prakticke pouziti je kravina (stylem naucit se pouzivat nejaky program — podle me tento pristup podporuje M$ protoze si tak vychovava uzivatele), zvlast v oboru ktery se tak rychle meni. Vsadim se ze pred 25 lety byste chtel takto ucit JCL aby studenti ihned po prichodu na sal hned vedeli co maji kde zmacknout. Zkuste ale uvazit k cemu by jim to dnes bylo. Mnohem lepsi je naucit je neco co pretrva vic nez 15 let. Kdovi kde bude SQL, VBA a HTML v dobe kdy oni dostuduji VS.
>> Duraz na okamzite prakticke pouziti je kravina […], zvlast v oboru ktery se tak rychle meni. Vsadim se ze pred 25 lety byste chtel takto ucit JCL
Jo, tohle nám ve škole říkali taky: naučíme vás to, co se nemění, a to, co se mění, se doučíte sami. Výsledkem bylo, že nás učili nesmysly, které s praktickým životem „ajťáka“ (v libovolném oboru – od programování až po správu serverů) nemělo naprosto nic společného a člověk se dnes uživí právě jen tím, co se naučil sám. Ze školy má tak akorát papír.
V praxi to přece funguje tak, že kdo umí JCL, ten se lehce naučí to, co po JCL přijde. A k tomu, aby se naučil to, co po něm přijde, mu lautr nic nepomůže, že umí dokázat, že regulární výrazy a konečné automaty rozpoznávají tutéž třídu jazyků narozdíl od zásobníkového automatu.
Aneb: kdo uměl jezdit s autem s řazením s meziplynem, ten se lehce naučí jezdit s moderním autem, narozdíl od toho, kdo se detailně naučil rovnice popisující vztah mezi objemem válců a točivým momentem, což mu zabralo tolik času, že nikdy v žádném autě neseděl.
Jistě, rovnice se nezměnily a způsob čazení se změnil…
Mimochodem, když byl u nás přednášet externista z IBM a zjistil, že nám na škole neřekli naprosto nic o ekonomii, účetnictví, marketingu, managementu ani kontrole kvality, zcela logicky se zeptal „A co vás tady teda kurnik učí?“ Inu, ony rovnice popisující motor auta, na nic jiného pak čas nezbyde. (pokud člověk nemá mozek v hlavě a tedy školu nebere jenom jako takovou bokovku při práci, ve které se skutečně něco důležitého naučí)
Nemám nic proti učení se obecnějším věcem, ale nesmí se zz toho úplně vytratit vztah k praxi. Jak říkal kdosi na jakési přednášce: velká část našich vysokých škol neučí lidi pro praxi, ale pro jakési podivné akademické akvárium.
Asi zalezi na ktery skole vam to rikali a co (a jak) vas to pak ucili. Pochopitelne, kdyz vam neukazou vztah tech vzorecku k realite tak jsou vam k nicemu.
Jo a nemyslim si ze by nekomu znalost JCL pomohla ke psani scriptu v bashi. Posudte sam:
http://en.wikipedia.org/wiki/Job_Control_Language
Priklad s autem neni uplne adekvatni, kdyz se ucite ridit auto, nebo psat na stroji tak ta zrucnost je pak z velke casti ulozena v mozecku (az ji mate zautomatizovanou). Zatimco kdyz se ucite programovat a premyslet tak ten processing probiha v celnich lalocich mozku v neocortexu. Snad chapate ten rozdil mezi tim ze se naucim rekneme chodit po lane a tim ze se naucim resit diferencialni rovnice. Zatimco to prvni je temer vrozeny, staci doladit `reflexy', pripadne mi to nekdo muze usnadnit tim ze mi ukaze jak na to, ve druhem pripade si nejprve musite v hlave vytvorit pojmy, neco jako jazyk ve kterym tu slozitejsi vec uchopite. Problem je ze tyhle novy pojmy muzete v hlave tvorit efektivne (tak ze vam pak `prejdou do krve' a budete jich schopen pouzit k tvorbe neceho noveho) jen v mladi. Kdyz to nestihnete rekneme do 25ti let tak pak
uz asi nikdy. Takze proto me vzydcky vytoci kdyz nekdo prijde s tim co by se vsechno melo ucit na ZS nebo SS, protoze to praxe prave nyni vyzaduje.
Podle me to je ztraceny cas behem ktereho jste se mohl naucit neco co uz pak nepujde.
Ovladat JCL se naucite i v sedesati, kdyz budete znat princip (tj. budete mit v hlave ty pojmy).
Nam na matfyzu rikali ze vzdelani je to co vam zustane az zapomenete co jste se ucili. Meli na mysli prave ty pojmy. Kdyz studentum vyuku usnadnite tak ze je nedonutite si takove pojmy vytvorit (bud volbou prilis jednoducheho a nazorneho uciva (jako kliknete sem otevre se menu — neco takoveho umi i Pavlovovi psi) nebo vinou zkouseni pomoci zaskrtavacich testu) tak jim opravdu nedate nic. Takovi lide pak prijdou do praxe a zjisti ze se pouziva neco jineho nez se ucili a nadavaji na skolu ze jim nic nedala protoze je ucili Pascal a oni zamestnavatele chteji Javu a pritom si neuvedomi ze ten problem proc jim skola nic nedala je uplne jinde.
Nemám náladu se hádat. Takže jen krátce:
>> Jo a nemyslim si ze by nekomu znalost JCL pomohla ke psani scriptu v bashi.
Přímo jistě ne, ale ten, kdo dělá ve staré technologii a souběžně s tím se učí novou, na tu novou přejde lehce. Takhle přeci funguje každý: začne jednoduchým statickým HTML, pak se rozmůže CSS, pak JavaScript, pak JS frameworky, pak třeba magické sloní ucho, co já vím.
Dovednosti profesionála se prostě postupně mění spolu s tím, jak se mění technologie, co je na tom tak divného?
Co by se tedy měl popsaný člověk učit, aby to platilo po celou dobu od statického HTML po JS frameworky? Teorii automatů? Jistě, je to na ní založené, ale ke skutečné práci to nikomu k ničemu nepomůže, ať si učitelé a absolventi matfyzu a FI MU říkají, co chtějí.
>> Pochopitelne, kdyz vam neukazou vztah tech vzorecku k realite tak jsou vam k nicemu.
Ano, ukázali: automaty se tak a tak používají např. v překladačích. Hm. A jak mi to pomůže k tomu, abych např. programoval v Javě nebo spravoval BSD server? Kolik je asi lidí, kteří se po škole živí psaním překladačů?
Dobre, taky se nechci hadat.
Myslim ze to vystihl BikTop. Vy mluvite o zednicich, ja o stavarich. Na psani webovych stranek opravdu nepotrebujete vysokou skolu a to i kdyz se v nich vyskytuje JavaScript. Na rizeni mobilniho robota se vam takove vzdelani hodi (a mozna vyuzijete i ty automaty). Bohuzel poslednich 10 let se nam skolstvi zmenilo (snazime se dohnat nas zapadni vzor a celkem se nam to dari), takze co driv bezne zvladal stredoskolak, dnes vyzaduje nejmin bakalare (a vysledek bude casto i tak horsi). Zajimave je ze v dobe kdy se to zacalo menit krome nabirani prilis mnoha studentu, zmekceni prijimacek a podminek za kterych se muzete udrzet na skole, se take zacal klast ten duraz na praxi.
Neni to ale jen na skolach, podobnym zpusobem jsou demontovany zbytky naseho vedeckeho vyzkumu, tim ze se tlumi zakladni a penize jdou hlavne na aplikovany (coz ovsem predznamenava i konec toho aplikovaneho v horizontu tak dvaceti let).
No myslim ze uz nema cenu to vic rozpatlavat, myslim ze vas stejne neprimeju se nad tim zamyslet. Ono taky to pro vas nemusi byt snadne, pokud byste mel od skoly nejake trauma z automatu (sam vim jak nekteri prednasejici dokazou zneprijemnit az zhnusit cokoliv byt by to bylo sebezajimavejsi) tak chapu ze cokoliv co se tomu podoba vas odpuzuje.
Naprostý souhlas! Vzpomínám si, jak do mě na fakultě o 3 roky starší kolega ryl „zapiš si tu funkcionální analýzu a tu teorii zobecněných funkcí a PDE, ať se to naučíš, dokud máš mladou hlavu; třeba to nikdy k ničemu nepoužiješ – můžeš to brát aspoň jako mozkový cvičení“. Popravdě – nikdy jsem to nakonec k ničemu nepoužil, ale ani náhodou toho času a námahy nelituji. Tyhle zdánlivě suché teorie „k ničemu“ totiž člověku pomáhají oddémonizovat řadu věcí, aniž by si ty teorie musel pamatovat – úplně stačí, když si tím musel zamlada projít tak, aby u zkoušky prokázal, že to pochopil. Ten mozek to určitým specifickým způsobem poznamená a to je to hlavní. Ačkoli exaktně vzdělaní, stejně pak spoustu problémů při prvním střetu posuzujete „pocitově“ – ale „kvalifikovaně pocitově“. :-) Ve vašem podvědomí si mozek spojil dohromady do skupin určité vlastnosti a jiné se naopak včas naučil striktně oddělovat. Váš „první pohled“, vaše „od voka“ se pak dosti odlišuje od toho průměrného, většinového – a máte to štěstí, že ten váš pohled je přesnější. Naučíte se abstrahovat od rušivých detailů a v té abstrakci pak dělat kvalifikované hodnocení – konkrétní příklad: při studiích si člověk postupně vycvičil svůj mozek, aby si uvědomil, že N-rozměrný lineární prostor tvořený hromádkami brambor se vůbec nijak neliší od prostoru N-tic čisel, i když to na první pohled může vypadat jako dvě naprosto odlišné věci, zatímco prostor „kvintilion“-tic čísel se od prostoru „nekonečno“-tic čísel liší naprosto zásadně – i když by se mohlo třeba zdát, že to už je jen detail. Sice pak člověk zapomene na znění jednotlivých definic a tvrzení, ale ta zkušenost v něm nějak zůstane a je podvědomě aplikována i na objekty hodně vzdálené od původní matematiky, pokud logický aparát mozku vyhodnotí, že je to možné a žádoucí.
Já bych řekl, že tohle je jedno veliké nedorozumění.
Někteří lidé by si konečně měli uvědomit, co to je VYSOKÁ škola. Tak, jako se zedník neučí teorii statiky, geologii, nauku o stavebních hmotách, konstruktivní geometrii, ale učí se používat zednické kladivo, míchat různé malty a aplikovat je na konkrétní materiály za konkrétních podmínek, používat vodováhu, olovnici a podobné věci a z výše uvedených teorií se dozví jen naprosto elementární základy (aby mu nebylo záhadou, jak je možné, že klenba může držet), zatímco stavební inženýr se neučí nahazovat jádrovou omítku na starou zeď, ale učí se konstruktivní geometrii, geologii, statiku, stavební hmoty apod., tak se student vysokoškolského oboru „informatika“ neučí používat specifické knihovny a specifické nástroje, ale učí se techniky programování, teorii vyčíslitelnosti, teorii automatů, překladačů, databází atp. To platí stejně na MFF, jako na M.I.T. Pro zedníky jsou učňáky, neboť to k výkonu jejich profese stačí, pro stavaře jsou vysoké školy, neboť obecně k projektování staveb znalosti získané na učňáku jsou celkem vzato k ničemu. Pokud jde člověk, kterého baví zdít, míchat si v kolečku beton apod. a jeho nejoblíběnějšími obchodními domy jsou odmalička Obi a Hornbach, na vysokou školu studovat stavařinu, velmi pravděpodobně bude jednak zklamán z toho, že se tam nic z toho, co čekal, neděje, jednak mu může být naznačeno, že na to nemá hlavu. Není to chyba školy, není to nepraktickou orientací školy – je to jen chybnou volbou plynoucí z neinformovanosti toho studenta. Od absolventa stavební fakulty se neočekává, že se bude umět ohánět zednickou lžící a celý den jezdit s kolečkem po stavbě. Pokud zaměstnavatel zaměstnal absolventa tohoto oboru a očekává od něj toto, tak je to prostě blb. Takový absolvent nemusí umět postavit rovně zeď, ale měl by být schopen říci, jestli a za jakých podmínek se dá postavit desetipatrová budova na podloží tvořeném vrstvami jílu a písku a navrhnout různá řešení, různě finančně náročná a garantovat, že to bude naprosto bezpečné pro budoucí obyvatele takové stavby a pokud možno i pro dělníky, kteří ji budou realizovat.
Stejně tak strojař – co jiného by se měl kurňa učit, než termodynamiku spalování, aerodynamiku (plynů v motoru), hydrodynamiku (např. v olejovém okruhu)? Jak se řadí v autě značky Renault rychlosti? To snad nikdo nemůže vypustit ani z legrace! Takový inženýr nepotřebuje mít ani řidičák a nijak to jeho odbornou kvalifikaci nezpochybní.
Ano – pokud se absolvent stavební fakulty pak živí jako zedník, tak může s plnou zodpovědností říci, že škola ho na jeho povolání nijak nepřipravila a všechno se naučil až praxí. Jenže to nebyla chyba školy, ale jen a pouze jeho chyba, že se neživí tím, na co se studiem připravoval.
P.S.: Externista z IBM se asi domníval, že je na poněkud jinak orientované škole. Přeci jen – školské systémy západní a náš se dosti liší, z čehož pramení další vlna nedorozumění. O absolventovi americké střední školy se dá konstatovat, že zvládl takové minimum gramotnosti (Američan bez střední je jako Čech/Slovák, který nemá ani celou základku). Vysoká škola na Západě = „undergraduate“, tj. bakalářský stupeň, odpovídající našim středním odborným školám, tj. doplnění dalších všeobecných znalostí a specialisace. To, co je u nás označováno běžně za vysokou školu, je na Západě vyhrazeno jen těm nejtalentovanějším, je na ně přijato jen malé procento absolventů Bc. a tito lidé jsou považováni za odborníky, kteří budou na důležitých postech, resp. budou samostatnými pracovníky v náročných oborech. Ph.D. už je prvním stupněm vědeckého pracovníka a v soukromé sféře jsou jim určena vedoucí místa ve výzkumných odděleních, pokud ta firma vůbec něco takového má, neboli najdou uplatnění třeba v Intelu, kde mají třeba inovovat metody krystalizačních a rafinačních procesů při přípravě monokrystalů apod. společně s M.Sc., tedy našimi Ing., jejichž úkolem je např. ve spolupráci s předchozími navrhnout odpovídající aparaturu pro tyto procesy – ale úkolem ani jedněch, ani druhých není sedět u počítače a naklikávat na chip jednotlivé tranzistory nějakého budoucího operačního zesilovače někde v Mentoru a ani to nemusejí umět.
Stejně jako kolegovi: Nemám náladu se hádat. Takže jen krátce:
Ano, máte pravdu, jedná se o nedorozumění: studium na vysoké škole je v zákoně definováno jako „příprava na budoucí zaměstnání“, nikoli jako „cvičení v intelektuálních schopnostech, prováděné na věcech, které bude v praxi bezprostředně používat jen velmi malé procento absolventů“.
Je-li spor mezi člověkem z praxe (externista z IBM) a chlapíkem, kterej celej život nedělá nic jiného než že shání konference, na kterých by mohl publikovat svoje články, dá rozum, čí stanovisko soudný člověk bere vážněji.
Tak úplně to rozum jednoznačně nedá. Lidé z praxe jsou (ostatně jako ostatní) často omezeni rozhledem na svoje okolí, své zkušenosti. Jinými slovy školy nemají vychovávat zaměstnance IBM.
Nehledě k tomu, že i na FELu je ekonomie a učetnictví tolik, že klidně můžete dělat v účtárně. Jen si holt musíte ty předměty zapsat. A jsme zase u toho „vodění za ručičku“.
No ano, ale to si dotyční studenti nejdříve musejí uvědomit, co si představují pod pojmem své „budoucí zaměstnání“. A lidé z praxe naopak to, koho vlastně potřebují zaměstnat. Vždyť přesně o tom jsem psal.
Franta Vopršálek z kutálky z Horní Dolní asi nebude tím pravým kandidátem do filharmonie, přestože dokáže něco zahrát snad na každý nástroj, což se mu v té kutálce mnohokráte vyplatilo, zatímco mistr z AMU asi nebude tím pravým kandidátem do kutálky v Horní Dolní – hraje jen na trubku a to, že na ni hraje virtuózním způsobem, v takové kutálce asi zas tak příliš nevyužije.
Myslím, že nemá smysl se přebíjet přirovnáními, která kulhají od noh až po čudlík na rádiovce.
Najděte mi na netu pět otevřených pozic, kde bude vysloveně napsáno, že zaměstnavatel požaduje znalost gramatik, automatů, Chomského hierarchie jazyků nebo něčeho podobného.
…a to jsme pořád ještě hodně u „kutálky“… pokud bych vás měl chytat za slovo, požadoval bych explicitně vyjádřený požadavek na schopnost formálně dokazovat něco ohledně těchto věcí.
Sorry, ale obecné řeči „naučilo mě to myslet“ neberu. Respektive nemám potřebu s tím polemizovat – chcete-li si to myslet, myslete si to.
Napriklad zakladni znalost vycislitelnosti a slozitosti + znalost toho, jak ten muj prelozeny zdrojak je zpracovavan mikroprocesorem mozna neni vyzadovana na pozice lepicu kodu, ale takovi machri se potom zvou k tomu, aby za tezky penize aplikaci urychlili klidne o 1–2 rady.
A to nekecam, treba machri pres SQL toto dokazou kdyz prevezmou kod od lepicu, kteri prece ty zaklady relacni algebry „nikdy nebudou potrebovat“. Mezitim jen tak mimochodem opravi i transakce atd.
Na pozici pro kterou prave ted hledam kolegu to prvni (i kdyz spis bych vyzadoval znalosti vycislitelnosti) protoze certifikaci na RHEL si samozrejme muze udelat v ramci sve prace, povazujte to za jeden z benefitu :-)
Nicmene ani jedno (poradna teorie) ani druhe (prakticke veci) zadna nase IT skola studentum neda, musi se snazit sami, podobne jako v dalsich oborech.
Jinak si představuju člověka, o kterém vy mluvíte, jako absolventa SPŠ. Nikoli VŠ.
Teoretické znalosti holt jsou poznat při praktické práci. Ostatně stačí si přečíst pár zdejších diskusí, kde se zapojují často středoškoláci. Tím je nechci v žádném případě schazovat. Mají na to ze své pozice v tuto chvíli právo. A věřím, že řada z nich poroste. Ale poznat to je. Jednotlivé příklady ukazující opak ten fakt nezmění.
>> Jinak si představuju člověka, o kterém vy mluvíte, jako absolventa SPŠ. Nikoli VŠ.
To není pravda. Jasně jsem řekl, že proti obecnějším (nebo naopak „specifičtějším“, odbornějším) znalostem naprosto nic nemám. Ale musí to být znalosti toho typu, který je v praxi potřeba.
Např. pokud chci špičkově spravovat Unixové servery, potřebuju kupu „teoretických“ znalostí.
Jenže to, jaké teorie je potřeba se učit, musí diktovat praxe, ne akademická svévole*. A světe div se, praxe vyžaduje komerční certifikace, ITIL certifikace, risk management, atd. atd.
>> Teoretické znalosti holt jsou poznat při praktické práci.
A proto je zaměstnavatelé nepožadují? Hm.
* ano, svévole – akademická sféra u nás je naprosto odtržená od praxe
K tomu zbytku – ok, máte to mít. V předposlední firmě si vůbec nevzpomínám, že bychom se na pohovoru bavili o konkrétních jazycích a znalostech. Místo toho jsem dostal teoretické a analytické testy a snaž se. Tím si firma ověřila flexibilitu a teoretické možnosti daného člověka. Schopnost porozumět nějakým jazykům (a že jich za tu poměrně krátkou dobu bylo), frameworkům, často hodně specifickým technologiím, se kterými člověk přišel do styku, se považovalo tak nějak za samozřejmost, nad kterou se nikdo nepozastavoval. Pokud se nenaučíte třeba používat nový jazyk během týdne, pak je něco špatně. Jenže to je pak rozdíl mezi programátorem za 25kKč a člověkem ve vývojovém týmu za několikanásobnou cenu.
Certifikace, risk management a podobné věci jsou prostě jenom specifická hračka, kterých potkáte za svou kariéru desítky. Škola má dát studentovi širší pohled, ne ho naopak zúžit na pár konkrétních technologií.
Možná taky nechápete jednu věc – úkolem školy je poskytnout vzdělání, nikoli ho člověku vtlouct. Nikdo studentovi nezakazuje se věnovat čemukoli navíc. Ale to už víceméně zmínili kolegové okolo mě v rámci tématu „vodění za ručičku“.
Tak jo no, dobře. Všechny fakulty informatiky v ČR vyprodukují ročně nepochybně tisíce absolventů. Všichni zcela jistě najdou takovou práci jako Vy – protože takových inzerátů jsou ročně tisíce, proto nám dělá problém jich najít pět.
Tak teda sláva teorii v praxi :)
Bez sarkasmu:
Nezpochybňuju, že nějaké procento vysokoškoláků by se mělo věnovat špičkové teoretické práci – koneckonců někdo ty překladače a databáze psát musí. Nicméně představa, že takhle vzdělaní by měli být všichni absolventi, je prostě ulítlá.
Co jsem doposud slyšel z odborné (!) debaty o českém školství, většinou zaznívá to samé:
1. chybí praktické bakalářské obory
2. na většinu práce by stačilo tříleté Bc. studium s opravdu kvalitní výukou toho, co se opravdu v praxi používá
3. kdo na to má, mohl by si teoretičtější znalosti doplnit v Mgr.
4. PhD. by mělo být jenom pro pracovníky ve výzkumu (ať už státním nebo soukromém)
5. VŠ nesmí být teráriem, které o praxi nemá potuchy – musí být jasně oddělena vědecká ( → teorie) a pedagogická ( → praxe) činnost
Bohužel realita vypadá jinak: Unicorn si musel založit vlastní školu, aby dostal lidi s takovým vzděláním, jaké potřebuje. To hovoří za vše.
Takže co? V IBM jsou jak jsem se dozvěděl, lidi úzce zaměření jenom na to, co chtějí oni, Unicorn je pásovka na software, Redhat raději než certifikace na svůj vlastní produkt chce nějaké teoretické vzdělání… Koho máme v ČR dál?
Jo vlastně, oni se všichni upíchnou v Googlu, protože ten má největší procento lidí s PhD ;)
(sakra, zase se mi tam ten sarkasmus nějak vmotal, omlouvám se :)
Mě by zajímal váš názor na ty tříleté bakalářské obory. Myslím to vážně (bez sarkasmu), protože co jsem mohl vidět výsledky „praktických bakalářů“ tak upřímě řečeno kromě pár výjimek (které stejně pokračovaly dál) nic moc. Já nevím, za ty tři roky se „tisíce absolventů“ (a už tady naznačujete jak jejich kvalitu tak i kvalitu výuky) nenaučí skoro nic, to je jen šest semestrů * 5 kurzů/semestr = 30 kurzů, z toho tak třetina blbovinky (tělocvik etc.)
Jak by měl podle vás ten BC obor vypadat? Dejme tomu 3 různá zaměření: 1) sítě 2) webové aplikace 3) databáze
Onehdy jsem se nad tím vážně zamýšlel, kolik z toho, co mi škola dala, alespoň trochu používám nebo si aspoň dovedu představit, že bych použil. Vyšlo mi to (opravdu náhodou ;) právě tak, že dva roky z těch pěti let byly čistě promarněné. (Jistě, můžete říct, že nikdy nevím, kdy se mi budou ty věci hodit, jenže to by se pak mohla učit klidně technika správného šťourání se v nose)
Podle mého nejde až tak moc o skladbu studia (těch Vašich „30 kurzů“), ale spíš o to, jak studium probíhá. V (docela bujné) fantazii si dovedu představit studium formou menších skupinek, z velké části zaměřené na řešení skutečných problémů formou workshopů, výběru jen toho důležitého, co skutečně student potřebuje pro daný obor vědět + intenzivního samostudia.
Taky je otázka, jestli by nebyla vhodná poměrně úzká specializace, protože beztak v praxi člověk většinou není zároveň vývojář databáze a ITIL manažer…
Ale jestli vás zajímají vyloženě ty předměty, tak to si netroufnu posuzovat. Koukněte se třeba na to, jak si to vymyslel ten zmiňovaný Unicorn, nebo jak to mají zahraniční praktické školy…
Ty workshopy se pořádají, možná ne v takovém rozsahu jak by bylo možné, ale první vlaštovky už jsou vidět. Vzhledem k tomu, že to bývají „neokreditované“ předměty, tak tam chodí skutečně nadšenci.
Ovšem při pořádání workshopů firmami na školách nezapomeňte, že na školách se vede poměrně tvrdá interní politika (ač to vážení akademici samozřejmě nepřiznávají), takže ne vždy jsou ty workshopy povoleny nebo je to zařízeno tak, jak jsem psal výše (bez kreditů).
Ještě dodám, že je docela rozdíl v chování průměrného studenta v ČR a na některých zahraničních školách (kupodivu tam, kde se platí školné). V zahraničí student přijde za studijním poradcem a domluví se s ním na tom, že se za těch 3–5 let chce dostat tam a tam (protože si sám zjistil co je potřeba a nechce ty roky ztratit zbytečně), studijní poradce poté vybere skladbu předmětů, aby to odpovídalo požadavkům a samozřejmě doporučí něco okolo.
Prostě vztah nabídka-poptávka. V tuzemsku někdy vidím snahu na jedné strane buzerovat studenty, na straně druhé touhu studium obejít a mít „právníka za tři měsíce“, když to tedy přeženu.
No to je krása… tak nějak bych si to představoval…
Mimochodem, podle mého to není „kupodivu tam, kde se platí školné“ ale „právě proto, že se platí školné“.
Líbilo se mi, jak jakýsi akademik vyprávěl, že když na rok učil v zahraničí, tak ho nejvíc překvapilo, že nejvíc práce má o přestávkách – lidi chodí a chtějí se dozvědět víc, chtějí diskutovat, ověřit si, jestli to správně pochopili…
Na našich školách je člověk tak akorát rád, že už má ten opruz za sebou… i když existují i světlé výjimky, které vždycky pohladí na duši (s láskou třeba vzpomínám na seminář správy Unixu s Yenyou Kasprzakem…)
>>> Teoretické znalosti holt jsou poznat při praktické práci.
> A proto je zaměstnavatelé nepožadují? Hm.
Ty firmy, které dělají vývoj, je _požadují_. Ty, které mají obchod postavený na prodeji hotových řešení, je nepožadují. Pochopitelně těch druhých je (především u nás) víc.
Pokud bude diktovat praxe, tak se opět nikam nedostaneme. Praxe diktuje i např. Windows a s tím spojené technologie… Opravdu tudy cesta nevede. Diverzita je naprostou podmínkou rozvoje. A ta musí vzniknou dialogem jak praxe, tak akademie.
S tou svévolí bych to neviděl jako jednoznačnou chybu akademie. Co dělají ty firmy, aby ovlivnily výuku? Tak akorát zakládají laboratoře. A pak to dopadá tak, že se na kybeře učí v řízení jen ty PLCčka.
Určitě se dá ledacos zlepšit. Jak na straně výuky, tak ale i na straně těch firem. Jak co se projektů týká, tak ale i očekávání. Nikde na světě neprodukuje univerzita hotového pracovníka. Obzvlášť u nás v menších firmách tohle málokdo chápe (nechtějí nic do lidí investovat).
Já už se asi z téhle debaty omluvím, myslím, že se motáme v kruhu a nic nového už nevymyslíme.
Poslední slovo:
http://www.muni.cz/media/docs/826/MU2008_kratky.pdf
– pozornosti doporučuji graf 25 na str. 32, můj komentář: to není normální rozložení ani náhodou…
http://www.muni.cz/media/docs/830/Uplatneni_absolventu_2005_06_verejnost.pdf
– str 12:
Na základě rozboru zmíněných trendů můžeme shrnout, že nejlepší postavení na pracovním trhu z hlediska rizika nezaměstnanosti mají právě vysokoškoláci s praxí [MP: čili ti, kdo se nespolehli na to, co je naučí škola]. Dvojnásob vyššímu riziku jsou vystaveni absolventi vysokých škol bez praxe, jsou přibližně na stejné úrovni s osobami se středním odborným vzděláním a praxí.
– str 27:
Studijní prospěch měřený jako průměr známek během celého studia má jen velmi malý vliv na výšku nástupních i aktuálních platů, ale opačný, než by bylo žádoucí, a tak z globálního pohledu jsou lepší známky spojeny s nižšími platy.
Můžeme tyhle jevy nějak okecávat, aby tak moc nekřičely, ale mě osobně to teda nepřesvědčí. Podle mě tohle není ani normální ani zdravé…
:-) Při každém takovém průzkumu si vždy vzpomenu na sira Humphreyho z „Jistě pane ministře“. Aneb řekněte jak chcete aby to vyšlo, a já vám na to postavím dotazník. Tvorba dotazníků je velmi náročná činnost, kterou drtivá většina zadavatelů podceňuje.
str. 12. Jistě, že absolvent s praxí má lepší postavení. To asi není nijak převratné zjištění. (Ještě lepší by měl absolvent s praxí, který umí jezdit na koni a skládat básně a nebo ten, co zná podrobně jak unix, tak windows a umí i pájet a programovat DSP atd.)
ad platy a studijní průměr:
Zkuste si k tomu přečíst ten text, než to začněte komentovat. Korelace mezi známkami a nástupním platem je velmi slabá. Tento graf bych tedy úplně ignoroval. Nevypovídá o ničem. Podobně byste mohl vytvořit statistiku závislosti hodnocení z cizího jazyku a obvodu hlavy.
Doufám, že tahle reakce není taky důsledek toho, že jste si na VŠ cvičil mozek teoretickými problémy ;)
1. Jasně, škola ten výzkum cinkla tak, aby vypadala blbě… :)
2. ad str. 12: přečtěte si prosím ještě jednou pečlivě tu zvýrazněnou část v minulém příspěvku.
3. Nebojte se, já jsem ten text (a nejen tento) četl velmi pečlivě už dřív. To není žádný výsledek momentálního googlování „absolventi výzkum“ :)
Za prvé: byla by ostuda, i kdyby tam nebyl ŽÁDNÝ rozdíl – jinými slovy to totiž znamená, že ti, kdo se na škole snažili, nic nezískali (ekonomicky) oproti těm, kdo se nesnažili.
Za druhé: možná je ten rozdíl malý, ale zjištěný opakovaně i v dalším ročníku výzkumu: http://is.muni.cz/do/1499/metodika/rozvoj/kvalita/Pruzkum_uplatneni_2007_08_WEB.pdf
Protože se jim to tam objevilo znovu, dali si větší práci s tím, aby vymysleli výmluvy, proč to tak je :)
( víc materiálu zde: http://strategie.rect.muni.cz/?cs/Institucionalni-vyzkum/Sociologicke-pruzkumy )
To si možná nerozumíme, já nestojím ani na jedné straně. Dokonce si myslím, že škola má v tomto ohledu jen marginální význam, záleží na samotném studentovi a podle toho co jsem zažil například při zadávání diplomek, tak cca 80% studentů IT chce pouze projít s co nejmenším odporem, čemuž odpovídá výběr předmětů (mnohdy podle toho, jak je který vyučující „tvrdej“) a například také to, že diplomky zadávané firmami, kde se na jednu stranu požaduje alespoň nějaká práce, na stranu druhou je to vstupenka do té firmy, jsou nevyužívány (ať jsem konkrétní, jde o VUT Brno a FI MUNI).
Osobně mě to připadne trošku podivné, protože za dob mého studia tyto možnosti neexistovaly, ale on je to rozdíl – nás studovalo cca 90, teď je v ročníku více než 600 lidí :-)
„kdo uměl jezdit s autem s řazením s meziplynem, ten se lehce naučí jezdit s moderním autem“
Jen technická poznámka – znám člověka, který řadí s meziplynem i na dnešních synchronizovaných převodovkách, přestože ví že je to zbytečné a spojce to dokonce škodí. Prostě se to tak kdysi naučil a teď už to jinak dělat nebude…
Ale také znám učitelku matematiky, která před lety (ono to vlastně zase tak dlouho není) učila FORTRAN, také s důrazem na okamžité použití. Dneska to není k ničemu ani jí ani těm jejím žákům.
>> která před lety (ono to vlastně zase tak dlouho není) učila FORTRAN, také s důrazem na okamžité použití. Dneska to není k ničemu ani jí ani těm jejím žákům.
Ach jo, to je pořád dokola to samé. Profesionál roste stejně jak roste technologie. Jinak to ani nejde.
Vlastně jde: všechno, co se v počítači děje, se děje na základě pohybu elektronů. Stačí se naučit tento nejobecnější princip, který se nikdy nezmění.
Učit se jakýkoli programovací jazyk je také zbytečné, protože všechno jsou to jen variace na Turingův stroj. Nic jiného nikdy nebylo a nebude. Tohle je obecný princip, který je potřeba znát.
Bez sarkasmu: vše je jen otázka míry – umět dost konkrétního, abych mohl taky někde pracovat a dost teoretického, abych … mohl někdo pracovat.
Konečným kritériem je vždycky zaměstnání, nikde ne znalost teorie sama o sobě. (pokud nejsem placen za to, že o teorii pravidelně publikuju články)
Umět dost teoretického jenom proto, abych si mohl na rootu honit triko, že mě to naučilo myslet, myslím nikomu nic nepřinese.
„Profesionál roste stejně jak roste technologie.“
Kéž by to byla pravda, viz to řazení s meziplynem ;-) Starého psa holt novým kouskům nenaučíš! A oni se ten FORTRAN učili jen proto, že byl zrovna v osnovách, protože si někdo v té době myslel, že na to aby člověk mohl pracovat s počítačem, musí být programátor. To byla už v té době dost zcestná a zastaralá myšlenka… I když díky podobným bludům jsem se k programování dostal já, a mám ho dodnes jako koníčka :)
To je dost relativní. Zatímco před 30 lety Fortran třeba elektroinženýrovi dobře posloužil např. k tomu, aby si namodeloval vliv působení změn teplot na vlastnosti tranzistorového stupně – dnes už to ve Fortranu nejde, nebo co? ;-)
Žádná znalost něčeho navíc přece nikdy není na škodu. Otázkou je jen to, které znalosti by měly dostat přednost před jinými v „řízeném“ vzdělávacím procesu.
Jistě že jde, ale balík děrných štítků uložený od té doby v šuplíku už tomu elektroinženýrovi moc platný nebude, zvlášť že v té době už si to mohl mnohem pohodlněji nadatlit na Spectru :-D Jen nevím jestli některý z těch jejích žáků ten FORTRAN vůbec někdy použil. Případně jakýkoliv jiný programovací jazyk… :-(
„Žádná znalost něčeho navíc přece nikdy není na škodu.“ – To je pravda, člověk nikdy neví která ptákovina se mu může hodit, třeba počítání s logaritmickým pravítkem se dneska moc nevyužije, ale když člověk ví jak to funguje, tak některé věci lépe chápe. Ale to už tu v jiných souvislostech zaznělo také.
No… jestli zrovna na Spectru, to nevím – pokud chtěl mít nějaký výsledek v historicky nedlouhé době… :-)
Balík děrných štítků asi ne, ale pokud s tím pracuje kontinuálně, tak už to dávno nemá na děrných štítkách, ale uchovává to tak, jako všichni ostatní.
To je další skoro bych řekl mediální blud – že Fortran je nějaká prastará záležitost, jež se už dnes nikde neuplatní a pokud ano, tak jen ze setrvačnosti. Ale je třeba si uvědomit, že dnes se používá převážně Fortran 90/95, což je IMHO pro člověka, potřebujícího si naprogramovat nějaký výpočet, model apod. ideální nástroj – tedy rozhodně se na to hodí mnohem lépe, než C++, Java, Python apod. Pro inženýra Fortran vůbec nemusí být špatnou volbou ani v dnešní době. Snad libovolný výpočetní problém se dá ve Fortranu napsat rychleji, přímočařeji a přehledněji, než v jiném v současnosti používaném jazyce. Dosti opomíjeným, ale v této oblasti využití počítačů přitom nesmírně důležitým faktem také je, že fortranské překladače dnes generují prakticky nejrychlejší kód ze všech, což jim je umožněno právě tím, že je Fortran koncipován tak, jak je.
No budiž, Speccy nebyl zrovna nejrychlejší počtář, ale rychlost tvorby programů (o programování bych nemluvil) v BASICu to zase částečně vyvažuje :-D Akorát si myslím že ti její tehdejší žáci by na Fortran 95 dost mrkali, a pokoušeli by se (nejspíš úspěšně, pokud by si aspoň na něco vzpomněli) o svůj FORTRAN IV. To mi připomnělo pár rad co jsem se dočetl v nějakých starších skriptech a učebnicích: (velmi volně cituji)
„Většinu programu píšeme ve FORTRANu 77, tam kde záleží na rychlosti, použijeme FORTRAN IV“
„Většinu programu píšeme ve Fortranu 90, u časově kritických částí použijeme FORTRAN 77.“
„Většinu programu můžeme napsat v C++, u časově nejnáročnějších částí je vhodné použít C.“
Ale nebyly od jednoho autora :-D Jinak FORTRAN teda docela můžu, líbí se mi, škoda jen, že ty nejlepší lahůdky jako třícestné IF už vyhodili z normy :-(
„dnes už to ve Fortranu nejde, nebo co?“
Jasně že ne, pokud v tom projektu, který měl původně ve Fortranu 1000 řádků, nemáš alespon 3 frameworky a místo textového filu tam necpeš tabulární data ve XML, tak jsi totálně mimo :-))
btw nový Fortran (2003, 2008) je docela pěkný jazyk, z původního Fortranu s aritmetickým GOTO tam zase tak moc nezbylo :-)
ted jsem si jen tak pohral se Scratch (http://scratch.mit.edu/) a hle
i Google jej vyuzil v Androidu (http://appinventor.googlelabs.com/about/).
kdysi jsem zacinal na zx spectru v basicu, pak basic a assembler na c64,
pak pascal na pc a dneska delam profesionalne v C++.
zacatenikum bych dnes doporucil Java nebo C# nebo Python,
naopak C++, C, assembler jen maniakum co chcou jit do hloubky.
Takže používáte termín „hacker“ nikoliv v tom moderním významu (průnik do zabezpečených systémů), ani v tom původním (lepení věcí žvýkačkami), ale v tom Linuxovém (stejný jako původní, ale chápán jako pozitivní, nikoliv správný negativní)?
V každém případě s vámi souhlasím, že C je pro začátečníka absolutně nevhodné.
Prvních pár krůčků vypadá v Pascalu srozumitelně, protože je to podobnější přirozené angličtině než „závorkovaté“ jazyky. Jakmile ale začnete programovat něco trochu vážněji, zjistíte, že spoustu velice základních operací a konstrukcí (které v Cčku nebo ASM jdou lusknutím prstu a patří k základní výbavě) musíte v Pascalu nějak obcházet/aproximovat, přitesávat deklarace prototypů na Cčkové konvence speciálními zaklínadly apod. Vemte si už třeba jenom striktně strukturovaný přístup – realita rozhodně není přísně strukturovaná. Na VŠE v kursech strukturovaného programování a Pascalu (kolem roku 1996–1998) jsme mařili spoustu času akademickým úsilím propasírovat zadání strukturovaným modelem a Pascalem… uff. Vlastně to byl dobrý způsob, jak si ujasnit, že tudy opravdu cesta nevede. Těch pár „syntactic candy“ libůstek v Pascalu oproti C/C++ Vás reálně nijak nevytrhne.
Potkal jsem několik lidí, kteří začli ve škole v Pascalu a už se nikdy nic jiného nenaučili – a dneska se živí programováním, píšou poměrně rozsáhlé aplikace, a přitom je vidět, že nikdy nepřekročili „školní“ úroveň způsobu psaní aplikací… Bavíte se s chlápkem, kterému je 40+, napsal a udržuje napohled zajímavou aplikaci pro řízení nějakého stroje, pomáháte mu řešit nějaký dílčí problém se vstupem/výstupem/časováním… a prvním pohledem na zdrojáky zjistíte, že to má všecko v jednom zdrojovém souboru! Netuší, že existuje rozdělení/opouzdření kódu do více „translation units“, není schopen tento pojem pochopít! Nezná v Pascalu rozdíl mezi „předáváním hodnotou a odkazem“ – dost možná proto, že je skryt drobnou nuancí v deklaraci prototypu funkce, kdežto v C/C++ se jedná na první pohled principielně o předání hodnoty nebo pointeru (popř. reference)… tragédie…
Fakt je, že přemejšlím, jestli to není spíš v konkrétním člověku a jeho schopnostech+zkušenostech, než v tom, jaký jazyk se ve škole naučil jako první. Viděl jsem v jednom případě podobně zprasené zdrojáky i v Cčku.
Osobně jsem viděl Pascal, Cčko a x86 ASM poprvé někdy kolem roku 1991/2 v krátkém sledu po sobě (v prváku na gymplu z vlastní iniciativy). Ve škole byl dalších cca 6 let základem Pascal od Borlandu – internet nebyl, příklady kódu jenom co vyšlo v pár knížkách a časopisech, Cčko v menšině. K C/C++ jsem se vrátil až na vejšce a vlastně spíš až po ní z vlastní iniciativy. Na mnoha školách, kde dřív začínali v Pascalu, dneska začínají v Javě – to mi přijde trochu z bláta do louže…
Prostě potkat Cčko jako první jazyk na škole je stejná rarita jako před 10 lety. Jako kdyby Cčko bylo cosi zapovězeného, pro normálního smrtelníka nepochopitelného a nepoužitelného. Přitom pro mě osobně je pravdou pravý opak. Každopádně když Vás napřed pár let učí Pascal, a pak (vlastním přičiněním) přičichnete k Cčku, ať už v odrůdě Borland, VC nebo GCC, nutí Vás to pořád dokola „plácat se do čela“ s myšlenkou „tohle mi vrtalo hlavou, proč je to v Pascalu tak obskurní, a ono to původně přišlo odsud, a je to tak přirozené!“. Toto se opakuje, když postupně získáváte trochu přehled v API standardních knihoven Cčka, srovnáte si jak vypadá libc v DOSu a jak v UNIXu a nakonec i pod Windows = trochu studujete 20/30/40 let starou historii a dodatečně získáváte základy, které Vašim vědomostem dosud chyběly…
Snažit se o něco v Borlandích produktech pod DOSem popř. Windows bez internetu, a pak přejít do Linuxového prostředí v kombinaci s Internetem, to bylo jako vyrůstat v akvárku a na prahu dospělosti být vypuštěn do moře.
Pascalu a třeba klasickému DOSovému Basicu nemohu upřít právě podobnost s přirozeným jazykem. Čili pro naprosté začátečníky bych možná viděl jako vhodnou posloupnost „pár hodin Basic, pár hodin Pascal, pak dlouho jenom Cčko, případně přetéct do C++. Případně zmínit další jazyky a jejich charakteristické finty a přednosti, pro přehlednost.“ Pokud má škola poskytovat obecný základ, od kterého lze kamkoli odstartovat, přijde mi to jako vhodné uspořádání. Vlastně si nedělám iluze, že samotná škola naučila někoho pokročile programovat v konkrétním prostředí – na to v ní není jednak čas, druhak dostatečně komplexní zadání, v třetím sledu mi ve škole chyběla motivace řešit složitá zadání: tlak problémů, které vytváří reálná praxe… To je docela důležitá podmínka, aby normálně líný člověk namáhal mozek a snažil se pochopit třeba krásu objektového programování :-)
Ten zážitek s jediným zdrojákem jsem měl taky, byl to program v Céčku, veškerá funkcionalita (2000 řádků) byla v main() a spousta globálních proměnných (žádná proměnná deklarovaná v rámci bloku, nic takového).
Ale že někdo v Pascalu nezná rozdíl mezi voláním hodnotou a odkazem se mi ani nechce věřit, protože některé věci bez použití volání odkazem se ani nedají implementovat (přesněji tam například Turbp Pascal má obezličku a některé typy se hodnotou nepředávají, je to vždy odkazem).
Neřekl bych, že je to obezlička, ale implementační detail. Ony většinou všechny parametry se předávají odkazem na místo v paměti, kde jsou uloženy kopie těch proměnných (já vím, je to často v zásobníku pomocí PUSH, ale tím odkazem často bývá hodnota registru BP či SP, což si málokdo uvědomí). Většinou včetně návratové hodnoty, která se předává jako odkaz na místo, kam se má návratová hodnota uložit.
Tohle je Céčkaři ale zejména C++kaři velice dobře známo, protože zpravidla zpaměti umí určit přesně kdy se který konstruktor volá a proč.
Měl jsem na mysli předávání hodnotou/odkazem na úrovni prototypu funkce v daném programovacím jazyku. Jak to má kompilátor zadrátováno do registrů resp. na stack, to je podle mého o vrstvu níž = z hlediska syntaxe jazyka irelevantní debata… A zatím co jsem potkal, tak se to skutečně předává skrz zásobník (buď sama hodnota nebo pointer) a to dokonce podle jistých standardizovaných pravidel. Ono na x86 to možná ani moc jinak udělat nejde…
…a co teprve Knuthův TeX – taky nacpaný do jednoho zdrojáku, navíc napsaný ve vlastním jazyku, generujícím pascalský kód a současně dokumentaci. :-)
Já vím – QVOD LICET IOVI, NON LICET BOVI. Ale je to důkazem toho, že to taky tak jde a kdo umí, ten prostě umí – bez ohledu na to, do kolika souborů co rozdělí a jaký programovací jazyk použije.
Lidé, jako je Donald Knuth, Chuck Moore aj. mi pomohli odhodit některá dogmata, kterými se člověk vlivem mainstreamu a průměrné literatury nevědomky dobrovolně omezuje. Člověk by nikdy neměl zapomínat, co je jeho cílem, protože právě tomu musí podřizovat volbu cesty – a nikdy ne naopak.
On ten TeX zase az takovy zazrak neni :-) Jako nástroj pro sazbu je dodnes nepřekonatelný, o tom žádná, ale pokud nad tím chce člověk vyvinout nadstavbu (třeba LaTeX), tak se začínají ukazovat slabiny v jeho „API“.
Jinak máš pravdu, Knuth, Moore (můj oblíbenec, imho na jeho myšlenky pomalu dochází – viz například browser v BIOSu atd.), Dijkstra atd. by měli být inspirací pro všechny, kdo alespoň tuší, že mainstream není zdaleka vše co IT nabízí.
… Bavíte se s chlápkem, kterému je 40+, napsal a udržuje napohled zajímavou aplikaci pro řízení nějakého stroje, pomáháte mu řešit nějaký dílčí problém se vstupem/výstupem/časováním… a prvním pohledem na zdrojáky zjistíte, že to má všecko v jednom zdrojovém souboru! …
Můj soukromý názor je, že to není nic mimořádného. Pokud se jedná o nějaký počítačem řízený stroj, pak programátor pouze aplikuje životní zásadu č. 1: „co funguje, do toho se nehrabu“. Když jeho algoritmus je funkční, dělá to co má, stroj je stabilní a spolehlivý a řídící systém stíhá v reálném čase, pak žádný programátor systémů ten program nebude přepisovat podle poslední programátorské módy do nějakých objektů, Javy, frameworků, C++ a podobně; to by si do programu zavlekl stovky nových chyb. Ze stejného důvodu najdete ve strojích řadu zastaralých osmibiťáků, v bankách programy v Cobolu, ostatně i svého času humbuk kolem Y2K nebylo nic jiného než zděšení nad tím, že mraky programů ze sedmdesátých a osmdesátých let (ale funkčních a spolehlivých!) by se teoreticky mohlo chovat na Silvestra 1999–2000 nestabilně.
>Zacatenikum bych dnes doporucil Java nebo C# nebo Python,
Python jednoznacne ano a JAVA a C# rozhodne nie
17.01.2008
Dvaja profesori z New York University sa v obšírnejšej rozprave zaoberali problémom, ktorý trápi mnohých zamestnávateľov v IT priemysle: programátorské schopnosti nových absolventov počítačových vied sa postupne znižujú. Podľa nich za to môžu úvodné kurzy Javy a skriptovacích jazykov.
Za posledných niekoľko rokov si Dr. Robert B.K. Dewar a Dr. Edmond Schonberg z NYU všimli niekoľko negatívnych trendov pri vzdelávaní nových mozgov v odboroch zameraných na programovanie. V prvom rade sa v jednotlivých študijných programoch pre študentov znižujú požiadavky na matematické vzdelanie. Vývoj programovacích schopností vo viacerých jazykoch potom študentov učí automaticky používať veľké knižnice a špeciálne balíky s kódom, akoby programovali z predpripraveného receptu[kuchárskej knihy]. Výsledným negatívom pre softvérový priemysel je nedostatočná zručnosť, najmä pre bezpečnostné a ochranné účely, ktorá je navyše prakticky na úrovni toho, čo ponúka outsourcingový priemysel. Skrátene sa to dá povedať tak, že vysoké školy (zo zamerania dvoch profesorov vyplýva, že teda najmä školy v USA) trénujú ľahko nahraditeľných IT profesionálov. Problémy so stupňom programátorskej vyspelosti absolventov už navyše naznačujú aj zamestnávatelia.
Java sa stala v poslednej dobe v USA najviac používaným jazykom, študenti sa mu venujú hlavne pri prvom oboznamovaní sa s princípmi programovania. Stalo sa tak azda následkom zníženia dopytu po vzdelaní počítačových programátorov medzi maturujúcimi stredoškolákmi; Java má spraviť programovanie väčšou zábavou a hlavne ho zjednodušiť. Profesori z NYU však varujú, že tento prístup má pre študentov výrazne negatívne následky. V prvom rade sa sa študentom ťažko píšu programy, ktoré nemajú žiadne grafické rozhranie; ďalej nemajú pochopenie pre vzťah medzi zdrojovým kódom a tým, čo hardvér dokáže skutočne spraviť. Nakoniec, vôbec nerozumejú sémantike ukazovateľov (resp. smerníkov), takže majú neskôr problémy s C pri systémovom programovaní.
http://www.itnews.sk/spravy/software/2008-01-17/c87894-programatorske-schopnosti-absolventov-klesaju-problemom-je-java
>naopak C++, C, assembler jen maniakum co chcou jit do hloubky.
ako kde. Assembler na uvod rozhodne nie. C++ by som sa vyhol.. na C ale treba prejjst hned po Pythoe, ktory nauci slusnosti(strukturovaniu) v kodovani. Inak je aj Python skor negativny ako polo-skriptovaci jazyk problematicky
Na technickych skolach treba C. Ja osobne ucim systemove programovanie na urovni utilit na FEI STU a vidim ako vedia smernikovu aritmetiku, ale co je to smernik netusia…
ve vsech priruckach pro velitele a instruktory vojenskych jednotek je psano, ze se hned ze zacatku musi vojakum doprat nekolik snadnych vitezstvi (quick win). Stoupne moralka, sebevedomi a vojaci vidi, ze ten vycvik k necemu je. Vidi vysledky.
Podle me kdyz se nekdo uci programovat, potrebuje hned ze zacatku nejakej quick win. Kdyz na nej hodite cecko, tak prezije cykly, ridici struktury a typy promennych, kdyz na nej vytahnete pole, ktere si nekontroluji meze, tak zacne panikarit a kdyz na nej vzapeti vypalite pointery, tak se otoci a zdrhne.
Kdyz se nauci delat v Pythonu, kterej mu umozni quick win, a bude ochoten se ucit neco dukladnejsiho, Cecko je rozumna volba. Heroutova knizka je taky skvela, takze v tomhel ohledu nebude problem. Cecko jako prvni jazyk by zacatecnika jen zbytecne vydesilo. Ano, vy jste mozna hardcore a ucil byste Ccko jako prvni, ale ne vsichni to dokazou prezit.
Já bych klidně i C++ začínal, ale musel by mít po ruce nějakou jednoduchou knihovnu, která by quick win umožňovala. Spousta věcí v C++ vychází z C, který považuji za hackerský jazyk, protože spoustu věcí prostě hackuje. Konečně, nejkrásnější příklad hackovského stylu v C je funkce printf, ať už vezmu variabilní počet parametrů … zejména implementace … a na to navazující obcházení tohoto problému volbou formátu, který porušuje základni pravidlo přehledného programu a to, že všechny informace mají být uvedeny jednou a na jednom místě (což u funkce printf není splněno u typu parametru).
V tomto směru čekám na nějakou komplexnější verzi C++0×, která jde dál do abstrakce a nahrazuje nejrůznější implementační hacky právě obecnějšími postupy. Nad tímto systémem bych vyšel s knihovnou, která by za studenta vyřešila běžné problémy typu, odkud se čte vstup, kam jde výstup a jak se vypíše chyba a podobně, a je zde prostor pro výuku algoritmizace, programování a hlavně OOP.
C-cko a hackersky jazyk? Bol sice navrhnuty na programovanie OS. Ale nemyslim si, ze okrem MS Visual C++. Dnes som poslal copmmit jedneho multiplatformoveho CAD-u pod new BSD na baze OpenCascade a WxWidgets. gcc aj Visual Studio 2008 ho prelozi dobre, ale pre Visual Studio treba pridat trojriadkovy workaround
do jedneho headeru:
#if _MSC_VER == 1600
#include <iterator>
#endif
Ukazka ako MS presuva funkcie mediz headermi
Já bych klidně i C++ začínal, ale musel by mít po ruce nějakou jednoduchou knihovnu, která by quick win umožňovala. Spousta věcí v C++ vychází z C, který považuji za hackerský jazyk, protože spoustu věcí prostě hackuje. Konečně, nejkrásnější příklad hackovského stylu v C je funkce printf, ať už vezmu variabilní počet parametrů … zejména implementace … a na to navazující obcházení tohoto problému volbou formátu, který porušuje základni pravidlo přehledného programu a to, že všechny informace mají být uvedeny jednou a na jednom místě (což u funkce printf není splněno u typu parametru).
V tomto směru čekám na nějakou komplexnější verzi C++0×, která jde dál do abstrakce a nahrazuje nejrůznější implementační hacky právě obecnějšími postupy. Nad tímto systémem bych vyšel s knihovnou, která by za studenta vyřešila běžné problémy typu, odkud se čte vstup, kam jde výstup a jak se vypíše chyba a podobně, a je zde prostor pro výuku algoritmizace, programování a hlavně OOP.
Třeba něco jako ClanLib (http://clanlib.org/wiki/Main_Page)? Já se trošku obávám, že posledních 10–15 let se C++ vydal úplně opačným směrem a základní věci (pořádné standardní knihovny ala Java) v něm stále chybí, takže si je každý projekt/framework řeší znovu a po svém.
Nejde o to co ktery programovaci jazyk umi, ale o to, aby mel student alespon ramcovou predstavu, jak se dana konstrukce prelozi a jake ma pametove a casove naroky.
Bez vysvetleni funkce linearne vazanych seznamu, stromu, hesovacich tabulek proste studenti nepochopi (=maximalne se to nadrti na zkousku a potom zapomenou), ze treba vkladani do linearne vazaneho seznamu ma slozitost O(n), stejne jako vyhledani, u vyvazovanych stromu je to dejme tomu O(log n), ovsem na ukor nutnosti ukladat vice ukazatelu, jak je to s konstrukci hashe atd. atd.
Stejne je to se zakladnimi datovymi typy, kdyby se poradne probral rozdil mezi integery a FP, tak by nevznikaly silene konstrukce, ktere dost casto vidam i v komercnich aplikacich (nekde ma spousta studentu pocit, ze FP je „presnejsi“ nez integery atd.)
Zde je právě jeden z kamenů úrazu moderního programování – konflikt matematického přístupu s objektovým. Matematika pracuje s čísly a její základní doménou jsou čísla, množiny a matice. To je základ, se kterým by se mělo začínat. Až po jeho rutinním zvládnutí se pak zabývat OOP a tím, jak může ulehčit život. Při opačném postupu to pak působí problémy a dotčení jsou schopní vyprodukovat krásný OOP kód, který je však absolutně nečitelný pro matematika. Z kdejaké kraviny udělají objekt, zapouzdřují kde co a vrcholem jsou pak ti tvořící v C++, kteří přetěžují operátory jen pro to, že to umí. Z toho zmatku tříd a metod co z nich vypadne pak nejsou schopni ani spočítat operační a paměťovou složitost.
Ano, souhlasím s tím, že OOP není o tom umět zapouzdřit kde co a umět přetížit kdejaký operátor. OOP je o změnu stylu myšlení. Stejně jako nahoře, programátorem není ten, kdo umí napsat program, ale neumí ho strukturovat, takže výsledkem je kód nacpany do mainu.
Pokud někdo ví, k čemu je klíčové slovo „class“ ještě neznamená, že umí OOP programovat. Naopak bych našel několik OOP programátorů, kteří jsou OOP techniky schopni používat i v nativním C (s dotatečnou knihovní základnou)
Mas pravdu, v ISO Pascalu jsou to skutecne ordinalni typy, tedy i boolean :-) a vycet. Ja jsem se s tou vetou trosku zamotal v tom, ze ve FreePascalu jsou typy qword a int64, ktere jsou sice celociselne, ale nechovaji se vzdycky jako ordinalni typy (asi implementacni zalezitost, ale zminuji se o tom i v manualu, coz je dobre).
Žena zkouší učit se programovat, úspěšně prošla pokusy s KTurtle (to ji moc bavilo ;) a teď se (s mojí lehkou pomocí) pere s Javou.
Kupodivu ji to celkem baví, i když není žádný „matematický“ typ. Docela problém je ale se sháněním cvičebních úloh – jednak jsou občas moc složité, jednak drtivá většina úloh jsou nějaké matematické záležitosti, což je pro moji humantně vzdělanou ženu dost nezáživné – kromě vymýšlení algoritmu by si ještě musela nastudovat příslušnou část matematiky :(
Nevíte náhodou někdo o nějaké dobré sbírce úloh (ideálně online, ale knížka by taky byla dobrá), kde by byly úlohy:
1. uspořádané podle obtížnosti
2. začínající úplně jednoduchými úlohami (např. vypište větu obsahující číslo tak, aby byla gramaticky správně podle čísla)
3. alespoň trochu zajímavé (tj. pokud možno ne moc matematické a trochu žensky hravé, ideálně o nějakých kytičkách ;)))
?
Zatím jsem se koukal na knížku Algovize od L. Kučery, na stránku UVa Online Judge [1] a zepár stránek kde je aspoň pár úloh [2]
Pokud někdo víte o něčem lepším, byl bych moc vděčný za tip!
Dík.
[1] http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3
[2] http://www.ki.fpv.ukf.sk/~rhraska/
P.S. existují i různé stránky věnované specificky problému „IT a ženy“ :) jako např. http://www.zkusit.cz, ale většinou jsou to jenom taková povídání o tom, jak jsou ženský v IT potřeba a jak je to pro ně šance – ale pořádný pomůcky, jak čím a kde začít se tam člověk nedočte :(
A co třeba toto?
http://knihy.pecinovsky.cz/
Mám k dispozici i rukopis v PDF z doby kdy kniha vznikala kdyby jste na to chtěl mrknout. Kdyžtak mi napište na mail. Na konci každé kapitoly jsou úkoly. Řeší se tam věci typu jak ze základních geom. tvarů poskládat auto, strom, dům apod., ale i složitější věci.
notoric@seznam.cz
Ještě mě napadlo, že jestli chce žena zůstat u Javy, tak jsou docela dobré úlohy na želví grafiku. Implementace želví grafiky do Javy je jednoduchá a ty úlohy mají výhodu v tom, že je výsledek (aˇt už dobrý nebo špatný) hned vidět. Nějaké pěkné úlohy vycházely ve starších Elektronikách a také je na netu česká učebnice pro školy i s příklady (musím dohledat).
Kdybych já chtěl dnes seznámit někoho se základy programování za podmínek, že dotyčný se nechce moc mořit s matematikou, chce co nejdříve mít nějaké hmatatelné výsledky a chce si zprvu nejdříve spíše hrát a pak – výhledově – se třeba dostat k něčemu komplikovanějšímu (pokud ho to chytne a bude chtít), doporučil bych mu Squeak a jet podle SBE (Squeak by Example). Nic lepšího pro tyto účely IMHO vymyšleno nebylo.
Jen takové malé rýpnutí – Python, Javu apod. autoři vymýšleli s tím, že chtěli vytvořit nástroj pro opravdovou práci a ne jen na hraní. Vymysleli různé konstrukční prvky, ale v rámci úspor je udělali z nevhodného materiálu a v nevhodném meřítku – takže se na opravdovou práci příliš nehodí a na hraní je to zase zbytečně těžkopádné – zkrátka taková Cheva v 20násobném měřítku a papundeklovém provedení.
Smalltalk (resp. Squeak) vymýšleli primárně na hraní pro děti (viz projekt Dynabook). Ale nechtěli nic ošidit, pojali to velkoryse a navíc zvolili kovové provedení – takže se to dá snadno použít i na poměrně sofistikovanou práci. Prostě něco jako stavebnice Merkur. :-)
No neviem s tym Squeakom. Asi pred rokom som si ho stiahol a skusal, ale po chvili som ho zavrhol. Podla mojho nazoru je to tam moc zviazane s danym grafickym prostredim. Programator musi v dnesnej dobe vediet v akom subore ma zdrojak, ako ho skompiluje a ako ho bude debugovat. Myslim, ze kto zacne programovat v Squeaku sa toto nenauci. Podla mojho nazoru zacat programovat v Squeaku je ta najhorsia alternativa – je to slepa ulicka. Ak potom bude chciet clovek prejst na iny jazyk bude musiet zacinat uplne odznova. Ale mozno sa mylim a tesim sa na pripadny clanok o Squeaku od pana Tisnovskeho :-)
Dnesni IDE se pomoci ruznych outlineru s prehledy trid snazi programatory od pohledu na program jako mnozinu zdrojovych souboru odprostit (osobne mi nikdy neprisly ani trochu prehledne a nenaucil jsem se je pouzivat). Programator preci chce co nejmene bolestive napsat kod, ktery dela to, co po nem pozaduje, spustit ho a pripadne odladit. To, ze Smalltalk to dela bez zbytecnych obezlicek, prece nelze brat jako nevyhodu – urcite ne pro zacatecniky. Ano, Smalltalk se ovlada jinak nez bezna IDE, ale i vzhledem k jeho stari, zamyslete se nad tim, neni to chyba spis tech ostatnich IDE ;-)
U lidi, z nichz maji byt programatori, by Smalltalk nemel byt jediny a pravdepodobne ani prvni jazyk. Ale setkat by se s nim urcite meli, stejne jako treba s programovanim v assembleru rekneme na jednocipech, kde jsou systemove prostredky silne omezene.
Programování je ze své podstaty činností tvůrčí (resp. mělo by jí býti). Squeak jeho uživatele neomezuje – naopak, snaží se ho v jeho tvůrčí činnosti všemi prostředky podporovat. Navíc je celý vybudován velmi logicky a neobyčejně přehledně – od základních primitiv, až po poměrně luxusní, nadupané objekty; navíc abstrahuje od konkrétního HW a návrh založený na virtuálním stroji nejen dává celému prostředí snadnou přenositelnost, ale díky tomu, že jakoukoli součást celého systému máte k disposici k prostudování v neopakovatelně přehledné a výborně zdokumentované formě, může se uživatel stále učit, jak konkrétní věc, jež ho zrovna zajímá, funguje a jak to udělali profesionálové, a to na „obecném počítači“ – virtuální stroj toho nabízí a od hostitelského systému požaduje opravdu minimum. Kdo chce, může se na tom naučit a pochopit prakticky vše – je to takový model reálného počítačového systému. Od vykreslení úsečky až po velmi luxusní GUI, od práce se znaky až po činnost překladače… Navíc kteroukoli věc může snadno změnit a hned uvidí efekt, který to má, uvědomí si vazby, skrz něž se ta jeho modifikace distribuuje celým prostředím.
Na co pro boha motat začátečníkovi hlavu nějakými zdrojáky, projekty apod.? Dnes se to dělá nějak, zítra se to bude dělat úplně jinak. Když jsem začínal já s počítači, dělalo se to taky jinak. To jsou naopak ty nejmarginálnější věci, které pochopí za pár minut – když ví, co je ale podstatou jeho práce.
Ano – dnešním trendem je nacpat mladým do hlavy, kam kliknout, aby se zkompiloval projekt, jak se trasuje, jak se refaktoruje, jak rozdělit projekt na jednotlivé soubory… Ale už se v tom zápalu tak nějak zapomene vysvětlit, jak se vlastně programuje. Takže tu máme armádu vývojářů, kteří se přou o to, jaké IDE je lepší, jaký jazyk je lepší, jaký OS je lepší, ale ve skutečnosti jsou to žabomyší spory, protože to kvalifikovaně posoudit nedokážou.
Dnešní programátoři totiž vůbec neumějí programovat. 2/3 by mohly házet s cikány lopatou ve výkopu, protože na programování ve skutečnosti ani nemají schopnosti. Skutečnou náplní jejich práce je multiplikace problémů – na počátku je problém, z něhož jejich činností vzejdou dva další, aniž by se původní problém podařilo uspokojivě vyřešit, atd. A proč? Protože sice vědí, jak rozdělit projekt do souborů, jak k němu připlácnout knihovny, ale nějak jim uniká, že jejich činností nemá být rozdělování projektu do souborů, ale řešení problému. Vůbec není podstatné a ani nutné učit, jak se obsluhuje sporák, jak se pracuje s kuchyňskou vodovodní baterií, s lednicí… Podstatné je naučit se vařit – když toto dotyčný pochopí, docvakne mu už samo, jak a na co použít mixér, elektrickou troubu, či gril. Ale naopak to nefunguje a je to na současném softwaru vidět na každém kroku.
S prominutím – má-li nějaký uchazeč o programátorské povolání problém s pochopením „v akom subore ma zdrojak, ako ho skompiluje a ako ho bude debugovat“ a přechod k jiné organisaci by pro něj představoval zásadní problém, řekl bych mu tolik, že s krumpáčem a lopatou nadělá nejspíše méně škod, než při programování, na něž očividně nemá mentální schopnosti.
Mnohokráte jsem se setkal s „argumentem“, že „to a to v praxi nepotká, tak proč se to učí, proč se neučí hlavně to, co bude dělat v praxi, proč se zabývá něčím, v čem (už) nikdo nedělá…“ Ve skutečnosti je to ten nejhloupější argument, protože to je v protikladu s optimálními didaktickými postupy. Naopak – člověk musí poznat více přístupů, nových i starých, masově používaných i exotičtějších, jinak v životě nebude schopen získat o dané problematice přehled, nepřijde na to, co je podstatné a co ne, co se dá dělat jinak a kdy je to šikovné dělat to tak, neuvědomí si, že program nemusí být nutně členěn na soubory obsahující jeho různé komponenty, nenapadne ho, že je to vlastně takový anachronismus, přežívající do dnešních dob někdy z 50. let, kdy se to ani jinak dělat nedalo, a že existují i mnohem modernější a logičtější přístupy, a to i přes to, že jejich vznik se datuje mnohokráte do let před narozením dotyčného.
Nejsou žádné slepé uličky – každá ta ulička vede někam dál, jenom po ní třeba od jistého okamžiku nikdo nešel, protože usoudil, že je to za daných podmínek neperspektivní. Ale každý by měl mít možnost oťukat si to sám. Spousta lidí např. odsuzuje Pascal jako přežitý, nevhodný, zastaralý… Ale kolik z nich to může říci z posice kvalifikovaného odborníka a kolik jich to říká jen proto, protože to slyšeli od jiných, nebo dokonce za zápory označují to, co je naopak u toho jazyka ve skutečnosti kladným rysem, ale ve svém diletantismu si to ani neuvědomují?
Zcela souhlasim. Sam bych to nenapsal lip. Bohuzel dnesni vyuka programovani se casto zvrhava ve vyuku obsluhy IDE. Dokonce i na MFF. Napriklad kdyz my jsme meli cviceni k C/C++ tak vsechno probihalo u tabule, proste jsme dostali zadano neco `naprogramovat do sesitu' a pak se u tabule diskutovala ruzna reseni. Stejnym zpusobem jsme meli o rok driv zaklady algoritmizace v Pascalu. Za sebe musim rict ze me to naucilo docela hodne (a to jsem si myslel, kdyz jsem tam sel ze uz programovat docela umim).
Dnes (resp. pred 2ma lety kdy jsem jeste delal cvicitele) se to dela tak ze polovinu tech cviceni budete mit v pocitacove ucebne (nejspis aby se amortizoval nakup techniky a M$ prostredi), kde si kazdy neco pise do pocitace. Vysledek je ze se hodina zvrhne do reseni problemu typu ‚kde mam na co clicknout a proc to udelalo to ci ono‘. Takto a pak jeste opisovanim programu do pocitace se promrha
nejmin polovina casu, coz zpusobi se studentum musi davat jednodussi zadani (ovsem ta prace co s tim meli v nich budi dojem ze je to slozite), ti mene zkuseni pak ulohu ani nedokonci, protoze sice treba maji spravne myslenku ale behem te doby se nedostanou (i s dopomoci) pres zacatecnicke chyby. Kdyz pak na konci nekdo predvadi sve spravne reseni tak ho neposlouchaji protoze stale bojuji se svym programem. Pak jsou frustrovani a z jednoduchych veci zacnou mit fobie, slozitejsi radsi rovnou neposlochaji. Pritom kdyby pracovali na papiru a pocitac je neterorizoval tim ze tu a tamhle maji syntaktickou chybu tak by si pri zaverecnem porovani ruznych pristupu vsimli ze to maji skoro dobre a vetsinou i kde maji tu chybu.
Podle meho nazoru je nesmysl ucit ovladat IDE, krome zakladniho uvodu jak to spustit a do ktereho okna psat program a jak ho prelozit a krokovat a jak zobrazit help. To se da ukazat behem 2 hodin (na jednom pocitaci, treba na prednasce) a se zbytkem by se mel prumerne inteligentni clovek poprat sam (pocitacove laboratore jsou studentum pristupne i mimo vyuku). Jestli ani po tydnu snazeni nezvlada zakladni obsluhu tak by mel radsi jit delat neco manualniho a netrapit se s pocitaci.
No ve Squeaku nic takoveho jako soubor=trida skutecne neni, ale vzdyt mnoho dnesnich programatoru se na projekt diva jako na celek – proste maji v Eclipse nalevo/napravo zobrazeny strom s balicky a v nem jednotlive tridy, mnozi dokonce ani ten zdrojak nedokazou na disku najit (nekecam – zazil jsem jednoho takoveho „klikose“, ktery nejenze nedokazal zkompilovat projekt z prikazove radky, ale ani nedokazal najit zdrojak jedne tridy, ktery jsem po nem potreboval).
To se přece vůbec nevylučuje. ;-) Otázkou bylo, co doporučit začátečníkovi – zde bych s Lispem opravdu váhal. Mám sice knížku pro úplné programátorské začátečníky, kde se k výkladu používá Lisp a je to psáno tak, že by to pochopila i stará Weittingerová, ale v prvních kapitolách si čtenář jen hraje na papíře s čtverečky s čárkami, představující různé funkce a predikáty, pak si začne malovat různé stromy a jimi modelovat různé datové struktury a algoritmy a teprve pak se začne s tím, že tohle všechno se dá dělat i na počítači s pomocí Lispu. Pravdou je, že samotného by mne docela zajímalo, jak by to takový začátečník typu „tabula rasa“ přijal a jak by se pak díval na algolské, tj. z jeho pohledu exotické jazyky. :-) Možná, že třeba na stavebních nebo strojních fakultách by se takový experiment dal realizovat. S ohledem na vlastnosti AutoCADu by to pro tyto studenty mohlo být zajímavější a užitečnější, než jim cpát do hlavy C++ – jak se to děje nyní např. na ČVUT.
[Lisp is] „the greatest single programming language ever designed.“
„I think if you can have one language on your system, of the ones that have been around for a while, it should be Lisp.“
--- Alan Kay, duchovní otec Smalltalku
A ještě jeden od téhož autora pro ty, kteří se pořád ohánějí tím, že v současnosti se používá to a to, což má být pro výuku rozhodující:
„The best way to predict the future is to invent it.“
To je možná ještě šílenější představa, než u toho Lispu. :-)
Mimochodem – o Forthu jsem se poprvé dozvěděl někdy ve svých 10 letech z jakéhosi populárního článku ve VTM nebo něčem takovém a první, co mě napadlo, bylo, že takovou šílenost snad nikdo nemůže myslet vážně. Koho by tenkrát bylo napadlo, že jednou takový forthovský systém celý napíšu v Assembleru from scratch (teď mě tak napadá, že to celé bylo taky v jednom zdrojáku – jak trestuhodné! :-) na svou omluvu snad mohu říci, že to je relativně malý program, nějakých 80 KB spoře komentovaného Assembleru) a programování v oblasti embedded ve Forthu mě jednou bude živit… :-) Na tom je krásně vidět, jak si život s člověkem častokráte zašpásuje.
Na modifikaci myšlení je Forth opravdu skvělý nástroj – je to jazyk, ve kterém nešikovná analýza problému = záruka, že se v tom člověk zamotá tak, že už se z toho nevymotá. :-) Opravdu jazyk, u něhož je třeba „Thinking Forth“, jak se i nazývá skvělá knížka od Lea Brodieho, kterou bych doporučil místo všelijakých blbostí typu „C# za měsíc“ a podobně, ikdyž se nejedná o mainstreamový jazyk. Důsledky této vlastnosti mohou být jen dva – buď to člověk vzdá, nebo se – ať to zní sebeneuvěřitelněji – fakt naučí problémy analyzovat, faktorizovat a strukturovat tak, že je to jednoduché, přehledné a efektivní.
Forthisti ovšem pracují obvykle jako samotářští vlci a o své zkušenosti se dělí toliko v odborných diskusích a dříve i časopisech (Forth Dimension, bohužel již nějakých 10 let nevychází, přestože ho i neForthisti ze Silicon Valey považovali za jeden z nejlepších odborných počítačových časopisů a dodnes v jeho archivu člověk nachází podnětné myšlenky a postupy). Důvodem IMHO je, že forthista pracuje jako malíř – stojí před ním úkol něco ztvárnit, pak přemýšlí, jak to ztvární, jaké výrazové prostředky použije, jakou techniku malby použije, a nakonec se pustí do díla – udělá si pár skic, zkusí si, jestli jím zamýšlené barvy budou vyhovovat, připraví si podklad, namíchá si ty barvy a pustí se do díla. Co forthista, to osobnost, a troufám si říci, že by se po nějaké době studia dal podle forthovského kódu poznat rukopis konkrétního člověka asi nejbezpečněji ze všech programovacích jazyků. :-) Každý forthista nějak začne, ale každý si po nějaké době a zkušenostech vypěstuje osobitý styl, který může být dosti na překážku teamové práci. Ta spoluúčast vývojáře na tvorbě syntaxe je tu prostě ještě svůdnější a neodbytnější, než u Lispu.
Popisované zkušenosti s tím, že někdo se učil Pascal/C++ a má v main 2000 řádků nesouvisí s jazykem. Ten člověk by to nenaprogramoval správně v ničem jiném, prostě programuje, ale neumí to.
Pascal, který je zde většinou popisován je tak 15 let starý.
Zapomente na roky 1990 a podobne, to je davna minulost, kdy jsem taky zacinal, ale tak uz se dnes neprogramuje.
Pokud se dnes podívate na ObjectPascal v Delphi 2010, tak má overloading funkcí a procedur, inline funkce a procedury, defaultní parametry, možnost programovat těla funkcí v assembleru, dědičnost tříd, cykly „for in“, class helpery, podporuje unicode, má šablony funkcí a tříd, pretezovani operatoru.
Navíc si nehraje na nějaké trapné knihovny jako Java, ktera je dobove na urovni C, ale ObjectPascal má rovnou komponenty (výborné vizuální vkládání komponent do formulářů).
Pro začátečníka je vhodné, aby si zapnul při ladění kontrolu přetečení polí „Range checking“ a hodnot „Overflow checking“ a má naprosto lahůdkový debugger (žádné přeplácené Eclipse, sice zadarmo a na všechno, ale pro mě naprosto nepochopitelné …).
Pro výuku je výborné ucit definování polí pomocí ordinálních typů:
type TIndex = 3..10;
TArr = array [TIndex] of integer;
var a: TArr;
i: integer;
…
for i := Low(TArr) to High(TArr) do
a[i] := 1;
a[10000] := 1; // tady debbuger vyhodi chybu preteceni pole
To same je dnes v RAD nastrojich pro C/C++.
Tak, ze problem je v tom, ze to lide neumi ucit a nekdo se to naucil spatne a jeste se tim zivi.
Pascal je na vyuku vhodnejsi, nauci navyky a je prehlednejsi, pokud nekdo potrebuje, ale jazyk s vysokou optimalizaci do strojoveho kodu, tak je pro nej C/C++.
Jasne, priklad je z 90. let, ale ta ostatni vyjmenovana rozsireni jazyka jsou z posledni doby. Zapomel jsem jeste na anonymni funkce. ObjectPascal se dnes blizi „temer“ k C++. Bohuzel ma jen jednopruchodovou kompilaci, coz na jednu stranu je vyhoda, protoze kompilace je neskutecne rychla, nicmene pokud budete potrebovat prelozit program treba na kompresi, nebo s pozadavkem na extremni rychlost, tak C++ umi mnohem lepe optimalizovat vnorene cykly.
V dnesnich Delphi pisete program a rovnou se vam na pozadi kompiluje a podtrhava vam chyby, ktere tam mate. Ten obrazek Delphi 1.0, ktery zde je snad z roku 1995 (jestli se nepletu), kdy jsem si je kupoval. Dnesni IDE vypada uplne jinak a tech komponent jsou tam radove stovky.
S těmi 2000 řádky máš pravdu, nesouvisí to s jazykem. Souvisí to s tím, že se ten člověk na škole naučil nějakou syntaxi a trošku sémantiku jazyka a to ho tak vyčerpalo :-) že už se třeba neprobíraly věci jako modulární výstavba programu, strukturované programování (a sorry 2000 řádků v main() nebo mezi begin a end. není strukturované programování.
Já vidím v Delphi (ať už je teď prodává kdokoli – nějak často se to na můj vkus mění :-) jeden zásadní problém, a tou je cena a dostupnost jen na jednom prostředí. Kylix bohužel umřel, podle mě přišel moc brzo, když ještě programátoři nechtěli na Linuxu za něco platit (dnes se to trošku změnilo) a cena ze Delphi se sice programátorům zaplatí za pár týdnů práce, ale nakoupit licence pro třeba 40 počítačů na škole je někde jinde.
To jeste vazne nikdo nezminil Martina Marese? :)
http://mj.ucw.cz/papers/proglang.html
Squeak neni v souladu s pravidly Appstore, takze si ho bezny uzivatel na iPhonu moc neuzije (existuje ale par aplikaci, ktere ho interne pouzivaji). Dokonce i Scratch, resp. pouhy prehravac Scratch projektu museli prestat kvuli namitkam Applu nabizet.
Pro doplneni, nejnovejsi Squeak (4.1) vypada vzhledove trochu jinak. Pred casem se cast lidi trhla a vytvorila fork Squeaku jmenem Pharo. Dokonce existuje i kniha Pharo by example). Pharo ma lepe organizovany a intenzivnejsi vyvoj nez Squeak, ale vlastnosti zamerene na vyuku deti odsunulo na vedlejsi kolej.
Dobrý den.
Jedna drobnůstka, zkoušel jsem ten kód na vykreslení dračí křivky v Pythonu.
Překvapilo mě, že turtle je přímo součástí Pythonu a není třeba se shánět po knihovně. Python 2.5 mi ale kód nezbaštil, protože neznal některé funkce.
from turtle import right, left, forward, speed
def dragon(level=4, size=200, zig=right, zag=left):
if level <= 0:
forward(size)
return
size /= 1.41421
zig(45)
dragon(level-1, size, right, left)
zag(90)
dragon(level-1, size, left, right)
zig(45)
speed('fastest')
dragon(6)
raw_input('Pause: Press enter')
Při zvýšení hodnoty dragon(6) na něco vyššího např 10 nebo 12 už začíná být fraktál patrný. Při té 6 je to jen pár čar.