it-swarm-eu.dev

Měli byste obětovat čitelnost kódu s tím, jak efektivní je kód?

Měli byste obětovat čitelnost kódu s tím, jak účinný je?

např. 3 řádky kódu do 1 řádku.

Přečetl jsem Code Craft od Pete Goodliffe, že čitelnost je klíčová.

Tvoje myšlenky?

40
TeaDrinkingGeek

„Méně řádků“ není vždy to samé jako „efektivnější“. Předpokládám, že máte na mysli „Měl by být program zkrácen na úkor čitelnosti“.

Programy musí být psány tak, aby je lidé mohli číst, a pouze náhodně, aby se stroje spouštěly.

- Abelson a Sussman, struktura a interpretace počítačových programů

Obecně si myslím, že je důležitější, aby byl program snadno pochopitelný, než aby byl krátký. Měl bych však poznamenat, že zkrácení programu často také zlepší jeho čitelnost (je tu zřejmá prahová hodnota, do které se dostanete, když váš kód začne vypadat jako šum v linii, ale do té doby se zdá, že vyjádření něčeho stručnějšího je jasnější).

Existují specifické výjimky (jako jsou vaše osobní skripty Shell nebo kód mungování jednoho z dat), které nikdo nebude nikdy muset udržovat, a jen vy budete někdy muset číst. V takovém případě je pravděpodobně v pořádku obětovat nějakou čitelnost pro účel, dokud tomu stále dokážete porozumět.

62
Inaimathi

Někdy ano.

Čitelnost je dobrá věc, o kterou se musíme snažit. Většina kódu napsaného pro typické podnikové aplikace bude dostatečně výkonná a je důležité soustředit se na čitelnost. V oblastech náročnějších na výkon (například programování videoher nebo těžké výpočty) může být důležité vzdát se čitelnosti ve prospěch používání určité jazykové funkce, která je hrozně nečitelná a přesto neuvěřitelně výkonná.

Příklad posledně jmenovaného naleznete v článku Rychlý inverzní druhotný kořen na Wikipedii.

Obecně si myslím, že je lepší si nejdříve udělat něco čitelného a starat se o výkon, za předpokladu, že jsou přijata preventivní opatření pro zdravý rozum, jako například nezvolení algoritmu O (n ^ 2) nad O(n)). čitelnost pouze kvůli stručnosti je podle mého názoru zavádějící.

30
Adam Lear

citoval to dříve , a já to znovu cituji:

Opravte to,
ujasněme si to,
aby to bylo stručné,
pospěš si.

V tomto pořadí

Wes Dyer

23
Benjol

Jediný čas, kdy bych obětoval čitelnost, by bylo, když by se ukázalo, že kód je překážkou výkonu a přepis by to vyřešil. V takovém případě by měl být úmysl kódu dobře zdokumentován, takže pokud dojde k chybě, může být snadněji sledován.

To však neznamená, že přepis musí být samozřejmě nečitelný.

22
ChrisF

Měli byste obětovat čitelnost kódu s tím, jak efektivní je kód?

Pokud jde o kód, vždy je hezké být dokumentující. Ale někdy se to nemůže stát. Někdy je třeba optimalizovat a někdy tento kód není sám o sobě velmi čitelný.

To je to, pro co byly vynalezeny komentáře. Použij je. Dokonce i shromáždění má komentáře. Pokud jste napsali velké množství kódu a na dohled není žádný komentář, obávám se. Komentáře neovlivňují výkonnost běhu, ale několik poznámek o tom, co se děje, vždy pomůže.

Podle mého názoru není absolutně žádná omluva, abych neměla několik základních poznámek. Je zřejmé, že if ( x == 0 ) /* check if x is 0 */ je zcela k ničemu; do kódu byste neměli přidávat zbytečný šum, ale něco takového:

; this is a fast implementation of gcd
; in C, call as int gcd(int a, int b)
; args go in rdi, rsi, rcx, r8, r9
gcd:
    Push rdp
    ; ...

Je to docela užitečné.

9
user10197

Měli byste obětovat čitelnost kódu s tím, jak efektivní je kód?

Pokud je vaším současným cílem účinnost (například ve fázi optimalizace) a víte - máte metriky, že? - tento řádek (řádky) kódu je aktuální překážkou, pak ano.

Jinak ne: čitelnost vám umožní (nebo jiný), abyste mohli později tento kód změnit, aby byl efektivnější, protože je snáze pochopitelné.

6
Klaim

Nikdo nevyhraje Code Golf

např. 3 řádky kódu do 1 řádku

Obzvláště hrozný nápad.

Náklady na hraní kódu golf - velmi vysoké.

Náklady na údržbu nečitelných programů - astronomické.

Hodnota tohoto druhu minimalizovaného kódu - nula. Stále to funguje, ale nefunguje žádné „lepší“.

Moudře zvolená účinnost

Náklady na výběr správného algoritmu a struktury dat - střední.

Náklady na údržbu správného algoritmu a struktury dat - nízké.

Hodnota správného algoritmu a struktury dat - vysoká. Využití zdrojů je nízké.

Hloupá („mikrooptimalizace“) účinnost

Náklady na hraní mikro optimalizací - vysoké.

Náklady na údržbu nečitelného, ​​mikro optimalizovaného kódu - velmi vysoké.

Hodnota mikrooptimalizace - liší se. Pokud je zde nenulová hodnota, náklady stále převažují.

4
S.Lott

Nesouhlasím s argumentem „čitelnost nad výkonem“. Dovolte mi, abych vám odpověděl jiným způsobem.

Nějaké pozadí: Víš, co mě dělá nemocným? Když dvakrát kliknu na Tento počítač a musím vlastně počkat, až se naplní. Pokud to trvá déle než 5 sekund, dostanu se do frustrace. Hloupá věc je, a to nejen Microsoft, za to, že v některých případech je důvodem, proč to trvá tak dlouho, že je třeba učinit rozhodnutí o tom, která ikona se zobrazí! To je správně. Takže tady sedím, zajímám se pouze o vstup do jednotky C: a musím počkat, až ovladač přistoupí na můj disk CD-ROM a odtud načíst ikonu (za předpokladu, že je v jednotce CD).

OK. Takže jen na vteřinu si představte všechny vrstvy mezi mým dvojitým kliknutím na Tento počítač a vlastně to mluví prostřednictvím ovladačů na CD-ROM. Teď si představte, že každá vrstva byla ... rychlejší ...

Vidíte, za tím vším je 1000 šťastných programátorů, protože jejich kód je „čitelnější“. To je skvělé. Jsem pro tebe šťastný. Ale z pohledu uživatele to jen saje (technický termín). A tak v noci usnete zvuk, abyste si řekli, že jste udělali správnou věc tím, že se ujistíte, že je kód čitelnější a přesto pomalejší. Ještě o něco pomalejší, než může být. A tak to dělá tisíce vývojářů a my kvůli vám čekáme na naše počítače. Podle mého názoru nejste hodni. Neříkám, že vaše první řádky musí být nejlepší.

Tady je můj přístup: Nejprve to zkuste, pak to zrychlete.Vždy Cílem je napsat efektivní kód a pokud musíte obětovat čitelnost, doplňte jej komentáři. Nebudu obětovat účinnost, aby ji někteří průměrní programátoři mohli udržet. Vysvětlím si však svůj kód, ale pokud to nestačí, omlouvám se, jste prostě prostí neschopní pracovat zde. Protože zde píšeme kód, který je rychlý a čitelný, a přestože existuje rovnováha, lze čitelný kód vysvětlit, zatímco neefektivnost je prostě nepřijatelná.

2
Maltrap

Záleží na tom, jestli mluvíme o efektivitě, pokud jde o to, jak rychle se kód spustí, nebo o tom, jak rychle vývojář dokáže kód napsat. Pokud obětujete čitelnost kódu ve prospěch toho, abyste mohli kód psát velmi rychle, pravděpodobně se ocitnete v platbě času zpět po silnici, pokud jde o ladění.

Pokud však hovoříme o obětování čitelnosti kódu, pokud jde o to, jak rychle se kód spustí, je pravděpodobné, že bude přijatelný kompromis, pokud se kód musí předformovat účinným způsobem. Psát něco, co běží co nejrychleji jen proto, že nemůžete být zdaleka tak dobrí z důvodu, protože je to něco jako rychlá inverzní druhá odmocnina , kde je klíčový výkon. Trik bude mezi vyvážením kódu a zajištěním toho, že i když zdroj může být obtížně čitelný, komentáře popisující, co se děje, vysvětlují, co se děje.

2
rjzii

Tato otázka mě často napadla, když jsou rozhovory diskutovány v kanceláři. Před mnoha lety mi jako absolventovi byla položena otázka „Myslíte si, že kód je samokumentující?“. Teď jsem měl odpovědět na tuto otázku jako programátor a pokud jde o tazatele, byla to černobílá otázka, takže neexistovala žádná střední půda. Proces by měl přežít indivdual, protože lidé budou více než živě přicházet a odcházet a vy chcete, aby nové začátky byly připraveny co nejdříve, a čím snazší je kód číst, tím rychleji pochopí, co se děje.

Chvíli jsem četl knihu, která byla docela dobrá, nazvala se vývojem řízeným doménou: Návrh na základě domény: řešení složitosti v srdci softwar Je pravda, že je to na začátku trochu suché čtení, ale na začátku materiál je dobře prezentován. To ukazuje dobrý přístup, který vede k systémům, které se dobře dokumentují. Jazyk je prostředkem pro komunikaci vašeho řešení, takže čím jasnější je řešení, tím snáze se přizpůsobí, pokud se výkon stane citovým faktorem. To je moje víra a zdá se, že pro mě dobře fungovala.

2
Desolate Planet

Mnoho triků, které měly kód zrychlit, ale mají sklon učinit kód méně čitelným, již není nutné, protože buď kompilátoři dostali velmi chytrá (dokonce chytřejší než většina vývojářů) nebo stroje se směšně rychle .

2

Zřídka by za to stála návratnost investic do zrychlení kódu na úkor čitelnosti. Moderní počítače běží tak rychle, že pochybuji, že by byl scénář, kde byste to chtěli. Pokud je v počítači spuštěn kód, musí být tento kód zachován.

Za tímto účelem považuji čitelnost za velmi důležitou. Jak již bylo mnohokrát uvedeno, samozřejmě to, že kód je čitelný, nutně neznamená, že je pomalejší.

Dobrým příkladem je název proměnné: $a

Co je $a ?? To je mimo kontext, takže na to nemůžete odpovědět, ale narazili jste na to někdy ve skutečném kódu? Nyní předpokládejme, že někdo napsal $file_handle - co je to? Je to jasné i z kontextu. Délka názvu proměnné znamená pro počítač nevýznamný rozdíl.

Myslím, že je zde zdravý rozum.

Některé aplikace mohou zaručit zkratku pro bitové posuny, které ne všichni pochopí, ale myslím si, že v určitém okamžiku dojde ke snížení výnosů a nalezení scénáře je vzácné *.

* to záleží na průmyslu a dalších podobných věcech. Dívám se na to z pohledu vývojáře podnikového softwaru (Business Information Systems).


Abych se na to podíval ještě z jiného úhlu pohledu (ale ne na rozbouřený), pracuji ve společnosti, která dělá SAAS. Když web klesne, musíme to opravit opravdu, opravdu rychle - obvykle někdo jiný opravuje kód jiného vývojáře.

Raději bych hodně spíše někdo dělal něco velmi neefektivně, ale čitelně, než aby to udělal fantazijní a "rychlý". Naše webové servery snižují Edge a požadavek nemusí být doručen v milionech sekundy. Nemáme problémy s načítáním.

Takže v praxi si myslím, že je více pravděpodobné, že si ublížíte sobě nebo jiným ... (Raději bych měl svůj víkend zpátky.)

1
Frank V

Ve většině případů je odpovědí „Důvěřujte kompilátoru, aby vykonal svou práci“, a napište kód, který je čitelný. To znamená, že kód je logicky strukturován (tj. Bez špaget) a samokumentující (tj. Dostatečně jasné názvy proměnných, funkcí atd.). Doplňte kód, který není dokumentován smysluplnými komentáři. Nekomentujte kvůli komentování, tj.

x++; // Add one to x

Spíše komentář pro vás, čtenáře, za 6 měsíců nebo 12 měsíců nebo jiné dostatečně dlouhé období. Přijměte kódovací standard a postupujte podle něj.

1
Throwback1986

Čistý kód je rychlý kód. Jasně psaný, snadno udržovatelný kód má tendenci být rychlejší, protože je to indikátor toho, že programátor pochopil danou úlohu a refactored kód až na jeho hlavní účel.

Moderní kompilátoři navíc optimalizují pokyny velmi efektivně. Kolik řádků kódu zadáte, abyste něco udělali, a to, co kompilátor vytvoří podle pokynů, nemusí nutně souviset. Přečtěte si o kompilátorech, abyste pochopili, proč tomu tak je.

Když pracuji na něčem výkonném, jako je grafika, občas obětuji čitelnost/udržovatelnost, když dělám věci, jako je zpracování obrazu, když pracuji na nejhlubších vnořených algoritmech, kde malé optimalizace mohou mít velký účinek. A i pak to udělám až po profilování, abych zajistil, že změny vlastně urychlí věci. Nemohu říci, kolikrát jsem se pokusil ručně 'optimalizace' pouze zjistit, že to skutečně zpomalil aplikaci kvůli způsobu, jakým kompilátor optimalizoval ručně psaný kód.

0
GrandmasterB