Portál AbcLinuxu, 30. dubna 2025 19:35
Protežovaný, má společné kořeny jako protekce, s tíhou nebo těžbou nemá nic společného.Tak tohle slovo slyším poprvé v životě. No ale asap to opravím ...
čím výš, tím lépe ... plus mínus súhlas.
bez znalosti ako funguje nižšia úroveň z vás nikdy nebude programátor. možno tak drevorubač, čo bude vedieť kliknúť sem a kliknúť tam (a nie tam, lebo mu ten múdry soft vynadá niečo o nesprávnych datových typoch).
len tak mimochodom, ako chcete bez procedurálnych blbostí ako podmienky alebo cykly písať vaše všemocné metódy?
Boolean
zprávu ifTrue
, nebo ifFalse
s argumentem blok kódu, který se má vykonat- viz řídící struktury ve Smalltalku Navíc pokud by člověk začínal s C, do krve se mu zaryje spousta procedurálních "zlozvyků" a zbytečně si hlavu zatíží spoustou nízkoúrovňových "blbostí" (myšleno s nadsázkou). Lepší je prostě začít rovnou na vysokoúrovňovém objektově orientovaném jazyku, toť můj názor. Nízkoúrovňový jazyk se člověk může (když ho nutně potřebuje/chce umět) doučit později.Zlozvyků jako třeba že paměť je po použití potřeba uvolnit, proměnné před použitím inicializovat apod. Je tu spousta lidí, kteří tvrdí, že je potřeba programovat vysokoúrovňově. Tak mi řekněte, jak ve vašem vysokoúrovňovém jazyce naprogramujete ovladač k HW. Nebo operační systém. Nebo realtime aplikaci. Z toho první dvě položky dost nutně potřebujete, jinak sice můžete krásně programovat ve Smalltalku, Javě nebo podobných, ale jaksi to nebudete mít na čem spusit. A doučit se nízkoúrovňový jazyk později je problematičtější, než opačně. V nízkoúrovňovém jazyce víte, co všechno je potřeba udělat a při přechodu výše akorát zjišťujete, co už udělat nemusíte, protože to někdo udělal za vás. Na druhou stranu bych chtěl vidět, za jak dlouho (pokud vůbec) by někdo, kdo dlouho programoval v jazyce, který poskytuje nějaký ekvivalent garbage collectoru, odladil program, aby v něm nebyly memory leaky.
cz.mojeDomena.superUzasnyProjekt.NejakaMojeTrida
Ve Smalltalku se psaly operační systémy, když neexistoval ještě ani MS-DOS a běžně se pro něj virtuální stroje píší v něm samém.
Asi jeden. Samozřejmě nechci popírat hegemonii C a Smalltalk bych jako první programovací jazyk doporučoval asi jen neprogramátorům. Chtěl jsem jen zpochybnit tvrzení, že to nejde.
Pár odkazů:
http://www.opencroquet.org/index.php/Main_Page
http://weblogs.media.mit.edu/llk/scratch/
http://wiki.laptop.org/go/Etoys
http://wiki.cs.uiuc.edu/VisualWorks/Commercial+projects+that+use+Smalltalk
"Z toho první dvě položky dost nutně potřebujete, jinak sice můžete krásně programovat ve Smalltalku, Javě nebo podobných, ale jaksi to nebudete mít na čem spusit."Vím, že jdu pozdě, ale jen jednu drobnost: Autorům Squeaku se právěže nechtělo psát virtuální stroj v křehkém Cčku, tak ho napsali ve Smalltalku.
z postupnosti pascal, c, c++, asm, shell, perl, lisp, prolog, java by som vyhodil pascal, c++ presunul k jave (s miernou preferenciou javy a uml) a perl presunul za prolog.
Nejdůležitější je, naučit se objektově myslet. OOP se dnes nevyhne žádný programátor a je velká škoda zatěžovat se procedurálními zlozvyky.Tyhle procedurální zlozvyky umožní člověku pochopit, jak takový program funguje. Člověk který začne rovnou Javou, nemá tušení, že program musí nějak začít, proměnné je třeba nějak inicializovat atd.
Objektový přístup je nejlepší si osvojit s "čistou hlavou" dokud člověk není zatížený rutinní prací nižších jazycích.Naopak - nejdřív je potřeba naučit se základy algoritmizace - podmínky, cykly, používání proměnných - bez zbytečného public static objektového balastu okolo - ten začátečníky jenom mate (viděl jsem spoustu lidí, kteří byli nuceni začít Javou - moc se nechytali) To souvisí i s předchozím odstavcem - když si člověk navykne, že překladač za něj automaticky inicializuje proměnné a JVM za běhu hlídá, aby si programátor nemohl nabít ústa; přechod na jazyk, který tohle nedělá, může působit značné potíže.
Tyhle procedurální zlozvyky umožní člověku pochopit, jak takový program funguje. Člověk který začne rovnou Javou, nemá tušení, že program musí nějak začít, proměnné je třeba nějak inicializovat atd.V javě začne program zavoláním statické metody main nějaké třídy. Je na tom snad něco špatného?
Naopak - nejdřív je potřeba naučit se základy algoritmizace - podmínky, cykly, používání proměnných.Podmínky a cykly jsou samozřejnou součástí jakéhokoli programování včetně OOP. To se prostě musí naučit každý, ani v OOP o ně člověk nebude ochuzen.
Viděl jsem spoustu lidí, kteří byli nuceni začít Javou - moc se nechytali.Proto jsem tam taky psal, že je vhodné, když tě ze začátku někdo vede a neučíš se to sám. Pochopit objektový přístup dá trochu práce (dneska mi to připadá úplně přirozené, ale na začátku jsem taky divně koukal na nějaké třídy, když jsem si chtěl vypsat jen "Hello world"), ale je potřeba se to naučit hned na začátku
To souvisí i s předchozím odstavcem - když si člověk navykne, že překladač za něj automaticky inicializuje proměnné a JVM za běhu hlídá, aby si programátor nemohl nabít ústa; přechod na jazyk, který tohle nedělá, může působit značné potíže.V tom je právě ten vtip: když přecházíš z vyššího jazyka na nižší, tak zjišťuješ, co všechno musíš a protože musíš, protože jinak by se ti to nepřeložilo, tak se to prostě doučíš. Ale když přecházíš z nižšího jazyka na vyšší, tak nevíš, co všechno nemusíš, co za tebe udělá jazyk/překladač, a proto to tam mastíš tak jak jsi byl zvyklý doteď. To jsou právě ty zlozvyky. Buď bys musel mít nějakého dobrého učitele, který by ti s přechodem na OOP pomohl nebo pozorně číst dobré knihy, ale každopádně je to víc práce, než při opačném postupu. A navíc, kdo říká, že budeš muset přecházet na nižší jazyky?
V javě začne program zavoláním statické metody main nějaké třídy. Je na tom snad něco špatného?Nezačne.
Proč jsi v té citaci vynechal tu část "bez zbytečného public static objektového balastu okolo - ten začátečníky jenom mate". Ta tam byla dost podstatná.Naopak - nejdřív je potřeba naučit se základy algoritmizace - podmínky, cykly, používání proměnných.Podmínky a cykly jsou samozřejnou součástí jakéhokoli programování včetně OOP. To se prostě musí naučit každý, ani v OOP o ně člověk nebude ochuzen.
Pochopit objektový přístup dá trochu práce, ale je potřeba se to naučit hned na začátkuNení - všechno, co jde udělat s objekty, jde udělat i bez nich.
když přecházíš z vyššího jazyka na nižší, tak zjišťuješ, co všechno musíš a protože musíš, protože jinak by se ti to nepřeložiloTo není pravda... když v programu v C vyřeším dealokaci takhle
velka_struktura_v_pameti_t *struktura; struktura = NULL;překladač to naprosto bez jediného varování přeloží. Když si neinicializuješ proměnnou, možná vyhodí varování, ale program taky přeloží.
Ale když přecházíš z nižšího jazyka na vyšší, tak nevíš, co všechno nemusíš, co za tebe udělá jazyk/překladač, a proto to tam mastíš tak jak jsi byl zvyklý doteď.Pokud přecházíš na vyšší jazyk, tak to děláš proto, aby ses ten jazyk naučil. Kdybys všechno dělal tak, jak jsi byl zvyklý doteď, je ten přechod naprosto zbytečný a není potřeba to vůbec dělat. A hlavní rozdíl - narozdíl od předchozí možnosti, když to namastíš tak, jak jsi byl zvyklý, ten program bude fungovat.
Buď bys musel mít nějakého dobrého učitele, který by ti s přechodem na OOP pomohl...Omyl - když člověk zná programování bez objektů, OOP pochopí snadno - z jeho hlediska je objekt jenom další datová struktura s tím rozdílem, že se do ní nehrabe přímo, ale pomocí metod třídy.
Proč jsi v té citaci vynechal tu část "bez zbytečného public static objektového balastu okolo - ten začátečníky jenom mate". Ta tam byla dost podstatná.
Public static balast má s objektovým programováním pramálo společného.
Nezačne.A čím jiným by asi začínal?
Proč jsi v té citaci vynechal tu část "bez zbytečného public static objektového balastu okolo - ten začátečníky jenom mate". Ta tam byla dost podstatná.Ty nevíš, k čemu to slouží, že to nazýváš balastem? Ono je to nemate o nic víc, než kdyby začínali s OOP až po osvojení se procedurálních základů. Takhle jen vstřebávají oboje současně a výhoda je v tom, že začnou rovnou v jazyce, ve kterém budou později pracovat, a hlavně se vyhnou těm zlozvykům.
co jde udělat s objekty, jde udělat i bez nich.Tím ale pouze potvrzuješ moje slova. Jasně, že můžeš namastit krásnou GUI aplikaci i procedurálně, ale jednak ti to zabere hodně času a jednak budeš psát jako prase i ve vyšších jazycích, nebudeš přirozeně využívat možností, které ti přinášejí.
Pokud přecházíš na vyšší jazyk, tak to děláš proto, aby ses ten jazyk naučil. Kdybys všechno dělal tak, jak jsi byl zvyklý doteď, je ten přechod naprosto zbytečný a není potřeba to vůbec dělat.Ale nebuď tak naivní, programátor bude spíš přecházet na nový jazyk, protože to po něm chtějí v práci, nebo proto, že se chce zapojit do projektu, který se dělá v jiném jazyce.
A hlavní rozdíl - narozdíl od předchozí možnosti, když to namastíš tak, jak jsi byl zvyklý, ten program bude fungovat.Fungovat sice ano, ale až dostane nějaký tvůj kolega za úkol k tomu přibastlit nějakou novou funkčnost, tak tě bude proklínat nebo ti to rovnou přijde omlátit o hlavu, protože jsi mu tím přidělal spoustu práce
Aha, no to jsou mi noviny. Takže nakonec se dozvím, že je super těžké naučit se OOP, ale if, switch, while, for a algoritmizace je levou zadní.Naučit se seřadit podmínky v IFu tak, aby se vyhodnocovaly co nejefektivněji, se můžeš naučit později. Prostě to ze začátku neřešíš, nepřemýšlíš nad tím a potom začneš a budeš to dělat líp a líp. Ale když se naučíš řešit složitější otázky procedurálně a pak přejdeš na OOP, tak už budeš zatížený těmi zlozvyky, ty víš, jak problém vyřešit procedurálně, a tudíž tě nic nenutí využívat výhod OOP natož myslet objektově. Jak už tady někdo psal, ty zlozvyky tě ovlivňují už ve fázi analýzy.
A že umět OOP = umět programovat, což je blbost na entou.Ale no tak, vždyť nejde o to, hádat se, kdo je větší guru. Někdo je machr v tom, že programuje ovladače zařízení a jádra operačního systému v nízkoúrovňovém jazyce, a druhý zase dokonale chápe objektový přístup a dokáže dělat geniální aplikace. Oba tihle programátoři jsou machři, ale jsou to dvě různé disciplíny, takže nemá cenu se hádat, kdo z nich je lepší.
"Jestli někdo pomalu ani neví, co je třída, nebo dědičnost a jen tak tam něco namastí, tak tím přidělává práci programátorům, kteří mají navázat na jeho práci, oni se budou prát s jeho zprasenou architekturou."Mnohem větší problémy těm programátorům způsobí tehdy, nebude-li vědět, co je to abstrakce a modularita. Dědičnost a třídní objektový model jsou jen konkrétní - a to velmi rigidní a omezené! - prostředky, jak abstrakce a modularity dosáhnout. Mnohem lepší je umět abstrahovat a modularizovat obecně.
To bych zrovna netvrdila - unixove prostredi je spjate s obycejnym C a jeste dlouho to tak zustane.To nízkoúrovňové každopádně, ale psát v tom GUI nebo enterprise aplikace, to by mě asi jeblo
nie, nevieš, o čom točíš. nečítal si všetok kód po iných ľuďoch, čítal si len po tých, čo ho vylepšovať nemôžu ... neodišli náhodou z firmy?
čitateľný kód je záležitosťou disciplíny a schopností. Príklad: perl. Zlé jazyky o ńom vravia, že je nečitateľný ... ale napr z CPAN modulov, mnou používaných, 90% je pochopiteľných na prvé prečítanie, ((zámeno)to).concat (WhiteSpace.SPACE).concat (((sloveso)je).negate()).concat ((trademark)Java))
Doporučil bych Javu nebo nějaký objektově orientovaný jazyk.No, s tou Javou (a jí podobným jazykům) bych si tak jistý nebyl. Kamarád měl první kurz programování v minulém semestru právě v Javě a jediné, co dělali, bylo, že se patlali ve specifikách jazyka, algoritmy žádné. I když nevím, jak přesně to na VŠB chodí - syntaxi Javy bych snad zvládnul za pár hodin a že by tam bylo tolik speciálních záležitostí, které by byly nějak náročné na zvládnutí, to teda nevím... tak či onak, mi jazyky podobného typu nepřijdou na učení se programování (tj. učení se algoritmům) zrovna vhodné - algoritmům je úplně jedno, v čem je naimplementuju, je důležité pouze to, že jim porozumím. Ztrácet čas babráním se v kurzech algoritmizace v samotném jazyce mi přijde hloupé. Jak už jsem psal v předešlé diskusi - stojím si za jazyky stejně jednoduchými na naučení jako je Pascal. Nemám ho sice moc rád, ale líbí se mi, že sám o sobě prakticky nic neumí, dá se celý vysvětlit za pár hodin a je snadno čitelný. Ponechám stranou rozšířené a zavedené omyly jako že je v něm těžší prasit (by me zajímalo, kdo tohle první vyslovil
Není to jednoduchá otázka. Možná něco vizuálně laděného jako Scratch.
Třeba by ideální cesta byla nějaký podobný "dětský" jazyk následovaný paralelní výukou velmi jednoduchého didaktického Assembleru (podobného Z80), nějakého funkcionálního jazyka (Haskell/Scheme) a nějakého objektového jazyka s inkrementálním prostředím. Pak by se člověk asi mohl snadno naučit pracovat s dalšími jazyky a byl by méně náchylný na přenášení zlozvyků.
Občas mám pocit, že skutečně programovat jsem se naučil až ve Smalltalku
Nejsem si jist, jestli něco takového jako dětský jazyk lze správně udělat - všechny, co jsem zatím viděl, byly úplně nanic
Najít něco rozumného je opravdu problém. Ale jako krátce používaná hračka třeba pro pochopení základních řídících struktur to může být užitečné.
ale velmi se mi líbí myšlenka začít assemblerem a funkcionálním prostředím, ale pokračoval bych nejdřív aspoň zhruba procedurálně a pak teprve objekty. Jinak, podle mého názoru objektové programování má stejnou nezdravou přitažlivost jako procedurální, nebo jako jakákoli jiná šablona myšlení. Člověk v ní může uváznout a pak ji bez přemýšlení napasuje na všechno, ať už se to hodí nebo ne. Kolik už jsem viděl programů doprasených k nepoznání jen proto, že autor neuměl použít jiné paradigma než třída-objekt-instance-metoda.
Základy procedurálního programování člověk pochytí i v tom Assembleru. On bude obrovský rozdíl mezi tím, když se člověk naučí procedurální jazyk a pak na něm bude stavět OOP, nebo když začne třeba Selfem. Hlavní přednost bych ale viděl v tom, že se naučí orientovat v obrovském a přitom v základech velmi jednoduchém a logickém systému, odpoutá se špagetových zdrojáků, bude nucen více číst a orientovat se v kódu jiných než sám psát vlastní apod. To jsou dovednosti k nezaplacení.
Jedině FORTRAN 68
Nejlépe na EC 1010 nebo Tesla 200
Kdybych si mohl vybrat dnes, tak jdu do Pythonu a Lisp/Scheme.
Jinak mým prvním jazykem, vyjma malinkých základů BASICu na Sinclairu, byl Forth a Assembler na tomtéž počítači. Teprve později jsem přišel na Pascal a Fortran, v Pascalu dodnes udržuji a dále rozvíjím pojekty, které mají dohromady cca 250 000 řádek. C/C++ a další jazyky se nebalovaly teprve kolem přelomu tisíciletí.
Trochu hardcore bych možná někomu doporučil, aby se naučil myslet Scheme a aby se naučil pracovat na hodně nízké úrovni, tak Forth (proti tomu je C/C++ hodně vysokoúrovňový jazyk ).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.