24 komentářů k článku Nebezpečí Java škol:

  1. Eda

    Chybka
    Ahoj. Díky za článek :-)

    Jen si neodpustím své obvyklé upozornění na nějakou drobnost:
    „…obvykle je to mezi 40 % and 70 %.“

  2. Radek Miček

    Java je dost složitá – právě proto některé školy začínají Scheme nebo Standard ML. A (otevřená) rekurze je základní stavební kámen OOP, mnoho lidí si to však neuvědomuje.

  3. karel

    Lol, java je jednoduchá jako každý programovací jazyk.
    Stejně tak Lisp, Scheme sou moc pěkné jazyky, a je dobré si je aspoň jednou za život vyzkoušet.
    Já třeba miluju python a je to asi důvod proč sem strašlovou dobu nechápal co maj všici s closure a tak, než sem pochopil, že všichni co o tom tak básní jsou vlastně java bastliči. Sorry ale tydle věci má třeba python odjakživa, to že mi funkce může vrátit funkci, že si odkaz na funkci dam do proměné atd… to jsou věci se kterými jsem se učil programovat a tak dnešní výkřiky jak je closure krokem do budoucnosti nějak nechápu. Jinak javascript je další jazyk co tydle věci vždy měl.
    Abych doplnil proč sem to pochopil, dostal jsem zakázku upravit a dodělat jeden program co byl v jave no tak sem se během týdne který jsem na to dostal naučil javu. Ano jistě neznám všechny základní knihovny, ale to nepovažuji za znalost jazyka. Znalost jazyka je pro mě naučit se jak v něm psát a porozumět jeho filozofii, to jakou knihovnu mam na co použít si vždy dohledám. A ne neprogramuji tak pomalu, protože programátor má víc času přemýšlet než zběsile něco psát.
    Stejně tak je podle mě dobré hodně zapomínat, protože to člověka nutí vždy si dostudovat aktuální trendy a ne leta letoucí reciklovat obskurdní kód.

    Já vim učit se nové věci bolí. Tak se neučte, nepřemýšlejte a jděte si zas vklidu bastlit formulář za formulářem, jak vás to naučily, ale prosím neříkejte si programátor.

    1. Jiří Knesl

      Re:
      Předpokládám, že myslíte Clojure.

      Nevím, kde jste vzal něco o bastličích. Vývojáři v Clojure, které znám, patří k těm nejchytřejším a nejlepším vývojářům, které jsem potkal.

      A rozhodně ta výhoda není v tom, že můžu mít funkci, která vrátí funkci. To je jen drobná část skládačky. Když se ale složí řada těch věcí, která tam je, jako STM, homoikonicita, funkcionální přístup, persistentní datové struktury, možnosti paralelního programování, dostanete se k tomu, co konkrétně na Clj lidem vyhovuje. A dostanete věci, které v Pythonu nejsou (některé ano, ale třeba to STM nebo persistentní dat.struktury tam nejsou a bez nich je paralelní programování mnohem těžší). Takže ano, proti Pythonu je Clojure krokem do budoucnosti.

      1. Igor Hlina

        Re:
        Myslim, ze myslel closure vo vyzname lexikalny uzaver. Alebo inymi slovami, ze funkcia je 1st class citizen (je mozne ju predat ako argument, je mozne ju vratit ako navratovu hodnotu). S programovacim jazykom Clojure to nema nic spolocne.

        1. Pavel Tišnovský

          Re:
          To ovšem nestačí, protože koncept uzávěrů vyžaduje další vlastnosti jazyka. Resp. takto – je docela dost jazyků, které uzávěry nepodporují, ale funkce tam jsou first class objekty. Javisti jsou asi nadšeni hlavně z anonymních funkcí, protože ty tam skutečně strašně dlouhou dobu chyběly a obezličky přes implementace anonymních tříd (=specifikace rozhraní + přímá implementace metod z rozhraní) je dost hnusná, hlavně po syntaktické stránce (sémanticky taky :-)

          1. Ladislav Thon

            Re:
            No, a přitom ten lexikální uzávěr udělá anonymní třída taky. Takže můžeš říct, že Java má closures od verze 1.1, z čehož některé asi trefí šlak :-)

            1. Pavel Tišnovský

              Re:
              To neřeknu :-), protože právě Java má stejný problém jako další jazyky – tím že máš lokální proměnné na zásobníkovém rámci, nejde je jednoduše ponechat pro pozdější použití v uzávěru. Právě proto je tam ta rastrikce na final proměnné a různé obezličky (typu final reference na měnitelný objekt atd. atd.). Nicméně máš pravdu v tom, že vnitřní třídy (výše jsem omylem napsal že anonymní, většinou tedy jsou i anonymní) se uzávěrům hodně podobají.

              1. Ladislav Thon

                Re:
                Já bych to klidně řekl, protože z lokální proměnné na zásobníku uděláš snadno referenci na heap tím, že ji zabalíš do jednoprvkového pole. Je to hack, ale viděl jsem to kdesi v java.util.concurrent použité i pro předávání parametrů odkazem, takže se tomu dá říct idiom :-)

  4. filip.jirsak

    I v Javě jsou obtížné věci

    Nejlepší na tom je, že na Javě není nic tak obtížného, abyste na tom
    mohli vyhazovat programátory, kterým chybí ta část mozku, která zvládá
    pointery a rekurzi.

    Myslím, že i v Javě se najdou podobně obtížné věci. Třeba memory model (paměťové bariéry apod.) – oblíbený příklad byl, jak v Javě správně napsat singleton. Dokonce bych řekl, že je to ještě obtížnější, protože pointery i rekurze je jeden koncept, memory model je propojení několika konceptů. Ostatně v Javě se dá pracovat i s pointery i s rekurzí.

    Takže rozdíl je spíš v tom, že v Javě lze napsat spoustu kódu, aniž by programátor musel pointery nebo rekurzi znát. To opravdu není bug, ale feature. Problém je tedy spíš v tom, že potřebujeme nějak odlišit ty Java programátory, kteří pointerům a rekurzi nerozumí, od těch, kteří tu potřebnou část mozku mají. Potřebujeme je nějak odlišit v inzerátech a na pohovorech, ale potřebujeme je také nějak odlišit na školách, aby si samotný student byl vědom toho, zda příslušnou část mozku má nebo nemá. (To, že jí nemá, není žádná ostuda, nejspíš má zase jiné části mozku, které zase chybí ostatním.)

  5. Karl

    Inu trh potřebuje jak ty nejlepší, tak i ty průměrné, možná i podprůměrné, tak si to holt zaměstnavatel bude muset roztřídit sám, tak jak je to často i v jiných oborech.

  6. osamc

    teorie pevné řádové čárky
    Takato vec neexistuje.
    Fixed point theory by sa dalo prelozit ako teoria pevneho bodu (veci typu kazdy monotonny funkcional ma pevny bod).

  7. okep

    Neni to tak uplne pravda
    Predem se priznavam, ze clanek jsem proletl.

    Rozhodne neplati implikace, ze kdo si prosel ve skole lambda kalkulem a funkcionalnim programovanim, tak je automaticky programatorska hvezda. A neplati ani opacna implikace.

    Dale je treba rozlisova typ programatora. Napriklat koporatni prostredi si vyzaduje uplne jine kvality, nez prostredi nejakeho maleho startupu.

    Prekvapive uspedny programator ve startupu, muze byt dost neuspesny v korporatnim prostredi. Korporatni software se sklada z velkeho mnozstvi jednoduchych problemu, ktere ve vysledku prestavuji neuveritelne komplexni system. Tyto bodchovanci lambda kalkulu a pointru jsou schopni vysetrit maly velmi komplexni problem, ale u vetsiho systemu byvaji ztraceni. Neumeji, nebo nechteji resit sisri souvislosti.

    Tj. kdyz mi prijde nekdo na pohovor, tak to ze absolvoval nejaky narocny kurz matematiky nebo programovani, muj pohled na nej nemeni.

    Dale neni pravda, ze Perlista, Ceckar, clojurista se nauci Javu, za tejden. Jedna vec je znat jazyk, druha vec je, naucit se ho pouzivat. Pamuju si, nepral bych vam videt Javovy kod napsany programotorem odchovanym ANSI C. Stejne tak je nekdy zazitek cist JavaScript kond napsany Javistou.

    Po me je u programatora dulezite:
    1) zakladni programatorske znalosti, obcas se stava ze programator se stredoskolskym vzdelanim znovuobjevuje kolo.
    2) Peclivost, programator musi premejslet nad kodem, nad knihovnama ktere vola a nad tim co se jeho kod zpusobuje v prostredi kde bezi. Tohle je bouzel nesvar Javy, peclivi programatori se odnauci nad kodem premyslet.Je to taky nesvar knihoven, ktere se snazi odstinit programatora od low-level problemu (Hibernate).
    3) Schopnost pochopeni high-level abstrakci a konceptu. Irituje me, kdyz programator neumi problem rozdelit do skatulek. Jeho kod je pak jedna velka hromada balastu. Tohle opravdu delaji i kluci co neco vystudovali.
    4) musi se chtit ucit a pracovat na sobe

    Ja osobne mam lepsi zkusenosti z klukama z FEL nez MFF (sorry jestli to ctete ;) ).

    O

  8. geek

    C++ je C++
    Já za sebe můžu říct, že mě baví C a C++, hlavně tedy C++. Nevím, jestli je to tím, že jsem na něm začínal nebo můj mozek podvědomě vyhodnocuje Javu podobně, jako ji lichotí tento článek a protože jsem tak trochu antisocioální geek, tak mám rád C++.

    Protože ale realita je taková, že Java je velice žádaná a asi i lépe placená, tak se věnuji hlavně ji (tedy studiu různých frameworků). Druhým důvodem je, že také lehce pochybuji o svoji inteligenci (rozhodně bych asi neporozumněl rekurzivnímu algoritmu během sekundy a nenapsal bych algoritmus pracujicí se seznamem cca stejně rychle, jako když píšu na papír, což mě moje sebevědomí ještě víc nahlodalo :)) a na C++ bych si pak v produkčním mohl hodně rychle vylámat zuby a být odejít.

    Takže sklopit hlavu a šrotit Java frameworky.

  9. xxar3s

    Pointery a FP
    pointery nie su zlozite naopak, princip je jednoduchy, problem pointerov je ze umoznuju prasit vo velkom style.

    no a FP mi nepride zlozite, naopak FP je castokrat priamociarejsie jednoduchsie a pochopitelnejsie ako imperativny pristup. Nanestastie mnohi programatori zdeformovani imperativnym pristupom maju problem zvyknut si na trosku iny sposob myslenia. Ale pre neprogramatora budu obidve paradigmy na naucenie rovnako komplikovane. Vyhoda rekurzie je ze velakrat zapis dost podstatne zjednodusuje.

  10. Ivan Nový

    O funkcionálním přístupu mi nic neříkejte,
    podívejte se, co se za psí kusy dělají z Javascriptem, aby se z něho udělal použitelný jazyk, každý framework dělá to, aby ho té funkcionality zbavil a udělal z něho Javu. Konstrukce typu $(x).(function(){}) moc přínosná není. C++ zase není taky nic jiného než předělání C na Javu.

  11. Ivan Nový

    Výhoda funkcionálního programování spočívá v tom, že algoritmy lze dokazovat,
    jen je si třeba uvědomit, že například na důkazy některých matematických vět se čeká více než 100 let, což je z hlediska programování dost nepraktické :-)))

  12. donnie

    c vs java vs CS
    Obecne mi prijde mnohem vic CS (computer science) like kdyz je nastoleny obecny problem typu najdete chytry algoritmus detekce hran v datech, nebo efektivne filtrujte „nepotrebna“ data a nezlente co nejvic vzoru.

    Tohle je CS, proste ala Knut, ne to jeslti clovek zvlada pointery. By me ani ve snu nenapdlo znalosti pointeru neco „merit“, kdyz uz bych neco meril, tak bych si vybral obecny algoritmicky problemy a tam je mi totalne sumak cim to kdo napise, at to pise clovek klidne nejakym svym pseudokodem.

    Dalsi vec, zaklady OOP slozity nejsou, myslim ale ze u OOP se spis studuji design patterns, to je abstraknit dost, vic abstraktnjsi nez pointery mi prijde. A s tim ze Cckar umi hned javu … jo, jasne … ani teoreticky :/, proc ? Protoze OOP, pokud prejde cistej ceckar netrenovanej na OOP na javu, tak hadejte co vam z toho vznikne.

  13. aubi

    Proc si vsichni mysli, ze za vsechno muze Java?
    Kdysi jsem presel na Javu, protoze poskytla spoustu vyhod oproti C++. Skoro u kazde feature muzu rict priklad, kdy me Java usetrila nekolik tydnu (treba pouziti vyjimek bez memory leaku je peklo). Problem ale neni v Jave!

    Problem je v uceni. Dost casto se uci „cool“ veci — multimedia, web ap. Takze misto zakladu — algoritmy, efektivni struktury, principy, vice viz Effective Java nebo Clean code — se radsi uci frameworky nebo hotova reseni. Takovy je holt tlak headhunterskych firem, ktere nerozumi obsahu zadani. Radsi najmu kluka, kterej umi zaklady. Framework se snadno nauci. Nechci lidi, co umi frameworky, velmi casto jim chybi zaklady.

    Hrozne casto se setkavam s tim, ze lidi v praxi slepe nasleduji nejaka naucena pravidla, ale uz nevi, proc. „Protoze to tak ma proste byt, tak je to spravne.“ A to jde aspon o lidi, kteri ty pravidla znaji, taky je tady spousta lidi, kteri ani nevi, co maji delat, proste umi cist a psat, tak programuji. Zavidim vam vase problemy ;-)

    Mimochodem, zjistuji, ze spoustu veci chapu, protoze jsem delal kompilatory. Takze kazdej, kdo pouziva C++ a mysli si, ze rozumi pointerum, chape jen pulku, kdyz nevi, jak se muze stat, ze po prirazeni ukazatele (a = b;) muzu dostat pointer na jiny kus pameti (hint: vicenasobna dedicnost).

  14. Michal Zyka

    nechápu a nesouhlasím
    Je to celý jenom hádanice o ničem… pocházím z informatiky z VŠE, kde se jede Java stylem OOP first a nesouhlasím ani s jedním výrokem z článku týkajícím se OOP, ale to vem čert. Spíš mě zaráží, že se někdo do takových debat pořád pouští. Pro mě je měřítko schopnosti programátora stručný a jasný – jestli se umí (a chce) danej člověk učit a má přehled a širokej záběr. Přehledem myslím ne jenom technologie a ty věci, o jejichž důležitosti je tady vedená debata, ale přehled o všem s čím informační systémy souvisej, takže třeba o podniku, procesech, informacích atd. Moc si nedokážu představit, že bych někde dlouhodobě musel rubat na jedný platformě něco jenom proto, že to jsem se jednou naučil a tak u toho musim zůstat. Stačí mi otevřít internet a každou chvíli mě zaujme něco uplně novýho a zamýšlim/porovnávám případy užití všeho s čim přídu do kontaktu a nezavrhuju hned nějákej nástroj kvůli tomu, že jsem si někde přečetl nějakýho homo-alterno-debila jak se mu nelíběj syntaktický konstrukty toho či jinýho jazyka, když mi de přeci primárně o řešení konkrétního problému. Koneckonců, vždycky nakonec půjde o prachy a kdo si myslíte, že vygeneruje víc hodnot? Manager vývojáře s přehledem o okolí nebo krysa vývojář co vidí jenom dopředu? :-D

  15. petrph

    ježkovy voči, tak o tohle jde?
    Jo pár podobnejch článků už jsem četl, ale z těch plynulo že těm programátorům v Javě chyběj znalosti základních algoritmů (pokud je špatně učena), Ale aby se někdo pokoušel tvrdit že jsou od přírody hloupější než céčkaři, tak to ještě někde nikdo nenapsal-a upřímně se divím že něco takového vůbec mohlo v USA vyjít a nenásledovala hned lavina žalob.
    Jen tak pro připomenutí,už v době kdy dominoval jazyk C/C++ (což už je strašně dlouho) se používal vedle něj taky jistej jazyk Cobol- programovací jazyk pro ekonomické aplikace a kupodivu už ani v něm programátoři nemuseli umět práci s pointery ani nemuseli mít vysokou znalost abstrakce, „Stačila “ jim jen pečlivost při práci s dosti dlouhými (nikoliv složitými) datovými strukturami.
    Ono se zkrátka programování rozdělilo. i dneska je většina IT projektů ekonomického či ryze evidenčního charakteru na což je skoro i Javy škoda.Ale jestli chce někdo mermomocí vyvíjet operační systém, tak ať si ty geniální céčkaře sežene a zaplatí…

  16. Milos

    starsi
    Na mě je třeba znát, že jsem vyrostl na zpracování hromadných dat a ne např. na zpracování obrazu nebo hrách. Pointery jsem přičítal už v assembleru a PL/1, ale neustále mám roblém pracovat stylem rozděl a panuj, tak jak se to naučili lidi, co začínali v Pascalu. Dřiv v jazyku bylo všechno, dnes se javu naučíte za chvilku, vše ostatní je o knihovnách, praxi a pochopení a zažití filosofie jazyka.

    Na školách se jako CS nebo Základy programování nebo Algoritmy učí základy javy na třídících algoritmech a seznamech, abstraktní datové struktury atd. Podle mě je základem vyučování CS rozdělení problému. Na to byl dobry pascal a Karel. Neučí se metodika.

    také jse zjistil (a někteří vedoucí při pohovorech mi to potvrdili), že mladí programátoři se nechtějí zatěžovat problémovou doménou, jen věc udělat a JEN podle popisu a honem od toho. Jestli to je user friendly, jestli je neco napadne…. Proste udělat a na další.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=14989