Blog

Dentro da Matrix

date
Oct 17, 2023
slug
dentro-da-matrix
author
status
Public
tags
Aprendizagem
Carreira
Vida
summary
2º post de 4 sobre a mudança de carreira da psicologia para a tecnologia. Post mais técnico sobre os primeiros cursos, CS50 e o clássico Bootcamp de JavaScript.
type
Post
thumbnail
matrix.webp
category
Blog
updatedAt
Feb 5, 2024 12:00 PM

No episódio anterior…

Olá, meu nome é Tiago e esse é o segundo artigo da minha série de textos sobre minha transição de carreira da Psicologia para a Programação. Leia a partir do texto anterior clicando aqui. Ou não também, faça o que quiseres pois é tudo da Lei.
Na linha do tempo, estamos por volta de Maio e Junho de 2022, onde decidi arriscar e tentar algo novo. Tinha decidido começar a estudar como aprender programação por conta própria, e agora vou entrar em alguns detalhes técnicos. Mas a intenção do texto anterior continua a mesma: ser mais uma narrativa pessoal da jornada, com pensamentos e sentimentos a cada etapa. Bora então?

Links para os outros artigos

  1. Uma porta se abre
  1. Dentro da Matrix - Você está aqui!
  1. Afiando a lâmina
  1. Artigo #4 - Ainda não publicado

Dentro da Matrix

Assisti vários tutoriais de como aprender a aprender a programar. Tracei uma rota. Mas estava sem norte, e ainda não tinha entendido na carne uma verdade que é repetida várias e várias vezes dentro do mundo dos estudantes de programação: isso é uma habilidade, e habilidades se aprendem fazendo. Ninguém aprende a costurar, a trocar um pneu, só assistindo tutoriais - eles te ajudam até um ponto inicial. Mas em seguida, tem que pôr a mão na massa e pegar calo. Teoria e prática precisam andar juntas, porque prática sem teoria é ação sem sentido, e teoria sem prática é decorar conteúdo.
Para sair logo desse limbo chamado de Tutorial Hell, meu amigo me recomendou o lendário curso online de introdução à ciência da computação de Harvard, o CS50. Entrei no site, estudei a grade do curso, e me intimidei. Era em C, uma linguagem ancestral e conhecida entre os novatos por ser difícil. As tarefas eram criar programas e algoritmos que passassem em testes automatizados: ou seu programa estava correto, ou errado, sem meio termo. Num sentido pedagógico, é um programa bastante intimidador, porque ele pede de você dedicação, atenção e compreensão. Não adianta dar jeitinho. (Até dá pra achar respostas prontas e copiar, mas então, qual seria o sentido?)
Depois de engolir uma dose de coragem, decidi encarar e assistir a primeira aula, 2 horas e 28 minutos de aula carregadíssima de conteúdo. Mas…nada impossível de entender!
Simulador de gato peste
Simulador de gato peste
Impressionante, né? Eu que fiz a arte original também. Não deixe o tamagocat passar fome! Se não ele vai ficar miando (aviso: é bem alto).
Continuando essa introdução lúdica ao CS50, mas que foi bem útil pra ensinar os tijolos da lógica da programação, segui então com C estudando tipos de dados, operadores, condicionais, laços de repetição e como usar a linha de comando. Tudo básico, essencial, fundamental. Mas o mais importante: estruturado. Enquanto estivesse nos trilhos desse curso, sentia que sairia com uma competência muito maior do que quando eu entrei.
Qualquer medo que eu tinha do terminal, desapareceu depois desse curso
Qualquer medo que eu tinha do terminal, desapareceu depois desse curso
Os Problem Sets foram…severos, mas muito interessantes. Algumas coisas que acabei escrevendo:
  • Um algoritmo para minimizar o número necessário de moedas para devolver de troco em uma compra
  • Um editor de fotos por linha de comando, com as funções de espelhar horizontalmente uma imagem (invertendo a ordem dos bytes no eixo horizontal), além de filtro sépia e preto e branco usando laços de repetição duplos para percorrer uma matriz de bytes, alterando o esquema RGB
  • Um modulador simples de áudio, alterando volume.
  • Um identificador de genes em uma sequência genética: falando assim parece muito chique, mas é nada mais que um identificador de substrings em uma série de strings gigantes.
  • Um verificador ortográfico.
Isso tudo é só até a 5ª aula de 10. Na sequência, refiz alguns desses códigos em Python, e explorei o lado Web da programação usando Flask, HTML, JavaScript e CSS. Tive também minha primeira experiência consumindo uma API e fazendo um servidor simples.
Saí desse curso sentindo algumas coisas importantes. A primeira dessas, foi a alegria que o senso de competência me trouxe, confesso que fiquei um pouco viciado nisso. A segunda, é que eu sabia que essa competência só veio porque eu tinha feito coisas, não só lido ou assistido. A programação, num certo sentido, tinha sido desmistificada, e sentia que com dedicação e persistência poderia aprender qualquer coisa.
Foi também talvez um dos desafios mais difíceis que eu já enfrentei, intelectualmente falando. Senti como se tivesse sido jogado numa piscina funda para aprender a nadar. Não só não me afoguei, como peguei gosto pela coisa. Só que também cheguei a bater a cabeça na mesa. Também sonhei com o código, e acordei com a solução. Esqueci de comer porque um programa não funcionou, e um bug se tornou uma obsessão. Acho que fiquei um pouco “mais” maluco nessa época, chegou a ter uma noite que chorei de alegria quando consegui entender a solução. E isso tudo foram 3 meses de estudo incansável e obcecado. E quando terminei o CS50, senti na minha alma que era isso que eu queria fazer.
Terminando o CS50, estava pronto para dar um passo a mais engajado. Não queria seguir com mais cursos online soltos, sentia que precisava de mais estrutura. Estava disposto a investir, não apenas tempo. Nem só de curso grátis vive um autodidata, e eu queria algo que me colocasse mais próximo de competências que me orientassem para algo mais direcionado para empregabilidade.

Dentro do Bootcamp

Graças ao meu amigo (quem tem amigo tem tudo), pedindo orientação sobre próximos passos, ele me orientou ao Curso de Desenvolvimento Web da Gama Academy. Eu já sabia que precisaria abrir a carteira, então saquei tudo que tinha na minha poupança e investi. Já estava entrando num modo “tudo ou nada”, e o olhar era pro primeiro emprego na área, além do aprendizado que eu teria no curso.
E que curso interessante foi esse. Primeiro, completamente remoto, o que me obrigou a participar das aulas apenas por videoconferências, ou interagindo com o Slack (nunca tinha usado antes) com meus outros 50 colegas, usando mais o Trello, e assistindo a aulas pré-gravadas. A orientação do curso, pelo menos na propaganda que recebi, era que haveria uma “feira de empregos” ao final do curso, coisa que não vi acontecer, já pra adiantar uma certa frustração ao final.
Claro que o curso não foi perfeito e não quero tecer críticas ao curso nesse momento, mas acho importante mencionar isso mesmo que de relance porque muita gente que também trilhou esse caminho comigo saíram frustrados, ou sentiram que não aprenderam muito. Infelizmente a metodologia não funcionou pra muita gente. No geral, senti novamente que não basta só fazer o curso e pegar um certificado (que sozinho, não vale quase nada). Precisava fazer uma limonada com meus limões. Mas, vamos falar de coisas boas? Projetos!

Projeto 1 - Uma página web estática

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Após algumas aulas introdutórias, aprendi o básico de HTML, CSS, como trabalhar remotamente com GitHub e Slack, e recebi meu primeiro trabalho em grupo e virtual. A tarefa era seguir um guia de estilo recebido por um Figma, bem simples em princípio, mas extremamente trabalhoso, até porque foi feito com HTML e CSS cru e sem nenhuma biblioteca ou Frameworks modernos.
Uma das lições que tirei foi que: manipular Flexbox ou Grid na mão, com olhar pra responsividade, é…complicado.

Projeto 2 - Frontend e consumo de API

Como não temos mais acesso à API do curso, não tem muito a se mostrar fora o carrossel de imagens
Como não temos mais acesso à API do curso, não tem muito a se mostrar fora o carrossel de imagens
Tive o prazer de conhecer ótimos colegas nesse projeto, o Thiago Corrêa de Almeida (ele vai voltar no final!) e a Lilian Oliveira, onde nossa tarefa era usarmos JavaScript para fazer o consumo de uma API desenvolvida pela equipe da Gama Academy, fazendo as operações CRUD básicas, bem como estilizar a página com animações, como o que dá pra ver no carrossel. Foi bem interessante principalmente porque aprendemos muito uns com os outros, fazendo reuniões online e coordenando as features com os commits e o que cada um poderia fazer.

Projeto 3 - Servidor, banco de dados e design de API

notion image
Neste projeto, desenvolvido com a Cláudia Arai e Matheus Boneli, tive minha segunda experiência escrevendo um servidor (o primeiro foi um em Flask no CS50). Mas esse servidor tinha que ser muito mais robusto que aquele primeiro exercício. Envolveu MySQL, migrações, desenho de rotas e testagem das operações CRUD, e tive a chance de usar o Postman pela primeira vez. Eu aprendi muito com essa experiência, e fiquei muito feliz com esse exercício. Até então eu estava meio aberto ao que eu acabaria gostando mais, se seria o Frontend ou o Backend. Mas neste projeto, eu achei os desafios do Backend muito interessantes!
Importante destacar que esse projeto foi feito só com JavaScript, coisa que, olhando hoje com mais experiência de linguagens tipadas, me deixa arrepiado. Eu nunca mais vou fazer um servidor só com JavaScript puro, socorro.

Projeto 4 - Backend + Frontend = E-Commerce!

Mostrando a responsividade do site
Mostrando a responsividade do site
Esse foi nosso projeto final, um E-commerce de uma loja fictícia de produtos Nerds. Dividimos ele em dois grupos: eu junto com o Thiago (olha ele de novo) desenvolvemos o Backend, enquanto no Frontend, desenvolveram Gabriel Barbosa e Flávio Gatti Montefusco. Porém, agimos como pequenos times separados, onde traçamos um plano comum no início, e semanas depois de desenvolvimento, coordenamos a configuração do deploy do sistema na máquina de todos, e experimentamos um pouco com o deploy do servidor no Railway, já que o free-tier do Heroku havia deixado de existir a poucos meses.
Um pouco do Swagger em ação
Um pouco do Swagger em ação
No lado do Backend, Tiago e Thiago trabalharam dia e noite para desenvolver o servidor mais robusto possível para o nível que havíamos conseguido chegar no curso. Criamos um Modelo Entidade-Relacionamento (MER) para gerar a primeira versão do Banco de Dados com o MySQL Workspace, aprendemos sobre TypeScript, novas funções do Sequelize como nosso ORM, e como fazer relações complexas como a inserção de uma lista de itens e uso de algumas boas práticas para melhorar a arquitetura do servidor. Além disso, me orgulho de ter escrito minha primeira documentação de API via Swagger manualmente, o que foi ao mesmo extremamente trabalho, mas que acabei aprendendo muito!
E como resultado, nosso projeto foi o melhor avaliado dentre vários outros projetos incríveis! Esse momento é até hoje, para mim, ainda um pouco inacreditável.
E ganhamos um vale do iFood de prêmio risos
E ganhamos um vale do iFood de prêmio risos

Tempos de luta, tempos de glória

Esse período de 6 meses foi muito difícil. O curso não pedia que eu entregasse num patamar altíssimo de qualidade, muitas coisas acabei me impondo mesmo quando eu começava a pesquisar “qual seria a melhor maneira de fazer isso?”. Acabei me entendendo como alguém que sempre quis ir mais e mais longe, aprender aquilo que era difícil, saber fazer e me tornar alguém competente nesse mundo. Eu não estaria satisfeito se eu simplesmente não conseguisse debugar um problema, eu trabalhava horas até funcionar. O bug dos meus colegas eram meus bugs, e aprendi a me comunicar e coordenar o trabalho em conjunto com as equipes que me envolvi. Os projetos, muito mais do que as aulas, foram experiências incríveis. Algumas pessoas, espero poder trabalhar um dia junto novamente (pena que moro longe de todos!).
Foi tão difícil concluir o curso que, terminado ele, tirei pelo menos um mês de folga, e meu Abril foi relaxado. Não recomendo a ninguém a rotina que eu fiz, mas de alguma maneira, foi tudo tão interessante que consegui sustentar o interesse contínuo no curso do começo ao fim.
Antes de fechar esse capítulo, queria dar destaque que saí desse período sentido um ótimo sentimento de competência, mas que não vinha de qualquer ideia de “domínio” ou “maestria”. Eu ainda me sentia um iniciante, me sentia um bebê nesse mundo. A competência vem exatamente do campo daquilo que eu “sabia que sabia”, mas aquilo que eu “sabia que não sabia”, ainda me causava curiosidade e frio na barriga. E por mais que eu aprenda coisas novas, entendo que esse sentimento nunca vai embora, não importa o que eu estude. Fazer as pazes com a própria ignorância é meu antídoto pra tão falada “síndrome do impostor”.
No próximo artigo quero falar sobre o último programa no qual participei, o +Devs2Blu, daqui da cidade em que moro. Vou mencionar um pouco os projetos que fiz, os colegas que caminharam comigo, mas quero dar mais destaque para os “então” e os “finalmente” que vieram depois de tanto treinar. Afinal, não sou uma pessoa que só programa por paixão (tem um pouco disso, claro), mas nunca perdi de vista a linha de chegada.

Conteúdo bônus #2 - Vídeos!

Quase tudo em Inglês mesmo. Não que não existam bom conteúdo em português, é só que como eu já tinha o inglês desde o início, e muitas referências usavam outras referências em inglês, uma coisa levou a outra e…ah, pra que eu to me justificando? Bora aprender inglês!

Estruturas de Dados e Algoritmos

Ferramentas e Conceitos de Engenharia de Software

  • Tech Talk: Linus Torvalds on git
    • Autor: Linus Torvalds
    • Nota: entender a motivação que levou à criação do git finalmente me deu a compreensão necessária para conseguir usar ela completamente. Hoje eu uso git pra versionar até minhas anotações em Markdown

Boas Práticas e Design de Código

  • The Flaws of Inheritance
    • Autor: CodeAesthetic
    • Nota: recomendo fortemente esse canal, nem que seja para olhar para uma questão por um outro ponto de vista. Lembrem-se, não existem dogmas. A edição dos vídeos desse canal também é de outro mundo.
  • the coding project that improved my skills the most
    • Autor: PIRATE KING
    • Nota: quando estava entre cursos, ver essa proposta de projeto dele começou a me fazer pensar que eu até teria “como” fazer esse projeto, ou que não seria impossível, pena que ainda não consegui tempo pra implementar. Tenho certeza que quem percorrer por esse tipo de caminho, de fazer aplicativos fullstack por conta, aprenderá muito!