...
Většina věci, které Vám generuje IDE je děláno tak aby je program mohl vytvořit, to jestli jsou 100% dobře, maximálně optimalizovaný jak rychlost, tak velikost je věc vedlejší, to je právě to o čem mluvím. Dnešní doba je fajn, každý mámě X GB a tak velikost programu je OK a nikdo ji neřeší, ale nepřijde Vám lepší napsat program, který je přehlednější, čitelnější, méně náročnější a menši než to, co by jste vygeneroval/vyklikal z IDE?
Treba v pripade tech generovanych parseru - ne, neprijde me to lepsi. V ramci bakalarky jsem si parser psal a kdyz jsem pak srovnal, jak trivialne, prehledne a i vykoneji to generaval tusim ten ANTLR, tak jsem byl zatracene prekvapeny. V ramci skoly budiz, napsat si neprilis vykonny, hure udrzovatelny parser s ne prilis chytrymi chybovymi hlaskami neni zase takovy problem. Ale ve vsem volnem case, pokud neni cilem naucit se psat parser? Nebo nedejboze v praci, kde by me za takove plytvani mohli i vyhodit? Citelnejsi to bude akorat pro autora custom parseru, ale pro dalsi vyvojare bude popis pro ANTLR urcite prehlednejsi. Custom reseni neni ani mene narocne a mensi netusim. Ale osobne resit par KB nebo MB, kdyz knihovny muzou mit desitky az stovky MB? Bikeshedding, nic jineho.
Priklad jednoduche gramatiky:
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')'
;
NEWLINE : [\r\n]+ ;
INT : [0-9]+ ;
Muzete si to zobrazit v klikatku, mit to zaintegrovane v IDE. Napr. takto ->
http://www.antlr.org/images/antlrdt-v4-plugin.png. Prepsat ten (asi jakykoliv) parser do kodu zabere urcite podstatne vice mista, nez ten predpis pro vygenerovani. Casove bude rucny parser o nekolid radu drazsi - precejen zkonvertovat gramatiku z dokumentace na predpi pro generator muze byt na hodinku, nebo den, vypiplat si vlastni parser se bude spise pocitat na tydny. Navic ten predpis pro vygenerovani je velmi intuitivni, na rozdil od implementace custom parseru, kde pokud nedodrzujete nejake predem stanovene konvence, tak budete dlouho bloudit, nez ho cely pochopite (myslim samozrejme netrivialni pripady).
Tak jako tak IDE musite stanovit strukturu, ve které chcete projekt vést, kde co bude uležené, jak se to má tahat (nemusíte, ale pokud si chcete být 100% jistý, stejně to uděláte) takže to, že mi to stáhne nějakou pro mě nelogickou strukturu projektu je prostě špatně.
Pokud sahate po spatnem seedu, je to vas problem. V pripade JavaScript sveta napr. pro Angular jsou guideliny pro strukturu projektu, pojmenovavani atp. Pokud chcete vynalezat po desate kolo... Pokud jde o one-man-show, write-only projekt, tak prosim, ale takove projekty nejsou v komercnim svete prilis bezne. Tam se naopak hezky postupuje podle doporuceni a best practises, pouzivaji se frameworky, ktere nabadaji, jak kod strukturovat a velmi ulehcuji orientaci v kodu, o to vic, kdyz prijdete k hotovemu.
Našeptávání, refaktoring, autocomplete mě osobně přijde, jako kdyby programátor nevěděl kde co v projektu má, jak se k tomu dostat, jak daný kód dokončit, nebo třeba našeptávání funkci (jak ta funkce vlastně má vypadat? Aha našeptávání mě poradí i včetně zápisu atd). K čemu tedy se člověk musí učit programovat, když tu je chytré IDE a dá se v něm vše naklapat? Nemusím si nic pamatovat, nemusím mít přehled v projektu, nemusím nic znát, IDE to vlatsně umí za mě. Pak mě napadá otázka, k čemu je takový programátor, který když posadíte před konzoli na webovém serveru, kde je spadlá webová aplikace aby jí opravil na Vás bude koukat a ptát se, jaké IDE má použít a kde ho najít?
Na Vaší poslední otázku si myslím je odpověd výše pochopitelná
Vy se zivite vyvojem? Takhle to muze fungovat u maleho skriptu na par stovek radku, tam asi i jeste udrzite cely mentalni model v hlave. Ale jak to jde do tisicu radku, tak budete vetsi a vetsi problemy a to i kdyz jste autorem toho kodu. V realnych pripadech je to ale vyjimecny stav, vetsinou se dela v tymu a cely projekt ma mnoho autoru. Ne, programator si nema pamatovat kompletni strukturu vsech modulu v projektu, parametry a chovani kazde funkce, vsechny cleny vsech trid atp. Nejen, ze je to v realnem svete nemozne, je to i silne neprakticke. Proc si vyhrazovat kazdy den hodiny na memorovani kodu, kdyz to v par vterinach zvladne IDE a me staci jen velmi hruby prehled o projektu?
K posledni casti - auto si asi nebudete opravovat lzickou, tak proc ocekavate od programatora, ze bude pracovat s nevhodnym nastrojem?
PS: Za takoveto vynalezani kola by me pravdepodobne vyhodili. To si nedovedu predstavit, ze bych dosel po tydnu prace za sefem a rekl, ze jsem se cely tyden placal s komponentou, kterou jsem mohl vzit z opensource knihovny a zaintegrovat za pul hodiny s lepsim vysledkem a usetrenym tydnem prace.
