¿Qué es esta guía?
Básicamente, este artículo tiene como objetivo guiar a las personas con respecto a los pasos que pueden o deben dar para convertirse en un verdadero hacker.
Para escribirla, me he basado en el famoso documento “How to become a hacker”, escrito por Eric S. Raymond, el cual puede encontrarse en www.catb.org/~esr/
¿Por qué escribirla?
Porque últimamente existen varias personas con la idea de que ser un hacker significa poder romper cosas, y que para convertirse en hacker tienen que romper la mayor cantidad de cosas posibles. Nada más alejado de la realidad.
¿Por qué gratuita?
Porque si estuviera en venta, seguramente nadie lo compraría 🙂
¿Qué es un hacker?
Si bien existen una gran cantidad de definiciones para la palabra ‘hacker’, aquí vamos a basarnos una mezcla de la definición que muestra el Jargon (www.catb.org/jargon/html/H/hacker.html) y mi opinión personal. Básicamente:
“Un hacker es una persona que disfruta estudiar cómo funcionan las computadoras, los sistemas y las redes informáticas. Que también se siente atraído por los retos intelectuales y por encontrar formas novedosas de resolver problemas”
Como podemos observar, en esta definición no entran los conceptos de “El bien y el mal” y otras cuestiones. Aunque podríamos decir que los verdaderos hackers están deseosos por aprender y a su vez enseñar sus conocimientos al mundo. Así que, en general, podría decirse que los hackers son verdaderamente buenas personas, y que no tienen ninguna intención de destruir. Recordemos que muchas personas utiliza sus conocimientos de los sistemas informáticos para realizar ataques, destruir y robar, pero eso no tiene nada que ver con la cultura hacker, que se basa en estudiar, crear y compartir.
Evitemos reinventar la rueda
La idea de crear nuevas y mejores soluciones para los problemas se basa en que con esto podemos ayudar a la humanidad a crecer día a día. Si compartimos estos conocimientos con los demás, evitamos que otras personas tengan que pasar por el proceso de investigación por el cual nosotros pasamos para encontrar una solución. Si todos compartimos, evolucionamos juntos.
Es básicamente por eso que es tan importante contribuir creando documentos y software, y ponerlos a disposición de la comunidad, para que esta pueda nutrirse de nuestras creaciones y a su vez mejorarlas.
Con esto no queremos decir que todo nuestro trabajo deba ser ‘gratuito’. Obviamente, debemos realizar tareas remuneradas para poder sustentar nuestro nivel de vida. Cada persona tendrá la capacidad de discernir de qué forma puede tanto contribuir con la comunidad como pagar su alimento. Y nadie va a exigirnos que trabajemos gratis. Mejor dicho, nadie nunca va a exigirnos que regalemos nuestro trabajo, así como nadie puede exigirnos que hagamos una donación a una organización para la protección del medio ambiente. Nosotros donamos lo que podemos o lo que nos parece justo. Obviamente, las personas que más contribuyan, van a ser mejor valoradas por la comunidad.
Lo repetitivo, para las máquinas
Una de las actitudes que nos va a ayudar a encontrar soluciones a los problemas es la de escapar a cualquier tarea que sea rutinaria y repetitiva. Sabemos que las computadoras son excelentes para realizar este tipo de tareas, y que los seres humanos somos excelentes creadores, que no merecemos estar confinados a realizar las mismas tareas una y otra vez.
Además, las tareas repetitivas hacen que las personas se aburran y dejen de prestar atención en lo que están haciendo. Por ende, terminan cometiendo errores. Por el contrario, los sistemas siempre realizan las tareas de la misma forma, independientemente de la cantidad de veces que tengan que realizarlas.
Por todo esto debemos buscar siempre la automatización a través de las computadoras y los sistemas, para poder dedicar más tiempo a nuestros procesos de investigación y creación.
La programación
Para un hacker es obligatorio conocer algún lenguaje de programación. Preferentemente, más de uno. Para los que recién empiezan, es recomendable utilizar un lenguaje interpretado, porque este tipo de lenguajes suelen ser más intuitivos y más fáciles de depurar. De los lenguajes interpretados, Python es el más recomendable, porque es fácil de aprender y muy potente.
Con respecto a aprender más de un lenguaje, es necesario para desarrollar la capacidad de no estar cerrados a una única herramienta, y tener la capacidad de utilizar y entender cualquier lenguaje, simplemente ayudándonos con algún manual de referencia.
Para aprender aún más cómo funcionan los programas, C es un excelente lenguaje de programación, porque nos obliga a tener muchas más cosas en cuenta al escribir código. Pero es un lenguaje más difícil de utilizar, y más difícil de aprender. De todos modos, como es el lenguaje en el que están escritos todos los sistemas Unix, será bueno aprender aunque sea lo básico.
De todas la formas que existen para aprender a programar, la que mejor funciona es: “Leer código / Escribir código”.
Los sistemas Unix-libres
Este tipo de sistemas (como los GNU/Linux y BSD) son excelentes para aprender cómo funciona un sistema operativo y cómo está construida internet. Ya que la infraestructura de internet está muy relacionada con los sistemas del tipo Unix.
La mejor forma de aprender a utilizar estos sistemas y entender cómo funcionan es: “Instalar / Romper / Reinstalar”. Después de un tiempo, podremos empezar a “Instalar / Romper / Arreglar”. Esto es algo que vamos a poder hacer con el tiempo, en base a la unión de todos los conocimientos que vamos a ir adquiriendo.
Además, estos sistemas brindan excelentes capacidades de automatización, generalmente a través de scripts. Es ampliamente recomendable que instalemos estos sistemas, leamos la documentación de los mismos, y los utilicemos lo más posible.
Protocolos y lenguajes de internet
Es fundamental que conozcamos cómo funciona internet y cada uno de los protocolos que funcionan dentro de ella. Algunos ejemplos son TCP/IP, DNS, SMTP, FTP, HTTP y otros. Además, existen varios lenguajes que se utilizan para construir los sitios web y otros servicios, como HTML, JavaScript y XML.
Obtener todos estos conocimientos nos va a permitir tener una buena idea de cómo funcionan las cosas y cómo estamos interconectados en todo el mundo. Recordemos que la tecnología avanza constantemente y, si bien nunca podremos saber todo acerca de todo, es necesario que nos mantengamos actualizados y aprendiendo continuamente.
Idioma Inglés vs Inglés Técnico
El idioma “Inglés” es lo que utilizan las personas de Estados Unidos, Inglaterra y muchos otros países para comunicarse. Es también un idioma muy utilizado en todo el mundo para la comunicación entre personas que no comparten un mismo idioma primario. Por ejemplo, cuando las personas de habla hispana, necesitan comunicarse con personas que hablan ruso, es muy probable que terminen comunicándose en inglés para entenderse.
El “Inglés Técnico” es aquella parte del idioma inglés exclusivamente utilizada para hablar de temas tecnológicos y para entender la documentación de los sistemas, las tecnologías y los lenguajes de programación. Como la mayoría de la documentación está escrita en inglés, y los lenguajes de programación están basados en el idioma inglés (“if”, “then”, “else”, “while”, etc), conocer el inglés técnico es totalmente necesario para poder ser un hacker.
La cultura del aporte
En la comunidad hacker es muy valorado lo que uno aporta a la comunidad, para determinar qué tan valiosos somos. Al contrario de lo que dicta la conocida frase “tanto tienes, tanto vales”, en la comunidad hacker se podría utilizar la frase “tanto aportas, tanto vales”.
Existen muchas cosa que podemos hacer para aportar cosas a la comunidad, entre las cuales podemos nombrar las siguientes:
Escribir software de código abierto
Los hackers más respetados del mundo son aquellos que han desarrollado programas de código abierto que sean realmente útiles. Así que, si queremos volvernos hackers, debemos empezar a escribir código útil, y compartirlo con la comunidad.
Probar y depurar software de código abierto
Aunque escribir software de código abierto es muy importante, también lo es probar y depurar el software que ya ha sido escrito. Esto es necesario para que el software pueda evolucionar. Y también nos va a servir para aprender a programar mejor, y para que nos acostumbremos a leer código.
Publicar información útil
Compartir nuestros conocimientos con las demás personas de la comunidad es algo verdaderamente útil y valorado por todos. Una de las formas de hacer esto es publicar documentos, manuales, guías y otros recursos que sirvan a las personas para aprender cada vez más.
Otras formas de contribuir
Hasta que tengamos los conocimientos necesarios para realizar las tareas descritas anteriormente, podemos optar por donar otro tipo de recursos. Por ejemplo, podemos brindar hosting a proyectos de código abierto, traducir documentación a otros idiomas, donar dinero a las organizaciones desarrolladoras de software de código abierto, etc. Si bien estas actividades no nos acercan a tener mejores conocimiento (salvo el hecho de traducir textos, que nos va a permitir aprender mucho), sí van a hacer que la comunidad nos conozca y nos valore. Pero debemos recordar que ser un hacker no tiene nada que ver con donar dinero. Simplemente es una forma de ayudar a los demás.
Palabras finales
Ser un hacker es algo que lleva muchos años de práctica, pero tiene que hacerse solamente si nos parece divertido. En el caso de los hackers, la línea que divide el trabajo del ocio debe ser verdaderamente fina. Esto debe ser así porque solamente podremos volvernos hackers si amamos hackear y aprender constantemente cosas nuevas.
Por último, y casi más importante de todo: NUNCA NOS AUTOPROCLAMEMOS HACKERS. Que seamos hackers o no, debe decidirlo la comunidad. Sólo podemos dar nuestro mejor esfuerzo y aportar todo lo que podamos, esperando que las cosas se den de la mejor manera. Como dice un proverbio Zen:
“Llega la primavera, y la hierba crece sola”
Fabian Portantier
www.portantier.com
www.twitter.com/#!/portantier