O que você precisa saber para ser um desenvolvedor de software

Publicado em

Desenvolvedor de Software

Anteontem recebi uma pergunta simples:

“O que preciso fazer para iniciar e crescer na carreira de desenvolvedor web?”

A resposta direta é fácil: estudar, treinar e aprender com as experiências. Na ânsia de zerar minha caixa de emails, foi o que pensei em responder.

Mas a pergunta é boa, e se você começar a dissecar um pouco a ideia, percebe que, embora a resposta direta não esteja errada, existem alguns pontos que serão mais estressados ao longo da carreira, e se você puder fortalecer esses pontos, isso ajudará não só a sua entrada e estabilização no mercado, mas também servirá como base quando você já for experiente.

Por isso compensa expandir um pouco a resposta inicial:

Linguagem e framework

Desenvolvedor de Software

Escolha uma linguagem que você goste ou se sinta minimamente confortável. Em caso de dúvida, veja como está o mercado das linguagens e tente ir afunilando para qual faz mais sentido para você baseado em seus gostos (“prefere compilada ou interpretada?” e “fortemente tipada ou tipagem pato?” São perguntas que podem ajudar a decidir). Se o seu objetivo é aumentar a sua empregabilidade, busque linguagens mais difundidas e que contenham um bom número de vagas.

Tendo decidido a linguagem, veja qual é o framework web mais difundido dessa linguagem. Em Java temos o Spring, em Ruby temos o Rails, em Python temos o Django, e por aí vai. Você não precisa num primeiro momento se aprofundar no framework, mas conhecer como ele funciona e, principalmente, o vocabulário específico dele facilitará a sua comunicação com outros desenvolvedores e te ajudará a buscar respostas na internet.

Não economize tempo nesse passo. Se ao tentar resolver um problema você ficar esbarrando em falta de intimidade com a linguagem, compensa voltar para a prancheta e estudar o básico mais um pouco.

(você precisará aprender outros frameworks em sua carreira, mas aprender um de forma mais profunda facilitará quando você for aprender um novo)

Crud

Crud

Existem geradores de código, e ferramentas que automatizam a criação de cruds simples, mas no começo o ideal é você montar um de forma manual.

Crie uma aplicação simples que salve, atualize, consulte e apague dados em um banco de dados. Foque primeiro em bancos SQL e, embora seu framework tenha alguma abstração para facilitar a comunicação com o banco de dados, se familiarize com as consultas e comandos SQL. Não precisa se aprofundar, mas saiba fazer joins e tente entender o que faz uma consulta ser rápida e outra ser lenta.

Com o Crud feito e funcionando, veja o código e se há pontos de melhoria ou formas de simplificar o que você fez. Tente melhorar a leitura do seu código, e na medida do possível, deixar as coisas tão simples que não precisem de comentários.

Comunicação entre serviços

Webservice

Com a primeira aplicação feita, um bom segundo passo é criar uma segunda aplicação e fazer elas se comunicarem. Pense em algum caso de uso que aprofunde o crud (talvez salvar o ip de origem da requisição em uma tabela para dados históricos?) e tente implementá-lo em uma aplicação separada da primeira. Isso forçará você a pensar na interface entre suas duas aplicações, como organizar informação compartilhada e qual informação compartilhar entre os sistemas.

Aqui compensa dar uma olhada em conceitos RESTful, que irão ajudar você a pensar numa interface padronizada e um pouco mais voltada para o mercado de trabalho. Veja o que significa e quais partes você acha interessante aplicar(não serão todas).

Cache

Cache

Com as duas aplicações já funcionando, considere que as operações de consulta de uma das suas aplicações receberão muitas requisições. Isso gerará carga a mais, e você precisa pensar nos impactos que isso terá em sua arquitetura. Utilize alguma ferramenta de teste de carga (como apache ab, Jmeter e Gatling) para entender onde estão os pontos de stress que você precisa otimizar.

A solução padrão para esse tipo de problema é a implementação de um Cache. Estude o conceito e veja formas de aplicá-lo em seus sistemas.

Vale uma atenção especial para os problemas que surgem ao inserir um cache em sua arquitetura: Considere que você cacheou um usuário, e depois fez uma atualização no registro. Como fará para que o cache tome conhecimento de qual é a última versão?

Mensageria

Message Broker

Com a questão da leitura resolvida pelo cache, considere o próximo problema: suponha que agora as operações de escrita estão sendo muito utilizadas. Empregue novamente uma ferramenta de teste de carga para entender quais os sintomas e problemas que surgem dessa superutilização.

A solução mais difundida para isso é represar o processamento (o termo em inglês é throttling) para ser feito de forma assíncrona. Normalmente usamos algum sistema de mensageria para isso, como Rabbitmq ou Redis. A ideia é enfileirar as requisições para não sobrecarregar o seu sistema.

Novamente compensa analisar quais problemas surgiram por ter adicionado esse novo componente em sua arquitetura. Quais operações da sua aplicação podem ser executadas de forma assíncrona, e quais demandam execução imediata?

Próximos passos

Isso seria o básico para desenvolvedores web hoje. Aprofunde os temas descritos aqui e aumente o seu leque de ferramentas para resolver problemas. Eu dei algumas sugestões de implementações, mas não citei várias. Compensa dar uma olhada e procurar outros nomes difundidos no mercado. E, além do que já falei, compensa ver:

  1. Testes automatizados: sejam unitários, sejam de integração, sejam de componente… o importante é você entender o que são, para que servem e como implementá-los. Tente criar testes no que criou para ver quais problemas encontra.

  2. Ambiente com muitos nós: no cenário que descrevi acima, há apenas um nó de cada sistema. Considere que, no mundo real, você terá normalmente mais de um. Em que isso afeta o seu cache? Como isso afeta seu banco de dados?

  3. Inglês: não precisa ser fluente, mas saber inglês alavancará sua carreira. Boa parte das documentações será em inglês, e novas práticas e frameworks surgirão primeiro em inglês. Mais importante ainda: a maior parte das dúvidas que você tem já estão respondidas em inglês no stackoverflow. Exercite fazer a mesma pergunta em inglês e em português nos sites de busca e verá que é muito mais fácil achar respostas em inglês.

Abaixo deixo um exemplo de problema, caso você tenha dificuldades em imaginar um caso de uso para o crud.

Crud de clientes

Premissas:

  • Considere apenas a parte backend. Não é necessário desenvolver tela/formulário, apenas os endpoints REST
  • Um cliente é composto apenas por nome e idade
  • API aberta de geolocalização por IP https://www.ipvigilante.com/
  • API aberta de clima por geolocalização https://www.metaweather.com/api/
  • Quando executar a busca de clima por geolocalização, caso não exista a cidade específica de origem, utilize o resultado mais próximo.

Sua tarefa é desenvolver os serviços REST abaixo:

  • Criar um Cliente
  • Alterar um Cliente
  • Consultar um Cliente por id
  • Listar todos os Clientes salvos
  • Remover Cliente por id

Ao criar um cliente, apenas para fins estatísticos e históricos, busque qual a localização geográfica de quem executou a requisição, usando o IP de origem. Com a localização geográfica, consulte qual é a temperatura máxima e mínima do dia da requisição de criação no local do IP de origem. Salve essa informação e a associe ao cliente resultado da requisição de origem.

Tenha em mente que a consulta de Cliente por ID será altamente requisitada.

Boa sorte :-) Se tiver realizado esse exemplo de problema, pode me contatar por email para tirar dúvidas ou conversar sobre a solução.

Comentários

Sinto que os comentários em blogs têm diminuído com o passar do tempo. Se você tiver alguma dúvida ou quiser falar sobre o post, entre em contato comigo pelos links abaixo.