17 puntos por GN⁺ 2026-02-09 | 1 comentarios | Compartir por WhatsApp
  • Una mirada retrospectiva a 25 años de trayectoria en programación desde la época universitaria, centrada más en las personas, las relaciones y las experiencias que en la tecnología en sí
  • 10 minutos viendo el código fuente de HTML, aprendidos por casualidad en la sala de computación de la universidad, se convirtieron en el punto de partida de una larga etapa creando y manteniendo un sitio web personal
  • Un pequeño experimento al saltar al vector de reinicio del procesador 8086 y reiniciar el sistema dejó marcada en un compañero una actitud de aprendizaje nacida de la curiosidad
  • Depuración de código espagueti, el fracaso realista de animaciones en un set-top box, un alto puesto en una competencia CTF y otros episodios muestran una repetición constante de tropiezos y crecimiento
  • Con el paso del tiempo, se percibe el cambio de entender la capacidad para resolver problemas no como talento, sino como resultado de la experiencia, y se concluye que lo que realmente permanece es la profesionalidad, la ética y la forma de tratar a las personas

El inicio de la web: ver el código fuente (Viewing the Source)

  • Justo después de entrar a la universidad en 2001, mientras recorría la web al atardecer en la sala de computación, se encontró por primera vez con la web al escribir susam.com en la barra de direcciones
  • Un estudiante mayor que estaba cerca abrió el menú View > Source de Internet Explorer y explicó que un sitio web era texto escrito en HTML
  • Abrió Notepad y escribió directamente un HTML simple como <BODY><FONT COLOR="RED">HELLO</FONT></BODY>, mostrando cómo se veía en el navegador
    • En ese momento, la etiqueta FONT era de uso común y era habitual escribir las etiquetas HTML en mayúsculas
  • Mostró rápidamente cómo cambiar el tamaño y color de la fuente, centrar contenido y modificar el color de fondo para introducir cómo funcionaba la web
  • Aunque la explicación duró apenas unos 10 minutos, la World Wide Web de pronto empezó a sentirse menos misteriosa y mucho más interesante
  • Cuando terminó de explicar, el estudiante mayor no devolvió el asiento y siguió usando la web, así que como faltaban lugares no hubo más opción que volver al dormitorio
  • El dominio susam.com ya estaba siendo usado por un negocio relacionado con comida turca, así que no pudo registrarlo y después eligió un dominio .net
  • Ese breve encuentro se convirtió en el punto de partida de un largo recorrido creando y manteniendo un sitio web personal

El vector de reinicio (The Reset Vector)

  • Una anécdota de la universidad mientras escribía en una máquina MS-DOS basada en Intel 8086 un programa de control de elevador en lenguaje ensamblador en la sala de computación
  • Recordó lo aprendido en clase: cuando el 8086 se reinicia, CS:IP se establece en FFFF:0000
  • Le dio curiosidad saber qué pasaría si saltaba a esa dirección desde DEBUG.EXE, así que lo probó directamente
    • Justo después de ejecutar el comando C:\>DEBUG -G =FFFF:0000, el sistema se reinició de inmediato
  • Un amigo que siempre era el primero de la clase cada semestre vio la escena y, muy sorprendido, preguntó cómo se le había ocurrido hacer algo así
  • Una semana después fue al dormitorio y confesó que, aunque siempre obtenía el primer lugar, no tenía la curiosidad de recordar un dato pequeño y probarlo por sí mismo
  • Declaró que dejaría de apuntar a ser el mejor del curso y que estudiaría explorando, experimentando y disfrutando lo aprendido
  • Después siguió manteniendo calificaciones altas, pero en la práctica nunca volvió a quedar en primer lugar
  • Un solo experimento de saltar al punto de entrada de reinicio del procesador terminó siendo la ocasión que hizo que alguien cambiara su actitud de aprendizaje, de la competencia a la exploración

Ataque de intermediario y el primer puesto de ingeniería (Man in the Middle)

  • Después de graduarse de la universidad, en el primer trabajo fue asignado al equipo de soporte técnico de un producto de e-banking y se encargó de ejecutar un instalador para desplegar cierto componente
  • El instalador, escrito en Python, fallaba con frecuencia porque sus supuestos sobre el entorno de destino eran frágiles, así que durante la primera semana se estabilizó el instalador y se redactó una guía de usuario paso a paso
    • La guía de usuario tuvo mejor recepción que las mejoras al código
  • Al sentir límites en el trabajo repetitivo de soporte y querer dedicarse a desarrollo de forma más seria, pidió varias veces un cambio de equipo
  • Finalmente recibió una oportunidad de entrevista con el equipo Archie (arquitectura), ubicado en otra ciudad
  • El equipo Archie se encargaba del framework web y los componentes centrales de arquitectura que sostenían todo el producto de e-banking
    • Implementaban por cuenta propia, con Java Servlet y JSP, el enrutamiento de API, autenticación y autorización, manejo de cookies y otros elementos
    • Era una estructura creada antes de la aparición de frameworks open source como Spring o Django
    • Por usarse en entornos bancarios, eran obligatorias estrictas pruebas de seguridad y auditorías periódicas
  • En una entrevista telefónica de 2006 pudo responder preguntas de seguridad como inyección SQL y mitigación de XSS, pero admitió que no conocía el término MITM (ataque de intermediario) porque era la primera vez que lo escuchaba
  • El entrevistador explicó: “Estudia a fondo PKI y MITM. Vamos a implementar funciones de firma digital en un producto de banca corporativa”
  • Durante las semanas siguientes estudió intensamente documentos RFC, infraestructura de clave pública (PKI) y materiales sobre estándares de criptografía de clave pública
    • Al principio parecía difícil y pesado, pero con el tiempo empezó a entenderse como un sistema intuitivo y sofisticado
  • Aproximadamente un mes después de mudarse a la nueva ciudad, completó la funcionalidad de firma digital usando la librería open source Bouncy Castle
  • Después siguió desarrollando varias partes clave del producto y acumuló la experiencia de ver su código integrado en un sistema maduro usado por cientos de bancos y millones de usuarios
  • El gerente fue un mentor excepcional, y su apoyo se convirtió en la base de una confianza duradera
    • Incluso ahora, casi 20 años después, ese producto sigue en operación y, a veces, al abrir las herramientas de desarrollador del navegador como cliente, todavía encuentra rastros del código que escribió entonces

Código espagueti (Spaghetti Code)

  • Hacia 2007-2008 participó en un trabajo de prueba de concepto (PoC) para desarrollar widgets para set-top boxes OpenTV
  • Mientras escribía código en un entorno de C extremadamente reducido, surgió un problema donde el widget fallaba de forma intermitente
  • Debido a una lógica complejamente enredada y operaciones con punteros sin control, incluso el código que él mismo había escrito llegó a un estado de código espagueti difícil de entender
  • Entregó el código en forma de tarball al arquitecto, que además era líder de un equipo de cuatro personas
  • El arquitecto identificó con precisión el problema como un bug de puntero en un archivo específico apenas 5 minutos después de recibir el código, mientras él no había podido resolverlo en varias horas
    • En cuanto se corrigió esa sola línea, el fallo desapareció de inmediato
  • Esa experiencia le hizo ver que, aunque creía que era bastante bueno, todavía le faltaba mucho para convertirse en un buen desarrollador de software
  • Después de crecer a lo largo de varios años, hoy tiene una capacidad para manejar la complejidad del software incomparablemente mayor a la de entonces

Widgets animados para televisión (Animated Television Widgets)

  • En otro proyecto de la misma época estuvo a cargo de desarrollar widgets para una plataforma de set-top box basada en Java ME (Micro Edition)
  • El proyecto avanzaba en una estructura de colaboración entre tres partes
    • Su empresa: rol de vendor de software
    • Una gran empresa de telecomunicaciones: dueña de la marca del servicio de televisión DTH
    • El fabricante del set-top box: proveedor del hardware y la plataforma
  • Del lado de la empresa de telecomunicaciones preguntaron si era posible aplicar a los widgets efectos de animación como entrada y salida deslizante
  • En una reunión con socios, el fabricante del set-top box afirmó categóricamente que ese set-top box no soportaba animaciones y que era imposible
  • Se consideró que, si era posible dibujar el widget, también sería posible animarlo redibujándolo repetidamente mientras se cambiaba un poco su posición
    • Con ese principio se implementó una demo que funcionaba correctamente en el emulador
  • Cuando se compartió la demo en la siguiente reunión, el fabricante del set-top box reaccionó con molestia y exigió que se detuviera el trabajo de inmediato
    • La razón fue que contradecía su postura oficial de que eso era imposible
  • Intervino un representante de la empresa de telecomunicaciones y reprendió con dureza al fabricante diciendo que “ellos están mostrando que sí pueden implementar una función que ustedes dijeron que era imposible” y que
    no tenía sentido que, siendo el fabricante, no conocieran el rendimiento de su propio producto
  • Después, al probar en hardware real, la animación que se veía fluida en el emulador aparecía en la pantalla del televisor con tirones evidentes
  • Durante varias semanas se intentó ajustar la tasa de cuadros, cambiar el método de buffering y optimizar el bucle de renderizado
    • Quedó en evidencia el límite de un hardware embebido con rendimiento insuficiente para soportar el cómputo y el renderizado
  • Al final, la empresa de telecomunicaciones decidió que era mejor no tener la función que tener una animación mediocre, y la descartó por completo
  • En consecuencia, se confirmó que la evaluación del fabricante del set-top box había sido, en términos prácticos, la correcta

Buenas bendiciones (Good Blessings)

  • En 2009, después de trabajar cerca de un año en RSA Security, buscó un trabajo intelectualmente más estimulante, centrado en matemáticas y algoritmos
  • El científico principal de RSA Laboratories, Dr. Burt Kaliski, propuso reunirse directamente para darle consejo sobre la dirección de su carrera
  • Con base en ese consejo se unió a un nuevo equipo, donde trabajó durante los siguientes 6 años
    • Generadores de parsers, especificación e implementación de lenguajes formales
    • Desarrollo de motores de indexación y consulta para bases de datos a escala de petabytes
    • Aprendiendo algo nuevo casi todos los días, vivió la etapa más disfrutable de su carrera
  • Varios años después, al darse cuenta de que aquella reunión breve había cambiado la trayectoria de su carrera, envió un correo de agradecimiento
  • La respuesta del Dr. Kaliski incluía una frase como esta
    • Así como otras personas invirtieron en su carrera, su objetivo era transmitir ánimo a quienes están en proceso de crecer
    • Pasar las buenas bendiciones de una generación a la siguiente

El marcador del CTF (The CTF Scoreboard)

  • En 2019 ya no era un ingeniero recién llegado de poco más de 20 años, sino un staff engineer de media carrera que llevaba años desarrollando sistemas de red y bases de datos de bajo nivel basados en C/C++
  • Su carrera entró en una nueva etapa liderando el desarrollo de microservicios basados en Go y Python
    • La transición fue relativamente natural porque ya usaba Python y Go en proyectos personales
  • En octubre, con motivo del mes de concientización sobre ciberseguridad, se realizó internamente una competencia CTF (Capture the Flag)
    • Estaba compuesta por distintos tipos de acertijos técnicos, como inyección SQL, criptografía débil, reversing de binarios y exploits de desbordamiento de pila
  • Aunque le pesaban la competencia y los problemas con límite de tiempo, participó y en unas 8 horas resolvió cerca del 90% de los retos para quedar en primer lugar
  • Mientras el concurso seguía en curso, colegas pasaban a menudo por su lugar, miraban su avance y expresaban sorpresa, convirtiéndolo en tema de conversación en la oficina
  • Llegó a escuchar por casualidad una conversación entre dos colegas jóvenes a quienes respetaba, hablando sobre su desempeño
    • Cuando uno elogió mucho el resultado, el otro respondió: “Claro, lleva más de 10 años trabajando en C
  • En la juventud, resolver este tipo de problemas se interpretaba como “ser inteligente”, pero ahora sintió claramente el cambio: de forma natural se entendía como resultado de la experiencia
  • Aunque los logros técnicos sean vistos como producto de la experiencia, de ahora en adelante quiere dejar una buena impresión por su profesionalidad, ética y forma de tratar a sus colegas

Reflexión general

  • Un recorrido de 25 años en la computación que empieza con curiosidad y continúa hacia la experimentación, la colaboración, la gratitud y la reflexión
  • Más que los logros técnicos llamativos, lo que permanece por más tiempo son las relaciones humanas y de aprendizaje formadas en el proceso
  • Las experiencias de cada etapa se conectan entre sí y se acumulan como crecimiento continuo y una actitud humilde
  • Al final, el núcleo de una carrera en desarrollo de software consiste menos en el código mismo y más en las historias de las personas con quienes se aprendió y trabajó

1 comentarios

 
GN⁺ 2026-02-09
Comentarios en Hacker News
  • Antes había confianza en que, si le encargabas trabajo a la gente, lo sacarían bien por su cuenta.
    Pero hoy les exigen a ingenieros junior diseñar sistemas al nivel de Twitter y memorizar soluciones de problemas de Leetcode.
    Antes eso era un procedimiento inútil, y se espera que los LLM terminen con esa cultura.

    • Hubo una respuesta en tono de broma: “Si los LLM van a acabar con eso, ¿también incluyen a los juniors?”
    • Hoy la especialización se ha vuelto mucho más marcada: gente que solo hace frontend o solo backend. También hay muchos que solo hacen React o solo Go.
  • Yo empecé de una forma parecida.
    En tercero de primaria vi el libro “Make Your Own Web Page! A Guide for Kids” en la feria del libro de la escuela y le pedí a mi mamá que me lo comprara.
    En ese entonces pensaba que internet era casi algo exclusivo de las empresas, así que descubrir que yo mismo podía hacer una página web me atrapó por completo.
    Mientras aprendía HTML, sentía que me había vuelto hacker, y la maestra quedó tan sorprendida que hasta llamó a mis padres.
    Después aprendí programación con “Sams Teach Yourself C in 24 Hours”, un libro de ActionScript para Flash MX 2004 y un libro de C++.
    Gracias a eso terminé armando una carrera bastante buena, y hace poco conseguí de nuevo ese libro en eBay, lo releí y me sacó una sonrisa.

  • Me dio mucha risa la parte en la que el empleado de la telefónica le dice al encargado del set-top box: “cállese”.
    Toda la situación era una escena absurda pero muy graciosa. A menudo la gente se obsesiona con cosas innecesarias y termina metiéndose sola en problemas.

    • El encargado del set-top box solo tenía que decir: “en el hardware real es difícil implementarlo de forma fluida”.
      Se terminó haciendo quedar como un tonto sin necesidad. Aun así, fue un texto muy divertido.
  • Me identifiqué con lo de que el instalador hecho en Python siempre necesitaba intervención manual porque sus supuestos sobre el entorno estaban mal.
    Yo también me pasé medio día configurando un entorno de desarrollo para SDR. El infierno de dependencias sigue igual.
    Al final funcionó, pero fue un desastre total.

    • Python es un desastre total para empaquetar ejecutables.
      Está bien cuando controlas el entorno con contenedores, como en el lado servidor, pero fuera de eso no lo quisiera usar jamás.
    • En algunos lugares donde trabajé, configurar el entorno de desarrollo tomaba hasta dos días.
      Había una mezcla de software comercial anticuado y proyectos OSS abandonados, y cada pocos meses algo se rompía al azar y frenaba el desarrollo.
      Al final, una empresa optó por levantar instancias EC2 basadas en AMI para cada desarrollador, pero hasta el CLI que las administraba se rompía seguido.
      De verdad fueron tiempos “interesantes”.
  • Yo también ya estoy entrando en mi año 20 de carrera, pero como siempre he hecho desarrollo web, siento que no tengo tantas anécdotas interesantes.

  • Mientras más envejeces, menos se sorprende la gente cuando resuelves problemas técnicos.
    Aun así, si algún día sigo programando de viejo, tal vez vuelva a causar impresión.

  • Con la frase “saltó al punto de reinicio del procesador”, me dio la impresión de que no solo se reseteó la CPU, sino también la actitud de aprendizaje de la persona.

    • De verdad me da mucha curiosidad saber qué experiencia vivió esa persona y qué pasó después.
  • Si te interesa DevOps, recomiendo "Tales from the Machine Room" de Davide Bianchi.

  • Dijeron que antes no pudieron comprar el dominio “susam.com”, pero ahora está en venta.
    Quizá hasta se pueda conseguir más barato que el precio de lista. Claro, .net también está bien, pero si hay apego emocional, vale la pena intentarlo.
    Gracias por compartir tan buenas historias.

  • La experiencia de haber trabajado en la industria del software antes de los LLM es algo que solo se entiende de verdad si se vivió en carne propia.