¿Qué es la creación de software?
Diseño de software es una actividad peculiar que históricamente apenas está en los albores de su desarrollo hacia tomar un lugar junto a las otras disciplinas socialmente confiables, por ejemplo, la carpintería, la música, o la ingeniería civil; en contraste con otro tipo de actividades como la nigromancia o el ocultismo. En la actualidad la teoría y la práctica del diseño de software es todavía una mezcla sui géneris entre arte-artesanía y ciencia-ingeniería donde la precisión matemática es tan relevante como el atractivo emocional. El lado técnico del diseño de software se asimila mejor familiarizándose con el proceso creativo de obras que provienen exclusivamente de la lógica —e.g., composición literaria, matemáticas aplicadas, oratoria, composición musical— y cuyas propiedades por ende no están definidas en el campo de la física (con excepción quizá de la medida del desorden observado en las dependencias en, desde y hacia dicho software).
El diseñador de software desarrolla y ejerce su talento desde su fuero interno en donde encuentra la materia prima del software mismo sujeto de diseño: la lógica, i.e., los principios de la inferencia lícita y los criterios de la demostración válida que investigan y clasifican la estructura de las declaraciones y de los argumentos. Las propiedades de la materia prima de un producto cualquiera moldean las posibilidades de lo que puede llegar a convertirse y la manera en que alcanza su función. Por ejemplo, si la función es proteger siempre y cuando no impida la movilidad entonces Kevlar para un chaleco antibalas es más adecuado que el acero o el aluminio. Por lo tanto, el conocimiento detallado de las propiedades de la materia prima y de los bloques prefabricados es esencial para un buen diseño; donde los bloques prefabricados aquí son el software previamente escrito y disponible para ser reutilizado.
Siendo la lógica —la lógica simbólica en particular— parte de la materia prima en diseño de software entonces para un empleo adecuado de la misma es ineludible el dominio del lenguaje, sea este natural como el español o el inglés o sea artificial como Microsoft Visual C#, para lograr consistencia, validez y completitud en el software diseñado. No es sorpresa entonces que la actividad de diseño de software ofrezca mejores resultados cuando se realiza en un ambiente colaborativo donde los diseñadores emplean todo tipo de lenguaje y sus formas de expresión hablada o escrita para crear software de calidad. La importancia de la comunicación efectiva es imponente en diseño de software tan sólo seguida de la importancia de inventiva. Sin embargo, es paradójico descubrir que existe una imposibilidad intrínseca en la comunicación humana que nos libera de intentar una comunicación perfecta. Así, el desarrollo de software se convierte en un juego cooperativo de comunicación e invención con el cual cada proyecto no intentará lograr comunicación perfecta sino administrar la falta de completez en nuestra comunicación.
Respuestas útiles a la pregunta planteada típicamente provienen de la controversia y la argumentación, proponiendo las razones, pruebas y fundamentos de una y otra parte.