Executando verificação de segurança...
11

Conselho do Uncle Bob: contrate programadores que não dependem de linguagens

A maioria dos anúncios de emprego para programadores mencionam uma série de linguagens como requisitos básicos. Mas a lenda do desenvolvimento de software, Robert C. Martin - mais conhecido como Uncle Bob - tem uma ideia diferente sobre isso.

Segundo ele, linguagens são efêmeras e a melhor maneira de contratar programadores é ignorando-as.

“O tempo que se leva para aprender uma linguagem é muito curto comparado ao tempo que se leva para dominar a programação em si”, disse Uncle Bob.

Ficar preso a linguagens pode ser um erro tanto para quem programa quanto para quem contrata.

Afinal, os melhores programadores são aqueles que não se prendem a uma linguagem específica, mas que mantêm a mente aberta e estão aptos a explorar outras possibilidades se o problema a ser solucionado exigir.

Outro conselho mencionado é que é preciso incentivar o compartilhamento de conhecimento entre os funcionários, especialmente por meio de programação em pares e programação Mob - para que os desenvolvedores de software “não se isolem em pequenos silos”.

No fim das contas, linguagens são apenas ferramentas e um bom programador está preparado para pegar qualquer uma delas e usá-la para construir coisas grandiosas.


Essa notícia também saiu na Newsletter diária do Filipe Deschamps (inscreva-se por aqui).

7

Eu concordo 99% com o que ele diz, e me incomoda só essa parte:

“O tempo que se leva para aprender uma linguagem é muito curto comparado ao tempo que se leva para dominar a programação em si”,

Concordo que "dominar a programação em si", seja o que for exatamente isso, é um processo muito mais longo do que aprender uma única linguagem. Porém a maestria com essa única linguagem só vem com muito tempo de prática, muito mesmo. Conseguir construir um código idiomático (no caso do Python, um código pythonico), leva tempo.

De qualquer forma, na minha experiência, um dos melhores programadores na qual já trabalhei junto era formado em Engenharia Elétrica.

3

Eu concordo com teu ponto, mas esse trecho do Uncle Bob não acho que tenha tanta efetividade.
Acredito que cada contratação tenha um objetivo diferente e uma necessidade atual.

Quem é especialista em JS provavelmente teria uma prioridade em contratação para um problema X do que um desenvolvedor que "não depende" da linguagem, sendo que existe uma curva para aprender uma linguagem, que pode ser baixa dependendo da sua experiência e afins, e também até se escrever códigos bons e eficientes.

5

Recentemente eu li The Clean Coder — que é um ótimo livro, por sinal — e esse livro é inteiramente sobre como ser um bom profissional.

Por exemplo, tem uma parte que o Uncle Bob fala sobre pair programming ser a melhor forma de compartilhar conhecimento entre os membros da equipe. Segue algumas anotações minhas sobre esse tópico:

Profissionais pareiam. Por que? Porque, ao menos para alguns problemas, é a forma mais eficiente de resolvê-los.

Profissionais também pareiam porque é a melhor forma de compartilhar conhecimento um com o outro. Profissionais não criam silos de conhecimento. Em vez disso, eles aprendem diferentes partes do sistema e do negócio pareando uns com os outros.

Profissionais pareiam porque é a melhor forma de revisar código. Nenhum sistema deve consistir de código que não foi revisado por outros programadores. A forma mais eficiente e efetiva de revisar código é escrevendo-o.

4

Concordo 100%, é aquela velha máxima: se você souber programação em si, aprende qualquer linguagem e muito rapidamente. Eu tiro por mim mesmo, aprendi o básico de nodejs em 15 dias, angular em 1 semana. Mas comecei com C/C++, foram muitos anos batendo minha cabeça dura.
De forma que hoje ficou mais fácil.

1

Também depende né? Se a empresa precisa de um tipo de demana por, digamos, JavaScript, ela precisa de alguém que entra e entenda JS para suprir a demana dela. E com a maioria das empresas estão sempre com a equipe curta, o que ela precisa mesmo é de um programador daquela linguagem, que chegue, pelo menos, colocando as coisas no ar e resolvendo pequenos problemas diários. Por isso mesmo as vagas de Jr. são sempre pedindo 1 framework, algumas linguagens "da moda" e um banco de dados, e as provas pedem que você una tudo isso usando as tecnologias que eles usam (mesmo que esse stack mude daqui alguns meses ou anos, não importa, pra empresa/RH o que pega mais é o imediatismo de ter +1 na equipe).

Por outro lado, se a empresa precisa de um programador júnior que irá escalar dentro da empresa e participar de vários projetos, a lógica é muito mais importante do que a capacidade de escrever em uma linguagem ou conectar 1000 frameworks pra gerar um código (e aqui reitero: 90% das provas pra Jr. são assim quando poderiam ser modificadas por um teste que pedisse um algoritmo genérico para resolver o problema da questão).

1

Acho que seria válida a especificação da linguagem caso somente aquela linguagem tivesse os recursos necessários que nenhuma outra tem, coisa que é muito difícil hoje em dia.

Porém, esse problema, caso exista, sempre abre caminho para sua solução, como por exemplo, outras linguagens notarem a necessidade dos recursos que ainda não fornecem e criarem.

1

A concepção de linguagem é complexo demais para dar uma resposta apenas, acredito que uma saída seria trocar uma linguagem específica para tarefas que são de domínio do programador, mas acredito que isso se aplica para quem já passou do seu tempo de júnior, afinal, quem é junior deve focar em aprender a programar, linguagem deve ser apenas uma ferramenta.

1

Eu acho que isso está simplista demais e vai gerar muito ruido na comunidade. O mundo real está um pouco longe disso mas vamos lá:

Acredito no Tio Roberto, ele é um dos melhores, acho que não foi a intenção dele ser tão simplista mas linguagens importam dependendendo do contexto.
Observe alguma empresa como a Figma, eles tem seu renderizador construido em C++ compilado pra WebAssembly (incrivel diga-se de passagem) um programador de Rust que entra nessa empresa e chora porque vai ter que passar a programar em C++ é um profissional se atirando num abismo. Rust, C++ talvez C# são linguagens alem de parecidas costumam ser usadas para resolver os mesmos tipos de problemas. Uma pessoa que programa em javascript e reclama de python, ruby, F# é um mané chorão, por favor se você é assim repense no que está fazendo pois o abismo está proximo (ou você só é jovem demais).

Porém essas linguagens se propoem a fazer certos tipos de coisas como alta performance, que dão bom fit para resolver certos tipos de problemas como renderizar formas geometricas na sua telinha, que atraem pessoas com certos tipo de interesse como processamento de imagens. Ai é que está pessoas que usam x ferramenta costumam trabalhar com y problema. Isso não quer dizer que um programador de C++ não pode desenvolver um servidor web, mas provavelmente um programador de javascript, java ou C# já entende muito bem as nuancias de um servidor web. Não é porque JS ou Ruby tem um nivel de abstração maior que um C++ da vida quer dizer você está apto a resolver bem todos os problemas da informatica no mundo comercial.

No mundo comercial redução de custo de manuntenção é e prazos curtos é o que impera, deixar de contratar um programador ruby porque ele vai trabalhar em um projeto em python é um absurdo, se você recusou a vaga por causa disso também é um absurdo.

Em resumo se você é programador Web você é programador Web e não "programador NodeJS", se você é desenvolvedor de UI você é desenvolvedor de UI e não "dev React".

3

Assim que li o artigo fiquei preocupado com a parte de:

a especialidade que o dev tem em tais linguagens e sua vontade sim si de trablhar com tais não vai mais ser relevante na hora de procurar uma vaga?

assim como você respeito muito a opinião do tio Roberto mas acho que não especificar a linguagem tira da mão de muitos o gosto de procurar um emprego em uma linguagem que ele tenha mais apreço, não que ele só vá programar nela mas que ela seja seu foco de trabalho.