# Introdução a Back-end;
## Lembretes
Estamos, tanto eu quanto Pablo e a todas as outras pessoas desenvolvedoras do curso muito viciadas em nossas próprias expressões. A gente vai falar as vezes várias palavras diferentes que fazem muito sentido pra gente que tem um pouquinho mais de experiência e nem tanto pra quem está começando. Quando isso acontecer, nos sinalize. Grite: 'Nícolas, você tá viajando. Não sei nem o que isso significa', 'Pablo, me mande a receita do Pão de queijo'. É bem possível que a sua dúvida seja a dúvida do seu ou da sua colega. E a dúvida dela ou dele seja sua futura. Então, quando não entenderem algo, sinalizem.
## O que é ser uma desenvolvedora back-end?
Falamos na aula inaugural que teremos aula de lógica, soft-skills, back-end, front-end. Que o curso tem um aspecto full-stack.
Back-end. Front-end. Full-stack. Regra de Negócio. Negócio.
Palavras que pra muitos de vocês é bastante nova.
Quando utilizamos a palavra `Negócio`, entendam como uma atividade-fim. Então, vamos imaginar em negócios desde negócios de fato: lojas, clínicas, e etc. Mas podemos imaginar isso também como uma lista de regras aplicadas algo específico, como regras que definem um jogo de volei, por exemplo.

Para cada uma das ações dentro do jogo, possuem regras que viabilizam e fazem o jogo realizável.
Além dessas a gente vai falar sobre `Regra de Negócio`. Regra de negócio é a forma de como fazer negócio. É a lista de regras que fazem de um negócio viável.
Então, como primeiro exercício mental, vamos imaginar que queremos montar uma loja física.

Queremos vender algum produto. O que vocês imaginam ser a regra de negócio de uma loja de roupas, por exemplo?
1. A mais óbvia seria o processo de vender uma roupa a um preço que nos dê lucro.
Mas as regras que permitem um negócio funcionar vão além disso. Mas precisamos ser ainda mais óbvios. Quando estivermos trabalhando com os computadores, teremos que ser óbvios, muito óbvios.
A segunda regra é que exista pelo menos um produto disponível a visão do cliente.
Mas a regra acima não diz muita coisa. Se a gente tiver só um produto, imagine ter apenas uma camiseta na vitrine. O cliente vai achar que estamos falindo. Então, a segunda regra poderia ser:
2. Que exista uma mínima quantidade de 30 produtos nas prateleiras.
Podemos imaginar como uma cadeia de alimentação. Para que exista sempre 30 produtos na prateleira, precisamos de mais regras.
3. Toda vez que diminuir a quantidade de produtos nas prateleiras, o estoquista deve repreenchê-las.
A gente poderia aqui listar uma infinidade de regras que fariam sentido dentro de uma loja. Na verdade, poderiamos fazer isso para qualquer tipo de negócio.
Em geral, back-end é responsável por aplicar lógica para satisfazer uma ou mais regras de negócios, porém esse processo não é exclusivo da gente. Os front-ends também precisam lidar com isso, mas em geral, seu trabalho está muito mais relacionado ao usuário. Nosso trabalho normalmente não é o mais visível esteticamente, estamos normalmente mais vinculados ao cérebro do nosso programa. Normalmente, nós ditamos as regras em como as coisas vão funcionar. Parece bastante poder, o que eu gosto bastante.
Agora como trabalho de casa, eu quero que vocês resolvem os seguintes problemas:
1. Quais as regras de negócios que estariam envolvidas em:
A. Uma clínica médica veterinária que atende apenas animais exóticos;
B. Uma empresa de logística que é responsável pelo transporte de encomendas;
A ideia nesses execícios é a gente listar sua cadeira de regras que fazem de cada um desses negócios, um negócio de fato.
```A gente pode ver que esse processo de entender Negócios e Regra de Negócio, eles são apenas nomes específicos para qualquer relação entre algo que pode descrito como uma listagem de regras para seu funcionamento.```
### O que é e não é *Back-end*
Alguém conhece uma pessoa que escolheu pela área de humanas na faculdade porque foi mal em uma prova de matemática na escola e decidiu que seria incapaz de aprender exatas? Se você não conhece, você É essa pessoa. Muita gente passa por um processo parecido ao escolher se tornar uma desenvolvedora back-end. Se você optou por ser back-end porque experimentou alterar estilo de uma página web, quebrou a cara, e a partir disso assumiu que você seria um péssimo front-end, vocë pode estar se precipitando.

A maneira mais simples de entender a função do back-end talvez seja da seguinte forma:
Imagine você, cliente, chegando em uma loja e procurando um conjunto de cadeiras para sua casa. Você veja uma na vitrine, acha-a linda, pede para o vendedor preparar para levar. Você não leva esse conjunto do mostruário, mas um dos conjuntos do estoque. Mas sabe-se lá Deus onde que esses conjuntos ficam guardados no gigantesco estoque. Caberia ao estoquista buscar e entregar ao vendedor essas cadeiras. Atuamos, nós, back-enders, como o estoquista nesse exemplo.
Os vendedores (aqueles que lidam diretamente com o cliente), atuariam como os front-enders.
Mas não estamos apenas nesse único papel. Imagine agora, que toda a folha de pagamento dos seus funcionários. O responsável na sua equipe de RH que valida todos os pagamentos seria também um back-end.
Não o suficiente, imagine agora todo o processo de montar os contratos para obter as mercadorias novas e que elas sejam reabastecidas. Back-end!
Eletricista fazendo manutenção na loja depois do horário comerial? Back-end!
Faltou material para embalar os produtos? Back-end!
Como vocês podem ver, somos incríveis. Desculpa aos front-ends.
<img src="https://media.giphy.com/media/1xpCa3dSI0S7n1KjuL/giphy-downsized.gif">
<br />
<br />
<br />
De uma maneira prática, não lidamos com os clientes diretamente. Somos responsáveis pela maior parte dos processos que não ficam visíveis de imediato. No entanto, *N-A-D-A* funcionaria sem a gente. Mas sem competições, okay?
| O que Back-end é/faz - Palavra-chave: dados | O que Back-end NÃO é/faz - Palavra-chave: visual |
| -------- | -------- |
|Torna aplicações dinâmicas|NÃO atua _diretamente_ no lado do **cliente** (mas acontece indiretamente, já que estamos em contato com o front e o front em contato com o cliente)|
|Manipula *dados* do usuário|NÃO desenvolve o visual das páginas|
|Conecta-se e manipula bancos de dados (em analogia, seria o estoquista)|NÃO lida diretamente com a interação do usuário|
|Envia e recebe informações (não exclusivo do back-end)|NÃO faz animações de menu abrindo (nem nenhuma animação)|
|Cuida da regra de negócio|NÃO desenvolve interface do usuário (UI)|
|Atua no lado do *servidor*. (Em nossa analogia, não lidariamos com clientes)|Tem seus códigos executados pelo **navegador**|
|Pode ser usado por múltiplas aplicações que tem a mesma regra¹|
|Tem seus códigos executados por um **servidor**|
Uma das características de se tornar uma pessoa desenvolvedora back-end é tentar traduzir cada objeto do mundo em forma de regras.
## Por que somos desenvolvedores Backend?
- **Pablo:** Como disse na aula de ontem, sou bem generalista². Então é comum pra mim ter interesse em partes diferentes do desenvolvimento em momentos diferentes. Mas geralmente back tem algumas coisas que se aproximam mais do meu jeito de pensar:
- prefiro me preocupar com questões como garantir que os dados inseridos pelos usuários são válidos;
- implementar processos que acho mais desafiadores que construção de telas, como autenticação ou usar um serviço de outra empresa pra acessar e manipular informação;
- implementar regras de negócio complexas me interessa mais que implementar telas complexas, lutando contra o navegador e as telas de tamanhos diferentes.
- **Nícolas**: Da mesma forma que Pablo, eu sou também generalista², no entanto, eu acho que me tornei back-end apenas por acaso. As oportunidades foram aparencendo mais para esse lado e eu fui abraçando. Eu gosto de back-end porque eu acho em geral o código mais limpo de se ler, o processo lógico de você ler back-end para mim parece fazer mais sentido do que algo em front-end.
² Quando dizemos generalista, estamos nos opondo ao termo 'ser especialista em algo', isso quer dizer que a gente não tem um conhecimento muito profundo em apenas uma tecnologia, mas conhecemos várias tecnologias. É uma das formas de você lidar com sua carreira também.
### Exemplos do que pode ser o trabalho de um back-end
- Construção de Chat bots

<br />
<br />
| Responsabilidade de Back-end | Responsabilidade de Front-end |
| -------- | -------- |
| Define as regras de resposta para cada mensagem recebida, armazena as mensagens, interpretar e executar cada função desejada (ex: buscar número do pedido, estados do frete) | Aplicar cores, formas, padrões de letras (fontes), definir como funciona a experiência de enviar e receber mensagens|
¹O chat bot da Magazine Luiza, por exemplo, existe no app móvel e no website. Isso significa, então, que foram criados dois chat bots? Não! A funcionalidade (ou até mesmo a essência, a "alma") do chat bot é uma só: isso é o backend. Só a interface é refeita nas plataformas.
Referência para leitura: https://simple.nama.ai/post/lu-o-chatbot-da-magazine-luiza-que-e-queridinho-do-publico
- ECommerce

<br />
<br />
| Responsabilidade de Back-end | Responsabilidade de Front-end |
| -------- | -------- |
| Armazenar imagens dos produtos. Definir regras de compra. Definir quais produto estão disponíveis. Definir configurações de produtos. | Definir como os produtos serão apresentados ao usuário. Aplicar temas e fontes (formato da letra). |
- Serviço de Streaming de Vídeo

<br />
<br />
| Responsabilidade de Back-end | Responsabilidade de Front-end |
| -------- | -------- |
| Definir processo de upload. Definir como os dados serão armazenados e distribuidos. | Definir como será a experiência ao assistir um vídeo. Como será o processo escolher um novo vídeo para assistir |
- Rede Social

<br />
<br />
| Responsabilidade de Back-end | Responsabilidade de Front-end |
| -------- | -------- |
| Definir como vai funcionar o sistema de amigos e seguidores (quem poderá ver seu conteúdo). Definir regras de privacidade. Definir o comportamento o feed de atualizações (define regras) | Definir como será a experiência ao adicionar um novo amigo/seguidor. Definir como funcionará o feed de atualizações. (define visual) |
- Blog (Blogger, Wordpress, etc)

<br />
<br />
| Responsabilidade de Back-end | Responsabilidade de Front-end |
| -------- | -------- |
| Guardar as publicações/postagens; Permitir que o autor faça login; Gerar a estrutura dos links/URLs; Assegurar regras básicas (títulos com mínimo de 20 caracteres, por exemplo) *(manipulação e estruturação dos dados)*| Estruturar o layout da página; Organizar o conteúdo no lugar que deve estar; Oferecer lugar para o autor criar publicações e os leitores comentarem. (visual, interação direta com o usuário) |
### Do que se trata essa matéria?
A nossa meta pessoal é fazer com que você se torne uma pessoa desenvolvedora back-end.
Nisso envolve desenvolver algumas habilidades:
- Conseguir entender e criar regras de negócios;
- Conseguir desenvolver programas que correspondem à responsabilidade do que chamamos de servidor;
- Conseguir implementar alguns processos comuns no trabalho de um back-end (por exemplo: fazer operações de criação, leitura, atualização e remoção em um banco de dados, fazer um sistema de login);
- Conseguir entender e aplicar alguns padrões e boas práticas de programação;
- Conseguir entender o essencial de como funciona a web;
### Do que se trata este módulo?
Durante as próximas aulas que constituem esse módulo vamos aprender sobre um dos principais assuntos quando lidamos com sistemas de computadores que é banco de dados.

Vamos entender o que são dados e banco de dados. Porquê utilizamos dessas ferramentas para armazenar dados. Vamos também entender quais são as ferramentas que podemos utilizar para manipular esses dados. Vamos aprender a linguagem de consulta SQL.
Nosso módulo está separado em quatro grupos:
#### 1. Armazenamento e Manipulação de Dados
Nosso tópico inicial, vamos passar por entender o que são dados e banco de dados. Como esses dados são armazenados e como a gente pode manipulá-los. Entenderemos sobre como funciona várias expressões novas e junto com uma nova linguagem, a SQL.
#### 2. Tipos de Dados
Vamos entender que cada dado para seu bugalho. Cada dado tem tipos, ou melhor, um formato específico. Vamos aprender sobre como armazenamos diferente tipos de dados e como utilizamos o melhor deles. A ideia básica é simples: alguns dados são números, outros são texto, alguns são datas, por aí vai.
#### 3. JOINS (Junções de Tabelas)
Vamos passar pela habilidade de lidar com múltiplas tabelas de vez. Afinal, ninguém vive apenas com uma tabela: na vida real, todos dados podem se relacionar de algum jeito. Vamos entender o porque disso, e como manipulamos essas informações.
#### 4. Práticas e mais práticas.
Para entender bastante tudo isso, a gente vai trabalhar com vários `datasets` (conjunto de dados), um montão deles, pra gente ficar manipulando dados, ver como esses dados são armazenados e tudo mais.
Boa parte dessas aulas estaremos fazendo exercícios. Buscando informações dentro de um banco de dados. Modelando um novo banco de dados. E vendo as coisas funcionarem.