Tecnologia para não tecnologistas

Adriano Croco
Transforma Pravaler
7 min readApr 27, 2021

Olá!

Recentemente eu rodei uma pesquisa no LinkedIn perguntando para minha rede sobre quais os tópicos que geravam mais dúvidas relacionados a tecnologia. Caso queira preencher esse formulário para me ajudar a produzir conteúdos futuros, o link se encontra aqui.

Com os insights obtidos, pretendo escrever uma série de artigos sobre tech direcionados a profissionais das mais diversas áreas. Espero que ajude você que me lê a entender que existe muita coisa legal sobre o assunto e não é algo tão complicado quanto alguns querem fazer parecer.

Tá, mas e agora? Por onde começamos?

Que tal pelos 75% que responderam: "Não sei nem o que eu não sei" quando questionados sobre o que sabiam sobre tecnologia?

Vamos começar pela atuação do profissional de tecnologia nas empresas. Para tal, vamos começar da unidade mais fundamental de separação entre atuações diversas: hardware e software.

Hardware: para se executar o ato de computar, é necessário uma máquina capaz de tal feito. Ou seja, são necessários processadores, discos rígidos e pentes de memória. Juntando todos esses componentes, temos vários tipos de computadores diferentes, como desktops, notebooks, servidores e equipamentos utilizados na confecção de redes de computadores, como switches, firewalls, routers e afins. Dentro desse ecossistema, é possível encontrar profissionais que projetam fisicamente esses componentes (ex: engenheiros da computação), como pessoas desenvolvedoras que escrevem sistemas para serem executados nesses dispositivos, bem como vendedores, treinadores e demais carreiras possíveis relacionadas a ideia de se vender um produto físico. Ou seja, hardware é aquilo que você chuta quando não funciona.

Software: Os sistemas que controlam dispositivos, aeronaves, catracas, máquinas de processamento de cartões, contas bancárias, suas corridas de Uber, o navegador que você está utilizando para ler esse texto ou o próprio aplicativo do Medium, ou seja, todo e qualquer programa de computador que existe é chamado de Software. Se o hardware é algo físico e rígido, o software deveria ser algo flexível e passível de mudanças. A título de curiosidade, a facilidade de modificação é um dos indicadores da qualidade de um programa de computador. Ou seja, o software é aquilo que você xinga quando não funciona, dado a sua natureza digital e intangível.

Em termos de cursos de graduação, o engenheiro da computação estuda como se faz hardware. O cientista da computação estuda como se faz software. As demais variações de cursos de computação geralmente são uma espécie de ciência da computação simplificada + alguma área qualquer (geralmente algo relacionado a administração, gerenciamento de projetos ou algo similar).

Para ilustrar as possibilidades diferentes de atuação, vamos analisar a imagem abaixo:

Tipos de carreira dentro da área de tech

Os cargos relacionados a projetos, produtos ou relacionados a metodologias ágeis (ex: scrum master, product owner) dizem respeito a áreas correlatas, mas geralmente envolvem o quê deve ser feito pela equipe de tecnologia e por qual metodologia (seja Scrum, Kanban, etc). São encontrados perto da legenda Team-Based.

As carreiras no quadrante Highly Independent/Strong People Skills são profissionais que falam sobre tecnologia e sua complexidade, mas não constroem, seja DevRelations (que é uma espécie de marketeiro de fabricantes de tecnologia que falam somente para desenvolvedores) ou suporte técnico (que apesar de ajudar os usuários, geralmente não produz nem hardware nem software).

No quadrante superior esquerdo, estão os profissionais que atuam com tecnologia de uma forma que auxilie as demais áreas técnicas. Vamos a alguns exemplos: o analista de qualidade (Quality Assurance Engineer), é especializado em teste de sistemas (que é umas das formas de se garantir que o sistema funcione da forma correta), o administrador de sistemas ou o administrador de banco de dados (SysAdmin ou Database Administrador/DBA, respectivamente) fazem o que o nome diz, ou seja, administram sistemas e banco de dados, garantindo que funcionem, estejam atualizados e corretamente dimensionados, além de atuar em falhas e demais tarefas rotineiras de manutenção. Você não leva o carro para fazer manutenção preventiva? Com um sistema operacional e um banco de dados ocorre a mesma coisa, ou seja, o motor desses sistemas é o software rodando nos servidores. A entropia também ocorre em sistemas e servidores, por mais que não pareça, dado a natureza intangível de um software.

Os profissionais do quadrante inferior esquerdo são os profissionais que de fato constroem coisas. Seja programas e sistemas inteiros (Developers), estruturas de análise de dados e modelos de aprendizado de máquina (Data Scientists), práticas de segurança da informação (nessa área, encontramos profissionais que conhecem de ferramentas ou processos, além dos penetration testers… que são o que mais se assemelham a hackers remunerados nas empresas, pois são pagos para invadir sistemas e encontrar vulnerabilidades) e os profissionais de SRE (Site Reliability Engineering), que criam sistemas e automações para melhorar a confiabilidade dos sistemas em produção.

Aqui vale um disclaimer: Admin, Developer, Engineer e Analyst são nomes estéticos. No final é todo mundo analista de alguma sub-área específica. Esses títulos são o que são: alguns são mais bonitos que outros e só.

Uma outra divisão que causa muita confusão são aquelas relacionadas aos tipos de sistemas que uma pessoa desenvolvedora constrói:

Back-end: São profissionais especializados em construir os sistemas que ninguém vê, que fazem o processamento puro, como cálculos e regras de negócio. São esses os sistemas que você definitivamente xinga quando não funciona. Exemplos de tecnologias relacionadas: Java, APIs, Go, Elixir, C#, provedores de nuvem como: Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Docker e Kubernetes.

Front-End: A sub-área responsável por construir sites e interfaces gráficas que você — usuário — interage. Quando o back-end para de funcionar, são nesses sistemas que geralmente o erro aparece. São esses sistemas que você xinga quando estão feios ou difíceis de usar. Exemplos de tecnologias relacionadas: Angular, React, Vue, Javascript, e o próprio Google Chrome.

Full-Stack: Pessoa desenvolvedora que consegue atuar em ambas as áreas (seja back-end ou front-end).

Mobile: Responsável por aplicativos de celular. Seja para Android, iOS ou o finado Windows Phone. Tecnologias relacionadas: Java/Kotlin para Android. Objective-C e Swift para o ecossistema da Apple. A relação de Flutter, Dart, Ionic e React Native é com uma técnica de escrever um único código para rodar em ambas as plataformas de smartphones.

Embedded: Software que roda em hardware dedicado e especializado, seja Arduino, software de controles de drones ou o firmware da sua televisão, geladeira ou frigideira smart.

Existem mais algumas divisões, como desenvolvedores de banco de dados, sistemas operacionais e mais alguns outros nichos. Vou me abster de comentar para fins de brevidade.

Para finalizar, vamos entender o que é programação através de uma metáfora.

Vamos pensar que você tem uma caixa que pode ser movida nas quatro direções (para cima, baixo, esquerda e direita). Você tem acesso a um braço mecânico que pode movimentar a caixa nessas quatro direções através da execução de vários comandos inseridos através de botões que você aperta no controle do braço mecânico.

Agora pensa que você operou a máquina e ela moveu a caixa do ponto A para o ponto B usando a seguinte série de passos: para cima duas vezes, para esquerda uma vez, para cima mais uma vez e por fim, a direita. Isso pode ser representado de forma gráfica da seguinte forma:

Representação gráfica do movimento da caixa, em passos

As setas são os movimentos do braço mecânico e os retângulos amarelos representam a caixa em diferentes pontos no tempo.

Esse conjunto de instruções executadas pelo braço mecânico chamamos de algoritmo. Se você observar bem, é possível realizar a mesma mudança de posição da caixa com menos passos, basta mover a caixa 3x para cima, certo?

Os cientistas da computação gostam tanto de pensar sobre isso que existe toda uma disciplina dentro dessa área chamada análise de algoritmos. É possível, inclusive, representar algoritmos em uma notação própria. Isso se chama Big-O Notation. E sim, mover 3x para cima é uma algoritmo mais eficiente que o da imagem.

Agora troque o controle do braço mecânico por comandos em texto, que são executados por um processador. Esse texto no mundo real se chama linguagem de programação, ou seja, ficaria algo parecido com isso:

Como que ficaria o código de mover a caixa em uma linguagem de programação de verdade

Uma linguagem de programação nada mais é do que uma forma específica de mandar o computador fazer alguma coisa. A partir daqui, é possível fazer um exercício de imaginação e pensar que, assim como português é diferente de espanhol e francês, mas vieram de uma mesma raiz linguística (Latim), o mesmo acontece com linguagens de programação:

Genealogia de algumas linguagens de programação

Ou seja, a linguagem C está para C#, C++ e Java assim como o latim está para o português, francês e espanhol.

Agora coloque essas diferenças na mão de pessoas desenvolvedoras e os veja brigarem por coisas pequenas, como: qual a forma correta de colocar espaços em branco no começo de cada linha de código? Usar a tecla Tab ou usar 4 espaços?

(Sim, isso existe).

Você gostou do conteúdo e gostaria de fazer mentoria comigo? Clique aqui e descubra como.

--

--