Particularidades entre desenvolvedores e programadores

Antes de mais nada devo dizer que a opinião aqui descrita é pessoal, pois este é um assunto meramente subjetivo, que nada afeta a produção de código. Você deve apenas levá-la em consideração à medida que for criando sua própria opinião.

Programadores criam programas. Eles precisam ter uma boa base matemática, mas não precisam se tornar matemáticos. Programadores precisam conhecer as melhores soluções para os problemas. Um bom conhecimento de algoritmos e raciocínio lógico é essencial. Programadores têm habilidades que abrangem uma grande área da programação e de áreas correlatas. Habilidade de comunicação e interpessoal são desejáveis, mas não imprescindíveis. As grandes empresas que produzem software na maior parte procuram programadores, pois são eles que leem as especificações e resolvem o problema, mas não projetam as soluções. Em geral são especialistas em algumas tecnologias e acabam se tornando referência por seu conhecimento em determinado assunto. Seu trabalho começa e acaba com o código.

Desenvolvedores também criam programas. Conhecimento matemático profundo é opcional, mas ajuda em momentos que precisam criar soluções para os problemas que estão enfrentando. Habilidade interpessoal e de comunicação são necessárias. São generalistas, portanto não possuem conhecimento especializado em certas áreas, mas conhecimento abrangente em várias áreas. Tem noção dos diferentes métodos e tecnologias existentes e sabe qual aplicar para conseguir o que quer.

Eu tento ser um desenvolvedor. Diferentemente de programadores, o objetivo do desenvolvedor é criar algo completo, portanto você precisa conhecer os diversos componentes e como eles se ligam para criar o resultado esperado. Programadores buscam resolver um problema, criando algoritmo, programando. Desenvolvedores são responsáveis por uma sequência de tarefas, sendo programar apenas uma delas. Ele entende o problema, busca uma solução (e de preferência que já exista pronta) para somente então programar, testar e documentar. É um processo mais amplo, mais alto, que requer menos conhecimento matemático, pois seu objetivo é entender os componentes e fazê-los funcionar juntos, programando-os caso necessário, mas não sendo necessário criar ferramentas e código que exija colocar a mão na massa em um nível que seja necessário um conhecimento matemático mais profundo. Para o desenvolvedor, o processo de programar é uma parte de um todo, pois o que ele busca é criar um produto ou serviço final por completo. Assemelha-se muito mais a um engenheiro civil, enquanto um programador se assemelha a um mestre de obras (mas um engenheiro civil que coloca a mão na massa!).

Todos os desenvolvedores são programadores, mas nem todos os programadores são desenvolvedores.

O único caminho para criar programas é se tornar primeiro um programador, conhecer as ferramentas, a lógica de programação, criar algoritmos e resolver problemas específicos, para somente então, inevitavelmente e de forma natural, se tornar um desenvolvedor que além de programar precisará entender os requisitos e a solução, buscando obter produto ou serviço desenvolvido por completo em todos os ângulos.

Se você for novo na programação, recomendo que entenda o princípio do Programador vs. Desenvolvedor e a partir de hoje busque se tornar um bom desenvolvedor: que saiba programar, mas que saiba mais ainda unir todas as melhores tecnologias e métodos para conseguir o que você quer. Deixe o difícil e trabalhoso para os gênios, nosso objetivo é eliminar complexidades.

5 thoughts on “Particularidades entre desenvolvedores e programadores

  1. Ivens, concordo com você na maior parte do texto. Porém, não sei se foi a minha visão dos seus argumentos, mas fiquei com a impressão de você valorizar mais o papel do desenvolvedor do que do programador e disso eu discordo um pouco.

    Para mim o contraste entre os dois papeis é mais ou menos o que você descreveu, mas ambos possuem o mesmo valor. O que acontece é que programadores muitas vezes acabam em uma posição precisando desempenhar funções que não as de sua natureza (e vice-versa). Isso faz com que surjam profissionais frustrados e que não conseguem desempenhar seu trabalho de forma plena.

    Mas é isso ai! Parabéns pelo texto. Assunto polêmico e que sempre rende muitas discussões.

    1. Oi Caio! Obrigado por sua participação!

      Tem um texto do @loboweissmann que fala sobre os “programadores invisíveis”, aqueles que trabalham em softwares legados, antigos, mas de sistemas que dependemos no dia-a-dia, como os sistemas em COBOL de grandes bancos, por exemplo.

      Por serem sistemas escritos em linguagens antigas, não é difícil imaginar que a média de idade dos programadores seja bem alta e que – agora, generalizando de forma irresponsável – deixaram de aprender novas tecnologias. Na minha linha de raciocínio, eles são apenas programadores, pois se tornaram dependentes de uma ou outra linguagem, não se atreveram a dominar outras tecnologias.

      A principal diferença entre programador e desenvolvedor é o valor que é gerado. Lembro de uma Python Brasil que fui e que em uma das Lightning Talks, um participante foi demonstrar um código em C de um webserver que ele criou. Lindo, mas qual valor gerado para ele e para outros? Quero dizer o valor de utilitarismo mesmo, não aquele valor pessoal de auto estima por se provar que é capaz. Esse cara é um programador neste caso, o que não impede que ele seja um desenvolvedor completo, mas não nessa situação específica.

      Programação e desenvolvimento são complementares, mas também podem ser excludentes.

      Você pode gerar valor sendo apenas programador, sim, mas penso que o desenvolvedor, por conhecer diversas linguagens e tecnologias e compreendê-las de forma a saber usá-las e encaixá-las umas nas outras, produz algo mais completo.

      É como se programador fosse o estágio involuído de um desenvolvedor. Nem todo mundo chega lá e grande parte prefere nem chegar, mesmo…

      Acho que, então, a definição de programador e desenvolvedor pode variar não de acordo com a pessoa, mas em relação a seu resultado prático? O que acha?

      Abração!

  2. A parte sobre “evolução” faz todo o sentido. Começamos com um objetivo simples – codificar – e acabamos nos envolvendo e evoluindo as expectativas e desejos. Muito bem pontuado.

    Discordo porém no “generalista”. O termo geralmente é utilizado com dois propósitos: a) indicar que o indivíduo conhece todo o Ciclo de Vida da aplicação (ALM – Application Lifecycle Management), ou seja, sabe do que é composto um software para uma determinada plataforma, conhece as tecnologias por nome e até já mexeu nisso ou aquilo, porém ele domina apenas um assunto muito bem (especialista). e, o mais comum b) aquele cara que também conhece uma determinada plataforma só que ao invés de ter uma especialização, consegue se virar em todas as fases da mesma.

    Eu concordo com generalista no termo a). Acredito que devemos conhecer o ALM da plataforma com a qual escolhemos trabalhar e assim, devemos ter uma especialidade muito bem fundamentada – também a escolha do indivíduo.

    O problema que encontro ao falar/parear com generalistas como descrevi em b) é o simples fato do conhecimento deles ser muito superficial em tudo o que não resolve quando queremos construir algo mais sólido. Acredito que eles tenham utilidade em projetos de startup (quando necessita de um MVP rápido e nada complexo), porém geralmente são continuados por especialistas – ou generalistas tipo a).

    tl;dr – conheça o ALM da sua plataforma e torne-se especialista em alguma parte que mais te apeteça.

    Esse tipo de post geralmente rende muito assunto. Gosto desse lado “Craftmanship” da tecnologia 😀 – Realmente gostei do que li. Parabéns pelo post, Ivens!

    1. Hélio,

      Você foi hábil ao separar em dois os possíveis significados para o termo generalista, dentro de nossa indústria.

      Concordo integralmente com o falado. Penso que o ideal é que conheçamos todo o ciclo de vida do projeto/aplicação. É isso que define, para mim, um desenvolvedor de um programador. Talvez seja essa base teórica (o de conhecer as definições de ALM) que me faltou para conseguir elaborar melhorar meus argumentos.

      Obrigado por participar da discussão!

      Abração!

      1. Excelentes considerações tanto do texto quanto dos comentários! A figura que nos passam do que é ser engenheiro de software no curso de Engenharia de Software da UnB(dã) é bem parecida com o que você definiu como desenvolvedor, talvez sejam a mesma coisa.

Leave a Reply

Your email address will not be published. Required fields are marked *


*