- 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
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
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
Es interesante ver cómo se repite ese redescubrimiento donde cada generación cree que lo descubrió primero
Aprender los problemas y soluciones del pasado nunca es una pérdida de tiempo
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
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
printHace 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
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++
y recuerdo que me sorprendió que BASIC diera un resultado inesperadamente rápido
Eso me hizo sentir de forma concreta por qué Python es útil en IA
El código vectorizado sobre memoria lineal es muchísimo más rápido que datos dispersos en el heap
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
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
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