Al comparar la ingeniería de software con la ingeniería civil, me sorprendió observar una forma diferente de pensar: cualquier ingeniero civil sabe que si desea construir una pequeña cabaña en el jardín, puede obtener los materiales e ir a construirla, mientras que si desea construirla. una casa de 10 pisos (o, por ejemplo, algo como esto ) que hay que hacer bastantes matemáticas para asegurarse de que no va a desmoronarse.
Por el contrario, hablando con algunos programadores o leyendo blogs o foros, a menudo encuentro una opinión generalizada que se puede formular 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 se trata más de hacer las cosas .
Lo que normalmente se implica aquí es que la programación es algo muy práctico y que aunque 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 obtener cosas hecho .
Según mi experiencia, diría que si bien no necesita mucha teoría para armar un script de 100 líneas (la cabaña), para desarrollar una aplicación compleja (el edificio de 10 pisos) necesita un diseño estructurado. métodos definidos, un buen lenguaje de programación, buenos libros de texto donde puede buscar algoritmos, etc.
Entonces, la teoría IMO (la cantidad correcta de) 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)?
¿La ingeniería de software (software de construcción) es percibida por muchos como fácil en comparación con, por ejemplo, la ingeniería civil (construcción de casas)?
¿O son estas dos disciplinas realmente diferentes (aparte del software de misión crítica, la falla del software es mucho más aceptable que la falla del edificio)?
Trato de 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 determinada tarea.
- 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 ha existido solo durante algunas 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 (puede permitirse que se bloquee), diferentes estrategias de marketing (se puede sacrificar un buen diseño para ponerlo en el mercado rápidamente), etc.
Como consecuencia, es mucho más difícil determinar cuál es la cantidad adecuada de diseño / teoría apropiada 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 acerca de cuánta teoría se necesita realmente contribuye a los sentimientos mixtos de amor / odio que algunos programadores tienen hacia la teoría.