As descobertas que faço e coisas que aprendo

Atualmente a função de programador é requisitada em muitas empresas e se tornou essencial para um bom avanço no mercado, independente do ramo de atuação. Quase todas as áreas de produção ou serviço possuem um sistema, aplicativo ou melhoria possível que pode ser realizada por um programador. Com esta crescente demanda de profissionais vemos muitos iniciando no ramo e querendo saber como melhorar ou se destacar.

Existem muitos pontos que podem fazer você ser melhor e vai muito além de finalizar mais tarefas. Claro que concluir seu trabalho é essencial, mas as sutilezas de habilidades que ficam em "off" podem fazer a diferença.

Entendimento

Antes de começar a programar qualquer coisa você precisa entender o que irá resolver.  Um bom entendimento trará clareza para você e suas ideias e soluções surgirão a partir de uma base de conhecimento boa e estruturada, invista um tempo para entender o que e porque você precisa resolver.

A maioria dos problemas difíceis só são difíceis por dificuldade de entendimento.

Quando você sabe que entendeu o problema? Quando consegue explicá-lo de maneira simples.

Provavelmente você já passou por uma situação onde estava preso em um problema e tentou explicar para você mesmo o que estava fazendo e BOOM! Magicamente a solução apareceu em sua mente.

Existe uma "brincadeira" na área de desenvolvimento que é conhecida como Debug com pato de borracha, onde você basicamente debuga seu código explicando para um pato o que está sendo feito e o que deseja resolver, parece mentira mas realmente explicar o problema faz com que você assimile melhor todo o contexto e solução. Por isso as vezes quando você vai pedir ajuda à alguém e precisa explicar o problema a solução muitas vezes acaba aparecendo.

Enfim, entenda e problema e depois comece a encontrar maneiras de resolvê-lo.

Comunicação

Pois é, os dias de programador com telas verdes trancado em um quarto fazendo o que quer estão contados, principalmente se você atua em equipe e não é um cracker. Provavelmente você precisará conversar com outras pessoas, explicar ideias, conceitos, os porquês das decisões e tudo isso envolve comunicação.

Como tudo, comunicação é uma habilidade e se você assim como eu possui uma dificuldade neste fator entenda que é necessário treino, estudo e aprendizado para conseguir se comunicar de forma eficiente. A percepção e entendimento de outras pessoas nunca serão os mesmos que o seu e isso muda totalmente como ela entende e recebe qualquer palavra sua, entender isso pode ser um ponto de partida, cada pessoa possui suas experiências e emoções que afetarão diretamente no entendimento de qualquer assunto, tente de forma sutil entender o "tipo" de pessoa que você está conversando e isso será muito bom.

Vamos a um exemplo, digamos que você irá falar com o gerente de vendas de sua empresa para apresentar as novas funcionalidades do sistema, quais dos dois assuntos abaixo seria mais interessante para ele?

1- Falar o quanto de memória o novo servidor tem e como isso irá beneficiar a linguagem de programação nova que você está utilizando

2- Mostra como um novo fluxo da aplicação pode facilitar o contato dele com os clientes e aumentar as vendas

Entenda o que a pessoa que você está conversando quer ouvir. Falar a quantidade de memória ou velocidade do servidor pode não ser tão interessante para um setor de vendas, mas informar quantos processos é capaz de automatizar com esses recursos pode ser um ótimo assunto.

Neste exemplo é quase que "natural" saber que a opção 2 é correta, mas em muitos casos você pode acabar em uma situação onde está explicando algo que o receptor da informação sequer entende o que está sendo falado.

Normalmente isso pode ser equilibrado com comunicação. Para seu chefe não importa muito como você faz o código, ele normalmente busca outros fatores, perceba e apresente-os. Controle as percepções que as outras pessoas tem de você. Você não vai impressionar seus clientes com suas habilidades de programção orientada a objetos.

Se quiser entender mais sobre alguns pontos de comunicação indico alguns livros que me ajudaram/ajudam bastante;

  • Inteligência Emocional - Daniel Goleman
  • A Biblia de vendas - Jeffrey Gitomer
  • Como Fazer Amigos e Influenciar Pessoas - Dale Carnegie

Comunicar é um fator essencial, você é o que você consegue explicar.

Resolução de problemas

Esta habilidade não é uma novidade, afinal essa é a função de um programador, abstrair problemas em soluções com tecnologia. O segredo está em resolver os problemas certos. Foque em problemas que tragam um maior impacto para a solução que deseja apresentar e um valor real para o negócio.

Se você atua em uma empresa, tente entender os problemas de cada setor e ver como pode ajudá-los e entregar uma solução eficiente, trabalhar em conjunto para um benefício comum. Vá além do código, busque entender sobre a área do negócio que você atua. Dominar e entender as necessidades do projeto ou empresa que você está trabalhando será um grande diferencial e trará novas soluções eficientes para suas ideias. Provalvelmente você saberá onde "atacar" com maior retorno.

Ao invés de simplesmente completar listas de tarefas, você pensará e terá base opinativa nas novas implementações com uma visão menos técnica e mais empreendedora.

Se existem pequenos processos repetitivos, concentre-se em automatizá-los para que possa cortar as tarefas chatas e robóticas, se você tem uma tarefa que toma 5 minutos de seu tempo todo dia que tal levar 1 hora para automatizá-la e otimizar o trabalho? Tarefas repetitivas são chatas, mas alguém precisa resolvê-las. Muitas vezes as soluções simples podem ter um impacto positivo inesperado.

A resolução de um problema pode ser resumida em:

Entendimento -> Planejamento -> Divisão -> Execução

  1. Entendimento: Como mostrado acima, conheça bem o problema que deseja resolver antes de qualquer ação.
  2. Planejamento: Alinhe sua programação de maneira organizada, pense no problema que deseja resolver e encontre como ele será resolvido, qual linguagem utilizar, framework, padrão, otimização... Enfim, tenha controle da situação, não saia digitando aleatoriamente procurando uma solução e colando vários códigos de fóruns até que funcione.
  3. Divisão: Divida o problema em pequenas partes e resolva uma a uma de maneira distinta. Um problema grande é muito assustador e "trava" seu cérebro, pense nas pequenas frações e resolva em partes até que tenha a solução completa.
  4. Execução: Com todos os pontos alinhados parta para a execução e mostre como resolver um problema com maestria.

Lembre-se que esses passos podem ser repetidos diversas vezes.

Conhecimento constante

O mundo tecnológico evolui rapidamente, e ninguém consegue estar sempre atualizado nas últimas novidades do mercado, mas o interessante é que você tenha a habilidade de se adaptar quando necessário.

Foque em entender os conceitos básicos da ciência da computação e independente da linguagem de programação que escolher você poderá partir de um mesmo princípio. Teoricamente todas as linguagens derivam de um mesmo local e entender esses conceitos "core" lhe garantem uma vantagem.

O conhecimento base é essencial, os conceitos principais sempre são os mesmos, o que muda é a nova forma de resolver um problema. Sempre terá alguem com uma nova teoria, framework, linguagem e diversos recursos interessantes, vai de sua experiência e entendimeto saber quais são úteis para seus projetos.

O que engloba os conceitos básicos? Envolve aprender: variáveis, tipos de dados, funções, estruturas de repetição — como e quando usar cada um deles, estruturas de decisão, escopos locais e globais, entre outros assuntos.

Não se preocupe caso tome uma ação errada ou escolha equivocada, aprenda com esse erro e continue estudando, lembre-se que esta área é uma ciência e isso quer dizer que tudo é experimentado, testado e mudado constantemente. O segredo é não deixar seu conhecimento estagnado, mantenha-se atualizado.

Se você se deparar com um novo conceito pratique um pouco e tente entender quais problemas ele resolve, caso veja que é algo interessante e essencial aplique no seu dia-a-dia. Entendendo diversos conceitos você conseguirá definir quando utilizar cada um e como resolver um mesmo problema de diversas maneiras, isso garante à você um leque muito maior de caminhos que podem ser tomados, e o melhor, você consegue explicar os porquês de suas ações.

Sua eficiência na produção de código é resumida por dois fatores: entendimento e prática. Primeiro você precisa entender o que deve estudar. Depois entenda os conceitos base do que está estudando e então comece sua prática.

Lembre-se, a melhor maneira de aprender programação é programando. Pratique!

Dica de alguns sites para praticar: Code Wars, Hacker Rank, Coder Byte, Code Signal

Curso Gratuito de Harvard (em inglês, com certificado) que ensina os principios da Ciência da Computação: Acessar página do curso

Saber filtrar

Na área de desenvolvimento existe uma gama imensa de materiais gratuitos e pagos para que você possa estudar sem limites, você realmente pode fazer o a faculdade de ciência da computação do MIT em casa! (Ele fez isso). Em um primeiro momento esse conteúdo quase infinito pode parecer algo muito bom, afinal você tem a resposta para quase tudo na palma de sua mão, porém ao iniciar seus estudos você acaba ficando "perdido" com tantas informações, conceitos divergentes, várias soluções para um mesmo problema e outros diversos problemas pelo excesso de informação.

Nesse caso eu recomendo que você escolha uma fonte única, porém não fixa, de absorção de conteúdo. Encontre um professor, blog, livro, compilado, ou qualquer outra forma de estudo que agrade você e foque nela até que tenha extraido o máximo de informação útil, depois inicie novamente o fluxo de busca de novos conhecimentos.

Outro ponto importante é sempre questionar para você mesmo os conceitos que são explicados, entenda os "porques?" e "como?" dos conteúdos que você absorve, isso o ajudará no aprendizado de novos conceitos e construirá uma base sólida para suas abordagens futuras.

Conclusão

Esses são pontos que podem ajudar em seu desenvolvimento como programador, mas o mais importante é manter a constância em seus estudos e evolução. Mantenha uma rotina com consistência e conseguirá se tornar um desenvolvedor de sucesso.

Até mais! 👨‍💻

Referências:
https://medium.com/javascript-scene/getting-to-10x-results-what-any-developer-can-learn-from-the-best-54b6c296a5ef

https://medium.freecodecamp.org/how-to-think-like-a-programmer-lessons-in-problem-solving-d1d8bf1de7d2

https://medium.freecodecamp.org/the-main-pillars-of-learning-programming-and-why-beginners-should-master-them-e04245c17c56

https://github.com/iaurg/Computer-Science-Study/blob/master/resumes/programador-apaixonado/resumo-programador-apaixonado.md