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

[ Opinião ] A melhor forma de aprender programação é de fato, programando...

Resumo

Neste post eu irei dar a minha experiência sobre como eu aprendi e aprendo a programar. Além disso, irei falar sobre errors comuns que cometi, mas que me custaram anos de tempo "perdido".

Não é um post sobre dicas, venda de curso, ou algo do tipo. É apenas minha experiência curta neste mundo.

Tangenciando a prática:

Todo mundo (sem generalizar muito) diz que, a melhor forma de aprender programação é programando. O que há de novo aqui então? Bem, este de fato é um assunto velho, mas quantos aplicam isto?

A maioria vende a ideia mais como dica de coach, do que um princípio a ser seguido. Muitos nem aplicam, ou se aplicam não tem o balanço correto.

A maioria cai na armadilha de achar que praticar é somente codificar. E quando codificam é a mesma coisa, porém um pouco diferente. Talvez seja por isso que temos tantos SaaS iguais por ai.

Quantos pegam um projeto como criar um simples compilador para entender coisas na prática a teoria aprendida em faculdades, ou se você é autodidata assim como eu, em livros?

Eu mesmo já cai na armadilha de supostamente estudar e supostamente aprender o que estudei, sendo que meu Github sequer era um cemitério de projetos incompletos. Sequer havia tocado em algum, e si sim, foi apenas para suprir a necessidade de auto engano para achar que esta evoluindo.

Nesse "tangenciamento" de prática, eu "Perdi" cerca de 3 anos.

tangenciamento é uma palavra que eu não sei se existe

Afinal, o que é programar?

Eu poderia me tornar um filosofo aqui, mas não é minha intenção. Por isso irei dar a minha opinião, e compartilhar minha experiência.

A muito tempo atrás, bem no começo do Tabnews, eu fiz um post Site simles de anotações no formato markdown aqui. Ele ganhou um engajamento relativamente bom. Este projeto foi fruto de uma frustração minha: Eu não sei se estou aprendendo o que leio... Então eu criei um projto em TypeScript pois eu não sabia nada sobre. Comecei um projeto que eu não tinha ideia sobre. Nesse processo eu aprendi algumas coisas sobre como obter o elemento imediamente anterior ao "selecionado". Aprendi sobre API Select para permitir que o usuário para posicionar textos de forma correta quando o usuário apagasse texto.

Foi bem doloroso o processo, mas sinto que mesmo depois de anos após este projeto incompleto, eu aprendi algo. Hoje eu posso não saber a sintaxe, mas sei das possibilidades que existem com certas APIs web. Sei que, não é fácil criar um simples web app para anotações. Sei que os problemas que surgiram, eu sou capaz de resolver mesmo sem me afundar em teoria.

O projeto não existe mais e foi descontinuado

Foi então que eu entendi parcialmente que, aprender a programação não era somente ler ou criar pequenos projetos. Era pegar algo, aceitar o desafio, e começar a resolver o problema.

Refinando o aprendizado:

Me custou mais algum tempo até eu entender que só código e procurar para resolver o problema não era o suficiente. Eu criava os projetos, mas não lembrava bem dos conceitos aplicados.

Então, apesar de ter demorado e eu falhar ainda hoje em certos momentos, eu acrescentei a reflexão.

Sempre que eu aprendo algo, como uma estrutura de dado abstrata como LinkedList, eu penso sobre. Para que server? Isso se aparece com o quê? Afinal, por que usar LinkedList ao invés de tuple, array ou vectors? Então eu vou e crio um linked list, observo o comportamento, e pesquiso onde é usado. Isso me fez renter melhor o conhecimento.

A teoria na prática:

Recentemente tenho lido o livro: Data Structure in C++, e nele tem alguns algoritmos que nunca vi. A prática começa quando eu leio sobre do que se trata do algoritmo. Eu leio algumas vezes, se eu não compreender tudo bem.

Copio o algoritmo, executo. Funcionou, por quê? Não funcionou, Por quê? Eu poderia implementar isso de uma forma diferente? E se eu usar o tipo A como entrada ao invés de B?

Neste processo eu aprendo um pouco mais sobre matemática aplicada. Ao invés de pegar um livro de calculo eu entendo na prática do que se trata, como o uso de intervalos em um BinarySearch, que é um ponto chave para o funcionamento do algoritmo.

Prática não é código, é um sistema

O meu sistema é exatamente o descrito: Eu encontro a teoria. Não entendo nada, dou meu jeito para replicar o que aprendi. Faço suposições. Testo, reflito sobre o resultado. Codifico de diferentes formas, faço com diferentes entradas, então eu tento replicar sem olhar. Eu reflito mais depois sobre isso no final do dia.

Se eu remover um desses, o sistema quebra e o meu entendimento sobre algo vai para o saco.

Claro que este é o meu sistema que ainda esta sendo refinado. Ele será até o meu último dia de vida. Não há um método certo, nem bala de prata. Tem o que funciona até certo ponto, até você precisa ajustar para resolver certos problemas, controlar tradeoff, se adequar ao tempo disponível, e afins.

No entanto, somente juntando a teoria e colocando ela em prática que o aprendizado é consequência. Independente do seu sistema, só ler não é aprendizado, só codificar é apenas falsa sensação de conquista.

Pense, você realmente tá entregando resultado com o que aprendeu? Ou você "aprende" meramente para aprender? Será que não é uma ansiedade de controle excessivo das situações?

Quando estou pensando sobre o conteúdo, estou programando, quando estou resolvendo problemas relacionados, estou programando. Este é meu ponto de vista sobre o que é programar. Um conjunto de processos relacionados para a resolução de um problema.

O mundo é cheio de teoria e conhecimento. No entanto isso só é de fato útil quando colocado em prática. Imagina se o Linus estudasse sobre kernels e não criasse o Linux? Ele realmente teria aprendido sobre como um kernel funciona? Agora estude sobre natação, mas não nade. Será que você não irá se afogar?

Na contramão, imagina se o Linus não estudasse e começasse a codificar o Linux? Isso existiria hoje? Ou se você começou a nadar antes de entender algumas técnicas e não afundar no processo?

Conclusão:

Faz um tempo que queria fazer um post assim. No entanto estava receoso de estar falando muita besteira. Provavelmente é muita besteira, com muito de experiência pessoal. Se isso puder ajudar alguém, já fico feliz.

Carregando publicação patrocinada...
3

Não está escrevendo besteira. Até porque você fala para começar com a teoria. Besteira é falar que só a prática importa, e algumas pessoas defendem isso. Dá errado, a pessoa aprende a fazer errado e insiste nisso pra sempre. Leia mais em https://www.tabnews.com.br/Wellington79/licao-para-a-vida-teoria-pratica.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).

2

Vou deixar uma contribuição, que funciona bem, é mão na massa e muitos alunos que peguei para dar REFORÇO acabaram se estimulando usando essa abordagem.
Se você não tem ideia de onde começar, entra num site de comercio eletrônico que venda software e veja as centenas de milhares de soluções que são oferecidas em planilha, e que possuem vendas, de sistemas básicos que você pode seguir como base.
Além de criar um "produto" que realmente tem valor (mesmo que pouco) para alguém, vai te permitir entender os conceitos e produzir coisas concretas, que realmente agregam algum conhecimento no seu estudo de desenvolvimento de software, permitindo que mesmo que seja básico você tenha a experiência de tudo o que é envolvido.
Já tive o prazer de ver alguns que começaram deste modo, e hoje, se tornaram plataformas que sobrevivem desse 'negocio' criando soluções inteiras que de outra forma poderiam ser muito mais complexas de serem implementadas.