Qué ha funcionado en Ciencias de la Computación: 1999 vs. 2015 (2015)

Lenguajes heredados y específicos de la industria

  • Muchos sistemas críticos dependen de tecnología “vieja” o de nicho: Erlang (telecomunicaciones), COBOL (banca), MATLAB/FORTRAN (científico), MUMPS (salud).
  • La discusión pregunta qué se puede aprender de por qué esos lenguajes tienen éxito y siguen arraigados.
  • Una visión: la adopción y evolución de los lenguajes se parece a la de las lenguas habladas: impulsada más por fuerzas sociales e históricas que por el mérito técnico.

Sistemas de tipos sofisticados y TypeScript

  • Se elogia TypeScript por haber “realizado” la tipificación fuerte para la mayoría de la programación web, especialmente para quienes no tienen formación formal en CS.
  • Otros sostienen que sistemas de tipos similares o más fuertes ya existían décadas antes; el principal logro de TS es llevarlos a la mayor base de practicantes.
  • Debate sobre cuán “sofisticado” es realmente TS comparado con Java/C#/Checker Framework:
    • A favor: tipos estructurales, uniones, tipos mapeados, inferencia rica, bibliotecas potentes (p. ej., SQL a nivel de tipos).
    • En contra: toma mucho prestado de Java/C#, carece de una especificación formal y puede comportarse de formas sorprendentes.

Tipado estático en lenguajes dinámicos

  • Python y JavaScript están ganando tipado opcional; herramientas y guías de estilo lo están volviendo semimandatorio en los equipos.
  • Algunos temen que el tipado obligatorio traicionaría el propósito de Python, y predicen un fork o un nuevo lenguaje sin tipado.
  • Otros dicen que “obligatorio” en la práctica sigue permitiendo salidas (Any, casts), lo que lo hace menos doloroso que los lenguajes totalmente estáticos.
  • Se valoran los tipos por el soporte del editor, la incorporación a bases de código grandes y la coordinación del equipo, pese a la fricción adicional.

RISC, CISC y conjuntos de instrucciones

  • Fuerte hilo que retoma el “RISC = No” del artículo:
    • Muchos ven ahora el dominio móvil de ARM y los M-series de Apple como evidencia de que RISC es un “Sí” o al menos un “Quizá”.
    • Contraargumento: la verdadera división es x86 frente a no‑x86; ARM y x86 modernos dependen mucho de micro‑operaciones y difuminan las líneas RISC/CISC.
  • Algunos enfatizan que las instrucciones de ancho fijo de ARM permiten una decodificación muy ancha y eficiente, lo que contribuye a su alto rendimiento por vatio.
  • Otros sostienen que RISC importaba originalmente cuando los presupuestos de transistores eran ajustados; hoy podemos permitirnos ISAs complejas y tuberías profundas.
  • RISC‑V se cita como un éxito principalmente por su apertura y no por su “RISC‑ness” en sí, aunque los núcleos RISC‑V pequeños ni siquiera usan micro‑operaciones.
  • La discusión se adentra en comparaciones históricas (R2000 vs 80386), tuberías vs velocidad de reloj, nodos de proceso y microcódigo, sin un consenso único.

Capacidades y seguridad

  • Se aclara que “capacidades” significa seguridad basada en capacidades (tokens no falsificables que conceden derechos específicos, por ejemplo, descriptores de archivo).
  • Los diálogos de permisos en apps móviles están vagamente relacionados, pero en su mayoría implementan permisos semiestáticos basados en identidad, no sistemas de capacidades completos.
  • Las capacidades se consideran elegantes, pero rara vez se usan como única base de la seguridad del mundo real; aparecen sobre todo dentro de sandboxes y código de bajo nivel del SO.

Programación funcional vs “estilo funcional”

  • Muchos ven la “FP pura” como un “No” práctico, pero las ideas FP (lambdas, pattern matching, sum types, APIs de orden superior) como cada vez más comunes.
  • Punto de vista 1: los lenguajes híbridos (Java/C#/JS con características FP) ofrecen la mayoría de los beneficios de FP manteniéndose imperativos/OO.
  • Punto de vista 2: esos híbridos son subóptimos; la FP verdadera necesita más que lambdas: por ejemplo, orientación a expresiones, inmutabilidad por defecto, estructuras de datos persistentes y gestión explícita de efectos.
  • Debate en curso sobre qué define la FP:
    • Algunos dicen que las funciones de primera clase bastan.
    • Otros insisten en condiciones más fuertes como transparencia referencial y manejo estructurado de efectos (mónadas o sistemas de efectos alternativos).
  • Aclaración de que los “records” en sí no son inherentemente funcionales; preceden a la POO y existen en muchos paradigmas.
  • Deriva aparte sobre qué hace que algo sea “orientado a objetos”, sin acuerdo; algunos ven los records en Java como anti‑OO porque minimizan el estado y comportamiento ocultos.

Paralelismo, GPUs y Rust

  • Se pregunta si las GPUs/TPUs “cuentan” como paralelismo para la clasificación del artículo.
    • Una postura: implementan el modelo de “el mago en una caja”: kernels paralelos escritos por expertos, no programación paralela de propósito general.
    • Otra: casi todas las apps GUI/web usan paralelismo de GPU de forma implícita, y además map-reduce y SIMD son donde realmente funciona el paralelismo.
  • Se propone Rust como algo que podría cambiar el panorama del paralelismo, con su sistema de propiedad/borrow aportando fuertes garantías de seguridad en hilos además de seguridad de memoria.

Redes neuronales y cambios en las evaluaciones

  • Algunos sugieren que el estado de las NN sería “Sí” para 2024, señalando los grandes trabajos de deep learning alrededor de 2014–2015.
  • Otros subrayan que las redes neuronales han tenido varias fases de auge desde los años 60; 2015 fue un resurgimiento construido sobre décadas de trabajo previo.

Meta: actualizar “What’s Worked” para 2024

  • Varios comentaristas quieren una tabla actualizada:
    • RISC pasó de “No” (2015) a al menos “Quizá”.
    • Los sistemas de tipos sofisticados son más prominentes (Rust, TS avanzado), y podrían haber pasado de “No” a “Quizá/Sí”.
    • Las ideas funcionales ahora son características “esperadas” en muchos lenguajes principales.
  • Existe cautela general de que cualquier clasificación sí/quizá/no envejece rápidamente y no debe tratarse como verdad intemporal.