La falacia del pensamiento computacional

La idea básica tras el movimiento de introducir el pensamiento computacional como una competencia básica es considerar que las capacidades y competencias necesarias para crear programas de ordenador son de aplicación a la vida de las personas en general.

El término fue acuñado por Jeanette M. Wing en el artículo “Computational Thinking” (PDF) en el cual lo defiende como:

It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and use.

Representa una actitud y una aptitud aplicable universalmente que todo el mundo, no sólo por científicos informáticos, estaría ansioso por aprender y usar.

En el artículo, Wing señala que:

Computational thinking involves solving problems, designing systems, and understanding human behavior, by drawing on the concepts fundamental to computer science. Computational thinking includes a range of mental tools that reflect the breadth of the field of computer science.

El pensamiento computacional implica resolver problemas, diseñar sistemas y entender el comportamiento humano, trabajando sobre los conceptos fundamentales de la informática. El pensamiento computacional incluye un abanico de herramientas intelectuales que reflejan la amplitud del campo de la informática.

La ISTE (International Society for Technology in Education) y la CSTA (Computer Science Teachers Association) han propuesto una “definición operacional” del pensamiento computacional.

Computational thinking (CT) is a problem-solving process that includes (but is not limited to) the following characteristics:

  • Formulating problems in a way that enables us to use a computer and other tools to help solve them.
  • Logically organizing and analyzing data
  • Representing data through abstractions such as models and simulations
  • Automating solutions through algorithmic thinking (a series of ordered steps)
  • Identifying, analyzing, and implementing possible solutions with the goal of achieving the most ef cient and effective combination of steps and resources
  • Generalizing and transferring this problem solving process to a wide variety of problems

These skills are supported and enhanced by a number of dispositions or attitudes that are essential dimensions of CT. These dispositions or attitudes include:

  • Confidence in dealing with complexity
  • Persistence in working with dif cult problems
  • Tolerance for ambiguity
  • The ability to deal with open ended problems
  • The ability to communicate and work with others to achieve a common goal or solution

En traducción personal:

El pensamiento computacional es un proceso de resolución de problemas que incluye, pero que no está limitado a, las siguientes características:

  • Formular problemas de una manera que permita utilizar un ordenador y otras herramientas para ayudar a resolverlas.
  • Organizar y analizar datos de forma lógica.
  • Representar datos a través de abstracciones como modelos y simulaciones.
  • Automatizar soluciones a través de pensamiento algorítmico (una serie de pasos ordenados)
  • Identificar, analizar e implementar soluciones posibles con la meta de lograr la combinación de pasos y recursos más eficiente y efectiva.
  • Generalizar y transferir este proceso de resolución de problemas a una gran variedad de problemas.

Estas capacidades están apoyadas y mejoradas por un cierto  número de disposiciones y actitudes que son dimensiones esenciales del Pensamiento Computacional. Estas incluyen:

  • Confianza al lidiar con la complejidad.
  • Persistencia al trabajar con problemas difíciles.
  • Tolerancia a la ambigüedad.
  • La capacidad de manejarse con problemas de final abierto.
  • La capacidad de comunicar y trabajar con otros para lograr una meta o solución común.

El Pensamiento Computacional no tiene la exclusiva de las capacidades que dice desarrollar

La lista de capacidades que son “dimensiones esenciales” del Pensamiento Computacional no me parecen, en absoluto, exclusivas del mismo. En realidad creo que son capacidades generales que podemos desarrollar por una multitud de vías y que benefician casi cualquier actividad humana concebible.

Es cierto que el desarrollo de software, al menos a nivel profesional, requiere de estas habilidades. Pero aún así tengo mis dudas de que las estrategias concretas sean aplicables a otros campos.

Por ejemplo, la tolerancia a la ambigüedad no me parece muy definitoria. En muchos aspectos desarrollar software es eliminar la ambigüedad con la que solemos trabajar cómodamente los seres humanos. La idea del “lenguaje ubicuo” de los proponentes del llamado “Diseño orientado por el dominio” buscar eliminar la ambigüedad estableciendo una lenguaje común a partir del conocimiento compartido entre los usuarios del sistema que se va a desarrollar (o expertos del dominio) y los programadores. Pero esa idea de establecer “lenguajes comunes” es una estrategia habitual en otras actividades como el diseño gráfico.

Estas estrategias de definición de lenguajes también contribuyen a la gestión de la complejidad, pues se trata de organizar sistemas complejos en base a reglas relativamente sencillas, y también para la comunicación, ya que al definir términos y eliminar ambigüedades estamos creando una herramienta que nos permite comunicarnos y coordinarnos con otros para lograr una meta común desde diferentes responsabilidades.

En realidad, los diseñadores gráficos e industriales llevan décadas utilizando este tipo de estrategias como forma de lidiar con los problemas del diseño, por lo que resulta bastante pretencioso apropiárselo como una aportación de la ciencia informática.

La idea de utilizar este tipo de estrategias en la educación tampoco es nueva, el movimiento del Design Thinking o Pensamiento de Diseño propone exactamente eso. Y en cierto sentido, el Pensamiento Computacional propone lo mismo.

¿Son computables todos los problemas?

Promover el Pensamiento Computacional (o el Pensamiento de Diseño, ya puestos) como forma general de resolver problemas puede llevarnos al reduccionismo de pensar que cualquier cosa puede resolverse aplicando el algoritmo adecuado.

En estos días hemos conocido el primer accidente mortal en un vehículo conducido por un piloto automático, esto es: conducido por un algoritmo. Otro accidente, esta vez sin víctimas, ha puesto en marcha una investigación oficial. Hasta cierto punto estos accidentes ilustran las dificultades de crear un programa de ordenador capaz de lidiar con todas las circunstancias extrañas que nos podemos encontrar en una carretera o las dificultades de percepción que nos pueden afectar a humanos y máquinas.

Esto nos lleva a pensar que puede ser imposible diseñar un sistema de conducción algorítmico “perfecto”, que pueda resolver cualquier problema posible de éste ámbito. O dicho de otro modo, no todo es computable.

Pero pensemos en cuestiones como los dilemas morales. Siguiendo con el tema de los algoritmos de conducción, se ha planteado recientemente la idea de ¿Qué pasaría si un algoritmo tiene que escoger entre proteger la vida del conductor y los ocupantes del vehículo y la vida de otras personas implicadas en un accidente? ¿Quién es responsable?

Entonces nos encontramos ante un problema realmente complejo, que no tiene una solución “asépticamente algorítmica”.

Quizá tampoco haga falta irse tan lejos a buscar problemas que no son computables, en el sentido de que no pueden resolverse mediante algoritmos.

Eficiencia y eficacia

La búsqueda de soluciones eficaces y eficientes para la realización de una tarea ya la encontramos, por ejemplo, en los métodos de organización científica del trabajo del Taylorismo, a principios del siglo XX, con las consecuencias sociales y económicas que tuvo. Cuestiones como el análisis de los movimientos y pasos necesarios para ejecutar una tarea, la supresión de los innecesarios, el entrenamiento, etc. buscaban incrementar la productividad, eficiencia y eficacia de los trabajadores.

De nuevo nos encontramos con una idea que no es realmente nueva y que en el desarrollo de software se traduce en una serie de técnicas y estrategias específicas para la optimización del funcionamiento del software. El proceso de escribir un programa conlleva una serie de iteraciones sobre el código con las que se va buscando el uso eficiente de los recursos computacionales.

Surgen dos preguntas:

¿Son generalizables las estrategias propias del desarrollo de software para otros tipos de problemas?

En resumidas cuentas: se trata del problema de la transferencia entre unos ámbitos de aprendizaje y otros. A medida que nos especializamos en un ámbito, la capacidad de transferencia se reduce, pues es más difícil encontrar puntos comunes con otros problemas en otros ámbitos. Son ideas y principios generales las que pueden aplicarse a dominios más específicos.

Por ejemplo, los patrones de diseño de software son soluciones a problemas comunes de diseño de programas y establecen un lenguaje común para los programadores, y en general están basados en metáforas tomadas de otros ámbitos como indican sus propios nombres: decorador, factoría, fachada, adaptador, plantilla, visitante, etc.

Así que parece más correcto pensar que las estrategias y técnicas de computación se benefician de principios e ideas más generales. Dicho de otro modo: estrategias generales son adaptables a diversos ámbitos, estrategias específicas no son fácilmente generalizables.

¿Deben ser todas las soluciones eficientes?

Si analizamos las interacciones sociales, inclusive algunas muy básicas, veremos que son, en general y en términos computacionales, bastante ineficientes al estar cuajadas de diversos protocolos y fórmulas de cortesía que se necesitan porque se trata de relaciones entre seres humanos.

La forma en que nos hacemos y devolvemos favores o regalos, la forma en que iniciamos conversaciones con desconocidos o con amigos, los gestos que consideramos adecuados en una relación de amistad, de compañerismo o de amor, son ejemplos de actividades que serían costosas computacionalmente hablando, ya que implican una serie de pasos y rodeos para llegar de manera indirecta al objetivo.

Las soluciones a los problemas de interacción entre personas no pueden optimizarse en ese sentido de eficiencia. Hay otras muchas consideraciones que hay que tener en cuenta y que dependen tanto de la situación como de los interlocutores.

Aunque trata de explicarle esto a Sheldon Cooper de la serie The Big Bang Theory.

A lo mejor tenemos que enseñar de forma diferente las matemáticas

La teoría de los algoritmos forma parte de las matemáticas, la lógica y las ciencias de la computación. Sin embargo, los algoritmos, entendidos como el conjunto de instrucciones para realizar una actividad mediante pasos sucesivos está presente en múltiples áreas de la vida.

Por recurrir a ejemplos sencillos y cotidianos tenemos que una receta de cocina es un algoritmo (en este sentido amplio de la definición), como lo son las indicaciones para llegar a un lugar, las instrucciones para montar un mueble o los pasos para poner la lavadora.

Por eso, ¿es necesario programar un ordenador para desarrollar el pensamiento algorítmico? La verdad es que no. Y, de hecho, el concepto más genérico de algoritmo ni siquiera es específico de las matemáticas o de la informática, aunque es cierto que su formalización es propia de estas disciplinas.

Creo que fue Seymour Papert el primero en proponer el uso de los ordenadores para trabajar este y otros tipos de conceptos en la escuela, aunque creo que la idea de pensamiento computacional no entraba para nada en sus planes, sino la del desarrollo del pensamiento matemático.

La propuesta principal de Papert era que los estudiantes pudiesen explorar conceptos a través de la escritura de programas de ordenador, para lo cual creó el lenguaje Logo, en colaboración con Danny Bobrow y Wally Feurzeig.

Papert fue discípulo de Piaget y, como tal, se basó en el constructivismo para desarrollar sus ideas, aunque con algunas diferencias. Su argumento se basa en dar sentido al aprendizaje de las matemáticas a través de la realización de proyectos que requieren del manejo de principios matemáticos para controlar elementos del mundo físico, con lo cual necesitaremos ordenadores que nos permitan expresar y manipular esos principios.

El heredero principal del trabajo de Papertcon Logo es Scratch.

¿Y entonces?

¿Es posible que los informáticos estén sobrevalorando su propia disciplina? Este artículo de Maciej Cegłowski (al que llegué gracias a un tuit de Jordi Adell) hace una crítica muy dura y necesaria al sentimiento de omnipotencia que parece estar instaurándose en el mundo tecnológico.

No hay que dejar de lado el hecho de que las compañías tecnológicas llevan años adelantando a las compañías tradicionales en sus propios sectores de actividad: la distribución de la cultura, el transporte público, el alojamiento, las comunicaciones, las relaciones personales y un largo etcétera de aspectos de nuestra vida está siendo devorado por el software.

Pero volviendo a la educación, no me cabe duda de que las herramientas tecnológicas nos proporcionan grandes posibilidades para transformar la forma de enseñar y aprender. Pero no pueden convertirse en un fin en sí mismas.

Por supuesto, aprender a programar puede caber en la escuela. Pero no podemos convertir cada nuevo saber o competencia que nos parece relevante en una asignatura más que añadir a un currículum que ya está excesivamente apretado.

La cuestión es que tendremos alumnos a los que les interese y tengan talento para programar, del mismo modo que tendremos alumnos con interés y talento para la cocina, la moda, la pintura, la danza, la economía, las matemáticas, la biología, el ajedrez, el atletismo y cualquier otro ámbito de la vida que se nos ocurra.

Por tanto, la pregunta es: ¿cómo integramos en la escuela la diversidad de intereses de los alumnos, la diversidad de ofertas de aprendizaje y la necesidad de una base común de competencias y capacidades que permitan a cada persona desarrollarse del mejor modo posible?

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s