How To Learn Hacking

Was ist Hacking?

Die „Hacking“ wir sprechen in diesem Dokument ungefähr ist explorative Programmierung in einem Open-Source-Umfeld. Wenn Sie denken, „Hacking“ etwas mit Computerkriminalität oder Sicherheit Brechen zu tun hat und hierher gekommen, um das zu lernen, können Sie gehen jetzt weg. Es gibt nichts für Sie hier.







Beachten Sie, dass man ohne Hacking kann tun ein Hacker zu sein. „Hacking“. allgemein gesprochen wird eine Beschreibung eines Verfahrens und Stil; „Hacker“ bedeutet, dass Sie hacken, und auch zu einer bestimmten Kultur oder historische Tradition gebunden, die diese Methode verwendet. „Hacker“ richtig, ist eine ehrende von anderen Hackern verliehen.

Hacking ist nicht genügend formales Gerät eine vollwertiges Methodik in der Art und Weise zu sein, der Begriff in der Softwaretechnik verwendet wird, aber es hat einige Eigenschaften, die sie neigen dazu, von anderen Arten der Programmierung zu setzen.

Hacking ist auf Open-Source gemacht. Heute sind Hacker-Fähigkeiten wird die Mikro-Ebene von dem, was „Open-Source-Entwicklung“ auf der sozialen Makroebene genannt wird. [2] Ein Programmierer in dem Hacker-Stil arbeitet erwartet und verwendet leicht Peer-Review des Quellcodes von anderen seine individuellen Fähigkeit zu ergänzen und zu verstärken.

Hacking ist leicht und explorato. Starre Verfahren und erarbeiten a-priori-Spezifikationen haben keinen Platz in Hacking; stattdessen ist die Tendenz, versuchen-it-and-find-out mit einem schnellen Freisetzung Tempo.

Hacking Orte einen hohen Wert auf Modularität und Wiederverwendung. Im Hacking Stil, versuchen Sie hart nie ein Stück Code zu schreiben, die nur einmal verwendet werden können. Sie Ausrichtung auf allgemeine Werkzeuge oder Bibliotheken zu machen, die in spezialisierte werden können, was Sie wollen, indem Sie einige Argumente / Variablen oder liefert einen Kontext Einfrieren.

Hacking favorisiert Schrott-und-wieder aufbauen über Patch-und-verlängern. Ein wesentlicher Teil des Hackens wirft rücksichtslos Code entfernt, die nicht allzu komplizierte oder crufty, geworden ist, ganz gleich, wie viel Zeit Sie in sie investiert haben.

Das Hacking-Stil wurde mit der technischen Tradition des Unix-Betriebssystem [3] in enger Beziehung

Vor kurzem hat sich gezeigt, dass Hacking mischt sich gut mit dem „agile Programmierung“ -Stil. Agile Methoden wie Pair Programming und Feature Geschichten anpassen leicht zu hacken und umgekehrt. Zum Teil ist dies, weil die frühen Vordenker der agilen von der Open Source Community beeinflusst. Aber es hat auch Verkehr in der anderen Richtung, da gewesen, mit Open-Source-Projekten zunehmend Techniken wie testgetriebene Entwicklung übernehmen.

Stages of Learning How To Hack

Lernen, Musik zu komponieren hat drei Stufen. Zuerst müssen Sie die grundlegende mechanische Technik eines Instruments erlernen - finger und wie Waage zu spielen. Dann müssen Sie Ihr Ohr trainieren musikalische Muster zu verstehen. Schließlich müssen Sie lernen, wie man musikalische Muster in originellen Kreationen rekombinieren. Hacking ist ähnlich.

Die Hacker-Äquivalent von Finger ist das Erlernen der Fähigkeiten von Programmiersprachen, und die Mechanik der Verwendung von Tools wie Editoren, Dolmetscher und Compiler. (Wenn Sie diese Bedingungen nicht verstehen, finden Sie unter Unix und Internet Fundamentals HowTo.) Wir werden nicht diese Mechanik hier decken, da sie zu viel ändern sich je nach welcher Sprache Sie verwenden. Tutorials für alle Sprachen Sie vielleicht verwenden im Internet zur Verfügung stehen; Verwenden Sie eine Suchmaschine.

Das Äquivalent von Spielen von Tonleitern schreibt kleine Programme, allein. Leider hat spielen Skalen (a) Sie etwas über Musik nicht lehren, und (b) wie die Hölle ist langweilig. In ähnlicher Weise zu lehren, nicht Spielzeug Programme schreiben Sie neigen dazu, viel über Hacking, und (b) neigen demotivieren Sie, es sei denn das Programm sofort ein Problem löst, die Sie interessieren.

Die meisten formalen Programmierauftrag wird zu Spielen von Tonleitern und stoppt. Somit neigt es Codierer zu erzeugen, die miteinander in Zusammenarbeit arm sind und haben das Äquivalent von keinem Ohr für Musik - ein schlechtes Gefühl für Software-Design und Architektur.

Der Incremental-Hacking-Zyklus

Es gibt einen besseren Weg zu lernen. Ich nenne es die inkrementelle-Hacking-Zyklus.







Zuerst ein Programm auswählen, die etwas tut, die Sie interessieren. Idealerweise sollte es sich um ein Programm, das Sie regelmäßig verwenden und haben Meinungen über. Die nächste beste Sache ist ein Programm, das Sie normalerweise nicht verwenden, aber das tut etwas, was Sie denken, ist interessant. Für diese Lernmethode zu arbeiten, sollten Sie vermeiden, Code zu hacken versucht, die Sie Bohrungen.

Wenn Sie nicht bereits das Programm kennen, lernen, wie es zu benutzen. Lesen Sie die Dokumentation. Entwickeln Sie ein mentales Modell, wie es funktioniert.

Wählen Sie eine kleine Funktion zu ändern oder zu ergänzen.

Suchen Sie den Code, bis Sie den Teil, den Sie brauchen, zu modifizieren, zu finden.

Hinweis: Sie sollten insbesondere nicht versuchen, das gesamte Programm zu lesen. Sie werden nur Auspuff und vereiteln Sie sich, wenn Sie das tun. Verwenden Sie stattdessen die Modulstruktur des Codes nur auf den Teil auf Null in Sie verstehen müssen. Auf dem Weg dorthin werden Sie Dinge darüber erfahren, wie das ganze Programm zusammen paßt.

Machen Sie, testen, debuggen und dokumentieren Sie Ihre Änderung.

Ihre Änderung Dokumentieren ist wichtig. Wenn Sie die Gewohnheit, dies zu tun früh entwickeln, werden Sie produzieren viel hochwertigere Arbeit.

Senden Sie Ihre Änderung als Patch auf die Programm-Maintainer. Finden Sie in der Software Release Praxis HOWTO für Tipps, wie dies zu tun in einer effektiven und höfliche Art und Weise.

Manchmal (oftener wenn Sie gerade erst anfangen) Ihre Patches werden abgelehnt. Sie müssen lernen, damit fertig zu werden. Es bedeutet nicht, dass Sie zum Scheitern verurteilt sind auf der Suche zum Scheitern verurteilt; in der Regel, was es bedeutet, ist, dass Sie den Code nicht sorgfältig genug gelesen haben, oder (wie in der Regel) haben Sie etwas Wichtiges aboout die Kultur und die Praktiken der developmemt Gruppe wollen Sie beitragen verpasst. Diese Fehler können repariert werden.

Nun fragen Sie sich: ich dieses ganze Programm verstehen?

Wenn ja, sind Sie fertig. Wenn nein, gehen Sie zurück 3. Dieses Mal zu dem Schritt, eine andere und vielleicht etwas schwieriger, was zu ändern wählen.

Der Sinn dieser Übung ist es zu lernen, wie das Problem zu verstehen, um ein Programm zu schleichen, anstatt zu versuchen, alle auf einmal von der Komplexität zu bewältigen. Wie Sie durch diese Schleife mehrmals gehen, werden Sie nach und nach eine vollständigere Darstellung im Kopf der Art und Weise das ganze Programm zusammen passt entwickeln. Irgendwann werden Sie einen Schwellenwert erreichen, in dem man alles verstehen - oder auf jeden Fall genug davon für was auch immer Ihr Endzweck ist.

Entwickeln Sie Ihre Design Sense

Wenn Sie die inkrementelle-Hacking-Zyklus auf mehrere sehr kleine Programme getan haben (oder wenn Sie Pech haben, sind keine geeigneten sehr kleine finden), versuchen Sie es etwas größere Programme auf. Geben Sie für Codebases im Bereich von 100 bis 500 Linien.

Wenn Sie dieses Niveau beherrschen, gehen Sie auf die Größenordnung, 1000-5000 Linien. Bis Sie den 1K-5K Niveau beherrschen, haben Sie das untere Ende der Fähigkeit Bereich von eingegeben, was in der Regel ein erfahrener Programmierer betrachtet wird.

Wenn dies geschieht, achten. Dies wird Ihr Sinn für Design versucht zu wecken. Hetzen Sie nicht ein weiteres Feature Patch in. Stattdessen starten Sie das Programm zu entdecken, dass Sie diesen Juckreiz auf einem höheren Niveau gibt. Nun könnte eine gute Zeit sein, um zu versuchen, den gesamten Code zu lesen, aber nicht allzu besorgt zu sein, wenn Sie nicht können; die meisten Programme sind einfach zu groß und chaotisch sie für gulping auf einmal an die Arbeit. Versuchen Sie einfach den Griff zu bekommen, was Sie wissen müssen, Dinge zu bereinigen.

Sie betreten nun den Zwischenabschnitt hacken zu lernen. Dabei geht es nicht nur oberflächlich sichtbare Merkmale verändern, sondern tun, was „Refactoring“ genannt wird - Reorganisation des Code intern, so dass es sauberer ist und hat eine bessere Architektur (besser Verstecken von Daten, schmaleren Schnittstellen zwischen den verschiedenen Teilen, mehr funktionale Trennung zwischen den Modulen).

Sobald Ihr Sinn für Design (Ihr Äquivalent musikalischen Gehörs) aktiviert ist, werden Sie feststellen, dass Sie oft jedes Programm starten Refactoring Sie arbeiten so schnell wie die dritte oder vierte Mal, um die inkrementelle-Hacking-Zyklus.

In der Tat ist dies genau, wie gut Hacker normalerweise nähern sich den Code von großen Programmen lernen - durch Bastelei und Refactoring und Umschreiben, bis sie verstehen was los ist. Sie machen kleine Änderungen, um zu erfahren, wie groß diejenigen zu machen.

Wenn Sie erfolgreich drei oder vier große Systeme Refactoring, werden Sie nicht nur starke Programmierfähigkeiten entwickeln, werden Sie auf Ihrem Weg zu etwas, das viel seltener und leistungsstark: ein Software-Architekt zu werden, einer, die ursprünglichen Entwurf von großen Software-Systemen tun.

Als Original

In meiner Analogie mit Musik, sagte ich, dass Sie brauchen, um schließlich zu lernen, wie musikalische Muster rekombinieren (die man durch das Hören von Musik und Üben Leistung gelernt hat) in Originalkompositionen. Ich habe mich für diesen Weg Kreativität sorgfältig zu beschreiben, weil es noch mehr Software gilt als es um Musik tut.

Bevor Sie die Lehren aus einer Menge Code gelesen haben und absorbiert wird, werden Sie wahrscheinlich nicht die Musterbibliothek im Kopf müssen Sie auf Skalen größer als sehr kleine, kreativ sein. Ein Zweck des Tuns des inkrementellen-Hacking-Zyklus ist, um sich in eine Menge Code zu tauchen - an Komplexität Skalen zu erhöhen - unter Umständen, die Sie mit Motivation bieten Lesen zu halten.

Schließlich werden Sie Gruppenprojekte führen und ganz originelle Arbeit. Fühlen Sie sich nicht, dass Sie dies eilen oder zwingen sie; wenn Sie Ihre Fähigkeiten Zeit geben, um zu reifen, Ihre erste Originalkomposition wird es besser sein. Durch einen wirksamen Beitrag zu bestehenden Open-Source-Projekte werden Sie lernen, die Fähigkeiten (einschließlich der Kommunikationsfähigkeiten), die Sie benötigen, um Ihre eigenen Projekte laufen.

[1] Es ist durchaus möglich, andere Dinge als Software zu hacken, und die Menschen in den Maker tun es. Aber der Begriff „Hacker“ entstand unter Menschen, die mit Software gebastelt und strahlen nach wie vor von dort aus. Außerdem ist der Autor nicht wirklich über das Lernen, andere Arten schreiben qualifiziert.

[2] In früheren Zeiten, gehackt Menschen auf Closed-Source, wenn sie könnten, weil es keine Alternative. Die Dinge haben sich zum Besseren verändert.

[3] Vor 1983 oder so die Assoziation zwischen Hacking und Unix war weniger stark, aber die Details, wie das geändert werden nun vor allem die nur für Historiker.







In Verbindung stehende Artikel