• Qual é a função de um arquiteto no time? • Como formar um arquiteto de software? • Qual é a parte feia? • O que é esse tal arquiteto de software? • Perguntas
desde m̶i̶n̶h̶a̶ p̶r̶i̶m̶e̶i̶r̶a̶ g̶a̶m̶b̶i̶a̶r̶r̶a̶ meu primeiro código • 11 anos repetindo que ganho dinheiro fazendo programa • Tecnólogo, MBA e Mestrando • Blogueiro Amador (aleatorio.dev.br) • @aleatoriodevbr
conjunto de decisões que você queria ter tomado logo no início de um projeto, mas, como todo mundo, não teve imaginação necessária para fazê-lo” Ralph Johnson “A arquitetura representa as decisões significativas de design que moldam um sistema, onde a significância é medida pelo custo da mudança” Grady Booch “Quando as pessoas na indústria de software falam sobre ‘arquitetura’, elas se referem a uma noção vagamente definida dos aspectos mais importantes do design interno de um sistema de software.” Martin Fowler
sobre o que é importante num software. Seja lá o que isso signifique” Ralph Johnson • Arquitetura é sobre mudança e evolução • Arquitetura é sobre abstração e alto nível • Arquitetura é sobre custo • Arquitetura é sobre complexidade (principalmente a escondida) • Arquitetura é sobre estrutura (módulos, componentes, camadas…) • Arquitetura é sobre interação entre partes do sistema
Diferentes organizações trazem diferentes funções para o arquiteto de software • Definir a arquitetura do sistema • Manter a integridade arquitetural • Definir os riscos técnicos (e como mitigar) • Participar do planejamento dos projetos • Definir um plano • Documentar • Orientar o time • Interação com as partes envolvidas
Participação direta nas entregas de uma determinada funcionalidade ◦ Focado em tecnologias ◦ Arquiteto Cloud, Arquiteto Linux, Arquiteto Web, Arquiteto Java… • Arquiteto de Soluções (Solution Architect) ◦ Focado na entrega de uma determinada solução ◦ Generalista • Arquiteto Empresarial (Enterprise Architect) ◦ Nível estratégico ◦ Soluções para toda a empresas
mínimo de 7 a 9 anos de desenvolvimento) • Passar por vários projetos • Conhecimento sobre os fundamentos de software e computação • Participar de vários projetos • Estudar os clássicos da literatura • Conduzir vários projetos • Visão de negócio (saber como a empresa lucra dinheiro) • Aprender a se comunicar • Auxiliar vários projetos • Carreira em Psi (Ψ) • Eu já comentei a importância de ter experiência com projetos?
Conflitos de forças opostas • Quanto mais você sobe, mais você é cobrado • Mais reuniões • Falta de reconhecimento • Ajustar expectativas • Menor contato com o código • Reuniões • Dizer não • Pensar no que vai dar errado
sênior • Responsável por cuidar do que é importante num software. Seja lá o que isso signifique • Orienta os padrões e desenvolvimento • Alinha as necessidades de negócio com as técnicas • Comunica com as partes interessadas
Fowler • Design Patterns, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides • The Mythical Man Month, Fred Brooks • The Pragmatic Programmer, Andy Hunt e Dave Thomas • Software Architecture: The Hard Parts, Neial Ford • Introduction to Algorithms,Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein • Modern Operating Systems, Andrew S. Tanenbaum • The Art of Computer Programming, Donald Knuth • The Art of Unix Programming, Eric S. Raymond • Test-Driven Development, Kent Beck • Compilers: Principles, Techniques, and Tools, Ravi Sethi, Alfred Aho, Jeffrey Ullman, Monica S. Lam