Dicas básicas de como desenvolver software
Published: 2024-01-26 21:05:32

Introdução ao Desenvolvimento de Software com Rafael Levi

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gqexre3t0vxn3tihoxn6.png)
*O Ponto de Partida: Código Fonte e Categorias de Software*
No mundo do desenvolvimento de software, tudo começa com o código fonte. Ele é a base sobre a qual toda a estrutura do software é construída. Entender o modelo de negócio é crucial para determinar a categoria do software, seja ele um sistema bancário, um ERP ou qualquer outro tipo. Esta etapa inicial é fundamental para direcionar as decisões futuras e estruturar o desenvolvimento de forma alinhada às necessidades específicas do projeto.

*Modelo de negócio e categoria de software:*
Normalmente quando o desenvolvedor inicia a carreira de desenvolvimento de software, ele começa a desenvolver em um projeto e assim se torna essencial e necessário que você identifique qual tipo de software está sendo desenvolvido, do ponto de vista de negócio. Baseado no tipo de software é interessante que você pesquise sobre quais tipos de funcionalidades normalmente existem nessa categoria de software.

Procure em softwares concorrentes, quais features cobrem o escopo da categoria de software. Isso fará total diferença em sua carreira como desenvolvedor ao longo prazo.

Sobre os modelos de negócio dos principais tipos de softwares como Fintechs, Edtechs, HealthTechs, sistemas de gestão empresarial como ERPs, CRMs, MarketPlaces, SaaS entre outros, serão abordados com mais detalhes em outros artigos e já estão disponíveis em vídeo no meu canal do Youtube, como por exemplo o vídeo intitutlado: Live 23 — Como montar uma arquitetura para HealthTechs?

Live 23 - Como montar uma arquitetura para HealthTechs?
Live 23 - Como montar uma arquitetura para HealthTechs?Descrição: Em qual contexto surgem as empresas de tecnologia…
www.youtube.com

*Ferramentas de documentação*

Caso o software ao qual você irá desenvolver possua uma documentação, leia e fique atento a como se deu a evolução e lançamento de features do projeto, seja usando o release notes no Github, acompanhando um versionamento, um dicionário de dados, documentação de API no Postman ou Swagger, Design de telas no Figma ou Adobe XD, modelagem de banco de dados ERD, modelagem UML, documento de análise de requisitos, diagramas com regras de negócio em um Miro, documentação no Confluence e em último caso, não havendo nenhum tipo de documentação mais precisa, você pode até olhar o histórico de pull requests para entender e até ajudar a criar uma documentação do projeto, além de em alguns casos poder usar também o histórico de tasks e sprints feitos no Jira.

Sobre essas ferramentas escreverei outros artigos e farei outros vídeos detalhando o uso de um desenvolvedor sobre cada uma dessas ferramentas em breve.

*Escolhendo a Stack Tecnológica*

A escolha da stack tecnológica é um passo crítico no desenvolvimento de software. Ela é composta pelo conjunto de tecnologias que serão utilizadas no projeto, incluindo linguagens de programação, frameworks e ferramentas. Cada stack tem suas peculiaridades e é escolhida com base nos requisitos do projeto e nas habilidades da equipe. Php, Golang, Javascript e Python são exemplos de tecnologias comuns, cada uma adequada a diferentes tipos de projetos e necessidades.

É importante que o desenvolvedor no início da sua carreira tenha sólidos conhecimentos em Algoritmos, Estrutura de dados, orientação a objetos, em alguns casos conhecimento da base matemática de lógica para computação, matemática discreta e análise de complexidade de algoritmos. Isso dará ao desenvolvedor ferramentas teóricas para compreender em alguns casos a resolução de problemas através de código. Acredito que no início de carreira é importante o desenvolvedor focar mais nos conceitos e princípios do que na tecnologia em si.

Normalmente quando o desenvolvedor entra em um projeto o mais coum de acontecer é que ele já entre em um projeto com uma stack pré-definida então além da base de conhecimento acadêmico e teórico, é necessário alguma experiência prática e compreensão técnica do uso da linguagem de programação ao qual irá trabalhar. Para isso existem diversos livros sobre tecnologias específicas, vídeos na internet, comunidades, ferramentas web de aprendizagem baseada em desafios e tarefas usando determinada tecnologia.

Para cada uma das tecnologias citadas acima eu pretendo produzir um artigo e vídeos tratando de detalhes de cada uma. Para o passo seguinte, o que será necessário é que o desenvolvedor entenda e escolha entre tecnologias de front ou back-end.

Sobre Python eu possuo alguns vídeos em meu canal, por exemplo o intitulado: Live 30 — Programação em Python e Orientação a Objetos — pt.1

Live 30 - Programação em Python e Orientação a Objetos - pt.1
Live 30 - Programação em Python e Orientação a Objetos - Parte 1hoje 14/dez (quinta) ás 17:30Descrição: Base de…
www.youtube.com

*Papéis no Desenvolvimento: Back-end, Front-end, e Full-stack*

No desenvolvimento de software, existem diferentes especializações: back-end, focado no servidor e na lógica do negócio; front-end, voltado para a interface e experiência do usuário; e full-stack, que combina ambos. Um desenvolvedor full-stack, embora versátil, geralmente tem uma inclinação para back-end ou front-end, especializando-se em uma área enquanto mantém conhecimentos funcionais na outra.

Exemplos de stacks combinadas com o segmento de desenvolvimento back-end é por exemplo o uso de linguagens de programação combinadas com frameworks web como: Python e Flask, Python e Django, NodeJs e AdonisJS (Javascript), NodeJs e NestJS (Javascript), Php e Laravel, Golang e Gin ou Golang e Fiber. Enquanto no front-end temos: ReactJS (Javascript) ou VueJS (Javascript), Flutter (Kotlin). Essas não são as únicas opções e ainda estão segmentadas dentro do escopo de desenvolvimento Web, mas são as stacks ao qual eu possuo algum conhecimento e que posso ajudar no seu desenvolvimento.

No meu caso eu sou um desenvolvedor Full-Stack Back-end First, o que significa que meu ponto forte de maior experiência está no back-end e cabe a você, desenvolvedor inciante descobrir ao longo da sua jornada como dev, qual segmento irá tomar para si em sua carreira.

*A Jornada de um Desenvolvedor Full-Stack: Back-end First*

Como um desenvolvedor full-stack com foco em back-end, é importante ter um forte entendimento dos processos do servidor e da infraestrutura, além de uma sólida habilidade em linguagens de programação pertinentes. Ferramentas como React Native e Flutter para apps, e React JS e VueJS para front-end, são essenciais para a parte do front-end, tendo mais profundidade em tecnologias como Php, Python, JS ou Golang para o back-end. Esta jornada é marcada pela constante atualização e adaptação às novas tecnologias.

O conhecimento que você adquiriu nos conceitos teóricos e acadêmicos, além de conhecimentos de arquitetura e engenharia de software serão aplicados aqui com mais profundidade na parte do back-end, logo nesse ponto você já deve saber as limitações e propriedades de cada uma das tecnologias que escolheu para ter como ponto forte.

No meu caso, eu comecei no mundo de tecnologia com o uso de ferramentas da área de infraestrutura como por exemplo AWS (Amazon Web Services) como Cloud e assim me desenvolvi conjuntamente nos conceitos, tecnologias e ferramentas de back-end. Nessa jornada você irá lidar com banco de dados que normalmente se começa com os da categoria SQL e posteriormente os bancos não estruturados como Redis, DynamoDB, MongoDB, entre outros.

Além dos conhecimentos e habilidades com banco de dados, infraestrutura cloud é necessário o entendimento de como funciona um projeto Web (no meu caso que decedi seguir esse caminho de categoria de software), assim como seus protocolos HTTP, verbos HTTP e arquitetura e estrutura base de um projeto web como por exemplo uma API, Websocket, entre outros tipos de aplicações web.

Para me aprimorar nas tecnologias e linguagens de programação foi essencial em minha jornada a participação em comunidades de tecnologia.

Engajamento com Comunidades de Tecnologia
Participar de comunidades de tecnologia é vital para o crescimento contínuo e aprendizado. Essas comunidades oferecem um espaço para compartilhar conhecimento, resolver dúvidas e manter-se atualizado com as últimas tendências e práticas. Durante minha caminhada no mundo da tecnologia eu criei referências e líderes nestas comunidades, como Pokemaobr para Php, Dunossauro para Python, ou Fábio Akita para Ruby on Rails, lembrando que essas pessoas não representam a comunidade da linguagem de programação, mas servem como guias valiosos nesse ecossistema em constante evolução ao qual vocês podem procurar para ter acesso às comunidades.

Armazenando e Gerenciando Código Fonte
A escolha de uma plataforma para armazenar e gerenciar o código fonte é essencial. Serviços como GitLab, GitHub e Bitbucket oferecem não apenas hospedagem de código, mas também ferramentas para revisão, colaboração e versionamento. Além disso, entender CI/CD e as práticas de deploy é crucial para um ciclo de desenvolvimento eficiente e contínuo, garantindo que as atualizações possam ser entregues rapidamente, minimizando os erros.

O Git é a engine base para essas ferramentas e você deve escolher uma das ferramentas citadas acima para começar a armazenar seu código fonte, manter um portfolio de projetos e treinar para o uso profissionalmente no dia a dia do seu trabalho como desenvolvedor. Dominar essas ferramentas é essencial para seu processo de aprendizagem e trivial para sua rotina de trabalho como desenvolvedor.

Sobre Gitflow eu possuo um vídeo intulado: Live 18 — O que um dev precisa saber sobre Gitflow?

Live 18 - O que um dev precisa saber sobre Gitflow?
Live 18 - O que um dev precisa saber sobre Gitflow?Descrição: Como organizar um projeto de código fonte no Git, como…
www.youtube.com

*Ferramentas e Serviços em Infraestrutura e DevOps*

A infraestrutura e DevOps são fundamentais para a entrega e manutenção eficaz do software. Ferramentas como ArgoCD, Jenkins e Spinnaker automatizam o processo de deploy, enquanto soluções de armazenamento de artefatos como Harbor e Docker Hub ajudam na gestão e distribuição de builds. Compreender e implementar essas ferramentas garante um ciclo de desenvolvimento mais ágil e confiável.

O desenvolvedor não necessariamente precisa dominar o processo de infraestrutura e Devops, mas é necessário ao menos conseguir utilizar dos recursos disponibilizados por um time de Devops. No meu caso eu tenho a minha base de formação de tecnologia na infraestrutura e isso facilita minha vida quando eu preciso subir minhas aplicações em um ambiente.

O mínimo que um desenvolvedor precisa saber é como usar um pipeline, containerizar uma aplicação com Docker, gerar arquivos de builds para produção, gerenciar dados sensíveis como variáveis de ambientes com credenciais da aplicação, utilizar serviços de nuvem como na AWS para armazenar arquivos estáticos da sua aplicação usando um bucket S3 por exemplo, utilizar serviços de filas e mensageria como Kafka, RabbitMQ, SQS, entre outros.

Sobre o tema Devops eu possuo um vídeo intitulado: Live 5 — O que você precisa saber para ser um Devops Engineer

https://youtu.be/ItTVyXZVKIs

*O Mundo da Cloud e Serviços Associados*

A computação em nuvem revolucionou a forma como os softwares são hospedados e gerenciados, oferecendo escalabilidade e eficiência. Serviços como AWS e Google Cloud proporcionam uma vasta gama de ferramentas, desde gerenciamento de DNS com Route53 até sistemas de filas para micro-serviços. Navegar por esse mundo é essencial para arquitetar soluções modernas e eficazes.

A partir do momento em que um desenvolvedor pretende escalar em sua carreira, os próximos passos são aprender a integrar sua aplicação a serviços de Cloud.

*Ambientes e teste automatizados*

Dessa forma ele poderá entender os estágios de desenvolvimento de um software, como segmentação de ambiente como Dev, staging, Homologação, produção.

A aplicação passa por etapas de desenvolvimento e durante essas etapas ela é testada através dos testes automatizados, usando conceitos como TDD e a maioria desses testes é rodado de forma automatizada, usando bibliotecas como em Python temos o Pytest, em Javascript o Jest, entre outras ferramentas que podemos utilizar para diversos tipos de testes como testes unitários, de carga, de segurança, de integração e end-to-end.

Sobre testes automatizados eu possuo um vídeo intulado: Live 21 — Como fazer testes automatizados na sua aplicação?

Live 21 - Como fazer testes automatizados na sua aplicação?
Live 21 - Como fazer testes automatizados na sua aplicação?Descrição: Pirâmide de testes com testes unitários, de…
www.youtube.com

*Estratégias de Deploy e Gestão de Containers*

O deploy e a gestão de containers são etapas críticas na entrega de software. Escolher a plataforma correta, seja um servidor virtual ou um gestor de containers como ECS ou Kubernetes, impacta diretamente na performance e acessibilidade da aplicação. Essas estratégias definem como e onde a aplicação será executada, garantindo que ela esteja acessível e estável.

Normalmente nesse nível apenas os mais experientes do projeto colaboram e ajudam a definir as estratégias de deploy, sendo que estou já presupondo que será utilizado uma ferramenta de container para a aplicação, encapsulando assim a camada de infraestrutura. O ideal é que nessa etapa o time tenha uma pessoa especializada em infraestrutura ou Devops, para que sejam tomadas decisões alinhadas com as estratégias de negócio e custos, além da técnica.

*Gerenciamento de Tarefas e Comunicação em TI*

Um sistema eficaz de gerenciamento de tarefas e comunicação é vital para qualquer equipe de TI. Ferramentas como Jira, Bitrix e Trello ajudam a organizar e priorizar o trabalho, enquanto metodologias ágeis como Scrum orientam o processo de desenvolvimento. Uma comunicação clara e eficiente, facilitada por plataformas como Slack, Google Chats, ou Microsoft Teams, é fundamental para a colaboração e sucesso do projeto.

O desenvolvedor irá no seu dia a dia ter que operar ferramentas de gestão de TI para poder controlar as tarefas que serão feitas na Sprint, os pontos de complexidade (SCRUM points) de cada tarefa que será definido no rito de planning meet, provavelmente jogando um planning Poker e caso tenha um trabalho remoto, irá utilizar uma das ferramentas de comunicação empresarial citadas acima, o ideal é que isso não seja uma barreira para sua contratação, logo é ideal que você entenda e aprenda como utilizar essas ferramentas e como a metodologia SCRUM funciona.

Sobre o SCRUM e gestão de TI eu possuo um vídeo intitulado: Live 6 — O que um dev precisa saber sobre SCRUM?

https://youtu.be/Kl2OywbhB8Q

*Conclusão: O Caminho do Desenvolvedor*
O caminho do desenvolvedor é uma jornada contínua de aprendizado e adaptação. Escolher especializar-se em uma área, seja infraestrutura, back-end, front-end ou full-stack, é apenas o início. Com a evolução constante da tecnologia, manter-se atualizado e engajado com a comunidade é essencial para o crescimento profissional e a entrega de soluções de software eficazes e inovadoras.

Para sua jornada na carreira de tecnologia e desenvolvimento de software, eu recomendo que encontrem um tutor, que de preferência seja alguém disponível na comunidade de tecnologia a ajudar e orientar novos devs em suas carreiras.