it-swarm-eu.dev

Co je to hack?

Často slyším spolupracovníky, kteří si říkají: „To je hrozný, hrozný hack.“

Z toho si můžu vzít, že to není dobré. Když jsem se jich zeptal, jestli to funguje, říkají „ano, ale není to dobré“. Znamená to, že to není dobré řešení? Jak je špatné řešení, pokud funguje? Je to díky dobré praxi? Nebo neudržitelné? Používá jako součást vašeho řešení vedlejší účinek kódu?

Je pro mě zajímavé, když je něco klasifikováno jako hack. Jak to dokážete identifikovat?

55
dustyprogrammer

Aplikuje dočasnou pásmovou pomoc na velkou zející ránu. Prozatím je to opraveno, ale později to způsobí ještě více problémů.

Příklad, který jsem nedávno viděl: Chcete osobu jmenovanou "Jim", aby se vždy objevil první v abecedním seznamu. Chcete-li to rychle vyřešit, přejmenujte ho na " Jim". To je hack, který vás jistě vrátí, aby vás později kousl.

98
JD Isaacks

Každé technické rozhodnutí je kompromisem mezi okamžitými náklady a zpožděním a následnými náklady a technickým dluhem.

Hack je situace, kdy první z nich je upřednostňován, zatímco je druhý akceptován jako důsledek.

Nezkušení vývojáři (částečně kvůli způsobu fungování systému technického vzdělávání) se zaměřují na první a nemají dostatečné zkušenosti k tomu, aby ho skutečně pochopili nebo odhadli.

Zkušení vývojáři to dělají, ale z různých důvodů (z mnoha legitimních) zvolte první.

Termín hack téměř vždy znamená úmysl dočasně vyřešit problém a „to hned poté“, ale zkušení vývojáři vědí, že nejtrvalejšími věcmi v kódu jsou dočasné hacky.

60
Uri

Jak je špatné řešení, pokud funguje?

Zvaž toto

2 + 2 <-- Correct.  Elegant.  Simple.

(2/1 + 2/1) * 1/1 <-- Also Correct.  Lots of useless weird code.  

Druhým příkladem však může být hack, který si zvykne kvůli nevědomosti o lepší praxi nebo předpokladu, který způsobil /1 vypadalo jednodušší v té době nebo chyba v knihovně, která udělala /1 pracovat správně.

Je to díky dobré praxi?

Ne. Hacks jsou "účelný" kód. Existují tři čtyři příčiny.

  • Neznalost principů správného návrhu. (tj. SOLID)

  • Arogance (tj. Chybné předpoklady) ohledně API nebo jazykového konstruktu.

  • Skutečné chyby, které nejsou vyřešeny, ale jsou vyřešeny.

  • Management přepíše dobré předpoklady konstrukce a korekce. „Rozpočet“ je společné zdůvodnění, ale v zásadě jde o jedno z výše uvedených tří (nevědomost, aroganci nebo chyba) s netechnickou kořenovou příčinou.

Nebo neudržitelné?

O to tu jde. Hack je založen na nevědomosti, chybách nebo předpokladech.

Používá jako součást vašeho řešení vedlejší účinek kódu?

To může být příkladem nevědomosti nebo falešného předpokladu.

20
S.Lott

Hack v programovacím kontextu by byl ekvivalentem toho, že něco opravíme kachní páskou nebo žvýkačkou.

Hack velmi často zahrnuje použití některých nezdokumentovaných a nepodporovaných funkcí, které by se mohly v budoucnu změnit a poškodit váš kód. Mohou také zahrnovat pevně zakódované hodnoty.

Hack obvykle může být také dočasným řešením v kódu pomocí nějaké knihovny/služby, namísto řešení základního problému. Pokud je později vaše kontrola mimo, může být hack jediným řešením.

15
vartec

Termín je občas používán s opačnou konotací, jako v „skvělém hacku“. Jen proto, že je mnohem běžnější, než dělat něco brilantního, je mnohem běžnější slyšet o hrozných hackech než brilantních hackech, ale slyšel jsem termín používaný oběma způsoby.

„Hack“ používaný v pozitivním smyslu v zásadě znamená elegantní řešení, které problém řeší neočekávaným a zvláště chytrým způsobem. Negativní a pozitivní významy jsou vlastně trochu podobné, protože brilantní hack často zahrnuje využití nechtěného aspektu technologie.

11
jhocking

Řešení, které funguje právě teď, ale pravděpodobně z dlouhodobého hlediska pravděpodobně způsobí problémy.

Příklad: potřebujete vygenerovat dokument HTML a dynamicky vyplňovat některé hodnoty. Správným způsobem, jak toho dosáhnout, je použít jeden z nástrojů, které jsou pro tento účel skutečně navrženy, například Freemarker, XSLT nebo JSP. Ale nemůžete použít nic z toho, nebo prostě nemůžete být obtěžováni dělat to správně, takže píšete něco takového:

public String getGreetingPage(String name) {
    return "<html><body>Hello, "+name+"!</body></html>";
}
10
Mike Baranczak

Hack je geniální řešení problému, často v závislosti na out-of-the-box myšlení a využití neočekávaných skutečností o životním prostředí. O archetypickém hacku se říká, že diváci souhlasí s tím, že je to geniální, ale nedokáže přijít na to, zda je úžasný nebo hrozný. To je druh věcí, které ve svých opravách údržby nechcete.

Hack, který řeší problém, bude velmi pravděpodobně záviset na detailech prostředí nebo na nezdokumentovaných funkcích nástroje nebo na něčem podobném. Pravděpodobně to bude křehké řešení, které teď funguje, ale pravděpodobně se zlomí, když se něco změní. Může být obtížné pochopit, jak to funguje, a každý programátor údržby nenávidí těžko pochopitelný kód. Může to mít vedlejší účinky, které zatím nic neublíží, ale v budoucnu způsobí problémy v dokonale dobrých kusech kódu v určité vzdálenosti, a to může být noční můra.

9
David Thornley

Hack aplikace Word je zneužita. Pokud chcete opravdu získat trochu historie, můžete to na Wikipedii. Hack je Slovo, které popisuje proces vyladění věcí, aby udělali něco, co neměli dělat. V kontextu elektrotechniky je to dobré. Na Wikipedii je k tomu lepší popis.

Nyní, v kontextu informatiky. Hack je obecně špatný. Ano, funguje to, ale obvykle to znamená, že programátor napsal nejednoznačný kus kódu, který není v souladu s návrhem softwaru a který zamění každého programátora, který musí tento kód přečíst. Čas programátorů je samozřejmě drahý, takže jako manažer chce mít nejsnadněji udržovatelný software. Totéž platí pro programátory. Také hackeři mají tendenci zlomit něco jiného v softwaru.

Je to soudní rozhodnutí, zda přijmout hack, nebo ne. Přinejmenším chcete, aby vrchní softwarový inženýr schválil hack, protože má více zkušeností a je schopen učinit vzdělanější rozhodnutí. Rozhodně nechcete, aby juniorští chlapi rozhodovali o přijímání hacků. Mohou přijít s jedním a diskutovat se staršími muži, zda výhody stojí za to, že si udržujete hack.

9
Erion

Toto je hack, jak najdete na thereifixedit.com .

Hack

Ve skutečnosti je všechno na tomto webu hack.

Hacke jsou důmyslné a odvážné použití některých věcí z jejich kontextu.
Krása hacku spočívá v tom, že máte daný problém a nástroje, které ho nikdy neměly řešit, ale problém vyřešíte pouze pomocí těchto nástrojů (namísto získání těch správných). Jsou chytré, rychlé a zábavné. Nevýhodou je, že výsledky jsou často křehké a nebezpečné pro cizince.
Myslím, že pokud rádi řešíte své problémy jako na obrázku, není problém. K problému dochází, když řešíte problémy jiných lidí, jako je tento. V tomto případě by se pravděpodobně dostali elektrickým proudem nebo spálili nebo tak něco.

Při vývoji softwaru si přejete, aby váš kód zvládli ostatní (což zahrnuje vaši budoucnost) bez ekvivalentu smrtelného zranění. Jak řekl Dijkstra:

Příslušný programátor si plně uvědomuje omezenou velikost své lebky. Proto přistupuje ke svému úkolu s plnou pokorou a vyhýbá se chytrým trikům jako mor.

A hacks patří mezi nejchytřejší triky.

Hacks tikají časované bomby někde ve vašem kódu, protože ty obyčejné jsou neodmyslitelně založeny na příliš mnoha předpokladech („právě to děláme“ je upřednostňováno před správným oddělením). Jakmile tyto předpoklady přestanou platit, celý váš systém se může rozpadnout, aniž byste měli ponětí, co se stalo.

6
back2dos

Tento termín není příliš přesný, ale pravděpodobně se týká rychlého a špinavého řešení problému, který je obtížné správně vyřešit. Dotčené řešení pravděpodobně funguje, ale nejspíš není velmi dobrá implementace, možná mají jemné chyby, možná nějaké malé ) známé chyby a by měly být - přepracovány později, pokud to čas dovolí. Myslím, že to, co slyšíte, se nazývá „hack“, někdy se také nazývá „ kludge “.

Často vidím, jak se hacky stávají, když existují velmi omezená časová omezení pro dokončení úkolu, a je implementováno hackerské řešení, protože funguje „dostačující“ pro předání QA, s nadějí, že může být později opraveno. Bohužel to pozdější oprava/vyčištění se vždy nestane :(

Hack je obvykle nějaký kód, který zjevně poskytuje požadovaný výstup, ale sub-optimálním způsobem.

Obvykle používá nějaký nezdokumentovaný nebo nejasný rys jazyka/knihovny nějakým způsobem, který původce nechtěl, a tak zamlčel, co je záměrem.

Občas se provádí obejít nějakou chybu jazyka nebo knihovny, ale ve většině případů je hlavní příčinou obvykle nevědomost;

Pro kladivo všechno vypadá jako hřebík.

Věci, které se dělají kolem neefektivním způsobem, obvykle jak v prostoru, tak v čase, ale nakonec produkují požadovaný výstup, ale za cenu, a možné neznámé případy Edge bez testovatelnosti a bez údržby. Obvykle pramení z nedostatku základních pochopení logických nebo jazykových idiomů. Viz také „tvrdá cesta“.

Kód je obvykle něco, co by někdo s odpovídající zkušeností ani neuvažoval, nebo by musel přemýšlet dlouho a tvrdě, aby byl stejně komplikovaný a neefektivní jako kolo o hackování, které odhalil.

Příklady

Oprava systému Vista

Platnost ověření e-mail

Jednotky softwar

Neurčitá Hash

4
user7519

Jako vývojář front-endu trávím spoustu času, takže moje definice hacku je:

Řešení, které je založeno na důkladných znalostech chyb prostředí a nezdokumentovaného chování.

Prostředí může být váš rámec, webový prohlížeč, databáze, bankomat (bankomat), soudní řízení. Jakýkoli „systém pravidel“, kde znáte díru ve smyčce a využívá ji k vyřešení problému.

4
mefisto

Plešatá pneumatika funguje, ale nikdo by ji nenazval ideálním řešením vpíchnutí. Může to vést k horším problémům.

Obvykle bych považoval hack za rychlé a špinavé řešení okamžitého problému. Obvykle nemusí odpovídat běžné programovací praxi v programovací dílně (např. Použít hodně hardcodingu). Může to být i malá oprava.

Klíčovým důvodem, proč je to špatné, je, že a) může způsobit nepředvídatelné výsledky b) nemusí odpovídat původnímu návrhu dotyčného kódu, který způsobí problémy s údržbou. Podle mých zkušeností jsou hacky obvykle velmi špatně dokumentovány.

2
temptar

Krátkou definici, kterou jsem slyšel a respektoval:

"Řešení příznaku, který problém nevyřeší ve všech případech"

Ošklivý kód může nebo nemusí být hack. Příkladem 2 + 2 v jiné odpovědi není hack, je to ošklivé řešení kódu a špatné z hlediska porozumění kódu, ale ve všech případech vytváří správné řešení. Pomyslete na faktorovou rovnici v matematice - chování/vztah je v obou verzích identický a správný, ale forma je jiná. Hmm, faktor rovnice, refaktoror rovnice, kód refaktoru ... ne, žádná podobnost jsem si jistý :)

Příkladem jedné z dalších odpovědí na změnu křestního jména na „Jim“ je hack: řeší symptom (křestní jméno v seznamu je Jim), ale problém nevyřeší úplně (seznam není řazen) nebo prioritou jakýmkoli způsobem, který funguje pro všechny položky).

2
anon

Hacker dělá něco, co vrací očekávaný výsledek, ale dělá to podivným způsobem (obvykle způsobí zásah do výkonu).

Např.:

Úkol: Přenesení celé proměnné na dvojnásobek

Řešení: Použijte operátora obsazení. I.e .: dblVar = CType (intVar, Double)

Hack: Dělte dvojnásobkem. I.e .: dblVar = intvar/1.0

1
Onion-Knight

Hack signalizuje, že je to zrození, když odpovědný kodér prohlásí „Vrátím se a opravím to později“.

Vážně - hack v kontextu OP je něco, co dosahuje požadovaného výsledku, ale používá k tomu dočasnou nebo nespolehlivou metodu.

Další společná definice je technika, která využívá chování Edge k obcházení omezení/záruk na platformě.

Hack ve druhém kontextu má mezi „maverickem“ (číst: nebezpečný) kodéry hrdinů určitý oblázek ...

0
sunwukung

Představte si, že se vaše noha nakazila a musela být odstraněna, abyste přežili. Chtěli byste raději doktora rychle zaseknout sekerou, nebo ji chirurgicky odstranit po prozkoumání problému a výběru vhodných nástrojů, postupu atd.? Totéž platí pro software.

0
Josh Smith