Comparando la ingeniería de software con la ingeniería civil, me sorprendió Para observar una forma de pensar diferente: cualquier ingeniero civil sabe que Si desea construir una pequeña cabaña en el jardín, puede obtener el materiales e ir a construirlo, mientras que si quieres construir una casa de 10 pisos (O, por ejemplo, algo así como
En contraste, hablar con algunos programadores o leer blogs o foros A menudo encuentro una opinión generalizada que puede formularse más o menos de la siguiente manera: La teoría y los métodos formales son para matemáticos / científicos. mientras que la programación tiene más que ver con hacer las cosas .
Lo que normalmente se implica aquí es que la programación es algo muy práctico y que a pesar de los métodos formales, las matemáticas, la teoría de algoritmos, Los lenguajes de programación limpios / coherentes, etc., pueden ser temas interesantes, a menudo no son necesarios si todo lo que uno quiere es hacer las cosas .
Según mi experiencia, yo diría que si bien no necesitas mucho teoría para armar un guión de 100 líneas (la cabaña), con el fin de desarrollar una aplicación compleja (el edificio de 10 pisos) necesita una estructura Diseño, métodos bien definidos, buen lenguaje de programación, buen texto. libros donde puedes buscar algoritmos, etc.
Así que IMO (la cantidad correcta de) teoría es una de las herramientas para hacer las cosas .
Mi pregunta es por qué algunos programadores piensan que hay un contraste entre la teoría (métodos formales) y la práctica (hacer las cosas)?
Es la ingeniería de software (software de construcción) percibida por muchos como fácil en comparación con, digamos, ingeniería civil (construcción de casas)?
¿O son estas dos disciplinas realmente diferentes (aparte de las de misión crítica)? software, la falla del software es mucho más aceptable que la falla de la construcción)?
EDIT
Gracias por todas las respuestas y el interés en este tema. Le ruego que no publique nuevas respuestas si no tiene para agregar alguna observación que aún no ha sido cubierta por las respuestas existentes. Así que lea todas las respuestas cuidadosamente antes de publicar nuevas.
Intento resumir lo que he entendido de las respuestas hasta ahora.
- A diferencia de la ingeniería de software, en ingeniería civil es mucho más claro qué cantidad de teoría (modelado, diseño) se necesita para una tarea determinada.
- Esto se debe en parte al hecho de que la ingeniería civil es tan antigua como la humanidad, mientras que la ingeniería de software solo existe desde hace unas décadas.
- Otra razón es el hecho de que el software es un tipo de artefacto más volátil, con requisitos más flexibles (se puede permitir que se bloquee), diferentes estrategias de marketing (se puede sacrificar un buen diseño para comercializarlo rápidamente) , etc.
Como consecuencia, es mucho más difícil determinar cuál es la cantidad correcta de diseño / teoría es apropiado en ingeniería de software (muy poco - > código desordenado, demasiado - > nunca puedo terminar) porque no hay una regla general y solo (mucha) experiencia puede ayudar.
Entonces, si interpreto sus respuestas correctamente, esta incertidumbre sobre cuánto La teoría es realmente necesaria contribuye a los sentimientos mixtos de amor / odio. Algunos programadores tienen hacia la teoría.