Enlightenmentware - Software que me despierta
(mmapped.blog)- UNIX, Git, Emacs, Boost.Graph, Bazel
- Como programador, interactúo todos los días con herramientas de software, pero la mayoría solo sirven para sacar el trabajo adelante.
- A veces uno encuentra software que va más allá de la simple utilidad: estimula la imaginación, abre nuevas posibilidades e influye en la forma de diseñar sistemas.
- A este tipo de software lo llamo "enlightenmentware".
- Para los programadores, la fuente más común de este tipo de revelación es el lenguaje de programación que usan, incluyendo los que aprenden por hobby.
- He vivido muchas de estas revelaciones al trabajar con lenguajes de programación como MASM, C, Prolog e Idris.
- Como el impacto del aprendizaje de lenguajes sobre la expansión del pensamiento se conoce desde hace mucho tiempo, en este texto prefiero no enfocarme en los lenguajes y concentrarme solo en el software que provoca ese despertar.
UNIX
Unix es amigable con el usuario—solo que es selectivo con sus amigos.
Anónimo, "Art of unix Programming" de Eric S. Raymond
- En 2008, mientras estudiaba en la universidad, empecé a buscar mi primer trabajo de programación.
- En la mayoría de las vacantes pedían conocimientos de UNIX y de sockets.
- Como en el plan de estudios no había cursos sobre unix ni sobre sistemas operativos, decidí estudiarlo por mi cuenta.
- Entré al mundo de unix a través del libro "The unix Operating System" de Andrey Robachevsky y otros.
- Al instalar Mandriva Linux empecé a explorar el entorno unix.
- Desde entonces, unix me ha acompañado en cada etapa de mi vida.
- La mayor parte del software funciona en entornos unix, y todavía sigo consultando el libro "Advanced Programming in the unix Environment".
Git
Con git es fácil dispararte en el pie, pero también es fácil volver al pie anterior y fusionarlo con la pierna actual.
Jack William Bell
- A inicios de 2009 conocí por primera vez un sistema de control de versiones usando Rational ClearCase.
- ClearCase era extremadamente confuso y apenas cubría los requisitos mínimos.
- Después empecé a usar Subversion y lo aprendí con el libro "Version Control with Subversion".
- Subversion era fácil de entender y de usar, pero resultaba incómodo para proyectos personales.
- Luego descubrí Git.
- Git tenía una curva de aprendizaje empinada y también era confuso, pero de una forma distinta a ClearCase.
- Git eliminó la fricción de usar control de versiones, hasta el punto de hacer posible versionar todo lo que valga la pena.
- El diseño de Git me resultó fascinante como una mezcla elegante de sistemas distribuidos, grafos acíclicos y almacenamiento direccionado por contenido.
- Aprender cómo funciona internamente Git fue tan entretenido que me llevó a interesarme también por otros sistemas de control de versiones.
- La principal desventaja de Git es que su enfoque orientado a snapshots hace más difícil entender las fusiones.
Emacs
Cualquier editor de texto puede guardar archivos, pero solo Emacs puede salvar tu alma.
Per Abrahamsen
- Edité mis primeros programas en la amigable ventana azul de Turbo Pascal 7.0.
- En la universidad aprendí a programar con Pascal y después usé C++ y Java.
- En mi primer trabajo de programación usé NEdit, pero empecé a interesarme por Vim y Emacs.
- Vim era desafiante pero divertido, como tocar un instrumento musical.
- Emacs es una máquina Lisp que ofrece edición de texto y manejo de ventanas.
- La estructura interna de Emacs es limpia, está bien organizada y además muy bien documentada.
- Extenderlo con Emacs Lisp es mucho más fácil que en otros editores.
Boost.Graph
Tengo un fuerte prejuicio contra la moda del código reutilizable. Creo que el "código reeditable" es muy superior a una caja negra o a un toolkit.
Donald Knuth, entrevista con Andrew Binstock
- En la víspera de Año Nuevo de 2013 leí la Boost Graph Library.
- La mayoría de las bibliotecas de algoritmos dependen de una representación específica de los datos, lo que dificulta integrarlas en proyectos existentes.
- La biblioteca Boost.Graph resuelve este problema usando programación genérica.
- Nunca la he usado en un proyecto real, pero su diseño profundizó mi comprensión del diseño de STL y de la programación genérica.
Bazel
Si make no funciona como esperas, es muy probable que el Makefile esté mal.
Adam de Boor, "PMake—A Tutorial"
- En 2009 escribí mi primer
Makefilepara un proyecto de investigación. - La complejidad de
makeme hizo desear una herramienta mejor. - Probé varios sistemas de build, pero todos me dejaron insatisfecho.
- En 2016 entré a Google y empecé a usar
blaze. - Bazel fue la última pieza del rompecabezas de los sistemas de build.
- Bazel es rápido, preciso, fácil de usar y agnóstico al lenguaje.
Conclusión
- Rasgos en común del buen enlightenmentware:
- Resuelve problemas profundos y aborda problemas con los que uno se enfrenta a diario.
- Contiene mucho volumen en una superficie pequeña.
- Invita y anima a explorar su interior.
Opinión de GN⁺
- La importancia de UNIX: UNIX se usa como sistema operativo base en muchos entornos de programación y es esencial para entender los fundamentos de la programación de sistemas.
- La curva de aprendizaje de Git: Git es difícil al principio, pero es una herramienta indispensable para el control de versiones. Es especialmente útil en sistemas distribuidos y entornos colaborativos.
- La flexibilidad de Emacs: Emacs ofrece mucho más que un editor de texto, y es especialmente recomendable para quienes tienen interés en la programación en Lisp.
- La programación genérica en Boost.Graph: Boost.Graph es un ejemplo potente de programación genérica y permite aprender cómo implementar algoritmos complejos de manera eficiente.
- La eficiencia de Bazel: Bazel es una herramienta que puede maximizar la eficiencia del sistema de build en proyectos de gran escala, especialmente útil en grandes empresas como Google.
5 comentarios
En Windows, quizá no sea
everythingjaja¿Qué tan bueno será Magit para que termine incluido entre estas obras maestras del software? Como no uso Emacs, no tengo forma de saberlo.
Dicen que en Nvim, Neogit recibió influencia de Magit, así que quizá debería probar al menos ese...
También recomiendo
lazygitjajaGracias.
Creo que voy a instalar
superfileylazygitel fin de semana para echarles un vistazo.Opinión de Hacker News
Resumen de comentarios de Hacker News
Compiler Explorer:
Opiniones sobre usar Windows:
Docker:
Spring Framework:
Nix:
Emacs:
Concepto de 'Round':
Magit:
Comparación entre SVN y Git:
Experiencia usando Linux, Emacs, Bazel y Magit: