Manual
do
Maker
.
com
A maioria dos recrutadores não sabem a diferença de programador back-end, front-end e muito menos baixo nível. Todos os meses eu recebo propostas de serviço (seja PJ ou CLT) para trabalhar com Python. Sério, estou considerando tirar Python do meu currículo por causa dos recrutadores. Na esperança que um número mínimo deles se interesse em saber a diferença (porque eles têm a tarefa de contratar todo o tipo de profissional, não só de TI), vou discorrer a respeito.
Lembrando que recrutador recruta pessoas de TODAS as áreas de TODA a empresa. Não dá pra conhecer todas as profissões em detalhes.
O programador back-end trabalha nos "bastidores". Ele não desenha interface web para usuário, não faz site, não cria app pra smartphone se for "programador back-end".
Em meus longos anos de atuação trabalhei principalmente com servidores Linux, administrando, fazendo robôs para cumprir rotinas de sistema, desenvolvendo sistemas de backup (como esse de backup de switches) e disaster recovery. O programador back-end cumpre tarefas que não necessariamente são de alta complexidade, mas não é porque se programa em Python que se faz site.
Já fiz bots de rede em Python, usei muito em visão computacional e também em inteligência artificial (machine learning, se preferir), em MCUs e serviços de sistema. Tudo back-end. Não uso Django, não uso nenhum framework de Python. Detesto interface com o usuário, mas faço desde que não seja web. Programador back-end, mais uma vez, não desenha interface web com o usuário.
Sabe aquele negócio de "cuspir para o alto e cair na testa"? Pois é, se você está lendo esse parágrafo, saiba que está lendo a atualização do artigo de 2021 em 2023 - no novo site que escrevi desde o zero, e acabei criando a categoria WEB que você vê na navbar, para poder relatar minha experiência nessa aventura.
Todo o programa tem que ter alguma interface com alguma coisa. Se estiver escrito no currículo do programador back-end que ele desenvolveu uma interface de comunicação com o usuário, pode estar se referindo meramente a um texto em um terminal que espera o usuário digitar ou selecionar alguma opção. Interface com o sistema pode até desconsiderar que existem usuários, então, resumidamente: Programador back-end não desenvolve interface web para o usuário, exceto esteja explicitamente descrito no currículo que ele faz "também" sistemas web que tenha interface com o usuário.
Sistemas e programas; qual a diferença?
Um programa cumpre por si só uma tarefa; um editor de texto, um software de edição de imagem, um player de mp3. Já um sistema envolve ao menos dois pontos para cumprir uma tarefa completa. Uma microcontroladora fazendo telemetria e enviando as informações para um broker MQTT para que "do outro lado do broker" uma aplicação de alto-nível leia esses dados e faça a interface com outra MCU ou com o usuário. Isso é um sistema.
Quando um sistema intercomunica apenas máquinas é chamado M2M, ou machine-to-machine. Esse é o melhor dos mundos, porque o usuário é o maior problema que existe na face da Terra. O usuário não segue uma rotina, não usa os padrões conforme o desenvolvedor definiu, toma decisões diferentes conforme a situação e seu raciocínio. E óbvio, pois é humano.
Resumindo o título: Sim, programador back-end desenvolve sistemas web, mas não necessariamente interface web com o usuário, exceto esteja explicitamente em seu currículo que além de Python ele também usa Django, Flask, Bottle ou outro, qualquer que seja.
O programador Python front-end desenvolve interfaces web para o usuário, ainda que não seja um programador com conhecimento em UX. O programador front-end vai colocar algum framework em seu currículo porque simplesmente é inviável desenvolver interfaces fluídas partindo do zero; é contraproducente esperar o melhor resultado partindo do zero. É reinventar a roda. Quando o programador Python trabalha com web terá também em seu currículo JavaScript, CSS, HTML e todas essas coisas que produzem as firulas que todos nós gostamos. É fácil identificar as características do programador Python que desenvolve web, apenas olhando os demais conhecimentos expostos no currículo.
Fiz o novo blog "do zero", mas usando Gatsby, Tailwind, Strapi e montes de bibliotecas React. Escrever cada linha de código sem frameworks é uma insanidade. Os sites hoje em dia são extremamente dinâmicos e esses recursos demandam esforços.
Se estiver escrito no currículo "programador baixo nível", não ouse oferecer uma vaga de "programador de sites" para essa pessoa. Quem programa baixo-nível pode estar "cutucando" bits, desenvolvendo drivers ou firmwares de dispositivos. Pode até ter Python em seu currículo, já que em 2015 escrevi um driver para o sensor BMP180 para Raspberry, usando Python, e essa tarefa já é sem dúvidas uma coisa muito distinta.
Apesar de ter escrito todo o site, não posso de forma alguma me considerar um programador front-end em 2 meses de esforços, mas com certeza fiz mais do que o papel de full-stack, pois planejei a infra, webhook do strapi, VM do CMS, Subnet e endpoint na Azure. Fiz papel de SRE também aqui.
Não quero entrar a fundo nesse assunto, até porque tenho lá meus pontos contra. Mas basicamente o desenvolvedor full-stack é o novo nome para a "escravo" dos tempos modernos. Não há limites para alguém que é "full". O termo pode incluir desde puxar o fio do relógio de luz, até fazer os efeitos gráficos na interface web com CSS e javascript. Não é uma completa verdade dizer que "quem faz muita coisa não faz nada direito", mas penso que quem faz coisas "demais", não tem nem a chance de fazer algo direito. Não dá pro cara configurar o sistema do servidor, redundância geográfica, bonding, bridge, servidor web, módulos, configurações de módulos, servidor DNS, configurar o Django, administrar a base de dados, fazer o projeto da interface com o usuário, UX e dar suporte. Quando se contrata um funcionário, se está comprando de forma parcelada seu tempo. É o tempo o fator determinante para atingir qualquer objetivo, e tudo que um programador full-stack não vai ter é tempo para fazer todos os papéis possíveis de tecnologia. Em minha pobre visão, me parece que o empregador quer usar a estratégia de reduzir encargos (coisa que sou completamente a favor), mas o custo e a qualidade a médio prazo podem ser desfavoráveis em relação à contratação de profissionais distintos. Mas também tem gente que prefere contratar um cara pra levar a empresa nas costas, então que seja.
Não é um ataque, é uma dica mesmo. Os recrutadores contratam recepcionistas, atendentes de telemarketing, advogados, almoxarifes, motoristas e programadores. Não dá pra saber tudo, certo? Então a dica para recrutar o cara que corresponde à área é: Interpretem superficialmente o currículo. Saiba que javascript, CSS, HTML, Ajax, PHP e afins são um conjunto que direciona a pessoa ao desenvolvimento web, principalmente com o usuário, já que CSS e javascript são os geradores de firulas. Nesse caso, sim, o programador Python programa web.
"Gerador de firulas". Me ofendi comigo mesmo. É o JavaScript e o CSS que me prenderam de forma viciosa na construção desse novo site - claro que não é a maior beleza da Internet, mas convenhamos que não está mal, hum?
Se estiver no currículo C, C++,Qt, Python e Shell script (como em meu currículo), não tenha dúvidas de que se trata de um programador back-end. Não é fácil nem rápido se especializar em uma área, e normalmente as linguagens escolhidas são para a área que o programador deu foco.
E Agora? Será que aceito (ou recebo) proposta de front-end? Meu coração está dividido.
Espero que a explicação tenha sido boa o suficiente para identificar minimamente o profissional, evitando desgaste do recrutador e poupando o candidato de uma frustração. Bora treinar no meu currículo?
P.S.: Treinem no meu currículo depois que eu atualizar ele para front-end pleno. Vai que...
Até a próxima!
Autor: Djames Suhanko
Revisão: Ricardo Amaral de Andrade
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.