En mi opinión, una excelente analogía es construir una casa, como si hablaras de construir un programa. Los carpinteros, los plomeros y los electricistas no solo aparecen el mismo día, sino que los carpinteros juntan algunas tablas, los plomeros pegan trozos de tubería y los electricistas ensartan los cables en todas partes, todo de una manera totalmente descoordinada y nadie está realmente muy descoordinado. seguro de cómo debe verse la casa. Desafortunadamente, esa es la cantidad de programadores que compilan el código, escribiendo combinaciones de líneas aparentemente aleatorias sin un concepto real de cómo van a encajar. El diseño está destinado a solucionar ese problema y evitar gastar una cantidad innecesaria de esfuerzo en el reprocesamiento para corregir errores que nunca deberían haberse cometido en primer lugar.
Con una casa, uno comúnmente tiene un contratista general y un arquitecto trabajando juntos para decidir cosas como cuántos niveles habrá (¿sí o no en el sótano? ¿Sí o no en el piso de arriba?) ¿Cuántas habitaciones y baños deberían existir y ¿Cómo deberían organizarse entre sí? ¿Qué tipo de electrodomésticos, iluminación, enchufes, etc., y qué tamaño de caja de servicio se necesitará? ¿Qué tal un garaje y, de ser así, cuántos autos tendrá? ¿Qué tipo de características estéticas se incluirán? Muchas de estas cosas serán problemas de requisitos para la funcionalidad, pero muchos aspectos involucran ¿cuál de las muchas implementaciones posibles que decidiremos construir? ¿Cuánto hormigón, madera, tuberías de entrada y salida de flujo para plomería, enchufes eléctricos, interruptores automáticos, etc. se necesitarán? ¿El diseño concebido cumple con los requisitos del código de construcción para la cantidad de tierra que debe dejarse sin cubrir por concreto, seguridad contra incendios, etc.? Una vez que todo ese diseño se haya resuelto y diagramado, se pueden pedir los materiales adecuados y los comercios de construcción respectivos sabrán lo que deben hacer para satisfacer ese diseño, que, a su vez, debe satisfacer los requisitos.
En términos de diseño de software, ¿el programa se ejecuta en una sola computadora o en varias? Si hay varios, ¿hay un servidor junto con varios clientes? ¿Una o más computadoras estarán dedicadas a ejecutar este programa (junto con el sistema operativo subyacente requerido), o este programa se ejecuta junto con otros programas, o estamos hablando de la nube? ¿Qué método de comunicación crees que es más apropiado para que tu programa se comunique con el usuario en el mundo exterior, con hardware, con el sistema operativo y, si tu programa se divide en subsistemas significativos, esos subsistemas entre sí? ¿Cómo planea evitar y, si es necesario, manejar las condiciones de carrera? ¿Cómo planea manejar los problemas de seguridad (proteger datos, detectar intrusiones, pérdida de disco duro debido a problemas de alimentación, activar sistemas de respaldo, manejar entradas defectuosas)? ¿Qué sistema (s) operativo (s) deberían usarse (distribución de Windows ___, ___ de Linux, Apple OS X ___, otros?) ¿Qué lenguaje (s) de programación deberían usarse para qué partes del programa? Si es necesario realizar varias tareas, ¿cuál es la prioridad y la frecuencia de cada tarea? ¿El sistema está controlado por el tiempo, por eventos o por alguna combinación? ¿Cuánta potencia informática necesita (capacidad de CPU, memoria, enlaces de bus)? Esto es solo una pequeña parte de lo que implica el diseño. Las preguntas reales que deben formularse dependen en gran medida del sistema y el programa: un sistema embebido en tiempo real que controla un avión es muy diferente de las macros para una hoja de cálculo Excel que realiza un seguimiento de los ingresos, gastos e inventario de pequeñas tiendas familiares.
Además de responder las preguntas apropiadas, también debe saber por qué tomó las decisiones de diseño que tomó. También debe obtener la aceptación de las personas que establecieron los requisitos de funcionalidad para el software, así como de los programadores que implementarán el diseño.
- ¿Qué es una buena herramienta de diseño de aplicaciones móviles?
- ¿Cuál es la relación entre diseño mecánico y resistencia mecánica?
- ¿Tienes algún diseño para una nueva bandera?
- ¿Vale la pena hacer un curso de diseño de tuberías por 1.5 lakh, o debería ir a un instituto que lo ofrezca por 75k?
- ¿Qué está haciendo para seguir generando una acumulación de A / B de alta calidad después de un largo tiempo de pruebas de alto tempo?