Nuestros cursos:

Nuestros cursos:

Introducción general

Con el avance tecnológico, no escribimos menos. Escribimos más. Mensajes de chat, correos electrónicos, declaraciones para trámites, solicitudes de ingreso, instrucciones para dispositivos domésticos. La complejidad de estas peticiones varía desde un simple “Cerrar” hasta un “Haz un benchmark del rendimiento de las APIs de transcripción de OpenAI, Hugging Face y AssemblyAI con un mismo archivo de audio”. La diferencia no radica solo en la complejidad de las consignas y la magnitud de los resultados obtenidos, sino en el tipo de formación necesaria para realizarlas. La educación sigue siendo el factor que marca la diferencia.

Un avance tecnológico sin progreso educativo nos condenaría a desperdiciar una herramienta poderosa en demandas triviales, transformándonos en eternos dependientes. Por otro lado, los distintos soportes de escritura (teléfono, computadora, lápiz y papel) implican diferentes niveles de activación de nuestras funciones cognitivas. La escritura no solo nos permite actuar sobre el mundo, sino también sobre nosotros mismos.

Los estudiantes de ingeniería informática ingresan hoy a su carrera en un contexto muy especial: deben desarrollar sus propios procesos de pensamiento para estar a la altura de una futura interacción con interlocutores extremadamente sofisticados, como las inteligencias artificiales.

En esta oposición entre pensamiento humano y máquina, nuestros propios procesos cognitivos se encuentran en una clara desventaja histórica: son invisibles, aún poco comprendidos y en constante debate. Por el contrario, la IA parece omnipresente, y sus resultados son aparentemente incuestionables, visibles y tangibles.

La educación no puede evitar que los estudiantes realicen peticiones de baja participación cognitiva y obtengan resultados triviales. Pero debe crear un entorno donde los humanos también se hagan peticiones a sí mismos, realicen esfuerzos intelectuales significativos para responderlas y sean reconocidos por ello. Es decir, debe revalorizar los procesos de pensamiento humano.

La ingeniería de software, más que otras ingenierías, está vinculada con la explicitación de los procesos de pensamiento y con la escritura. La psicología no le es ajena, y la escritura de programas y especificaciones son herramientas fundamentales. A menudo, los fracasos en el primer año de programación se deben a una falla en la comprensión de los problemas a resolver, agravada por una carga cognitiva excesivamente invertida en detalles sintácticos de los lenguajes de programación.

Hoy, cuando el problema de comunicarse con el ordenador parece haber sido superado, el estudiante enfrenta el verdadero desafío: comunicarse consigo mismo. Comprender los problemas planteados en el nivel abstracto para luego diseñar la solución automatizada.

El ser humano, muchas veces, no “sabe” cómo piensa, es decir, le cuesta hacer explícito su propio razonamiento y, por ende, cómo poder mejorar estos procesos. Superar esta desventaja cognitiva es urgente. Algunas intuiciones son suficientes para desarrollar intervenciones educativas simples. La escritura epistémica, o lo que es lo mismo: escribir para comprender, se revela como una herramienta fundamental para visibilizar el pensamiento. Esta práctica implica desacelerar la velocidad interactiva que se ha hecho parte de la vida cotidiana y permitir que emerja la comprensión profunda.

Curiosamente, aunque la escritura manual pueda parecer menos eficiente que la digital para producir resultados inmediatos se ha demostrado que es más eficaz para activar la cognición. De esta manera, los procesos de escritura se convierten en un componente esencial en una ingeniería que, con el tiempo, avanzará hacia el diseño de solicitudes cada vez más complejas, un campo que hoy comienza a definirse como la “ingeniería de prompts“.

Este documento tiene como propósito ofrecer una introducción a la informática desde una perspectiva psicológica e histórica, destacando la importancia de los procesos de escritura en los programas y revalidándolos como una herramienta fundamental para el pensamiento y el aprendizaje.

El material práctico, así como la contextualización histórica, se basa en la experiencia de la autora como docente de asignaturas de programación, introducción a la informática, e historia de la informática, tanto en el nivel medio como en el ámbito universitario, así como en la observación de clases en roles de ayudante, asesor o investigador, integrando conocimiento técnico y formación en psicología educativa.

El enfoque adoptado se ocupa de las principales dificultades conceptuales que enfrentan los estudiantes en esta etapa, integrando conocimientos provenientes de la psicología de la programación y la psicología cognitiva del aprendizaje, lo que convierte a este material en un recurso interdisciplinario de gran valor para promover reflexiones sobre la práctica docente.

Está dirigido a profesores y estudiantes de asignaturas introductorias a la informática y la programación, especialmente entre la educación media y el inicio universitario de carreras de ciencias de la computación (CC) o de otras carreras que incluyen informática en su currícula.

El contenido está dividido en dos secciones, la primera dirigida a docentes del área, la segunda, dirigida a los estudiantes.

En la primera sección, se ofrece una mirada crítica de la situación actual de la enseñanza de la programación, a nivel global pero situada en el contexto argentino y provincial, basada en publicaciones académicas y noticias recientes, desde el punto de vista de quienes enfrentan el desafío de enseñar programación hoy en carreras de ingeniería del software o asignaturas de informática.

En la segunda sección, se presenta una introducción dirigida al estudiante, acompañada de ejercicios diseñados como complemento al material de clases.

Estos ejercicios priorizan aspectos que suelen estar desatendidos en la enseñanza actual, tales como: la contextualización de la lógica formal para su aplicación en situaciones reales; una comprensión detallada y una descripción verbal precisa de los “pequeños” procesos que constituyen la base de la algoritmia; y la relación entre estos procesos lógicos y su fundamento físico en el hardware.

Por esto último, la primera parte de esta sección incluye una introducción al hardware, redactada en un lenguaje claro y accesible, que explica cómo estos componentes, a menudo pasados por alto, influyen y condicionan la lógica en las capas superiores. Estos puntos se consideran esenciales para reforzar. No así la implementación de los mismos en un lenguaje particular, que queda fuera del alcance de este libro.

La segunda sección no pretende abarcar todos los ejercicios necesarios para el aprendizaje de la programación, sino ofrecer ejemplos desde un enfoque distinto con actividades diseñadas para promover una comprensión más profunda y contextualizada de conceptos fundamentales.

Estas actividades fortalecen habilidades clave relacionadas con la expresión verbal y escrita, entendida aquí no como una escritura académica, sino como una escritura epistémica: una herramienta para conectar con el propio pensamiento, expresar el razonamiento crítico y reflexionar sobre los propios procesos cognitivos, en el contexto específico de la programación.

Además, se intenta mostrar por qué los ingenieros de software están más “cerca” de la escritura que otros profesionales de la ingeniería, ya que su labor implica no sólo escribir programas sino articular instrucciones precisas, estructurar ideas complejas y comunicarlas tanto a máquinas como a otros humanos.

La convicción subyacente es que, frente a los avances en inteligencia artificial generativa, resulta aún más importante desarrollar estrategias de escritura.

La investigación inicial sobre este tema, así como el diseño de algunos materiales, se inició en 2016, en el contexto de la asignatura Algoritmos y Estructura de Datos en una carrera de Ingeniería Informática en Rosario, Argentina.

En esa etapa inicial, se diseñaron ejercicios básicos para reforzar conceptos clave, dirigidos a estudiantes que enfrentaban dificultades en su primer año de formación.

Con el tiempo, el alcance de esta iniciativa se amplió hacia otras disciplinas, durante el dictado de cursos de informática que la autora impartió en carreras de medicina y ciencias de la salud, incorporando temas fundamentales de informática, como el funcionamiento de la memoria y los procesadores.

Otro aspecto singular de esta guía es la decisión de no centrarse en la enseñanza de un lenguaje de programación específico, salvo en algunos ejercicios comparativos. En lugar de ello, utiliza pseudocódigo como una herramienta abstracta que permite a los estudiantes enfocarse en el razonamiento algorítmico sin distraerse con los detalles sintácticos de un lenguaje particular.

Esta estrategia facilita la construcción de una base conceptual sólida y en cierto modo responde a la creciente automatización de tareas de bajo nivel por parte de la IA. En un futuro donde la IA pueda encargarse de roles específicos como la depuración y prueba de código, se requerirán profesionales capaces de articular problemas y soluciones a un nivel abstracto y verbal.

En un contexto donde la IA ocupa un lugar cada vez más prominente, resulta imprescindible fortalecer nuestra capacidad de razonamiento. Los procesos de pensamiento, aunque fundamentales, suelen ser invisibles y difíciles de identificar en tiempo real.

Este trabajo busca enseñar algo más que programar: su objetivo es cultivar la comprensión profunda, la habilidad de explicar conceptos con claridad y la capacidad de reflexionar críticamente sobre los propios procesos cognitivos.

Mediante el uso de escritura explicativa, se pretende que los estudiantes desarrollen competencias esenciales para el entorno tecnológico actual. Estas habilidades no solo les permitirán abordar problemas complejos con una visión estructurada y crítica, sino también adaptarse a los desafíos que plantea un mundo en constante evolución tecnológica.

La IA y el futuro de la Ingeniería del Software

En la mayoría de las carreras universitarias de Argentina, a partir del segundo cuatrimestre del primer año, se observa un fenómeno que, lamentablemente, se ha naturalizado, aunque no deja de ser angustiante: un gran porcentaje de los estudiantes abandona la cursada [1].

Aunque las causas de la deserción son complejas y exceden el alcance de este texto, muchos investigadores se esfuerzan por comprender y abordar este problema que afecta de manera estructural a la educación superior en el país.

En el caso particular de la carrera de Ingeniería en Sistemas Informáticos, algunas asignaturas específicas destacan por ser los principales puntos de inflexión en el rendimiento académico y la retención de estudiantes. Entre estas se encuentran Cálculo, Álgebra y Programación, materias fundamentales que suelen representar las mayores dificultades a la hora de aprobar.

Estas asignaturas no solo requieren un alto nivel de abstracción y razonamiento lógico, sino también un esfuerzo sostenido que muchos estudiantes no logran mantener, especialmente si carecen de bases sólidas en estas áreas desde su formación escolar.

Hasta hace pocos meses, los esfuerzos educativos en Argentina y en muchos otros países apuntaban a la promoción de la programación desde edades tempranas, integrándola como parte esencial de los planes de estudio en las escuelas primarias y secundarias. Sin embargo, un cambio inesperado hizo tambalear las bases de esta iniciativa: la irrupción de la Inteligencia Artificial Generativa (IAG) accesible para un público masivo.

Para comprender el impacto global y local de los cambios recientes en las carreras de CC, y en particular en la enseñanza de la programación, es necesario situarnos en el contexto actual. Comenzaremos con un breve recorrido histórico que explore la evolución de la ingeniería del software y de los lenguajes de programación, para luego abordar la nueva visión de ambas.

A continuación, profundizaremos en los fundamentos de esta propuesta de lectura, comprensión y prácticas para estudiantes ingresantes desde la psicología educativa. Esta propuesta también examina las habilidades clave que los estudiantes deben desarrollar y sugiere los tipos de ejercicios que deberían realizar. Las lecturas y prácticas que proponemos a los estudiantes se presentan en la Sección 2.

La Ingeniería de Software y su evolución

La ingeniería de software ha evolucionado significativamente desde sus inicios, pasando por distintos enfoques y paradigmas.

Los inicios: programación sin ingeniería (décadas de 1950-1960)

Como se mencionó en la sección anterior sobre evolución de los lenguajes de programación, durante los primeros años de la informática, el desarrollo de software era un proceso altamente artesanal y dependía exclusivamente del conocimiento de los programadores que eran en su mayoría científicos e ingenieros de otras disciplinas. No existían metodologías establecidas, y los sistemas se desarrollaban en lenguaje ensamblador y luego con lenguajes un poco más desarrollados como Fortran y COBOL.

El código se escribía sin estructuras formales ni prácticas sistemáticas, lo que hacía que el desarrollo dependiera en gran medida de la experiencia individual. La reutilización de código era escasa, y el mantenimiento resultaba difícil. Además, la falta de planificación estructurada provocaba errores costosos.

Este enfoque derivó en la llamada “crisis del software”, ya que el aumento en la complejidad de los sistemas superó la capacidad de gestión manual de los desarrolladores.

Métodos estructurados y modelos basados en datos (años 1970)

En respuesta a la crisis del software, surgieron metodologías estructuradas para mejorar la planificación y calidad del desarrollo. Aparecieron el Análisis Estructurado y el Diseño Estructurado, propuestos por Yourdon [2] y DeMarco [3]. También se formalizaron modelos de desarrollo como el Modelo en Cascada, presentado por Royce en 1970 [4].

Durante esta etapa, se introdujeron los diagramas de flujo de datos (DFD) y diagramas entidad-relación (ERD) como herramientas para visualizar la dinámica de la información, y se estableció una clara separación entre análisis, diseño, implementación y pruebas, lo que permitió que el desarrollo fuera más organizado.

A pesar de estos avances, estos métodos demostraron ser demasiado rígidos en proyectos grandes y en entornos donde los requerimientos cambiaban con frecuencia.

McMenamin y Palmer, en su obra de 1984 Essential systems analysis [5], identificaron una deficiencia profunda y estructural del análisis y diseño de sistemas. Los diseñadores estaban más preocupados por la implementación tecnológica (por Ej. qué ordenadores colocar y dónde) que por su significado funcional. En respuesta, desarrollaron un enfoque conocido análisis esencial del sistema.

El análisis esencial propone que, antes de considerar cualquier restricción tecnológica, es imprescindible comprender y modelar las funciones esenciales del sistema. Esto permite separar la solución informacional -que responde a las verdaderas necesidades del usuario- de las limitaciones impuestas por la tecnología que esté disponible en ese momento.

La tecnología se concibe como un facilitador posterior, y no como un condicionante inicial del proceso de desarrollo. Los principios claves del análisis esencial según estos autores eran:

  • Modelar las funciones esenciales sin restricciones tecnológicas
    Se debe imaginar un escenario en el que la tecnología es perfecta, permitiendo centrarse en las verdaderas necesidades del sistema sin verse limitado por herramientas específicas. Esto evita que las soluciones se vean afectadas por las limitaciones de hardware o software existentes en un momento dado.
  • Distinguir entre el “qué” y el “cómo”
    Se debe diferenciar qué hace un sistema (su funcionalidad esencial) de cómo lo hace (las herramientas tecnológicas utilizadas para implementarlo). Esta distinción permite que los desarrolladores piensen de manera más estructurada, facilitando la escalabilidad y la adaptabilidad futura.
  • Reducir la dependencia de ciclos de reescritura de código
    Un análisis sólido en la fase inicial permite minimizar el número de modificaciones futuras, dado que se construyen sistemas más robustos desde su concepción.

Proponemos volver a revisar los postulados del análisis esencial a luz del contexto actual de aprendizaje: la proliferación de herramientas de generación automática de código acelera los tiempos de diseño e implementación, sobre todo en las expectativas del estudiante. Pero sin una fase adecuada de modelado funcional, se corre el riesgo de crear soluciones que deban ser reescritas constantemente.

Programación orientada a objetos y métodos basados en componentes (años 1980-1990)

La rigidez de los métodos estructurados llevó a la adopción de paradigmas más flexibles, como la Programación Orientada a Objetos (POO) y el desarrollo basado en componentes, que permitieron a los desarrolladores organizar sistemas complejos y reutilizar componentes, entre otras mejoras. Lenguajes como Smalltalk, C++ y Java proporcionaron un marco de trabajo para desarrollar software de manera más modular y reutilizable [6].

Durante este período, se desarrollaron metodologías de modelado como la de Booch [6], [7], OMT (Object Modeling Technique) y UML (Unified Modeling Language) que permitieron representar de forma más precisa los componentes de los sistemas orientados a objetos y fueron fundamentales para establecer un enfoque más estructurado y sistemático en el desarrollo de software” [8].

El Lenguaje de Modelado Unificado (UML) es un intento por estandarizar los diagramas y las notaciones en el campo de la POO, permitiendo a los desarrolladores comunicar de manera más efectiva la estructura de los sistemas [9]. Además, el Proceso Unificado de Rational (RUP) integró la POO con enfoques iterativos [10].

Otro avance importante fue la reutilización de software mediante bibliotecas de clases y componentes, lo que mejoró la modularidad y mantenibilidad del software. Sin embargo, la falta de estándares comunes generó confusión sobre qué metodología era la más adecuada para cada caso.

La revolución ágil y el desarrollo iterativo (años 2000)

A finales de los 90 e inicios de los 2000, los enfoques tradicionales fueron cuestionados por ser demasiado rígidos. Esto llevó a la publicación del Manifiesto Ágil en 2001 y al surgimiento de metodologías más flexibles y centradas en las personas [11].

Aparecieron metodologías como Scrum, Extreme Programming (XP) y Kanban, basadas en el desarrollo iterativo e incremental con ciclos cortos de entrega. Se priorizó la colaboración con el cliente y la adaptabilidad a los cambios, reduciendo la documentación formal y enfocándose más en el código funcional [11], [12].

Aunque la agilidad trajo mayor eficiencia en equipos pequeños, la falta de estructura en proyectos grandes generó nuevos desafíos. Además, el enfoque excesivo en la flexibilidad llevó a que muchos procesos perdieran ingeniería formal, confiando demasiado en la experiencia individual [13].

Hacia la estandarización: la búsqueda de un marco común (2010-2014)

A medida que la industria reconocía la necesidad de equilibrar flexibilidad y estructura, se buscó un estándar que permitiera integrar diferentes enfoques sin perder rigurosidad.

Este esfuerzo llevó al desarrollo de Essence, que fue adoptado como estándar en 2014 por el Object Management Group (OMG). Con Essence, se logró unificar métodos ágiles y tradicionales en un marco modular, estableciendo principios comunes sin imponer una metodología específica. Se creó un lenguaje visual simple y estructurado para guiar a los equipos, lo que permitió mejorar la claridad y la adaptabilidad en el desarrollo de software.

Su enfoque no aboga por un retorno a los modelos rígidos de desarrollo, sino por una integración inteligente entre los principios del análisis estructurado y la flexibilidad de las metodologías ágiles [14].

El problema central en el desarrollo de software no es la falta de agilidad, sino la pérdida de enfoque en lo esencial. Para abordar este problema, propone:

  • Desarrollar habilidades de análisis crítico en los programadores, para que puedan abstraer la complejidad y centrarse en las funciones esenciales.
  • Evitar la dependencia inmediata de herramientas y frameworks, favoreciendo una comprensión profunda de los problemas antes de implementar soluciones.
  • Promover habilidades de comunicación efectiva, asegurando que el diálogo entre desarrolladores y usuarios sea claro y significativo.

Los futuros desarrolladores deberían adquirir la capacidad de realizar un análisis de causa raíz para identificar y comprender el origen de los problemas, con el fin de proponer soluciones óptimas. Esta habilidad no solo es importante para el diseño eficiente de software, sino que también es un elemento esencial en la mejora continua de procesos y metodologías dentro de cualquier organización, sin importar su tamaño o enfoque metodológico.

Desafíos recurrentes en la industria del software

Uno de los problemas más frecuentes en el desarrollo de software es la falta de claridad en los requisitos. Es común escuchar que los interesados (clientes) no colaboran de manera efectiva con los equipos de desarrollo.

Un aspecto crítico que se ha observado en la formación académica en ingeniería de software es la manera en que los estudiantes interactúan con los requisitos del software.

Los estudiantes reciben conjuntos de requisitos bien definidos y estructurados, lo que les permite desarrollar software de manera lineal y sin mayores complicaciones. Sin embargo, en la práctica profesional, los requisitos suelen ser ambiguos, incompletos o sujetos a cambios constantes.

Esta discrepancia entre el entorno académico y la realidad de la industria genera un problema significativo: los egresados no están completamente preparados para abordar situaciones en las que deben interpretar o reformular los requerimientos con clientes y usuarios. Como resultado, pueden no identificar correctamente la causa raíz de un problema.

Para cerrar esta brecha, es necesario que la enseñanza en desarrollo de software incorpore estrategias didácticas que reflejen con mayor precisión la realidad profesional. Algunos enfoques recomendados incluyen:

  • Uso de escenarios de requisitos ambiguos: Presentar a los estudiantes situaciones problemáticas con especificaciones deliberadamente incompletas o contradictorias, fomentando así el pensamiento crítico y la negociación con los “clientes” dentro de un entorno académico controlado.
  • Metodologías basadas en casos y problemas reales: Implementar dinámicas donde los estudiantes trabajen con escenarios empresariales reales o simulados, obligándolos a recopilar información, analizar datos y tomar decisiones en contextos inciertos.
  • Desarrollo de habilidades de comunicación y colaboración: Enfatizar la importancia del trabajo en equipo y la interacción con distintos roles dentro de un proyecto, para que los estudiantes comprendan la importancia de traducir necesidades del negocio en soluciones técnicas viables.

      En definitiva, la enseñanza del desarrollo de software debe ir más allá de la mera implementación de código y enfocarse en el desarrollo de habilidades analíticas que permitan a los futuros profesionales comprender y expresar claramente los problemas para mejorar la comunicación con los clientes.

      Esta visión es especialmente relevante en la actualidad, donde los LLM están transformando la forma en que se escribe código. La capacidad de formular correctamente un problema se vuelve más crítica que nunca, dado que la generación automatizada de código reduce la necesidad de escribir y depurar líneas específicas, pero no reemplaza la necesidad de un análisis del problema real.

      Riesgo de automatización en la industria y su relación con la demanda cognitiva de la tarea

      La demanda cognitiva se define como la cantidad y complejidad de los procesos mentales requeridos para ejecutar una tarea determinada. Implica funciones como la percepción, la memoria, la toma de decisiones, el razonamiento y la resolución de problemas [15].

      Según Kahneman [16], las tareas con alta demanda cognitiva requieren el uso del Sistema 2, es decir, un procesamiento mental deliberado, lento y analítico, en contraste con las tareas más automáticas que dependen del Sistema 1, caracterizado por respuestas intuitivas y rápidas.

      En el contexto laboral, la demanda cognitiva de un empleo se asocia con el nivel de procesamiento de información, creatividad, adaptabilidad y resolución de problemas que este requiere [17]. Las ocupaciones con alta demanda cognitiva incluyen aquellas que requieren análisis de datos, toma de decisiones estratégicas y habilidades interpersonales avanzadas, mientras que los trabajos de menor demanda cognitiva suelen involucrar tareas rutinarias y repetitivas que pueden ser fácilmente automatizadas.

      Un estudio de Levy y Murnane [18] demostró que la demanda cognitiva en el mercado laboral ha aumentado debido a la automatización y digitalización de procesos, lo que ha desplazado muchas tareas rutinarias hacia los sistemas computacionales, dejando a los trabajadores la responsabilidad de tareas que requieren juicio, creatividad y habilidades socioemocionales.

      El riesgo de automatización en diversas industrias está estrechamente relacionado con la demanda cognitiva de los empleos. Generalmente, las ocupaciones que requieren habilidades cognitivas avanzadas, como el pensamiento crítico, la resolución de problemas complejos y la creatividad, presentan un menor riesgo de ser automatizadas [19]. Por el contrario, los trabajos que implican tareas rutinarias y repetitivas son más susceptibles a la automatización [20], [21].

      La programación es una actividad de alta demanda cognitiva, ya que implica estructurar algoritmos, analizar problemas y diseñar soluciones eficientes. Sin embargo, con los avances en inteligencia artificial y herramientas de automatización del desarrollo de software, muchas de estas tareas están siendo optimizadas o directamente ejecutadas por sistemas automatizados.

      A medida que la automatización asume tareas de codificación repetitiva, los programadores pueden enfocarse en actividades de mayor nivel de abstracción.

      La automatización de la programación no significa la desaparición de la disciplina, sino su evolución hacia un enfoque más abstracto y estratégico. Las habilidades esenciales para el futuro de la industria del software no estarán tanto en el conocimiento experto de un lenguaje de programación, sino en la capacidad de análisis, la representación de problemas el modelado conceptual, el diseño arquitectónico y la toma de decisiones estratégicas.

      La nueva ingeniería de software: más allá de la sintaxis del código

      A lo largo de la evolución de la ingeniería de software, hemos visto cómo las herramientas, lenguajes y metodologías han cambiado según se medía su eficiencia en la práctica. Pero no hay una relación directa entre esta evolución y la preparación que un estudiante ingresante debe tener.

      Hasta ahora, de los estudiantes ingresantes sólo se esperaba que aprendan ciencias formales y programación. Desde la programación en ensamblador hasta los enfoques ágiles y la estandarización con Essence, el desarrollo de software ha transitado un camino en el que la complejidad del código ha sido progresivamente gestionada con mejores estructuras y abstracciones.

      A pesar de este avance técnico, ha quedado en evidencia un nuevo desafío: el problema ya no es solo escribir código correcto, sino comprenderlo, comunicarlo y trabajar de manera efectiva en equipo.

      En este nuevo escenario, la competencia técnica sigue siendo fundamental, pero no suficiente. Los desarrolladores de software deben desplegar también su capacidad de análisis, argumentación y comunicación. La escritura, en particular, se convierte en una herramienta clave para estructurar el pensamiento, si es necesario documentar el razonamiento detrás de las decisiones y mejorar la colaboración dentro de los equipos.



      Deja un comentario