Executando verificação de segurança...
21
mpoda
5 min de leitura ·

⚙️ Arquitetura de Software: O início

Capa do post

Olá meus queridos(as) devs!

Sejam bem-vindos ao primeiro artigo de uma série de outros que vou estar começando a publicar, neles vou estar abrangendo diversos assuntos de arquitetura, desde os fundamentos, até os modelos, padrões e etc!

Mas esse aqui será o ponto de partida, nele quero falar alguns tópicos.

Você rapidamente irá aprender:

  • Quais são os tipos de arquitetos?;
  • O que é a arquitetura de software?;
  • Qual é o papel de um arquiteto de software?;

Vamos começar 🔥


Quais são os tipos de arquitetos?

Por incrível que pareça, dentro do mundo de TI, temos vários tipos de arquitetos, alguns próximos dos negócios, enquanto outros mais próximos do código.

Quero abordar os principais:

Quero abordar dos principais:

  • Arquiteto Corporativo
  • Arquiteto De Soluções
  • Arquiteto de Software
  • Arquiteto Tecnológico

Arquiteto Corporativo

Esse arquiteto tem como foco a área de organização e governança da empresa que desenvolverá determinado software. Seus principais papéis são:

  • Compreender o mercado e as inovações;
  • Organizar as tecnologias que a empresa utilizará na criação do software;
  • Definir a cultura que os times de desenvolvimento irão adotar;
  • Entender os custos e valores relacionados às equipes e tecnologias;
  • Possuir conhecimento técnico, embora seu trabalho esteja mais voltado para o negócio.

Arquiteto de Soluções

O arquiteto de soluções atua como intermediário entre os setores de negócio e software, desempenhando as seguintes funções:

  • Transformar os requisitos de negócio em uma solução de software;
  • Compreender as tecnologias já utilizadas pela empresa e determinar a necessidade de adoção de novas tecnologias para a criação do software;
  • Implementar tecnologias de acordo com o problema apresentado;
  • Ter visão do negócio e considerar suas particularidades;
  • Expressar a solução arquitetural por meio de desenhos e diagramas.

Arquiteto de Software

O arquiteto de software trabalha mais diretamente com as equipes de desenvolvimento e desempenha os seguintes papéis:

  • Compreender os recursos do time e identificar as tecnologias com as quais o time está familiarizado;
  • Projetar o modelo, padrão e boas práticas que o time de desenvolvimento deverá seguir;
  • Manter sempre a visão de que o desenho do software deve priorizar a evolução e a escalabilidade;
  • Garantir que o código escrito e as decisões tomadas estejam em conformidade com os padrões estabelecidos;
  • Auxiliar o time em uma visão macro e micro do projeto de software.

Arquiteto Tecnológico

São especialistas em uma ou mais tecnologias específicas, possuindo amplo conhecimento sobre elas e sabendo indicar a melhor escolha para resolver determinados problemas.

Por exemplo, podemos ter um Arquiteto Tecnológico especializado em Microsoft Azure, que deverá possuir amplo conhecimento das ferramentas desse serviço, a fim de orientar seu uso na solução de determinados problemas. Da mesma forma, podem existir Arquitetos Java, Arquitetos de banco de dados, entre outros.

Ilustração resumida dos tipos:

Ilustração dos tipos de arquitetura


O que é arquitetura de software?

Arquitetura de software são as coisas importantes de um software. O que quer que isso seja. - Ralph Johnson

Gosto de começar a sintetizar o que é arquitetura de software, com essa frase incrível.

A definição concreta, foi estabelecida pela IEEE Standard 1471, que traz um acordo sobre o que é o conceito:

Arquitetura de software pode ser definida como a organização fundamental de um sistema, seus componentes, as relações entre eles e o ambiente que guia seu design e evolução.

Resumidamente, a arquitetura não é necessariamente um cargo, é um conhecimento que faz parte da engenharia de software.

Com este conhecimento, construímos um software que oferece soluções para o negócio, trabalhando com atributos de qualidade e preparado para a evolução.

Além disso, a arquitetura se preocupa em componentizar o software, atribuindo responsabilidades de forma clara e estabelecendo bons relacionamentos entre eles.


Quais são os papéis da arquitetura de software?

papeis da arquitetura de software

O papél de uma boa arquietura de software é:

  1. Entender o negócio e a motivação por trás da criação de determinado software;
  2. Com base nesse entendimento, definir os atributos de qualidade (testes, segurança, UX/UI, custo, servidor etc.);
  3. Desenhar uma solução que seja viável para o time, levando em consideração as habilidades e competências da equipe, não se limitando apenas a selecionar o que há de melhor no mercado;
  4. Auxiliar o time de desenvolvimento a adotar boas práticas no processo de design (SOLID, Design Patterns, paradigmas etc.);
  5. Manter o ciclo de desenvolvimento organizado para garantir a governança e a evolução do software.

O quinto item é, em minha opinião, um dos mais importantes. Não basta criar uma arquitetura bem estruturada, com ótimas práticas para escalabilidade e resiliência, se, ao longo do tempo, tudo se tornar desorganizado e caótico. É essencial governar e defender a arquitetura selecionada.

O responsável por manter a ordem normalmente se baseia em atividades como Code Review, uso de ferramentas de automação no processo de CI/CD, entre outras.

O arquiteto de software é, idealmente, um orquestrador. Ele garante que todas as partes interessadas sejam ouvidas e suas ponderações sejam levadas em conta na formulação da arquitetura. Para isso, elabora e mantém artefatos abrangentes que facilitam o engajamento. - Elemar Jr.


Conclusão

Normalmente, confundimos arquitetura de software com um cargo, e embora ele possa ser, nunca deixará de ser um conhecimento e um conjunto de práticas. Podemos encontrar diversos cargos, como Tech Leads, desenvolvedores seniores, gerentes técnicos, entre outros, que são responsáveis por desempenhar esses papéis.

Além disso, a arquitetura de software é parte integrante da engenharia de software. Não devemos depender unicamente de uma única pessoa para tomar decisões importantes; esse processo precisa ser executado em equipe, pois é assim que podemos ter ideias melhores e refinar o melhor caminho para a entrega de um bom software.

Nos próximos artigos, vou explorar esses conceitos em detalhes e espero contar com a participação de vocês, meus caros leitores!


Me acompanhe em minhas redes sociais.

Obrigado pelo seu tempo!

Compartilhem com seus colegas de estudo/trabalho.
Me chama nas redes sociais a baixo para trocarmos uma ideia e tirar dúvidas:

Até a próxima!

Carregando publicação patrocinada...
3

Adorei este conteúdo, especialmente sendo alguém que está começando no universo do desenvolvimento. Artigos como este tornam conceitos técnicos, que às vezes parecem distantes ou muito abstratos, em algo mais tangível e compreensível. Isso é particularmente importante quando muitos de nós, iniciantes, estamos focados em desenvolver habilidades práticas e, às vezes, esquecemos de dedicar tempo para adquirir conhecimentos que nos dão uma compreensão mais profunda e respostas para o porquê de certas práticas.

Para os próximos artigos, seria interessante aprofundar os benefícios que uma arquitetura adequada pode trazer para uma equipe e para um software. Estou ansioso para ler seus próximos artigos!!!

1

Fala meu xará!

Muito obrigado pelo seu tempo e feedback!
Anotei aqui, realmente é bem legal entender os benefícios, até mesmo para começar a pensar de forma consciente em escolhas gerais para a construção de um software.

Vlw!

2
1

Fala amlsmm!

Nem sempre, o cargo tech lead muda muito de empresa para empresa, de time para time.

Hoje no meu trabalho, meu tech lead entende de tecnologia, mas está longe de ser especialista, mas ele conhece muito do negócio e produtos que a empresa já possui, ajudando a liderar e entender as soluções novas, ou de correções.

Tem uma ótima apresentação da Jakeliny, da Rocketseat que trata sobre o que é um tech lead: https://www.youtube.com/watch?v=vatij9JIALE&t=4350s

2
1
2
0
2

Muito bom conteúdo. Gostei bastante da distinção e tipos de arquiteto. O que eu vejo nas empresas são os cargos de Arquiteto Corporativo e Arquiteto De Soluções meio que juntos em uma coisa só, e normalmente sendo atribuídos a cargos relacionados a Gestão de Projetos.

1

Show andlucsil!

É isso ai, a realidade é que muitas empresas não possuem de fato o cargo, existem casos onde o gerente de tecnologia de um setor, é um arquiteto de solução ou corporativo!

Por isso um dos pontos mais importantes de estudar sobre arquitetura em geral, é entender o conceito, pois conhecendo eles, não importa seu cargo dentro de um projeto, vai te dar uma visão muito melhor sobre o macro e micro, além de te dar confiança de participar de discussões sobre determinadas soluções.

Obrigado pelo seu tempo!

2

Fico pensando se não existiria o Arquiteto de Dados que projeta e implementa a estrutura e a organização dos dados de uma organização de forma a garantir que eles sejam coletados, armazenados, processados e acessados de maneira eficiente, segura e confiável.
Que tenha conhecimento em várias tecnologias de SGBDs e não seria apenas um arquiteto de banco de dados específico e sim se importa e cuida da informação que vai ser trabalhada.

1

Fala leosbrito!

Existe sim!
Normalmente eles fazem parte dos Arquitetos Tecnológicos, mesmo tendo conhecimento de várias bases de dados, não necessariamente precisam ser especialistas em Oracle e etc.
Existe também uma vertente em que eles atuam junto com os Arquitetos de Solução, para apoiar na decisão da melhor escolha de tecnologia e processos.

Obrigado pelo seu tempo!

2

Parabens pelo artigo e pela iniciativa de escrever sobre um assunto com muitas interpretações.
Espero que fale sobre os outros arquitetos tambem.

1

Fala AlmirJr!

Obrigado pelo feedback!
Estou cada vez mais me aprofundando para trazer um conteúdo objetivo, principalmente que é um oceando de interpretações.

Vou dar sim uma passada, principalmente sobre Arquiteto de Solução, que é meu foco atual de carreira.

2

Ótimo conteúdo, eu sou estudante de engenharia de software, e esses conceitos fazem muita diferença para aqueles que estão começando, além de ajudar em ver qual tipo de engenheiro você pode trabalhar.

1
1

Além do Elemar Junior que você citou em outro comentário, há outros conteúdos que você recomenda para estudo de Arquitetura de Software?

2

Fala Pherris!

Tem sim, grande parte dos conteúdos que consumo para meu estudo de arquitetura vem de livros, vou colocar os que estou lendo no momento:

  • Fundamentals of Software Architecture: An Engineering Approach - por Mark Richards e Neal Ford (Autor); -> Estou lendo.
  • Software Engineering at Google: Lessons Learned from Programming Over Time - por Titus Winters, Tom Manshreck, Hyrum Wright. -> Ta na fila.
  • Clean Architecture - por Robert C. Martin -> Estou lendo.
  • Software Architecture in Practice - Len Bass, Dr Paul Clements e Rick Kazman -> Ta na fila
1
0
1

Parabens por este artigo. E eu gostaria de adicionar mais algumas coisas:

🏢 Arquitetura Monolítica:

A arquitetura monolítica é como um grande prédio único que abriga todas as funcionalidades do software em um único bloco. Isso torna o desenvolvimento e a manutenção iniciais mais simples e diretos, já que tudo está integrado em um só lugar. No entanto, à medida que o sistema cresce, ele pode enfrentar desafios de escalabilidade e flexibilidade, pois mudanças em uma parte do sistema podem afetar outras áreas.

🚀 Arquitetura de Microsserviços:

Aqui, o software é dividido em pequenos serviços independentes, cada um dedicado a uma funcionalidade específica, como módulos de uma espaçonave espacial! Esses microsserviços são como naves autônomas que podem ser implantadas e escaladas independentemente, proporcionando maior agilidade e facilitando a manutenção de sistemas complexos. É como montar uma nave estelar com peças modulares, tornando-a mais fácil de expandir e atualizar!

🍰 Arquitetura em Camadas:

Imagina um delicioso bolo com várias camadas! Essa abordagem organiza o software em camadas distintas, onde cada camada é responsável por funções específicas, como uma camada de recheio, outra de cobertura, e assim por diante. Essas camadas estão interconectadas e se comunicam através de interfaces bem definidas, assim como as camadas de um bolo estão perfeitamente organizadas. Isso facilita a manutenção, a escalabilidade e a reutilização de componentes, criando uma experiência saborosa no desenvolvimento!

🔗 Arquitetura Orientada a Serviços (SOA):

Aqui, os serviços são como peças de LEGO que podem ser combinadas para construir coisas incríveis! A arquitetura orientada a serviços oferece componentes independentes que podem ser reutilizados e combinados para criar aplicativos mais complexos. É como montar um robô LEGO com diferentes peças, onde cada peça é um serviço que se conecta a outras para realizar tarefas diversas. Essa abordagem promove a interoperabilidade entre sistemas heterogêneos, permitindo criar soluções versáteis e personalizadas.

🎉 Arquitetura em Event-Driven:

Imagine uma emocionante festa em que cada ação gera uma reação! Nesse estilo, o fluxo de dados é baseado em eventos, onde os componentes do sistema reagem a eventos que ocorrem, assim como os convidados da festa interagem uns com os outros. Isso permite sistemas altamente assíncronos e escaláveis, ideais para cenários com grande volume de dados e processamento. É como uma festa animada e dinâmica, onde todos os convidados estão sempre envolvidos!

0