4 puntos por GN⁺ 2025-10-25 | 1 comentarios | Compartir por WhatsApp
  • Este texto propone clases de ciencias de la computación realistas y satíricas que los desarrolladores de software deberían tomar, aunque en realidad no existan
  • Cada clase deja al descubierto de forma crítica los problemas de la cultura de desarrollo moderna y ciertas formas de pensar sesgadas
  • Por ejemplo, aborda la fe ciega en el paradigma orientado a objetos, el descuido de la UX en las herramientas de línea de comandos y los malentendidos sobre el rendimiento de los lenguajes lentos
  • También incluye materias sobre obsesiones psicológicas y hábitos improductivos de los desarrolladores
  • En conjunto, presenta con humor los límites de la educación en ciencias de la computación y la necesidad de una autorreflexión dentro de la cultura de desarrollo

CSCI 2100: Olvidar la programación orientada a objetos

  • Este curso trata sobre el concepto de variables y funciones que no pertenecen a una jerarquía de objetos
    • Se aleja del pensamiento centrado en la orientación a objetos para explorar la flexibilidad y simplicidad de la programación funcional
    • Presenta la “función (function)” como un concepto más general y reutilizable que el “método (method)”
  • Como prerrequisito, cuenta cualquier clase en la que se haya usado el término “abstract base class”
  • Su objetivo es desmontar la dependencia excesiva del paradigma orientado a objetos y replantear la forma esencial de pensar la programación

CSCI 3300: Estudios de software clásico

  • Clase dedicada a analizar y debatir productos de software históricamente importantes
    • Entre los ejemplos están VisiCalc, AppleWorks, Robot Odyssey, Zork y MacPaint
  • El enfoque está puesto en la interfaz de usuario (UI) y en cómo las limitaciones del hardware impulsaron la creatividad
  • A través de innovaciones nacidas de restricciones del pasado, vuelve a poner en primer plano los principios fundamentales del diseño de software moderno

CSCI 4020: Escribir código rápido en un lenguaje lento

  • Trata sobre cómo escribir código de alto rendimiento incluso con lenguajes interpretados (como Python)
    • Explora estrategias para hacer análisis de rendimiento (performance analysis) a alto nivel y lograr eficiencia de nivel C++
  • Busca al mismo tiempo reducir la fragilidad del código y mantener el disfrute de desarrollar
  • Es una clase que rompe con la idea de que “los lenguajes lentos son lentos” y muestra las posibilidades de optimización en el diseño del lenguaje y su entorno de ejecución

CSCI 2170: Experiencia de usuario (UX) en herramientas de línea de comandos

  • Curso introductorio sobre principios de diseño de experiencia de usuario para programas basados en línea de comandos
    • Toma como temas centrales la relevancia, la legibilidad y la minimización de la salida
  • Usa el comando ls de UNIX como caso de estudio para analizar los problemas de exceso de opciones e interfaces complejas
  • Enfatiza que las herramientas de línea de comandos también necesitan un diseño centrado en el usuario, igual que una UI gráfica

PSYC 4410: La psicología de las obsesiones del programador

  • Explora obsesiones improductivas y patrones de pensamiento compulsivo en los que suelen caer los desarrolladores de software
    • Ejemplos: formateo de código, taxonomías, sistemas de tipos, fragmentación excesiva de archivos, etc.
  • Analiza desde la psicología la reacción crítica automática (knee-jerk criticism) que aparece al enfrentarse a un sistema desconocido
  • Es una clase para entender los sesgos cognitivos y las tendencias perfeccionistas de los desarrolladores, y buscar un equilibrio entre colaboración y creatividad

Contexto general

  • Esta lista no es un plan de estudios real, sino una crítica satírica de la educación en ciencias de la computación y de la cultura de desarrollo
  • Cada materia revela los puntos ciegos de una forma de pensar centrada en la tecnología y exhorta a los desarrolladores a tener flexibilidad mental y autorreflexión
  • Aunque fue una publicación de 2015, contiene una conciencia crítica que sigue siendo vigente hoy

1 comentarios

 
GN⁺ 2025-10-25
Comentarios de Hacker News
  • CSCI 3300: Estudios clásicos de software
    Lo que Alan Kay ha enfatizado durante décadas es que seguimos reinventando conceptos que ya quedaron establecidos a fines de los 70
    Comparto su frustración de que, así como los artistas estudian historia del arte, los programadores también deberían estudiar la historia de la informática

    • Cuando estudiaba en RIT había una materia optativa llamada ‘History of Computing’. Cubría desde el ábaco hasta mainframes y redes, y todavía siguen disponibles las notas de clase
    • La historia del arte o de la filosofía abarca miles de años, pero la historia de la computación apenas tiene una generación o dos o tres generaciones
      Me parece forzado comparar la computación, que depende del rendimiento del hardware físico, con el arte
      Pensar que la forma de resolver problemas en 1970 se aplica igual en 2025 es perder de vista la realidad
    • Una vez vi en GitHub que alguien preguntó “¿En qué se diferencia esto de Ansible?” y le respondieron “Es la primera vez que escucho de Ansible”
      Es interesante ver cómo se repite ese redescubrimiento donde cada generación cree que lo descubrió primero
    • Cuando trabajas con fundadores, muchas veces presentan como nuevo un concepto que ya existía
      Aprender los problemas y soluciones del pasado nunca es una pérdida de tiempo
    • En la universidad tuve una tarea de “ensayo sobre la historia de los sistemas operativos”, y elegí OS X (Snow Leopard)
      Ese proceso me ayudó a entender a fondo la evolución de Unix y del software comercial, y terminé totalmente de acuerdo con Alan Kay
  • CSCI 3240: Ignorar el hype
    Una materia para aprender a ignorar las modas de las plataformas o bibliotecas más recientes
    Luego CSCI 3120: Desarrollo impulsado por la novedad trataría justo lo contrario: cómo seguir las modas sin perder el interés
    No se pueden cursar al mismo tiempo
    Otras materias podrían ser técnicas para reuniones (PSYC 4870), aceptación de la fricción organizacional (PSYC 5630), entre otras,
    enfocadas en la comunicación y motivación realistas dentro del trabajo

  • CSCI 4810: El laboratorio del rechazo
    Una materia de laboratorio donde se simulan pedidos de producto poco éticos y presión por fechas de entrega, y solo apruebas si logras rechazarlos según estándares profesionales

    • CSCI 4812: El laboratorio de la carrera trataría la realidad de encargarte del trabajo que queda después de que tus colegas aceptan exigencias poco éticas y se van
    • En la práctica, muchos programas de grado ya incluyen cursos relacionados con ética
    • Pero al final las universidades priorizan la empleabilidad de sus egresados
  • Propuesta de una materia de depuración
    Estaría bueno que existiera una materia para aprender a encontrar la causa raíz de los bugs y usar distintas herramientas

    • Como en un laboratorio de química, podría consistir en darle al estudiante una base de código legacy llena de errores y que el curso termine cuando haga pasar todas las pruebas
    • También habría que aprender a leer código de otras personas y a no derribar sin cuidado la estructura existente (Chesterton’s fence)
    • Incluso muchos ingenieros senior siguen depurando con print
      Hace falta un momento para hablar del salvador que es la depuración interactiva
  • CSCI 0001: Programación funcional y teoría de tipos
    La terminología arcana y las fórmulas del mundo académico han frenado la popularización de la programación funcional
    Ya es hora de aprender directamente por qué una mónada es un monoide en la categoría de endofuntores

    • Las funciones puras operan de forma muy natural incluso dentro de una context window
  • CSCI 4020: Escribir código rápido en lenguajes lentos
    Una materia que enseñe complejidad algorítmica usando lenguajes lentos (VB, Ruby, etc.) y muestre que el O(N) de Ruby puede ganarle al O(N²) de C++

    • En un libro que leí de chico comparaban bubble sort en FORTRAN con quicksort en BASIC,
      y recuerdo que me sorprendió que BASIC diera un resultado inesperadamente rápido
    • Hice prácticas convirtiendo loops de Python a operaciones vectorizadas de numpy y operaciones de tensorflow, midiendo la diferencia de velocidad
      Eso me hizo sentir de forma concreta por qué Python es útil en IA
    • Sería buenísimo que los ingenieros que usan Python todos los días entendieran por qué su código es lento
    • Muchas veces el aprovechamiento del hardware marca una diferencia mayor que la complejidad algorítmica
      El código vectorizado sobre memoria lineal es muchísimo más rápido que datos dispersos en el heap
    • Libro de referencia: Visual Basic Algorithms Ready-to-Run
  • Colección de entregas anteriores
    La serie “Computer science courses that don't exist, but should” continúa con la
    edición de 2015 (247 comments),
    edición de 2017,
    edición de 2018, entre otras

  • Me hizo acordar a una materia de Arqueología de software que llevé en la universidad
    Era una clase donde volvíamos a implementar ejercicios de compiladores de los años 70,
    y aunque en ese momento me pareció inútil, después me ayudó muchísimo a entender el diseño de sistemas

    • De hecho, el trabajo de detective digital es muy importante en bases de código grandes
      Es indispensable saber rastrear bugs antiguos, wikis, historial de versiones y trayectoria de los equipos
  • Hoy en día muchos programas de ciencias de la computación se han convertido en la práctica en una especie de escuela vocacional de programación
    Los estudiantes saben usar frameworks, pero no entienden la filosofía de diseño de lenguajes ni la evolución de los sistemas
    No hay que olvidar que la computación no es solo implementación, sino también una disciplina de pensamiento e ideas

    • Pero algunas grandes universidades públicas todavía mantienen una estructura de materias troncales casi igual a la de hace 25 años
      Por los criterios de acreditación, es difícil apartarse mucho del currículo
  • CSCI 3210: Codificación y procesamiento moderno de texto
    Una materia para aprender Unicode y UTF-8, y abandonar la idea de que ‘1 carácter = 1 byte’
    No solo cubriría codificación, sino también búsqueda, ordenamiento, renderizado de fuentes y manejo de emoji
    Es algo básico, pero muy poca gente lo entiende bien