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

Síndrome do Impostor antes mesmo do primeiro emprego (Pode um negócio desse?)

Faz 5 anos desde a minha primeira linha de código, no início da pandemia. E isso foi quando eu tinha 14 anos e nenhum compromisso com o futuro.

Hoje, com 19 anos, tive uma única esperiência de estágio na escola profissionalizante que fiz o ensino médio. Essa falta de experiência real com desenvolvimento me fez desenvolver uma profunda insegurança incômoda no fundo da minha mente, como um backdoor vigiando todas as minhas ações esperando para me expor.

Acabei de ver um vídeo do Augusto Galego onde ele fala suas experiências lutando contra a sindrome do impostor e que me motivou a escrever isso.

Proposta

Quero seguir o conselho dele e levantar evidências do que sei, e até mesmo das que não sei ainda, como uma forma de bypassar a emoção que cultivei por todo esse tempo com a razão e possívelmente com feedback de você que está lendo.

Vou listar todos os conhecimentos que tive que dominar para chegar onde estou e ser minimamente capaz de resolver problemas com programação.

Lógica de Programação

Toda a nossa área se resume a construir um algoritmo, uma lista de passos que o computador deve tomar, que resolva um problema.

  • Usamos funções imperativas que realizam ações como print()
  • Usamos estruturas de escolha para lidar com fluxos diferentes de ações, como lidar com ações do usuário: KeyboardListener em jogos ou um simples input().
  • Usamos estruturas de repetição para repetir fluxos inteiros de ações e possivelmente extender o fluxo maior.
  • Usamos funções como uma forma de isolar partes do algoritmo que são um algoritmo por si só.

Banco de dados

Agora temos um algoritmo que pode realizar ações de maneira complexa e não linear. E isso é muito útil para processar dados e retornar algo, como uma transformação daquela entrada, ou uma análise acerca dela. Contudo, na maioria dos casos seria inútil se não pudessemos guardar o resultado daquela computação, como uma simples calculadora. Então é necessário um armazenamento local, quando o computador funciona isolado ou com uma pequena rede de computadores.

Imagino que a necessidade de bancos de dados deva ter sido criado para resolver o problema de organizar o acesso de múltiplos computadores a dados armazenados de forma persistente(durável), isolada(sem afetar o acesso de outros) ou até mesmo escrever novos dados. Fiquei com preguiça de encaixar ACID em texto coeso

Pulando toda uma história que, para ser honesto, eu não conheço, chegamos aos bancos de dados relacionais. Não basta ter acesso aos dados, precisamos também saber o quê ele é:

  • De onde vem
  • De quem é
  • Junto de quais dados ele foi criado
  • Qualquer informação útil sobre aquele dado

Agregamos os dados relacionados em uma entidade (row). Identificamos a entidade de forma única (primary keys). Linkamos com outras entidades do mesmo tipo ou tipos diferentes (foreign keys). Junto com tudo isso vem o SQL (Linguagem de Consulta Estruturada) para consultarmos o banco de dados sobre dados existentes ou a serem armazenados. Meu conhecimento teórico termina com INNER JOIN que também é até onde eu fui na prática.

Cliente-Servidor

As redes de computadores ficaram cada vez maiores e mais complexas. Me refiro a rede mundial, a famosa internet. Não vou tentar narrar uma história que não presenciei e nem pesquisei. Me limito a descrever o funcionamento:

  • Um cliente manda uma requisição de um serviço. Por isso se chama cliente.
  • Um servidor disponibiliza o serviço, que na maioria das vezes é uma forma tratada dos dados de um banco de dados.
  • Um distribuidor de carga divide o trabalho entre os servidores, quando são mais de um. Isso parece ser comum quando o serviço a ser feito é simples e pode ser feito isoladamente por máquinas relativamente fracas e criadas aos montes de acordo com a demanda.
  • Redes de Entrega de Conteúdo (CDN) que ficam com o trabalho de distribuir dados guardados em cache e que não precisam estar atualizados em tempo real com o banco de dados. Elas reduzem a carga dos servidores e aumentam a velocidade da entrega.

Agora sendo mais específico sobre páginas web. Páginas requisitadas pelo client podem ser estáticas, sendo montadas no backend e entregues da mesma forma para todos, podem ser dinâmicas, sendo alteradas com interações do usuário. Existem também as Single-Page-Applications que não conheço muito.

O servidor pode estar servindo páginas com informações sensíveis, e é importante que exista uma forma de autenticar a identidade do usuário e se ele tem permissão de acessar aquela informação.

Com isso listei todas as coisas que sei e que sei que não sei.
Talvez eu tenha esquecido de mencionar algo. Me diga o que faltou falar. O que eu não sei que não sei?

Guia Prático

Aprender a usar if...else, while, for, function.
Aprender a declarar variáveis, estudar sobre tipos primitivos e compostos:

  • Caracteres
  • Inteiros
  • Floats
  • Booleanos
  • Strings
  • Arrays
  • Structs
  • Objetos

Fazer uma calculadora no terminal foi um trabalho que tive que fazer no meu primeiro semestre na faculdade de Eng. Computação. Usei quase tudo que citei para isso.

Aprender sobre request e response, sobre verbos HTTP, API Rest, portas.
Aprender SQL e como criar um banco de dados em MySQL, PostgreSQL e SQLite.
Aprender o que é localStorage, sessionStorage e cookies.

Isso é muito útil na hora de fazer um SaaS ou qualquer aplicação web.

Estou precisando disso para fazer minha agenda pessoal.

Meus próximos passos serão estudar sobre DNS, internet de maneira geral. Entender sobre deploy e hospedagem para assegurar a disponibilidade do serviço.

Conforme construo projetos reais, o esperado é que problemas se apresentem e com eles suas possiveis resoluções. Imagino que em seguida vou procurar saber o que é CI/CD. Aprender sober SPA, NextJS e React.

Estruturas de Dados parece ser bem interessante, mas parece algo bem distante do que precisei usar até agora. Talvez meus problemas sejam muito simples?

Concluindo

Eu havia formado um nó bem grande na minha cabeça sobre os meus próximos passos, mas na hora de passar pro papel eu nem sei direito os próximos passos, não veio nada a mente. Olhando em retrospectiva, desperdicei anos de "estudo" com bobagens e não construí experiências resolvendo problemas reais. Comecei recentemente a analisar de forma crítica meus passos atuais e futuros e minha mente está clareando e o que devo fazer é óbvio.

Em que momento da sua carreira você está? Ainda é um estudante como eu?
Já trabalha a algum tempo?

Me sinto como um pequeno sapo escalando a parede do poço. É uma sensação de que não estou chegando a lugar nenhum, mas com a esperança que um céu deslumbrante está para surgir.

Carregando publicação patrocinada...
2

Cara, muito interessante o seu relato. Passei pela sindrome do impostor no meu primeiro estágio e felizmente a equipe entendeu e foi me ajudando.
Atualmente estou desempregado, mas já tenho alguns anos de experiência, o que não me impediu de passar pela mesma coisa. Só consegui melhorar quando comecei a analisar com calma exatamente como você relatou (não vi o vídeo do Augusto) o que sei e o que ainda não sei. Já que você não tem absolutamente nada hoje, comece a criar um portfólio e comece a adicionar coisas lá, pode ser um projeto de faculdade, ou um projeto simples que resolva um problema de um familiar, de amigo etc. O importante é mostrar que você sabe.
Busque ter um roadmap claro pra saber onde está e onde quer chegar (o roadmap.sh é parada obrigatória nesse sentido)