unlp teorias teoria software ingenieria desarrollo theory

theory - teorias - teoria del software



TeorĂ­as de la ingenierĂ­a de software (12)

Además de las teorías, también hay marcos, modelos y reglas generales. Ideas, claro, pero basadas en una base menos rigurosa, que vagamente pertenecen a su categoría de dirección / educción.

La informática tiene algunas teorías fundamentales sólidas (físicas según su definición), pero en su mayoría consisten en vincular los elementos más pequeños.

La ingeniería de software, por otro lado, es una disciplina relativamente nueva que implica el uso de computadoras y, ocasionalmente, de informática para construir sistemas de software. La mayor parte de la práctica en ese campo se basa completamente en evidencia experimental y anecdótica no rigurosa. Debido a que el jurado todavía está deliberando sobre los temas más simples, la mayoría de lo que pasa por prácticas podría describirse mejor como pura conjetura y preferencia irracional. Es una de esas disciplinas donde realmente tienes que saber mucho para darte cuenta de cuánto se ha construido en una casa de cartas muy inestables.

Pablo.

En mi carrera, he encontrado dos tipos amplios de teoría: teorías físicas y teorías educativas / de gestión:

Las teorías físicas son correctas (en las condiciones apropiadas) o incorrectas, según lo juzga el mundo físico.

Las teorías educativas / de gestión tienen la apariencia de ser como teorías físicas, pero carecen de pruebas rigurosas. En el mejor de los casos, ofrecen nuevas formas de pensar sobre los problemas. Las teorías múltiples son útiles porque una de ellas puede hablarle de la manera correcta.

Como estudiante aficionado a la ingeniería de software, parece haber muchas teorías de ingeniería de software (como programación ágil, diseño impulsado por pruebas, patrones, programación extrema). ¿Debería considerar estas teorías como físicas o como educativas / de gestión?

¿O he entendido mal la ingeniería del software y me encuentro en la posición de "ni siquiera equivocado"?


Al ser intangible, la programación es una actividad muy difícil de relacionar con otro ser humano, incluso con otros programadores. La ingeniería de software intenta agregar una estructura donde no la hay, pero dicha estructura no está arraigada en la inevitabilidad de la realidad. Entonces, todos estos enfoques se convierten como las religiones en cómo se comportan los grupos de personas cuando tratan de apaciguar a sus dioses técnicos (o demonios).


Creo que la división teórica apropiada son las ciencias "más duras" (donde puede haber pruebas) y los temas más suaves con respuestas cualitativas y pocas pruebas si las hay.

El software para mí es principalmente sobre el lenguaje y la comunicación, un tema que es principalmente cualitativo y subjetivo. De vez en cuando nos topamos con algoritmos y otras áreas "duras", donde existen pruebas y formalismos rigurosos. Entonces, sí, ambos por favor.


La ingeniería de software trata en última instancia de la psicología, cómo los humanos manejan la complejidad. De modo que los principios de la ingeniería de software se parecen mucho más a las teorías de educación y gestión que a los principios físicos.

Parte de la ingeniería de software tiene sólidos cálculos matemáticos: O (n log n) ordena más rápido que O (n ^ 2) ordena, etc. Pero la ingeniería de software se trata principalmente de cómo piensan los humanos sobre el software. Cómo organizar las cosas para que los mantenedores no se vuelvan locos, anticipando lo que es probable que cambie y lo que no, previniendo y detectando errores humanos, etc. Es una rama de la psicología o la sociología.


Ni siquiera está mal.

Todas las "teorías" de ingeniería de software parecen ser nada más que consejos sobre cosas particulares para tratar de ver si te hacen a ti y a tu equipo más productivos. Incluso si uno pudiera configurarlos para ser falsificables como teorías científicas, no tendría mucho sentido. Eso no quiere decir que no valga la pena aprender sobre ellos: al contrario, debe familiarizarse con la mayor cantidad de ellos posible e intentar descubrir en qué tipo de equipos y el entorno pueden funcionar mejor. Pero ten cuidado: evita el dogma y piensa que hay balas de plata.


Para mí, es mi propia teoría con muchos de los otros utilizados como base. No conozco a nadie que use una sola teoría específica. Y esa no es una respuesta de salida de policía.

Así como hay diferentes idiomas, las teorías / prácticas / metodologías deben usarse en distintas situaciones. La estructura, las reglas y las definiciones son todas las formas en que las personas entienden cómo se deben lograr las cosas, pero lo que se debe lograr es subjetivo.

Adapte, conociendo los métodos ágil, extremo u otros a discreción del cliente, proyecto, programador, tiempo y especialmente lo que lo hace exitoso / feliz. Sea un equipo y ajuste / adaptarse a lo que su equipo está haciendo para el bien mayor; solo tenga en cuenta tener algo que haya definido en su propia mente, o no sea solo un caos.

[SOAPBOX] Empecé a programar en el Atari 400 con un teclado plano convertido y una actualización de 64K. Cuando comencé la universidad, fue VB 1.0 el que vi usar a mi profesor de Economía para construir una herramienta de enseñanza para ayudar a las personas a aprender más sobre economía usando gráficos e insumos visuales. ¡Eso estuvo genial! Y sabía que podía hacer eso.

Este mismo profesor de economía, que más tarde también se convirtió en profesor de informática (era bueno), me preguntó si iba a impartir una clase sobre depuración. Él dijo: "No he conocido a alguien que entienda los conceptos y que tenga la capacidad natural de depurar tan rápido como tú, ¿nos enseñarías lo que sabes y cómo lo haces?". Esto fue un impulso en mi ego, por supuesto, pero para enseñar, orientar y ayudar a otros.

Cada una de esas instancias ha borrado mi deseo de ayudar a otras personas. Para mí, quiero que una computadora haga exactamente lo que quiero, para ayudar a otras personas en el negocio y en la vida hogareña a aumentar su nivel de vida, aprender más y hacer más cosas.

Alguien me dijo una vez: "Eres tan bueno como tus herramientas". Aprende, practica y crece.

Si ha definido algo, está funcionando, tiene orden y lo estira a usted y a los límites, no está equivocado.


Son como recetas: son pautas, cuyo éxito depende:

  • En parte, en la calidad de la receta
  • En parte, en la calidad de los ingredientes
  • En parte, en la habilidad de (y el tiempo disponible para) los practicantes

Todas estas teorías y mejores prácticas todavía no nos han llevado al punto en que podamos producir sistemas de software de manera confiable y predecible. La más nueva de estas encuestas tiene fecha de 2001; La columna de Jeff del 2006 todavía lamenta las altas tasas de fallas.

Sería interesante ver si alguien está trabajando en una encuesta actualizada.

Avionics y el software que ejecuta mi automóvil no parecen fallar en algo cercano a las tarifas cotizadas para el software empresarial. ¿Por qué los desarrolladores de empresas no siguen sus prácticas más de cerca? Tal vez todos deberíamos escribir Ada ... [es broma]


Yo no llamaría a la programación ágil, diseño impulsado por pruebas, patrones, programación extrema, etc ''teorías'', son metodologías o estilos de trabajo. ellos no hacen ninguna afirmación.


En general, el campo de la Informática se divide en 4 áreas (¿es necesario encontrar un enlace a la fuente, SWEBOK?), Que son distintas aunque relacionadas e interconectadas:

  • Ciencias de la Computación
  • Ingeniería de software
  • Ingeniería Informática
  • Sistemas de información

Hay un buen análisis de ingeniería vs. ciencia en "Desarrollo de software profesional" de Steve McConnel. Verifique su Ingeniería de Software, No Computación .

El desarrollo de software tiene más que ver con la ingeniería (encontrar soluciones prácticas a problemas prácticos) que cualquier otra cosa. Es correcto que la ingeniería de software se basa en ciencias de la computación, matemáticas, teoría de la complejidad, sistemática, psicología y otras disciplinas, pero no se puede equiparar con ninguna de ellas, ni es un lote de ninguna de ellas.


¿Hay un pensamiento como "ingeniería de software"?

¿O el desarrollo de software es "ingeniería"?

Hechos:

  • Nuestra industria es muy joven y real para muchas otras "ingenierías".
  • Todavía no tenemos prácticas "sólidas" y "teorías".
  • Entonces, para ser honesto, si miramos en las otras prácticas maduras de ingeniería perpectivamente, es difícil llamar a lo que hacemos como "ingeniería"
  • Tenemos una muy mala reputación al fallar [nuestras tarifas deficientes no pueden ser aceptables en muchas ramas de ingeniería]

¿Realidad o fantasía? Elegir uno :-)

  • Algunos chicos dicen que no tenemos paractices "sólidos" y "teorías" ya que somos una rama joven de "ingeniería", por tiempo que tendremos. Esos tipos dicen que necesitamos trabajar más "teoría" o fundaciones.

  • Algunos dicen que el desarrollo de software es una "actividad social experimental" debido a la naturaleza de nuestro dominio de problemas. Tendremos prácticas, teorías, metodologías, procesos, pero siempre tendrán un efecto de segundo orden. Las personas únicas, sus cualidades de sentimientos y sus interacciones con el resto son más influyentes. Esos tipos ven el desarrollo de software como un sistema adaptativo complejo

Y también hay otra realidad

% 80 de las actividades de desarrollo de software realmente no necesitan mucha atención. Cualquier persona "promedio" puede hacerlo.

Pero la parte restante% 20 es una tarea muy difícil y multidisciplinaria.

Incluso hay otra perspectiva nueva My One :-)

Este punto de vista dice que el desarrollo de software no es una rama de "Ingeniería" . Es brach de "Ciencias Naturales y Ciencias Sociales". Entonces necesitamos Antropología de Software y Antropólogo.


Teoría: creo que una teoría es cualquier cosa que describa "cómo" funciona un sistema natural, y para demostrarlo, tiene deducciones lógicas basadas en el conocimiento previo, corroboradas por inducciones lógicas hechas usando experimentos.

Usted llama a todo el cuerpo de estas teorías y experimentos como Ciencia.

Software: el software es un sistema creado por el hombre alias. un sistema de ingeniería. La ingeniería aplica la ciencia para crear los nuevos sistemas. En ese sentido, la ingeniería de software pura aplica la ciencia de los sistemas matemáticos discretos.

Pero la Ingeniería de Software Comercial tiene una motivación diferente llamada Economía. En ese sentido, debe tener en cuenta todos los factores que afectan a la economía, el principal de ellos es el pueblo. Entonces, la psicología juega un papel importante. Pero, dado que la psicología misma es solo una teoría de "cómo" funciona la mente humana basada en el reconocimiento de patrones sin ninguna deducción lógica basada en la biología humana, tiene muchos defectos, como la correlación implica causalidad.

Entonces, sí, creo que a partir de la respuesta anterior, puedes comprender mejor qué es Ingeniería de Software Comercial en total.