54 puntos por GN⁺ 2025-03-11 | 9 comentarios | Compartir por WhatsApp
  • Muchos ingenieros de software trabajan sin pasión por el software
    • Trabajan simplemente para recibir un buen salario, pero sin pasión, al final el rendimiento disminuye
    • Si uno se queda estancado en tecnologías antiguas y creencias equivocadas sin aprender, no puede crecer
  • Elementos necesarios para convertirse en un buen ingeniero
    • Hay que entender la esencia de la ingeniería y construir conocimiento profundo
    • Hay que aprender continuamente nuevas tecnologías y abordarlas de forma crítica
    • Hace falta el hábito de aplicar y mejorar lo aprendido en la práctica

# Qué hace a un buen ingeniero

  • Definición de ingeniero

    "Una persona que aplica principios científicos para analizar problemas y resolverlos mediante diseño, escritura de código, construcción, creación, etc., haciendo del mundo un lugar mejor"

  • Capacidades requeridas para un ingeniero de software
    • Debe entender los principios de cómo funciona una computadora
    • Se requiere una comprensión profunda de cómo interactúan el hardware y el software
    • Hay que aprender desde las bases, sin depender solo de lenguajes o tecnologías abstraídas

Comprensión profunda del dominio

  • Se necesita una comprensión sólida de los principios fundamentales
    • Ingeniero mecánico → conocimiento de las propiedades de los materiales y sus aplicaciones
    • Ingeniero de software → comprensión de cómo funcionan la memoria y la CPU
  • Hay que aprender desde los principios básicos
    • Es indispensable una comprensión profunda de conceptos básicos como HTTP, estructura de memoria y funcionamiento del sistema
    • No hay que empezar desde niveles superiores, sino construir desde la base

Aprendizaje continuo

  • Hay que seguir aprendiendo sobre tecnologías recientes y tendencias de desarrollo
  • Hay que analizar críticamente las ventajas y desventajas de las nuevas tecnologías
  • Profundizar más en los nuevos temas descubiertos durante el proceso de aprendizaje
    • Así como al aprender matemáticas uno se conecta con temas más específicos, también hay que ampliar la profundidad del aprendizaje

Entender los límites y problemas de la tecnología

  • Hay que entender con claridad las fortalezas y debilidades de las herramientas o lenguajes
  • Hay que evitar una actitud de fe excesiva en un lenguaje o herramienta en particular
  • Es importante elegir la herramienta óptima para el proyecto

Aplicar el conocimiento en la práctica

  • No tiene sentido conocer solo la teoría
    • Hay que aplicar lo aprendido en proyectos reales
    • Debe usarse para resolver problemas o demostrar conceptos
  • Ejemplos de aplicación práctica
    • Construir prototipos pequeños
    • Resolver problemas que surgen en la vida cotidiana
    • Explicar y enseñar lo aprendido a otras personas

# Cómo convertirse en un mejor ingeniero

Desarrollar la capacidad de pensamiento crítico

  • El pensamiento crítico es un elemento central de la ingeniería
    • Es esencial para entender y cuestionar los conceptos y sus efectos
    • La falta de pensamiento crítico, o descuidarlo, genera ineficiencia y complejidad
  • Fortalecer la capacidad de pensamiento crítico
    • Al encontrarse con un concepto nuevo, no debe aceptarse sin más; hay que revisar su eficacia y validez
    • Hay que analizar lógicamente las ventajas, desventajas y alternativas de un enfoque específico
  • Material para aprender pensamiento crítico: consultar Critical Thinking

Leer más libros

  • La lectura es una forma efectiva de adquirir conocimiento
    • Existen libros sobre diversos temas relacionados con la ingeniería de software
    • No hay que aceptar simplemente el contenido de un libro; hay que abordarlo de forma crítica
  • Ejemplos de preguntas para leer críticamente
    • "¿Hay algún problema con este enfoque?"
    • "¿Existe una mejor manera?"
    • "Si yo lo hiciera distinto, ¿cómo lo haría?"
    • "¿Lo que explica este libro es realmente correcto?"
  • Desarrollar el hábito de tomar notas
    • Organizar y registrar lo aprendido y las propias ideas
    • Si se menciona un tema desconocido, investigarlo más a fondo
    • Se recomienda Obsidian como herramienta para tomar notas (puede elegirse según preferencia personal)
  • Lista de lectura recomendada

Aplicar lo aprendido en proyectos

  • Conectar la teoría con la práctica
    • El verdadero aprendizaje ocurre cuando lo aprendido se aplica en proyectos reales
    • Implementar realmente los conceptos permite una comprensión más profunda
    • Es importante construir uno mismo aunque sea proyectos pequeños o prototipos
  • Beneficios que se obtienen durante la aplicación práctica
    • Uno se enfrenta a problemas reales que no se ven en la teoría
    • En el proceso de resolver problemas, el conocimiento puede concretarse y mejorarse
    • Se fortalecen la capacidad de resolución de problemas y el pensamiento lógico
  • Formas de aplicar lo aprendido
  • Construir prototipos pequeños
    • Después de aprender un nuevo framework, lenguaje o concepto, intentar un proyecto pequeño
    • Ejemplo: después de aprender sobre indexación de bases de datos, implementar un sistema de búsqueda simple y comparar su rendimiento
    • Resolver problemas reales
      • Intentar resolver pequeños problemas que surgen en la vida diaria o en el trabajo
      • Ejemplo: automatizar trabajo manual repetitivo, mejorar problemas de degradación de rendimiento, etc.
    • Enseñar lo aprendido
      • Explicar lo aprendido a otras personas fortalece la comprensión
      • Escribir un blog, hacer un hilo en Twitter o debatir con colegas
      • Durante el proceso de enseñar, pueden descubrirse nuevas perspectivas
  • Si se aplica el conocimiento de manera continua, la comprensión teórica se convierte en capacidad práctica, y se puede crecer como un ingeniero más competente

Evaluar y mejorar el propio código

  • La autocrítica es un hábito clave de los ingenieros sobresalientes
    • Muchos ingenieros cometen el error de pensar que si el código funciona, "es suficiente"
    • Pero un verdadero ingeniero reconoce que siempre hay espacio para mejorar
  • Objetivo de la autoevaluación
    • No hace falta ser excesivamente duro con uno mismo
    • Lo importante es encontrar oportunidades de mejora continua
    • No basta con estar satisfecho con hacer que el código funcione; hay que buscar formas de mejorar el rendimiento, la mantenibilidad y la legibilidad
  • Efectos de la autoevaluación continua
    • La calidad del código mejora gradualmente
    • La autocrítica fortalece la capacidad de resolver problemas
    • Se puede seguir desarrollando constantemente el conocimiento y las capacidades propias

# Lista recomendada para ingenieros de software

Libros recomendados

  • Designing Data-Intensive Applications – diseño de aplicaciones centradas en datos
  • Introduction to Algorithms – (incluso la edición en coreano usa el título en inglés)
  • Writing a C Compiler
  • Essential Maths for Data Science – matemáticas esenciales para desarrolladores
  • Elements of Information Theory

Proyectos recomendados

  • Compilador - intentar escribir un compilador para el lenguaje elegido, tomando como referencia LLVM o JVM
  • Emulador - escribir un emulador simple de CPU (por ejemplo, 8086)
  • Motor de renderizado / motor de juego - escribir un programa gráfico usando OpenGL o Vulkan
  • Crear un visor y editor de memoria - escribir un programa que interactúe con la memoria de otros programas
  • Escribir un servidor HTTP - escribir un servidor HTTP en un lenguaje de bajo nivel
  • Evita sitios web o proyectos simples. Su efecto de aprendizaje puede ser bajo. Elige uno de los proyectos mencionados arriba, investiga el tema e intenta implementarlo por tu cuenta

Conclusión

  • Convertirse en un buen ingeniero no significa conocer muchos lenguajes de programación
  • Comprensión profunda de los principios básicos + pensamiento crítico + aplicación práctica son la clave
  • Se necesita una actitud de aprender, aplicar y mejorar constantemente
  • La ingeniería es un viaje sin fin, y es importante tener una disposición de crecimiento

Conclusión

  • La esencia de convertirse en un buen ingeniero
    • No se trata de conocer la mayor cantidad de lenguajes de programación, dominar el framework más reciente o perseguir cada nueva tecnología
    • La clave está en una comprensión profunda de los principios fundamentales de la ingeniería
    • Hay que aplicar lo aprendido en proyectos reales, pensar críticamente y seguir creciendo
  • Características de los mejores ingenieros
    • No dejan de aprender y adquieren nuevo conocimiento constantemente
    • Cuestionan continuamente sus propias suposiciones y buscan formas de mejorar
    • Aplican lo aprendido para resolver problemas reales y crecen colaborando con colegas
  • La ingeniería es un viaje de toda la vida
    • Se necesita curiosidad (curiosity), disciplina (discipline) y voluntad de crecer
    • Si se ponen en práctica estos principios, uno podrá convertirse no solo en un buen ingeniero, sino en un gran ingeniero

9 comentarios

 
gurugio 2025-03-11

También he contribuido en el área de gestión de memoria del kernel de Linux, y creo que entiendo hasta cierto punto cómo funcionan las cosas a bajo nivel, pero al final, viendo que terminé haciendo un trabajo que sin querer está lejos del desarrollo, pienso que quizá para convertirse en un ingeniero exitoso hay que actuar al revés de lo que dice este texto.

  • Seguir rápidamente las nuevas tecnologías
  • Pensar en el mercado antes que en la curiosidad personal
  • Saber venderse mejor que criticarse a uno mismo
  • Enfocarse en las pruebas de código más que en los principios/crecimiento
    Al volver, me di cuenta de que en Corea el mercado es demasiado pequeño y la competencia es muy fuerte, así que hay pocas empresas o puestos donde uno pueda concentrarse en desarrollar, y como todos compiten por esos pocos lugares, al final parece que hay que enfocarse en lo que más llama la atención para poder hacer el desarrollo que uno realmente quiere hacer.
 
malcomjj 2025-03-15

¡Yo también estoy de acuerdo! Y además, siento que la interpretación de qué tipo de ingeniero es un ingeniero "bueno" en este contexto varía demasiado de una persona a otra. Puede sonar extremo, pero incluso si uno entiende la importancia de los conocimientos fundamentales, me hace pensar si un ingeniero que no tiene valor en el mercado realmente es un buen ingeniero.

 
takesixnotfive 2025-03-12

De verdad me identifico mucho,,,
Es una pena que no sea un juego de qué tan bien entiendes y manejas lo esencial,
sino de qué tan bien usas cierto lenguaje y ciertas tecnologías de acuerdo con las tendencias,,

 
ethanhur 2025-03-11

Creo que también hay muchos ingenieros muy buenos en Corea, pero a mí también me deja cierta sensación de lástima por varias cosas debido al tamaño del mercado.

Pienso que habría sido bueno que a lugares como FuriosaAI les hubiera ido bien.

 
roxie 2025-03-16

¿FuriosaAI quebró...?

 
yoonda5898 2025-03-11

Me identifico un poco con esto... jaja
No sé si será solo el mercado coreano...

 
tsboard 2025-03-11

Hace poco di un seminario en la empresa para un estudio del lenguaje Kotlin, y recuerdo que la reacción fue buena porque traté de explicarlo comparándolo con C++, que es el lenguaje que más se usa en el departamento. En realidad yo casi no uso C++, y los miembros del equipo estaban viendo Kotlin por primera vez, pero de varias maneras siento que fue útil para el crecimiento de todos.

 
GN⁺ 2025-03-11
Opinión de Hacker News
  • Me gustó mucho la opinión sobre leer libros. A menudo veo que muchos ingenieros se pierden de mucho por preferir videos y publicaciones superficiales en lugar de documentación y libros

    • También me sorprende con qué frecuencia la gente hace preguntas sobre cosas triviales en vez de leer la documentación o al menos buscarlo en Google
    • La capacidad de buscar información es una habilidad muy importante
  • Estoy de acuerdo con muchos de los puntos mencionados en este artículo. Pero no estoy seguro de cómo conocer a fondo los fundamentos de CPU, memoria, HTTP, etc., ayuda a convertirse en un mejor ingeniero

    • La mayoría de los ingenieros trabajan en niveles de abstracción muy altos, y los lenguajes y frameworks usados en ese nivel no permiten acceso de bajo nivel a la memoria y cosas similares
    • No se debe ser ignorante sobre estos fundamentos, pero no termino de ver su aplicación cotidiana fuera del ámbito académico
 
sankalpa 2025-03-27

No conoceré los fundamentos a un nivel profundo, pero he visto que no conocerlos produce resultados realmente absurdos e inimaginables.
Por ejemplo, implementar algo de forma que primero cargue todos los registros de la BD en memoria y luego busque en memoria.
Cuando hay pocos registros funciona bien, pero cuando aumentan, la memoria revienta.
Lo programan así porque no entienden en absoluto la diferencia entre la memoria y la BD.
Este es solo un ejemplo; cada vez implementan las cosas en direcciones realmente impensables.
Un programador común(?) de verdad no puede ni imaginárselo.