Imagem de capa do artigo O que aprender para ser um programador melhor?

O que aprender para ser um programador melhor?

Em nossos primeiros anos como programador(a), mais ou menos entre nosso segundo ano e o quinto, ou no primeiro e segundo emprego, achamos que já sabemos bastante e que não temos muito mais o que aprender. Ledo engano. Por já possuirmos certo domínio sobre uma determinada linguagem de programação acabamos cometendo o erro de achar que só isso já é o suficiente, porém a área de desenvolvimento de software é muito vasta. O desenvolvimento de software é uma ciência, existem décadas de muitos estudos, teorias, metodologias e técnicas.

Com o tempo vamos percebendo que não sabemos tanto assim como achávamos que sabíamos. Esse estado de consciência começa se formar ao passar dos anos quando começamos trabalhar com outros profissionais que realmente sabem mais, quando começamos assistir vídeos de programadores mais experientes, ou também, quando participamos de várias entrevistas técnicas no qual somos colocados à prova.

Eu mesmo, que comecei aprender programação em meados de 2010, percebo que antes eu não sabia tanto assim como eu achava, e agora quanto mais eu estudo mais eu vejo que realmente eu não sei muita coisa e que ainda tenho muito a aprender. Com base nisso resolvi escrever esse artigo para organizar e ter um norte do que aprender e estudar para ser um programador(a) melhor.

Vou separar em duas categorias as habilidades fundamentais que acredito serem essenciais para melhorar na programação, vou chamá-las de habilidades pessoais e habilidades técnicas. Vamos lá!

Habilidades pessoais

Para ser um programador(a) melhor não é necessário apenas conhecimentos técnicos, existem muitos conhecimentos pessoais que são muito importantes para melhorarmos em nossas carreiras ou na vida como um todo. Pois, por mais que escrevemos códigos, no fim estamos lidando com pessoas, estamos sanando problemas de uma pessoa ou um grupo de pessoas.

A seguir um resumo de algumas habilidades pessoais que considero essências para você melhorar como um programador(a).

Comunicação

Essa é uma das habilidades mais importantes que podemos adquirir, e não somente para a programação, e sim para a vida como um todo. Diria que é a principal habilidade para resolver um problema. Quanto melhor soubermos nos comunicar, mais fácil vai ser para entender e resolver um problema. E uma boa comunicação gera um respeito e confiança maior, pois somos mais ouvidos e admirados. Conseguimos expressar claramente as nossas intenções, sentimentos, e resoluções de problemas.

Para melhorar a comunicação sugiro tentar algumas coisas, como:

  • Falar em um tom mais alto. Quase sempre podemos subir um pouco nosso tom de voz, pois muitas pessoas, especialmente os mais introvertidos e tímidos, acabam falando baixo e para dentro.
  • Pronunciar todas as silabas e plurais. Muitas vezes, acredito que por mania ou cultura, falamos cortando silabas ou não pronunciamos o plural das palavras, tente corrigir isso. Por exemplo, não fale "onde ta aquelas coisa?", fale "onde estão aquelas coisas?".
  • Fale devagar. Uma das técnicas de uma boa comunicação é falar devagar e pausadamente, isso é necessário para que haja tempo de o ouvinte entender e assimilar a mensagem que estamos transmitindo.

Leitura

Outra habilidade que a maioria negligencia. A leitura é algo fundamental para a evolução pessoal. Com ela podemos aprender muitas coisas, seja algo técnico ou pessoal. Ao ler melhoramos a nossa escrita e aumentamos nosso vocabulário, e por ter um vocabulário mais amplo entendemos e expressamos melhor uma ideia, pois muitas vezes podemos usar uma única palavra para transmitir algo ao invés de falar ou escrever uma frase inteira. Também melhoramos nossa comunicação, pois quando estamos lendo pronunciamos as palavras em silêncio, você provavelmente está fazendo isso agora. E por mais que ler seja algo cansativo, ao adquirirmos esse hábito fica cada de vez mais fácil ler textos longos e complexos. Então sugiro ler de tudo, tanto livros técnicos da sua área quanto livros literários, biografias e autoajuda.

Inglês

Como muitos já sabem, inglês é fundamental para um melhor desenvolvimento como programador(a), pois muitos conteúdos, como livros, artigos, vídeos e cursos, só existem na língua inglesa, sem contar que a maioria dos códigos são escritos em inglês. O importante aqui não é ser fluente, mas ter um bom domínio e entendimento, mas quanto mais você souber melhor. E tem o fato de surgir uma oportunidade de emprego internacional, nessa situação é obrigatório ter um inglês bem avançado.

Análise e negócio

É muito importante você adquirir habilidades de análise, pois um bom programador(a) é um bom resolvedor de problemas. Por isso, é fundamental que você saiba analisar um problema, entendendo a raiz do problema e propondo uma possível solução. Também é importante entender o negócio do projeto onde você trabalha, isso ajudará muito na comunicação com o cliente, e passará mais credibilidade. Muitas vezes o entendimento do negócio é mais importante que o código em si. Você não precisa ser um especialista, mas de uma estudada e tente aprender como funciona o negócio do seu cliente, por exemplo, se está trabalhando em um sistema de ensino entenda como funciona as matrículas, relacionamentos entre aluno e disciplina, partes financeiras dos alunos etc. Isso o ajudará a entender o projeto como um todo e o porquê de cada coisa.

Matemática

Uma habilidade que te ajudará bastante é a matemática. Aqui o importante não é ser um especialista em matemática, e sim, entender algumas coisas, como por exemplo porcentagem. Você não precisa saber de tudo, mas lembre-se, quanto mais você souber melhor. Dependendo do projeto que atuamos nunca vamos usar matemática, mas não é raro precisar fazer um cálculo no seu código.

Sugiro dar uma revisada nos seguintes temas:

  • Tabuada
  • Porcentagem
  • Regra de três
  • Raiz quadrada
  • Potência
  • Octal, Decimal, Hexadecimal

Habilidades técnicas

Agora vamos falar sobre as habilidades técnicas. Muitas dos tópicos a seguir são ignorados por muitos programadores, até mesmo os mais experientes. Acabamos aprendendo uma linguagem de programação e como temos que resolver tarefas corriqueiras nos nossos empregos acabamos não dando seguimento aos nossos estudos na ciência que é o desenvolvimento de software, e por consequência não entendemos o porquê de as coisas serem como são. Mas à medida que você vai se aprofundando mais e mais, mais as coisas vão fazendo sentido e você acaba entendendo o porquê de as coisas funcionarem de uma determinada maneira. E, à medida que vamos evoluindo na carreira vai sendo exigido cada vez mais de nós, começamos ser referência para os outros, e para isso temos que ter um bom conhecimento sobre o todo.

A seguir um resumo de algumas habilidades técnicas que considero essências para você melhorar como um programador(a).

História da programação e da informática

Acredito ser interessante estudar sobre a história da programação e da informática no geral, pois querendo ou não, o computador é a nossa principal ferramenta, e nada melhor do que a conhecer bem. Entender como funciona a informática no geral e como as coisas chegaram até aqui pode ser muito útil, você entenderá melhor como as coisas funcionam e como se conectam umas as outras. Entenderá como foram surgindo dispositivos e quais linguagens foram sendo criadas para suprir uma determinada necessidade. Estudar a história também pode fazer você conhecer algo que você nem imaginava que existia, quem sabe você acaba gostando de uma área em específica e decida seguir carreira nela.

Estrutura de dados

Parar melhorar a forma de como organizar seu código você precisa estudar e entender que existem diferentes formas de organizar seus dados para depois utilizá-los de forma mais eficiente. Muitas vezes escrevemos códigos complexos e não performáticos simplesmente porque nossos dados não estão organizados da melhor forma possível. Com os dados bem-organizados e estruturados conseguimos fazer códigos mais limpos e performáticos, também ajudará bastante na escolha do melhor algoritmo para resolver o problema em questão.

Existem diferentes formas de organizar e estruturar os dados, veja alguns exemplos:

  • Arrays
  • Listas
  • Pilhas
  • Dicionários
  • Filas
  • Grafos
  • Tabelas Hash

Nem todas as linguagens utilizam todos eles, mas as vezes você consegue montar algo semelhante, então vale a pena dar uma estudada em cada um deles e ver como utilizá-los na linguagem de programação que você programa.

Algoritmos

Entender algoritmos ajuda a organizar melhor o pensamento na hora de programar. Muitas vezes escrevemos códigos duvidosos, códigos esses que muitas vezes são propensos a erros de lógica e muitas vezes não são nada performáticos. O código se torna lento para chegar ao resultado esperado ou até gera um resultado inesperado.

Existem vários estudos sobre algoritmos, foi criado até uma notação para medir se um algoritmo é rápido ou complexo, essa notação é chamada de Big O (Grande O).

Exemplo de alguns algoritmos conhecidos:

  • Recursão
  • Pesquisa binária
  • Quicksort
  • Algoritmos gulosos
  • Algoritmo de Dijkstra

Esses são só alguns, mas existem vários. É bom ler sobre o assunto e ter uma noção de como funcionam. Isso o ajudará a pensar de uma maneira melhor e mais performática. Quem sabe para chegar no resultado que você deseja já exista um algoritmo funcional e você está quebrando a cabeça para descobrir, vale a pena dar uma estudada no assunto.

Ecossistema

Um ecossistema é a região onde habita as principais tecnologias que você utiliza. Por exemplo, o PHP e o JavaScript habitam na Web, então é necessário ter uma noção de como a Web funciona, entender como funciona a comunicação de cliente e servidor, requisições, verbos HTTP, DNS etc. E podemos dividir ainda mais o ecossistema, por exemplo o PHP além de habitar na Web também habita em um servidor, servidor esse que tem um Apache ou Nginx instalado, e esses softwares geralmente rodam em um Linux, e o JavaScript além de habitar na Web habita em um navegador, navegador esse que foi desenvolvido em outra linguagem de programação e que tem um motor que renderiza as tags e os scripts. Tudo isso faz parte de um ecossistema e quanto mais você conhece melhor.

E existem muitas outras tecnologias que orbitam ao redor de algumas tecnologias, por exemplo, quase sempre temos que entender e usar Git, Docker, algum banco de dados etc. Ter uma noção de cada uma dessas tecnologias o ajudará aumentar ainda mais o entendimento de um todo e por consequência entender porque ocorreu um determinado problema.

Paradigmas de programação

Paradigmas de programação são como modelos ou padrões de escrita de código, onde é utilizado uma série de conceitos, técnicas ou abordagens para resolver um certo tipo de problema. Diferentes linguagens de programação usam um ou muitos paradigmas de programação, deixando o programador escolher qual melhor lhe agrada ou um específico para solucionar um tipo de problema. Como esses paradigmas são um tipo de padrão, conhecendo um, todas as linguagens de programação que o utilizam têm conceitos e sintaxe muito parecidas, logo, aprendendo um paradigma você consegue entender o que está acontecendo em outra linguagem de programação mesmo que você não tenha muita familiaridade, isso acontece simplesmente porque essa outra linguagem de programação também utiliza o mesmo paradigma.

Para esse estudo aconselho dar uma lida nos seguintes paradigmas de programação:

  • Paradigma imperativo
    • Paradigma Orientado a objetos
    • Paradigma Procedural
    • Paradigma Estrutural
    • Paradigma Orientado a eventos
  • Paradigma declarativo
    • Paradigma Funcional
    • Paradigma Lógico

Orientação a objetos

Já que foi falado sobre paradigmas de programação, se você precisasse escolher apenas um para se aprofundar, aconselho escolher a orientação a objetos. Atualmente a orientação a objetos é o paradigma de programação mais utilizado, muitas linguagens a utilizam, e conhecendo os conceitos e os pilares da orientação a objetos faz você entender melhor o código, seja da linguagem de programação que você utiliza como de qualquer outra linguagem de programação que também utiliza a orientação a objetos. Orientação a objetos não é apenas utilizar classes, você deve entender os conceitos por trás do paradigma e de como utilizar e organizar os objetos da melhor possível.

Abaixo, segue uma lista dos principais conceitos sobre orientação a objetos para estudar:

  • Coesão
  • Herança
  • Abstração
  • Interfaces
  • Associação
  • Composição
  • Acoplamento
  • Encapsulamento
  • Polimorfismo

Note que somente com esses conceitos listados acima já da para ter uma noção que orientação a objetos é muito mais do que só usar classes. Existe todo um conceito e estudo por trás.

Design Patterns

Design patterns também são padrões de desenvolvimento, mas diferentemente dos paradigmas de programação, design patterns tenta solucionar problemas recorrentes que foram surgindo ao decorrer da história da programação. Os design patterns são frequentemente utilizados com o paradigma de orientação a objetos, pois muitos deles, para não dizer quase todos, utilizam objetos no seu conceito. Por exemplo, se você está trabalhando em um sistema legado bem complexo e precisa fazer uma refatoração, quem sabe ao invés de escrever todo o código novamente você possa aplicar uma camada por cima, criando novas classes melhores estruturadas e muito mais simples, e essas novas classes chamam os métodos do código antigo sem a necessidade de alteração no legado que já está funcionando, esse padrão se chama Facade (fachada). Existem diversos padrões catalogados, esse movimento de catalogar começou com um grupo de quadro desenvolvedores, que por causa disso foram chamados de Gang of four (Gangue dos quatro), eles dividiram os padrões em três grupos, criacionais, estruturais e comportamentais.

Aqui o importante não é decorar como implementá-los, mas entender seus conceitos e saber que eles existem e podem ser uteis no seu projeto, e também você não precisa usar todos os padrões no seu projeto, lembre-se que eles servem para resolver um problema especifico, se seu projeto não tem esse problema, logo não precisará do padrão correspondente.

Segue uma lista de alguns desses padrões para você estudar:

  • Padrões de criação
    • Abstract Factory
    • Builder
    • Singleton
  • Padrões estruturais
    • Adapter
    • Decorator
    • Proxy
  • Padrões comportamentais
    • Chain of Responsability
    • Iterator
    • Memento
    • State
    • Visitor
    • Facade

Existem vários outros. Para uma leitura mais completa sugiro ler o livro escrito pela própria Gang of four chamado Design Pattern (Padrões de Projeto no português).

Engenharia de software

A engenharia de software é uma área que cuida de todo o planejamento de um software, desde a ideia inicial até fase de desenvolvimento e entrega. É uma área bem ampla e até existem cursos de faculdade voltados apenas para isso. Nessa área aprendemos como modelar um software, desde as primeiras conversas com o cliente, entendendo as regras de negócio, criando diagramas de caso de uso ou diagramas de classes, escolhendo a metodologia ágil que melhor se encaixa ao software em questão e também quais tecnologias vamos utilizar na fase do desenvolvimento. Um engenheiro de software também é responsável pelo planejamento e primeiras estimativas do prazo de entrega do software, e muitas vezes do custo de total do desenvolvimento. Um engenheiro de software também planeja e se preocupa com a qualidade do software, planejando como testá-lo e se vai ser utilizado testes unitários ou metodologias como o TDD.

Arquitetura de software

A arquitetura de software tem como objetivo organizar o software, organizando a estrutura de pastas e arquivos e de como o software em si vai funcionar. Na arquitetura definimos se vamos criar um software escalável, se vamos optar por fazer um sistema único (monolito) ou dividi-lo em pequenas partes (microsserviço), podendo ter diferentes linguagens de programação para cada parte. Também organizamos as pastas e os arquivos utilizando padrões como o MVC e Hexagonal, por exemplo.

A seguir uma lista de algumas arquiteturas para você estudar:

  • Monolito
  • Microsserviço
  • MVC
  • Hexagonal
  • MVP
  • Arquitetura Clean

Banco de dados

Banco de dados é um mundo à parte. Mas é interessante ter uma noção de algumas coisas, por exemplo, que existem bancos de dados relacionais e não relacionais, como por exemplo os NoSQL. Saber que existem diferentes dialetos da linguagem SQL, como por exemplo o T-SQL, pgSQL, PL/SQL, dentre outros. Conhecer os seus vários tipos de dados e a melhor forma de armazená-los. Conhecer melhor a linguagem SQL para montar consultas mais otimizadas. Saber que existe uma programação com lógica, loops e estruturas condicionais que são muito utilizadas em funções e procedimentos. Saber que existe uma teoria relacional de como se planeja um banco de dados, aplicando regras de formalização/normalização. Enfim, é muita coisa.

Entendo que nem todo o programador(a) usa um banco de dados em seu dia a dia, por exemplo, desenvolvedores front-end muitas vezes nem estudam muito essa área por não precisarem tanto, mas entender como ela funciona aumentará seu conhecimento sobre a aplicação como um todo.

Testes unitários e TDD

Uma área muito negligenciada. Testes são importantes para criar automatização em processos, como por exemplo nos processos de CI/CD. Entender como funciona o ajudará a pensar melhor como estruturar o código, pois existem até metodologias para escrever códigos pensando em testes, como por exemplo o TDD, que se baseia primeiro em escrever o teste e só depois implementar no código principal. Com à medida que o software aumenta de tamanho precisamos garantir a qualidade e a organização, para evitar erros de lógica ou código engessado, onde fazemos uma alteração em uma determinada parte e essa parte acaba afetando outros partes ou módulos que não tem muita relação, testes unitários são uteis para garantir que os erros serão detectados nessas situações.

Conclusão

Para cada um desses tópicos podem existir dezenas ou centenas de livros, então percebe-se que é um conteúdo muito vasto e bem explorado. Vale a pena se aprofundar um pouco mais. Também existem muito mais coisas para aprender na ciência que é o desenvolvimento de software, então se você começar achar que está tranquilo e que já sabe o suficiente, tente tomar consciência que provavelmente você só está acomodado, que ainda tem muito o que aprender. Bons estudos!

Gostou? Compartilhe em suas redes!

Ícone do WhatsApp Ícone do X Ícone do Linkedin Ícone do Facebook

Leia mais

Voltar para o topo