16 puntos por GN⁺ 2024-05-21 | 5 comentarios | Compartir por WhatsApp
  • 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 Makefile para un proyecto de investigación.
  • La complejidad de make me 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

 
zihado 2024-05-23

En Windows, quizá no sea everything jaja

 
bus710 2024-05-23

¿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...

 
bbulbum 2024-05-23

También recomiendo lazygit jaja

 
bus710 2024-05-23

Gracias.
Creo que voy a instalar superfile y lazygit el fin de semana para echarles un vistazo.

 
GN⁺ 2024-05-21
Opinión de Hacker News

Resumen de comentarios de Hacker News

  • Compiler Explorer:

    • Compiler Explorer cambió enormemente la discusión sobre compiladores y optimización de rendimiento.
    • Tuvo un impacto positivo en la calidad de las discusiones en foros.
    • Permite verificar rápidamente afirmaciones audaces mediante enlaces.
    • Herramientas como llvm-mca y uiCA también son útiles.
  • Opiniones sobre usar Windows:

    • Presenta una visión equilibrada sobre Windows.
    • Windows de la línea NT es un excelente sistema operativo.
    • Lo tienen instalado para jugar.
  • Docker:

    • Docker les ahorró mucho tiempo durante su carrera en consultoría.
    • Permite ejecutar proyectos antiguos rápidamente.
    • Elimina la necesidad de instalar varios servidores de bases de datos.
    • Hace posible reproducir entornos de Python y ejecutarlos en paralelo.
  • Spring Framework:

    • Spring Framework dificulta entender el concepto de inyección de dependencias.
    • Hace que muchos desarrolladores Java piensen que necesitan frameworks complejos.
    • Spring en sí es útil, pero puede hacer que el software sea más complejo y menos portable.
  • Nix:

    • Con Nix y Nixpkgs se pueden realizar muchas tareas complejas.
    • Facilita cosas como los builds estáticos de binarios Rust.
    • Ofrece varias opciones de compilación y funciones de caché.
    • Nix es muy útil, pero conviene acercarse a NixOS con cuidado.
  • Emacs:

    • Emacs convierte el trabajo de corregir bugs en práctica técnica.
    • Hace divertidas las tareas aburridas.
  • Concepto de 'Round':

    • El concepto de 'Round' ofrece la mayor superficie de interfaz posible con un volumen central mínimo.
    • El núcleo de Emacs y Git es pequeño, simple, pero poderoso.
  • Magit:

    • Magit es un ejemplo de libro de texto de simplicidad, efectividad y facilidad de descubrimiento.
    • Expone mejor las funciones de Git.
    • No introduce su propia terminología ni flujo de trabajo.
  • Comparación entre SVN y Git:

    • La experiencia de usar SVN fue muy negativa.
    • Git fue mucho más intuitivo y fácil de entender.
    • El flujo de trabajo mejoró al usar Git.
  • Experiencia usando Linux, Emacs, Bazel y Magit:

    • Trabajan en Linux usando Emacs y Bazel.
    • Buscan en blogs, guardan su trabajo en Emacs y escriben mensajes de commit con Magit.
    • Hacen push al repositorio Git.