2009-02-06 8 views
12

En mi carrera me he encontrado dos tipos amplios de la teoría: las teorías físicas y teorías educativas/gestión:Las teorías de la ingeniería de software

teorías físicas son parte correcta (en condiciones apropiadas) o incorrecta, a juzgar por la 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 de la ingeniería de software, parece haber muchas teorías de la ingeniería de software (como la programación ágil, el diseño impulsado por pruebas, los patrones, la 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 de software y me encuentro en la posición de "ni siquiera equivocado"?

+0

y ¿qué hay de las teorías económicas/políticas/sociológicas? aún peor: teorías psicológicas. estos son tan falsables que crean escuelas. pero de alguna manera no creo que sean 'educativos/de gestión' – Javier

+0

Hay muchas teorías en psicología que se basan en la experimentación rigurosa y, por lo tanto, pueden aplicarse con confianza a todos los estudiantes de primer año de psicología (el grupo de pruebas normales). Hay muchas teorías infundadas. No culpes a todos los psicólogos. –

+0

@Javier Hah cierto. Las teorías de Ingeniería de Software tendrían, en general, que ser más prácticas y útiles que las de Economía y Psicología. Lo siento por el psicólogo porque el juego (la mente humana) es muy difícil y, sin embargo, las respuestas probablemente lleguen un día, así que vale la pena. La economía como un esfuerzo académico parece ser casi sin sentido. –

Respuesta

21

La ingeniería del 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), etc. Pero principalmente la ingeniería de software trata 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.

+0

Excelente publicación! No podría estar mas de acuerdo. – Syntax

+0

Buena descripción, excepto que la ingeniería de software no es parte de la psicología o la sociología, aunque un ingeniero de software exitoso usaría ambos en beneficio de sus proyectos. –

+0

Estoy de acuerdo con gran parte de la opinión aquí, pero yo diría que los conceptos y teorías relacionadas con la complejidad del tiempo algorítmico se encuentran en el dominio de la informática en lugar de tratar de diseñar sistemas de software eficaces de manera eficiente. Estoy de acuerdo con @DimaMalenko en que ciertamente no es una rama de la psicología, pero puede beneficiarse de ella. –

1

son como recetas: son directrices, cuyo éxito depende:

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

Ni siquiera está mal.

Todas las "teorías" de ingeniería de software parecen ser nada más que consejos sobre cosas particulares para ver si hacen que usted y su equipo sean 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.

+0

a la derecha. la pregunta surge del mal uso de los términos – Javier

+0

, sí, algunos términos se usan incorrectamente, pero la pregunta sigue siendo válida. –

+0

Averiguar cuándo se puede ayudar científicamente puede ser útil. –

3

No me gustaría llamar 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.

+1

hacen una aserción implícita. "Seguir este paradigma mejorará " –

+1

Hacen una afirmación muy explícita, este método produce código con menos errores en menos tiempo. En teoría, esto es comprobable en la práctica, rara vez lo es. –

4

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.

+0

Estoy de acuerdo con su división (+1), simplemente no es su definición de una ciencia absoluta. Creo que siempre y cuando se base en el Método Científico (donde la "verdad" cambia con la evidencia) es una ciencia absoluta. Las pruebas en el sentido matemático no existen en una ciencia absoluta. –

+0

Punto tomado, editado levemente – krosenvold

1

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 unir 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.

Paul.

1

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 vuelven como religiones en cómo se comportan grupos de personas cuando intentan apaciguar a sus dioses técnicos (o demonios).

1

Todas estas teorías y mejores prácticas todavía no nos han llevado al punto donde podemos producir sistemas de software de manera confiable y predecible. El más nuevo de these surveys tiene fecha de 2001; Jeff's column from 2006 aún lamenta 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 nada 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]

1

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 se deben usar 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 ágiles, extremos 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] Comencé 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 TI (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 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.

1

Generalmente el campo de la informática se divide en 4 áreas (que encontrar un enlace a la fuente, SWEBOK?), Que son distintos aunque relacionados e interconectados:

  • Informática
  • Software Engineering
  • Ingeniería
  • Sistemas de Información
  • informáticos

No es un buen análisis de baño gineering vs. science en "Desarrollo de software profesional" de Steve McConnel. Mira su Software Engineering, Not Computer Science.

El desarrollo de software tiene que ver más con la ingeniería (encontrar soluciones prácticas a problemas prácticos) que con 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.

+0

+1. Ingeniería de software ** es ** ingeniería. Se trata de crear cosas mediante el uso de las habilidades y el conocimiento que sean útiles para hacerlo. La ingeniería podría utilizar teorías particulares, pero no existen teorías científicas generales de la ingeniería, como tampoco hay teorías científicas generales sobre cómo unir dos pedazos de madera. Solo hay buenas prácticas (posiblemente basadas en muchas teorías científicas individuales) y experiencia de lo que realmente funciona (empirismo). –

1

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

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

Datos:

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

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

  • Algunos chicos dicen que no tienen paractices "sólidos" y "teorías" ya que somos una joven rama de "ingeniería", por el 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 problema. 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 ver el desarrollo de software como sistema complejo adaptativo

y también hay otra realidad

% 80 de las actividades de desarrollo de software realmente no necesita mente muy Brilland. Cualquier persona "promedio" puede hacerlo.

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

Incluso hay una otra perspectiva nueva My One :-)

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

0

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 realizadas mediante experimentos.

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

Software: El software es un sistema hecho 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, siendo el principal de ellos personas. 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 la causalidad.

Así que, sí, creo que a partir de la respuesta anterior, puede comprender mejor qué es Ingeniería de software comercial en total.

Cuestiones relacionadas