Introdução

Meu artigo anterior descrito como você pode entrar no desenvolvimento de front-end, e como é um lugar cheio de minas terrestres, pise em um trecho errado e você mergulhará no inferno do infame ecossistema JS de “muitas estruturas”. Neste artigo, vamos ver como você pode entrar no desenvolvimento de back-end e algumas perguntas mais comuns que as pessoas me perguntam sobre isso.

O que é desenvolvimento de back-end?

O front-end envolve o que um usuário vê na tela quando abre um URL específico de sua propriedade. Mesmo em um ambiente completamente estático (com apenas HTML / CSS), quando alguém abre um site, algum servidor do planeta precisa responder a você com esses arquivos HTML e CSS. Esse servidor nada mais é do que apenas um computador, exatamente como o que você usa para navegar na Internet, com a óbvia exceção de que ele é ajustado para desempenho e não possui componentes desnecessários, como mouse ou teclado conectado, e fica com toneladas de outros computadores provavelmente em um data warehouse. Programar esses computadores de alguma maneira especial é chamado desenvolvimento de back-end.

Você pode pensar na idéia de por que o desenvolvimento de back-end é chamado de como é porque é executado nas costas do usuário. Apenas um visitante do seu site nunca realmente “acessa” o back-end completamente, eles apenas se comunicam com o servidor diretamente através de portas para acesso muito limitado (como a transferência de arquivos HTML / CSS) ou nem isso, enterrados em CDNs ou firewalls (como o Cloudflare )

Agora que temos um entendimento bruto do que significa desenvolvimento de back-end, vamos entrar em real questões.

O conhecimento de programação de front-end é necessário para o back-end?

TLDR; Não.

O desenvolvimento de back-end, como mencionado acima, é apenas a programação de um computador, provavelmente do outro lado do planeta, responsável por responder ao que os usuários dizem de seus próprios computadores. Se você é um desenvolvedor de back-end em tempo integral, não precisa se preocupar com o que há dentro dos arquivos HTML, CSS e JavaScript que você envia para o navegador do usuário. Em vez disso, você deve se concentrar mais no desempenho do servidor, no código do servidor e na taxa de transferência.

O que se passa no desenvolvimento de back-end?

Bem, seguindo os livros, você pode dizer que uma pessoa que codifica um aplicativo que pode responder a solicitações HTTP pode ser considerada um desenvolvedor de back-end. Mas, na realidade, às vezes os desenvolvedores de back-end são capazes de fazer muito mais do que apenas escrever scripts de servidor. Eles têm o conhecimento para configurar servidores proxy reversos (NGiNX / HAProxy), habilitar a compactação e outras formas de acelerar o site, configurar um ambiente de docker de produção.

Para se qualificar como desenvolvedor de back-end, eu diria que as habilidades mínimas necessárias são:

  1. Bons conhecimentos sobre uma linguagem de programação na qual você pode escrever servidores HTTP. Exemplo: C #, Java, Nó, PHP, Python, etc. (existem muitos!)
  2. Gerenciar para hospedar usando cPanel (tradicional) ou usando o terminal bash (hospedagem em nuvem / tradicional)
  3. Trabalhando com VCS (Version Control Systems) como o git para gerenciar e implantar builds

Assim como todo jogo vem com especificações mínimas e recomendadas, para desenvolvedores de back-end, minhas especificações recomendadas seriam (incluindo as habilidades mínimas):

  1. NGiNX para ativos de arquivos estáticos e gerenciamento de servidores
  2. Habilidades de gerenciamento de banco de dados (SQL / NoSQL)
  3. Segurança de back-end (gravação de código seguro e robusto, execução de aplicativos em contêineres de docker com privilégios limitados, proteção contra ataques DoS)
  4. Escalonamento automático / balanceamento de carga

Tudo bem, falar demais sobre o que é necessário para o desenvolvimento de back-end. Mas como você se torna um?

Comece com os requisitos mínimos

Como eu disse, no back-end, assim como nos jogos, temos um conjunto de requisitos mínimos e recomendados. O requisito mínimo consiste em três coisas:

Aprenda um conhecimento de programação de back-end

Quando as pessoas aprendem sozinhas, quase todas elas não têm uma equipe ou qualquer pessoa que possa fazer desenvolvimento de front-end. Eles são todos por conta própria. Portanto, muitas vezes você precisa criar páginas da web e servidores sozinho, pelo menos no começo. Embora existam muitas opções para linguagens de programação de back-end, e não consigo pensar em nenhuma linguagem de sistema popular que não suporte servidores HTTP imediatamente, escolha Node como uma vantagem de que suas habilidades em JavaScript de front-end são transferíveis para o back-end.

No entanto, você pode escolher entre uma variedade de linguagens como Java, C ++, C #, Python, PHP, etc.

Como você escolhe um? Você pode perguntar. A resposta é a mesma, como foi no artigo de desenvolvimento de front-end. Você precisa tentar tudo inicialmente e ver qual deles clica melhor com você. O nó é fácil, pois você já deve ter feito a programação JS para o frontend, enquanto que, se você é um desenvolvedor de Python ou Java, pode encontrá-los facilmente. Depende da sua profissão e gosto completamente.

Aprenda sobre o gerenciamento de hospedagem

Longe vão os dias em que você terá que comprar servidores manualmente e configurá-los em sua casa, conectar-se ao seu ISP, fazer tudo isso sozinho. Esta é a era da computação em nuvem. Agora, ao hospedar seu site, você tem basicamente 2 opções:

  1. Indo para servidores de hospedagem gerenciada como HostGator ou GoDaddy.
  2. Indo para provedores de hospedagem em nuvem como GCP, AWS ou DigitalOcean.

Qual é a diferença entre os dois? Nos dois casos, os servidores pertencem e são operados pelas respectivas empresas. Mas a principal diferença é que o primeiro é mais amigável à interface gráfica do usuário, possui um rico conjunto de ferramentas para ver o sistema de arquivos, ver o uso, gerenciar seus e-mails de domínio oficiais, carregar / baixar arquivos do servidor, basicamente uma configuração para pessoas com menos habilidades técnicas . Por esse motivo, não recomendo sites gerenciados como HostGator ou GoDaddy para desenvolvedores experientes, mas pode ser uma boa plataforma cometer erros e aprender com eles, principalmente porque você costuma ter planos pré-pagos para eles, uma interface agradável para gerenciar coisas e não permitir que você atinja acidentalmente suas contas.

Mas quando você começa a ganhar velocidade, é seriamente recomendável mudar para um provedor de nuvem. Isso eliminaria todas as boas ferramentas que você tinha do cPanel usadas para gerenciar arquivos e pastas nos servidores, mas, ao mesmo tempo, desafiava você a aumentar bastante suas habilidades. Hoje, muitos fornecedores de nuvem também oferecem uma quantidade decente de teste gratuito, para que você possa experimentar a plataforma antes de entrar. Eu hospedo meu site para desenvolvedores – codedamn – no DigitalOcean e o acho em um equilíbrio ideal do site complexidade e recursos.

De qualquer forma, você pode escolher qualquer provedor de nuvem, é importante aprender a gerenciar o servidor usando apenas a linha de comando ssh’ing.

Aprenda sobre VCS

Existem outras soluções além do Git for VCS, mas é a mais usada e simples de entender. Como indivíduo, você pode não gostar imediatamente, mas entenderá por que é tão importante no momento em que começa a trabalhar em equipe ou em vários recursos simultaneamente em seu projeto. O Git permite gerenciar seu fluxo de trabalho usando confirmações e ramificações. Commits são como postos de controle na sua base de código – as que você sempre pode reverter se estragar. Ramos são como realidades alternativas do seu projeto, onde algo completamente diferente poderia acontecer. Essas realidades alternativas podem ser criadas a partir de qualquer ponto no tempo e podem ser mescladas novamente a qualquer momento. Se essas realidades puderem ser mescladas à compatibilidade, tudo bem, caso contrário, se houver um conflito (como se você está vivo em uma realidade e morto em outra), é necessário fazer uma escolha manualmente. Outras alterações seriam mescladas automaticamente.

O Git é super interessante e, quando você se apega a isso, convém usá-lo em todos os projetos, simplesmente porque mantém um histórico do seu trabalho de maneira eficiente (compacta e armazena apenas a diferença entre confirmações) . Também permite criar repositórios git online em sites como o GitHub, que atua como uma fonte central de verdade para o seu site. Sites como o GitHub podem ser configurados com webhooks especiais que podem realmente atualizar seu site sempre que você adiciona um novo ponto de verificação (uma nova confirmação) sem precisar ir manualmente ao servidor e atualizá-lo.

Eu acredito muito em aprender fazendo. E a melhor maneira de fazer algo surge por necessidade ou interesse. Depois de se considerar suficientemente bom com os requisitos mínimos, é hora de adquirir as habilidades recomendadas. Isso inclui todas as ferramentas como Docker e NGiNX mencionadas acima. DevOps também é uma parte que se encaixa muito bem com os desenvolvedores de back-end. Você poderia tentar explorar TravisCI ou CircleCI para implantações de compilação automatizadas. Integração e Implantação Contínuas (CI / CD) é um tópico que pode levar toda outra postagem de blog, por isso não vou entrar nisso. De fato, uma vez configurado corretamente, você economizará uma quantidade ridícula de tempo de desenvolvedor!

Em seguida, vêm os bancos de dados, que são colocados nas habilidades recomendadas, embora você precise de bancos de dados para praticamente qualquer aplicativo que envolva algum tipo de persistência de dados gerada pelo usuário. Os bancos de dados geralmente são fáceis de começar, mas são mais difíceis de manter e ajustar adequadamente. A melhor maneira de começar a trabalhar em uma pilha de tecnologia de back-end é reunir tudo em um único servidor – o código do seu aplicativo, os servidores de proxy reverso, o banco de dados etc. Então, à medida que você se torna mais competente em cada coisa, pode desacoplar a partir da lógica comercial existente. Ao fazer isso, você está ativando uma arquitetura que pode ser altamente dimensionada. Um aplicativo intensivo em operação de banco de dados pode ter uma solução otimizada para bancos de dados, um site vinculado a tráfego pesado deve ter um bom mecanismo CDN para descarregar ativos estáticos e assim por diante.

Conclusão

Há muito o que aprender, mas bem viável se você não desistir.