¿Qué es la ingeniería de software real, en comparación con la simple codificación?

  1. Es ingeniería real: análisis estructurado y disciplinado de problemas y desarrollo de soluciones. Muy poco tiene que ver con escribir código: se trata mucho más de averiguar qué código escribir. El desarrollo de un piloto automático para un avión tiene muy poco que ver con la codificación: tiene todo que ver con la ingeniería aeroespacial y las matemáticas. (Para usar su analogía de trenes y edificios, los arquitectos e ingenieros de construcción producen diseños y planos de construcción, no clavan clavos).
  2. Cuando realmente se trata de codificación, uno “diseña” el código, comenzando con la arquitectura y el diseño del sistema, cuáles son todas las piezas (hardware, software, redes, personas), cuál es el panorama general, cuál es la arquitectura, cómo encajan las piezas ¿juntos? Luego, se pasa a la arquitectura de software: de nuevo, ¿cuáles son las piezas (bases de datos, funciones principales, servidores y servicios, etc.) y cómo se unen? Hay mucho enfoque en el proceso y la documentación: especificaciones, pruebas, procesos de integración, procesos de construcción, etc.

En cuanto a cómo ¿Qué debo leer / hacer / practicar para hacer que mi mentalidad / enfoque sea el de la ingeniería? Esa es una decisión difícil: la respuesta general es obtener un título de ingeniería de una escuela que tenga un programa razonablemente bueno y luego pasar una buena cantidad de años adquiriendo experiencia práctica en la industria. No estoy seguro de que haya un atajo, aunque ciertamente podría abrirse paso a través de un plan de estudios de ingeniería en línea (por ejemplo, tomar todos los cursos del MIT que conducen a un título en CS&E, a través de Open Courseware o EdX, incluidos todos los cursos no informáticos en matemáticas y ciencias).

Además de las respuestas proporcionadas, en la práctica la ingeniería de software significa: “Tomar decisiones informadas basadas en un marco amplio para emplear recursos (por ejemplo, humanos, herramientas) para hacer lo correcto de la manera correcta, mientras que, al mismo tiempo, maneja incertidumbres en el mundo. “Esto implica, pero no se limita a:

  1. Desarrollar historias de usuarios / casos de uso / requisitos para garantizar que construimos lo correcto,
  2. Priorizar entre los requisitos para permitir la finalización de las partes más importantes primero.
  3. Manejar incertidumbres y riesgos, preferiblemente, previniéndolos o evaluando periódicamente el proyecto para detectar problemas y tomar medidas.
  4. Habilite otras propiedades del sistema, pero la funcionalidad y el rendimiento, por ejemplo, confiabilidad, seguridad, reutilización, flexibilidad / configurabilidad.
  5. Colabore en equipos con diversos antecedentes (preferiblemente involucrando al usuario final), ya que esto aumenta la probabilidad de hacer lo correcto.

La ingeniería de software es una rama de ingeniería asociada con el desarrollo de productos de software utilizando principios, métodos y procedimientos científicos bien definidos. El resultado de la ingeniería de software es un producto de software eficiente y confiable.

IEEE define la ingeniería de software como:

La aplicación de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, operación y mantenimiento de software; es decir, la aplicación de la ingeniería al software.

Diseñar la “arquitectura” de un paquete de software grande es “ingeniería” más allá de la simple codificación. Formar estrategias para cosas como pruebas y control de versiones también es más “ingeniería” que codificación.

Muy a menudo, está diseñando algoritmos desde cero, quizás también diseñe la interfaz de usuario (si no tiene un experto que lo haga por usted).

También podría estar haciendo cálculos para determinar qué tamaño de granja de servidores necesita para admitir alguna aplicación.

Hay mucho más allá de * solo * codificación.

Si tiene algún enfoque y proceso para producir software complejo de manera predecible y repetida, y alguna forma de determinar los requisitos funcionales y no funcionales y medir si se cumplen, entonces está haciendo ingeniería de software.

Si no es así, y solo está utilizando un enfoque de código / prueba / repetición , piratee hasta que, con suerte, funcione , donde el desarrollo es análogo al juego para niños ” Marco Polo ”, persiguiendo constantemente nuevos y cambiantes requisitos, entonces no .

Aquí hay un par de recursos que tratan específicamente con prácticas más allá de la codificación:

  • Programación más allá de las prácticas por Gregory Brown
  • Algunas cosas que podrían ayudarlo a hacer un mejor software por David R. MacIver

Una vez que comprenda el marco, la arquitectura, la infraestructura, comprenderá que la ingeniería de software es más que solo codificación.

More Interesting

¿En qué empresa de tecnología se prueba realmente a un ingeniero de software para ir más allá de su zona de confort / o es el más desafiado, Google o Facebook?

¿Es posible que un no programador se prepare para el puesto de Ingeniero de Software en Google en 3-6 meses?

¿Por qué la gente a menudo cambia de compañía en el sector de TI?

Nunca estoy satisfecho con mi código, ¿cómo comencé a aceptarlo incluso cuando está bien escrito?

¿Qué puede hacer un estudiante de primer año en ascenso para convertirse en ingeniero de software en una gran empresa tecnológica en los Estados Unidos?

¿Cómo encontramos buenos desarrolladores de software?

¿Cómo debe un ingeniero de software retirado encontrar trabajo a tiempo parcial o en casa?

¿Qué piensan los ingenieros de software de Google sobre la declaración de Peter Norvig de que ganar concursos de programación se correlaciona negativamente con ser bueno en el trabajo?

¿Cómo están siempre ocupados los ingenieros de software?

¿Qué es el "éxito de la vida" según un ingeniero de software?

Cómo convencer a un gerente para que lo contrate para un trabajo de alto nivel cuando es un junior en ingeniería de software

¿Qué habilidades carecen comúnmente los programadores autodidactas? ¿Qué debe estudiar un programador autodidacta para ponerse al día con sus compañeros con educación formal?

¿Qué tipo de daño al público pueden causar los ingenieros de software?

¿Qué tiene un mayor potencial de trabajo, un científico de datos o un ingeniero de software?

Cómo conseguir un trabajo en Automattic como ingeniero de software