15 de maio de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Qual a diferença de programador back-end, front-end…?

programador back-end | Incrementar um valor | IoT | Pausar processamento | desafio maker | ordenar um array | caixa dagua | blink sem condicionais

Parece mentira, mas 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.

Programador back-end

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.

Programador back-end desenha interface?

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.

Então programador back-end não desenvolve sistemas web?

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.

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 front-end

programador back-end

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.

Programador baixo nível

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.

Programador full-stack

programador back-end

Não quero entrar a fundo nesse assunto, até porque tenho lá meus preconceitos. 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.

Dicas aos recrutadores: Interpretem!

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.

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.

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?

Até a próxima!

Autor: Djames Suhanko

Revisão: Ricardo Amaral de Andrade