O inferno do desenvolvedor iniciante, na prática.

Este texto pode servir como um complemento ao excelente artigo Desenvolvedores: Vocês Estão Sozinhos. Ele também pode ajudar quem está começando, além de narrar um pouco da minha experiência.

Como diria o próprio Diego Hernandes:

Como estudante de programação, existe um período de absoluto inferno até que você se sinta confortável, seguro, e produza resultados em tempo hábil.

Se você é iniciante na área de desenvolvimento de software e gosta de programação, há sérias chances de passar ou estar passando por uma situação bem parecida com essa:

  • Você acabou de se formar em um curso de tecnologia e/ou ainda não tem tanto conhecimento nem experiência.
  • Você precisa de dinheiro e/ou quer arranjar algum “trampo” na área.
  • Ao procurar vagas, lida com dezenas de requisitos e possibilidades diferentes, uma mais complexa que a outra.
  • Você não sabe o que estudar nem por onde começar.
  • Na hora de pesquisar o mercado, tecnologias e o que está em alta, você se depara exatamente com isso:

PHP?
- “Cara! PHP é um lixo, não tem tipagem, a linguagem é inconsistente. Estude C#.”

C#?
- “Cara! Microsoft? Pelo amor de deus, venha para o mundo Linux, estude Java.”

Java?
- “Cara! Java é muito burocrático, dezenas de configurações e arquivos XML, a comunidade é muito velha. É tão anos 2000. Ninguém é produtivo com Java. Estude Ruby.”

Ruby?
- “Cara! Ruby não escala, olha o Twitter, estude Node e Javascript.”

Node?
- “Cara! Node é uma gambiarra de front-end no back, além do mais javascript não é uma linguagem muito boa para códigos muito extensos, é dificil de manter. Estude Elixir.”

Elixir?
- “Cara! Elixir não é puramente funcional, estude Haskell, programação puramente funcional sem side-effects.”

Haskell?
- “Cara! Quase não existe vaga de emprego com Haskell, vai acabar desempregado e passando fome, estude Php.”

Provavelmente, você também irá passar ou já passou bastante tempo lendo artigos como “As 15 principais linguagens de programação do mundo” ,“PHP vs Python vs Ruby” ou vendo qual linguagem é mais performática no “The Computer Language Benchmarks Game”. Isso pode ser caracterizado como a busca incansável pela linguagem “perfeita”, que vai te dar mais “alegria”, “segurança” e “poder”.

Fui “vítima” dessa situação por muito tempo. De repente, me toquei que estava perdendo a maior parte do meu tempo com uma ansiedade desnecessária, ao invés de focar em algo, de fato. Eu estava mergulhado em um mar de dúvidas e incertezas e tudo o que eu lia diversas vezes parecia muito controverso.

Eu estava enlouquecendo e acabei me dando conta disso.

O mundo da tecnologia gira muito rápido

Ninguém é bom em tudo, e nunca vai ser. E se por ventura for, a tecnologia vai avançar e esse alguém terá que estudar tudo de novo.

Quando se é iniciante na área de desenvolvimento, o mais importante é estudar a tecnologia que vai te colocar no mercado.

Se você ja está empregado, estude a tecnologia que sua empresa necessita.

E se quiser se diferenciar aqui vão as principais características que todo programador / desenvolvedor de software de excelência deve ter, isso vale para qualquer nicho de mercado e provavelmente nunca vai mudar:

  • Dominar os paradigmas de programação: Orientação a Objetos, Funcional e Procedural.
  • Estar sempre disposto a resolver qualquer tipo de problema.
  • Saber trabalhar em equipe.
  • Ser organizado.
  • Saber estudar, de forma que você tenha facilidade para aprender tecnologias novas sempre que for necessário.
  • Ter bons conhecimentos de Infraestrutura(Servidores, Banco de Dados, Sistemas Operacionais, etc…).
  • Conhecer e saber utilizar as boas práticas: Design Patterns, TDD, DRY, DDD, entre outras.

Nesse post: https://diariodebordo.creditas.com.br/como-se-tornar-um-desenvolvedor-de-software-profissional/ Leonardo Andreucci fornece uma série de dicas e ainda apresenta ótimos livros que abordam alguns dos itens acima.

Entendendo o inferno.

Porque existe tantos grupos de programadores distintos e eles constantemente se dedicam a tentar provar que sua linguagem ou framework é melhor que a de outro grupo?

  1. O ser humano tem uma tendência inconsciente de querer se juntar a uma quantidade de pessoas que compartilham de uma mesma idéia, um grupo. Parece que necessitamos disso. Na nossa adolescência havia na escola os “nerds”, os “funkeiros”, os “roqueirinhos” e os “badboys”. No mundo adulto dos “devs” não é muito diferente: temos os Javeiros, os Rubistas, os Haskellers, a galera de PHP, entre outras. Fazer parte de um grupo, é ao mesmo tempo se defender, negar o nosso isolamento e nos sentirmos mais fortes.
  2. A esmagadora maioria das pessoas querem se destacar de alguma forma (Não que isso seja ruim, afinal este é um fator positivo inúmeras vezes). Fazer “o que todo mundo faz” não é “cool”. Há uma necessidade de ser diferente. Essa característica também vem junto com a vontade de estar sempre enfatizando para todos a sua tecnologia “diferentona”, o quanto ela é legal e eficiente para resolver os seus problemas. Enquanto isso estiver sendo levado de uma maneira saudável, eu acredito que seja algo totalmente bom e agregador. O problema se dá quando o grupo de “devs hipsters” começam a atacar, diminuir e menosprezar as tecnologias mais consolidadas. Continuamente fazem isso como uma tentativa de tornar sua tecnologia “diferentona” mais popular e, em decorrência disso, conseguirem mais oportunidades.
  3. Muitos desenvolvedores, quando estudam bastante uma certa tecnologia, se sentem “relaxados” e “estabilizados”. E uma maneira de defender os seus estudos e seus conhecimentos, para que “diminua as chances de se tornar obsoleto”, também é atacar e diminuir quem não usufrui da mesma, quem não está no mesmo grupo que eles. Isso tudo na verdade se trata de um “instinto de sobrevivência”. Há o medo inconsciente de perder todas as suas horas de estudo para uma outra tecnologia mais emergente. Há o medo de sua tecnologia se tornar menos popular e você ter menos oportunidades de emprego ou vantagens em decorrência disso.
“O grupo, expressão da sociedade, é um fator de segurança.”
“Portanto, não nos parece que o Homem seja, essencialmente, um ser social, mas se faz social a partir de suas necessidades e para superar seus medos.”
— Neri P. Carneiro

Você não deve dar valor a essa “guerra” infinita e seus “guerrilheiros”, principalmente quando está começando.

Não existe essa de uma linguagem é melhor que a outra e ponto.

Um desenvolvedor ruim vai fazer software ruim com qualquer linguagem.

Um desenvolvedor bom vai fazer software bom com qualquer linguagem.

As linguagens são diferentes e cada uma tem ou teve o seu propósito.

Na maioria dos casos, a melhor linguagem para você vai ser aquela em que você se sente mais confortável e produtivo.

Além de tudo, você geralmente desenvolverá softwares para clientes que estão preocupados apenas em terem o seus devidos problemas resolvidos e provavelmente 90% desses problemas podem ser resolvidos com qualquer linguagem de programação, raramente as aplicações que criamos irão esbarrar nas dimensões de um twitter ou facebook(se esbarrar, meus parabéns heim?).

Escalabilidade muitas vezes depende mais de decisões de arquitetura e infraestrutura. É claro que certa tecnologia também pode facilitar em determinado aspecto, mas entenda o seguinte:

Sempre há o lado positivo e o lado negativo de tudo. Tudo é passível disso. Não existe perfeição.

Quando você opta por ser desenvolvedor, você também opta por ser essa “metamorfose ambulante”.

Não se apegue a linguagem, se apegue a resolver problemas e criar soluções.

No começo, o “diferentão” pode não ser o ideal para você, e nem o diferencial.

Tendo uma base sólida, você será capaz de aprender e ficar bom em qualquer tecnologia ou linguagem, nova ou velha, dentro de um curto prazo, sempre que precisar. E você fará isso de acordo com as suas necessidades, no momento certo, quando a empresa em que você trabalha ou a sua startup precisar.