it-swarm-eu.dev

Proč je chytrost považována za škodlivou v programování některými lidmi?

V poslední době jsem si všiml spoustu otázek týkajících se různých abstrakčních technik a odpovědí v podstatě, že tyto techniky jsou „příliš chytré“. Domnívám se, že součástí našich pracovních pozic jako programátorů je určit nejlepší řešení problémů, které jsme dostali, abychom je vyřešili, a inteligentní to v tom pomáhá.

Moje otázka tedy zní: Jsou lidé, kteří si myslí, že určité techniky abstrakce jsou příliš chytří proti chytrosti jako takové , nebo existuje nějaký jiný důvod pro námitku?

EDIT: Tento kombinátor syntaktického analyzátor je příklad toho, co bych považoval za chytrý kód. Stáhl jsem si to a podíval se na to asi půl hodiny. Pak jsem prošel makro expanzí na papíře a viděl světlo. Teď, když tomu rozumím, vypadá to mnohem elegantněji než kombinátor syntaktického analyzátoru Haskell.

89
Larry Coleman

Jednoduchá řešení jsou lepší pro dlouhodobou údržbu. A nejde vždy jen o jazykovou znalost. Složitá čára (nebo čáry) vyžaduje určitý čas, i když jste odborníkem na daný jazyk. Otevřete soubor a začnete číst: "ok, jednoduché, jednoduché, rozumíte, jo, WTF ?!" Váš mozek se zastaví a budete muset zastavit a dešifrovat složitou linii. Pokud neexistoval měřitelný a konkrétní důvod této implementace, je to „příliš chytré“.

Zjistit, co se děje, se progresivně zhoršuje, jak složitost roste z chytré metody na chytrou třídu na chytrou strukturu. Kromě známých přístupů musíte přijít na myšlenkový proces, který šel do vytvoření „chytrého“ řešení, což může být docela obtížné.

To znamená, že nerad se vyhýbám vzoru (když je jeho použití oprávněné) jen proto, že mu někdo nemusí rozumět. Je na nás jako vývojářích, abychom se neustále učili, a pokud něčemu nerozumíme, je to důvod, proč se to učit, a ne se mu vyhýbat.

207
Adam Lear

Princip KISS

Nech to být jednoduché, hloupé. Chytrá řešení jsou skvělá, ale často je nejlepší nejjednodušší přímočaré řešení.

"Ladění je dvakrát tak tvrdé jako psaní kódu na prvním místě." Pokud tedy kód napíšete co nejchytřejší, nejde podle definice dost chytrý na to, aby jej mohl ladit. “

Brian Kernighan

102
Josh K

Blázni ignorují složitost; pragmatici to trpí; odborníci se tomu vyhýbají; géniové jej odstraní. - Alan Perlis

83
Martijn Verburg

Nejlepší řešení není vždy nejchytřejší řešení. Někdy jsou jednoduchá řešení stejně dobrá.

V Softwaru musíte vždy myslet na udržovatelnost. Pokud je kousek kódu pro někoho, kdo ho chce udržovat, příliš chytrý, řekl bych, že chytrost za to nestojí.

30
Geek

Citovat Brian Kernighan:

„Ladění je na prvním místě dvakrát těžší než psaní kódu. Pokud tedy napíšete kód co nejchytřejší, nejste z definice dostatečně chytří, abyste jej mohli ladit.“

26
peterchen

chytrost je nástroj; sám o sobě to není škodlivé. Škodí pouze v kontextu, kde to není nutné.

22
Steven A. Lowe

„Chytrý“, když se použije na kód, je téměř vždy jen eufemismem pro „zbytečně komplikovaný“.

Čtení dobrého, jasného a jednoduchého kódu je dost těžké. Čtení „chytrého“ kódu je jako znovu studovat latinskou poezii.

Zmatek vzniká, protože „chytrý“ jako atribut osoby má úplně jiný význam. Tento případ lze také chápat jako příklad toho, proč je navrhování softwaru pro skutečné lidi obtížné: Protože jsou nejednoznačné.

A protože někteří programátoři trpí pochopením sociálních protokolů, které většina lidí dodržuje, což jim zakazuje přímo vypovědět kód jako „zbytečně komplikovaný“, může pro ně být obtížné rozlišovat mezi dvěma významy slova chytré. Na rozdíl od toho, co si někteří mohou myslet, si myslím, že v konečném důsledku lepší „lidé lidí“ (což znamená: lidé, kteří mají empatii a introspekci a trpělivost), vylepší vývojáře. Protože vědí, pro koho napsat.

16
fzwo

Většina lidí se zaměřuje na chytrost z aspektu „Kód vyžaduje příliš mnoho dešifrování, než aby zjistil, co dělá“ a všechny špatné věci, které s tím souvisí, jako je

  1. Nikdo jiný to nemůže zjistit, natož udržovat/ladit.
  2. Ten, kdo napsal, ani neví, co dělá.
  3. Vlastně to nemusí být tak geniální začít
  4. atd....

Všechny dobré body, ale je tu další negativní aspekt chytrosti, a to je starý problém ega. To způsobuje problémy podle

  1. Někdo, kdo je příliš chytrý na to, aby použil řešení někoho jiného. Proč hledat to, co udělali jiní lidé, když si můžete vymyslet svůj vlastní způsob stahování stejné kočky?
  2. Někdo, kdo si myslí, že vymyslel nejchladnější řešení problému, často odmítne přijmout jakýkoli příspěvek.
  3. Nedovolte, aby někdo upravoval „svůj“ kód, i když jsou zřejmé problémy nebo je nutná drobná změna.
  4. Naopak si myslí, že jsou chytří a potřebují použít „nejnovější“ techniku, aby dokázali, jak inteligentní jsou, ale nedokážou si s tím dobře poradit v osobních projektech nebo jinak neprodukčním kódu, než je převedou do kritických částí systém.

Všichni jsme obviňováni za příliš mnoho ega, ale když se dostane do cesty týmu, je to problém.

9
MIA

Dobrý chytrý - vysoký poměr mezi chytrými řádky kódu oproti řádkům v jiné než chytré alternativě. 20 řádků kódu, který vám ušetří při psaní 20000, je velmi chytrý. Dobrý chytrý je o tom, jak si ušetřit práci.

Bad Clever - nízký poměr mezi řádky zapsaného kódu a řádky uloženého kódu. Jeden řádek chytrého kódu, který vás ušetří při psaní pěti řádků kódu, je Bad Clever. Špatný chytrý je o „syntaktické masturbaci“.

Jen na vědomí: Bad Clever je téměř nikdy nazýván "Bad Clever"; často bude cestovat pod přezdívkami „krásná“, „elegantní“, „stručná“ nebo „stručná“.

8
user8865

Musím přemýšlet o definici chytrého každého.

Osobně mám pocit, že jsem byl chytrý, když jsem přijal těžký, složitý problém a implementoval ho velmi jednoduchým a přímým způsobem vpřed, při zachování přijatelné úrovně účinnosti.

tl; dr Cítím se chytrý, když v průběhu kontroly kódu můj recenzent říká "wow, to bylo snazší, než jsem si myslel, že to bude", na rozdíl od "wtf je to všechno .."

7
Avatar_Squadron

Někdy jsem byl tak chytrý, že jsem se mýlil.

6
John

Kromě uvedených odpovědí na teorii se to často používá v kontextu příliš chytrého pro všechny ostatní.

Přecházejte mezi týmem s vysokou úrovní výkonu a týmem údržby na střední úrovni, abyste viděli skutečné rozdíly v tom, co je „příliš chytré“.

Vynechání argumentů teorie je příliš chytré často založeno na tom, s čím nejméně kvalifikovaní členové týmu mohou rozumně pracovat, takže je velmi příbuzný životnímu prostředí.

6
Bill

Výkonné, udržovatelné, včasné a levné jsou způsoby, jak měřím řešení. Myslím, že chytrý by mohl být také součástí řešení, pokud to negativně neovlivní tyto vlastnosti.

4
Heath Lilley

Pokud chytrý kód + množství komentářů nutných k tomu, aby byl srozumitelný kód <= jednoduchý kód, pak řeknu, že půjdu za chytrým kódem. Pokaždé.

Myslím, že problém nastává, když lidé, kteří píší „chytrý kód“, jej záměrně nedokážou řádně komentovat, protože pouze tím, že to bude zpočátku nepochopitelné, budou budoucí generace, které se s ním setkají, muset strávit čas „oceněním“, jak chytré to je.

3
thesunneversets

Připomíná mi citát, který jsem viděl připisovaný mnoha různým lidem, jak často jsou dobré citace.

Parafrázovat:

Jakýkoli inteligentní člověk může udělat jednoduchý komplex, vyžaduje genialitu, aby byl tento komplex jednoduchý.

Vezmeme-li složitou myšlenku a zjednodušíme ji tak, aby byla srozumitelná, ukazuje chytrost konstruktéra, ale jednoduchá myšlenka a její složitost ukazuje, že konstruktér chce být viděn jako chytrý.

3
Pickle Pumper

Podle mého názoru není chytrost sama o sobě problém. Obvykle si můžeme dělat záměny ohledně „chytrého“ (bez sarkasmu) a „insightfull“ kódu. Co považuji za problém, je skutečnost, že obvykle „chytrý“ (se sarkasmem) kód obsahuje implicitní neviditelné požadavky, což ztěžuje ladění a udržování v průběhu času.

Existuje několik známých algoritmů, které jsou chytré. Quicksort je jedna, IMO.

Kód „chytrý“ (se sarkasmem) obvykle vytváří předpoklady o nastavení proměnných a stavech systému, které jsou prakticky odpojeny od „chytrého“ kódu (jako dříve otevřené soubory, síťová připojení, databáze atd.).

Množství dat, která musíte načíst do mozku, abyste správně udrželi „chytrý“ kód, je obvykle velké, aby měl dobrý poměr nákladů a přínosů.

2
Machado

Pokud je „chytré“ řešení obtížné zjistit, nemělo by se použít. Například, pokud prostřednictvím vedlejších účinků můžete najmout komplexní výpočet na jednom řádku, je to chytré. Ale pokud to trvá hodinu, než někdo jiný přijde na to, co na světě jste udělali, je to příliš chytré.

2
Michael K

Znám chlapa; je to pravděpodobně ten nejskvělejší člověk, kterého jsem kdy potkal. Je to určitě neuvěřitelný kodér, asi lepší než kdykoli v mém životě, co se týče pouhého programování. Píše kód, jako by psal dokument aplikace Word, a může převrátit propojený seznam, jako byste tomu nevěřili. Pokud chcete mluvit o psaní nějakého vážně složitého kódu, je to váš muž a pokud narazím na neuvěřitelně těžký problém, vždy se na něj obracím. Práce na projektu s ním v týmovém prostředí je však nesnesitelná. Není schopen přímo zacílit na obchodní problém a poskytnout mu logické, efektivní a stručné řešení. Pro něj by byl kódový výpis 1000 řádků lepší než 100. Namísto použití nástrojů, které mu byly poskytnuty prostřednictvím IDE nebo framework), hodí svůj vlastní super optimalizovaný nástroj. vše v pořádku a dobře, s výjimkou případů, kdy na něj ostatní členové týmu čekají, aby něco dokončili, nebo máme termín.

Zatímco obdivuji jeho schopnost dělat tyto složité věci, potřebuji někoho, kdo dokáže problém vyřešit a jít dál. Není to skvělé říkat, nebo přiznat, ale někdy v obchodním prostředí je všechno všechno a vy musíte problém jen vyřešit a vyrazit se svým životem, vždy se k němu můžete později vrátit a peklo z něj vylepšit, aby se zlepšilo váš kód. Existuje úzká hranice mezi chytrostí a bolestí v zadku. Moje motto pro můj tým je vždy to, co je nejjednodušší možné věci, která v této situaci bude fungovat a odtamtud půjde. Někdy jednodušší není vždy odpověď, ale je to zatraceně dobré místo, kde začít.

1

„Chytrý“ v této souvislosti znamená „příliš chytrý pro své vlastní dobro“, tj. Něco, co funguje nyní, ale bude to noční můra, kterou budeme později chápat a změnit.

Zejména pokud je to trik, který využívá nejasný rys programovacího jazyka, nebo využívá divné vedlejší účinky, nebo je to opravdu bizarní způsob řešení problému v cílovém jazyce.

1
Andres F.

Protože to, co vypadá jako chytrost vývojáři ve výbuchu kreativity, může jednoduše předat jako nepořádek a prostě být nečitelný, neudržitelný) blok temné hádanky pro ostatní.

Stále je to pěkný, chytrý a dobře fungující blok hádanek, ale pokud máte zkušenosti, často si uvědomíte, že to bude stát vaše podnikání (ne vy, vývojář) mnohem více, aby si tuto věc udržel na střední úrovni - nebo dlouhodobé. Takže raději zklidníte nadšení vašich kolegů vývojářů, když je unesou.

Samozřejmě kromě toho, jestli je tu chytrost ospravedlnění. A pokud existuje dobrá dokumentace, která je součástí zmatené věci, kterou jste právě napsali. Komentoval jsi ten chytrý kousek kódu, že? Vysvětlete svůj úmysl, proč to musí být a jak se chová?

Pokud neexistuje ospravedlnění, pak je to pravděpodobně jen předčasná optimalizace, přepracování nebo problém typu YAGNI. Pokud je potřeba 15 úrovní indirection dělat něco jednoduchého, pak existuje dobrá šance, že spadáte také do předchozích kategorií. A pokud to není zdokumentováno, pak je to jen problém.

Skvělý kód by neměl vyžadovat, aby byl správce vždy na 100%, aby mu porozuměl. Dobrý kód je chytrý. Skvělý kód může být téměř stejně účinný, ale lepší v mnoha dalších aspektech. Skvělý kód by neměl vyžadovat IDE s 15 zobrazeními), aby bylo možné sledovat design vaší aplikace.

Poznámka: Hej, napsal jsem pár věcí, které jsem považoval za chytré, ale které vytáhly WTF? Z - pokud ne mých spoluvytvářečů - z úst mého manažera. Musím se na to podívat z jejich pohledu.

1
haylem

Mám sklon být chytrý, ale snažím se být elegantní.

Vypracujte kód nyní, který se ostatní nezkoušejí vyhnout později.

1
kevpie

„Chytrý kód“ je jakýkoli kód, pro který programátor musel myslet opravdu tvrdě nebo ho použít k napsání nějaké pokročilé dovednosti. Problém s tím ignoruje potřebu určité „chytré marže“, nejlépe vyjádřenou Brianem W. Kernighanem:

"Ladění je na prvním místě dvakrát tak tvrdé jako psaní kódu. Pokud tedy kód napíšete co nejchytřejší, nejste ze své podstaty dost chytří, abyste jej mohli ladit."

1
Alex

Toto je moje chápání problému na základě mých zkušeností a dalších odpovědí:

  1. Kód, který se chytře píše, ale vychází čitelný a udržovatelný, se nepovažuje za škodlivý. Většina vývojářů by však tento druh kódu neřekla „chytrý“; mohou používat jiný termín jako „elegantní“. O tom, zda takový kód existuje, může nebo nemusí existovat debata.
  2. Výrobní kód, který vyžaduje značné množství času a úsilí k porozumění i zkušenému vývojáři, který je obeznámen s tímto jazykem, je „chytrý“ a každý jej považuje za škodlivý.
  3. Výrobní kód, který vyžaduje značné množství času a úsilí nezkušených vývojářů, je některými považován za škodlivý. Odpovědi jsem viděl obousměrně a spolupracoval jsem s vývojáři, kteří výslovně řekli, že by raději nechali všechno „nejnižší společný jmenovatel“.
1
Larry Coleman

Obvykle, když potřebujete být „chytrí“, je možné vyřešit problém v kódu. Pokud je řešení a není příliš přímočaré, pak při převzetí určitých podmínek (které mohou být 100% správné v době psaní kódu), získáte spoustu zmatených tváří nebo jiných podivných vedlejších účinků.

Chytrá == matoucí == špatná :( Ale je to také úžasné, protože jsem je použil pro praktická řešení omezených problémů.

0
user2528

Dávám přednost jednoduchým řešením, opravdu se mi líbí cesta Ruby=======================================================================). shrni to.

Pamatuji si, že jednou jsem použil 1 seznam místo 3 a vytvořil jednu velkou funkci, kterou bylo velmi obtížné udržovat/měnit.

v dnešním světě nemusíme obětovat čistotu kódu za výkon (kromě c ++ nemusí, ale budou).

0
IAdapter

Přepisování kontextu a snazšího porozumění:

"Ladění je na prvním místě dvakrát tak tvrdé jako psaní kódu. Pokud tedy kód napíšete co nejchytřejší, nejste ze své podstaty dost chytří, abyste jej mohli ladit."

To, co zde Brian Kernighan napsal, zjevně odkazuje na konvoluci a omylem použil chytré slovo.

"Ladění je na prvním místě dvakrát tak tvrdé jako psaní kódu. Pokud tedy napíšete kód co možná nejvíce [spletitý], podle definice nejste dost chytří na to, abyste jej mohli ladit."

Konvoluce:

A thing that is complex and difficult to follow.

Chytrý:

Showing intelligence or skill; ingenious

Vzdělaní programátoři vědí, že jednoduchý kód je důmyslný. Kód, který je co nejchytřejší, by měl být podle definice jednoduchý. Vzdělaní programátoři se také vyhnou práci a psaní spletitého kódu, jako je mor. Kdykoli budou mít šanci, změní proměněný kód na chytrý kód. Kód obvykle začíná spletitý a přistupuje k chytrosti, protože znalosti o doméně a porozumění lidské kognitivní schopnosti v programování je lépe pochopeno na základě zkušeností a sdílených znalostí.

Vzhledem k popularitě tohoto citátu a vzhledem k tomu, že Brian Kernighan je v tomto odvětví docela populární, má toto zneužití slova negativní sociální dopad a já bych upřímně rád viděl to, co oslovil sám člověk. Před napsáním tohoto článku jsem se snažil zjistit, jestli mu nemohu jednoduše poslat e-mail, ale nemohl jsem najít žádné e-mailové kontaktní údaje, které jsem pochopil :(.

Negativním sociálním dopadem, který jsem viděl, jsou ostatní programátoři, kteří vylučují své chytřejší vrstevníky, protože nyní vidí chytrost jako problém. Skutečným problémem jsou hloupí vrstevníci, kteří si myslí, že jsou chytří tím, že dělají věci novým unidiomatickým způsobem, a neustále vymýšlejí nové věci, když není výhoda namísto získání a porozumění větší společnosti a opětovného využití chytrých nápadů, jak je to jen možné.

Musím objasnit, že často získání porozumění je obtížnější než vymyslet si vlastní. Vzhledem k obvyklému problému v odvětví budou nerealistické termíny vynalézání vlastního problému menšího výklenku použity k úspoře času. Toto je založeno na pozorování, že užitečné, opakovaně použitelné věci se obvykle zaměřují na větší výklenek nebo poskytují užitečnou abstrakci pro vynález. Je také založeno na fakt, že lidé se zaměřují na velké výklenky, aby vydělali více peněz, kdy často je použití nástroje extrémně obtížné kvůli složitosti spojené s vytvářením něčeho použitelného pro širokou oblast aplikací.

Dalším negativním sociálním dopadem je to, že brání pokroku a touze porozumět, protože v našem egocentrickém světě budeme okamžitě odmítat vlastní nepochopení a odepsat kód jako spletitý, i když, jakmile jednou pochopíme, je myšlenka skutečně docela chytrý.

TODO Chtěl bych citovat některé reference, ale také bych ráda chybějící odkazy nebránila mé schopnosti sdílet informace, takže budu rychle citovat to, co si pamatuji jako zdroje svých informací a možná najdu skutečné informace den (nebo ho najdete pro mě! :)

  • Guido Van Rossum mluví o smyčkách událostí ao tom, jak jim porozuměl
  • Zaměstnanec GitHub, který uvedl, že se vyhýbá najímání chytrých lidí na Y-Combinator
  • Většina diskusí a učení, které se děje v komunitě Python.) Python komunita je obzvláště kritická vůči novým nápadům, ale neodmítá nové nápady, které dělají) nerozumíte z ruky a obvykle můžete vidět funkce, které byly zpočátku považovány za spletité, vidět světlo dne jako hlavní jazykovou funkci/balíček.
  • Moje vlastní zkušenosti a profesionální názor na základě mých 10000 pozorování nohou. Nemůžu však opravdu vidět specifika, která by se měla osvítit od celé cesty tam nahoru :( Doufejme, že vaše zkušenosti a pozorování vám řeknou to samé a někdo jiný může komentovat níže, aby dal této odpovědi nějaké zásluhy.

Nebojte se přidat své vlastní citace! Nebojte se přidat do mého textu čárky. Už nějakou dobu jsem neobnovil své znalosti používání čárky v angličtině ...

0
Derek Litz