¿Es la ciencia de la computación más una ciencia o más ingeniería?

Supongo que has escuchado la vieja broma de que cualquier cosa con “ciencia” en su nombre no lo es. Eso se aplica aquí.

Si tuviera que elegir, diría que Informática, a diferencia de todos los demás términos sobre computadoras, está más centrado en las matemáticas y la lógica (que, por supuesto, también son las matemáticas). CS es solo una parte del desarrollo de software, aunque es importante.

Como se descubrió en la ciencia cognitiva, las categorías no se hacen mediante la teoría clásica de un conjunto de cosas que comparten una o más propiedades compartidas por nada fuera del conjunto. Esta idea bonita y lógica no funciona. En cambio, hasta que se nos ocurre una mejor idea, de todas formas, las categorías parecen ser grupos alrededor de arquetipos, con varias y diversas ideas que vinculan las ideas con los arquetipos. Los arquetipos, curiosamente, parecen estar basados ​​principalmente en cosas que la gente puede hacer con ellos.

El arquetipo de la informática es sentarse y hacer un argumento matemático sin necesidad de tener una computadora. Sin embargo, no es cualquier tipo de argumento matemático. Es un argumento que involucra cambios y pasos discretos y almacenamiento de información, que puede ser generado por el tipo de matemática que usa.

En cierto modo, la ciencia de la computación se puede considerar como la matemática de cómo se hacen las matemáticas. En el ejemplo clásico de la máquina de Turing, Turing primero pensó en cómo los matemáticos resuelven problemas. Tienen un trozo de papel, y pueden escribir cosas y borrarlas. Están mirando parte del papel en un momento dado. También tienen un estado mental en el que están, lo que recuerda algo. El documento se resumió en una cinta infinita, la mente del matemático en una máquina de estados finitos y el matemático en una máquina que ejecutaría el cálculo.

Sin embargo, por lo general, es mucho más divertido y útil utilizar estas ideas matemáticas para crear software y verlo funcionar, y eso es parte de aprender y hacer informática. Ahí es donde entra la ciencia.

El arquetipo de la ciencia está tratando de descubrir algo de lo que no sabes nada, mediante la observación, el experimento y la razón. Miras y ves lo que está pasando. Intentas ver patrones y resolverlo. Entonces descubres cosas nuevas para probar en base a tus ideas. Usted los prueba, y si no funcionan, simplemente están equivocados, y usted no tiene suerte. De vuelta al tablero de dibujo.

Idealmente, no debería haber ciencia en informática. Sabemos todo sobre cómo funcionan las computadoras, y todo lo matemático está implícito en los supuestos. Sabes que 2 + 2 = 4 si sabes lo que significan 2, +, = y 4. No tienes que hacer un experimento. Peano lo entendió todo, y no tienes que preocuparte por eso.

Sin embargo, los tipos de cosas que abordan Ciencias de la computación tienden a ser complejos, difíciles o, por lo general, a ambos. Teóricamente, puede haber muchas maneras de abordar el problema, y ​​una no es lo suficientemente inteligente como para entender todo cuando se les ocurre la idea. En estos casos, es posible que necesite algo de ciencia, porque no puede predecir fácilmente cómo va a funcionar.

Como anécdota, una vez tuve una gran idea sobre la animación. Normalmente, la animación se realiza con splines, y es genial para hacer el trabajo de cámara Zippy para hacer que la audiencia se vaya “wow!” Sin embargo, estaba haciendo animación científica, y es posible que no quieras Zippy. Es posible que desee algo simple, y uno de los movimientos comunes es el arco alrededor de un objeto, lo que equivale a girar el objeto alrededor de un punto focal y mantener la cámara firme. Es una cosa muy difícil de hacer con splines de la cámara solo. Así que se me ocurrió una idea que separaba por separado la posición de la cámara, el área general de interés y un sistema de coordenadas adaptativo. Funcionó bastante bien, pero existían algunos problemas contraintuitivos en la mente que requerían demasiada habilidad por parte del usuario para tratarlos. Nunca pude deshacerme de ellos, así que no lo publiqué. Sin embargo, la investigación que hice sobre los movimientos de cámara clásicos hizo el capítulo sobre animación que escribí para Visualización de computadora: Técnicas gráficas para ingeniería y análisis científico: Richard S. Gallagher, Solomon Press: 9780849390500: Amazon.com: Libros mucho mejor, aunque la sección sobre grabación y formatos de películas está horriblemente fuera de fecha. No tengo regalías sobre eso, y es caro, así que no te recomiendo que vayas a comprar uno, pero mi discusión sobre splines y transformaciones es buena. De todas formas…

Las personas que más utilizan la ciencia de una manera canónica son evaluadores, a quienes respeto demasiado como para llamar a QA. Usan adecuadamente la ciencia para investigar algo de lo que ni saben el funcionamiento interno ni deben. Los desarrolladores saben demasiado acerca de su código para ser efectivos. También saben muy poco, lo que lleva a la depuración, un tipo de uso menor de la ciencia.

La ingeniería es casi opuesta a la ciencia. Se basa en la esperanza de que pueda tener prácticas y heurísticas que eviten la necesidad de tener que hacer la ciencia nunca más. La idea es que si utiliza estos principios de ingeniería, entonces las cosas simplemente funcionarán. Esto a menudo funciona, pero a veces no lo hace:

En clase, uno de mis profesores dijo que el auto fue puesto allí por un ingeniero que estaba seguro de tener un automóvil allí que amortiguaría el movimiento lo suficiente como para detenerlo. Whoops!

El problema con el software es que tiende a ser tan complejo que, si bien algunos principios generales de ingeniería son útiles, cualquier código de tamaño crecerá rápidamente hasta el punto en que las suposiciones originales no solo no garantizan su calidad sino que también son un detrimento significativo. Parte de esto es el problema antropológico de que la gente realmente no tiene idea de lo que quiere, pero mucho es solo la naturaleza de la bestia. Esto puede tratarse mediante la refactorización utilizando un tipo de ciencia retroactiva. Yo abogo por esperar refactorizar temprano y con frecuencia en lugar de sorprenderme. Estar dispuesto a hacer ciencia es importante.

Esto causa muchos problemas con el software, el conflicto inherente entre la mentalidad de la ciencia y la ingeniería. Se supone que la mentalidad de ingeniería reduce el desarrollo a un conjunto matemático más sólido de ideas, pero en realidad no funciona muy bien la mayor parte del tiempo. Las personas son animales extraños, sin embargo, y tienden a pensar que si algo incorrecto no funciona, deberían hacer más de eso. En el límite extremo, se encuentra la plétora de metodologías de software. Algunos de ellos, llamados de manera diversa “ágil”, en el contenido parecen reconocer algunas de las dificultades, pero muy rápidamente se convierten en conjuntos de ideas basadas en la fe que tampoco funcionan. Estoy seguro de que la primera persona que usó la palabra “scrum” pensó que era graciosa, pero no creo que las empresas y sus clientes se estén riendo demasiado en estos días.

Ni siquiera he abordado otros aspectos del desarrollo de software, como la antropología y la psicología, que probablemente son más importantes que cualquier otra cosa sobre el desarrollo de software combinado. Son importantes para hacer un buen software, pero también son lo suficientemente importantes como para que le muestren que no desea el software. Tal vez solo quieres un interruptor o una perilla. Esta es la razón por la que a veces reacciono mal a una pregunta de Quora preguntando cómo resolver un problema en particular, pero con cierta tecnología en particular. Bueno, eso es poner el caballo antes que el carro. Joel Spolsky escribió algo sobre cómo les pregunta a los solicitantes “¿cómo programarías esta taza de café?” a lo que mi respuesta sería “no programas una taza de café”.

Mientras estoy despotricando, también me gustaría sacar de mi pecho una objeción a la idea de que el diseño de una interfaz de usuario (o experiencia, como lo llaman ahora) tiene que ser lo mismo que el diseño de artes gráficas con “hermoso, invitando a las fuentes “. Es un pensamiento mágico como el fetiche de la metodología. No hace mucho tiempo, me entrevisté para una posición de dispositivo portátil en la Prueba gratuita de audiolibros de la Tienda de audiolibros digital en línea de Audible.com. Así que dije que me interesaban esas cosas, haber usado audiolibros en discos largos y tener un amigo casi ciego que escucha libros (los dispositivos que obtiene de los servicios para ciegos son milagros de un diseño de usabilidad efectivo, por cierto. Muy bonito). Entonces, cuando el entrevistador preguntó “interfaz de usuario, ¿te refieres a cómo se ve?” mi corazon se hundio. No conseguí el trabajo, lo cual es probablemente igual de bueno, ya que hubiera significado golpear mi cabeza contra una pared de ladrillos mucho, lo cual no sería mucho mejor que morir de hambre. Aunque sigo pensando que es un problema interesante. ¿Cómo se hace para que pueda escuchar un libro en audio cuando no puede o no quiere mirar la pantalla, decir si se pierde una palabra o una zona?

Pero yo divago. Espero que esto haya arrojado algo de luz, o si usted es ciego y está leyendo esto con un lector de texto, algo de sonoridad sobre el tema.

La informática es una mezcla de numerosas disciplinas diferentes, a lo largo de varios ejes diferentes. Las partes son equivalentes a matemáticas puramente abstractas. Las partes son psicología. Las piezas son una reminiscencia de la ingeniería, aunque la “ingeniería” en sí misma es también una gran cantidad de disciplinas diferentes envueltas en un solo nombre. Las ciencias de la computación chocan con todas las disciplinas que pueden usar computadoras, lo que significa que todos los departamentos de la escuela y muchos otros fuera de ella.

Lo único que tienen en común las dos carreras de “ciencias de la computación” es que ambas usan computadoras, un rasgo que comparten en común con todas las demás personas de la universidad. Las disciplinas más distintivas de “informática” son aquellas que no involucran a las computadoras, sino que son puramente teóricas: encajarían cómodamente en un departamento de matemáticas si no quisiéramos alojarlas en el mismo edificio que aquellos que sí. En realidad usar computadoras.

No creo que valga la pena preocuparse por clasificarlo. El nombre es una cuestión de conveniencia, sin límites definidos. Y eso, para mí, es lo más importante: si solo te interesan las computadoras como computadoras, es mejor que sea una de esas disciplinas altamente teóricas o puramente mecánicas. Todos los demás deberían prestar atención a para qué se usan las computadoras, lo que significa buscar en todas partes, PERO el departamento de “informática”.

La computación está en todas partes, incluso las células lo hacen, el problema con la informática es que es un tipo abstracto de ciencia como la matemática. Probablemente esto cause problemas a algunas personas que no pueden verlo como otros tipos de ciencia.

La informática es la ciencia de la computación ; Eso parece muy claro. Menos claro es cómo definir la ciencia y la computación de una manera útil y significativa.
En general, podríamos dividir la ciencia de acuerdo con dos clasificaciones: formal versus empírica, y pura versus aplicada. Mientras que la ciencia formal (como las matemáticas y gran parte de la informática) se basa en el razonamiento deductivo de las verdades asumidas, la ciencia empírica (como la física y la química) se basa en el razonamiento inductivo de los fenómenos observados. Mientras que el objetivo de la ciencia pura es avanzar en el estado de la comprensión científica, el objetivo de la ciencia aplicada es utilizar dicha comprensión para aprovechar las fuerzas de la Naturaleza (en el sentido más amplio posible de la palabra) para lograr otros objetivos.
Podríamos definir la computación como una transformación aplicada a una información. En el sentido más amplio posible, la computación es, entonces, cualquier proceso que cause un cambio en el universo. No es necesario proporcionar una definición más detallada que esta.
La ciencia de la computación, entonces, consiste en la parte del esfuerzo humano que satisface los siguientes criterios:

  • Es ciencia, es decir:
  • Es (1) formal o (2) empírico:
    1. Emplea el razonamiento deductivo de las verdades asumidas.
    2. Emplea el razonamiento inductivo de los fenómenos observados.
  • Es (1) puro o (2) aplicado
    1. Busca avanzar en el estado de la comprensión científica.
    2. Busca aplicar el entendimiento científico para aprovechar las fuerzas naturales.
  • Estudia computación, es decir:
    • Estudia (1) transformaciones o (2) información
      1. Procesos que mapean información de una forma a otra.
      2. Entidades sujetas a transformaciones.

    En mi humilde opinión, la informática es más cercana a las matemáticas, porque la programación de procedimientos es muy similar a la construcción de pruebas matemáticas. Usted está alineando un conjunto de declaraciones paso a paso para construir una abstracción más grande. Eso es matemática.

    Existe la disciplina científicamente rigurosa de la informática. Se enfoca en cosas como la computabilidad, la complejidad algorítmica, los algoritmos probadamente correctos y los problemas difíciles como el procesamiento del lenguaje natural. En cierto modo, se asemeja a las matemáticas: el tipo con teoremas y pruebas, no el tipo para el que se usa una calculadora con energía solar.

    Pero las universidades también producen miles de personas con títulos en Informática (yo soy uno de ellos) que trabajan en la industria de la construcción de cosas con software. En el día a día, esto no tiene prácticamente nada que ver con la ciencia o el método científico. Podrías llamarlo ciencia aplicada o ingeniería, aunque a veces se siente más como golpear tuberías con una llave al azar hasta que funcionen.

    La informática es la ciencia que aborda la informática. Piensa en cualquier cosa que sea computable. Añade un método científico para investigarlo. Eso es informática.

    En realidad es una tercera opción: la brujería!