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 qué momento de la vida una persona tiene 100 mil millones de células cerebrales (niñez, 20 años) y a qué edad disminuye significativamente esa cantidad?
- ¿Es el hinduismo, basado en la verdad o una verdadera religión?
- ¿Cómo funciona el interferómetro de campo de deformación de White-Juday, y cómo nos ayudará a lograr un verdadero impulso de deformación?
- ¿Cuál es la intuición detrás de la unidad de masa atómica?
- ¿Cuál es la diferencia entre integrales indefinidas, funciones primitivas y antiderivadas?
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.