Soy un graduado de CS y quiero convertirme en un buen arquitecto de software. ¿Qué tengo que hacer?

Buena pregunta, difícil de responder. En primer lugar, debe adquirir experiencia como desarrollador de software. La arquitectura no es un ejercicio de torre de marfil. (Algunos arquitectos son de esta variedad, pero causan más problemas de los que resuelven). Un buen arquitecto necesita una experiencia amplia y profunda con la tecnología para poder tomar buenas decisiones.

No puedo decir cómo me convertí en arquitecto. En parte es algo personal: ¿tiene la capacidad y la inclinación para ver, crear y comunicar patrones más grandes en el software? Algunas personas son extremadamente buenas en problemas de codificación difíciles, pero no prestan mucha atención al panorama general. Este tipo de persona es tan valioso como un arquitecto, pero los dos tipos de personas tienen diferentes formas de ver las cosas o sus preferencias. También necesita buenas habilidades de comunicación y liderazgo para ser arquitecto.

Aunque no lo he leído todo, he estado atento al siguiente sitio, que tiene un blog, presentaciones y ahora ofrece un libro sobre cómo pasar de programador a arquitecto. Por lo que he visto, es bastante bueno.

Codificando la Arquitectura

Las respuestas a esta pregunta: http://www.quora.com/What-are-some-good-practical-books-for-software-architecture también pueden ser útiles (tengo una respuesta sobre esa pregunta, pero hay muchas buenas sugerencias)

También encuentro esta respuesta muy perspicaz: la respuesta de Gary Wisniewski a ¿Qué hace a un buen arquitecto de software? ¿Cuáles son las características definitorias de un arquitecto y las diferencias entre un arquitecto y un gerente de ingeniería?

Las respuestas de Vanessa y Greg cubren la mayoría de mis pensamientos sobre la arquitectura de software. Añadiría dos sugerencias específicas:

  1. Lea tanto código como pueda tolerar
  2. Concéntrese en la capacidad de prueba en sus diseños.

No te sugiero que leas al azar un montón de código en github. Hay algunos proyectos de código abierto muy populares que vale la pena entender en detalle. ¿Qué problemas resuelven? ¿Qué los hace tan populares? ¿Qué compensaciones hicieron en comparación con los proyectos menos populares? Comprender las respuestas a esas preguntas en detalle informará sus propios diseños.

El diseño centrado en la capacidad de prueba proporciona validación con respecto a los requisitos y la mantenibilidad. La arquitectura elegante se promueve en algunas escuelas y es digna de estudio, pero el mundo del desarrollo de productos gira en torno al horario y la adaptación en respuesta a los requisitos cambiantes. El mercado solo se preocupa por la funcionalidad. Puedes leer esto de otra manera: el diseño ganador no siempre es el diseño más hermoso.

A Einstein se le atribuye la siguiente máxima: “Todo debería ser lo más simple posible, pero no más simple”. Esas son palabras para diseñar.

Atribución de la cita: http://quoteinvestigator.com/201

Los mejores arquitectos de software con los que he trabajado tienen habilidades multidisciplinarias. No solo son buenos en ingeniería de software, sino que comprenden las necesidades de los clientes, la economía y muchas otras cosas. Son capaces de aplicar sus conocimientos a la tarea en cuestión. Sin embargo, no confunda esto con ser el tipo de “crack codificador” que gana concursos de programación. Esa es una habilidad diferente.

More Interesting

¿Es posible construir un mejor servidor en Go que C ++?

¿En qué trabajan los desarrolladores de software en empresas como WhatsApp una vez que su software está actualizado?

¿Por qué es importante la ingeniería de software para el desarrollo de software?

¿Puedo tener su opinión y consejos sobre mi situación profesional como desarrollador de software?

¿Cuáles son las consideraciones clave antes de seleccionar una empresa de desarrollo de software?

Como desarrollador senior de software, ¿cometiste errores de nivel junior?

¿Qué hace un desarrollador de software en Amazon? ¿En qué trabajan y qué herramientas usan?

Dentro de un año, ¿alguna startup en Sydney me emplearía para una pasantía remunerada como desarrollador junior de software? ¿Por qué o por qué no?

¿Cuál es la mejor manera para que un ingeniero / programador de software nuevo / principiante descubra las mejores bibliotecas, API, marcos, etc. necesarios para el trabajo?

Cómo obtener una carrera en desarrollo de software sin ser un experto en un marco específico

¿Por qué algunos desarrolladores dicen que no son TI?

Cómo obtener puntos sólidos para justificar mi gestión de que los lanzamientos de software de fines de semana no son en general buenos además de ser un dolor permanente para el desarrollador

¿Qué hace que algunos buenos desarrolladores de software sean buenos para construir software a gran escala pero débiles en estructuras de datos y algoritmos?

¿Es realista pedir dos meses de vacaciones no remuneradas durante el verano, como desarrollador de software con 3 años de experiencia?

¿Por qué un empleador debería preferir un matemático a un desarrollador de software para algunas tareas de programación?