¿Cuáles son algunos buenos consejos para que un estudiante de pregrado de CS aprenda independientemente sobre la arquitectura de software?

Ninguna de las dos respuestas hasta ahora parece abordar su pregunta real. A menos que pueda encontrar algunos proyectos de código abierto con documentación detallada de la arquitectura del software, lo cual dudo mucho. La mayoría de los proyectos de código abierto están dirigidos por personas como yo que solo dedican tiempo libre a trabajar en una idea [christopherpow / nesicide], y el producto final se forma como la acumulación de un planeta a partir de escombros interestelares, en lugar de un inicio cuidadosamente planeado y documentado. arquitectura de software hasta su finalización. Lo triste / divertido es que probablemente también sea el caso en su carrera. La gente se entusiasma al seguir un complejo proceso de desarrollo de software, que convierte el acto de crear software en algo que solo puede hacer en su tiempo libre, porque pasará la mayor parte de su tiempo trabajando para mantener el proceso a flote para mantener la métrica. -Los vendedores felices. Vea mi pregunta: ¿Vale la pena recopilar métricas en proyectos de software?

Ahí, eliminé mi odio al proceso. A tu pregunta.

La arquitectura de software es algo que merece mucha reflexión. Más pensamiento que la escritura real del software para desarrollar la arquitectura misma. La mayoría de las veces encontrará que es útil pensar en su software como una colección de objetos que operan dentro de algunas reglas de colaboración. No quiero decir que debas comprar el libro Patrones de diseño o Análisis y diseño orientado a objetos. No quiero decir que solo debas considerar la programación OO. Simplemente acostúmbrese a pensar en su software como una colección de cosas que pueden hacer cosas a otras cosas. Acostúmbrese a dibujar imágenes de su software, incluso si solo está en Microsoft Visio. [Descargo de responsabilidad: hago todas mis arquitecturas de software en MS Visio. Herramientas como Rose, Rhapsody, Enterprise Architect, etc. son más problemáticas de lo que valen. Se interponen, y son terreno fértil para los traficantes de procesos.] Limite la complejidad de cada cosa a una pila manejable. Si te encuentras poniendo funcionalidad en una cosa que realmente no debería estar allí, según tu descripción inicial de la cosa, entonces reconsidera tu montón de cosas. Si te encuentras intercambiando demasiado estado interno de una cosa por otra cuando intentas hacer que la otra cosa haga algo, reconsidera tu montón de cosas o sus relaciones.

Algunos conceptos muy útiles a tener en cuenta con respecto a la arquitectura de software, especialmente para el diseño de la interfaz de usuario, son los conceptos Modelo-vista-controlador. Este modelo le ayuda a separar claramente el comportamiento de su software [un juego, un navegador web, un cliente de correo electrónico, lo que sea] de la interfaz de usuario y cómo el usuario interactúa con el programa.

Creo que el punto más importante es acostumbrarse a dibujar imágenes de su arquitectura de software. Encontrarás imágenes mucho más fáciles de trabajar que el texto. Ni siquiera tiene que ser complicado. Una vez dibujé una imagen de la arquitectura de software de un dispositivo de puente E1 a Ethernet con un cuadro y tres flechas (y algunas anotaciones de texto). Eso fue todo lo que necesitaba para transmitir el concepto. Inherentes a esas flechas hay hilos para manejar la recepción desde un enlace E1, transmitiendo en un enlace Ethernet, y una de las flechas se curvó de un enlace E1 a otro para implicar que el dispositivo también manejó el cruce E1 a E1.

Asistí a una conferencia muy útil sobre “diseño de información” Edward Tufte: Cursos. Este fue, con mucho, el día más maravilloso de mi carrera en términos de ayudar a solidificar en mi mente los pensamientos / sentimientos que habían estado dando vueltas caóticamente: “¡Estamos haciendo esto demasiado sangriento!” La arquitectura del software debe ser simple de transmitir a otros. Si no es así, la arquitectura es demasiado compleja. Volviendo a mi proceso original de quejas: esas mismas personas se entusiasman con las llamativas presentaciones de PowerPoint. Incluso me han acusado de no saber de qué estoy hablando porque mi imagen es demasiado simplista [es decir. no tenía pelusa de PowerPoint y basura llamativa para ofuscar los detalles simples].

Solo tenga en cuenta la simplicidad. Si tiene dificultades para conectar dos cuadros en una mezcla de una arquitectura de software en la página, es probable que le resulte casi imposible de implementar y sangrientamente ridículo intentar probar.

¡Buena suerte!

Software Architecture for Dummies es un libro real, pero no creo que responda tu pregunta 🙂

Las arquitecturas se materializan porque el código evoluciona, los requisitos evolucionan, etc. La mejor manera es comenzar con la versión 0 de algo y llevarlo a la versión n , con muchos cambios en el camino. El problema no es que todos los problemas puedan evolucionar hacia una arquitectura clara.

Realmente me gustó la Violeta de Cay Horstmann documentada en La arquitectura de las aplicaciones de código abierto: Violeta

Hay muchos libros y documentos buenos por ahí, pero la mayoría de ellos están escritos asumiendo que has tenido algo de experiencia en el mundo real, por ejemplo, los patrones se verán como buenas ideas pero totalmente inútiles hasta que te encuentres en una esquina y utilices uno realmente ayudaría (luego aprendes a pensar en ellos y luego finalmente en conceptos de alto orden como qué módulos deberían hacer qué y después de mucha experiencia comienzas a aprender a simplificar en gran medida, pero solo porque has aprendido a abstraer completamente el código sin dañar el código real por sí mismo [es decir, puede ver a través del código])

Una forma de obtener esta experiencia es comenzar su propio pequeño proyecto de código abierto (mantenerlo pequeño a propósito)

Un consejo: contribuir a algunos proyectos de código abierto. Es una excelente manera de aprender, relacionarse con otros y aplicar lo que ha aprendido en la vida real.

More Interesting

Dada su mano de obra altamente calificada, ¿por qué la TI india (software, semiconductores, etc.) continúa ganando menos que sus pares occidentales?

¿La disciplina de la programación de computadoras / ingeniería de software está separada de cualquier lenguaje de programación en particular, y si es así, cómo?

¿La metodología Agile es solo el modelo en cascada pero en ciclos de lanzamiento más cortos?

Cómo volver al camino con mi carrera en ingeniería de software con 6 años de brecha y sin experiencia

¿Cuáles son los lenguajes de programación, utilizados recientemente en las industrias de software?

¿Habrá una tercera edición del libro "Code Complete" de Steve McConnell?

¿Qué sucede si dos UUID son conflictivos?

¿Qué es dimensionamiento en desarrollo ágil?

¿Existe una correlación entre los diseñadores de software / juegos y los científicos sociales?

Tengo mi sitio web de comercio electrónico desarrollado y está a punto de comenzar, pero como no tengo mucho conocimiento sobre el uso del tablero y los problemas relacionados con el software, ¿a quién debo contratar? ¿Quién puede ocuparse de los problemas de software de fondo y todo eso?

¿Desarrollar un software que nadie usa es una pérdida de tiempo?

¿Cómo diseñas e implementas tu propio proyecto de pasatiempo?

¿Qué distribución de Linux es tan estable como Mac OS X?

¿Dónde puedo encontrar una institución de capacitación que pueda enseñarme cómo obtener un trabajo de software?

¿Cómo ha afectado "No Meeting Wednesday" a su lugar de trabajo?