Každá škola řeší problém, jaký jazyk učit začátečníky jako první. Běžný vývojář k této otázce nemá co říct, protože lidé ze své podstaty preferují a doporučují to, co sami znají, a odmítají (a ti hloupější kritizují) to, co neznají. Nicméně i profesoři se hádají mezi sebou, když o tomto mají rozhodnout. Situaci komplikuje i dynamičnost IT oboru, ve kterém se vše příliš rychle mění (někdy k lepšímu, někdy k horšímu).
Problém lze částečně vyřešit vylučovací metodou. Co ne? Určitě ne Javu, to je Cobol dnešních IT oddělení. I C# je už za zenitem. V USA je prvním jazykem často Lisp, ale ten tu nemá kdo učit. A C je sice elegantní a jednoduché, ale příliš blízko železu.
Pokud bychom měli trvat na nějakém OO jazyku, nabízí se teď C++ a ObjC. První jmenované mnozí kritizují za přílišnou složitost (spíše neoprávněně, jazyk ani jeho tvůrce pranic nemůže za čísi neschopnost pochopit specifikaci). Nicméně samozřejmě má svá problematická místa, vesměs dědictví po C. Pokud zamítneme ObjC (což bychom ale neměli), jeví se jako nejlepší volba jakési osekané C++, něco bez „new“ a pointerů, ale s důrazem na STL a prvky vyšší úrovně (například lambda výrazy, šablony atd.).
Nyní zpět k ObjC. Tento jazyk je svým způsobem geniální ve své jednoduchosti a síle. Je témeř tak geniální jako Smalltalk (z nějž vyšel) a má tu výhodu, že jej zvládá GCC. Navíc se s ním student naučí základy C a bezprostředně lze přejít na C++ v rámci stejného zdrojového kódu (ne že by to bylo vždy vhodné řešení, ale aspoň lze přímo využívat knihovny napsané v C/C++). Navíc se člověk tak nějak za běhu naučí dokumentovat kód.
Metodicky by se mělo postupovat od jednoduchého ke složitému. Peter Norvig v jedné ze svých knih rezignoval zcela na volbu vhodného jazyka pro výklad a užívá pouze pseudokód, někdy dokonce choose-fail styl (ironicky zvolejme: sláva Prologu a Iconu…). Na tom něco je, psaní kódu stojí a padá s algoritmem, ne konkrétním jazykem. Řídit se taky můžu učit v Trabantu i Ferrari. Když pak sednu do bagru, musí mi sice někdo vysvětlit ovládání, ale po pár dnech bude řízení rutina.
Facit: Chce to něco OO, co si student může spustit (zde je nevýhoda pseudokódu). Nejméně budoucího vývojáře zkazí (ve smyslu zažitých negativních návyků) C++ (ořezané), možná ještě C#, a pak některé (v našich končinách) méně konvenční jazyky, jako Lisp nebo F#. Před jakoukoliv algoritmizací se ale nesmí zapomenout na nezbytné matematické minimum (teorie funkcí, formální logika, stavové automaty apod.).
Update 1: Tentokrát jsou komentáře velmi zajímavé a podnětné. Zaujalo mě zmínění Basicu, na ten jsem tak trochu zapomněl, protože v nějaké rozumné formě (a že jich je požehnaně) se jedná o jazyk pro začátečníky původně přímo navržený. Diskuzi si ovšem zaslouží hlavně správa paměti v C++, kolem které evidentně stále existuje řada mýtů. Tak tedy, v C++ je správa paměti takřka neviditelná a začátečníkům by se o ní nemělo zpočátku říkat nic (i když na VŠ asi ano, ale není to nutné). Několikrát to rozebíral sám Stroustrup, takže nejlepší je odkázat přímo na něj, resp. jeho stránky. Z širšího pohledu není vůbec pochyb, že C++ je (ve verzi C++11 a ještě více budoucí C++14) vhodné pro výuku jednoduchých algoritmů a logického myšlení. Běží všude, je přenositelné, má rozsáhlou knihovnu, kontrolu typů a není ukecané (díky „auto“). Visual Studio, Xcode, případně něco na Linuxu jsou zadarmo a první program je možné napsat a spustit hned po instalaci. Jediná nevýhoda, která mě napadá, je absence GUI ve standardní knihovně.
samotny jazyk je jedna z veci skladacky: potrebujete, aby bol jazyk dostatocne zabavny; potrebujete ludi, co to vedia ucit; potrebujete metodiku ucenia; potrebujete podporne materialy/knowledge base pre studentov i ucitelov
pascal mal vsetko, ale po rokoch ma nulovy coolness [lebo modre prostredie a konzola nie su in]
lisp je skvela abstrakcia, ale mimo praxe [detto haskell]
c je prilis zeleze [a heroutove knihy uz nie su velmi in]
python/ruby este u nas asi nema metodiku a ludi, co ho vedia podat aj newbiekom
java/c# ma na uvod stvormetrovy murik, na ktory treba hned na zaciatku vyliezt
teoriu funkcii / formalnu logiku / stavove automaty netreba :-)
bump ... a absolutní nesouhlas s okamžitým vyloučením Javy. teď jsem právě potřeboval nějaké jednoduché udělátko pro posílání MIDI povelů do externího syntezátoru a chtěl jsem zkusit python - jakesi mido a jednoduche priklady, okok, ale instalace pip instal mido selhala na nejakych binarnich knihovnach rtmidi blabla... fajn, ihned jsem vyloucil javascrip s jeho tunami hoven v node (electron virus) etc ... takze java (pred 20 lety !! zkusenost s javax.sound.midi, od te doby nic)... prvni priklady z webu, traverzovani po portech/zarizenich ... notepad ... "neco.java" ... "javac neco.java" "java neco.java" .... BUM! funguje, bez namáčení... další příklad... a další ... furt javac ... pak už otravné takže jebrainst intellij idea ... otevřeni neco.java v IDE ... pridani projektu, bez balicku, nic zadne packages ... zadne silene objekty, jen staticke medoty a troška(!) omačky kvuli tomu ... main() a metody ... fajn, IDE pomaha jako svina pri kodovani, radi, napovida doplnuje importy, po par minutach neni problem refactoring kvuli udrzeni poradku, pridavani dalsich prikladu jako nove tridy do projektu, vsechno kratounke cmdline nebo swing apps pripadne komponenty ... NIKDY zadny zasek pri buldovani, NIKDY, NIC ... vsechno se builduje hned, kazdy drobny priklad, bez problemu, okamzite - trosku hledam v ide integrovany presmerovany output, resp. cely terminal, ale to se najde ... okamzite drobne upravy prikladu, ihned videt vysledek, nezajima me repl a interpret, typovana syntaxe pomaha vehementne, vsechno funguje, programy spoustim vedle v terminalu proti test datum pres java "neco" ... v IDE jsou jednotlive nebalickovane priklady separatne buildovat a startvat debug, krokovani v pohode, breakpointy v pohode, debugger ke kodu zobrazuje dynamicka data tak jak jsem to jeste v zivote nikde jinde nevidel... parada ... PARADA, JAVA !!!
Lisp nebo Scheme neni problem ten jazyk muze zvladnout kazdy, existuje k tomu i spousta dobre literatury (SICP), napr. na UPOLu se lispove jazyky pouzivaji pri vyuce v prvnich rocnicich.
C++ je pro vyuku absolutne nevhodne, uz jenom to, ze specifikace ma hrube pres tisic stran, cf. RxRS. A hlavne pro pochopeni rady vlasnosti je potreba mit predstavu o implementacnich detailech a soucasne mit rozhled v programovacich jazycich. Oboji zacatecnici z podstaty postradaji.
ObjC prilis neznam, nebudu se vyjadrovat.
Nechapu, proc v tom vyctu neni Python, podporuje objektove, proceduralni i funkcionalni paradigma, je blizky pseudo-kodu, ma REPL a jde pouzit na vyvoj realnych aplikaci. Co clovek k nauceni potrebuji vic?
pre zaciatocnika staci zacinat na minimalnom mnozstve konceptov: netreba ho zatazovat automatmi, ked na to ma cas (rovnako ako neskor nehovorite linuxakom, co grepuju, hned o regularnych automatoch)
btw, mne sa zda, ze sicp, akokolvek je dobry, sa uz na mit nepouziva :-)
preco tam nie je python, nie je jasne ani mne.
imho dobre priklady, ktore sa mi pacili a funguju, su "hello python" (od manninga) a "head first java" (oreilly) [aj ked autor clanku vyhlasil javu nezmyselne za cobol it, co beginnerov vobec nezaujima]
To je prece jasne, uplneho zacatecnika je nutne nejdriv naucit jazyk Karel. Kdo to nezna, je to takova spis hra, karel je robot a zna jen par prikazu, jako KROK, nebo VLEVO_VBOK, a POLOZ (pro polozeni cihly na zem). Za pomoci techto zakladnich prikazu se pak programator uci, jak karla naucit vic (napr. ho nauci DVOJKROK, ktery je naprogramovany jako procedura ktera udela KROK a KROK, atd).
Programatory ne nejprve ucit logicky programatorsky myslet, a ne nejaky jazyk, to je nepodstatne...
nechapem preco by malo byt programovanie jednoduche a preco zalezi na jazyku
to je ako trepat o tom, ze po huronsky neviem vyjadrit city rovnako ako vo francuzstine
pascal, c, java, php ... chce to cloveka, ktory vie rozmyslat, predstavit si problem, najst nejake riesenie, implementovat ho ... nejaky jazyk na to pouzije a hotovo
Heroute knizky uz mozno nie su in, ale celkom jasne si spominam na moment, kedy mi z prveho dielu docvakli pointery :) a to som velice priemerny programator ...
na zaciatky by som jazyk moc neriesil, osobne sa mi pozdavaju veci od p. Pecinovskeho - co sa tyka toho, ako zacat programovat ... aj ked je to asi uz pre starsie deti :)
ak niekto nevie jazyk, ale vie rozmyslat, ten jazyk sa nauci, ak niekto nerozmysla, ziadny jazyk mu nepomoze ...
Já bych hlavně jako první odlišil, jestli je na mysli výuka na základní, střední, nebo vysoké škole (na každém z těchto stupňů píše někdo svůj první program).
Na základce to chce nějakou tu želvičku, na střední jaoukoli chujovinu, kde se snadno píše uživatelské rozhraní - ale klidně i třeba basic, packal, C bez poiterů...
Na výšce bych se naopak přiklonil k C (protože ho mám rád), právě proto že je blízko tomu železu - na výšce by se studenti měli právě s tím železem taky seznámit, tak tyto znalosti rovnou užijí.
IMHO nejlepší volba je ve skutečnosti Ruby.
+ Interpretovaný
+ objekty (duck-typing)
+ bloky
+/- volná syntaxe
Škoda, že je k němu málo materiálů v ČJ (něco lze najít na internetu, ale knihu abyste pohledali).
V AJ je toho mnoho, dokonce originální dokumentace je velmi pěkně zpracovaná, rozdělená podle verzí 1.9, 2.0, 2.1.
podla mna je na vyuku programovania momentalne najvhodnejsie prave C++ (idealne vo verzii C++11).. Pretoze sa na nom daju vysvetlit vacsina programatorskych principov, a netreba pri tom na zaciatku preliezat nejake mury OOP. Proste da sa zacat bez pointrov, bez OOP, etc.. potom v tom istom jazyku sa vedia vysvetlit aj pointre, aj pamatova alokacia, aj datove typy, aj OOP, aj lambda funkcie, zaklady typovej inferencie, programovanie GUI-cok, low level systemove volania, etc..
Na vyuku algoritmov a logickeho myslenia je jednoznacne najlepsi python, pretoze je to ako pise feri "spustitelny pseudokod", clovek pri nom nemusi mysliet na datove typy, pamatovu alokaciu, main funkciu, kompilaciu, etc..
ale na naucenie sa programovania je treba vybrat si jazyk, ktory cloveka oboznami s co najviac featurami ako sa len da.. Aj ked teraz viacmenej kodim v python-e alebo exotickych jazykoch, som vdacny C/C++ za to ze ma naucilo zaklady prace s pamatou, datovymi typmi, low level pristupu k systemu, sietam, etc..
Co zde nikdo zatím nezmínil, je že výhodu při výuce mají jazyky, kde student pro napsání a spuštění jednoduchého programu nemusí několik minut startovat těžkotonážní IDE, proklikávat se několikastránkovým wizardem, aby pak nakonec svých pár řádek kódu umístil mezi tunu předgenerovaného boilerplatu, který v danou chvíli stejně vůbec nechápe. Ano, ať už je Java jakákoliv, tohle je její asi největší problém při výukovém použití.
Moci spustit program jako skript z příkazové je fajn, ale jazyky, u kterých existují interaktivní REPL konzole (většinou alespoň částečně funkcionální), jsou v použitelnosti pro výuku nesrovnatelně dál. Moci napsat jakýkoliv kus kódu a rovnou vidět jeho výsledek, aniž bych se musel jakkoliv zabývat s IO, je prostě super.
To, že prakticky první věc, která se na algoritmizaci učí, je výpis na system out, čtení z klávesnice a nedejbože ze souboru, to celé za doprovodu celé baterie javovských streamů/readerů/printerů a kdoví čeho dalšího, je zlo, které těm studentíkům naprosto kriplí způsob uvažování na dlouho dopředu. Ve chvíli, kdy každý kus kódu je výraz (a tím pádem hodnota), nemusím vůbec přemýšlet nad naprosto podružným detailem, jako jak načtu zadání ze souboru a jak ho naformátovaně vytisknu, ale můžu se zabývat tím opravdu důležitým, a to jak spočítám XY (doplňte).
(Ne)syntaxe lispu je sice pro nepřipravené šok, ale začínat jím výuku podle mě dává smysl a ve výsledku je to jenom o zvyku. A pokud vám závorky opravdu vadí, tak bych bral Scalu. Je to sice po C++ asi druhý nejkomplikovanější jazyk vůbec, přesto ale dokáže být velmi kompaktní a jednoduchá, pokud si omezíme obor toho, čím se chceme zabývat (ověřeno prakticky ve webovém kurzu vedeném přímo M. Oderskym). Navíc existuje tzv. Scala worksheet https://github.com/scala-ide/scala-worksheet/wiki/Getting-Started - což je velmi zajímavý hybrid kombinující interaktivnost REPL konzole a sílu klasického IDE editoru.
Já nevím, ale rozhodně bych nezačínal přímo jazykem, ale nějakými algoritmy a třeba objektovým modelováním. Když už tohle mám za sebou, pak klidně Javu nebo C++.
Na popis algoritmů stačí jednoduchý basic (řazení a tak). Na objektové modelování naučit základy UML (to je jen malování čtverečků). Tam je dobré lidi naučit, že každý ten čtvereček je samostatný svět, kde běhají ti trpaslíci algoritmy. No a pak už bych začal nějakou tou javou nebo C++. Proč právě tím? Kvůli silnému typování, které začínajícím pomůže vyvarovat se spoustě chybám. Duck typing bych nechal na nějaké advanced kurzy.
U C++ budu muset studenty naučit zacházet s pamětí, ale v Javě je zase ochudím o RAII.
Nechápu, jak můžete na výuku programování doporučovat C++. A dokonce tady někdo psal, cituji "netreba pri tom na zaciatku preliezat nejake mury OOP". C++ je právě objektová nadstavba C, bez OOP přece nemá smysl. A po začátečníkovi chtít ke všemu chápat správu paměti? Chce to snad něco jednoduchého v čem lze hezky zapsat algoritmus a vidět výsledek. Začátečník potřebuje jednoduše vyjádřit myšlenku algoritmu, ne se starat ještě o dalších x věcí kolem IO a paměti. Něco jak byl Pascal, ten byl pro začátky dost dobrý(však byl také přímo navržen jako výukový jazyk). I Scheme je na výuku dobrý(myslím, že se také používá MIT jako výukový jazyk). Pěkně se v něm ukazuje rekurze, rozdělení na funkce atp. Jenom se v něm špatně zapisují matematické výrazy, prefixová syntaxe není moc pěkná na čtení. Na druhé straně se dá psát kód s minimem příkazů. Ještě tak možná Python. Je poměrně jednoduchý a aspoň naučí správně psát kód, když nutí odsazovat. A to je kromě Loga a Karla všechno, co mě napadá jako vhodný začátečnický jazyk. :)
[17] To se ale dostáváme k přístupu "v dílnách bychom děti nejdříve měli naučit kreslit výkresy, počítat nosné konstrukce a řešit diferenciální rovnice pohybových soustav, a teprve pak je nechat uříznout prkénko". Aneb cíl je jiný - naučit programovat lidi, kteří se ani moc nechtějí naučit programovat. Možnost si to osahat a zkusit je základ. Zkusit si ten Hello World spustit. Začínat algoritmy pro řazení a UML je cesta do pekla.
Osobně s láskou vzpomínám na Turbo Pascal. Nejdůležitějším prvkem pak byl debugger, kdy si člověk doslova "prokrokoval" cestu programem. Pokud bych měl nějaký jazyk vybrat, tak tohle by byl jeden z mých požadavků - interaktivní debugger, kde vidím kde jsem a co dělám, a mohu se kouknout na obsah proměnných. Ostatně nedávno jsem učil dva kolegy "z kanceláře" programovat. To by jeden neřekl, jak dobře funguje debugger ve VBA. A spreadsheet navíc poskytuje triviální metodu pro vstup a výstup dat. Uživatelské formuláře se v tom také dají udělat. Čím víc o tom přemýšlím, tím lepší mi to připadá. Asi jo, učil bych to na OpenOffice.org, Hello World se v tom napsat dá, úlohy typu vezmi údaje ze sloupce A a zkopíruj je do sloupce B seřazené. Jo, to by jako začátek šlo.
[21] Oddělte prosím výuku algoritmů a výuku programování. V dílnách dostane pilník a máte to ohoblovat na 10cm, nebo pilu a uříznout to takhle šikmo. To je sice hezké, ale stejně se nenaučíte nic pořádného. Maximálně se naučíte kutilství. Takových programátorů znám hafo. Zpravidla jen přepisují věci na nalezené na internetu, aniž by chápali, jak to funguje. Pokud to někdo opravdu myslí s programováním vážně, tak si musí naučit program navrhnout analyticky. Jsou tací talentovaní co to udělají v hlavě, ale ti ostatní musí na papír. A je fuk, jestli to mají být vývojové diagramy, E-R schémata, ale já osobně doporučuju UML, aspoň tedy nějaké základy, aby student věděl, kde to rosto a jak se to používá. Aby pochopil základy OOP (sorry, nic jiného, než OOP přístup neuznávám... do OOP nepočítejte algoritmy, jako stromy, grafy, řazení, ty se dají naučit na číslech a fungují perfektně na objektech)
[19] Výuku lze zjednodušit přípravkem. Například výukovou knihovnou, která zjednodušuje některé věci, které by se jinak těžce vysvětlovali. Student se nemusí učit pointery, na začátek vystačí s STL + nějaký přípravek k probíraným tématům.
za nasich cias... sme zacinali na basicu, co je dnes protipriklad vsetkeho didaktickeho. lebo naozaj finty, ktore fungovali a zaujimali ludi kedysi, su dnes prudko out. dnes uz nezaujmete bielym fontom na ciernom pozadi v linuxovej konzole, kam sa musia ludia nebodaj nalogovat cez putty, a riesia priklady typu "zratajte skalarny sucin dvoch vektorov", najma nie, ked okolo nich svietia farebne okienka a tocia sa flashove hry.
dalej ludia na zaciatku bojuju s troma vecami: 1) ako vymysliet postup (algoritmus), 2) ako ho zapisat v jazyku 3) ako vybojovat implementacne detaily. na 4) urovni je styl a krasa.
take c je napriklad nestastne v tom, ze treba riesit vsetky tri levely naraz (stringy pridu velmi rychlo a stringove i/o teda nie je velka radost, ak ho mate vysvetlovat 40rocnym ludom v ramci intra programovania), zato taky python to posuva do dvoch urovni a lisp/haskell pri matematickych ulohach do jednej.
a samozrejme, strasne vela pomaha normalne ide (preto bol oblubeny turbopascal), ktory ma normalne hlasky a znaviguje cloveka na miesto chyby. (a protipriklad c bez toolov, ktore vypise "segmentation fault" a tym konci), lebo aj tak skor ci neskor si programator musi vela veci odvlacit sam bez toho, aby mu niekto stal za zadkom
Karel v Pascalu :-)
S tim jsem se potkal nekde na stredni a bylo to vynikajici - Karel byla vlastne unita v turbopascalu, ktera se starala o vykreslovani a vyhnocovani prikazu (mela implementovane ty uplne zakladni: krok, doleva, je_zed, ...).
A clovek pak psal svuj program v pascalu, kde definoval funkce/procedury, ktere volaly tyto 'Karel' prikazy z unity a na obrazovce mu makal Karel.
[25]"sorry, nic jiného, než OOP přístup neuznávám..." zní skoro jako "nic jiného než kladivo neuznávám, všechny problémy jsou stejně podobné hřebíku"
Ochuzuješ se o hodně. U problémů, které občas řeším, produkuje OOP přístup dost komplikovanou strukturu. Občas jsem měl úspěch s funkcionálním přístupem, občas s plain C poli. Celkem pravidelně jsem při objektovém návrhu měl v jednom objektu věci, které sice patřily k jedné entitě, ale používaly se jinde a jinak. Občas má cenu uvažovat třeba o poloze a barvě odděleně bez omezování se na objekt auto.
1. Nemo7 uz dlho neplati ze C++ je len objektova nadstavba nad C. C++ je multiparadigmaticky jazyk oproti C ma mnoho dalsich dolezitych vlastnosti (sablony, pretazovanie operatorov, lambdy, vynimky, ...). V C++ sa (naorzdiel od C# a java) zaciatocnik zaobide aj bez znalosti OOP.
2. V Pascale sa musi tiez rucne alokovat a uvolnovat pamet (na halde). Pascal je tiez objektovy rovnako ako C++, takze neviem v com by mal byt C++ horsi na vyuku ako Pascal.
Podle mého názoru je velmi důležité, na jakém jazyku programátor začne, protože ho do jisté míry zařazuje. Je to stejné, jako když si si přečtete knížku a pak shlédnete film nebo naopak. To první se vám prostě líbí víc. Proto bych začal něčím, co nováčka nezkazí a dá mu zákadní představu.
Pro základku (pokud se tam někdo odváží zavést programování) a nižší střední školu rozhodně Karel. Pochopíte cykly a podmínky dřív, než vám dojde, že programujete.
Problematika ukazatelů se výborně vysvěltuje na BrainFucku, na zbytek je dobré C. Sice jsou s ním zbytečné starosti, ale jen co překousnete těžký začátek, máte v rukou jazyk, který vás učí dobře programovat, protože nic nedělá za vás. Navíc ať si kdo chce co chce říká, není od věci být blízko železu. Alespoň ze začátku ne.
Pokud se vám C zdá příliš těžké, tak zvedám ruku pro Python, popř. Ruby. Syntaxe primitivní, navíc jsou velmi mocné. Četl jsem dokonce něco o tom, že se v anglicky mluvících zemích uvažuje o zařazení Pythonu do povinné výuky prvního až druhého stupně.
Velmi mě zaujala myšlenka Code Hero (http://primerlabs.com/). To je myslím nejlepší možná varianta.
Nechápu tu averzi vůči Javě. Už jen kvůli Blueji. Jednoduché prostředí, kde návrh programu probíhá vizuálně pomocí (byť zjednodušeného) UML. Od začátku tak nutí učit se UML a pracovat objektově. Další vlastností je možnost přímo z prostředí volat metody a zadávat jim parametry aniž by se musel kompilovat celý projekt a vytvářet spustitelný soubor. Velmi dobré na vyzkoušení funkčnosti nějakého kusu projektu.
Python je IMHO pro zacatecniky idealni (vyjimkou jsou snad male deti, kde je lepsi neco, co kresli..). Snadno se to uci (uz proto, ze se muzete vybodnout na paradigmata jako OOP, ktera davaji smysl az kdyz pisete programy nad 1K radek, nebo technicke detaily jako pointery a spravu pameti), a neni to akademicke - pokud se clovek nenauci nic jineho (treba z duvodu, ze nechce byt profesionalni programator), stale to muze snadno pouzit na sirokou skalu uloh (a vyuzije se to, i kdyz se clovek pozdeji stane profesionalem).
A kdyby neexistoval Python, hlasoval bych pro Scheme nebo Common Lisp.
Co povazuji za horsi je soucasna kultura navrhu aplikaci, ktera bohuzel dela z programovani "vysokou vedu" a nedovoluje tak beznym lidem vyuzivat programovani tolik v praxi, kolik by klidne mohli. Ale treba to casem pochopime a zlepsi se to.
[25] Pokud se bavime o vyuce (profesionalnich) programatoru, pak je uplne jedno, kterym jazykem se zacne, protoze ti by se stejne meli naucit nekolik beznych jazyku a paradigmat (IMHO minimalne Javu/C#, C a nejaky skriptovaci Perl/Python/Ruby/JavaScript, a trochu znat Lisp, Prolog, Haskell a Forth).
Dal jsem sem pár odstavců z výuky OOP v C++ z Builderu. Stále si myslíte, že se programátor v C++ obejde bez aspoň trochu hlubších znalostí o paměti atp.? Začátečník určitě všechno hned perfektně pochopí a bude s radostí psát programy v C++. Stejně jako já, když jsem začínal s Pascalem. :-) Nebo se dnes už v C++ programuje jinak? Jsem už trochu staršího data(a výukové lekce z Builderu také). Myslel jsem, že se v C++ stále programuje stylem, který cituji. Vždy jsem měl C++ za "nižší" úroveň programovacího jazyka ve smyslu blíž k "železu" a s daleko pečlivějším staráním se o zdroje.
1. Lekce - OOP programování v C++
Reference - V C++ existuje vedle proměnné nějakého typu a ukazatele na proměnnou nějakého typu také reference na proměnnou nějakého typu. Mám-li to říci hodně neformálně, tak reference je ukazatel, se kterým se pracuje stejně jako se statickou proměnnou. S pojmem ukazatel se jistě každý programátor v jazyce C již musel setkat.
http://www.builder.cz/rubriky/c/c--/zaklady-oop-v-c-od-c-k-c--155657cz
4. Lekce - Vytváření instancí - konstruktory, destruktory
V programu jsou nejprve zavolány konstruktory globálních instancí, poté je až spuštěna funkce main , ve které jsou volány konstruktory a destruktory na lokální instance. Po skončení main jsou likvidovány globální instance.
...
Další možností je dynamické alokace paměti na haldě, a vytvoření instance. K takové instanci přistupujeme přes ukazatel, který na ní "ukazuje". Ukazatel deklarujeme jako v jazyce C. Pro alokaci paměti existuje nový operátor new. V takovém případě instance "přežije" konec bloku, a je potřeba ji zrušit operátorem delete. Stejně jako je tomu v C s dynamickými prom. Obdoba new a delete je v C malloc a free.
...
Destruktor, jak již asi sám jeho název napovídá, slouží k likvidaci objektů. Destruktor (stejně jako konstruktor) je metoda, která je zavolána na instanci v momentě, kdy je instance likvidována. Destruktor se jmenuje stejně jako třída, jen před názvem třídy je znak ~ . Destruktor nesmí mít návratovou hodnotu a žádné parametry. V destruktoru by se měly uvolnit všechny zdroje, se kterými instance pracovala. Například uzavřít datové soubory, uvolnit případnou alokovanou paměť a podobně.
http://www.builder.cz/rubriky/c/c--/vytvareni-instanci-konstruktory-destruktory-155678cz
5. lekce - Kopírovací konstruktor v C++
Přesto spustíte-li program, zjistíte, že program spadne vyvoláním metody instance v2 ( Tento řádek jsem okomentoval "BUM"). Abych byl přesný, program havaruje na 100% jen pod OS Linux, který má přísnou kontrolu a ochranu přístupu do paměti. Tento program pod Windows xx spadne jen někdy, což jsou velmi nepříjemné chyby, které se velmi obtížně ladí. Pod Windows by se dalo spíše očekávat, že se v programu nepochopitelně mění některé proměnné a podobně. V každém případě se ale jedná o chybu programátora, ne OS, nebo C++. V příkladu, který jsem uvedl, je chyba. V momentě, kdy je vykonáván řádek: v2.nastavPrvek(2,0); již není alokováno pole Slozky instance v2. Ukazatel složky v instanci v2 ukazuje na nealokovanou paměť ("nikam").
...
Program nejprve zkopíruje na svůj zásobník všechny parametry funkce. Jedná-li se o metodu, je navíc kopírován i implicitní parametr this. Také se na zásobník uloží návratová adresa, ale to nyní není podstatné. Po skončení funkce, nebo metody se uloží do nějakého registru (podle typu) návratová hodnota a předá se řízení na návratovou adresu volajícímu. Volající přečte návratovou hodnotu, "vyčistí" zásobník a pokračuje v činnosti.
http://www.builder.cz/rubriky/c/c--/kopirovaci-konstruktor-v-c--155685cz
Python je dobry jazyk na vyuku, ale dost veci, ktore by podla mna programator mal poznat skor ako ich zacne nepouzivat (alokacia pamate, datove typy, kompilacia), v nom chyba.. taktiez je problem python2 / python3 ktory na zaciatku ludi matie a na windows-e sposobuje mierne problemy, etc.. nehovoriac o OOP v Python-e, ktore je podla mna trocha blbe na vysvetlenie (a konstruktor sa bude volat __init__, static metody musite robit s dekoratorom @staticmethod, mozete pristupovat k premennym ostatnych tried ale ffs nerobte to, etc..)
a to hovorim ako pythonista.. ale zacinal som s C++ a C a boli to super zaciatky. Pretoze zacnes s kompilaciou, datovymi typmi a jednoduchymi algoritmami (z objektov pouzijes iba cout a cin a ani to im nemusis povedat co je to objekt na to aby to pochopili). Potom sa zacne vysvetlovat nejake tie kniznice, makra, template-y, STL-ko, alokacia pamate, smerniky, nakoniec sa prejde na OOP, a to vsetko v ramci jedneho jazyka. A ak chces pokracovat, tak aj thread-y, low level systemove volania, etc.. v C-cku, na ktore sa z C++ prechadza celkom lahko.
Na nasej skole (FMFI UK) sa podla mna vyucuje programovanie dobre, ale to striedanie jazykov moze byt pre niekoho desive.. (za prve dva roky sa stretnes s C, C++, Javou aj Python-om)
Prijde mi, ze je to tu plne teoretiku... jeden by tu nepustil lidi programovat bez statnic z matiky, dalsi bez toho, aniz by namalovali alespon 100 UML diagramu. Zajimalo by me, jestli tu byl nekdo z vas opravdu v "prvni linii" a ucil programovat lidi, kteri nikdy pred tim neprogramovali.
C++ je na to opravdu nevhodny jazyk. Z vlastni zkusenosti mohu rict, ze nejvic problemu delaji ukazatele a sprava pameti. C++ to dela jeste slozitejsi, protoze jednou muze byt objekt alokovany na heapu, jindy na zasobniku, jednou je predavany jako hodnota, jindy jako ukazatel, refence, shared_ptr, auto_ptr, ruzne kopirujici konstruktory, pretizeny operator =, to jeste zamotavaji. Takze zacatecnik misto toho, aby se venoval algoritmum casto zapasi s jazykem samotnym. Pro zkusene programatory jsou tyto veci trivialita, ale zacatecnik ma opravdu jine starosti...
@Nemo7 To, co jste sem dal, je dokonalý příklad toho, jak se v C++ programovat nemá. To mě vede k úvaze, že C++ je sice pro začátečníky ideální, ale hlavně musí být "na úrovni" vyučující, protože když bude studentům říkat nesmysly, tak nadělá víc škody než užitku. Opět odkazuji na stránky Stroustrupa, kde je vše vysvětleno i s jednoduchým příkladem.
Takže máte pravdu, v C++ se programuje úplně jinak. Mnohem jednodušeji a bezpečněji.
@black3r: Tak treba ta kompilace je zbytecny krok navic. Diky REPL si zacatecnik muze odladit funkci a pak si ji ulozit. Napr. muj otec, ktery naposledy pred dvaceti lety programoval v Pascalu a ted diky RaspberryPI objevil python, byl z toho zpusobu prace nadseny. Staticke metody v objektovem pristupu ala python vlastne prilis nedavaji smysl.
@ded.kenedy: Schvalne si to nekdy vyzkousej. To, ze nekoho neco nenaucis, neznamena, ze to nebude pouzivat.
[45] Existuje nejaka ucebnice, ktera by ucila C++ vami popsanym modernim zpusobem, bez nutnosti znat pointery a chapat spravu pameti? (Treba i s pouzitim knihovny Boost.)
Fakt me to zajima - koupil bych si ji. Ale pokud takova neni, zustava to jen peknou teoretickou myslenkou a C++ stale tezkym jazykem na nauceni, obzvlast pro zacatecniky.
>> Kdo učí C++ stylem C, učí blbě, a je to chyba vyučujícího, ne jazyka.
Já vždy žil v domnění, že C++ v podstatě naroubovalo objekty na nízkoúrovňové C a bez znalostí C nemá smysl pokračovat na C++. C vzniklo z důvodu, aby se nemuselo programovat v assembleru a kód byl přenositelný. Myslel jsem, že záměrem C++ bylo zachoval výkon a jazyk rozšířit o OOP. Další citace sice z wiki, ale snad pravdivé.
Starší verze jazyka, společně označované jako „C with Classes“ (česky C s třídami), byly používány od roku 1980. Jméno C++ vymyslel Rick Mascitti v létě 1983.
Koncepce objektů jazyka C++ byla převzata z jazyka Simula 67. Objekty (třídy) jsou pojaty jako přirozené rozšíření datových struktur jazyka C o možnost vkládání členských funkcí. C++ umožňuje řídit viditelnost složek objektů pro ostatní části programu.
[46] neni, jen za predpokladu, ze zacatecnikum nereknes o asi 70-80% vlastnosti C++, coz me osobne tedy pripadne velmi nefer a v dusledku i kontraproduktivni. To skutecne radeji Luu nebo i nejaky rozumny BASIC, tam si nebude profak honit triko s vetami "ale toto vam nereknu, to je pro vas (vy .....) moooc slozite".
@JS Neznat a nepoužívat je trochu rozdíl. Poslední kniha od Stroustrupa je asi vhodným příkladem, i když Herb Sutter se tomu na svém blogu věnoval také a tam to je zadarmo a mnohem kratší. Nejlepší na tom je, že to není teorii. Doteď jsem měl za to, že to je dokonce celkem samozřejmé a intuitivní. Každopádně to stojí za naučení.
@Nemo7: Učíte se ze špatných knih. Opravdu ne každá kniha kterou oslavují davy je vhodná pro začátečníky. Začátečník by měl v C++ řešit jiné úlohy. Nejprve používat existující objekty (STL, whatever již připraveného) a následně se učit psát své vlastní a dynamická alokace později. Takový zápis INeco &x pořád není správa paměti, reference není ukazatel (i když je tak implementovaná), atd.
Hlavně proboha. Od C k C++ je pro lidi, co už umí C. Začátečník, který neumí nic, tohle nepochopí.
@Nemo7 C++ 80. let a to dnešní jsou dva různé světy. Z toho konec konců pramení i všechny předsudky. Problémem asi je, že všechny nebezpečné konstrukce v C++ (logicky) zůstaly, takže kdo tam píše jako v C, má zaděláno na problém. Právě proto to chce učit C++ od začátku moderním stylem.
Podle mého názoru, začátečník hlavně nemá začínat hned s C++. :-) To je klasický jazyk, ke kterému se má postupně dopracovat přes nějaký jednodušší výukový. Stejný nesmysl je začínat programovat třeba v Perlu.
Souhlasím tak plně s názorem [50], protože přece výhoda C++ je právě ta nízkoúrovňovost. Pokud nechci nízkoúrovňově programovat, zvolím něco vyššího - například Javu, C#. A mám to pořád i s C syntaxí. :-)
Zopakuji : [50] ... zacatecnikum nereknes o asi 70-80% vlastnosti C++, coz me osobne tedy pripadne velmi nefer a v dusledku i kontraproduktivni. To skutecne radeji Luu nebo i nejaky rozumny BASIC, tam si nebude profak honit triko s vetami "ale toto vam nereknu, to je pro vas (vy .....) moooc slozite".
[51] Ale to je prave ono - proc to toho zacatecnika musite ucit, kdyz to nema pouzivat? To mu bude plest hlavu jeste vic. Zacatecnik se ma soustredit na rozklad ulohy tak, aby ji pocitac porozumel, a ne na technicke detaily jako spravu pameti nebo tridy.
Ja vim, ze je to z vasi pozice tezke videt, protoze to delate dlouho a prijde vam to prirozene. Jenze neni. (Stejne tak si nemyslim, ze nejde s C++ zacit; akorat je to zbytecne trmaciva cesta, a bude trvat dlouho, nez bude clovek schopen delat nejakou realnou uzitecnou praci.)
Ktereho Stroustrupa? Mam doma 3. vydani C++. A taky STL od Josuttise. Koupil jsem si je pred mozna tremi lety. Ale ani jedna z nich neni odpovedi na moji otazku. (A pochybuji, pokud Stroustrup vydal 4. vydani, ze bude odpovedi - leda ze by to uplne cele od zakladu prepsal.)
[52] Pro vas plati totez - doporucte dobrou knihu! Nevidel jsem knihu, ktera by systematicky ucila to, co zastanci C++ povazuji za "moderni" C++. (Coz je IMHO minimalne podle standardu C++11, takze neni divu, ze nejspis zatim neexistuji.)
[54] Těch 70-80% vlastností C++ jim nejen neřeknu, ale taky nepoužívám.
[55] Rád bych doporučil, ale nevím. Já se učil programovat v paskalu. Bylo to pěkně napsaný, jak se ta kniha jmenovala nevím, ale byla černá a měla na sobě vzor kroužků. Normálně se tam vysvětlily pole, podmínky, cykly, struktury, algoritmy řazení a třídění a nakonec dynamické struktury s alokací a spojové seznamy. Podobně organizovanou bych očekával knihu o C++. Objekty bych strčil někam za struktury a před alokací.
[55] Stejne tak si nemyslim, ze nejde s C++ zacit; akorat je to zbytecne trmaciva cesta, a bude trvat dlouho, nez bude clovek schopen delat nejakou realnou uzitecnou praci.
Spíš to začátečník vzdá s tím, že programování pro něj vůbec není(i když by na programování měl). Vzpomínám si, na své začátky v kroužku výpočetní techniky. Chvíli BASIC na osmibitech a pak Pascal na PC. Hlavní byla radost, že program vůbec fungoval a člověk dokázal něco sesmolit. Když mi programy fungovaly a šlo mi je psát, tak mě programování celkem zákonitě začalo bavit. Tím jsem v něm pokračoval dál a teď mě živí. Po nějaké pěkné chybové hlášce kompilátoru C++ hned začátcích bych asi programování vzdal. :)
Jenom mozna abych to vyjasnil, proc se Stroustrup nekvalifikuje - neprosazuje zadny konkretni styl psani v C++, uci ho tak, jak je. Ta kniha, kterou hledam, bude zakonite kontroverzni, protoze bude muset explicitne odmitnout ty nebezpecne vlastnosti. (A taky bude, jak uz jsem zminil, patrne pokryvat velkou cast STL a Boost knihoven. Asi stejne jako knihy o Jave nejsou jen o jazyce, ale z vetsi casti o knihovnich funkcich.)
[57] Tak to uz je pak jenom dusledek. Znam lidi, co zacinali na C++, takze, da se to. (Ale nedelali OOP, a o vsech tech pokrocilych vlastnostech si mohli nechat leda zdat, psal se rok cca 1994 a mezi kompilatory C++ panoval znacny chaos..)
Tohle ale spis souvisi s tou kulturou, jak uz jsem psal, kdy se z programovani dela zalezitost pro "prave muze", kteri museji umet 20 jazyku a assembler. Pritom to neni pravda.
Správa paměti: je to strašně triviální, to musí pochopit každý. Tedy aspoň doufám...
http://www.stroustrup.com/bs_faq2.html#memory-leaks
Tím by diskuze o paměti v C++ mohla skončit. Chápu, že lidi neradi přiznávají, že se mýlili, jenže tady už není co dodat. Najděte si jiný předsudek.
[62] Správa paměti: je to strašně triviální.
... zvlášť pro začátečníka, který se učí programovat a dělá mu potíže představit si třídění Buble Sortem a pořádně nechápe rozdíl mezi parametrem předaným odkazem a hodnotou. :) Pak tomuto začátečníkovi můžete ve "velmi vhodném výukovém jazyku" C++ jako bonus začít ještě vysvětlovat rozdíl mezi pointerem a referencí.
[62] Tento skvost jsem taky nasel, ale myslel jsem, ze je to omyl. Je to ukazkovy priklad toho, proc C++ opravdu pro zacatecnika ne. U tak banalniho kodu clovek musi zbytecne vysvetlovat:
1) Proc u cin/cout jsou pouzity (znasilneny) operatory <<a>>? Proc se nepouziva volani metod jako u vseho ostatniho?
2) Co vlastne vraci v.begin() a v.end()?
3) Jak vlastne funguje ten iterator? Co dela ++p? Co kdyz by to bylo p++?
4) Proc je prvek vraceny pres *p?
5) K cemu je vlastne to typedef a co to dela uprostred funkce, kdyz obvykle se to pise do hlavickoveho souboru?
[65] Některé důvody, kvůli kterým STL nepoužívám. Tím bych ale C++ nezatracoval.
1) Ty operátory používám taky, ale ve stylu print("Ahoj %1") << jmeno; (tzv feed operátor) - on je to vlastn2 jediný způsob, jak poslat nějakému objektu/funkci libovolné množství argumentů.
2) Nevím proč to tak je udělaný, ale je to pochopitelně blbost. Já používám:
XXX::Iterator iter = foo.getIterator();
while(iter.hasItems()) {
X bar = iter.getNext(); ...
}
3) Autoři téhle koncepce měli představu, že by existující programy, kde se používá iterování přes ukazatele zobecnili a z ukazatele udělali iterátor. Proto se iterátor chová jako ukazatel
4) dtto. Problém je v tom, že to je chybná úvaha. Měli naopak zvolit formu, kdy to jako ukazatel vypadat nebude a tím zbavit průměrnou programátorskou komunitu nutnosti učit se ukazatele.
5) Typedef uprostřed není problém. Hodně často to používám zvlášť u šablon, kdy je pro mě lepší nějaké šílené konstrukci vyplývající z použití šablon dát jednoduché jméno. Je to prostě alias k danému typu.
K bodům 1-4... taky jsem psal,buď STL, nebo nějakou výukovou knihovnu. Jako že jsou tu lidi, kteří na STL nedají dopustit, ale já osobně to považuju za disaster v normě C++ a každému doporučuju se tomu vyhnout (v praxi, teoreticky se vyplatí to znát). Další otázkou je, co tedy použít místo STL, tady vám neodpovím
Poznámka na okraj. C++ není STL. STL je jedna z milionů knihoven v C++ a její jedinou výsadou je, že je součástí C++ normy. Nahlížejte na ní jako na cosi co by se dalo přirovnat k nářadí, které dostanete přibalené k nábytku pořízeného v Ikea. Ten nábytek s tím postavíte, ale rozhodně nedoporučuju to používat v profesionální dílně.
este sa skuste vyjadrit k [65] ;-)
pointa nie je v pichani syntaktickych hnid, ale v tom, co som naznacoval hned na zaciatku: potrebujete metodiku ucenia a podporne materialy: haskellisti maju lyah, lispaci maju sicp, ceski a slovenski cckari maju herouta, javaci maju eckela. existuje nieco take pre c++? [a nasledne: uci sa niekde c++ ako prvy jazyk? urcite ano]
je fajn, ked na stroustrupa poviete "toto je pekny priklad, ale da sa komplet prepisat", ale to zaciatocnikovi pride ako sada nahodnych pismen (a la ucenie c, a ludia, co dumaju, kedy ide * pred a kedy za symbol).
castokrat potrebujete vychovat nielen ludi, ale aj dalsich ucitelov, lebo v programovani sa guerilla ucenim velmi dlho vydrzat neda (opat ten moj priklad s filozofim)
Pokud jsou to žáci ZŠ, tak první krok bych viděl na „škola hrou“ - Scratch.
Na střední škole bych se kvůli principům Scheme nebál, tady se pochopí abstrakce v plné šíři.
Osobně bych volil Python, má hodně strmou křivku pochopení.
Někdo tu nahazoval, že Pascal není dost cool. Původně také koncipovaný pro výuku, ale evoluce do Object Pascalu z něj udělala velmi mocný nástroj. Jako IDE bych dnes volil „Open Source Delphi“, neboli Lazarus (nad FreePascalem). Dají se v něm psát i běžné aplikace, pokud vývojáři nevadí upovídanost Pascalu. Za výhodu považuji, že nutí mít poměrně velký pořádek ve zdrojových kódech (ano, často jde vidět v jiných jazycích, že program psal bývalý Pascalista).
[68] Já mám jen obavu s ostatních jazyků následující. Hodně jazyků je spíš módou. Nedávno se weby dělali v PHP a umět PHP bylo něco extra. Dneska, kdy to umí kdejaký blbec, co sotva dokončil základní školní docházku je možná fajn se PHP učit, ale rozhodně s tím díru do světa neudělám. To samé jiné jazyky. Některé jazyky podléhají zastarání jakmile je hlavní maintainer přestane maintainovat. Tady mám obavu zejména o C# ale také o dalším směřování Javy. Jazyky jako Python, Ruby atd, přestože je dobré o nich něco vědět, tak si nemyslím, že by měli patřit jako stěžejní prvek do jazykového portfolia. Ale tím neříkám, že by byly špatné a jsou firmy, které programátory v Pythonu rádi přijmou.
Mezi královské disciplíny jednoznačně patří C++. Ten kdo umí C++ se snadno naučí i Javu (a může se třeba vrhnout na Androidy), nebo se naučí ObjC. Zvládne i programova v C, i když si tam bude připadat, jako by mu někdo uříznul prsty na rukou.
Jazyky typu smalltalk, lisp, prolog bych nechal pro fajnšmekry. Jazyky basic a pascal bych zase přenechal tam, kde se učí základy algoritmů, a tam by měli zůstat.
Podle mě by se měl jako první vyučovat assembler (ne pentiácký, stačí 8080, 8051 či Z80), je primitivní, takže se na tom člověk naučí nejvíc - už jenom proto, že v něm funguje cokoliv, byť ne třeba podle představ autora - ale o tom je učení se programovat - naučit se hledat, proč dotyčný program nefunguje, nebo funguje jinak, než autor zamýšlel.
Uznávám, není to strukturované, není to objektové, člověk si musí všechno ošetřovat sám. Ale naučí se dávat si pozor na všechny ty věci, které za něj u vyšších jazyků hlídá kompiler.
[67] Mnohem lepší způsob, jak předat funkci libovolný počet argumentů, než přetežování operátorů, jsou variadic templates. Pro zacatecnika bude urcite pochopitelnější zápis:
cout("Vysledek je:", vysledek);
než
cout << "Vysledek je:" << vysledek;
Je to ale nová věc v C++11, takže STL to moc nepodporuje.
Rozdíl mezi C++ včera a dnes je podobný jako u ObjC. Když jsem v ObjC psal poprvé, nemělo ani výjimky a spoustu dalších věcí, bez kterých se dnes nikdo neobejde. Zrovna "výjimky" se ošetřovaly makry preprocesoru pomocí setjmp/longjmp. A tak dále. Analogicky stejný algoritmus v C++ před 20 lety a dnes se napíše zcela jinak. V menší míře to platí i pro Javu, C# apod. U C++ je hezké, že lze začít s jednoduchými programy a postupně se učit další konstrukce a postupy, to vše ve rámci jednoho jazyka.
Myslím, že tato publikace i přes relativní stáří má stále něco do sebe:
http://zxm.speccy.cz/files/down/Bitydobytu.pdf
Popisuje tam i tu Z80 jak tu někdo navrhoval.
Ale chci se zdejších odborníků zeptat, nejni lepší kombinace třeba Python a C než celé C++? Výpočetně náročné věci udělat v C, zbytek programu včetně objektového návrhu v Pythonu?
Klidne bych zacal vyuku Pascalem. Nejprve uplne zaklady jako podminky, cykly ... . Pak zlehka objekty a hned od zacatku bych pouzival Lazarus - http://lazarus.freepascal.org/. Program s trochou snahy pujde kompilovat pod Win/Linuxem/MacOS X. Obsahuje krasny debugger, doplnovani kodu a hromady dalsich veci.
Mam v nem udelany jeden takovy projekt, ktery vyvyjim uz asi 7 let. Obsahuje skoro 80 oken a asi 76k radku zdrojaku.
[75] Tahle kniha je spíš manuál k procesoru než učebnice programování. V té době to začátečník potřeboval aby mohl vůbec něco naprogramovat. V současné době bych začal na daleko vyšší úrovni. Proč začátečníkovi vysvětlovat DMA, když ho k tomu OS stejně nepustí. Až dokáže z disku načíst a seřadit pár čísel, může jít do hloubky a rozebírat co se děje uvnitř. Neříkám že programátor nepotřebuje vědět, co se děje v železe, ale začínat by s tím neměl. Má cenu si to přečíst ale ne jako první nebo druhou knihu.
Python+C vs C++ je těžká otázka, protože záleží na spoustě věcí. Bez konkrétního problému na který se to má použít tu moc dobrých rad nedostaneš.
[76] To je legracni, na te knizce (Bity do bytu) jsem se s tatou zacinal ucit assembler, kdyz mi bylo asi 12. Takze, nejen ze je to dobra knizka (i kdyz - ty o assembleru od Proximy jsou v mnoha smerech uzitecnejsi, ale prisly bohuzel dost pozde), ale i assemblerem (a BASICem, coz by jediny jazyk, co jsem tehdy znal) se da zacit a cloveka to nezkazi.
Ale dnes je jina doba. Tehdy byl assembler jediny zpusob, jak neco zajimaveho na Spektru udelat. To dnes uz neplati, a je IMHO lepsi, kdyz si decka hraji v necem vyssim. (Krome toho - kdo dnes pouziva Z80?)
Na Slovensku momentálne existuje silná tendencia migrovať stredoškolákov na Lazarus. Predovšetkým mnoho učiteľov dobre ovláda starý Pascal a Lazarus vyzeral ako prirodzený krok, minimálne preto, že staré Delphi boli skvelé a osvedčené prostredie.
Pri vzdelávaní učiteľov to tiež veľmi dobre odsýpalo, dalo sa bez problémov začať s jedným oknom, doňho hodiť kresliacu plochu a dlhú dobu sa dalo zabávať s úlohami korytnačieho typu -- kreslenie útvarov, vyfarbovanie a podobne.
Problémy som zažil v momentoch, keď ľudia začali omylom prepisovať veci, ktoré nemali. Aj keď na začiatku editujete jediný súbor (formulárový zdroják), vidíte v ňom priveľa vecí, ktoré sa dajú nechtiac pokaziť (pasáže interface a implementation), a stávalo sa, že projekt sa rozsypal natoľko, že bolo treba kompletné znovuvytvorenie.
Boli aj pokusy vyučovať OOP, a celkom sa to darilo, ale úprimne povedané, vytváranie vlastných tried, dedičnosť a spol. sú poplatné dobe vzniku a na úvod extrémne ťažkopádne -- stačí porovnať triedy v ObjectPascale s pythoňáckymi, alebo javáckymi.
Na druhej strane existuje silný tlak na vytváranie materiálov, učebníc a úloh, čo vie vykryť aj zmienené nedostatky.
Mimochodom, u nás na fakulte (PF UPJŠ) sa do prvého ročníka zvolila Java. Polovica prvého semestra je venovaná korytnačej grafike -- ľudia programujú nad špeciálnou knižnicou, ktorá reprezentuje korytnačiu grafiku a teda na tradičných útvarových a kresliacich úlohách vedia pochopiť procedurálneho programovania (prakticky ide o filozofiu Loga so syntaxou Javy). Ktosi vyššie spomínal BlueJ: čiastky filozofie sú prebraté do onej knižnice.
Po druhej polovici odchádza korytnačka do úzadia a prechádza sa na OOP a všetky jeho piliere. Existujúce algoritmy sa ešte neriešia: radostne sa využívajú polotovary z knižnice Javy: kolekcie, triedi sa zabudovanými javáckymi metódami, pretože filozofia je zameraná na to, aby ľudia vedeli používať existujúce veci a naučili sa uvažovať algoritmicky.
To všetko je podopreté materiálmi (existuje wiki s prednáškami http://web.ics.upjs.sk/paz1a/Prednasky/Prednasky), kopou domácich úloch, a dohromady 7 vyučovacími hodinami programovania týždenne.
Druhý semester sa venuje zase algoritmickým veciam: rieši sa rekurzia, tradičné triedenia, dátové štruktúry spolu s filozofiou za nimi (v 1. semestri sa povie "máme ArrayList a používame ho, v 2. sa povie, čo sa deje vzadu), backtracky, dynamické programovania a podobné pokročilé veci.
Kolegovia to nastavili tak, aby na vstupe mohol byť študent, ktorý absolútne neprogramoval a na výstupe, ak sa kontinuálne venuje, človek, s ktorým sa dá bez problémov ďalej pracovať. (Zo stredných škôl totiž prichádza veľmi pestrá paleta maturantov.)
Jazyk C sa učí až v druhom ročníku, v treťom semestri (keď sa už dá stavať na mnohých znalostiach a často sa zlieza "o úroveň hlbšie").
[62] Tohle má opravdu být úkazka toho jak se dá v C++ jednoduše programovat? Představím-li si začátečníka, tak tenhle kousek kódu je spíš noční můra. Podobné věci se dělají různě (něco někam nacpat je jednou << jiny volání metody). Proto abych mohl projít nějakou množinu dat, tak definuju nový datový typ, ta smyčka je rébus (pro začatečníka) sám o sobě - v.begin() a v.end() vypadají podobně, tak jaktože jedno z toho obsahuje platná data a druhé ne? (berte jako řecnickou otázku) *p je krásná ukázka toho, že i u takle primitivního kódu musím v C++ přemýšlet nad tím, jestli proměnná je obsahuje přímo data nebo na ně jen odkazuje. Vyhnout se tomu dá jen za cenu další syntaktické akrobacie. Myslím, že by bylo výrazně snažší vysvětlit začátečníkovi, že když zavolá malloc, tak musí zavolat i free, než všech syntaktické finesy v téhle ukázce. Tedy je to hezká ukázka toho, že se v C++ dá psát tak, že není potřeba explictině řešit správu paměti, ale v nejmenším mě to nepřesvěčilo, že C++ je vhodný pro začátečníky.
[80] Co píšeš o OOP v souvislosti s Pascalem je důvod, proč bych Pascal na výuku nebral. Pascal byl oblíben asi hlavně proto, že Boarland pro něj vytvořil RAD. Ale GUI návrháře má dnes kdejaké IDE. Krom toho to nepovažuji za to nejdůležitější. Algoritmizace se dá vyučovat i na moderních jazycích. Nevidím v tom problém. C, Java i to C++ nejni tak těžké, když se to uchopí za správný konec.
Proč se zabývat zastaralou Z80? Myslím, že je snažší na pochopení, pro ty, kdo chtějí vědět jak to funguje a zároveň se nebudou živit programováním v ASM. Konec konců, tu odkazovanou publikaci jsem ani nemyslel pro úplné začátečníky.
Před nedávnem jsem si udělal kurz (teď asi zboj obrátí oči v sloup :-)) programování mikrokontrolérů pomocí C. Samozřejmě, že takové kurzy lze brát jen jako nakopnutí. Ale vůbec mi to nepřišlo těžké. A to už nejsem nejmladší (30 mám za sebou). Chvílema jsem sice nestíhal psát (bohužel nevládnu všemi deseti) jak to do nás hustili. Ale bylo to hutný, zajímavý, žádný zbytečný plkání okolo. Do té doby jsem byl jen samouk (Java, Python).
[85] - definuj prosim pojem "moderni jazyk"; prakticky vsechny vyse jmenovane uz s nami jsou minimalne jednu generaci programatoru. Pascal ma skutecne svoje nedostatky (a hodne, trosku to bylo opraveno v Object Pascalu), ovsem v porovnani s tim doporucovanym C++ bych i pres veskere vyhrady byl pro Pascal, kdyby nebyl jiny vyber, jako ze bohudik je (Lua!). A duvod? ten je jednoduchy - chybejici znak nebo nejaky typo v C++ znamena nekolik obrazovek nesmyslnych chybovych hlasek, coz zacatecnika dokonale odradi, nebot vubec nebude vedet, kam sahnout. V tomto je Pascal diky mnohem jednodussi gramatice a relativne snazsimu zotaveni lepsi.
ještě doplním [75] - (nejenom)podle mě je využití dvou či třech úrovní naprosto nejlepší cesta k dobré aplikaci, pokud se tedy nejedná o jednoduché aplikace typu "Hello world". Klasickým příkladem je Unix - ten má ABI (nižší úroveň) i shell (vyšší úroveň) nebo mnohé hry co jsou třeba v assembleru, C a v Lua. A prakticky všechny EE aplikace také používají minimálně dva, ale mnohdy i více jazyků, včetně DSL.
Ovšem DSL a tyto specialitky, to už asi není téma "prvního jazyka" :-)
Jakožto amatér, co si nicméně už pár jazyky prošel (Basic, C/C++, Java, PHP, ...) bych asi v dnešní době začal Scratchem, jelikož je to takový víceméně moderní názorný basic (oproti basicu však strukturou více připomíná dnešní jazyky), na kterém lze snadno ukázat základní principy bez nutnosti řešit syntaxi, ani cokoliv jiného.
Poté bych asi podle toho, jak to daný člověk myslí vážně šel buď do Pythonu, jakožto cesty nejmenšího odporu k funkční aplikaci, nebo zde zmíněnému z počátku osekanému C++, které při použití současných knihoven (Qt) je v praxi možné taktéž používat velice efektivně a bez nutnosti neustále řešit železo. Výhodou C++/Qt je na druhou stranu fakt, že ve chvíli, kdy se z výkonnostních či výukových účelů je potřeba dostat na železo, nejedná se o cestu příliš složitou.
Co mě dokáže fascinovat je, když u nás ve škole někdo přijde se složitým numerickým výpočtem zbastleným v Matlabu a pak tím několik měsíců škvaří velkej výpočetní server, když by to v nějakém rozumném C/C++ mohlo běhat mnohem rychleji.
[85] Pascal bol naozaj obľúbený preto, že mal skvelé IDE a najmä didakticky poňatý jazyk s minimom implementačných vecí. Väčšina chýb, ktoré začiatočníci robili, boli syntaktické (a to odchytilo IDE), alebo výslovne logické. Nečudo, že na Slovensku za ním existuje azda aj 15 rokov tradičnej výučby na stredných školách.
V Lazaruse sa na to nadstavilo a mnoho starých príkladov sa dalo priamo zrecyklovať: akurát, že namiesto čítania z konzoly sa urobili textové políčka vo formulári.
U nás na fakulte sa presne ukázalo, že výučba nie je taká ťažká, ak sa uchopí za správny koniec: ten úvod sa preklenul korytnačou grafikou.
A to jsem zrovna předevčírem nadával, že na praktickém bakalářském oboru Podnikové Informační Systémy se základy programování učí v DrScheme, což je defakto dialekt Lispu. Programovat jsem uměl už před DrSchemem a neměl jsem pocit, že by někdo z těch, kdo to v kurzu předtím neuměli se to na DrScheme naučil.
Lisp je jazyk mocný, mě se líbí, o tom žádná. Ale pokud někdo přijde z gymplu, kde se s PC naučil maximálně tak zvýrazňovat text ve Wordu, nejsem si jist, zda se jedná o správný jazyk k pochopení toho co je algoritmus a jak se sestavuje.
Jako první jazyk musí být jednoznačně assembler spolu s výukou HW. Pokud nechápu jak program funguje na nejnižší úrovni, nejsem schopen psát efektivně ve vyšších jazycích. Dle Komenského hesla od jednoduchého ke složitějšímu, bych navrhoval assembler -> C -> C++. S tím si každý vystačí a další jazyky už se bude učit raz dva. A že nemá C++ standardně GUI? Ideální úloha si nějaké vytvořit.
MJ uz o tom nieco pisal, v tomto sa s nim stotoznujem
http://mj.ucw.cz/papers/proglang.ps
[93] Jako první jazyk musí být jednoznačně assembler spolu s výukou HW. Pokud nechápu jak program funguje na nejnižší úrovni, nejsem schopen psát efektivně ve vyšších jazycích.
To právě není úplně pravda. I pokud chápu jak program funguje na nejnižší úrovni a nechápu aspoň trochu vyčíslitelnost a složitost, tak můžu psát algoritmicky velice neefektivní kód. Na programování se totiž dá pohlížet víc jako na matematickou disciplínu(a upozadit HW), nebo začít od HW(jak navrhujete). Myslím, že každý přístup má své výhody a nevýhody.
[93] Sakra, další Radovan, jak mám teď poznat co jsem psal já! :-D
Ale když assembler, tak úplně od základů, pěkně od Analytical Engine a Ady Lovelace: http://en.wikipedia.org/wiki/File:PunchedCardsAnalyticalEngine.jpg
srsly, ono dnes niekto vobec niekedy zacal od assembleru ako prveho jazyka?
ano, bity do bytu maju krasny styl, ale dnes, ked uz neasmuje nik a menit sa to nebude (kde su tie casy transport tycoonu...), fakt nerozumiem dovodom. navyse, cim vyssie, tym viac sa meni vyznam "efektivity": na spodku je to o performance, na vrchu o udrzovatelnosti a citatelnosti
zacinajuci kuchar sa tiez nezacne venovat chemickym procesom pri vareni, ale s vajcami na tvrdo, cestovinami z morcadellou a postupom casu sa zlepsuje smerom nadol ku vlastnym kreaciam.
Zásadní otázka, od níž by se mělo odvíjet vše ostatní: Budeme vychovávat budoucí programátory (nejlépe takové, co píší jádro OS), nebo lidi, co budou potřebovat tu a tam něco spočítat pomocí samodělného programu?
V prvním případě asi C, případně C++, případně i assembler (minimálně aby měli představu, co překladač provede s jejich kódem).
Ve druhém případě asi python, klidně ale i perl (byť umožňuje prasečiny), nicméně umožňuje jednoduché věci dělat jednoduše. Nepotřebuji např. chci-li spočítat počet výskytu uvozovek v textu, vyrábět nějaké objekty a mořit se s jejich nelogickou a nesmyslnou syntaxí. Faktem je, že celé OOP je o boji s nesmyslnou a nelogickou syntací, která jen překáží zavést do programu nějaké logické konstrukce, a většinu práce s programem zabere obcházení omezení s ním spojených.
Já začínal na různých dialektech Basicu na osmibitech a posléze q-basicu v MS-DOS, pak jsem přešel právě na perl, k tomu jsem přibral jazyk metapostu (na generování vektorové grafiky a k tomu syntaktickjy podobný jazyk TeXových skriptů) a ImageMagicku (na bitmapovou grafiku) a něco málo jsem přičichl k pythonu (hlavně na uživatelský interface). Javu jsem zkusil a opustil právě pro nekvalitní dokumentaci a nesmyslná omezení plynoucí z OOP, případně z číselných typů (navíc dalším rozvojem přišla o původní hlavní výhodu - meziplatformobou přenositelnost).
[99] Faktem je, že celé OOP je o boji s nesmyslnou a nelogickou syntací, která jen překáží zavést do programu nějaké logické konstrukce, a většinu práce s programem zabere obcházení omezení s ním spojených.
S tím bych si dovolil nesouhlasit, ve složitějším(a hlavně delším) projektu je OOP k nezaplacení. Stejně jako při navrhování knihoven. Díky OOP se daleko lépe organizuje kód, tak nějak sám od sebe. :-) Samozřejmě na jednoduchou utilitku je OOP "kanón na vrabce", tam stačí nějaký skriptovací jazyk.
[92] Tohle mi pripomnelo tu slavnou Stallmanovu historku, jak si sekretarky vesele programovaly v Emacsu, akorat se jim nesmelo rict, ze je to programovani, jinak by to prestaly delat.
Zacatecnici resi jine problemy. Zadna podivna syntaxe jim nevadi. Naopak prilis mnoho konceptu najednou a technikalit ano.
Jeste take existuje zajimava detska knizka The Land of Lisp.
tiez nechapem, preco na zaciatku oddelime deti na "vy budete programatori, tak vas radime do teamu c, a vy budete sviatocni vyvojari, tak vas do teamu p(ython)?" ved to mozu zacinat spolu a potom sa vyprofilovat.
samozrejme, oop nema velky zmysel v pripade programov rozsahu shellskriptov ci awk (aj ked powershell!), lebo 2/3 kodu budu ceremonie, ale to neznamena, ze to je blud. nastastie, dnes su dva svety, kde si veterani programovania mozu sediet v c a oop radostne ignorovat (alebo nan hadzat siru a popol), a svet enterprajsov, kde oop je radostne pouzivany standard
to s emacsom je krasne: pripomina mi to presne tie basicoviny na atari (neexistovali procedury, len gosuby, neexistovali cykly ine nez for, datove typy boli podivne a aha, kolko ludi sa na tom vychovalo), len vzdy treba porozmyslat, ci to treba robit aj o 20 rokov neskor tymto sposobom
ten tlol vyzera!
Ad OOP - je to o pochopení principů. Když někdo něco označuje jako "nelogické", zpravidla tomu nerozumí. Smysl má u nějakého projektu říct, že použít X pro řešení Y je nelogické. Obecně se OOP hodí ve většině případů, důležitý je nějaký dobře navržený objektový základ, na němž se staví (STL, Cocoa...). U velkých projektů se pro některé části (stochastické výpočty, inference...) nabízí specializované moduly.
"Faktem je, že celé OOP je o boji s nesmyslnou a nelogickou syntací, která jen překáží zavést do programu nějaké logické konstrukce, a většinu práce s programem zabere obcházení omezení s ním spojených."
V případě větších projektů OOP naopak přehlednost zvyšuje(jak už bylo řečeno) a v mnohých případech je výhodné hlavně kvůli celkovému konceptu, nehledě na velikost projektu - programovat třeba GUI bez OOP samozřejmě jde taky, ale je to neuvěřitelně nepraktické.
[101][104][105] ne že bych chtěl zatracovat OOP, ale možná by stálo za to zamyslet se, jestli by nebylo zajímavější a užitečnější do začátečníků napřed dostat základy funkcionálního programování, tj. buď Scheme (ale to je trošku akademické) nebo ještě lépe Clojure. Možná by z těch studentů nakonec mohli být lepší programátoři nezatížení špatnými návyky z imperativních jazyků...
Pěkně to shrnul Rich Hickey (on má vůbec docela provokativní myšlenky :-), viz:
http://wiki.jvmlangsummit.com/images/a/ab/HickeyJVMSummit2009.pdf
http://codepad.org/eN7SjIoz
Ono dost záleží, kam se má dál směrovat specializace dotyčného. OOP bude dost k ničemu někomu, kdo chce dělat blízko železa atp. Např. na stavební fakultě ČVUT učili C++ a naprostá většina těch lidí neuvěřitelně trpěla a je mi jasné, že díky tomu se všemu, co zavání programováním, zdaleka vyhnou - možná naštěstí, protože ty výtvory by podle toho taky vypadaly. Taky na co pro ně C++, když se setkají spíše s Visual Basicem nebo LISPem?
Ovšem mohu z vlastní zkušenosti s výukou potvrdit, že zatím se mi ze všech jazyků pro dosud nevyhraněné začátečníky jako nejvíc průchozí zdá opravdu starý, dobrý Pascal. Ale taky dost záleží na věku. Dětem by asi mnohem víc sedlo Logo nebo Smalltalk, Smalltalk jsem používal taky na kursech OOP na VŠ - je opravdu velice názorný a neznám lepší jazyk na pochopení OOP.
Z Pascalu se dá dál pokračovat prakticky jakýmkoli směrem a s velmi dobrými návyky, ať už se půjde do OOP nebo spíše do C kvůli low-level vývoji nebo třeba na Fortran na některých technických a matematicko-fyzikálních školách, kdy dobré předchozí návyky jsou opravdu velmi důležité, ale i třeba funkcionálním směrem. Kolem Pascalu existuje taky obrovské množství kvalitní literatury jak v češtině, tak v angličtině, a to jak pokud jde o vlastní jazyk, tak třeba i jiné obory, jako numerika, grafika atp., kde dané algoritmy jsou konkrétně ukázány v Pascalu. Což se bohužel o jiných, "módních" jazycích zdaleka nedá říct, protože kompetentní k psaní se dnes cítí kde kdo a často pak píše neuvěřitelné hlouposti. Takže kvalita literatury je dnes opravdu objektivně nižší než dříve.
Samozřejmě, že to nikomu nevnucuji a sám třeba Pascal v praxi vůbec nepoužívám, ale neučil jsem kvůli svému potěšení ale aby to studenti pochopili bez zbytečných obtíží a měli i dostatek materiálů k samostudiu, protože každému přeci jen sedne trošku jiný styl výuky.
Někdo tu navrhoval učit od začátku základy objektového modelování i pomocí UML. Tady bych možná doporučil docela dobrou knihu - Základy objektově orientovaného návrhu v UML - Meilir Page Jones. Jinak podobný přístup bych řekl vyznává R. Pecinovský a právě proto jej mám rád.
[29] JSH - "Občas má cenu uvažovat třeba o poloze a barvě odděleně bez omezování se na objekt auto."
A v čem je problém? Krása OOP je v tom, že si to poskládám jak uznám za vhodné.
[93] Radovan - Tak assembler rozhodně nejni nejnižší úroveň. Správně by se mělo začít mechanickými počítadly, potom něco o elektřině, atomy, elektrony atd., pak přes relátka, tranzistory, hradla a klopné obvody ke složitějším zapojením až si každý sestaví svůj vlastní jednoduchý RISC procesor/kontrolér, ten bude programovat nejprve binárně, pak pro něj vymyslí assembler a napíše kompilátor. Pak ještě napíše kompilátor C, Clojure a dalších jazyků. Teprve potom z něj bude ten správný programátor.
Trošku mám obavy, aby než tím projde, neměl svá nejlepší léta za sebou...
Jako první by se mělo začít se strukturovaným programováním, což je dnes
asi C jako hodně rozšířený jazyk. OOP je nadstavba strukturovaného programování.
Kdo neumí pořádně napsat proceduru, tak tomu žádné třídy, šablony nepomohou.
A protože se vždy začíná od jednoduššího ke složitějšímu, tak i v C se dají
přeci psát procedury bez pointerů, inkrementací nebo bitových posuvů málem
stejně jako BASICU. Ostatní věci jako datové typy se každý musí naučit tak jako
tak.
[107] otazka je, ze v com ucit pascal dnes (hore sa spominal lazarus)
[109] mnohokrat sa da ucit strukturovane programovanie sucasne s oop. nie je nutne vyvalit hned na prvom kurze dedicnost a veci.
v c sa samozrejme priklady robit daju, len kym nepridu stringy, mozete robit akurat number crunching a char crunching (vid priklady od herouta)
[109] Nedají. V C bez ukazatelů ani nepředáte parametr referencí. Pastmi pro začátečníka jsou taky chybějící kontroly všeho možného - limitů polí, implicitní přetypování atd. Ten jazyk je zkrátka příliš nízkoúrovňový, předpokládá, že víte, co se děje pod ním, že když něco děláte, tak víte co a proč. Nejde o to, že by se v něm nedalo poměrně čistě programovat, jde o to, jak rychle bude začátečník otráven z toho, že mu něco nefunguje a on za boha nemůže přijít na to, proč. V Pascalu je člověk nucen k disciplině - ten jazyk ho tak nějak vede a hlídá před ním samotným. Zkušeného hackera to samozřejmě spíš otravuje, ale začátečníka to učí "správně myslet" - správně strukturovat, rozmyslet si povahu dat, s nimiž bude algoritmus pracovat, a podle něj správně navrhnout datové struktury, správně faktorizovat, protože některé hacky obvyklé v jiných jazycích mu jsou zatrhnuty. Dají se v něm velmi krásně a čistě implementovat všechny ty klasické algoritmické problémy, dá se v něm solidně louskat i matematika - prostě z tohoto hlediska je to pro studenta SŠ nebo VŠ velmi přímočaré a přístupné. Tohle nejsou jen nějaké mé osobní dojmy, to jsem odkoukal z reakcí studentů. Naposledy když se mnou konsultovala jedna kamarádka, co jí právě lili na VŠ do hlavy Javu, jsem si všímal, co jí vlastně dělá problémy, jak vymýšlí program a bylo jasně vidět, že bojuje s problémy, jež si pascalisti odbudou hned ze začátku, do toho navíc má hlavu zamotanou třídami a tím vším kolem...
Zkrátka pokud jde o mě, tak začátečníka bych asi seznamoval s Pascalem nebo Lispem, u něhož si taky dovedu představit, že by to mohlo být velmi stravitelné díky absenci všech těch různých obfuskujících syntaktických konstrukcí objektových jazyků. Mimochodem - to nebylo samoúčelné, že se tomu snažili i v ryze objektovém Smalltalku vyhnout, jak to jen šlo. Výhodou Lispu navíc je, že v rámci jednoho jazyka tam můžete ukázat i různá paradigmata - od procedurálního přes funkcionální a objektové klidně i logické, přístupy založené na datových proudech, atd.
Ovšem na C, C++ a Javu mám názor celkem jasný - to může v hlavách začátečníků napáchat více škody než užitku, ať se vyučující snaží sebe víc. Jak jsem řekl výše - podstatné není, jak čistě a rychle dokážete program napsat a odladit vy, ale student.
[110] My ho učili na starém Turbo Pascalu. Ale souhlasím, že něco současnějšího by bodlo víc.
[83] A proč neměl assembler být nejlepší pro výuku programování?
[98] jednočipaři na některých středních školách od assembleru začínají.
Na assembleru se člověk nejvíc naučí hledat chyby, protože v assembleru jich jde udělat opravdu hodně. Jedna z věcí, který se učí dost blbě, metodologie k tomu pořádná není. Takovej ten přístup k tomu, že člověk nehledá chybu v celým zdrojáku najednou, ale identifikuje kus, kde by mohl být problém a ověřuje, co ten kus doopravdy dělá, a pod. V assembleru si člověk musí vytvořit takové návyky, které vznik chyb omezí. Takové ty věci, které ve vyšších jazycích hlídá kompiler.
Dodnes jsem třeba nepřišel na to, proč poslední verze Wordu se na dnešních x GHz počítačích spouští snad ještě pomaleji než Word 8 na 486.
Je otázkou - na ke které úrovni programování přiřadíš chemické procesy při vaření? Na základě čeho jsi došel k tomu, že to odpovídá programování v assembleru? Co když to odpovídá třeba úrovni programování v C? Nebo znalosti hardvéru?
[114] ono ten prispevok znie nechcene ako uplna antireklama.
metodologia nie je! na kazdom rohu chyba! navyknite si robit veci, ktore inde robi kompilator! :-)
to na to treba ist inak.
argument "musis vediet, ake chemicke reakcie co je na spodku" funguje az neskor, nie na zaciatku. a je jedno, ci sa tym mysli "malloc" alebo asm instrukcie
a prekvapivo, u aplikacii typu word, co idu od roku 199x konstantne rychlo: "noone cares"
K pascalu bych řekl jen jedno, ukažte mi v dnešní době jediné použitelné IDE, které by bylo schopno vyprodukovat použitelnou GUI aplikaci. Když jsem se rozhodoval v čem se učit psát desktopové aplikace, pascal mi taktéž padl do oka, nicméně ve chvíli, kdy v Lazarusu použijete některé komponenty dohromady, tak vám zkompilovaná binárka háže segfault, aniž byste napsali jedinej řádek vlastního kódu. Navíc druhým problémem je fakt, že jazyk použitý v Lazarusu je už jakási moderní modifikace pascalu, ke které nelze sehnat moc dokumentace, jelikož většina knih je psaná pro dosovský turbo pascal.
[116] netbeans [java] chrli gui aplikacie. visual studio express tusim tiez
jazyk pouzity v lazaruse je objectpascal, pre novacikov plati vsetko, co platilo pre ten isty jazyk v borland delphi od 1997, ku ktoremu je tona knih
inak 64bitovy total commander premigroval ch. ghisler z delphi do lazarusu a ocividne mu to funguje (32bity kompiluje cez delphi 2)
neco hezkyho pro uplny newbiky na python jsem v ceskojazycnych koncinach moc nenasla, vsude uz byly vyzadovane pokrocilejsi znalosti, trebaze z jinych jazyku. Takze mi docela pomohl tenhle online kurz http://www.shallowsky.com/python/ .
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 35 994×
Přečteno 25 199×
Přečteno 23 664×
Přečteno 20 048×
Přečteno 17 383×