Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: programatorek 24. 01. 2016, 23:18:56
-
Tak jsem tak projížděl nějaké repositáře na githubu a díval se do grafů a narazil jsem např. na 2,4 milionů řádků kódu commitnutých za pár let (od jednoho člověka). No vycházelo to denně na cca 1500 řádků kódu po dobu 5 let. Mě to přijde strašně moc. Dělám docela intenzivně na jednom projektu cca 2 měsíce a bez dokumentace a licence v každém souboru jsem na nějakých 11000 řádcích kódu. Jako 100% jsou lidi, kterým to jde od ruky asi víc než mě, ale takhle mám pocit, že jsem úplně zoufale pomalej :D.
Vím, že to nelze příliš zobecňovat a podle typu projektu může být třeba i 100 řádků denně dost, kvalitu projektu nelze posuzovat podle počtu řádků a navíc jeden řádek může mít třeba milión znaků, že :)). Ale ty extremy bych vynechal.
Kolik vyprodukujete za směnu v průměru řádků kódu vy?
-
Nezoufej, u mne je to obvykle v rozsahu od -1000 do +1000. Záleží na tom, jak se mi ten den daří a na čem zrovna dělám. Napsat 1000 řádek denně systematicky zvládá snad jen Radek Hulán.
V žádném případě to neříká nic o kvalitě kódu, takže můžeš být v klidu.
-
Maximálně 1000.
Ale asi taky záleží na tom, co a v čem programuješ. Jednoduché weby se píšou hrrr, v Javě za tebe půlku kódu vygeneruje IDE :), a pak jsou věci, nad kterými půl dne přemýšlíš, napíšeš funkci, a pak ji druhou půlku dne ladíš. (asi přeháním)
-
Po kolika rumech?
-
Velký počet řádků je spíš nevýhoda než výhoda – rozhodně to není nic, za čím by ses měl hnát. Miliony řádků nejsou nic záviděníhodného – je to velmi náročné (drahé) na údržbu a další rozvoj. Pokud je to kvalitní kód a dobře promyšlený návrh, tak se to dá, protože se nemusíš moc hrabat v minulosti a můžeš tomu kódu věřit a stavět na něm. Ale pokud by to byl milion řádků nedodělků a kódu nevalné kvality nebo i špatný návrh, tak je to vážně neštěstí, to už je lepší snad začít znovu než se v tom patlat.
Ideální je mít program tak o velikosti jednotek až desítek tisíc. V tom se i nový člověk zvládne v nějakém rozumném čase zorientovat. A i kdybys chtěl dělat nějaký větší refaktoring nebo překopat návrh, tak se to dá zvládnout celkem v pohodě.
Co se týče počtu řádků za den – těch 1500 může občas být, ale je to lehký kód, který nic moc nedělá – třeba datové struktury nebo rozhraní opsané z analýzy či standardu. Ale pokud ten kód něco dělá, tak jsou to spíš desítky až stovky řádků. Nebo se to dá líp měřit na třídy – za den uděláš jednu třídu + jednotkové testy (a na začátku si nastuduješ zadání). Zdá se to málo, ale výsledkem je kvalitní práce, která se dá považovat za hotovou – a ne nedodělek, ke kterému se budeš ještě pětkrát vracet. Při takovém stylu práce ti to testeři vrátí jen výjimečně a do produkce se chyby téměř nedostanou. Pokud nevyvíjíš nové věci, ale zrovna opravuješ chyby, tak za den napíšeš třeba jeden dva řádky – zbytek dne tu chybu hledáš. Nebo nenapíšeš ani řádek, protože zjistíš, že to chyba není nebo že chyba je někde jinde (prostředí, jiné systémy…). Taky můžeš strávit den analýzou a návrhem a nenapsat vůbec nic (resp. žádný kód).
Nedovedu si představit, že bych napsal 1500 řádků každý den. Nebyl to spíš někdo, kdo dělá revize a začleňuje kód napsaný jinými lidmi?
BTW: když jsem teď psal jeden program jen tak podle sebe víceméně bez zadání, tak to bylo cca tisíc řádků (jen kód, bez prázdných řádků míst a komentářů), ale to není úplně typické – většinou je potřeba víc přemýšlet a víc řešit zadání a návrh, než bouchat kód.
P.S. mluvím samozřejmě o ručně psaném kódu v programovacím jazyce, ne nějaké HTML srágory nebo vygenerovaný kód či konfiguráky ze šablony. A pokud jde o SQL, tak to sice programování je, ale když odsazuješ jako já, tak máš snadno stovky řádků, ale nedá se to srovnávat třeba se stovkami řádků v Javě.
-
Nedovedu si představit, že bych napsal 1500 řádků každý den. Nebyl to spíš někdo, kdo dělá revize a začleňuje kód napsaný jinými lidmi?
Taky mě to před chvílí napadlo, jestli to třeba nebyl někdo, kdo nějak začleňuje kód od více lidí.
Konkrétně projekt je to Torque3D (https://github.com/GarageGames/Torque3D/graphs/contributors).
Když jsem si rozkliknul commity od toho DavidWyand-GG, tak tam je hodne merge pull request, takže to asi bude ten případ :).
-
To je jako porovnávat zahradníky podle toho, který z nich použije při práci více vody a hnojiva.
Řádky kódy pouze naznačují komplexnost problému, který pak hotový projekt řeší.
I když pak někdo jde a porovná počet řádků GNU/Linux a Windows: ~16M VS ~40M (Xp)
Co to říká o kvalitě, provedení, návrhu... ? Nic.
A jestli se cítíš jako šnek?
- Stíháš termíny?
- Máš na konci pracovního dne pocit, že jsi někam pokročil?
- Je zadavatel spokojen?
;)
-
Tohle fakt nekdo nejak pocita/statisticky analyzuje?
-
Tohle fakt nekdo nejak pocita/statisticky analyzuje?
Já na to psal dokonce bakalářku :-) Nicméně závěr byl mj. ten, že by se to nemělo přehánět, protože přes zpětnou vazbu by to to mělo negativní vliv na práci programátorů.
-
Zrovna teď jsem dělal takový menší program s GUI. Importuje, zpracovává a prezentuje to data ze snímačů s možností ručních editací, nastavování různých kritérií atd. Má to 2 800 řádků a trvalo mě to 9 dní. Takže jsem šnek.
-
Zrovna teď jsem dělal takový menší program s GUI. Importuje, zpracovává a prezentuje to data ze snímačů s možností ručních editací, nastavování různých kritérií atd. Má to 2 800 řádků a trvalo mě to 9 dní. Takže jsem šnek.
A vyloučil jsi z toho čas na analýzu, tvorbu a verifikaci požadavků, návrh architektury, požadavky na testování, modulové testy, integraci, integrační testy atd, takže jde jen o čistý čas psaní a vlastní ověření funkce?
-
Počet řádků nemá valnou korelaci s kvalitou, vždy záleží na tom co vlastně programátor vyprodukoval.
Oba extrémy jsou obvykle špatně, příliš mnoho řádků bývá produkt Ctrl+C Ctrl+V a příliš málo řádků bývá špatně čitelných.
-
Když to vezmu průměrně, tak bych řekl asi 10 řádků kódu.
Samozřejmě je to tak, že měsíc (nebo dýl) na nic nesáhnu a pak vysypu 1000 za večer. Kdyby mě viděl nějakej profi programátor, tak by mi nafackoval a pak to z 1000 zkrátil na 300 ;D Samozřejmě při zachování funkce a optimalizace rychlosti ;D ;D ;D
-
Mirek> Ne, nevyloučil. Je to komplet čas včetně všech činností, které s tím souvisí. Tedy i včetně návrhu gui, návrhu datových struktur, algoritmů, plus testování, testování a ještě jednou testování a to jak na Windows tak na Linuxu. Největší porod je pro mě vymyslet tu logiku, struktury atd. To jen sedím na židli, čumím do prázdna, nikdo na mě nesmí mluvit, stokrát dokola promýšlím postup a občas si udělám poznámku na papír. Radost je pak psaní kódu. Únavná práce je testování a oprava chyb. Ale všechny tyto činnosti k tomu patří, takže je musím započítat.
-
Mirek> Ne, nevyloučil. Je to komplet čas včetně všech činností, které s tím souvisí. Tedy i včetně návrhu gui, návrhu datových struktur, algoritmů, plus testování, testování a ještě jednou testování a to jak na Windows tak na Linuxu. Největší porod je pro mě vymyslet tu logiku, struktury atd. To jen sedím na židli, čumím do prázdna, nikdo na mě nesmí mluvit, stokrát dokola promýšlím postup a občas si udělám poznámku na papír. Radost je pak psaní kódu. Únavná práce je testování a oprava chyb. Ale všechny tyto činnosti k tomu patří, takže je musím započítat.
OK, pak to ale musíš brát v úvahu když se s někým porovnáváš abys srovnával (alespoň vzdáleně) srovnatelné a ne 2 úplně jiné věci.
-
Více proužků - více Adidas? :-D
-
Když to takhle budete ještě nějakou dobu rozpitvávat, tak soudruzi manageři se toho chytnou, začnou soudruhy programátory odměňovat podle toho, kolik nasmolili řádků a následně soudruzi programátoři začnou smolit řádky co v programech nebudou mít vůbec žádný význam, jen aby ty programy byly co nejdelší.
-
Statistika počtu řádků za jednotku času je samozřejmě důležitá. Jako metrika, rozhodně ne jako nástroj hodnocení a odměňování.
Její důležitost je v plánování na základě předchozích dat.
-
zobecňování je vždy problém :). Berte v úvahu také jazyk, v jakém se to píše, v pythonu mi to připadá jako scifi, v C naopak běžné.
Většinu dne jsem v c/c++/erlang a přispívám do několika projektů, 1000 řádků jak koukám je taková norma, nic vyjímečného. Představte si to ale jinak, upravím 3 projekty a do každého přidám jednu novou vlastnost, 100 řádku kódu + 200 řádku testů, cca 2 hodiny programování. Někdy ale samozřejmě pár dní trávím v dokumentaci a vypisováním, někdy zase jen pár dní programuji, jak kdy.
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
Okrem iného majú zakázanú rekurziu. Chyby v takých aplikáciach vyjdú veľmi draho, tam sa neoplatí riskovať.
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
Okrem iného majú zakázanú rekurziu. Chyby v takých aplikáciach vyjdú veľmi draho, tam sa neoplatí riskovať.
Rekurze se dá snadno nahradit zásobníkem, který se na rozdíl od rekurze dá snadno programátorsky ošetřit, aby nedošlo k jeho přetečení. Rekurze se sice dá ošetřit také, ale k přeplnění interního zásobníku dojde podstatně dříve.
Řekl bych, že budou mít zakázaných víc věcí, protože například práce s haldou je také docela riskantní.
Dodnes si vzpomínám na chybovou hlášku "Kolize zásobníku a heap", kvůli které jsem kdysi musel mnoho programů předělat.
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
Okrem iného majú zakázanú rekurziu. Chyby v takých aplikáciach vyjdú veľmi draho, tam sa neoplatí riskovať.
Škoda že neměli nařízeno používat jen metrické jednotky. Ta imperiální výstřednost několika zemí na světě je vyšla na pěkný ranec...
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
Okrem iného majú zakázanú rekurziu. Chyby v takých aplikáciach vyjdú veľmi draho, tam sa neoplatí riskovať.
Rekurze se dá snadno nahradit zásobníkem, který se na rozdíl od rekurze dá snadno programátorsky ošetřit, aby nedošlo k jeho přetečení. Rekurze se sice dá ošetřit také, ale k přeplnění interního zásobníku dojde podstatně dříve.
Řekl bych, že budou mít zakázaných víc věcí, protože například práce s haldou je také docela riskantní.
Dodnes si vzpomínám na chybovou hlášku "Kolize zásobníku a heap", kvůli které jsem kdysi musel mnoho programů předělat.
Halda se nepoužívá vůbec, není důvod, vše je alokované staticky.
-
Občas do tisícovky, občas se celý den prohrabávám starým kódem a nakonec s uspokojením napíšu 10 co řeší problém :)
-
A teraz otazka, kolko z toho dalsi den premazete a prepisete?
-
Zalezi od toho ci je to nieco vlastne, alebo nieco co robim pre inych a pri sukromnych projektoch aj od nalady. Takze od 5 do asi 1000 alebo tak nejak.
-
najlepsi prispievaju zapornym poctom riadkov :)
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
Spíš bych řekl, že jim zbytek času zabere vyplňování dotazníků o jejich přínosu organizaci, o přínosu jejich kolegů a o jejich vztahu ke všem myslitelným menšinám.
-
Nekde jsem cetl ze programatori NASA maji prumer 3 radky na den, zbytek casu zabere testing...
Spíš bych řekl, že jim zbytek času zabere vyplňování dotazníků o jejich přínosu organizaci, o přínosu jejich kolegů a o jejich vztahu ke všem myslitelným menšinám.
Vazne?
-
znám člověka, který nestíhá psát :-) dělal například na mafii 2. A pro toho člověka asi není problém 15 000 řádků za den (kvalitního kódu).
-
Tak treba za dnesek
svn diff | wc -l
>50k
Jasne, je v tom diffu kolem toho omacka, ale i tak je toho hodne.
-
znám člověka, který nestíhá psát :-) dělal například na mafii 2. A pro toho člověka asi není problém 15 000 řádků za den (kvalitního kódu).
je rozdíl 15000 řádků v javě kde na napsání každé kraviny je potřeba třída a milion dalších pomocných metod a 15 000 řádků v Céčku např.
-
Tieto debaty ma vždy vedia potešiť. Ja už som starší človek čo to som videl a z porovnávania vyrástol. Ale mám takú hlúpu otázku, kde žijete vy všetci geniálny programátori, prečo som ešte vo svojom dlhom živote na žiadneho z vás nenarazil? Čo je ale horšie, ja som nikde ani nerazil na tie geniálne kódy. Po čomkoľvek siahnem, je zabugované, akýkoľvek komplexnejší otvorený kód (okrem fakt mainstreamu) vidím škrípem zubami o uzavretom bežnom keď sa k nemu dostanem ani nehovorím.
-
Také se mi stalo, že jsem celý den strávil na jedné vnořené proceduře v databázi, která měla ve výsledku pouze 60 řádek. Byla pro celou aplikaci naprosto klíčová - nedalo se to nijak obejít a bez ní by aplikace prostě nemohla fungovat. Ten den jsem byl se svou produktivitou velmi spokojen a zákazník také.
-
Tak treba za dnesek
svn diff | wc -l
>50k
Jasne, je v tom diffu kolem toho omacka, ale i tak je toho hodne.
no ja bych se tim svnkem teda jako verejne vubec nechlubil
-
Tak já třeba plodný den posuzuji podle toho, kolik řádků se mi podařilo odstranit :D
Refaktoringem se zbavým sousty balastu a fragmentů kódu, které se třeba už ani nikde nevyužívají. U nových věcí se snažím držet spíše stylu malých mikroslužeb, kdy na sobě nejsou jednotlivé frakce závislé, krátký kód je čitelnější, lépe se to testuje a lze snadně nějakou část outsourcovat ;)
-
Tak treba za dnesek
svn diff | wc -l
>50k
Jasne, je v tom diffu kolem toho omacka, ale i tak je toho hodne.
no ja bych se tim svnkem teda jako verejne vubec nechlubil
Ale ma ho delsiho!
-
Tak treba za dnesek
svn diff | wc -l
>50k
Jasne, je v tom diffu kolem toho omacka, ale i tak je toho hodne.
no ja bych se tim svnkem teda jako verejne vubec nechlubil
Nechlubil bych se ani tím, že někdo pošle commit až po změně 50k řádek. Takové verzování je k ničemu - těžko se v něm hledá nějaká konkrétní změna.
-
Tak já třeba plodný den posuzuji podle toho, kolik řádků se mi podařilo odstranit :D
Refaktoringem se zbavým sousty balastu a fragmentů kódu, které se třeba už ani nikde nevyužívají. U nových věcí se snažím držet spíše stylu malých mikroslužeb, kdy na sobě nejsou jednotlivé frakce závislé, krátký kód je čitelnější, lépe se to testuje a lze snadně nějakou část outsourcovat ;)
Asi tak. Za posledni tri dny se mi podarilo 100 radku ubrat (z cca 900), ted jsem skoncil. Byl to docela zahul a nasel jsem pri tom i par chyb. :)
-
Tak treba za dnesek
svn diff | wc -l
>50k
Jasne, je v tom diffu kolem toho omacka, ale i tak je toho hodne.
Myslim, ze pokud to neni opravdu uplne novy kod, ale uprava existujiciho, tak byste meli uvazovat o rewrite celeho projektu, nez to vetsinu lidi prestane bavit.
Pokud se jedna o uplne novy kod, tak mi prijde, ze delate neco spatne. Vice kopii stejneho, nevyuzivani knihoven, etc.
Nevidel jsem ten kod, ale jsem si jisty, ze takto zadny profesional ani expert nepracuje.
Vlastni zkusenost s refaktoringem, ktery mel opravdu velky diff, ale ani vzdalene nebyl 50kloc. Cely projekt mel priblizne 500kloc - dle SonarQube.
Zkuste si predstavit hledat jaka zmena zpusobila chybu na produkci a narazite na commit s 50k radkama diffu. Pritom existuje ve firme minimalne jeden clovek, ktery bude ocekavat rychle opraveni chyby ....
To je i duvod,proc jsem stasny pracujici v jedne firme uz skoro 10 let a doufam, ze se to hned tak nezmeni. Narazit na pilne idioty, kteri si mysli, ze cim vic zmen v jednom commitu tim vice budou oceneni jako velky pracat, bych opravdu nerad.
-
Ako uz niekto napisal. Programatori nie su sekretarky a aj keby som denne napisal 100 riadkov kodu a stiham vsetky poziadavky, tak do toho nikoho nic nie je. Ja vzdy rozmyslam ako napisat co najmenej riadkov kodu, nie najviac. To co napisal tap je aj moja skusenost. Iluziu o genialnych programatoroch som nikdy nemal (resp taku, ze pisu kod pre nasa a nie pre banku) a ked vidim nejaky kod s 10k riadkami, tak sa mi rozsvieti vystrazna kontrolka..
K povodnej otazke - ten clovek na githube mohol commitnut nejaky cudzi kod a bolo.
-
Já mám dlouhodobý průměr okolo cca 300 řádků změn denně. Samozřejmě, někdy je to 800 a jindy 50, podle toho, co zrovna dělám. Nutno taky dodat, že python. Když jsem dělal v javě, tak nebyl problém 2000-4000 za den, ale půlka z toho byl generovaný kód (jen settery / gettery zaberou desítky procent) a druhá půlka ukecaná abstrakce, kde jeden řádek v pythonu na list comprehension vydá na 50 v javě.
-
Já mám dlouhodobý průměr okolo cca 300 řádků změn denně...
Tohle bych označil za takový slušný standard.
-
Počet řádků je naprosto nevypovídající.
1) Ukecanost jazyka, s tím spojen ekosystém...
2) Složitost projektu
-
znám člověka, který nestíhá psát :-) dělal například na mafii 2. A pro toho člověka asi není problém 15 000 řádků za den (kvalitního kódu).
8 hod denne=28800 sekund
tj. nenapise ani riadok za sekundu - to musi byt poriadny flakac
-
Počet řádků je naprosto nevypovídající.
1) Ukecanost jazyka, s tím spojen ekosystém...
2) Složitost projektu
- Ukecaný není jazyk, ale programátor, který ho používá.
- Při správně udělané dekompozici nehraje složitost projektu žádnou roli.
-
- Ukecaný není jazyk, ale programátor, který ho používá.
Samozřejmě, že je ukecaný jazyk. Když vezmu něco jako třeba asociativní mapy v pythonu a asociativní mapy v C, tak je to mnohokrát víc ukecanější, ať v tom programuje kdo chce. Tak je to s každou věcí, která je někde jinde abstrahovaná do syntaxe, pokud ten jazyk zrovna nenabízí silná makra na úrovni AST.
-
- Ukecaný není jazyk, ale programátor, který ho používá.
Samozřejmě, že je ukecaný jazyk. Když vezmu něco jako třeba asociativní mapy v pythonu a asociativní mapy v C, tak je to mnohokrát víc ukecanější, ať v tom programuje kdo chce. Tak je to s každou věcí, která je někde jinde abstrahovaná do syntaxe, pokud ten jazyk zrovna nenabízí silná makra na úrovni AST.
Obsluhu asociativní mapy si v C napíšeš na pár desítek řádek a pak ji používáš stejně jako v Pythonu.
Na druhou stranu je Python skutečně minimalistický - programy jsou typicky kratší než v C.
-
Ukecaný není jazyk, ale programátor, který ho používá.
C++ (starší verze):
for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) ...
C++ novější verze:
for(auto const& value: a) ...
Haskell:
forM_ a $ \value ->
-
tusim by som sa mal zaregistrovat..
-
...
Tím jsi jen potvrdil, co jsem napsal. Každý zápis se vešel na jeden řádek.
Tady ale nejde o to, jak napsat cyklus, ale o schopnostech programátora použít ho jen tam, kde je třeba. Když ho někdo vhodně skryje do céčkovského makra, tak to volání také může vypadat jednoduše, např:
forit(it, v) ...
Samozřejmě je lepší použít OOP, kde se taková iterace řeší pouze na jednom místě a není nutné makra používat.
-
Tím jsi jen potvrdil, co jsem napsal. Každý zápis se vešel na jeden řádek.
??? No ono to pak samozřejmě vyjde tak, že v tom Haskellu na ten jeden řádek narveš i tělo cyklu....pokud ti teda pomalu 3x delší délka nepřipadá "ukecaná" a bazíruješ na jednom řádku....
Tady ale nejde o to, jak napsat cyklus, ale o schopnostech programátora použít ho jen tam, kde je třeba. Když ho někdo vhodně skryje do céčkovského makra, tak to volání také může vypadat jednoduše, např:
forit(it, v) ...
Samozřejmě je lepší použít OOP, kde se taková iterace řeší pouze na jednom místě a není nutné makra používat.
Takže jako opearci "iteruj přes kolekci" budu někde abstrahovat do OOP? Vždyť už takhle je vidět, že novější C++ je o dost méně ukecané než to staré.... Ale dobře, potřebuješ setřídit nějakou kolekci podle 2 položek ve struktuře, jedna sestupně, jedna vzestupně. Implementuj v C++ nebo v Jave bez lambda funkcí, v C++ nebo v Javě s lambda funkcemi a porovnej délku. Pro inspiraci, tady je implementace v Haskellu:
data MyRecord = MyRecord { polozka1 :: Int, polozka2 :: Double }
setrid = sortBy (flip (comparing polozka1) <> comparing polozka2)
A teď se zkus zamyslet, jak bys implementoval, kdyby na vstupu byl seznam položek a směr třídění těchto položek a ty bys to podle toho měl setřídit....
-
A teď se zkus zamyslet, jak bys implementoval, kdyby na vstupu byl seznam položek a směr třídění těchto položek a ty bys to podle toho měl setřídit....
Hlavně bych se to nesnažil třídit, ale raději bych je seřadil :)
Obvykle nedělám v C++ ani Haskellu. V PHP na to mám sadu funkcí sort(), které však vůbec nepoužívám. Pokud něco potřebuji seřadit v aplikaci, tak si nechám data naservírovat již seřazena z databáze - umí to velmi dobře. Pokud potřebuji řadit na výstupu, milerád to přenechám výstupní šabloně, která to také zvládne jedním krátkým řádkem.
Pokud vím, v C++ jsou tyto šablony k dispozici také, takže že se takovou prkotinou, jakou je sort, nemusím vůbec zabývat.
-
V PHP na to mám sadu funkcí sort(), které však vůbec nepoužívám
No jasně, tak ukaž, jak to seřadíš s funkcí sort v PHP.
Pokud něco potřebuji seřadit v aplikaci, tak si nechám data naservírovat již seřazena z databáze - umí to velmi dobře
Přesně - SQL je totiž míň ukecaný než PHP....
Pokud potřebuji řadit na výstupu, milerád to přenechám výstupní šabloně, která to také zvládne jedním krátkým řádkem.
Vážně? Jako že v té šabloně jsi schopen specifikovat nějaké složitější mechanismy třídění?
Pokud vím, v C++ jsou tyto šablony k dispozici také, takže že se takovou prkotinou, jakou je sort, nemusím vůbec zabývat.
Tak ukaž, jak to seřadíš v C++ s použitím nějaké šablony. Tvrdils, že ukecanost není funkce jazyka, ale programátora. Tady máš konkrétní příklad toho, jak některé i docela primitivní úlohy se v jazycích bez určitých vlastností docela špatně vyjadrřují. Tak ukaž, jako takovouhle jednoduchou úlohu celkem ze života vyjádříš stručně v PHP, C++, Javě...
-
tusim by som sa mal zaregistrovat..
ooopss... sorry...
-
V PHP na to mám sadu funkcí sort(), které však vůbec nepoužívám
No jasně, tak ukaž, jak to seřadíš s funkcí sort v PHP.
Pokud něco potřebuji seřadit v aplikaci, tak si nechám data naservírovat již seřazena z databáze - umí to velmi dobře
Přesně - SQL je totiž míň ukecaný než PHP....
Pokud potřebuji řadit na výstupu, milerád to přenechám výstupní šabloně, která to také zvládne jedním krátkým řádkem.
Vážně? Jako že v té šabloně jsi schopen specifikovat nějaké složitější mechanismy třídění?
Pokud vím, v C++ jsou tyto šablony k dispozici také, takže že se takovou prkotinou, jakou je sort, nemusím vůbec zabývat.
Tak ukaž, jak to seřadíš v C++ s použitím nějaké šablony. Tvrdils, že ukecanost není funkce jazyka, ale programátora. Tady máš konkrétní příklad toho, jak některé i docela primitivní úlohy se v jazycích bez určitých vlastností docela špatně vyjadrřují. Tak ukaž, jako takovouhle jednoduchou úlohu celkem ze života vyjádříš stručně v PHP, C++, Javě...
Snad nemusím opisovat učebnicový příklad ... http://www.w3schools.com/xsl/el_sort.asp (http://www.w3schools.com/xsl/el_sort.asp)
-
Snad nemusím opisovat učebnicový příklad ... http://www.w3schools.com/xsl/el_sort.asp
No asi musíš. Ten příklad byl setřídit to podle 2 kritérií, podle prvního sestupně, podle druhého vzestupně. Tak ukaž.
-
Snad nemusím opisovat učebnicový příklad ... http://www.w3schools.com/xsl/el_sort.asp
No asi musíš. Ten příklad byl setřídit to podle 2 kritérií, podle prvního sestupně, podle druhého vzestupně. Tak ukaž.
Když musím, tak musím ... Ve výše uvedeném příkladu si nahraď ten sort těmito dvěma řádky:
<xsl:sort select="artist" order="descending" />
<xsl:sort select="title" data-type="text" order="ascending" />
-
OK :) Pěkný... A teď v tom neukecaném C++, PHP a Javě - koneckonců, ne všechno je webová aplikace, že...
-
OK :) Pěkný... A teď v tom neukecaném C++, PHP a Javě - koneckonců, ne všechno je webová aplikace, že...
Však tohle funguje nejen ve webovkách, ale i s běžnými daty v aplikaci. Stačí ta data v C++ nasázet do DOMu a prohnat touto šablonou. Na výstupu jsou opět data v DOMu, tentokrát seřazena podle českých pravidel řazení.
Přiznávám, že pro newebové použití je to poněkud kostrbaté. Však také v C++ nedělám. Ostatní jazyky na to mají kolekce.
-
Však tohle funguje nejen ve webovkách, ale i s běžnými daty v aplikaci. Stačí ta data v C++ nasázet do DOMu a prohnat touto šablonou. Na výstupu jsou opět data v DOMu, tentokrát seřazena podle českých pravidel řazení.
Uhhh... to všechno zvládneš v té jedné řádce? Nekomentuji, že pro datové typy mimo text a číslo to je totálně nepoužitelné...
Přiznávám, že pro newebové použití je to poněkud kostrbaté. Však také v C++ nedělám. Ostatní jazyky na to mají kolekce.
Tak s těmi kolekcemi: signatura z C++:
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
PHP má :
bool uasort ( array &$array , callable $value_compare_func )
Konec konců, tohle je úplně stejné v haskellu:
sortBy :: (a -> a -> Ordering) -> [a] -> [a]
Všechny jazyky poskytují stejnou funkci, teď je jen otázka, jak to dokážeš elegantně zavolat, aby to provedlo to správné třídění. V C++ a PHP zapomeň, že by ses elegancí kdekoliv blížil tomu haskellovému kódu. Zdaleka. Jediné, co tě může zachránit v PHP je třeba funkce "array_orderby", kde pokud se zrovna trefíš do toho, co podporuje (což shodou okolností to, co jsem dal jako příklad je), tak to půjde. Zkus to trošku zesložitit a končíš. V C++ nic takového pořádně neuděláš (leda možná pomocí nějakých super-nových feature).
Ale ta pointa není v tom, jestli dokážeš setřídit to pole. Je v tom, jak dokážeš elegantně poskládat dohromady ty "sortBy", "compare" a přístupy k prvkům. A v některých jazycích to jde elegantně a jasně - a v jiných ne. Programátor sice udělá hodně, prostě není pravda, že by se dal stejný kód napsat v různých jazycích plus minus stejně dlouze.
-
hahaha, ziskat od kita kod je ako dotknut sa zakladacej listiny karlovej univerzity. kit nevie programovat to je zname uz rok
zotriedit data v c++? dam ich do domu a prezeniem cez xsl :D
-
Ale ta pointa není v tom, jestli dokážeš setřídit to pole. Je v tom, jak dokážeš elegantně poskládat dohromady ty "sortBy", "compare" a přístupy k prvkům. A v některých jazycích to jde elegantně a jasně - a v jiných ne. Programátor sice udělá hodně, prostě není pravda, že by se dal stejný kód napsat v různých jazycích plus minus stejně dlouze.
Pointa je v tom: Proč bych něco takového měl dělat, když už data seřazena mám přesně tak, jak je potřebuji mít?
-
hahaha, ziskat od kita kod je ako dotknut sa zakladacej listiny karlovej univerzity. kit nevie programovat to je zname uz rok
zotriedit data v c++? dam ich do domu a prezeniem cez xsl :D
Umíš i něco jiného než jen trolit? Když nemáš co sdělit, tak se do toho nepleť.
-
Ale ta pointa není v tom, jestli dokážeš setřídit to pole. Je v tom, jak dokážeš elegantně poskládat dohromady ty "sortBy", "compare" a přístupy k prvkům. A v některých jazycích to jde elegantně a jasně - a v jiných ne. Programátor sice udělá hodně, prostě není pravda, že by se dal stejný kód napsat v různých jazycích plus minus stejně dlouze.
Pointa je v tom: Proč bych něco takového měl dělat, když už data seřazena mám přesně tak, jak je potřebuji mít?
Protože třeba nemáš? Ona třeba ta data zrovna nepocházejí z SQL dotazu... Ale pointa fakt není v tom řazení - ale v tom, že řešíš nějaký problém, máš k dispozici funkci (tady třeba sortBy) a potřebuješ ji nějak inteligentně zavolat. Jako taky se můžeš ptát, proč máš řešit nějaký problém nad daty, když už ho máš vyřešený... a ta odpověď je, že programátoři jsou většinou ty lidi, kteří to pro tebe vyřeší :D
-
zotriedit data v c++? dam ich do domu a prezeniem cez xsl :D
Umíš i něco jiného než jen trolit? Když nemáš co sdělit, tak se do toho nepleť.
Mně to připadá jako poznámka docela k věci.... :D Faktem je, že něco takového by mě ani ve snu nenapadlo. Možná je i jednodušší drbat se pravou nohou za levým uchem....
-
Pointa je v tom: Proč bych něco takového měl dělat, když už data seřazena mám přesně tak, jak je potřebuji mít?
Protože třeba nemáš? Ona třeba ta data zrovna nepocházejí z SQL dotazu...
Nesnažím se vynalézat kolo. Většina dat, u kterých potřebuji nějaké seřazení, pochází právě z SQL. A ten zbytek dojedu výstupní šablonou. Prostě využívám nástrojů, které k tomu jsou určeny a dělají to tak rychle, jak jen to jde.
-
Nesnažím se vynalézat kolo. Většina dat, u kterých potřebuji nějaké seřazení, pochází právě z SQL. A ten zbytek dojedu výstupní šablonou. Prostě využívám nástrojů, které k tomu jsou určeny a dělají to tak rychle, jak jen to jde.
Co má společného fakt, že "Ty" nepotřebuješ v těchto jazycích využívat funkci "sort" s tím, že to, co jsem ukázal, je příklad k tvrzení, že mezi jazyky je docela velký rozdíl v ukecanosti?
-
Umíš i něco jiného než jen trolit? Když nemáš co sdělit, tak se do toho nepleť.
ale kod ste nedali.
ono ukazovat strucnost jazyka A tym ze pouzijem v nom jazyk B nic nehovori o jazyku A
a ked uz sme pri tom xslt: to je presne jazyk kde sablony su casto giganticke neudrzovatelne molochy
-
zotriedit data v c++? dam ich do domu a prezeniem cez xsl :D
Jojo, jedna instance uzlu v DOM stromu bude mít režii třeba 500B. Bude se třídit pole struktur velikosti 20B s 1k záznamů, vytvoří 1k instancí po 520B. Jenom na reprezentaci dat místo 20k bude přes 0.5M. A pak půjde autor toho řešení blít do diskuse na rootu, jak jsou appky nenažraný ;D
A to jenom proto, že neumí udělat funkci na porovnání těch dvou struktur a předat ukazatel na ni třídící funkci z knihovny...
Nevím jak zdejší páni "programátoři", ale já při lovu mouchy preferuju plácačku před RPG.
-
Jinak co se kódu týká, dnešní skóre v GITu je 39+, 29-. Jsem spokojen.
A jenom tak mimochodem, je to na na nejvyšším broukovi z té řady, s 16kB FLASH a 512B RAM. Tam to holt není jak zvracení v C#, tam se musí myslet.
-
Tam to holt není jak zvracení v C#, tam se musí myslet.
Pokud v C# zvracíš, tak je to na tebe asi moc mocný nástroj. Raději zůstaň u švábů.
-
Tam to holt není jak zvracení v C#, tam se musí myslet.
Pokud v C# zvracíš, tak je to na tebe asi moc mocný nástroj. Raději zůstaň u švábů.
Jestli on nezvraci spis z C#.
-
Tam to holt není jak zvracení v C#, tam se musí myslet.
Pokud v C# zvracíš, tak je to na tebe asi moc mocný nástroj. Raději zůstaň u švábů.
V C# nedělám, je to hluboko pod mou úroveň. Spíš je sranda sledovat myšlenkový toky kolegů, co dělají v C#. To se moc dobře bavím. Třeba jeden věří, že FIR filtr může divergovat, další ofrňuje nad Delphi, že je to prehistorie a když potřeboval mít u třídy několik konstruktorů, co se volají navzájem a až úplně na konci potřeboval nějakou akci, byl v pasti. Zatím co já jsem v podobné situaci v C++B prostě přetížil AfterConstruction() a jelo se dál, on tam prý takovou blbst nemá (zato rodičovská třída měla cca 60 callbacků). Takže nejjednodušší řešení - class factory kvůli takové prkotině. Navrhoval jsem mu něco jako workaround v C++:
void Trida::PostInit(void) {
static bool initialized = flase;
if (initiaized) return;
...
initialized = true;
}
Zaseklo se to na tom, že ani po čtvrt hodině nepochopil, co to slovo "static" znamená.
No a když postavíš samozvaný experty na C#, pro který je "assert" sprostý slovo a "catch" urážka do řady a budeš je kosit kulometem, ani za měsíc non-stop střelby ti nedojdou terče. To je tak, když je kompilátor 3x chytřejší než ten, kdo do něj cpe kód.
A tou cisternou zvratků myslím třeba DevExpress. Bez dokumentace, kolegové s tím dělají metodou T&E. Jednoduchá třída má 100 vlastností, 200 událostí a stačí jedna změna, aby zmizela deklarovaná funkcionalita. Sice designově pěkný, ale rozežraný, pomalý a nefunkční. Nasadit to na velíně v Dukovanech, tak než odswapuje kus paměti a naanimuje hlášku "roste tlak a teplota v reaktoru", už mají záchranáři dekontaminovanou celou Hadcovou step... A kdybych od kolegů za každý sprostý slovo, který při jejich práci musím vyslechnout, dostal korunu, tak do roka a do dne kupuju fungl novou XC60ku. Hmm, asi jim to navrhnu.
-
OK, musím se přiznat, že C# neznám, ale dělám v Javě. Každý mi ale vždy tvrdil, že C# daleko dál. Jelikož Java je král, tak jsem si představoval to mocné C#, že je prostě skvělé. Ty tvoje popisy moc dobré nejsou, ale kdo ví, jestli fakt nemáš jen neschopný kolegy :D U Javy je cca 80 % "programátor" a zbytek je z velké části použitelný. Ono je to těžké v zemi, kde "programátoři" berou podobné peníze jako lepší prodavač. Se jim pak člověk nediví, že nic neumí :D
-
OK, musím se přiznat, že C# neznám, ale dělám v Javě. Každý mi ale vždy tvrdil, že C# daleko dál. Jelikož Java je král, tak jsem si představoval to mocné C#, že je prostě skvělé.
C# má obvykle více různých řešení pro jeden problém, např. object vs. struct, accessory vs. vlastnosti apod. Pokud každý z programátorů jednoho projektu v C# použije jiný typ řešení, vznikne z toho hůře udržovatelná džungle. Java nemá ani structy, ani vlastnosti, což je jedině dobře. Tím vede vývojáře určitým směrem k jednotnějšímu stylu zápisu aplikace, což prospívá následné údržbě.
-
Ono u C# jde jenom o jedno. O zisk firmy,která s tím přišla. Takže schválně boří omezení, schválně zjednodušují syntaxi, atd, aby bylo co nejvíc
programátorů uživatelů jejich produktu. Tím přibude aplikací na jejich s ničím nekompatibilní platformě a hraje se o vendor lock in.
DevExpress je firma, která prodává jakousi nádstavbu nad WebForms. Bavičky, animece, pičičandoviny. A asi je to slušně živí. Jenomže dělají všechno jako monstra, co mají umět vše a mizerně to dokumentují. Takže po hodině googlení se kolegům podaří najit video na youtube, kde se někdo chlubí, že se mu to poveslo. Uděkají to podle něj a nic.... protože to nefunguje, pokud dají třeba jinou vekikost písma.
A yěch typických 200 událostí, to jsou (doufám) jenom ukazatele na funkce velikosti 8B. Pak by jedna instance měla jenom na událostech 2.5kB. k tomu fakt, že je to nad WebForms a na pozadí jede ještě nějaký DOM... no label ve formuláři pod 5kB nebude.
Chlapi u nás to používají jenom proto, že marketing. Ale stejně nechápu, jak vůbec může firma s tak mizerným produktem existovat.
Holt dneska se funkčnost a praktičnost nenosí. Pamatuju se, jak jsem na VŠ dělal projekt v Delphi, do školy jsem donesl exáč + dokumentaci + zdrojáky na jedné disketě a ještě tam bylo místo, abych si stáhnul nějakou dokumentaci, protože net jsem doma neměl. Dneska bych to samý řešil 3x dýl a bylo by toho plný DVD. A real time renderování výsledků výpočtů na 750MHz Duronovi s 64MB RAM bych mohl zapomenout.