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

Qual são os conhecimentos obrigatórios para um programador backend?

Bom dia tchurma, tudo bem? Estou na jornada para me tornar um programador, e de uns meses para ca decidi que vou querer focar meus estudos para o backend depois de conhecer o node.js. Gostaria de saber de meus compatriotas seniors/plenos de vossa plataforma, quais seria os conhecimentos obrigatórios para um bom profissional backend?

Outra questão, é obrigatório que um programador backend saiba Docker?

Minhas linguagens são Javascript e PHP.

Obrigado e tenha um bom dia a todos.

7

Não é tão simples responder isso. Obviamente que existem algumas coisas, mas a prática mostra que pode ser muito pouco.

Aí vem a definição do que é um programador. Algumas pessoas dizem, o que acho equivocado, que se você sabe fazer um Hello World você é programador. Aí obrigatório é só saber reproduzir algumas letras em um editor e conseguir entregar para alguém, eventualmente subir com alguma ferramenta (FTP por exemplo) para um servidor disponível. Pela definição de alguns isso já é um programador backend e é obrigatório.

Partindo daí vem gradações de obrigatório. Seria obrigatório para conseguir ser um pouco melhor, conseguir fazer coisas realmente úteis. E entramos no programático para o que eu chamo de ser programador de verdade, aquela pessoa profissional da área com P maiúsculo, que realmente entende de tudo o que precisa na área.

Para cada pessoa que você perguntar falará coisas diferentes entre o Hello World e o desenvolvedor de software profissional completo.

Eu gosto muito de dizer que o profissional começa bem quando ele tem algum domínio da matemática, comunicação e expressão e ciências. Isso é obrigatório em grande parte das profissões que exigem qualificação. As pessoas esquecem disso. Muita gente quer pular para a programação sem ter isso em ordem. Não funciona. Todo o resto ficará picotado. Eu coloco isso como obrigatório em primeiro lugar. Eu sei que muita gente está pensando "não é disso que a pergunta quer saber", mas justamente porque é frequente as pessoas não se preocuparem com isso que é importante falar. Não tem casa sólida sem o alicerce, mesmo que você não veja ele e parece que não é importante.

Programação é matemática, como vai se dar bem com isso sem ela? Como vai interpretar instruções da documentação e de outras epssoas se não sabe interpretar texto ou fazer as perguntas adequadamente para chegar a informação que precisa? Como vai pesquisar e separar o joio do trigo sem método científico para obter o que falta para realizar a tarefa da forma correta?

Daí começo a falar em computação e engenharia de software. Se não entender a base disso não fará bons softwares. Não precisa dominar tudo, mas a base precisa estar clara. Também pode parecer que não é tão obrigatório assim, mas quando a pessoa aprende por intuição sem o fundamento das coisas que vai trabalhar, frequentemente ela aprende meio certo e meio errado, ela não pode nem contestar o que está aprendendo, e ela aprende o erro. Se aprende o erro, treina ele, e treinando, vai se solidificando e é ele que fará para sempre.

Teve um caso que respondi uma postagem aqui de uma pessoa que teve a melhor das intenções de postar algo ensinando outras pessoas. Está tudo errado. Ela aprendeu algo de forma errada e quando eu contestei (tentei ser sutil) ele insistiu no erro, começou dar referência falsa para justificar o erro como se fosse certo. Ele contestou o meu conhecimento, eu mostrei minhas credenciais, ele ficou bravo me ofendeu, não assumiu a responsabilidade e apagou a postagem, o que chamamos isso de xadrez de pombo. Isso é um exemplo do que acontece quando a pessoa aprende errado.

E é muito fácil aprender errado hoje em dia com a internet. Esta maravilhosa ferramenta é a casa do capeta. Tem muita coisa errada disponível, tem que tomar muito cuidado.

As redes sociais deram voz a uma legião de imbecis -- Umberto Eco

Estou só ecoando. Sei que algumas pessoas não gostam de ver algo assim, mas talvez seja sintoma. Me desculpe, não quero ofender ninguém, mas é preciso ser dito para que a pessoa saiba sair de um ciclo vicioso. Os demais entendem isso e sabem que é importante. Não tome isso como algo destrutivo, eu quero a sua evolução. De qualquer forma eu acho que você tem direito à escolha, até de ser algo ruim para a sociedade e para você mesmo (estou obviamente falando hipoteticamente, quase todo mundo que está lendo isso faz escolhas adequadas).

Obviamente que a pessoa precisa saber codificar, e em uma linguagem que permita usar no backend (virtualmente todas). Pode usar JavaScript com Node, ou TypeScript (tecnicamente pode ser JS) com Deno, pode ser PHP, Python, Java, C#, Go e muitas outras, até C pode, embora pouco recomendado para a maioria dos casos. Tem que aprender um passo de cada vez. tem que dominar todas as estruturas de controle, variáveis, tipagem, e boa parte da biblioteca básica, e o principal da biblioteca que se comunica com o servidor HTTP (eu considerando que trabalhará com backend web, porque o termo costuma ser usado assim, embora exista backend de outras coisas, o que é um dos erros que as pessoas costumam aprender).

Eu sei que eu sou chato, mas pra mim é obrigatório a pessoa conseguir se comunicar corretamente com outros profissionais. Eu sei que boa parte das pessoas não acham isso e por essa razão está tudo ficando deteriorado e as cada dia tem mais vagas não preenchidas. Tem que saber os termos corretos. Tem Que saber em detalhes o'que é uma variável (ela é um padrão de projeto, você sabia?), não pode ser superficial, porque senão vai usar errado e não vai perceber.

Muitas pessoas, muitas mesmo, não sabem o que é a linguagem, o que é o runtime, o que é o compilador, o que é o IDE, etc.. Isso é mais que obrigatório, mas as pessoas conseguem entregar algum resultado sem saber, então alguns dirão que não é obrigatório. Você só vai usar bem quando parar para pensar sobre tudo isso. Porque é o IDE e não a IDE. Eu sei que parece bobo, mas de novo, é aprender tudo com mais buracos do que "queijo suíço".

Ter um entendimento básico de infra para subir os projetos, conseguir configurar os serviços no teste e em produção parece obrigatório também. Dominar não é obrigatório, mas é importante.

Entender de segurança, não no nível do profissional especializado, mas ter um forte entendimento, até para saber quando procurar ajudar é obrigatório. Hoje boa parte dos servidores estão vulneráveis, muitos até são zumbis trabalhando para crackers e as pessoas nem sabem.

Docker não é uma infra obrigatória, pelo contrário. A maioria das pessoas na área nunca usaram ou nunca usarão. Mas ele pode ser bem útil. Para algumas vagas é obrigatório.

E aí é onde mora o problema. Obrigatório mesmo depende da vaga. Cada uma pode colocar o que quer. De que adianta você estudar (o que inclui prática) algo se uma vaga quer outra coisa e não liga para o que estudou?

Quando falamos de infra pode não ser tão obrigatório em um primeiro momento, mas precisa entender como a internet funciona, como é um servidor HTTP, DNS, etc., um navegador, o protocolo, a base de HTML e coisas dos tipo (não é saber usar um HTML, mas tem que entender o papel dele, afinal você vai entregar muito, feito por outra pessoa).

Se aprender um pouco de infra é quase certo que terá que saber o básico de Linux, ou então toda parte de servidor do Windows.

Não é tão obrigatório para um júnior, mas tem caso que entender de arquitetura pode ser importante. Em geral essas decisões não cairão na sua mão, a não ser que você seja solo. Aí precisa saber pelo menos que deve fazer o mais simples possível, que funcione bem e tenha algum futuro. Se está fazendo solo é para ser muito simples. A não ser que tenha um justificativa bem plausível, sem muita especulação, deve evitar qualquer opção que gere complexidade, seja porque não tem experiência para fazer uso adequado, seja pela desnecessidade. Quem é júnior tende a fazer algo mais complexo do que deveria, em alguns casos para inchar currículo. Tá cheio de gente que diz que já trabalhou com microsserviços em projeto solo. Se você ainda não entende bem da área, não está rolando de rir.

Claro que solo você será full stack (não gosto muito do termo, mas whatever), então pode ser semisolo.

Um banco de dados como o MariaDB provavelmente é fundamental. Mas tem que aprender modelar mais que usar a ferramenta. Pra mim, entender de álgebra relacional é mais obrigatório que saber o básico de SQL, mas a maioria vai dizer que só o SQL está bom. Pode querer saber do PostgreSQL, SQLite, e outros. Alguns preferirão o MongoDB. Eu acho que é um erro para boa parte dos projetos que as pessoas usam (parece mais fácil, mas cobra um preço em qualquer projeto não trivial que ele não seja o mais adequado, mas enfim...).

Muitas vezes a pessoa quer aprender o avançado sem dominar a base, isso não dá certo. Não vai de OOP antes de dominar toda parte imperativa da programação que é o que você fará em mais de 90% do tempo que está codificando (boa parte das pessoas passam mais tempo fazendo outras coisas que codificar), deixem design patterns famosos para depois quando entender como usá-los bem, mas tenha em mente que eles existem. A lógica importa muito mais. A organização do código vem logo depois. Não deve demorar tanto para começar a ver isso, especialmente se começar a fazer coisas maiores, mais sérias.

Algumas pessoas colocarão que deve aprender MVC, um framework, mas isso não é obrigatório, pelo contrário. Isso pode ajudar a entregar algo mais rápido, mas queima o aprendizado. Não use a calculadora antes de aprender a fazer conta de cabeça.

Não é exatamente obrigatório, mas logo precisará lidar com controle de versão. É quase certo que seja Git, mas SVN tem lá suas vantagens para certos cenários.

E aí vai somando outros conhecimentos.

Quam tem a base muito boa, pode ser aceito para trabalhar com tecnologia que não domina. POde se dar bem com algo que não seja Node.

Faz sentido para você?

Espero ter ajudado, gastei um tempo para isso, espero que entenda os puxões de orelha :)

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Concordo com o comentario do amigo Kaindall, esse conteúdo é ouro. O link do StackOverFlow sobre variaveis, foi muito legal aprendi algumas coisas interessantes. Obrigado, maniero pelo conhecimento compartilhado

1

Queria prata consegui é ouro visitando esta publicação. Mas obrigado pelo conteúdo, muito útil! Ainda mais pelos puxões de orelha.

Fora a algebra relacional, quais conteúdos de matemática encara como obrigatórios para a área de TI no geral?

1

Exagerado... :D

Começa por aritmética diretinho (inclui porcentagem, regra de 3, etc.), muita gente falha nisso :) Tem que entender a função dos números (dados) e suas relações, forma como são manipulados.

Toda álgebra básica. A programação usa o tempo todo. Álgera booleana também, bem, muito bem.

Lógica. Claro, isso é o que permite programa com destreza, resolver problemas, melhorar algoritmos. Lógica é matemática. Só lógica, nada de lógica XYZ. Isso não se ensina explicitamente na escola, vai acontecendo implicitamente.

Teoria dos conjuntos. Quase o tempo todo trabalhamos com conjuntos em nossos códigos. Pena que em geral a escola ensina só o mínimo, e olhe lá.

Precisa entender o que é o problema, ver os dados reais, entender o contexto como ele é de fato, aí já começa entrar em método científico. Se você pegar dados errados, o resto já não importa. Para tudo, dados de como deve construit o algoritmo.

Depois vem mais algumas coisas, mas isso é o principal para o básico.

Não é difícil, é só o básico, mas tem que entender muito bem.

1

Cai de paraquedas pra agradecer o comentario tambem.
era isso que eu queria, alguem indicando a base, a base de tudo, sem framework, a base da matematica, de requisições.
Nunca parei pra reparar na questão de ignorar POO e fazer um projetinho todo de forma imperativa pra aprendizado, a parte de estudar e treinar o erro é algo assustador, não pensei sobre isso até hoje.

1

Pode ser uma boa. Não é que não possa fazer mais ou menos usando classes e essas coisas, tem linguagem que nem dá para fazer sem, mas não se preocupar. Aliás, OOP é menos sobre o que usa nas linguagene e mais como organzia o código. A maioria das pessoas não aprende OOP corretamente. Eu mesmo patinei várias vezes em mais de 30 anos mexendo com ele, acho que só agora estou chegando perto de entender o correto, mesmo aidna tendo dúvidas. Quem acha simples já errou.

1
1
1

Se você já manja de Javascript e PHP eu diria para começar aprender alguns padrões de projeto. Mais ou menos da mesma forma como eu aprendi:
1- Começa implementando MVC.
2- Depois começa estruturar API Restful, como uma evolução do MVC.
3- Aprende JWT e autenticação na sua API.
4- Agora que já sabe REST, começa aprender um pouco de GraphQl.
5- Começa aprender a fundo os protocolos de comunicação, HTTP, TCP/IP, Sockets.
6- Faça uma API que inplemente Upload de arquivos e consumo via streaming, (pode ser uma api de videos/musicas)
7- Aprenda mexer com comunicação em tempo real, crie um chat utilizando SSE e depois aprenda WebSockets.
8- Começa a aprender arquitetura de software e padrões avançado de projeto (arquitetura hexagonal, clean architecture, DDD)
9- Apranda testar os seus sistemas, faça testes automazados.
10- Replique seus conhecimentos em uma outra linguagem (.Net, Java, Node) eu sou dev .Net e o ambiente é muito bom e consolidado mas eu recomendo começa no Node pela liberdade de monta sua própria stack.
11- Aprenda também uma linguagem mais baixo nível, Rust é uma boa opção.
12- Se divirta, faça as coisas como diversão, crie desafios e vai evoluindo gradativamente.

aproveita que ja manja de js e vai fazendo pouquinho de front pras suas apps, assim vc evolui como full stack.

não é obrigatório saber Docker mas vai ser muito bom aprender!!

1

Posso falar da minha experiência como desenvolvedor, alguns tópicos são:

  • Desing Patterns (te dará muito repertório e vai evitar que você crie monstrinhos dentro do código)
  • Estude as convenções e boas práticas que a comunidade recomenda para a sua linguagem de programação. Todo mundo ama encontrar um código legível para dar manutenção ;)
  • Domine os aspectos básicos de SQL ou NoSQL antes de sair criando tabelas, collections e relacionamentos.

Acredito que os próximos passos vão depender da sua jornada, cada empresa e projeto pode te exigir skills diferentes, como dominar framework A ou B, Shell Script, Docker, Kubernetes, AWS, Azure, GCP e etc.

Especificamente sobre Docker, todos os projetos que atuei nos últimos 4 ou 5 anos o utilizam, pode parecer complicado no começo mas vale muito a pena!

Espero ter contribuído!

1

Olá! Gosto muito deste roadmap: https://roadmap.sh/backend (que inclusive tem outros disponíveis no site), mas lembrando, não limite o que você pode aprender a um roadmap, ele é somente um guia. Outra coisa, tem conteúdos que você pode aprender somente o conceito e quando realmente necessitar você pode se aprofundar.

1

Muito obrigado, eu vou olhar com muito carinho, vai ser muito util pra mim. Me encantei muito com backend depois que comecei aprender node kkk

1
1

Conhecimentos por si só não existe nada obrigatório!
Na minha visão um bom programador tem caracteristicas que são importantes!

  • Vontade de aprender
  • Paciencia

Com essas 2 conhecimento você vai adquirir!
Abraços