Las implicaciones de la tesis no son solo técnicas o científicas. También trae consigo cuestiones filosóficas. Si llevamos el concepto de máquina de Turing al mundo físico, por ejemplo, se podría postular que el universo es una máquina de Turing universal, donde, dada la tabla de instrucción (leyes físicas), podemos crear una simulación de nuestro universo. Aunque claro, una objeción sería que las leyes físicas no son computables (aunque eso no está probado), pero incluso si lo asumimos, nada nos asegura que no se pueda construir otra máquina incluso más poderosa que la máquina de Turing.
Siguiendo este mismo razonamiento, Jack Copeland creó el concepto de «hipercomputación» (hypercomputation en inglés), el cual trata sobre la idea de poseer una máquina que no tenga los límites de una máquina de Turing. Con ello, se resolvería el problema de decisión. Aunque claro, la hipercomputación solo existe a nivel hipotético. Aun así, no se ha demostrado su imposibilidad.
Sin embargo, Martin Davis, en su artículo «The Myth of Hypercomputation» («El mito de la hipercomputación») del 2004, indicaría lo siguiente:
Si se permiten entradas no computables, entonces se pueden obtener salidas no computables. (Davis, 2004).
Con esta simple afirmación, Davis derriba la idea de la hipercomputación, ya que, si se aceptan valores no computables de entrada, entonces ¿por qué asumimos que siempre debería devolver una salida computable?
1.3 FILOSOFÍA DE LA CIENCIA DE LA COMPUTACIÓN
Es curioso ver la palabra «filosofía» en un libro de computación, y más si tiene como objetivo enseñar técnicas de programación. Quizá por este motivo existe este apartado. Tómelo como una persona que se autoinvita a su casa sin su consentimiento, pero que, a diferencia de ser una persona que viene con el propósito de hacerle perder el tiempo, este, en cambio, viene con noticias que «podrían» interesarle.
La filosofía de la ciencia de la computación es la búsqueda de respuestas a preguntas tales como las siguientes:
• ¿Qué es un programa computacional? ¿Un artefacto abstracto o concreto?
• ¿Cuáles son las diferencias entre programas computacionales y algoritmos?
• ¿Qué es una especificación e implementación?
• ¿Cuáles son los roles de los tipos de ciencias de la computación? ¿Es una ciencia o una ingeniería?
• ¿Qué es la abstracción en las ciencias de la computación? ¿Cómo se relaciona esta con la abstracción en las matemáticas?
• ¿La ingeniería de software plantea problemas filosóficos?
• ¿Cuál es el propósito de la programación?
• ¿Un algoritmo puede tener atributos estéticos?
• ¿Un algoritmo puede ser ético o solo es algo que corresponde a la persona que desarrolló el algoritmo?
En la filosofía, a diferencia de las ciencias, las preguntas ocupan un rol predominante por sobre las respuestas. Y esto no es casualidad, ocurre, como era de suponer, por la misma complejidad que supone encontrar respuestas a estas preguntas. Entonces, conceptos como hipótesis, experimento, refutación, falsación, etc. no forman parte de la filosofía; por el contrario, una teoría filosófica mide su valor sobre la base de su propia consistencia interna dentro del sistema propuesto.
Por lo mismo, el hecho de realizarnos preguntas trae consigo el mayor de los placeres, el intentar comprender mejor un área de estudio. Como todo profesional que busca la verdad, debe tener una visión crítica, abierta y evitar ideas dogmáticas que —generalmente en la computación— provienen de nuevas tecnologías de dudosa utilidad.
La computación no puede, simplemente, caer en un reduccionismo de aspectos técnicos o teóricos. Las implicaciones filosóficas de la computación son heterogéneas y, principalmente, inevitables. ¿Por qué? No solo por las cuestiones sobre si un sistema podrá alcanzar a emular o superar la inteligencia humana (inteligencia artificial fuerte) o sobre hasta qué límite un sistema que interactúa con humanos tiene responsabilidades éticas. Creemos, sin duda, que en los últimos años la orientación excesiva hacia la tecnología ha traído consigo cosas positivas y otras que no lo son tanto, especialmente por su parcial omisión y desvío de la atención hacia cuestiones que no tienen que ver con los principios de la computación.
Por ello, la filosofía de la ciencia de la computación se hace indispensable en un área que cada año se vuelve más compleja, especialista e imprecisa, y en la que surgen nuevos conjuntos de términos que muchas veces se usan de manera inexacta y que traen consigo una mayor confusión que claridad. La labor de una persona que pretenda abocarse a esta empresa desde un punto de vista filosófico es la búsqueda del orden y la sistematización general de toda el área. Para que a través de las preguntas adecuadas y propuestas sistémicas de cómo tratarlas (a saber: dar un orden y claridad a los conceptos que se usan a diario en los saberes que componen la computación), pueda y debiera, ser de ayuda a programadores, ingenieros y científicos. En consecuencia, la computación necesita de la filosofía.
Raymond Turner, en su libro Computational Artifacts. Towards a Philosophy of Computer Science («Artefactos computacionales. Hacia una filosofía de la ciencia de la computación»), que es uno de los referentes en cuanto a la filosofía de la ciencia de la computación, mencionó lo siguiente:
La ciencia de la computación es un área dominada por lenguajes. (Turner, 2018)
Creemos que no puede ser mejor afirmación para dar paso a los siguientes dos capítulos: (1) ¿qué es la programación? y (2) sobre los lenguajes de programación, en los cuales trataremos de demostrar que lo que dice Turner es verdad.
_________________
2 Conferencia en París, en el Congreso Internacional de Matemáticos de 1900.
3 Claramente Alan Turing no llamó a su modelo «Máquina de Turing». Él uso el término «a–machines» (la «a» por automática [máquinas automáticas]).
4 Hemos mantenido el nombre en inglés en los algoritmos en que, gracias a esto, se puede encontrar más literatura.
5 Para una breve introducción puede ver el apéndice A.
Capítulo 2
¿QUÉ ES LA PROGRAMACIÓN?
Haremos el trabajo de programar mucho mejor […] si respetamos las limitaciones intrínsecas de la mente humana y si nos acercamos a esta tarea como programadores humildes.
Edsger W. Dijkstra
La programación no es sinónimo de la ciencia de la computación ni de la ingeniería de software. Esta afirmación podría hacerle pensar a usted de manera implícita que la programación es algo informal, artesanal y, por ello, no tan importante. Pues no, todo lo contrario. La programación se erige sobre bases de la matemática y la lógica y hace uso de lenguajes formales a los que llamamos lenguajes de programación para crear artefactos abstractos: software, donde el medio para expresar estas ideas y llevarlas a la realidad son artefactos concretos: hardware. Prácticamente en cualquier área de la computación no podemos escapar de la actividad de programar. Algunas veces está más enfocada a la