O Basico da TI
10 minute read
Vamos entender o que uma aplicação precisa para funcionar e quais são as responsabilidades de profissões comuns da TI nesse contexto.
Arquitetura de uma aplicação
No mundo da TI utilizamos um termo que geralmente é associado com a construção da sua casa: arquitetura
.
Apesar de representar coisas diferentes, o propósito é o mesmo. Precisamos conseguir demonstrar como os elementos que compõem um projeto vão se tornar uma casa, ou no caso da TI, uma aplicação/software:
A arquitetura acima é uma versão bem simplificada de uma das possíveis formas de se arquitetar e implementar um website. Vamos explicar cada um desses elementos da esquerda para a direita:
Usuário e Navegador
Os usuários somos eu e você, aqui, lendo esse artigo. Nesse caso, isso significa digitar no navegador do computador ou do celular (Google Chrome ou Firefox, por exemplo) o website que deseja acessar. Exemplo nada imparcial de website: https://masgustavos.com
O papel do navegador, além de mostrar o website e de te permitir interagir com ele, é de te auxiliar no processo de comunicação entre o seu computador/celular e o Servidor de Frontend
. Isso porque o navegador sabe onde procurar o “endereço” desse servidor, que é um IP
.
Servidor Frontend
Esse servidor é responsável por responder para o Navegador
com as informações necessárias para carregar e mostrar o website. Exemplos de informação são:
- Código HTML, Javascript, CSS
- Imagens
- Arquivos JSON
Com todos esses arquivos, o navegador é capaz de montar as páginas web que você vê e interage.
Servidor Backend
Muitas vezes, o Servidor de Frontend
não vai possuir todas as informações que são necessárias para o carregamento e funcionalidade do seu website. Isso porque geralmente queremos ver informações que são dinâmicas ou que dependem da nossa interação. Vamos ver um exemplo:
Quando estamos navegando num website de e-commerce (como Amazon, MagazineLuiza, etc.), uma funcionalidade muito comum e esperada é a de filtragem de produtos.
Para um site como o da Amazon, que possui milhões de produtos, seria inviável armazenar todas essas informações no Servidor de Frontend
. Por isso precisamos do Servidor de Backend
: ele vai interagir com o banco de dados que possui as informações desses milhões de produtos e filtra-los para que o seu navegador só tenha que lidar com os produtos que você de fato quer ver.
Isso garante que o site será rápido e leve, contendo apenas informação imediatamente útil para quem está navegando.
Banco de Dados
Esse é o lugar apropriado para armazenar um grande volume de informações. Existem várias maneiras de estruturar os dados, com o mais comum sendo em tabelas, como mostrado na imagem acima.
Seguindo nosso exemplo de uma loja online, um banco de dados teria tabelas como:
- Usuários: Uma tabela para armazenar os dados da sua conta, como seu email, nome, endereço
- Produtos: Para armazenar nome, marca, categoria, preço, cor, etc.
- Pedidos: Quando uma compra é feita, é essencial que a loja armazene informações como data da compra, valor pago, produtos comprados, usuário que realizou a compra, desconto no carrinho, numero do pedido
Com essas três tabelas, é possível realizar uma consulta no banco de dados utilizando o Servidor de Backend
para determinar quais foram os Pedidos
realizados e os Produtos
comprados por um Usuário
nos últimos 3 meses, por exemplo.
Profissões comuns da TI
A arquitetura acima é apenas um exemplo MUITO simplificado dos componentes necessários para fazer um website funcionar, mas ele já nos da dicas sobre quais são as áreas de atuação de profissões que vemos recorrentemente.
Desenvolvedor Frontend
“Frontend” pode ser entendido como aquilo que é visto pelo usuário final. É o site, o aplicativo, o software, o dashboard, a planilha. Logo, o desenvolvedor frontend é aquele que consegue programar e criar essas aplicações.
Esse profissional precisa ter um conhecimento sólido da famosa tríade de ferramentas para aplicações web:
- HTML: arquivos .html são interpretados e renderizados pelo navegador, estruturados de forma a organizar o conteúdo do site em blocos, também chamados de tags ou elementos;
- CSS: arquivos .css são responsáveis pelo estilo e apresentação dos elementos estruturados pelo HTML, como background, cores, layouts, espaçamentos, e animações;
- Javascript: Arquivos .js (no contexto do navegador) nos permitem reagir às interações que fazemos com os elementos do nosso site, como clicar em um botão ou filtrar uma tabela.
Como muitas das tarefas necessárias para construir um website são repetitivas e reutilizáveis em diversos casos, existem MUITOS frameworks para criação de aplicações web.
💡 Framework é um conjunto de técnicas, ferramentas ou conceitos pré-definidos usados para resolver um problema de um projeto ou domínio específico.
Considerando que existem quase 2 bilhões de sites no mundo e que eles vêm sendo construídos desde os anos 90, não é uma grande surpresa existirem tantos frameworks. Alguns dos mais comuns atualmente são:
E se quiser uma lista extensa e atual, pode dar uma olhada no https://ossinsight.io/collections/javascript-framework/.
Podemos dedicar um livro para o processo de escolha do framework ideal, ou para definir qual é o melhor. O resumo é que depende da complexidade do projeto, da cultura da empresa, das tecnologias que já estão em uso, do conhecimento dos profissionais com mais senioridade, e muitos outros fatores.
Por fim, esse profissional precisa dominar e entender como a sua aplicação vai se comunicar com outros serviços. Hoje a forma mais comum de ser fazer isso é por meio de APIs (Application Programming Interfaces).
É muito comum o Servidor Backend
ser uma API, já que o propósito é o mesmo: fazer a conexão entre quem contém a informação e quem precisa dela:
As palavras GET
e POST
representam funcionalidades de API que server para obter (get em inglês) ou enviar (post em inglês) informações. Logo, quando queremos obter produtos da categoria televisão, podemos realizar a requisição GET /produtos/categoria/televisao
. A mesma lógica utilizada em APIs para obter dados do banco de dados, pode ser utilizada na aplicação frontend para uma informação específica. Comece a observar quando estiver navegando em websites o que vêm logo após o domínio.
Meu domínio é masgustavos.com
, o que vem depois dele é chamado de caminho, ou path em inglês:
Na URL acima observamos:
- Protocolo:
https://
- Domínio:
www.masgustavos.com
- Caminho:
docs/carreira
O desenvolvedor de frontend precisa entender como interagir com APIs para armazenar e obter informações de forma eficiente e coerente com o comportamento e necessidade do usuário, o que demanda o entendimento de protocolos de comunicação como HTTP, Websocket e GraphQL.
Desenvolvedor Backend
“Backend” pode ser definido como aquilo que o usuário final não vê ou interage diretamente. Como mostrado acima, pode ser a API que interage com um banco de dados, ou um software que é responsável por processar suas compras e criar recomendações de produtos para a próxima vez que você visitar o website.
O profissional de backend tende a ser menos generalista que o de frontend. Recomenda-se que você seja muito bom em uma linguagem de programação e bom o suficiente nas demais para que você possa se comunicar com diferentes áreas de negócio e times trabalhando em outros serviços dentro da sua empresa.
Linguagens comumente utilizada no backend ou para criação de software são:
E se quiser uma lista extensa e atual, pode dar uma olhada no https://ossinsight.io/collections/programming-language.
Como desenvolvedor backend você pode ir além de APIs e implementar bancos de dados também. Esses bancos por sua vez podem ser utilizados por “serviços” ou “microserviços”.
A palavra “serviço” é comumente utilizada para fazer referência a uma aplicação de backend.
O termo “desenvolvedor backend” geralmente se refere a quem desenvolve software a ser consumido por outras aplicações. Quando removemos o termo “backend” e deixamos apenas o “desenvolvedor”, suas responsabilidades podem ir muito além de servir dados a aplicações de usuários finais.
É aqui que você tem a liberdade de se envolver com tecnologias de inteligência artificial, softwares de trading de alta frequência, ou qualquer outra coisa que sua imaginação permitir!
Profissionais de Dados
Existem inúmeras profissiões relacionadas ao armazenamento, tratamento, estudo, obtenção, inferência e qualquer outra coisa que você imaginar possível quando se trata de dados.
Dentre os vários cargos e nomenclaturas, uma coisa é certa: saber de tudo um pouco é muito benéfico.
Assim como a área de programação, esses profissionais se beneficiam muito quando entendem do contexto e motivações dos seus pares, como:
- Engenheiro de Dados (Data Engineer)
- Analista de Dados (Data Analytics)
- Cientista de Dados (Data Scientist)
- Engenheiro de Análise (Analytics Engineer)
Desde já, fique ciente que você pode zoar todos esses profissionais, porque no fim o CEO/Diretoria vai querer uma planilha no excel.
Analista de Dados
Utiliza ferramentas de visualização e linguagens de consulta (Como o SQL por exemplo) para agregar informações e tirar conclusões a partir dos dados e eventos armazenados de uma aplicação. Seu trabalho ajuda a informar tanto equipes técnicas quanto de negócio sobre a performance de vendas, operações e produtos para ajudar na tomada de decisões.
Você verá um analista de dados fazendo dashboards e relatórios com ferramentas como:
💡 Tanto o Superset quanto o Grafana são ferramentas Open Source, oque significa que o código utilizado para cria-las é aberto ao público e você consegue utiliza-las gratuitamente!
A boa e velha planilha em Excel ou no Google Sheets também estará por tempo indeterminado na vida de quem precisa fazer analise de dados. Seja por demanda do trabalho em si ou seja por demanda de quem pede e consome a análise.
Quando se trata de programação o analista de dados precisa ser MUITO BOM em SQL.
SQL (Structured Query Language) é uma linguagem de consulta, ou seja, é com ela que os profissionais de dados interagem com bancos de dados relacionais. Bancos de dados relacionais são aqueles que estruturam os dados em tabelas e criam relações entre elas. Por exemplo: Um banco pode possuir uma tabela de usuarios
e uma tabela de pedidos
, e uma relação é estabelecida ao armazenar na tabela de pedidos
qual usuario
o realizou:
Perceba que todo usuário tem um usuario_id
, sua identificação. Essa identificação é única e é adicionada na tabela de pedidos para saber qual usuário fez o pedido, sem precisar armazenar suas informações de forma duplicada.
Se quisermos retornar a informação de pedidos junto com as informações de usuário realizamos uma operação de SELECT
com JOIN
no SQL, utilizando o usuario_id
:
-- Consulta para retornar todos os pedidos juntamente com o
-- nome e o email do usuário que fez cada pedido
SELECT
pedidos.pedidos_id, -- ID do pedido
usuarios.name, -- Nome do usuário que fez o pedido
usuarios.email, -- Email do usuário que fez o pedido
pedidos.pedido_data, -- Data do pedido
pedidos.valor -- Valor do pedido
FROM
pedidos -- Tabela `pedidos`
JOIN
usuarios -- Tabela `usuarios`
ON
-- Condição de junção: corresponde o `usuario_id` em ambas as tabelas
pedidos.usuario_id = usuarios.usuario_id;
- SELECT: Descreve quais colunas você quer obter a partir da junção das tabelas
- FROM: Escolhe qual tabela é para ser utilizada como base para a junção
- JOIN: Determina qual tabela deve ser comparada para a junção
- ON: Define qual é a condição para junção das tabelas
A maioria dos comandos SQL podem ser utilizados em qualquer banco de dados relacional. Alguns exemplos são:
O analista de dados também utiliza linguagens como o Python
e o R
para fazer análises de forma programática e/ou repetitiva. Por exemplo:
Se a área de vendas de uma empresa gera um arquivo .xlsx
toda semana e a estrutura dele não muda, podemos criar um script Python
para gerar gráficos e extrair informações de forma automatizada, evitando o trabalho manual de analisar as informações dentro de uma ferramenta como o Excel
ou o Google Sheets
.
Engenheiro de Dados (Em construção)
Desenvolve os processos e as aplicações que serão responsáveis por orquestrar, armazenar e disponibilizar os dados para os analistas e cientistas de dados. Pode também atuar na criação da infraestrutura, como criação e design de bancos de dados e orquestradores. Seu trabalho garante a disponibilidade e a organização dos dados, além de definir os fluxos de informação.