¿Cómo crean los desarrolladores de software programas complejos? ¿Qué herramientas usan? ¿Cómo piensan ellos?

Se necesita algo de experiencia, pero el proceso general consiste en modelar su sistema, identificar sus componentes / objetos, implementar estos objetos de forma independiente y asegurarse de que existan interfaces para que funcionen juntas. Divide y conquistaras. Si descompone el problema en partes, luego atornille las partes, es mucho más accesible.

Puede ser más fácil ver esto por analogía. Considera un auto. Cuando piensa en construir algo como un automóvil, identifica sus componentes (motor, carrocería, ruedas, frenos, transmisión). Cada uno de estos se puede construir de forma independiente. De hecho, cada uno puede descomponerse en partes más pequeñas (un motor tiene muchas partes independientes). El diseño general incluye una especificación de cómo se atornillan todas estas partes, las mangueras que unen una parte con otra, etc.

Es así en el software. Los ingenieros siempre están pensando en el caso general. ¿Cómo hago que esto sea útil en múltiples aplicaciones / contextos? ¿Qué interfaces con estos objetos son lo suficientemente generales como para que lo que construyo pueda usarse en múltiples contextos? El resultado son API / interfaces, componentes reutilizables y bibliotecas y archivos de encabezado que permiten a otros usar lo que construiste.

Los arquitectos de software piensan en cajas negras que hacen bien una o dos cosas, y cómo unirlas. Esto sucede idealmente antes de que comience la codificación, y la especificación de los componentes se puede dividir entre los miembros del equipo para implementar.

Es sorprendentemente fácil crear un código complejo que abarque miles de líneas.
Imagine administrar una lista de tareas con notas post-it. Es bastante fácil construir una pila sustancial de notas adhesivas muy rápidamente, muchas de las cuales dirán lo mismo o cosas muy similares.

Con un manejo cuidadoso, podemos mantener los adhesivos limpios y eliminar los duplicados, pero si no podemos molestarnos, pronto se acumulan y encontrar los importantes se convierte en una pesadilla.

Recientemente tomé una pequeña parte de una aplicación que tenía alrededor de 2000 líneas de largo y logré reducirla a aproximadamente 200. Al mismo tiempo, también logré agregar una cantidad adicional (significativa) de funcionalidad.

More Interesting

¿Qué es un volcado de núcleo?

¿Quién es más probable que tenga más éxito en DevOps: un desarrollador que aprende habilidades de administración de sistemas o un administrador de sistemas que adquiere algunas habilidades de desarrollo de software?

¿Qué hace Takipi?

¿Cómo trabaja un ingeniero de software en Google, Valve, Amazon, Facebook o Microsoft en el día a día? ¿En qué se diferencia del día a día de un doctorado en informática?

¿Por qué la calidad del desarrollo de software offshore subcontratado es tan mala?

¿Alguien usaría un preprocesador en capas en un lenguaje de programación convencional?

¿Cuáles son las mejores bibliotecas (en cualquier idioma) para hacer análisis de red?

¿Puede ser un desarrollador de software 'puro' o también necesita poseer conocimientos específicos de la industria?

Soy un estudiante universitario de 28 años que trabaja en la industria de la aviación. ¿Puedo cambiar mi profesión a empresa de software? En caso afirmativo, ¿qué curso puedo tomar para construir una carrera?

¿Existe un período óptimo de tiempo ininterrumpido (sin distracciones) que los programadores necesitan para trabajar de manera efectiva? Por ejemplo, estiramientos de treinta minutos no funcionan para mí.

¿Qué es un componente de software?

¿Cuáles son algunos buenos trucos de productividad para trabajar en una MacBook Pro?

¿En qué gastan sus compañías de software miles de millones de dólares?

¿Es China mejor en términos de software?

¿Existe una correlación entre el código feo y el código que se escribió rápidamente?