👨💻aprendendo a programar do ZERO com o TABNEWS [TUTORIAL HELL e JUST CODE] #1 💯
imagino que o tabnews já esteja cheio de gente falando sobre como você deveria aprender a programar, os passos que devia seguir e por que deveria fazer daquela forma. já vou logo avisando
isso não é um tutorial para você
pois é, eu escrevi falando diretamente com o leitor, mas o objetivo é descrever e passar pro papel a ideia, e não ensinar ninguém a fazer nada.
o intuito desse post é apenas registrar a técnica que eu irei seguir. dito isso, vamos pro post!
aprender programação é um saco
sim, pelo menos no começo do começo.
já aconteceu com você de querer programar algo, seja um programa simples, um projeto de site ou um joguinho, mas simplesmente não saber como codar isso? daí você tenta replicar uns tutoriais, passa um ou dois dias fazendo o projeto e no fim percebe que simplesmente não aprendeu nada: sem o copiar e colar do tutorial você não conseguiria fazer aquilo e no final ainda está no mesmo lugar do início? e aí você vai assistir aqueles full courses do codecamp e no final sai um pouquinho melhor, mas ainda não consegue programar o que você queria? parece que não sai do lugar e pensa que programar não é pra você, lembra da jéssica que te deu um pé na bunda às 21:43 de um domingo depois de você ter feito um código tosco que imprimia na tela "quer ficar comigo?" e enviado pra ela, mas ela disse que não e que até ela faria melhor? pois é, tudo isso que eu relatei é exatamente o que eu enfrentava até mês passado (menos a parte da jéssica, isso aí não aconteceu não 😢). eu já estava quase desistindo, até que vi esse vídeo:
How To Get Out of Tutorial Hell (Step by Step Guide)
e foi libertador. sério. parecia que o peso daquela tonelada de tutoriais e cursos que eu ainda pretendia assistir pra "ficar bom" e "conseguir programar" tinha apenas desaparecido, e foi mágico.
basicamente, o conteúdo do vídeo introduzia a filosofia "just code": sabendo o básico da linguagem e da sintaxe, apenas escrever qualquer programa iria incrementar suas skills muito mais que qualquer tutorial.
então quer dizer que era só saber o básico - variáveis, funções e estruturas de repetição - abrir o editor e programar o facebook? bem... claro que não!
não me entenda mal, isso é infinitamente melhor do que se afogar em tutoriais - o chamado "tutorial hell" - e por mais que você ainda fique travado na maioria das coisas, ainda vai aprender muito mais que copiando e colando código de tutorial. pode parecer que esse jeito de fazer as coisas iria te permitir escrever os tais projetos que eu citei anteriormente sem travar, pesquisando apenas coisas especificas da sintaxe da lib ou framework, pois a linguagem já tá domada. mas não é assim que funciona. adestrar uma linguagem de programação é muito mais do que saber a sintaxe dos comandos, e sequer pensar em adestrá-la é pros programadores avançados. pra iniciantes como eu, a preocupação máxima é evitar que ela te morda.
domesticando a linguagem e question driven development: o real game-changer
"tá, mas se o método do vídeo também não funciona por que você tá descrevendo ele como "mágico" e "libertador"?
porque o verdadeiro trunfo dele não é a filosofia do "just code", ela é so um complemento pro verdadeiro game-changer: o chamado question driven development. e, sério, só de escrever o nome dele meus olhos brilham.
"beleza, mas o que diabos é isso?"
acho que o nome é um pouco auto-explicativo: o desenvolvimento guiado por perguntas.
o processo é bem simples: escolha um projeto pequeno - menos de 100 linhas de código - e divida a criação desse projeto em perguntas. separe as ferramentas que você irá usar e tente ler a documentação de cada uma.
isso também vai evitar overengineering e acumulação de frameworks e libs desnecessárias.
você pode fazer isso antes de começar, mas será mais efetivo ir selecionando as questões enquanto programa e as dúvidas (as tais travadas que te e me impedem de fazer o que quer) vão surigndo.
quando você travar, pesquise sobre o recurso que está te impedindo de prosseguir. repito: não é pra pesquisar o código pronto, e sim pra ler a documentação do recurso.
por exemplo, se você estiver usando o comando de uma lib de números aleatórios e não sabe como gerá-los, pode pesquisar algo como "lib random number generation documentation", na maioria dos casos isso vai te destravar se você souber o básico citado anteriormente.
entretanto, as vezes a documentação pode ser confusa, e é aí que você pode tentar achar uma implementação diferente da sua, mas que use o mesmo recurso.
não copie e cole o código que encontrar, mas sim analise ele por alguns instantes, minimize a aba e tente implementá-lo no seu código. se possível, tente implementá-lo de forma diferente entendendo seus núcleos. se você souber o básico como a sintaxe da linguagem, funções, variavéis e loops, vai ser fácil.
assim que terminar o projeto, tente escrever um tutorial de como fazê-lo pra outras pessoas. você não precisa necessariamente compartilhá-lo com o público, embora seja exatamente o título do post: aprendendo com o tabnews - ensinando outras pessoas, e não sendo ensinado! (e, na verdade, é isso que eu vou fazer! nos próximos meses, esse perfil vai encher de tutoriais de tudo que eu me dispor a aprender).apenas o ato de escrever vai gravar em pedra no seu cérebro a maioria das coisas que você praticou anteriormente.essa é a técnica de feynman.
depois de alguns projetos feitos, você vai perceber o quanto melhorou, mas talvez você acabe ficando estagnado por conta da natureza simples desses projetos. então é aí que entra a cópia descarada!
sim, é exatamente isso: uma cópia na cara dura. você escolhe um site ou um aplicativo famoso, e refaz ele. como o nosso amigo bigboxSWE disse, não precisa ser bom, nem estiloso, nem inovador. é só uma cópia minimamente funcional de algum serviço.
assim que você escolhe o serviço, é a hora de pôr as mãos na massa: vamos supor que se quer recriar o tabnews. a partir disso, criamos um produto mínimo viável, ou PMV. o PMV vai ser uma lista de coisas que sua cópia precisa ter que o serviço copiado também tem. no caso do tabnews, a minha lista ficaria assim:
- aba de "recentes" e aba de "relevantes"
- editor de texto e postagem
- armazenamento nos cookies do navegador
- tabcoins
dependendo do que você quer aprender, nem sequer precisa ser funcional na maioria dos aspectos - pode ser apenas visual.
você deve pesquisar um "como fazer" pra cada categoria de funcionalidade. por exemplo:
- abas
- como fazer um site com múltiplas páginas?
- como criar botões que levam a outra página?
- como adicionar um ícone?
esse é só um exemplo simples, e provavelmente dependendo do grau de funcionalidade - se você vai tentar recriar o sistema de publicação de posts ou vai apenas colocar posts falsos, e, se sim, se vai adicionar um algoritmo pra reconhecer os posts mais relevantes ou se vai ordenar eles por ordem de postagem - essa lista vai mudar e variar além do que eu posso especular.
mesmo que seja uma pequena amostra de tudo o que o tabnews representa, é o suficiente pra aprimorar suas habilidades e vai te ensinar muito mais do que qualquer curso. esses projetos costumam demorar mais tempo, mas eu imagino que seguindo esses passos seja possível fazê-los.
a ideia disso é manter a motivação e aprender ativamente. ao mesmo tempo que você aprende a teoria lendo a documentação, você consegue trabalhar diretamente com o código, e não apenas observá-lo passivamente. você vai aos poucos dominando não só a sintaxe dos comandos separados, e sim a sintaxe de como eles se relacionam entre si. você consegue trabalhar com infinitas ferramentas sem precisar desenvolver uma idéia do zero, e o melhor: quando você for desenvolver a ideia do zero, não vai ficar travado. você vai ter um workflow extremamente fluido e não vai desistir no meio do processo. você vai domesticar sua linguagem - ou pelo menos parar de ser mordido, hehe!
lendo livros: de volta ao inferno
esse post inteiro é quase uma propaganda anti-cursos, mas uma hora ou outra a gente precisaria voltar neles. querendo ou não, é impossível melhorar infinitamente com documentação e prática. uma hora você vai parar de evoluir, e é nesse momento que nós voltamos à teoria. na linguagem que eu quero aprender - rust - existem 2 principais livros que os "rustaceans" - apelido carinhoso de quem programa nessa linguagem - devem ler uma hora ou outra. o "the rust book", que ensina os fundamentos e o básico, e o "rust for rustaceans", que apresenta técnicas, comandos e métodos avançados pra programadores experientes. atualmente eu estou lendo o rust book, mesmo que esteja dando ênfase no desenvolvimento guiado por questões. sinceramente, um bom ponto de partida é essencial, e eu mesmo disse no começo: é requisito saber o básico. sim, claro que o rustbook vai introduzir muito, mas muito mais que o "básico" descrito por mim, mas isso é o que vai impulsar seu QDD, quest driven development. uma vez que o QDDA parar de dar resultados com seus conhecimentos atuais, vai estar na hora de buscar pela teoria avançada! no meu caso, seria ler o rust for rustaceans. o que você deve ter cuidado, principalmente no começo, são com os esforços desnecessários e cursos estupidamente longos e CHATOS. seu maior inimigo aqui é a procrasstinação, então sempre que você perder a empolgação com a teoria, vai direto pro seu editor de código! eu diria que essa é a parte divertida da programação.
eu disse no começo que isso não foi feito pra você, e sim pra mim. mas, na verdade, eu ficaria muito feliz em ver pessoas tentando o mesmo que eu e compartilhando a experiência por aqui. eu também agradeceria muito se você pudesse compartilhar o que você acha disso tudo.