¿Cómo puedo abordar la complejidad de escribir software?

La forma en que ha formulado la pregunta ilustra muy bien lo que significa la palabra “ingeniería”. Es fácil aprender un idioma y escribir una función de subproceso único que realice alguna tarea o algoritmo, si puede confiar en que no se verá interrumpido por algo y está trabajando en un entorno que proporciona un nivel normal de soporte.

Se convierte en ingeniería cuando hay varias partes en movimiento simultáneo y necesita pensar en cosas como restricciones de tiempo, interacciones del sistema, ataques maliciosos. El rango de cosas que debe tener en cuenta es específico del dominio y no existe una lista o fórmula simple que se aplique universalmente, ya sea de las cosas o las mejores prácticas para tratar con ellas. Un enfoque sería conseguir un trabajo en el campo trabajando con personas más experimentadas y elegir sus cerebros. Cuando encuentre un trabajo en algún lugar, hable con personas fuera de su grupo inmediato como un ejercicio de autoeducación.

Si se encuentra en un área popular como el desarrollo móvil o web, puede encontrar una gran variedad de publicaciones de blog, artículos, artículos de opinión, etc., todos los cuales dicen decirle cuál es el problema más importante y la mejor solución para él. Tómelos con un grano de sal y recuerde que nadie escribe un párrafo sin una agenda. (Ejercicio para el lector: identifique mi agenda).

Tómese un tiempo para investigar la historia de los enfoques que las personas han utilizado para gestionar la complejidad en el campo que ha elegido. La ingeniería de software ha visto muchos de estos, eche un vistazo a Comparación de paradigmas de programación. Descubra qué ideas tuvieron éxito y cuáles fracasaron, y por qué. Los éxitos y los fracasos a menudo son solo parciales porque, por lo general, estos son realmente grupos de ideas de las que uno puede elegir. Una idea aparentemente desacreditada puede dejar restos en la práctica común posterior.

Es un arte.
Y la pregunta es muy cierta en la forma en que la haces.

No tengo una bala mágica, pero esto es lo que me ha ayudado:

  • Mantente orientado a los ingenieros. Si alguna lógica adicional no está facilitando que otra persona entienda su código y contribuya a ello, es probable que esté complicando demasiado las cosas.
    La prueba de manejo, o al menos la prueba de soporte, también es muy útil. Es mucho más fácil para los demás, y usted mismo dentro de medio año, comprender el código si viene con un montón de pruebas cortas y simples que pasan.
  • Al mismo tiempo, estar orientado al usuario. Asegúrese de que su herramienta sea fácil de usar. “Al usuario no le importa” los detalles internos. Si su herramienta no está resolviendo su tarea, no la usarán.
  • Al mismo tiempo, estar centrado en objetivos. La mayoría del buen software está aquí hoy porque estaba haciendo una cosa bien.

Encontré que el modo Linux, una serie de módulos conectados débilmente, es un buen marco para pensar. Hoy en día, los servicios y las API REST están tomando los binarios y las tuberías.

Usted descubre el resto 🙂 Me complacería responder preguntas más específicas si las tiene.

Gracias,
Dima

Comience escribiendo en una lista lo que desea que haga el programa. No cómo, sino qué. Lea la lista varias veces para asegurarse de haber enumerado todo lo que sabe. Estas son las características.

Luego comience a desglosar cada uno de estos elementos. ¿Qué se necesita para que este artículo suceda? Intenta evitar los tecnicismos. Estas suelen ser subcaracterísticas.

Perfora cada elemento, nivel por nivel hasta que estés en un nivel que puedas visualizar fácilmente en tu cabeza. Mira tus planes. ¿Hay elementos bajo diferentes características que son terriblemente similares? Intenta buscar patrones. Tal vez incluso las características completas parecen tener mucho en común. ¿Tal vez podrías de alguna manera generalizar esto?

También debe aprender algunos tipos de diagramas y saber cuándo usarlos. Los buenos son EER (Diagrama de relación de entidad mejorada), STD (Diagrama de tránsito estatal), diagramas de flujo, DFD (Diagrama de flujo de datos) y MSC (Diagramas de secuencia de mensajes). Jugar con estos a menudo ayuda. Solo use lápiz y papel, en lugar de alguna herramienta sofisticada.

Dibuje el flujo correctamente, compare entre diferentes patrones e intente visualizar cuál sería el diseño correcto para una salida óptima. Yo diría que comience con los requisitos, escriba posibles casos de uso y cualquier restricción no funcional también. Eso te ayudará a diseñarlo bien. Generalmente sigo un enfoque TDD mientras codifico desde el documento de diseño detallado finalizado.

More Interesting

En ingeniería de software, ¿deberían incluirse requisitos no funcionales en la cartera de pedidos de un producto?

¿Cuáles son algunas de las cosas que los ingenieros de software indios odian más?

¿Cuáles son algunos de los principales desafíos al diseñar sistemas distribuidos y cuáles son las soluciones más populares?

Como aspirante a ingeniero de software, ¿qué idiomas debo aprender?

¿El documento de Especificación de requisitos de software está desactualizado en este mundo ágil de requisitos cambiantes?

¿Cuáles son algunas oportunidades de carrera que exploran la intersección entre el desarrollo de software y el cine?

¿Qué se entiende por mapeo de instrucciones uno a uno?

¿Cómo prioriza específicamente estas consideraciones al elegir un equipo de software y un producto para unirse?

¿Cuál es la diferencia entre la ingeniería de software y la informática?

¿Cómo encajan los arquitectos de empresa / software en el modelo DevOps?

¿Cuáles son los requisitos básicos para principiantes al crear un nuevo software?

¿Cómo es trabajar como ingeniero de software en Microsoft, Dubai?

¿Qué se siente pasar de una gran empresa (como Google, Facebook, Microsoft, etc.) como ingeniero de software a Finanzas (Goldman Sachs, DE Shaw, Morgan Stanley, etc.)?

¿Crees que es mejor desarrollar una aplicación web o una aplicación nativa de iOS y Android para la primera versión de un producto?

¿Quién ofrece capacitación en pruebas de software en Bangalore?