¿Que son las ciencias de la computación?

Las ciencias de la computación son a menudo difíciles de definir. Ésto probablemente se debe a la referencia indirecta de la palabra “”computadora” en el nombre de estas ciencias. Como quizás usted sepa, las ciencias de la computación no son simplemente el estudio de la computadoras. Sin embargo, las computadoras juegan un rol de soporte importante como una herramienta en la disciplina. Ellas son simplemente éso: herramientas.

Las ciencias de la computación son el estudio de problemas, la solución de problemas y las soluciones que resultan del proceso de solución de problemas. Dado un problema, el objetivo de un científico de la computación es desarrollar un **algoritmo**, una lista paso a paso de las instrucciones para resolver cualquier caso del problema que pudiera surgir. Los algoritmos son procesos finitos que, si se siguen, resolverán el problema. Los algoritmos son soluciones.

Las ciencias de la computación pueden pensarse como el estudio de los algoritmos. Sin embargo, debemos ser cuidadosos e incluir el hecho de que algunos problemas puede que no tengan solución. Aunque probar esta afirmación está más allá del alcance de este texto, el hecho de que algunos problemas no puedan ser resueltos es importante para quienes estudian ciencias de la computación. Podemos entonces definir completamente ciencias de la computación mediante la inclusión de ambos tipos de problemas y diciendo que las ciencias de la computación son el estudio de las soluciones a los problemas así como el estudio de los problemas que no tienen solución.

Es también muy común incluir la palabra **calculable** al describir problemas y soluciones. Decimos que un problema es calculable si existe un algoritmo para resolverlo. Una definición alternativa para ciencias de la computación es entonces decir que las ciencias de la computación son el estudio de los problemas que son calculables y de los que no son, el estudio de existencia y de la inexistencia de algoritmos. en cualquier caso, usted notará que la palabra “computadora” no apareció en absoluto. Las soluciones son consideradas independientes de la máquina.

Las ciencias de la computación, puesto que se refieren al proceso de solución de problemas en sí mismo, es también el estudio de la **abstracción**. La abstracción nos permite ver el problema y la solución de modo que se separen las denominadas perspectivas lógica y física. La idea básica nos resulta familiar en un ejemplo común.

Considere el automóvil que usted pudo haber conducido hoy camino a la escuela o al trabajo. Como conductor, un usuario del carro, usted tiene ciertas interacciones que tienen lugar con el fin de utilizar el carro para su propósito previsto. Usted ingresa, inserta la llave, arranca el carro, hace cambios de marcha, frena, acelera y maneja con el fin de conducir. Desde un punto de vista de la abstracción, podemos decir que usted está viendo la perspectiva lógica del automóvil. Usted está usando las funciones brindadas por los diseñadores del carro para el propósito de transportarlo de un lugar a otro. Estas funciones se refieren algunas veces como la **interfaz**.

De otro lado, la operaria mecánica que debe reparar su automóvil toma un punto de vista muy diferente. Ella no sólo sabe cómo conducir sino que también debe conocer todos los detalles necesarios para llevar a cabo todas las funciones que nosotros damos por sentadas. Ella necesita entender cómo funciona el motor, cómo la transmisión cambia de marcha, cómo se controla la temperatura, y así sucesivamente. Ésto se conoce como la perspectiva física, los detalles que tienen lugar “bajo el capó”.

Lo mismo ocurre cuando usamos computadoras. La mayoría de personas las usan para escribir documentos, enviar y recibir correos electrónicos, navegar en la web, reproducir música, almacenar imágenes y usar juegos sin conocimiento alguno de los detalles que tienen lugar para permitir que esos tipos de aplicaciones funcionen. Ven las computadoras desde una pespectiva lógica o de usuario. Los científicos de la computación, los programadores, el personal de apoyo tecnológico y los administradores de sistemas adoptan una vista de la computadora muy diferente. Deben conocer los detalles de cómo funcionan los sistemas operativos, cómo están configurados los protocolos de red y cómo codificar varios *scripts* que controlan su función. Deben ser capaces de controlar los detalles de bajo nivel que un usuario simplemente asume.

El punto común para ambos ejemplos es que el usuario de la abstracción, a veces también llamado el cliente, no necesita conocer los detalles siempre y cuando esté enterado del modo en que la interfaz funciona. Dicha interfaz es la manera como nosotros, como usuarios, nos comunicamos con las complejidades subyacentes de la implementación. Como otro ejemplo de abstracción, considere el módulo `math` de Python. Una vez importamos el módulo, podemos llevar a cabo cálculos tales como

```
>>> import math
>>> math.sqrt(16)
4.0
>>>

```

Éste es un ejemplo de **abstracción procedimental**. No sabemos necesariamente cómo está siendo calculada la raíz cuadrada, pero conocemos cómo se llama la función y cómo usarla. Si realizamos la importación correctamente, podemos asumir que la función nos dará los resultados correctos. Sabemos que alguien implementó una solución para el problema de la raíz cuadrada pero únicamente necesitamos saber cómo usarla. Esto se refiere a menudo como una vista de “caja negra” de un proceso. Simplemente describirmos la interfaz: el nombre de la función, qué se necesita (los parámetros) y qué será devuelto. Los detalles están ocultos en el interior.