Diskuze: Java rok 2016
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 50 zpráv z 163.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ne, nemá to ani ten nejmenší vliv, jak už jsem tu několikrát psal - je to čistě subjektivní pocit, neexistuje žádný objektivně lepší způsob, protože každému vyhovuje něco jiného. Tobě se líbí jak to má C#, mně se to tak nelíbí, ale plně chápu že tobě v tom případě přijde C# verze lepší, mně ne. Mně se líbí jak to má Java a já si myslím, že Javovský přístup je lepší, přehlednější a čitelnější. Ale je to opět jen a jen můj subjektivní pocit. Srovnávání jazyků na základě těchto vlastností je mimo.
Hovorí ti niečo SRP? Trieda, ktorá má 10 vlastností a ku každej getter/setter je buď dátová štruktúra alebo veľmi zle navrhnutá trieda.
by the way, keď máš k premennej getter aj setter môžeš ju nechať rovno public, čiže sa to zjednoduší na niečo takéto
foo.bar++;
a to je už veľmi podobné
tomu C#-like zápisu
K čemu bych něco takového psal? To tak u programování bývá, že se
píše kód
Deset vlastností byl jen příklad...
Ano strukturu číst umí, ale pořád ti ten kód zabere 4-5x víc řádků,
takže pokud třeba přidáváš někam další getter/setter, musíš se skrz
to proscrollovat, když to čteš jako něco, co psal někdo jiný, tak taky -
musíš se přes to proscrollovat...
a čo tak toto?
foo.addToBar(int value);
Takže když budu chtít hodnotu místo přičtení násobit, přidáš
další metodu? To čitelnosti moc nepomůže...
Ne, to není subjektivní pocit, prohrabávat se kódem třídy, která má 10 nebo 60 řádků je o něčem jiném, to není o pocitu.
Hovorí ti niečo SRP? Trieda, ktorá má 10 vlastností a ku každej getter/setter je buď dátová štruktúra alebo veľmi zle navrhnutá trieda.
Ty jsi akademik nebo student, co nezažil praxi, viď?
Ano, spousty těhlech myšlenek jsou hezký, ale v praxi to není tak
jednoduchý
Ne, nemá to ani ten nejmenší vliv, jak už jsem tu několikrát psal - je to čistě subjektivní pocit, neexistuje žádný objektivně lepší způsob, protože každému vyhovuje něco jiného. Tobě se líbí jak to má C#, mně se to tak nelíbí, ale plně chápu že tobě v tom případě přijde C# verze lepší, mně ne. Mně se líbí jak to má Java a já si myslím, že Javovský přístup je lepší, přehlednější a čitelnější
Jak může být Javovský přístup čitelnější a přehlednější, když
C# umožňuje obojí?
Srovnávání jazyků na základě těchto vlastností je mimo.
To je pravda jen z části, čitelnost a jednoduchost zápisu sice nepatří
mezi ty nejdůležitější vlastnosti jazyka, ale také patří
OT: Omlouvám se za spam, ale citace neumožňuje zobrazit autora (nebo aspoň nevím jak), tak je to takhle přehlednější.
Viem že v praxi to je iné, ale to neznamená, že sa prestanem snažiť robiť všetko najlepšie ako viem, áno zaujímam sa o agile development a vždy sa budem snažiť robiť veci správne, aj keď mi je jasné, že to nebude ľahké, ale to je už každého osobná vec. Každému sa páči niečo iné, každý preferuje iné zápisy, iný štýl a tým by som to uzavrel, nemá význam to ďalej riešiť, či sú lepšie gettery alebo vlastnosti.
Ako som písal, ak k tomu máš getter aj setter, môžeš to dať public a máš identické zápisy so C#.
No nejenom číst jde se v tom taky pohybovat jednoduše klikneš na nějakou metodu a eclipse se tam automaticky presune.
Ja by som sa este vyjadril k tomu prikladu Foo.Bar++
. Ak casto
zvysujem hodnotu tej vlastnosti o jedna, tak si myslim, ze sa to podoba na
nejaky counter. Ak je to counter, tak mi pride najcistejsie a prehladnejsie
riesenie vytvorit objekt counteru (alebo pouzit existujuci napr. https://docs.oracle.com/…Integer.html) a volat na nom
metodu increment();
.
Ale az tak casto sa mi nestava, ze by som potreboval incrementovat nejaky integer medzi viacerimi triedami. Skor mi to zavana nejakym zlym navrhom. Casto incrementujem iba nejake sukromne coutnery, ktore patria tej triede a okolie sa o ne nema zaujimat. A ak je to nejaka klucova vlastnost, mozno je dobre sa zamysliet nad tym, ako vytvorit mutatori s ohladom na to, ako ma byt ta vlastnost mutovana.
Ale cudujem sa, ze sa tu riesia take somariny ako gettery, settery, foreach a podobne hovadiny, ked podla mna su celkom podstate vyhody C# v tom, ze ma napriklad pretazovanie operatorov. Zas je ale dobre sa zamysliet, ci je to pretazovanie operatorov naozaj take podstatne pre jazyk ako je Java...
No ale Java ten C# přístup taky přece umožňuje. Prostě si nadefinuj
všechny atributy jako public a nemusíš se vůbec s nějakýmy gettery a
settery vůbec otravovat Heh a
když už v tom budeš tak si rovnou udělej všechny metody statické, abys
nemusel řešit předávání instancí mezi objekty, to ti taky ušetří
hromady práce
Samozřejmě že nejsou potřeba přetěžovatelné operátory, vlastně nejsou potřeba ani třídy a další vymoženosti. Můžeš rovnou psát v assembly jestli chceš. Všechny tyhle věci co zavádí vyšší jazyky tam jsou prostě pro usnadnění práce.
a čo iné ako "syntaktický cukor", ktorý môže viesť k veľkým chýbám a zlým interpretáciam, je preťažovanie operátorov...? "Operators don't always do what you expect them to do."
Já osobně zastávám názor, že moderní jazyky by měli ne jen dovolovat co největší svobodu v overloadingu operátorů ale i možnost definovat vlastní operátory. Programátor by měl mít svobodu, ale měl by také mít rozum ji využít moudře. Overloading prostě povoluje tvořit třídy, které se chovají jak to od nich očekáváš i bez použití zbytečných metod. Například takový vektor nebo komplexní číslo.
Súhlasím, že sú situácie, kedy sa preťaženie hodí. V C++ sa to hojne využíva, Java preťaževanie nemá a je to jeden z najpoužívanejšich jazykov, nech si každý spraví vlastný názor, či je to dobre alebo nie. Podľa mňa ak by to ozaj chýbalo a nedalo sa bez toho fungovať, tak by to tam už dávno pridali.
No, jako když jsme u toho bez čeho by se nedalo fungovat? K čemu vlastně
potřebujeme funkce, a třídy? Bez těch se přece obejdeme. A když jsme u
toho, nějaké cykly...bez těch bychom se koneckonců taky obešli.
Na druhou stranu, přetěžování operátorů - no jak často to
potřebujeme?
Tak do istej miery sa dajú uplatniť princípy OOP aj v C, alebo vo funkcionálnom jazyku. Skôr si je lepšie položiť otázku, bez čoho nemôžem rozumne programovať?
Bez počítače nemůžeme programovat protože se dá programovat i ve strojáku. Ale bez compu prostě programovat nejde.
Mno čistě teoreticky můžeš. Když na kus papíru napíšeš přesný
postup výroby něčeho a ten papír předáš dělníkovi, a ten podle tohoto
postupu vyrobí daný výrobek - právě jsi úspěšně naprogramoval dělníka
Imho nelze programovat akorát
bez mozku
Ale ten program nebyl nikdy uveden do provozu protože Babbge to comp nidky nepostavil.
No a? To přeci vůbec nevadí. Byla první programátor vůbec a dodnes z jejího díla čerpáme dodnes.
Pointa je v tom, že můžeš naprosto v pohodě programovat bez počítače.. Jestli ne, tak sorry, ale programátor vůbec nejsi.. A je bohužel smutná pravda, že existuje spousta "programátorů", co jsou bez IDE nebo možnosti si to přeložit a spustit, naprosto ztracení a nepoužitelní..
ja mam pocit, ze jsem nekde cetl, ze ve skutecnosti nebyla prvni
programator...ten jeji mentor ve skutecnosti napsal algoritmus daleko driv a ona
z nej prave cerpala...navic treba takovej Eukleides co ten chudak by na to rekl? ze
pro nas "pouhy" algoritmus neni dost eno nuno
napsat algoritmus != programovat..
Proč? Takový recept na bábovku je třeba dobrý příklad algoritmu Jsou všichni autoři kuchařek
programátoři?
Skoro vše můžeš popsat nějakým algoritmem (postupem).. To z tebe ovšem nedělá ještě programátora - programátor je někdo, kdo vytváří programy. Program je algoritmus zapsaný jako posloupnost instrukcí a je určen k vykonání počítačem.
To je sice pravda, ale kdy v situaci bez IDE nebo nedejbože počítače budeš psát kód?
Typicky na přijímacím pohovoru..
Nebo tě napadne něco někde mimo civilizaci nebo při cestování, tak si to napíšeš na papír..
Jinak mluvím z vlastní zkušenosti - dříve (střední škola) jsem byl na
IDE naprosto závislý.. Nepamatoval jsem si názvy funkcí a často ani jak
napsat některé konstrukce (snippety v IDE to vkládaly za mě). Jsem rád, že
jsem od toho upustil a dal si na rok zákaz jakýchkoliv našeptávačů.. Teď
je již vůbec nepotřebuji (ale ani mi nevadí, když je mám) a moje
efektivita se zlepšila - i při použití IDE. Osobně si myslím, že IDE je
dobré pro naprosté začátečníky a pak až pro zkušené programátory.
Začátečníkům to usnadní začátek - klikneš na zelenou šipečku a
spustí se to.. Zkušeným zase práci. Těm mezi bych naopak vřele doporučil
IDE zavrhnout, naučit se psát všemi deseti, pokud neumí a vyzkoušet si
překlad pomocí Makefilu a psát bez berliček - vryje se to mnohem lépe do
paměti
Na druhou stranu programování ve vyšších jazycích není moc dobře
možné bez IDE nebo alespoň editoru s našeptávačem, protože těch tříd a
funkcí je tam tolik, že zapamatovat si to fakt moc nejde
Nikdy jsem moc nechápal, k čemu to tam vše je, když ti teoreticky na vše
stačí AND, OR a NOT..
A pak chudák lokalita zdrojového kódu..
IDE je skvelá vec, napríklad potrebuješ urobiť úplne jednoduchú
refaktorizáciu (premenovanie triedy) v projekte ktorý má stovky súborov a
tá trieda je použitá na x miestach.. som zvedavý ako to v tom tovojom
editore spravíš ako čo sa
týka refaktorizácie sa žiadny editor nechytá.
je to tam na to aby si sa mohol sústrediť na svoju aplikáciu a nemusel vynaliezať koleso
No to nie je také jednoduché, tomu kódu to musí aj trošku rozumieť, čo keď premenuje, to čo nemal premenovať? a toto je len najednoduchší refaktoring, nejaké zložitejšie by sa ešte horšie robili. Proste na toto sú IDE skvelé.
Proč bych potřeboval dělat refaktorizaci? Mám ve zvyku se prvně zamyslet
a udělat si nějaký návrh, než začnu psát..
Ale neříkám, že IDE není dobré.. Proč si neusnadnit práci, když je ta možnost - jen říkám, že jeho používání často vytváří opravdu špatné návyky a pak spousta softwaru vypadá tak, jak vypadá..
No ja mám skôr pocit že veľa softweéru vyzerá tak ako vyzerá (krásny príklad Android) kvôli tomuto
Proč bych potřeboval dělat refaktorizaci?
Nie vážne na prvý pokus
sa ti málokedy podarí napísať poriadne kód, veľmi rýchlo zistíš, že
niečo by sa dalo presunúť do inej triedy, premenovať, hodiť to do inej
funkcie. Refaktorizácia je potrebná a to najmä vo veľkých projektoch, pri
domácich úlohách to je asi jedno
Tým nechcem povedať, že textové editory nie sú super, sám používam
gedit/notepad++ a aj vim trochu a teraz si predstav, akú produktivitu budeš
mať, keď máš v ruke vi skratky a začneš programovať v takej IntelliJIDEA
s IdeaVim pluginom.. To je
proste radosť pracovať s takou kombináciou.
Pokud to pak potřebuješ přepisovat, pak jsi zanedbal první a nejdůležitější krok - návrh.. Což je také jeden z hlavních důvodů selhání projektu (nedodržení termínu, funkcionality nebo vůbec nedokončení)..
Když dostaneš nápad/zadání a pár hodin potom už píšeš kód, tak je někde chyba a ten kód většinou nebude stát za nic (teď mluvíme o složitějších projektech).. V reálných projektech je implementace pouze malá část (10-20% času) a zdaleka nejvíc zabere testování a údržba.. Dobrý návrh minimalizuje problémy po implementaci.. Jenže spousta lidí nepřemýšlí dopředu a často dělají návrh během implementace (sedneš k PC, napíšeš si kostru třídy a pak si říkáš: "Tak jak bych to mohl udělat..?"). Takový přístup ovšem prakticky vždy vede ke špatnému návrhu a řešení, protože nepřemýšlíš nad celkem.
A to je rozdíl mezi programováním a softwarovým inženýrstvím. Před
začátkem implementace by měl existovat kompletní návrh celého systému a
všech jeho částí.. Pak nebudeš potřebovat dělat nějakou refaktorizaci a
narazíš jen na málo problémů..
V tom prípade si človek nevýdaných schopností, ak napíšeš dokonalý
kód na prvý pokus. To nevedia ani špičkoví svetoví programátori Nebudem sa ďalej hádať, sám na
to prídeš časom.
Přečti si to znova
A co říkám vychází nejen z mé zkušenosti, ale také ze zkušenosti tisíců profesionálů, kteří se na vzniku SW inženýrství podíleli. Mimochodem se o tom začalo mluvit právě proto, že vývoj trval dlouho a byl často neúspěšný.. Typicky zabere detailní návrh asi tak dvakrát více času než následná implementace - tam už ale moc problémů není, protože se na ně narazilo při tvorbě návrhu a byly vyřešeny.. A je to třeba právě kvůli nedokonalosti programátorů a také proto, že je typicky větší tým a je třeba prvně se domluvit..
V tomto sa mi páči agile prístup a TDD, ktoré ťa prirodzene vedieť k
správnemu návrhu, pretože testovateľný systém je aj dobre navrhnutý
systém. Cyklus red-green-refactor, ťa tiež núti udržovať svoj kód
čistý. Ono nerefektoruje sa preto lebo je to riziko, že niečo pokazíš, ale
akonáhle máš ku kódu testy, na ktoré sa môžeš spolahnúť, tak si
môžeš refaktorovať a vylepšovať koľko chceš s čistým svedomím. Som
zvedavý ako sa zaobídeš bez refaktorizácie a testovania, keď budeš musieť
pracovať s nie moc pekným kódom a niečo do neho pridať/zmeniť (veľmi
častá činnosť). Asi zvolíš prístup "Edit and pray" Málokedy budeš písať niečo od
základu.
Pokud to pak potřebuješ přepisovat, pak jsi zanedbal první a nejdůležitější krok - návrh.. Což je také jeden z hlavních důvodů selhání projektu (nedodržení termínu, funkcionality nebo vůbec nedokončení)..
To platí jen v ideálním prostředí = skoro nikdy. Musel bys na projektu pracovat sám a nesmí se ti měni zadání v průběhu práce...
Většina vývoje je udržování existujících projektů - klient se rozhodne přidat někde něco malýho, co třeba ve výsledku znamená přepsat i nějaké základní věci a nebo je to už delší dobu běžící projekt, ještě se zbytky starých technologií, které už nejsou podporovány apod.
A ani při návrhu se nevyhneš chybám, pokud je to nějaký rozsáhlejší projekt.
on je z vysoké školy evidentně zvyklí jen na ideální prostředí, kde jim zadají zadání a pak po nich chtějí řešení.
Zobrazeno 50 zpráv z 163.