¿Cuál es la diferencia entre la informática y la ingeniería de software? Si son similares, ¿por qué son dos títulos diferentes en la universidad?

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

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.

Estoy en línea con Garry Taylor e Isaiah Kirk. Estos son muy diferentes en alcance.

Mi algoritmo favorito es la distancia de Levenshtein, es un algoritmo fundimental que le da a la mayoría de nuestro mundo una forma sólida de corregir el error humano.

Un ingeniero de software es alguien que puede tomar esa herramienta y aplicarla. Mientras que un informático sería el tipo de persona para crear una herramienta de este tipo.

Aquí hay una idea genial de cómo un científico podría mejorar un algoritmo frente a cómo un ingeniero podría mejorar el uso de una herramienta.

Un científico de la computación puede analizar la idea o el concepto de errores ortográficos y errores tipográficos con el dedo gordo y tener en cuenta no solo la distancia de las palabras, sino también la distancia del teclado.

Tal que Q está a 1 valor de distancia de W pero E está a 2 valores de distancia. La distancia entre Q y A también es 1, pero Q y C es 4.

En lugar de tener un absoluto donde Dog está a 1 distancia de Mog. Podemos aprovechar la distancia del teclado para comparar Dog y Mog. ¡Donde D está a 5 de M, entonces la probabilidad de que Fog fuera lo que querían escribir en lugar de Mog es mucho mayor!

Ahora este tema definitivamente no está aquí para descontar las habilidades de un mecánico o un ingeniero de software. Hay habilidades muy específicas en las que un ingeniero de software es mucho más competente que un informático.

Un uso de ingeniería de software del algoritmo de distancia de palabras podría ser la computación paralela y el envío de trabajos de búsqueda de directorio para ayudar a reducir el tat en general de cualquier entrada y devolver un menú desplegable de sugerencia automática. Esto requiere el dominio de múltiples algoritmos, herramientas y metodologías.

Una buena manera de pensar sobre el ingeniero de software versus el científico de computación es la amplitud de la profundidad.

Un ingeniero de software, como un mecánico de automóviles, conoce muchas tecnologías diferentes. Un informático conoce un profundo nivel de diseño sobre un campo específico de investigación. Como cómo un diseñador de Toyota Truck probablemente no tiene idea sobre los avances de Audi Desiel o los avances de los autos eléctricos en la duración de la batería. Un mecánico debe poder trabajar en el Audi de Toyota y también en Electrics.

De acuerdo con la norma ( ISO / IEC / IEEE 24765: 2017 (E): Norma Internacional ISO / IEC / IEEE – Ingeniería de sistemas y software – Vocabulario )

3.731 ciencias de la computación 1. rama de la ciencia y la tecnología que se ocupa del procesamiento de la información mediante computadoras [ISO / IEC 2382: 2015, Tecnología de la información – Vocabulario]

3.3810 ingeniería de software SE SWE 1. aplicación sistemática de conocimiento científico y tecnológico, métodos y experiencia para el diseño, implementación, prueba y documentación de software [ISO / IEC 2382: 2015, Tecnología de la información – Vocabulario] 2. aplicación de un sistema sistemático , enfoque disciplinado y cuantificable para el desarrollo, operación y mantenimiento de software; es decir, la aplicación de la ingeniería al software [ISO / IEC TR 19759: 2016, Ingeniería de software – Guía del cuerpo de conocimiento de ingeniería de software (SWEBOK)

La informática es como saber cómo funcionan los motores. es decir, sabe que la combinación correcta de vapor de petróleo y aire se encenderá cuando se proporcione una chispa eléctrica, causando una rápida expansión dentro de un cilindro. Esa rápida expansión se puede usar para empujar un pistón.

La ingeniería de software es saber cómo construir un motor.

La informática es entender la ciencia detrás de la informática. La ingeniería de software se trata de poder construir cosas basadas en los hallazgos de esa ciencia.

En la mayoría de las escuelas, la Ingeniería del Software generalmente se presenta como un enfoque dentro del campo más amplio de la Informática, aunque la mayor diferencia entre ambas es que la Informática se ocupa más de la creación e investigación de nuevos algoritmos y tipos de lenguaje, mientras que la Ingeniería del Software se ocupa de usar eso para desarrollar soluciones a problemas o crear enfoques más eficientes para los procesos existentes.

Piénsalo de esta manera. En general, los científicos realizan la investigación y el desarrollo utilizados para fabricar las herramientas que los ingenieros utilizan para planificar y construir sistemas y productos. ¡Espero que esto tenga sentido!

More Interesting

¿Las aplicaciones de Facebook, Twitter, Skype, Quora, Instagram, etc. son solo un conjunto de programas?

¿Vale la pena estudiar ingeniería de software en comparación con encontrar un trabajo desde el principio?

¿Cuál es el concepto de abstracción en términos de ingeniería de software?

¿Qué califica a alguien para ser gerente de ingeniería?

¿Cuál es la lógica detrás de un servicio descentralizado sin servidor como LaZooz?

Entre los empleados, ¿existe una fuerte correlación entre la calidad de la entrevista y el éxito futuro?

Soy un estudiante de ingeniería. Estoy harto de la ingeniería a pesar de que estoy haciendo software. También estoy bastante harto de la vida en India. Quiero establecerme en Estados Unidos, principalmente en Nueva York. ¿Qué tipo de trabajos puedo obtener y cómo puedo conseguirlos para que me ayuden a vivir allí?

¿Cuál es la arquitectura de Internet?

¿Es posible construir una aplicación similar a Quora usando AWS Lambda?

¿Tenían los años 80 mejores computadoras ya que resultaron en una innovación de software más radical?

¿Puede un estudiante de CS construir productos de software de extremo a extremo que se puedan enviar por sí mismo? Si no, ¿por qué?

¿Qué es el CleanWeb?

¿Por qué el método Java Vector's contiene () parece no llamar a mi método igual () personalizado?

¿Cuáles son algunos ejemplos de excelentes aplicaciones de C #?

¿Existen sitios web similares que hacen tutoriales en profundidad para la programación web como Nettuts de Envato?