De hecho, volví y volví a leer la carta original a Niklaus Wirth, el editor de CACM titulada Un caso contra la declaración IR A.
Esto es lo que pienso:
He estado programando durante casi 40 años.
- ¿Vale la pena cambiar a un estilo de edición modal (similar a vim) para mejorar el rendimiento como desarrollador?
- ¿Qué es la pila tecnológica de Faasos?
- ¿Qué sucede si PostgreSQL de Ruby on Rails se llena en Heroku?
- ¿Por qué una pequeña empresa de consultoría con un cliente con presupuesto limitado realiza un desarrollo basado en pruebas (TDD)?
- ¿Cuál es el punto de que las grandes casas de software compren desarrolladores talentosos más pequeños si solo homogeneizan y finalmente matan la IP y los talentos que compraron?
Hay casos en los que GOTO (o JMP o su equivalente) es inevitable. Estás y, debido a alguna condición relativa al estado, debes descontinuar lo que estás haciendo y estar , como AHORA MISMO. Auge. Hecho.
Los argumentos de Dijkstra aún se mantienen: cuanto más complejo es el entorno de ejecución del programa, menos capaces somos de razonar sobre el estado interno y gestionar las transiciones en orden de ejecución sin arruinar realmente nada. Caso en cuestión: estoy en el medio de ejecutar una llamada a procedimiento, y de repente tengo un GOTO que me saca del procedimiento en otra parte del programa principal. ¿Cómo, exactamente, se limpia la pila? ¿O alguien sabe que había una pila que necesita ser limpiada, o un estado de registro previo a la llamada que necesita ser restaurado?
Respuesta corta, no posible. Cambió el contador del programa de X a Y, y hará exactamente lo que le dijo que hiciera. Porque eso es lo que hacen las CPU.
Aquí está la ventaja: incluso escribiendo código simple (ya sea SO, o sistemas de control sin SO, o código de prueba para verificar nuevas CPU), rara vez uso GOTO. Tal vez una docena de veces en 40 años, una vez que llegué al punto en que me consideraba competente.
Pero todas y cada una de esas veces, era un requisito absoluto. La única forma de cumplir con el rendimiento y la función que el programa fue diseñado para ofrecer.
En estos días, con lenguajes de programación funcionales avanzados y marcos orientados a objetos pesados por el estado, me sorprendería que la mayoría de los programadores practicantes supieran qué demonios es GOTO y mucho menos por qué se considera “Malo”; simplemente no se enseña y no se aprende.
Pero para aquellos de ustedes tentados a usarlo, lea el periódico. (Solo dice que es una carta al editor, es realmente un documento). Y piensa mucho en lo que estás a punto de hacer.