Los informáticos estudian la teoría de la computación. Algunas partes de esto son:
- ¿Cómo pueden los algoritmos resolver problemas no resueltos? ¿Son estas nuevas soluciones formalmente correctas?
- ¿Cómo pueden mejorarse los algoritmos existentes de manera objetiva o experimental? ¿Estas mejoras mantienen la teoría existente sobre un algoritmo?
- ¿Cuál es la naturaleza de un algoritmo? ¿Cuánto tiempo llevará en comparación con el tamaño de su entrada? ¿Cuánto espacio necesita?
- ¿Cuál es la naturaleza de un problema? ¿Es siempre solucionable? ¿A veces es solucionable? ¿Es generalmente insoluble?
Lo importante a tener en cuenta aquí es que discuten soluciones algorítmicas a los problemas. No necesariamente hay una computadora física involucrada, de hecho, muchos resultados importantes en Ciencias de la Computación se lograron sin una computadora. Por ejemplo, la tesis de Church-Turing (que demostró las capacidades universales de la Máquina de Turing y, por extensión, casi todas las computadoras modernas) se escribió antes de que existieran las computadoras físicas (en el sentido moderno, sin ofender a Babbage). La informática es, en cierto sentido, un nombre inapropiado, pero el nombre proviene de una época en que la palabra informática significaba “resolución de problemas” matemática, no codificación específica.
“La informática no tiene más que ver con las computadoras que la astronomía con los telescopios” – Edsger Dijkstra, pionero teórico de la informática
- ¿Cuáles son los rasgos de los grandes ingenieros de confiabilidad del sitio?
- ¿Es mejor unirse a Cerner como ingeniero de software o Chai Point?
- ¿Cuál es la forma más económica de crear una aplicación móvil si no sé cómo codificar?
- ¿Qué es la mantenibilidad en ingeniería de software?
- ¿Con qué frecuencia las organizaciones reevalúan sus decisiones de software de base de datos?
Los ingenieros de software diseñan programas para computadoras. Ellos:
- Codificar algoritmos. Una idea puede parecer sencilla en teoría, pero debe tener en cuenta las limitaciones prácticas del hardware. ¿Utiliza demasiada memoria? ¿Hay una sobrecarga (Java)? Tomar un concepto y convertirlo en algo eficiente y utilizable es un problema en sí mismo.
- Implemente nuevas características para los programas existentes. ¿Su diseñador de GUI tiene una nueva interfaz de usuario? Tendrá que codificar las imágenes, conectarlo al sistema y asegurarse de que todo funcione sin problemas. El desarrollo iterativo es una gran parte de la ingeniería de software.
- Diseñe arquitecturas prácticas de sistemas que sean escalables. Seguro que el backend del sitio web funciona en una sola instancia, pero está haciendo mucho trabajo al generar una página. ¿Qué sucede cuando crece tu base de usuarios?
- Seguro de calidad. Diseñando pruebas para asegurar que el código haga lo que se supone que debe hacer donde comienzan muchos ingenieros de software. En algunos círculos, la frase “Pruebas unitarias” induce TEPT leve (bromeo).
En comparación con la informática, la ingeniería de software tiene que ver con las computadoras físicas. Siempre implica un dispositivo físico en mente (de hecho, muchos, a menos que odie el acceso al mercado y solo quiera desarrollarlo para iPhone), y las limitaciones físicas de ese dispositivo. Sin un bolígrafo, un escritor es inútil e igualmente, sin una computadora, se pierde un ingeniero de software.
Por supuesto, estas áreas tienen superposición. A veces, un ingeniero de software tiene una idea que resulta ser un algoritmo completamente nuevo. Este algoritmo puede tomarse fuera de su dominio y estudiarse en términos de la computación que realiza, pasando a los ámbitos de la informática. Estoy bastante seguro de que de aquí provienen muchos algoritmos de clasificación, pero no tengo fuentes para eso. Por otro lado, a veces un informático implementa en código para probar un concepto, y ese código resulta ser lo suficientemente rudo como para ser exportado a la industria, con algunas mejoras. Nuevamente, no tengo fuentes, pero estoy bastante seguro de que algunos algoritmos teóricos de Machine Learning se han implementado para probar y luego exportar directamente a la industria.