Traçando o perfil pessoal do Programador
Tags: motivation, career, humanresources, programming
Published: 2021-12-03 03:48:33


Essa última semana estava um tanto sumido e sem estudar mesmo, mas praticando num projeto pessoal que está ficando top de linha! Bom, revelando um pouco de antemão, é um site, bem pequeno, mas que está me dando um trabalhão! Fazer as coisas sozinho dá um trabalho, e apesar de estar fazendo 90% da renderização do HTML pelo Javascript, puro e sem frameworks, não é o código que torna as coisas mais difíceis, e sim a parte de idealização: conteúdo e visual. Além disso, o fato de eu ser iniciante só piora um pouco as coisas, pois falta de prática se traduz em falta de memória muscular, que se traduz em maior lentidão para escrever código. Mas a boa notícia é que o projeto já está, creio eu, em 75% e logo logo poderei mostrar ele por aqui!

![O Programador e suas habilidades](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zdxvlnxgw8xffow8hc6z.jpg)

O assunto que vou discutir hoje tem um pouco a ver com essa introdução, visto que a questão de ser programador (ou querer se tornar um) tem a ver com estas dificuldades que enfrentamos na vida diária. Por exemplo, estou gastando vários dias, codificando e projetando um pouco a cada dia para poder fazer esse site. Nesse processo, foram várias noites tentando fazer funcionalidades funcionarem de uma maneira projetada, incontáveis páginas do Google com pesquisa, aprender coisas novas no laço, quebrar a cabeça com o debugger do Firefox, me espelhar em design de outros sites. Ufa! Muita coisa, não é mesmo? Acho que qualquer programador se identificaria com esta descrição e de ter passado por isso alguma vez ou outra ou sempre!

Toda pessoa tem várias opiniões de como deveria ser algo X ou Y, e eu tenho minha opinião de qual deve ser o perfil pessoal do Programador, mas isso não é fato absoluto, apenas a própria expressão da minha opinião, como se chegasse hoje outra pessoa, de uma área completamente por fora da tecnologia e opinar sobre isso.  Não são raros os casos onde pessoas pensam que a classe de programadores e engenheiros de software é rica. Acredite: não somos! Há casos e casos na comunidade. Já vi pessoas ganharem muito bem em pouco tempo e também já vi pessoas que estão a muito tempo na área estagnados, com um salário ingrato e desmerecido. Somos pessoas de todas as classes, gente como a gente, que está em qualquer profissão e tem expertise nela porque estudou para isso.


![Qual linguagem aprender?](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7difieqpl2xidhefadk.png)

Como disse, são casos e casos, mas acredito que a programação é uma das poucas áreas que costuma se guiar até certo ponto pela meritocracia: você é pago por aquilo que produz e se você estuda mais, você produz mais e é pago proporcionalmente por isso. Como esta é uma subárea de Tecnologia da Informação, obviamente que os ciclos de renovação e inovação da mesma são muito mais curtos do que é de costume, visto que tecnologia de armazenamento e manipulação de dados estão em franco crescimento e diversificação.


![Joseph Schumpeter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u00q3x7t244jwum5bf3h.jpg)

Um dos nomes que recomendo estudar é Joseph Schumpeter. Recomendo [este excelente artigo](https://www.infomoney.com.br/colunistas/terraco-economico/schumpeter-inovacao-destruicao-criadora-e-desenvolvimento/) que fala sobre o economista e sua teoria econômica, e explica muitas coisas que acontecem hoje na área de tecnologia. O estudioso definiu o termo "Destruição Criativa" e observou que de tempos em tempos, havia um ciclo de inovação. Esse ciclo é cada vez mais curto com a difusão de informação e a multiplicação dos saberes, visto que as ideias não saem de um só lugar e o conhecimento não fica concentrado socialmente e nem fisicamente. De certa forma, o ciclo de conhecimento tecnológico é retroalimentado, e ter acesso a esse conhecimento é simples: basta ter força de vontade e acesso a internet. Nesse momento estou produzindo conteúdo para a área através desse blog, fora o que é solto em todas as documentações técnicas ao redor do mundo. A documentação técnica não será de todo apenas uma referência, visto que aceitação no mercado requer popularidade, então convém sempre ter um guia ou tutorial de utilização da tecnologia. 


![Exemplo de destruição criativa](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehp772eop3mgthols1fs.png)

Peço que veja nas documentações seguintes de tecnologia variada, que há um guia para cada uma delas:

- [React](https://pt-br.reactjs.org/docs/getting-started.html)
- [Angular](https://angular.io/start)
- [Javascript](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript)
- [PHP](https://www.php.net/manual/en/)
- [Java](https://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html)

Ter aceitação e aderência ao mercado é algo muito imprevisível. O Linux é um kernel open source que ocupa praticamente todos os servidores do mundo e uma boa parte da tecnologia mobile, sendo um dos grandes casos de sucesso do mundo open source. Esse mundo já nos deu grandes frutos, e acredito que quando se fala nisso, não podemos deixar de falar em git, onde qualquer programador hoje em dia usa para versionar seu código e manter cópias seguras de estados anteriores, e GitHub que é da Microsoft, o que é um caso no mínimo irônico (i.e., uma empresa comercial ter em seu core um software open source).


![Microsoft e GitHub](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bwza97n3geuni2isddl.jpg)

A luta por market share não acontece apenas no lado do cliente, mas também no lado das ferramentas. Apesar de o que estarmos oferecendo ser serviços e infoprodutos, fazemos parte de uma longa cadeia de produção. Cada empresa escolhe seus insumos e ferramentas, sendo a gestão do Supply Chain algo estratégico para obtenção de lucro. Então a escolha da linguagem, de acordo com parâmetros estratégicos e técnicos bem definidos é de crucial importância. Deve se basear muito na performance final do produto, velocidade de produção, oferta de mão de obra disponível capacitada para operar a ferramenta, entre muitos outros. Visando isso, a cada ano surgem novas linguagens de programação e, em mais alto nível, novos frameworks que nem sabemos como é. Aposto que muitos de vocês nunca ouviu falar de [DenoJs](https://deno.land/), que é um runtime derivado do V8 com algumas melhorias em relação ao Node. Também vale a pena pincelar, para quem acha uma tarefa complicada fazer um GUI em C, na biblioteca [Iup](https://www.tecgraf.puc-rio.br/iup/), desenvolvida no Brasil. Ou, quem sabe, tecnologias proprietárias, como o [Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_dev_guide.htm). Um dos trabalhos que venho acompanhando nesse sentido é o do [Nullstack](https://nullstack.app/), framework Js desenvolvido no Brasil.

A grande questão dessa história toda sendo contada aqui é o fato da tecnologia evoluir muito rápido e não parar de evoluir. Quanto mais avançamos no tempo, maior a necessidade de inovações e mais curto será esse ciclo, fazendo com que novas tecnologias sejam inventadas mais rápido e quem não se adaptar vai ficar esquecido no mercado.


![Life Long Learner](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f90jsxct8wans9k0d43k.jpg)

O life-long-learner é de fato uma das características mais ideais do profissional de programação moderno por conta dos motivos que citei acima. Apesar de termos muitas empresas com sistema legado, novas empresas com novos processos mais eficientes e com marketing mais apurado surgem, e empresas não se perpetuam para sempre. Basta que uma chave na economia ou na sociedade vire para que a empresa vire pó do dia para noite. Tecnologia só irá acelerar a velocidade dessas mudanças, fazendo com que os dados cheguem mais rápido às pessoas.

Pensando um pouco nisso, vamos verificar [neste artigo](https://exame.com/carreira/o-que-nao-pode-faltar-no-curriculo-dos-programadores-de-sucesso/) da Exame quais são as características mais procuradas em um desenvolvedor:

- `Para quem está começando agora, Rychard Guedes, cientista de dados no Itaú e professor da Let’s Code, tem uma recomendação: seja resiliente`: Falei um pouco do processo de construção de um site no começo do artigo, e vocês podem perceber que é difícil! Percebam também que criar um hábito de estudar todos os dias uma coisa que pode vir a ficar obsoleta neste momento também é difícil. Já falei algumas vezes em grupos que não são todas as pessoas que tem estômago para praticar escrita de códigos e palavras em inglês que a primeira vista podem significar nada, e nem de entender que naquele código há abstrações de alto níveis, quiçá entender estas abstrações. No contexto do artigo também é citado que a curva de aprendizado é difícil e dura de percorrer, então requer persistência.

- `Diante de tantas linguagens e especializações para escolher, fica difícil entender por onde começar. Antes de pensar nesses dois pontos, Davis Peixoto, Instrutor Sênior na Kenzie Academy, recomenda aprender primeiro a lógica de programação.`: Investir em capacidade lógica é fundamental para percorrer esse caminho. Pense bem: você está operando uma máquina de computar algoritmos e que vai seguir a ordem que você colocar nela, sem questionar ou imputar valores morais sobre ela (com as linguagens de mais alto nível e ferramentas de IA, isso está mudando), então você tem que se preparar e saber que, para conseguir o que quer, você terá que decompor o seu processo em pequenos pedaços de instrução que a máquina pode executar, e com risco tremendo disso escapar das capacidades da máquina. Parece um paradoxo, mas não é: a máquina pode fazer quase tudo que você precisa, mas precisa aprender seus limites e conhecê-la bem, ou acha que ela tem bola de cristal para ler seus pensamentos?

![Fluxograma](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z2oh83jdqqanjaq2dp6l.jpg)
- `E um ponto que pode causar polêmica para os brasileiros: realmente é necessário saber inglês para ser um bom programador?`: Uma proposta para vocês: deixei durante o artigo o link das bibliotecas Iup para C e o framework Nullstack. Clique nelas, e vejam qual é a linguagem de comunicação usada e tirem suas próprias conclusões.

- `Além de apresentar um bom currículo, o presidente da Vulpi fala que a palavra mágica para encontrar um bom programador é “portfólio”.`: Uma das coisas que ouvi de muitas pessoas e que é uma verdade essencial: Quando você faz por prazer, o dinheiro é consequência. Tanto é assim que o primeiro portfólio do iniciante não é uma coisa que ele irá receber por ele. Logo, você tem que gostar de programar para desenvolver um portfólio, ter novas ideias, saber o que você quer! Se você for esperar ser pago para programar algo ou fazer algum website ou programa, esqueça a área.

- `Aprendizado Contínuo`: o que venho batendo na tecla desde o começo do artigo. O mundo não vai parar, porque você pararia?

![Aprender sempre](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wcaigaa1bgopzlqpwmkr.png)
- `Produtividade e Agilidade`: Isso você consegue com estudo - que vai lhe servir para saber qual ferramenta usar e quais caminhos tomar - e prática - que vai lhe dar a memória muscular para codificar mais rápido.

- `Comunicação e Trabalho Integrado`: Sobre este ponto, a verdade é que nenhum trabalho hoje em dia é feito sozinho, exceto os projetos pessoais, onde estão depositados ali suas aspirações, ideias, desejos, em resumo, sua pessoa. Em empresas, todo o trabalho é realizado em equipe, então saber falar, saber se comunicar e até mesmo pedir ajuda, falar que está sobrecarregado, é fundamental. Já se foi o tempo que o perfil do cara de tecnologia era o do nerd tímido que tremia nas bases se fosse para falar algo.


Fechando este artigo, enfatizando um pouco mais sobre estudo. O ser humano é um ser incrível que pode se moldar e tomar a forma que quiser em qualquer tempo, bastando força de vontade e esforço consciente nesse sentido. Ser programador não é tarefa fácil, e requer estudo contínuo. Não pela tradição super longa da profissão, acreditem, é uma profissão recente. Estudar pela vida toda pela tradição e quantidade de conteúdos produzidos historicamente é para a engenharia, medicina, direito e afins. A nossa necessidade é justificada economicamente, não no nosso bolso, mas na natureza da sociedade. Toda hora tem uma linguagem para aprender, ou um framework para incluir em nossa stack. Nossa própria empresa pode nos requerer que mudemos de área, seja de back para front ou de front para mobile, aí precisamos pegar uma linguagem em pouco tempo. Talvez queiramos mudar de área por uma questão de realização pessoal, e olha os estudos aparecendo aí de novo. Fora isso, abstrações modernas não param de aparecer e coisas que em C não havia naturalmente, como orientação a objetos, polimorphismo, encapsulamento, vieram a aparecer em C++, Rust, Javascript, Java, e outros, e tendo uma implementação diferente em cada uma, porém a máquina sendo a mesma e aceitando instrução por instrução.

De fato, não é algo fácil, mas a sensação de construir e criar coisas, essa satisfação, não tem preço!