Como melhorar como Desenvolvedor(a) ?
Este post vai para meus amigos e amigas que também fazem parte dessa vida de bits e passar café umas 3x por dia, no mínimo!
Se você quer melhorar como profissional nessa área, aqui vão algumas dicas que ao longo do tempo eu fui anotando e aprendendo sobre como evoluir na área de desenvolvimento/programação:
Escolher quais são as suas ferramentas favoritas, as suas linguagens "mãe" é extremamente importante. É melhor ser especialista em uma pilha de tecnologias do que saber um pouco sobre várias, no final, acaba que você não sabe "nada sobre nada". Escolha qual a sua linguagem favorita para utilizar no seu FrontEnd, qual você se sente mais a vontade de desenvolver seu BackEnd, qual a sua tecnologia favorita para desenvolvimento Mobile, seus ORMs, SGBDs e por aí vai... Isso fará com que você seja focado e se torne especialista em resolver problemas/desenvolver e não preocupar com tecnologia. Escolha aquela que você se sinta a vontade, tenha prazer em desenvolver e que esteja alinhada com seus objetivos!. Existem outros fatores importantes a serem analisados na hora de escolher uma Stack, como: Entender qual Stack o mercado está procurando hoje; Quais e quantas empresas estão utilizando a Stack; A quantidade de vagas disponíveis no mercado; Qual o tamanho da comunidade e do ecossistema em torno dessas tecnologias; Quem está por trás do desenvolvimento delas e quais são os casos de usos dessas tecnologias; Além de vantagens técnicas como componentização, performance, multi-plataforma, entre otras...
Depender somente de cursos, professores, vídeo-aulas... não fará com que você se torne especialista! Use sua criatividade! Aprenda a buscar soluções. Leia as documentações oficiais, leia bons livros, tente solucionar antes de ir direto para sites como StackOverflow encontrar a resposta pronta, se desafie e sinta o prazer em solucionar/criar utilizando sua própria criatividade.
Não tem como fugir!!! A maioria das documentações, livros, vídeo-aulas... os melhores materiais estarão em Inglês! Além de toda a sintaxe das linguagens em si. Se você não se tornar fluente em leitura e escrita será muito mais difícil o seu caminho nessa jornada. Pratique programar em inglês, criar suas variáveis e métodos (utilizando Clean Code, óbvio!) em Inglês. Isso fara com que você aprenda bastante também. Muitas traduções de materiais não serão bem feitas e muitas vezes demoram muito para serem traduzidas na sua linguagem, você não quer perder tempo esperando tradução, certo? Nem deveria mesmo! Além disso, os projetos profissionais e Open Source, além de Issues e discussões estarão em Inglês! Como eu disse no início, não tem como fugir.
Aprenda a "Dividir Para Conquistar"
Esse é o princípio básico que todo programador deve se lembrar sempre! Transformar grandes problemas em pequenos problemas e solucioná-los, consequentemente trará a solução do problema gigante que você recebeu para resolver. Além de tornar o seu código bem dividido e cada função/módulo/classe... com sua responsabilidade bem definida. Facilitando não só a leitura e o conserto de bugs, como também a criação dos módulos de testes para cada cada um deles!
Goste de Resolver Problemas
Desafios de Programação, Sites de Desafios, Desafios de Maratona, Testes de empresas grandes como a Google, Pegue problemas do seu cotidiano e crie algoritmos para solucioná-los, como algoritmo para o seu controle financeiro, por exemplo... existem várias formas de você resolver problemas sem necessariamente criar um projeto, isso fará com que você pratique muito e se torne um especialista em soluções através dos códigos.
Aprenda a Versionar Código
Aprender a utilizar versionadores de código como o Git e o SVN deveria ser obrigatório todo desenvolvedor desde o início quando ele está aprendendo seu primeiro 'Hello World'. Você não consegue trabalhar com uma equipe de desenvolvedores sem versionar o seu código, criar features (branchs), além de ser muito mais seguro para você fazer as suas alterações e voltar para versões anteriores caso sua feature não seja a melhor solução.
Leia Documentações Oficiais
Aquele tutorial rápido de um site ou aquele vídeo de 5 minutos para aprender alguma coisa, muitas vezes são práticos, porém, não fará com que você entenda perfeitamente como utilizar o que você está precisando. Pegue o hábito de lêr documentações oficiais, fazendo isso, será sua primeira opção na hora de aprender qualquer coisa e, com certeza, é a melhor opção.
Leia Códigos de Outros Desenvolvedores
Principalmente códigos de programadores que possuem mais experiência que você! Isso lhe trará um aprendizado GIGANTE, além de você enxergar padrões e técnicas que provavelmente você não conhece. Todas as vezes que eu li algum código de um desenvolvedor mais experiênte, eu refatorei vários códigos de projetos pessoais que eu havia feito e nunca mais esqueci a necessidade de utilizar isso ou aquilo no código.
Aprenda Testes Automatizados (TDD)
Aprender a desenvolver o módulo de teste antes do módulo principal é viciante! Acredite!!! Essa é a melhor forma de evitar bugs e te deixar seguro que erros não irão ocorrer, além de lhe fazer pensar nos possíveis bugs de forma mais clara, tornando seu algoritmo muito mais sólido. Outra vantagem dos testes automatizados é facilitar para outro desenvolvedor ou equipe visualizar quais erros foram evitados/testados e não irão ocorrer no seu código e, inclusive, acrescentar novos testes na bateria de testes.
Seja um Desenvolvedor Ativo "Apareça"
Participe de Comunidades, Meetups, Eventos, Maratonas, se possível dê palestras... seja um desenvolvedor ativo, faça bastante Networking. Isso será um diferencial enorme na sua carreira, você irá aprender bastante nos eventos e comunidades, irá ajudar diversas pessoas, conhecer outros desenvolvedores que você pode compartilhar ideias e aprender muito, além de poder ser indicado para alguma vaga de emprego muito boa devido a tantas pessoas que você conheceu e eventos que participou.
Aprenda Padrões de Projetos
Clean Code, S.O.L.I.D, Design Patters como Adapter, Observer, Factory, Object Literals, Strategy... todos esses padrões irá tornar seu código de muito alto nível, além de todos os projetos pofissionais e empresas utilizarem dos mesmos, fazendo com que seja fácil você compreender os códigos e principalmente bons desenvolvedores compreenderem seu código. Nem preciso citar do tanto que irá facilitar a sua vida na hora de resolver problemas, afinal, os padrões servem basicamente para isso!
Crie / Contribua com Projetos Open Source
Talvez a melhor forma de aprender muito com outros desenvolvedores seja contribuindo com projetos Open Source. Além de você estar ajudando em alguma causa, você irá aprender muito e seguir regras/padrões de desenvolvimento muitas vezes superiores a regras de algumas empresas. Caso você não tenha confiança para contribuir com códigos, você pode contribuir nem que seja com a documentação, reportando bugs, pensando em novas features... existem várias formas de você contribuir, não sendo necessariamente com o código em si. De qualquer forma será um aprendizado enorme. Uma dica: Use bastante o GitHub.
A Melhor Forma de Aprender é Ensinando
A primeira vez que eu ouvi essa frase, me fez pensar bastante sobre o significado dela e depois de ver uma apresentação do BrazilJS, essa frase fez muito mais sentido. Quando você ensina alguém você fixa bastante o conteúdo e melhora muito seu aprendizado, além disso lhe fazer correr atrás de pesquisar sobre o conteúdo com muito mais maestria e ensinar da melhor forma possível, consequentemente aprendendo muito mais sobre o assunto. Ao mesmo tempo que você ajuda alguém, você aprende mais! É justo não é? Ensine as pessoas que pedem ajuda nas comunidades, faça tutoriais pra você mesmo, escreva bastante sobre um assunto, ajude um amigo... existem várias formas de aprender ensinando. =)
De todas as formas de melhorar como desenvolvedor, obviamente essa é a melhor forma. A prática leva a perfeição e na programação isso é muito verdade! Pegue o hábito de programar todos os dias, crie projetos grandes e pequenos projetos para que você tenha muito trabalho (código) para fazer. Além de criar um portifólio grande, você irá desenvolver com muita facilidade.