Comment apprendre Hacking
Qu'est-ce que Hacking?
Le « piratage » nous allons parler dans ce document est la programmation exploratoire dans un environnement open source. Si vous pensez que le « piratage » n'a rien à voir avec la criminalité informatique ou de rupture de sécurité et est venu ici pour apprendre que, vous pouvez aller maintenant. Il n'y a rien pour vous ici.
Notez que l'on peut être en train de faire le piratage sans être un pirate informatique. " Le piratage ". D'une manière générale, est une description d'un procédé et de style; « Hacker » implique que vous pirater, et sont aussi associées à une culture ou d'une tradition historique qui utilise cette méthode. Eh bien, « hacker » est un titre honorifique décerné par d'autres pirates.
Hacking n'a pas assez appareil formel pour être une méthode à part entière de la façon dont le terme est utilisé dans le génie logiciel, mais il a quelques caractéristiques qui ont tendance à mettre à part des autres styles de programmation.
Hacking est fait sur l'open source. Aujourd'hui, les compétences sont hacking l'individu micro-niveau de ce qu'on appelle « le développement open source » au niveau macro social. [2] Un programmeur travaillant dans le style de piratage informatique attend et utilise facilement examen par les pairs du code source par d'autres pour compléter et amplifier sa capacité individuelle.
Hacking est léger et d'exploration. procédures rigides et les spécifications élaborer a priori n'a pas sa place dans le piratage; au contraire, la tendance est d'essayer-it-et-trouver-avec un tempo de libération rapide.
lieux Hacking une grande valeur sur la modularité et la réutilisation. Dans le style de piratage informatique, vous essayez de ne jamais écrire un morceau de code qui ne peut être utilisé qu'une seule fois. Vous biais vers la fabrication d'outils généraux ou les bibliothèques qui peuvent être spécialisés dans ce que vous voulez en gelant des arguments / variables ou la fourniture d'un contexte.
faveurs Hacking ferraille et reconstruisent sur patch-et-Extend. Une partie essentielle de hacking est sans pitié jeter un code loin qui est devenu trop compliqué ou crufty, peu importe combien de temps vous avez investi.
Le style de piratage informatique a été étroitement associé à la tradition technique du système d'exploitation Unix [3]
Récemment, il est devenu évident que se fond hacking bien avec le style « de programmation agile ». techniques agiles telles que la programmation de paire et des reportages adaptent facilement au piratage et vice-versa. En partie parce que les premiers dirigeants de la pensée agile de ont été influencés par la communauté open source. Mais il a depuis été le trafic dans l'autre sens aussi bien, avec des projets open-source des techniques de plus en plus l'adoption de tels que le développement piloté par les tests.
Les étapes de l'apprentissage comment pirater
Apprendre à composer de la musique comporte trois étapes. Tout d'abord, vous devez apprendre la technique mécanique de base d'un instrument - doigtés et comment jouer des échelles. Ensuite, vous devez former votre oreille pour comprendre les modèles musicaux. Enfin, vous devez apprendre à recombiner modèles musicaux dans des créations originales. Hacking est similaire.
L'équivalent de piratage de doigtés apprend les capacités des langages de programmation, et les mécanismes d'utilisation des outils tels que les éditeurs, interprètes et compilateurs. (Si vous ne comprenez pas ces termes, consultez les guides pratiques Fundamentals Unix et Internet.) Nous ne couvrirons pas les mécaniciens ici car ils sont trop différents selon la langue que vous utilisez. Tutoriels pour toutes les langues que vous voudrez peut-être utiliser sont disponibles sur le Web; utiliser un moteur de recherche.
L'équivalent des échelles de jeu est en train d'écrire de petits programmes, seul. Malheureusement, les échelles de jeu (a) ne vous apprend rien sur la musique, et (b) est ennuyeux comme l'enfer. De même, l'écriture de programmes de jouets ne tend pas à vous apprendre beaucoup sur le piratage, et (b) aura tendance à vous démotiver à moins que le programme permet de résoudre immédiatement un problème que vous aimez.
La plupart des instructions de programmation formelle arrive à jouer des échelles et des arrêts. Ainsi, il a tendance à produire des codeurs qui sont pauvres à collaborer les uns avec les autres et avoir l'équivalent d'aucune oreille pour la musique - une sensation médiocre pour la conception de logiciels et l'architecture.
Le incrémentielle Hacking Cycle
Il y a une meilleure façon d'apprendre. Je l'appelle le cycle incrémentielle de piratage.
Tout d'abord, choisir un programme qui fait quelque chose qui vous intéresse. Idéalement, il devrait être un programme que vous utilisez régulièrement et ont des opinions sur. La meilleure chose est un programme que vous ne l'utilisez pas normalement, mais qui fait quelque chose que vous pensez est intéressant. Pour cette méthode d'apprentissage fonctionne, vous devriez éviter d'essayer de pirater le code qui vous ennuie.
Si vous ne connaissez pas déjà le programme, apprendre à l'utiliser. Lisez la documentation. Développer un modèle mental de la façon dont cela fonctionne.
Choisissez une petite fonction pour changer ou ajouter.
Rechercher sur le code jusqu'à ce que vous trouviez la partie que vous devez modifier.
Remarque: vous ne devriez pas spécifiquement essayer de lire l'ensemble du programme. Vous aurez juste échappement et vous frustrer si vous faites cela. Au lieu de cela, utilisez la structure du module du code à zéro sur seulement la partie, vous devez comprendre. Sur le chemin, vous apprendrez des choses sur la façon dont va ensemble l'ensemble du programme.
Faire, tester, déboguer et documenter votre changement.
Documenter votre changement est important. Si vous développez l'habitude de le faire au début, vous allez produire le travail de bien meilleure qualité.
Envoyez-nous votre changement comme un patch aux mainteneurs du programme. Consultez le guide pratique de sortie du logiciel pour obtenir des conseils sur la façon de le faire d'une manière efficace et poli.
Parfois (lorsque vous oftener débutant) vos patches seront rejetées. Vous devez apprendre à faire face à ce sujet. Cela ne signifie pas que vous êtes voué à l'échec dans votre quête; généralement ce que cela signifie est que vous avez pas lu le code avec suffisamment d'attention, ou (comme d'habitude), vous avez manqué quelque chose d'important aboout la culture et les pratiques du groupe Developmemt vous essayez de contribuer. Ces erreurs peuvent être réparées.
Maintenant, demandez-vous: est-ce que je comprends l'ensemble de ce programme?
Si oui, vous avez terminé. Si non, retournez à l'étape 3. Cette fois-ci, choisissez un autre et peut-être un peu plus chose difficile à changer.
Le but de cet exercice est d'apprendre à se faufiler sur le problème de la compréhension d'un programme, plutôt que d'essayer d'aborder toute la complexité à la fois. Comme vous allez à travers cette boucle plusieurs fois, vous développerez progressivement une représentation plus complète dans votre esprit de la façon dont tout le programme va ensemble. À un certain moment, vous arriverez à un seuil où vous comprenez tout - ou en tout cas assez pour quel que soit votre but final est.
Développer votre sens du design
Lorsque vous avez fait le cycle de piratage progressive sur plusieurs programmes très petits (ou si vous êtes assez malheureux pour ne pas trouver tout appropriés très petites), essayer sur les programmes un peu plus grandes. Cherchez codebases dans la gamme de 100-500 lignes.
Lorsque vous maîtrisez ce niveau, allez à l'ordre de grandeur, 1000-5000 lignes. Au moment où vous maîtrisez le niveau 1K-5K, vous avez entré l'extrémité inférieure de la plage de capacité de ce qui est généralement considéré comme un programmeur expérimenté.
Lorsque cela se produit, faites attention. Ceci est votre sens de conception tente de se réveiller. Ne pas se précipiter pour patcher dans une autre fonction. Au lieu de cela, commencer à explorer le programme qui vous donne cette démangeaison à un niveau supérieur. Maintenant, peut-être un bon moment pour essayer de lire tout le code, mais ne soyez pas trop inquiet si vous ne pouvez pas; la plupart des programmes sont tout simplement trop grand et désordre pour les engloutissant de travailler à la fois. Essayez d'obtenir une emprise sur ce que vous devez savoir pour nettoyer les choses.
Vous entrez maintenant dans la partie intermédiaire de l'apprentissage à pirater. Cela implique non seulement la modification des caractéristiques visibles surface, mais faire ce qu'on appelle « refactoring » - réorganiser le code interne afin qu'il soit plus propre et a une meilleure architecture (meilleure dissimulation des données, des interfaces plus étroites entre les différentes parties, la séparation plus fonctionnelle entre les modules).
Une fois que votre sens de conception (équivalent de votre oreille musicale) est activée, vous trouverez souvent que vous commencez refactorisation chaque programme que vous travaillez aussi rapidement que la troisième ou quatrième fois le cycle incrémentielle de piratage.
En fait, c'est exactement comment les pirates qualifiés approchent normalement l'apprentissage du code de grands programmes - en bricolant et refactoring et réécriture jusqu'à ce qu'ils digèrent ce qui se passe. Vous faites de petits changements afin d'apprendre comment faire des grands.
Si vous réussi refactoring trois ou quatre grands systèmes, non seulement vous développer des compétences de programmation fortes, vous serez sur votre chemin à quelque chose de beaucoup plus rare et puissant: devenir architecte logiciel, celui qui peut faire la conception originale des grands systèmes logiciels.
d'origine étant
Dans mon analogie avec la musique, je l'ai dit que vous avez éventuellement besoin d'apprendre à recombiner motifs musicaux (que vous avez appris en écoutant de la musique et la pratique de la performance) dans des compositions originales. J'ai choisi cette façon de décrire la créativité avec soin, car il applique aux logiciels encore plus qu'elle ne le fait de la musique.
Avant d'avoir lu et absorbé les leçons de beaucoup de code, vous aurez probablement pas dans votre tête la bibliothèque de modèle que vous devez faire preuve de créativité sur des échelles plus grandes que les très petites. Un but de faire le cycle incrémentielle de piratage est de vous immerger dans beaucoup de code - à accroître les échelles de complexité - dans des circonstances qui vous fournissent la motivation pour continuer à lire.
Finalement, vous dirigerez des projets de groupe et faire un travail tout à fait originale. Ne vous sentez pas obligé de se précipiter ce ou forcer; si vous donnez votre temps de compétences à maturité, votre première composition originale sera mieux pour elle. En contribuant efficacement à des projets open-source existants, vous apprendrez les compétences (y compris les compétences de communication) que vous avez besoin pour exécuter vos propres projets.
[1] Il est certainement possible de pirater des choses autres que le logiciel, et les gens dans la culture maker faire. Mais le terme « piratage » est née parmi les personnes qui bricolé avec le logiciel et irradie encore à partir de là. Par ailleurs, l'auteur n'est pas vraiment qualifié pour écrire sur l'apprentissage d'autres types.
[2] Dans les temps anciens, les gens piraté la source fermée, quand ils le pouvaient, parce qu'il n'y avait pas d'alternative. Les choses ont changé pour le mieux.
[3] Avant 1983 ou si l'association entre hacking et Unix était moins forte, mais les détails de la façon dont cela a changé sont maintenant principalement ne concernent que les historiens.