Como editor del Jargon File y autor de algunos otros documentos bien conocidos de naturaleza similar, frecuentemente recibo emails de principiantes entusiastas de la red preguntando (en efecto) "¿como puedo aprender a ser un hacker excepcional?". Extrañamente no parece existir ningún otro documento que trate este importante asunto, así que aquí está el mio.
Nota: hay una lista de preguntas frecuentes al final de este documento. Por favor léala—dos veces—antes de mandarme emails con cualquier pregunta acerca de este documento.
El Jargon File contiene una serie de definiciones del término 'hacker', la mayoría tienen que ver con la habilidad técnica y el gusto por resolver problemas y superar límites. Pero si quiere saber como convertirse en hacker solo dos son realmente relevantes.
Hay una comunidad, una cultura compartida, de programadores expertos y genios en redes que han trazado su historia décadas atrás desde las primeras minicomputadoras time-sharing y los antiguos experimentos con ARPAnet. Los miembros de esta cultura originaron el termino 'hacker'. Los hackers crearon Internet. Los hackers hicieron del sistema operativo Unix lo que es hoy. Los hackers trabajan Usenet. Los hackers hacen funcionar el World Wide Web. Si usted es parte de esta cultura, si ha contribuido con ella y otras personas en ella saben quien es y le llaman hacker. Usted es un hacker.
La mentalidad hacker no esta confinada a esta cultura de hackers de software. Hay quienes aplican la actitud hacker a otras cosas, como la electrónica o la música -- en realidad, puede encontrarlos en los más altos niveles de cualquier ciencia o arte. Los hackers de software reconocen estas almas gemelas donde sea y los llaman también "hackers" -- y algunos aseguran que la naturaleza hacker es definitivamente independiente del medio particular en el que trabaje el hacker. Pero en el resto de este documento nos enfocaremos en las habilidades y actitudes de los hackers de software, y en las tradiciones de la cultura compartida que originó el término 'hacker'.
Existe otro grupo de gente que orgullosos se auto-denominan hackers, pero no los son. Estas son personas (generalmente adolecentes del sexo masculino) que se divierten invadiendo computadoras y engañando al sistema telefónico. Los verdaderos hackers los llaman 'crackers' y no quieren tener nada que ver con ellos. Los verdaderos hackers generalmente piensan que los crackers son flojos, irresponsables y no muy brillantes, y aseguran que el poder romper sistemas de seguridad no te convierte en hacker así como el poder jugar con el cableado de un automóvil no te convierte en ingeniero automotriz. Desafortunadamente, muchos periodistas y escritores han caído en el error de usar la palabra 'hacker' para describir a los crackers; esto resulta sumamente irritante para los verdaderos hackers.
La diferencia básica es esta: los hackers crean cosas, los crackers las destruyen.
Si quiere ser un hacker, siga leyendo. Si quiere ser un cracker, mejor lea el grupo de noticias alt.2600 y prepárese para hacer de cinco a diez años en prisión después de descubrir que no es tan listo como pensaba. Y eso es todo lo que voy a decir acerca de los crackers.
Java es también un buen lenguaje para aprender a programar. Es más difícil que Python, pero produce un código más rápido que el que produce Python. Creo que sería un excelente segundo lenguaje a aprender.
Pero le aviso que no alcanzará el nivel de un hacker o incluso un simple programador si solo aprende uno o dos lenguajes -- necesita aprender a solucionar problemas de programación de manera general, independientemente de cualquier lenguaje. Para ser un verdadero hacker necesita llegar al punto en el que pueda aprender un nuevo lenguaje en días, relacionando lo que dice su manual con lo que sabe. Esto quiere decir que debe aprender varios lenguajes muy diferentes.
Si se involucra en la programación en serio, tienes que aprender C, el lenguaje base de Unix. C++ está íntimamente relacionado con C; Si sabe uno, no será difícil aprender el otro. Sin embargo ninguno de los dos es un buen lenguaje para aprender primero. En realidad, mientras mas evite programar en C más productivo será.
C es muy eficiente y muy ahorrativo en los recursos de la máquina. Desafortunadamente, C logra esta eficiencia exigiéndole que haga a mano mucho del manejo de recursos de bajo-nivel (como memoria). Todo este código de bajo-nivel es complejo y hace su programa propenso a bugs que le tomará gran parte de su tiempo eliminar. Con las maquinas de hoy tan poderosas como son, esto generalmente es un mal negocio -- es más inteligente utilizar un lenguaje que use menos eficientemente el tiempo de la máquina, pero mucho más eficientemente su tiempo. Tal como, Python.
Otros lenguajes de importancia particular para los hackers son Perl y LISP. Es útil aprender Perl por razones prácticas; es ampliamente usado para páginas web activas y sistemas de administración, así que aunque nunca programe en Perl debe aprender a leerlo. Muchos usan Perl en la manera en que yo sugiero usar Python, para evitar la programación en C en trabajos que no requieren la eficiencia que tiene C con la máquina. Necesita ser capaz de entender el código en Perl.
Es útil aprender LISP por una razón diferente — la experiencia de profunda iluminación que tendrá cuando lo logre. Esa experiencia le hará mejor programador por el resto de sus días, incluso si en realidad nunca usa mucho LISP en si.
Es mejor, en realidad, aprender todos estos cinco (Python, Java, C/C++, Perl y LISP). Además de ser los más importantes lenguajes de los hackers, representan muy diferentes acercamientos a la programación, y con cada uno aprenderá en distintas maneras.
No puedo dar instrucciones completas de como aprender a programar ya que es una habilidad compleja. Pero puedo decir que los libros y cursos tampoco lo hacen (muchos, quizás la mayoría de los mejores hackers son autodidactas). Puede aprender características de un lenguaje -- pedazos de conocimiento -- de los libros, pero el estado mental que transforma este conocimiento en habilidades latentes se puede aprender solo con la práctica y el autodidactismo. Esto se logra (a) leyendo código y (b) escribiendo código .
Aprender a programar es como aprender a escribir bien con lenguaje natural. La mejor manera de hacerlo es leer cosas escritas por maestros en la materia, escribir algo usted mismo, leer otro buen tanto, escribir un poco más, leer mucho más, escribir algo más ... y repetirlo hasta que lo que escribe empiece a desarrollar el tipo de fuerza y forma que tienen sus modelos.
Encontrar buen código para leer solía ser difícil, porque habían pocos programas extensos disponibles en código fuente para que leyeran los hackers novatos y se empaparan. Esto ha cambiado dramáticamente; software, herramientas de programación y sistemas operativos de código fuente abierto (todos ellos hechos por hackers) están ahora ampliamente disponibles. Lo cual me lleva directamente a nuestro siguiente tema...
(Nota: En realidad si es usted un principiante no le recomiendo instalar Linux o BSD como un proyecto único. Para empezar con Linux, encuentre un grupo de usuarios Linux local y pida ayuda, o póngase en contacto con la Open Projects Network . LISC mantiene canales IRC donde puede obtener ayuda.)
Pero el tener una página web personal no le acerca siquiera a convertirse en hacker. La Web está llena de páginas personales. La mayoría sin sentido, con basura sin contenido -- basura muy llamativa, pero basura al fin (para saber más de lo mismo lea The HTML Hell Page).
Para tener mérito, su página debe tener contenido -- debe ser interesante y/o útil para otros hackers. Y eso nos lleva al siguiente tema...
Los hackers más reconocidos son aquellos que han escrito y aportado largos y potentes programas que cubren una necesidad común entre mucha gente, tal que ahora todos usan ese programa.
Si además de concentrarse suficiente para ser un buen hacker usted puede seguir teniendo una vida, esta bien. Es mucho más fácil en estos días de lo que era cuando yo era un principiante en 1970; la cultura común es mucho más amable con los tecno-nerds ahora. Incluso hay un número creciente de personas que se dan cuenta de que los hackers son frecuentemente amantes de la alta-calidad y materia dispuesta.
Si a usted le atrae el hackeo porque no tiene una vida interesante, está bien igual -- al menos no tendrá problemas para concentrarse. Quizá su vida se vuelva interesante después por ser un hacker.
Aprenda a escribir correctamente en su lengua materna. Aunque es un estereotipo común el que los programadores no saben escribir, un número sorprendente de hackers (incluyendo todos los mejores que conozco) son hábiles escritores.
Lea ciencia ficción. Asista a convenciones de ciencia ficción (es una buena manera de conocer hackers y proto-hackers).
Estudie filosofía Zen y/o aprenda artes marciales. (La disciplina mental parece ser similar de manera importante.)
Desarrolle un oído analítico para la música. Aprenda a apreciar estilos peculiares de música. Aprenda a tocar bien algún instrumento musical o a cantar.
Desarrolle su apreciación de los juegos de palabras.
Mientras más de estas cosas ya haga, es más seguro que tenga madera de hacker. El porqué estas cosas en particular no está completamente claro, pero están conectadas con una mezcla de habilidades del lado izquierdo y derecho del cerebro que parece ser importante (los hackers necesitan ser capaces de razonar de ambas maneras, con lógica y fuera de la lógica aparente de un problema en un momento dado).
Finalmente, algunas cosas que no se deben hacer.
No use un nombre de usuario chistoso o grandioso.
No se involucre en guerras agresivas en Usenet (ni en ningún otro lado).
No se haga llamar 'cyberpunk', ni pierda el tiempo con alguien que lo haga.
No envíe por email u otro medio una escritura llena de faltas de ortografía y mala gramática.
La única reputación que logra haciendo cualquiera de estas cosas es la de un tonto. Los hackers tienen buena memoria -- le puede llevar años borrar la mala impresión de sus incursiones tempranas lo suficiente para ser aceptado.
El problema con los nombres de usuario merece una ampliación. Convertir su identidad en un apodo es una costumbre juvenil característica de los crackers, warez d00dz y otras formas de vida inferiores. Los hackers no hacen esto; están orgullosos de lo que hacen y quieren que sus nombres de usuario estén relacionados con su nombre real. Por lo tanto si tiene un apodo, deshágase de él. En la cultura hacker solamente lo marcará como un perdedor.
He escrito un documento, The Cathedral and the Bazaar, que explica mucho acerca de como funcionan las culturas de Linux y de código fuente abierto. He abordado este tema incluso de manera más directa en la secuela Homesteading the Noosphere.
Rick Moen y yo hemos colaborado con otro documento How To Ask Smart Questions. Este ayuda a pedir asistencia de una manera que hace más probable el que sí se la den.
(Solía decir que no se puede encontrar ningún hacker verdadero en el IRC, pero empiezo a entender que esto está cambiando. Aparentemente ahora algunas comunidades de verdaderos hackers, relacionadas con cosas como GIMP y Perl, tienen canales IRC.)
Pero el HTML no es un lenguaje de programación completo. Cuando esté listo para empezar a programar, recomiendo empezar con Python. Escuchará a muchos recomendar Perl, y Perl sigue siendo más popular que Python, pero es más difícil de aprender y (en mi opinión) no está muy bien diseñado.
C es realmente importante, pero también es mucho más difícil que Python o Perl. No intente aprenderlo primero
Usuarios de Windows, no se acostumbren a Basic. Les creará malos hábitos, y no es portable fuera de Windows. Evítenlo.