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

👨‍💻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:

  1. 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.

.

Carregando publicação patrocinada...
2

Por experiência própria devo dizer que esse método de aprendizado faz diferença sim. Pra ser sincero eu não lembro bem como eu fazia quando estava começando há alguns anos, mas lembro de ficar preso no "tutorial hell" até enjoar de querer ver tutorial e começar a querer codar coisas bem simples que eu achava que sabia fazer. Comecei por aí, e aí quando encontrava uma coisa que eu não sabia fazer abria o google e pesquisava exatamente aquela dúvida, igual ao teu "como fazer um site com múltiplas páginas". A pergunta pode ser ampla e ter várias maneiras de resolver, e isso no começo é um pouco "overwhelming", mas com o tempo peguei a prática:

  • busco a dúvida no google
  • abro vários sites (3, 4 ou às vezes até mais dependendo do tempo que tenho) explicando essa uma coisa
  • depois de ler um pouco sobre, se eu ainda não entendi, às vezes abro mais sites e às vezes pergunto pro chatgpt me explicar.
  • Nem sempre o chatgpt sabe, e aí preciso continuar pesquisando, abrindo mais e mais links pra entender aquele conceito.

Por exemplo, eu estava estudando Spring Security, um módulo do framework Spring do Java, usado pra fazer autenticação e autorização na aplicação. Ok, comecei a pesquisar, abri um, dois, três links. Li o primeiro e parecia ok, parecia que ia resolver meu problema. Fui tentar codar e... depreciado. Várias coisas que o guia usava estavam depreciados. Tentei ver no outro guia, e usava a mesma classe depreciada. E assim fui indo num buraco de minhoca até entender que o Spring Security teve uma atualização grande no início desse ano e depreciou algumas funcionalidades, e agora a maioria dos guias estavam depreciados.
Como eu resolvi? Abri o google e pesquisei literalmente "como atualizar a classe WebSecurityFulano que está depreciada?"... tentei fazer as mudanças que estavam sendo explicadas e outras partes do código começaram a dar pau. E assim fui, problema por problema, até conseguir fazer a autenticação funcionar sem usar nenhuma classe depreciada.

1
1

Man, curti muito sua bordagem, estou em um nivel semelhante ao seu, então entendo um pouco sobre oque você pode estar passando, tbm estou adquirindo e aprimorando minhas abordagens, uma que comecei a a poucas semanas e realizar as tarefas do codewars, tem me ajudado a degustar como os elementos como funções, variaveis e tudo mais interagem entre si

1

Esse é um bom metodo de aprendizado. Eu estou no meu 4º estudando programação e meio que estou com isso na cabeça, inconscientemente, sobre fugir da maioria dos cursos de programação (não generalizando, maioria mas não todos). Vejo que eles ensinam mais do mesmo. Então fugir um pouco desse mesmo e tentar uma abordagem diferente é muito válido.

Alem disso, o que mantenho em mente é que, não adianta aprender linguagem só por aprender. É necessario ter um objetivo, senão voce acaba caindo num mar de informações e não sabe pra que lado quer ir. Quando voce tem um objetivo, fica mais facil direcionar suas energias. Exemplo: caso voce esteja tentando entrar no mercado de trabalho, acho que o caminho é voce escolher um nicho, ver as linguagens e ferramentas que estão sendo utilizadas nesse nicho, aprender e desenvolver projetos relacionados a esse nicho.

Uma analogia que faço, é que no passado (acho que hoje em dia nem tanto), o que estava em alta era o excel. A internet estava saturada de cursos de excel, planilha pra isso, planilha para aquilo. Na epoca (2017/16) eu até comecei alguns cursos, justamente na situação que comentei acima, estava fazendo por fazer sem objetivos. Resultados: fiquei perdido, frustrado e esqueci tudo o que aprendi. O que aconteceu é que hoje eu trabalho com excel (nada muito avançado), e tudo que aprendi foi fazendo o que era necessario para meu trabalho, e continuo aprendendo. Ou seja, o aprendizado que eu tirei disso é que (e espero que isso aconteça na programação tambem, talvez em uma escala maior) voce irá aprender muito mais enquanto aplica pra uma coisa real o que ta aprendendo. Acho valido voce saber o basico para entender onde esta se enfiando, mas pra voce se aprofundar, tem que ser em coisas especificas.

Tudo o que eu disse acima são somente pensamentos soltos, que até beiram a hipocrisia kkk, digo isso pois me encontro totalmente perdido em relação a programação, o que aprender, o que trabalhar. Porem, tenho a segurança de dizer que tenho uma leve noção de onde quero chegar, é como se estivesse um pouco nebuloso.

1
1

Me sentir acolhido agr kkkkkk justamente pq estou fazendo algo parecido enquanto estou aprendendo lógica com js. Peguei o básico é estou indo atrás de questões para resolver e depois tento aprimorar ela, adicionando uma funcionalidade a mais.

1

Sensacional esse post. Acho que nem só pra iniciantes. Eu sou pleno, 3 anos de empresa e to me sentindo muito estagnado, sem animo pra estudar e achando que to com crise de identidade (pensando em mudar de tecnologia, talvez ate area) kkkkkkk

Tenho visto videos e ideias como essa que mencionou e isso tem me dado um animo grande novamente, to voltando a ter prazer em estudar e codar.

1

Sensacional, bro! É exatamente a mesma lógica de aprendizado utilizada quando fazemos "resumos" de determinados assuntos em aulas de história.
Quando você escreve sobre o que aprendeu, fixa de uma forma que chega assusta e eu venho lhe agradecer por ter me lembrado deste método.

Boa sorte à todos nós!