Desenvolver software já é algo comum e se tornou uma profissão consolidada. Porém para se tornar um bom desenvolvedor, construir software com qualidade e conquistar as melhores vagas no mercado de trabalho é necessário ir além e aprofundar os conhecimentos.

Atualmente pode-se aprender a desenvolver software por vários meios. Alguns iniciam pelo modelo tradicional através de cursos, graduação, dentre outros modelos formais. Já outros iniciam sozinhos através de tutoriais, artigos, vídeos na internet. Independente do ponto de partida, ao desenvolver software profissionalmente surgem diversas questões às quais esse ensinamento inicial normalmente não aborda.

Iniciar no desenvolvimento de software está mais fácil, porém são tantas tecnologias e temas diferentes para quem está iniciando, que há um desafio primário de se localizar dentro da sopa de letrinhas, termos e conceitos existentes.

Aprofundar o conhecimento também se tornou mais fácil, há abundância de conteúdos e novos métodos de estudo, mas ainda assim na prática muitas vezes isso não gera o aprofundamento e resultado necessário. Como exemplos pode-se citar:

  • A dificuldade em melhorar a qualidade no desenvolvimento de software.
  • O número de vagas em aberto, principalmente direcionadas a desenvolvedores(as) com maior conhecimento e experiência.

Há várias formas de aprofundar conhecimentos, cada pessoa possui suas preferências com relação ao método de aprendizado. O artigo não cobrirá todas as formas possíveis, mas destaca 5 dicas que podem contribuir!

1. Conhecimento profundo requer conteúdo conceitual.

Para aprofundar o conhecimento, não basta ler artigos curtos, longos ou resumos de livros. Eles são importantes, levam ao nível inicial, podem levar a um nível intermediário, mas dificilmente ao nível mais avançado.

A profundidade vem com a leitura de livros, documentações oficiais, treinamentos avançados, dentre outros. Vem também através da compreensão de conceitos de assuntos associados ao assunto principal.

Exemplos:

Deseja aprofundar o conhecimento em uma linguagem? Então:

  • Leia livros que abordam todos os detalhes da linguagem, não importa se o livro é uma “biblía”. Se é extenso, é porque há muitos detalhes.
  • Leia a documentação oficial, mesmo que seja “chata e morosa”. Muitos segredos podem estar nos textos ignorados.
  • Faça treinamentos avançados e/ou certificações.
  • Compreenda os conceitos dos paradigmas utilizados, estruturas de dados, metaprogramação, concorrência, etc.
  • Conheça como atua o compilador e a máquina virtual, o que levará também a outros conceitos.

Além disso, é importante também conhecer outras linguagens, afinal é importante confrontar conceitos e formas de resolver problemas.

Deseja aprofundar o conhecimento em arquitetura? Então:

  • Leia livros que abordam arquitetura de software de forma geral e também estilos e padrões específicos.
  • Compreenda a arquitetura de sistemas operacionais, para saber como seu software trabalha com memória, I/O, processos paralelos, etc.
  • Compreenda redes de computadores, para saber como seu software trabalha com os protocolos, envio e recebimento de pacotes, serialização de dados, etc.

Deseja aprofundar o conhecimento em Containers? Então:

  • Leia livros que detalham ferramentas como o Docker, mas também livros que abordam o conceito geral de conteinerização.
  • Leia documentação oficial, esteja atento às evoluções, correções, novos recursos.
  • Compreenda como um sistema operacional opera, sua arquitetura, níveis de camadas, virtualização, etc.
  • Compreenda os protocolos utilizados para comunicação entre containers e também entre os softwares que estarão rodando neles.

Conhecer os conceitos e todas as possibilidades de um assunto é o que possibilita utilizá-los adiante, pois se não conhecê-los, não há como utilizá-los.

2. Consolidação do conhecimento conceitual requer prática.

A prática é algo essencial para consolidar e dar propósito ao conhecimento conceitual. Ao aplicar um conceito na prática outros detalhes serão aprendidos, que muitas vezes não estarão nos livros porque eles surgem apenas no momento de implementação de acordo com contexto envolvido.

Tais detalhes podem ser “armadilhas” não previstas por quem elaborou o conceito, compreensões distorcidas que somente com a “mão na massa” ficarão claras, ou ainda “racks” que podem facilitar a implementação.

É comum que desenvolvedores(as) pulem diretamente para a prática e aprendam os conceitos enquanto implementam. Isso funciona até um nível, mas conhecer todos os conceitos envolvidos certamente aumentará a capacidade técnica para a prática.

Algumas dicas para colocar conceitos em prática:

  • Não pratique um conceito novo diretamente em produção, faça primeiro em POC’s (Prova de conceito).
  • Exercite as várias possibilidades de um conceito, para isso use cenários fictícios, mas inspirados nos cenários reais que virão.
  • Salve e documente sua POC, ela pode servir para outras pessoas.
  • Consolide os resultados da POC e preferencialmente apresente-os a outras pessoas interessadas.

3. Compreensão dos reais motivos para o uso de outros conceitos ou tecnologias.

É comum que desenvolvedores(as), diante de dificuldades com algum conceito ou tecnologia, optem pela troca do conceito a ser aplicado ou tecnologia utilizada.

Se a motivação é por uma evolução, a troca é válida, porém muitas vezes essa decisão ocorre porque não há um conhecimento profundo sobre o conceito e tecnologia em questão o qual está impondo dificuldades, e isso sim pode ser um problema, pois as dificuldades podem estar ocorrendo não por lacunas do conceito ou deficiências da tecnologia, mas por falta de conhecimento.

O reflexo deste cenário é que normalmente ele gera grandes mudanças no software que talvez podem ser evitadas, ou a mudança não gera o resultado esperado inicialmente.

Exemplos:

Uma software com problemas de performance de acesso aos dados, cuja modelagem de dados segue um modelo relacional. O time com pouco conhecimento sobre modelagem de dados, ao procurar na internet e participar de vários eventos descobre que muitas soluções estão mudando para modelagens não relacionais (NoSql).

Desta forma, sem conhecimento profundo sobre modelagem relacional, optam por mudar para uma modelagem não relacional. Após 4 meses de refatoração o problema parece estar resolvido. Porém 6 meses após tal mudança a performance de acesso aos dados volta a ser um problema.

O time não conhece uma terceira forma de modelagem, o que o força a olhar para outras possibilidades. Com o auxílio de pessoas com conhecimento profundo sobre modelagem de dados, descobre-se que mesmo usando NoSql, há vários equívocos na modelagem. Ao aprofundar sobre os conceitos de modelagem de dados, o time percebe que no modelo anterior, o relacional, poderiam apenas ter sido realizados ajustes pontuais que resolveriam o problema de performance.

A busca por outras alternativas quando não se conhece profundamente o assunto com dificuldades, pode muitas vezes gerar esforço desnecessário com custo alto.

4. Tempo para o estudo de conteúdos extensos e/ou complexos

A rotina da “vida moderna” dificulta muitas vezes reservar um tempo adequado para o estudo de conteúdos mais extensos e/ou complexos. Porém estes são os que geralmente melhor contribuem para o aprofundamento de conhecimento.

Neste casos há pequenas ações que podem contribuir:

  • Organize uma lista dos assuntos aos quais deseja aprofundar, priorizando os que terão maior impacto para o momento.
  • Meça o tempo utilizado ao consumir determinado conteúdo. Exemplo: quantas páginas de um livro normalmente você lê em 1 hora. Desta forma você poderá calcular um tempo estimado para leitura de livros.
  • Defina um período na sua agenda, podendo ser horas em determinados dias da semana. Crie lembretes e seja disciplinado.
  • Busque um lugar que proporcione atenção total ao conteúdo.
  • Ao iniciar um livro, curso, ou outros, conclua a atividade. Demorar demais ou não conclusão terá apenas tomado tempo e não gerará o conhecimento adequado.

5. Respostas prontas e fáceis normalmente não consideram os detalhes do contexto

É normal que as pessoas procurem sempre obter respostas prontas e fáceis para suas necessidades. Algumas vezes elas até existem, mas geralmente elas não consideram os detalhes do contexto em questão, ou seja, tais respostas podem ter resolvido o problema de outros, mas talvez não resolva o seu.

Desta forma o aprofundamento de conhecimento também precisa ser realizado sobre os detalhes do contexto. Isso inclui entendimento do negócio, dos recursos de infraestrutura, do time a disposição e do tempo para implementação.

Isso tudo atrelado ao conhecimento conceitual e prático é o que dará condições para um trabalho bem feito.



Aprofundar o conhecimento em desenvolvimento de software é uma necessidade constante, e considerando o ritmo da evolução tecnológica tende a ser cada vez mais desafiador. Sendo assim tenha em mente que:

Conhecer um assunto a 10 anos é diferente de conhecê-lo e ter se aprofundado neste mesmo período acompanhando sua evolução e os demais assuntos associados.

Conhecimento aprofundado não vem através de 5 minutos de leitura. Não fuja de conteúdos extensos.

Não há atalhos, aprofundar conhecimento requer o consumo de conteúdo e prática, a maturidade com relação a alguns assuntos poderá demorar anos. Comece agora!

Um profissional pode demorar para aprofundar seu conhecimento. Mas times podem ser compostos com pessoas que já possuem tal conhecimento e outras que estão buscando isso. Assim o time terá o conhecimento necessário e estará se renovando.

Por fim, uma ótima forma de aprofundar é compartilhar o conhecimento já adquirido. Durante o processo você perceberá que estará se aprofundando ainda mais no conhecimento que já possuía. Compartilhe com seu time, crie um blog, apresente palestras, monte um curso, escreva um livro!

Não tenha receio de assumir que não possui o conhecimento profundo de um assunto, tenha atitude para aprofundar-se!


Ilustração principal: Developer Team Illustration by Delesign Graphics on Iconscout