Engenharia de Software II:
Principais aprendizados na matéria de engenharia de software.
• Arquitetura de software
Neste semestre, realizei atividades voltadas para a arquitetura cliente-servidor, onde pude revisar conceitos já aprendidos anteriormente e entender mais a respeito de sistemas distribuídos.
Também foi possível aprender mais acerca de conceitos como Clean Architecture e SOA, que são conceitos fundamentais quando se está falando de arquitetura e construção de softwares saudáveis e de fácil manutenibilidade.
Aprendemos sobre arquitetura de camadas, onde este padrão divide o sistema em clientes que fazem solicitações e respondem às solicitações. Padrão amplamente utilizado em aplicações web.
Fora as arquiteturas que citei, que foram as que mais marcaram para mim, também pude aprender e revisitar arquiteturas como: Arquitetura de Camadas, Arquitetura MVC (Model-View-Controller), Arquitetura de Microsserviços e o conceito de PUB/SUB (Publish-Subscribe).
• Concorrência e paralelismo
Estudamos a respeito de threadings no Python, aprendemos sobre paralelismo em aula e pudemos identificar exemplos na prática posteriormente com a criação de um chat utilizando socket, onde tivemos a oportunidade de construir junto com a professora uma aplicação a respeito do assunto.
• Socket
Colocamos em prática o conceito de sockets utilizando Python, com modelo de Stream Sockets onde utilizamos o protocolo TCP.
• P2P
Reforço também o aprendizado a respeito da arquitetura de rede P2P, que sempre foi um assunto que mantive distância por um tempo, colocamos em prática o desenvolvimento de aplicações em conjunto com a professora onde pudemos aprender tal conceito. É uma arquitetura de rede na qual todos os participantes (nós) têm direitos e deveres equivalentes. Ao invés de existir um servidor central que coordena e fornece serviços para os outros nós (como em um modelo cliente-servidor), cada nó em uma rede P2P pode atuar tanto como cliente quanto como servidor. Neste semestre foi possível entender o funcionamento a fundo de uma rede P2P.
Com o auxílio da professora Valéria, consegui desenvolver uma ferramenta de chat P2P simples responsável por troca de bytes convertidos em strings, consegui explorar a fundo o uso da ferramenta e pensar em diversos casos de uso no mundo real.
• Práticas de Gerência de Configuração na Indústria de Software
Pude entender mais a fundo o conceito de práticas de gerência de configuração, onde o principal aprendizado para mim foi entender como a indústria se adaptava antes de termos esse conceito bem definido e antes de termos acesso à práticas importantíssimas como CI/CD. Nas empresas onde atuei, sempre participei das etapa de publicação, mas não entendia alguns conceitos e a motivação por trás deles. Este foi um assunto fascinante, pude conversar com profissionais que já estão a mais tempo no mercado e tem experiências mais profundas.
Entendi que um dos maiores problemas numa empresa é a escala, seja de desenvolvedores, seja de clientes e tudo isso está interligado, já que essas práticas auxiliam na segurança, atingir largas escalas e garantir que processos e etapas sejam respeitadas.
• Considerações finais
Considero o aprendizado da matéria de Engenharia de Software II um sucesso. Consegui além de revisar conceitos, entender outros que tinha interesse em aprender mas não via motivação. Deixo um agradecimento especial à professora Valéria por disseminar conhecimento com tanto entusiasmo e por fazer parte do meu crescimento profissional e acadêmico.