Jak se naučit hackovat

Original page: http://www.catb.org/~esr/faqs/hacking-howto.html

Eric Steven Raymond

Thyrsus Enterprises

Copyright © 2014 Eric S. Raymond

Historie revizí
Revize 1.2 2014-11-30 esr
Nová sekce o bytí originální.
Revize 1.1 2014-11-23 esr
Začleněna zpětná vazba od G+, včetně dobrých návrhů Peter da Silva a John D. Bell.
Revize 1.0 2014-11-21 esr
Počáteční verze.

Obsah

Co je to hackerství?
Fáze učení, jak hackovat
Přírůstkový hackerský cyklus
Rozvíjení smyslů pro design
Být originální

Co je to hackerství?

„Hackování“, o kterém budeme v tomto dokumentu hovořit, je průzkumné programování v prostředí s otevřeným zdrojovým kódem. Pokud si myslíte, že „hackování“ má co do činění s počítačovým zločinem nebo porušením bezpečnosti, a přišli jste sem, abyste se toho dozvěděli, můžete teď jít pryč. Tady pro tebe není nic.

Hackerství je především[1]  styl programování, a podle doporučení v tomto dokumentu může být efektivní způsob, jak získat univerzálních znalosti programování. Tato cesta není zaručeno, že práce pro každého; zdá se, že fungují nejlépe pro ty, kteří začínají s nadprůměrným nadáním pro programování a spravedlivého míru duševní flexibility. Lidé, kteří úspěšně učí tento styl mají tendenci stát se generalists s dovednostmi, které nejsou pevně vázány na konkrétní doménu aplikace nebo jazyka.

Všimněte si, že člověk může dělat hackerství, aniž by byl hacker„Hackerství“, obecně řečeno, je popis způsobu a stylu; „Hacker“  znamená, že jste zaseknout, a jsou rovněž spojovány s určitou kulturou nebo historickou tradici, která používá tuto metodu. Správně,  „hacker“  je honorific propůjčený jinými hackery.

Hackerství nemá dost formálního aparátu, aby mohl být plnohodnotnou metodologií ve způsobu, jakým je tento termín používán v softwarovém inženýrství, ale má určité vlastnosti, které ho mají tendenci odlišit od jiných stylů programování.

  • Hackerství se provádí na svobodný software. Dnes jsou hackerské dovednosti individuální mikroúrovní toho, co se na sociální makroúrovni nazývá „vývoj otevřeného zdroje“.[2] Programátor pracující v hackerském stylu očekává a snadno používá peer review zdrojového kódu ostatními, aby doplnil a zesílil své individuální schopnosti.
  • Hackerství je lehký a průzkumný. Pevné procedury a propracované specifikace a-a priori nemají v hackování místo; místo toho je tendencí to vyzkoušet a najít s rychlým uvolněním tempa.
  • Hackerství klade velký důraz na modularitu a opětovné použití. Ve stylu hackování se nikdy nepokoušíte napsat kód, který lze použít pouze jednou. Předsudky směřujete k vytváření obecných nástrojů nebo knihoven, které lze specializovat na to, co chcete, zmrazením některých argumentů/proměnných nebo zadáním kontextu.
  • Hackerství upřednostňuje šrot a přestavbu před opravou a rozšířením. Nezbytnou součástí hackování je nemilosrdně vyhodit kód, který se stal příliš komplikovaným nebo krutým, bez ohledu na to, kolik času jste do něj investovali.

Hackerský styl úzce souvisí s technickou tradicí operačního systému Unix[3]

V poslední době se ukázalo, že hackerství se dobře prolíná se stylem „agilního programování“. Agilní techniky, jako je párové programování a celovečerní příběhy, se snadno přizpůsobí hackerství a obráceně. Částečně je to proto, že vůdci agilního myšlení byli ovlivňováni komunitou open source. Od té doby však došlo k přenosu také v opačném směru a projekty s otevřeným zdrojovým kódem stále více přijímají techniky, jako je vývoj založený na testech.

Fáze učení, jak hackovat

Naučit se skládat hudbu má tři fáze. Nejprve se musíte naučit základní mechanické technice nástroje – prstokladu a jak hrát na stupnici. Pak musíte trénovat ucho, abyste porozuměli hudebním vzorcům. Nakonec se musíte naučit, jak kombinovat hudební vzory do původních výtvorů. Hackerství je podobný.

Hackerským ekvivalentem prstokladu je učení schopností programovacích jazyků a mechaniky používání nástrojů, jako jsou editory, tlumočníci a kompilátoři. (Pokud nechcete pochopit tyto pojmy, viz UNIX a Základy internetu JAK). Budeme se neměla vztahovat na mechaniku i zde se liší moc podle toho, co jazyk, který používáte. Výukové programy pro všechny jazyky budete chtít používat, jsou k dispozici na webu; použijte vyhledávač.

Ekvivalentem hracích vah je psaní malých programů samostatně. Bohužel, hraní váhy (a) vás neučí nic o hudbě a (b) je nuda jako peklo. Podobně ani psaní hraček nemá tendenci vás naučit mnoho o hackování a (b) bude mít tendenci vás de-motivovat, pokud program okamžitě nevyřeší problém, na kterém vám záleží.

Většina formálních programovacích instrukcí se dostává do hraní měřítka a zastávek. Má tedy tendenci produkovat kodéry, kteří jsou ve vzájemné spolupráci špatní a nemají ekvivalent hudby bez ucha – špatný pocit softwarového designu a architektury.

Přírůstkový hackerský cyklus

Existuje lepší způsob, jak se učit. Říkám tomu cyklus přírůstkového Hackerstvíu.

  1. Za prvé, vybrat si program, který dělá něco, co je zajímá. V ideálním případě by to být program, který používáte pravidelně a mají názory. Příští nejlepší věc je program, který normálně nepoužívají, ale že dělá něco, co si myslíte, že je zajímavé. Z tohoto učení metoda fungovala, měli byste se vyhnout snaží zaseknout na kódu, který vás nudí.Který zvolíte program nemá dělat nic vážného. Mnoho programátorů si zdokonalovali své dovednosti zlepšením hry, které si oblíbilo. Tu nevýhodu, jen je to, že moderní hry jsou často docela velké a komplikované, a může být mimo dosah syrové začátečník. Z tohoto důvodu možná budete chtít prozkoumat jeden z klasických textových orientované hry, které stále přežívají; NetHack je ukázkovým příkladem, a existuje mnoho dalších.
  2. Nemáte-li již vědí program, naučit se ji používat. Přečtěte si dokumentaci. Vyvinout mentální model, jak to funguje.
  3. Vyzvednout malou funkci změnit nebo doplnit.
  4. Vyhledávat kód, dokud nenajdete tu část, kterou potřebujete upravit.Poznámka: měli byste konkrétně  není  pokusu o přečtení celého programu. Budete prostě vyčerpat a zmařit sami, pokud to uděláte. Místo toho použijte strukturu modulu kódu na nulu jen na část, kterou je třeba pochopit. Cestou se naučíte něco o tom, jak společně celý program se hodí.Je to dobré cvičení doplnit vysvětlující poznámky a poznámky ke kódu, jak si přijít na to, co o tom. To pomůže vaší paměti, a pomůže vám uspořádat své myšlenky stejně.
  5. Ujistěte se, test, ladit, a dokumentovat změny.Doložení změny je důležité. Máte-li rozvíjet zvyku dělat tak brzy, budete produkovat mnohem kvalitnější práci.
  6. Odeslat změnu jako záplata na program správců. Viz verze softwaru praxe Postupy pro tipy, jak to udělat efektivně a zdvořilý způsob.Původně jsem popsal jako volitelný krok; moudrý přítel upozornil, že pravděpodobně bych neměl. Solitary Noodling na vašem přístroji je všechno velmi dobře pro praxi, ale hudba je dokončen a ověřen, když kreativita v ní je slyšet od jiných lidí. Solitary Noodling na počítači je stejně dobré pro praxi, ale Hackerství je dokončen, když ostatní lidé používat to, co jste napsal. Že v reálném světě test je důležitý.Někdy (častěji, pokud jste právě začínáte) vaše záplaty budou zamítnuty. Musíte se naučit vyrovnat se s tím. To neznamená, že jste odsouzeni k neúspěchu ve své snaze; Obvykle to, co to znamená, že jste nečetli kód dost opatrně, nebo (stejně jako obvykle) jste vynechal něco důležitého aboout kultury a postupů skupiny developmemt se snaží přispět k. Tyto chyby mohou být opraveny.
  7. Nyní, zeptejte se sami sebe: mohu pochopit celý tento program?Pokud ano, máte hotovo. Pokud ne, vraťte se do kroku 3. Tentokrát vyberte jiný a možná i mírně složitější věc ke změně.

Smyslem tohoto cvičení je naučit se, jak se plížit k problému porozumění programu, spíše než se snažit řešit všechny složitosti najednou. Když několikrát projdete tuto smyčku, postupně si ve své mysli vytvoříte úplnější reprezentaci toho, jak celý program zapadá k sobě. V určitém okamžiku dosáhnete prahu, ve kterém tomu všem rozumíte – nebo to stačí pro jakýkoli váš konečný účel.

Rozvíjení smyslů pro design

Chcete-li trénovat, začněte malý. Pokud je to možné, nejprve proveďte inkrementální hackerský cyklus jako cvičení na velmi malých programech nebo skriptech, 10-50 řádků. To může být obtížné najít, protože většina programů jakéhokoli použití je větší než toto. Většina malých programů jsou skripty ve shellu, Perlu, Pythonu nebo Tcl; to je zvláštnost, kterou je třeba hledat, když pro ně prochází web.

Pokud jste provedli přírůstkový hackerský cyklus na několika velmi malých programech (nebo pokud máte smůlu, že nenajdete vhodné velmi malé), zkuste to na mírně větších programech. Hledejte kódové základny v rozsahu 100–500 řádků.

Když zvládnete tuto úroveň, jděte na řád řádově 1 000 – 5 000 řádků. Než zvládnete úroveň 1K-5K, zadáte spodní hranici rozsahu schopností toho, co je obvykle považováno za zkušeného programátora.

Při nebo před úrovni 1K-5K, měli byste občas začne upozornění, že jste, který svědí měnit strukturu či organizaci programu, a to nejen na jeho vlastnosti. Můžete najít sami na mysli „Tento kód je ošklivý“ a mají pocity dělat to hezčí a čistší.

Když se to stane, věnovat pozornost. To je váš návrh smysl se snaží probudit. Nespěchejte na opravu v jiné funkci. Namísto toho začínají objevovat program, který vám umožní tuto svědí na vyšší úrovni. Nyní by mohl být ten správný čas, aby se pokusili číst veškerý kód, ale nenechte se, pokud je to možné není příliš znepokojen; Většina programů jsou prostě příliš velké a nepříjemné pro polykal je dolů najednou do práce. Jen se snaží dostat přilnavost na to, co potřebujete vědět, aby se čisté věci.

Nyní vstupujete do střední části učení se hackování. To nezahrnuje pouze změnu vlastností viditelných na povrchu, ale také to, co se nazývá „refaktoring“ – interní reorganizace kódu tak, aby byl čistší a měl lepší architekturu (lepší skrytí dat, užší rozhraní mezi různými částmi, více funkční oddělení mezi moduly).

Jakmile je aktivován váš smysl pro design (váš ekvivalent hudebního ucha), často zjistíte, že každý program, na kterém pracujete, začnete refactorovat stejně rychle jako třetí nebo čtvrtý cyklus přírůstkového Hackerstvíu.

Ve skutečnosti to je přesně to, jak kvalifikovaní hackeři normálně přistupují k učení kódu velkých programů – tím, že se pokoušejí ovládat a refactorovat a přepisovat, dokud se nevzdají toho, co se děje. Děláte malé změny, abyste se naučili, jak udělat velké.

Pokud úspěšně refaktorujete tři nebo čtyři velké systémy, nebudete rozvíjet pouze silné programovací dovednosti, budete na cestě k něčemu mnohem vzácnějšímu a mocnějšímu: stát se softwarovým architektem, který dokáže udělat originální design velkých softwarových systémů.

To je jediný způsob, jak vím, pro začínající architekti softwaru trénovat jejich design smysl. To může být jediný způsob, jak je zde.

Být originální

V mé analogii s hudbou jsem řekl, že se nakonec musíte naučit, jak kombinovat hudební vzory (které jste se naučili poslechem hudby a cvičením) do původních skladeb. Tento způsob pečlivého popisu kreativity jsem si vybral, protože se vztahuje na software ještě více než na hudbu.

Než si přečtete a vstřebáte lekce mnoha kódů, pravděpodobně nebudete mít ve své hlavě knihovnu vzorů, kterou musíte být kreativní na stupnicích větších než velmi malých. Jedním z cílů cyklu přírůstkových hackerů je ponořit se do mnoha kódů – při zvyšování měřítka složitosti – za okolností, které vám poskytují motivaci pokračovat ve čtení.

Nakonec povedete skupinové projekty a uděláte zcela originální práci. Necítíte, že to musíte spěchat nebo to nutit; pokud dáte svým dovednostem čas na zrání, vaše první originální kompozice bude lepší. Efektivním přispěním k existujícím open-source projektům se naučíte dovednosti (včetně komunikačních dovedností), které potřebujete ke spuštění vlastních projektů.


[1]  Je samozřejmě možné proniknout jiné než software věci, a lidé v tvůrce kultuře to. Ale termín „Hackerství“ vznikl mezi lidmi, kteří se vrtal se softwarem a stále vyzařuje odtamtud. Kromě toho, že autor není opravdu kvalifikován psát o studium dalších druhů.

[2]  V dřívějších dobách se lidé hacknutý na uzavřeném zdroji, kdy by mohly, protože tam byl žádná alternativa. Věci se změnily k lepšímu.

[3]  Před roce 1983 nebo tak nějak souvislost mezi Hackerství a Unix byl méně silný, ale podrobnosti o tom, jak se změnilo, jsou nyní hlavně relevantní pouze pro historiky.