Cerrar la brecha entre la investigación en ciencias de la computación y la ingeniería de software [cerrado]

8

¿Crees que hay una brecha entre la investigación en informática y los problemas de ingeniería de software? Por ejemplo, ¿los ingenieros de software tienen que preocuparse alguna vez por el "factorización y el isomorfismo gráfico" o por algunos problemas complejos de informática si tienen que ... decir, construir un sitio web de carrito de compras? Probablemente no.

¿Y si hay una desconexión entre la informática y los ingenieros que crean aplicaciones? ¿Es así como deberían existir la ingeniería y la ciencia? ¿Los ingenieros analizarán años y años de trabajos de investigación para resolver un problema particular que tienen?

Edit-1: Después de pensarlo, la ciencia general probablemente tenga el mismo problema. Estoy seguro de que hay importantes químicos que trabajan en compañías como McDonald's y Taco Bell que tienen la tarea de hacer una hamburguesa mejor y más fácil de fabricar.

berlinbrown2
fuente
Que brecha Si desea la tenencia y las subvenciones, entonces le preocupan los "isomorfismos de factorización y grafismo" tal como los expresa y si desea crear un sitio de carrito de compras, le preocupan las cookies y los datos de sesión. ¿Qué espacio hay para tender un puente?
davidk01
Definitivamente debería preocuparse por los gráficos y tal si está creando algún tipo de flujo de trabajo (incluido un carrito de compras o algo igualmente mundano). De lo contrario, su flujo de trabajo puede volverse inutilizable e incomprensible tanto para los mantenedores como para sus usuarios finales.
SK-logic

Respuestas:

10

En la mayoría de los puestos de ingeniería de software, los problemas fundamentales de informática rara vez aparecen, por una de dos razones:

  • Han sido resueltos por las herramientas que utiliza. Algunos ejemplos son los algoritmos de análisis para el lenguaje de programación que usa su compilador, los algoritmos de programación para las aplicaciones que ejecuta el sistema operativo, la resolución de consultas en la base de datos que usa, etc.
  • Simplemente no son cruciales para lo que sea que intentes lograr. No porque no ayudarían, sino porque la tarea de automatización mundana es mucho más importante que la versión optimizada máxima.

La razón por la que tantos ingenieros de software están construyendo sistemas de información que son triviales desde un punto de vista teórico, es simplemente porque son necesarios. La forma en que nuestro mundo está actualmente automatizado es probablemente menos del 0.01% de lo que se podría lograr. Por lo tanto, en las próximas décadas probablemente construiremos principalmente sistemas e interfaces de información. Una vez que tengamos esos, algunos problemas fundamentales comenzarán a aparecer.

Estos problemas existen actualmente, por ejemplo, con respecto a la escalabilidad, el enhebrado, etc., pero son simplemente una parte extremadamente pequeña de todo lo que hay que hacer. Entonces, la razón por la cual las compañías están construyendo sistemas de información relativamente triviales una y otra vez es porque (1) las personas los necesitan y (2) es mucho más fácil (y más lucrativo) que resolver problemas fundamentales.

Deckard
fuente
1
"La forma en que nuestro mundo está actualmente automatizado es probablemente menos del 0.01% de lo que podría lograrse". Eso es lo que estaba pensando. Parece desafortunado que toda esa ciencia avanzada, investigación y genio se pierdan porque estamos creando aplicaciones que básicamente toman datos de un formato y los colocan en una base de datos.
berlinbrown2
3
@Berlin, creo que ese es el problema que los marcos intentan resolver. De cualquier manera, nos estamos moviendo en la dirección correcta. ¡Piense en cuánto genio, etc., solía desperdiciar archivando registros en gabinetes!
Ethel Evans
6

¿Crees que hay una brecha entre la investigación en informática y los problemas de ingeniería de software?

Mi experiencia es que el desarrollo de software comercial / práctico va a la zaga de la investigación académica en más de 5 a 30 años. Uno de los plazos más rápidos desde un artículo académico innovador hasta un producto de envío comercial fue SQL. El documento fue publicado en 1969, IBM y otros dedicaron mucho tiempo y esfuerzo a tratar de hacer productos viables, y el primer producto comercialmente viable real fue el software relacional, la compañía ahora llamada Oracle.

Los lenguajes funcionales fueron desarrollados por investigadores en la década de 1960. ¿Cuántos son de uso común hoy? Algunos. En estos días se están usando mucho más que fuera de los muros cubiertos de hiedra de las universidades. Pero tardó tres décadas en hacerlo.

¿Los ingenieros analizarán años y años de trabajos de investigación para resolver un problema particular que tienen?

Si. Lo hago todo el tiempo. Cuando trabajaba en una empresa que fabricaba redes de área de almacenamiento, muchos de los productos que comenzaban a enviarse se describieron en documentos de investigación publicados entre 5 y 6 años antes.

Otro ejemplo involucraba un problema llamado "emparejamiento de pacientes". Los humanos son buenos para mirar cosas como Chem. Dept.oDepartment of Chemistryy determinar que tales cosas son idénticas. La mayoría de los algoritmos tienen dificultades para determinar tales cosas. Estaba trabajando en una empresa que manejaba recetas electrónicas de medicamentos, informes de laboratorio y reclamos de seguros. Hubiera sido útil poder (anónimamente) poder tener datos a largo plazo que cubran la eficacia y efectividad de los tratamientos para los pacientes. Tal cosa habría tenido que depender de la capacidad de determinar la cercanía de las cuerdas. Durante la década de 1990, la mayoría de los investigadores en esta área desaparecieron en el proyecto Genoma Humano, y la mayor parte de su trabajo desapareció de la web (con NDA y propiedad intelectual, todo lo que inventaron estas personas desaparece de la web cuando van a trabajar para la industria privada). Después del 911, los nombres coincidentes se convirtieron en un problema de "seguridad nacional" (hay alrededor de 25 formas de deletrear Mohammed en inglés, y alrededor de una docena de formas de deletrear Osama) y muchos de los restantes también desaparecieron. Así que unoEl inventor / empresa tenía un producto que le permitía relacionar personas y relaciones llamado " analizador de relaciones no obvias " que terminó desapareciendo en un complemento para DB2. Tendrás que cavar mucho en los papeles. Quizás no si haces carros de compras, pero es bastante común hacerlo en otros proyectos.

Tesis: detección adaptativa de registros de bases de datos aproximadamente duplicados y el enfoque de integración de bases de datos para el descubrimiento de información .
Biblioteca que implementa algunas de las funciones de la tesis .

Tangurena
fuente
Buena respuesta y conectó una tesis real a una aplicación. Sigo argumentando que esa no es la norma para la mayoría de las tareas de desarrollo e ingeniería de software. Como dijiste, creo que el desarrollo de software puede estar años o décadas detrás de la investigación que existe. Y eso es para tareas interesantes como 'google search' o aplicaciones biométricas.
berlinbrown2
Eso no es verdad. Por ejemplo, los sistemas de recomendación, el análisis de la canasta de mercado, etc., todos surgieron de la investigación fundamental en ciencias de la computación utilizando el Teorema de Bayes y esto no tardó más de 30 años.
Mushy
4

Los informáticos académicos son muy buenos con lo siguiente:

  1. Análisis de algoritmos.
  2. Conocimiento de estructuras de datos estándar.
  3. Teoría de autómatas

Todo lo anterior son cosas útiles para la ingeniería de software. De hecho, sería indispensable tener al menos un informático en un equipo de ingeniería de software.

Sin embargo, la forma en que se enseña la informática y las reglas de acreditación ABET exacerban el problema (si se puede llamar un problema). Los informáticos no tienen mucho conocimiento de las siguientes áreas clave de ingeniería de software.

  1. La huella RAM de un software y el impacto que puede tener en el rendimiento del software.
  2. Ingeniería de mantenimiento de software. No aprecian el hecho de que el 80% de los trabajos de software se realizan para mantener el software, que es el mayor componente del costo del software.
  3. Cómo trabajar cerca del hardware. Esto es necesario cuando ve todo el sistema como una combinación de hardware y software y optimiza el sistema para ver cómo optimizar ambos para obtener la mejor funcionalidad.
  4. Inventar procedimientos de prueba, implementación y mantenimiento de software nuevos, rápidos y confiables.
  5. Documentación de software, capacitación del cliente y documentación relacionada.
  6. Ingeniería de seguridad del sistema.

Puedo seguir y seguir, pero creo que he hecho mi punto.

La ingeniería de software hoy en día es una disciplina propia que toma prestada de la informática, pero hoy impulsa la tecnología y la vida humana. Realmente necesitas el cerebro de un ingeniero para sobresalir en él. Todos los informáticos no están hechos para ser grandes ingenieros de software. Por supuesto, lo contrario tampoco será cierto.

Satish Singhal
fuente
¿Qué es "ABET"?
mosquito
Estoy en desacuerdo. Obtener conocimiento sobre el desarrollo de software no es algo tan elevado y distante como lo haces parecer. Tengo una Maestría en Ciencias de la Computación y no me falta conocimiento de las áreas clave de ingeniería de software. La mayoría de los ingenieros de software de hoy en día están graduados y aprender nuevos conocimientos es fácil ... ¡Hemos demostrado que podemos aprender!
Mushy
2

De hecho, argumentaría que para construir un buen sitio web de carrito de compras, es absolutamente necesario emplear algoritmos difíciles.

Supongamos que desea predecir los comportamientos de los usuarios en función de compras anteriores. Eso va a tomar mucho más que a+b=chacerlo de manera efectiva. ¿Qué tal los hábitos de compra basados ​​en una serie de factores diferentes, como la edad, el sexo, la ubicación geográfica, etc.?

En mi propia línea de trabajo, uso diario de algoritmos complejos en renderizado, IA, etc.

En resumen, si piensa en una característica específica (es decir, solo un carrito de compras), lo más probable es que esté pensando en implementaciones deficientes. Comience a pensar en implementaciones de google o amazon y estoy seguro de que comenzará a ver dónde sería útil (o obligatorio) saber o al menos estar familiarizado con algoritmos complejos.

Demian Brecht
fuente
Sí, los algoritmos prácticos de búsqueda y clasificación son parte de la informática. Pero no llamaría a los algoritmos básicos de clasificación problemas interesantes en la investigación en informática. Veo IA que incluye visión por computadora, algoritmos genéticos que tienen aplicaciones más prácticas, pero hay otros aspectos de la investigación en ciencias de la computación que parecen estar muy alejados de la ingeniería de software.
berlinbrown2
@berlin: Me imagino que si tienes un trabajo en la NASA o la NSA como ingeniero de software, te enfrentarías a todo tipo de algoritmos de investigación de ciencia ficción. "Ingeniería de software" es un término bastante vago y puede significar una gran variedad de cosas dependiendo del contexto del campo del empleador.
Demian Brecht
2

Los ingenieros de software de resolución de problemas tienen una enorme superposición con la investigación en ciencias de la computación, y también con la investigación matemática y estadística.

Diseñar un sitio web no es ingeniería de software, incluso si integra algún código de carrito de compras. Está diseñando.

Incluso la 'codificación' no es necesariamente ingeniería de software: conozco a muchos codificadores que no se considerarían nada acerca de ingenieros aproximados. El código puede ser tan simple como la manipulación de cadenas o escribir fórmulas de Excel.

Obviamente, no toda la ingeniería de software se superpondrá con la investigación científica (hay muchas otras responsabilidades en el trabajo), pero he leído muchos artículos publicados para determinar el algoritmo o enfoque óptimo para los problemas. Estos problemas pueden surgir solo una vez al año (el resto del tiempo estoy escribiendo validación de UI o lo que sea), pero esa es la naturaleza de mi entorno de trabajo.

Kirk Broadhurst
fuente
1

¿Crees que hay una brecha entre la investigación en informática y los problemas de ingeniería de software?

No.

Por ejemplo, ¿los ingenieros de software tienen que preocuparse alguna vez por el "factorización y el isomorfismo gráfico" o por algunos problemas complejos de informática si tienen que ... decir, construir un sitio web de carrito de compras? Probablemente no.

Falso. Utilizan herramientas que dependen de que esto se haga correctamente.

De hecho, todas tus relaciones de amigo de amigo en Facebook son un gran problema de teoría de grafos. Muy complejo. Muy grande. Muy teorico.

¿Y si hay una desconexión entre la informática y los ingenieros que crean aplicaciones?

Si. Algunas personas crean aplicaciones que están claramente descalificadas. He visto muchas cosas realmente de mala calidad construidas por "profesionales" pagados que deberían haber estado haciendo otra cosa, más útil con su tiempo.

¿Es así como deberían existir la ingeniería y la ciencia?

"Debería" no tiene sentido. Es la forma en que existe.

¿Los ingenieros analizarán años y años de trabajos de investigación para resolver un problema particular que tienen?

Si. A menudo. Por eso me suscribo a la Biblioteca Digital ACM. http://portal.acm.org/ Es esencial para abordar problemas que no son triviales.

S.Lott
fuente