Qual é a "falha" que a maioria das pessoas que vão aprender a programar cometem ?

 Todos nós quando somos novos num assunto falhámos. A falha faz parte do desenvolvimento como seres humanos. Penso que hoje muita gente tem medo de errar, mas aqui está a realidade. Ninguém é infalível e sermos perfeitos é um erro que temos de corrigir. E quem vai aprender a programar passa por esta experiência. Mas é bom passar por isto, porque eu também já estive nessa posição.

Hoje vi num fórum de perguntas e respostas, uma pergunta que me chamou à atenção e que me deu vontade de responder e que nessa pergunta as pessoas que responderam acho que deram soluções que resultam temporariamente e não a longo prazo. A pergunta foi:

"Aprendi a programar em C, mas tenho muita dificuldade em resolver problemas. O que devo fazer ?"

Uma das respostas que eu vi foi esta:
"Junta-te a alguém que saiba e vê como essa pessoa faz." Esta resposta ajuda a resolver o problema, mas a verdadeira questão, segundo a minha experiência como programador, não é o juntar a alguém. Eu aprendi a programar sozinho e quando eu andava no 3º. ciclo do Ensino Básico tinha TIC no 8º. ano e não aprendi a programar no Scratch. Aprendi sozinho a ver tutoriais no YouTube, a investigar na Internet. Ou seja não tive um amigo ou um professor que me ensinasse.

A gente precisa uns dos outros, mas temos que partir do princípio de que não teremos ninguém a nos ajudar. Há aprendizagens que só se faz sozinho.

E então qual é a verdadeira questão que aqui se coloca ?
Como disse, não é o colar a alguém que vai resolver o problema. Todos nós podemos fazer parte da solução uns dos outros, mas aprendizagem faz-se sozinho na maioria das vezes e os nossos professores ou colegas de trabalho podem ser apenas orientadores.

A verdadeira questão é que prática sem teoria não leva a lado nenhum. O que essa pessoa do fórum fez foi aprender uma ferramenta, ou seja, a linguagem C e não o que faz o C funcionar.
Aprender C não significa aprender algoritmos.
C é uma ferramenta. Algoritmos é uma forma de pensar.

Aprender primeiro uma linguagem de programação não é necessariamente mau. Por exemplo, em crianças, a maioria aprendeu a falar sem saber escrever. Porquê ? Porque os nossos pais falavam e nós iamos imitando as palavras dos nossos pais. Até mesmo aquilo que não é para se dizer.😏
No entanto não aprendemos a lógica que está por trás do que falamos.(abecedário)
Na programação é praticamente é mesma coisa. Podemos saber escrever C mas podemos não saber programar. Programar é resolver problemas.

O exemplo que dei na minha resposta à questão foi o exemplo da máquina de somar. Criar uma máquina de somar. Pensar em como funciona o processo de soma. O problema aqui é somar. Como é que somo dois números ?  1 + 1 = 2, certo ?

Mas o computador não entende esta linguagem. Temos de converter a nossa linguagem em binário.

Mas para converter a nossa linguagem em binário temos de entender primeiro o problema e depois escrever em binário.

E entender o problema passa por ver o que é pedido e transformar o problema numa receita que funcione sempre. Ler uma duas, três vezes o que é pedido. E depois pode-se usar várias estratégias como por exemplo, escrever exemplos de output e a partir daí abstrair.

De seguida transformar a nossa ideia em um esquema compreensível ou pseudocódigo.

Após o entendimento do problema é que começamos a escrever o código em C ou na linguagem que escolhemos.

Tendo esta metodologia de trabalho, é praticar e praticar e praticar até que tenhamos a habilidade de criar os nossos próprios problemas e resolvê-los. E depois escolhemos um problema da nossa vida pessoal que gostávamos de automatizar e tentamos aplicar o que sabemos para resolver o problema como desafio. O importante é saber pegarmos em algo da nossa vida e com a programação tentar resolver. Isso já é um nível um pouco avançado.

Não considero bem uma falha aprender primeiro a linguagem. Acho que imitar ajuda, mas a forma como pensámos é mais importante que a ferramenta. E para isso é preciso um nível de conhecimento básico. Por exemplo, crianças de 3 anos a programar. Podem, têm que ter a predisposição para isso e para isso tem de se começar com pequenas coisas, tal como mexer num computador, movimentar o rato, fechar a janela, tirar as teclas do teclado(eu nunca tirei uma tecla do computador dos meus pais...😈😈) E aos poucos aumentar a dificuldade e ensina-las a mexer em jogos.  Ou seja resolver problemas, algoritmos.

No caso da criança de 3 anos, pode-se ensinar a mesma coisa mas tendo em conta o contexto da pessoa. Neste caso existe o Scratch e outras ferramentas para ensinar a programar a uma criança de 3 anos. Claro que não a vamos pôr a escrever C. Pode ser que ela com 7 ou 10 anos aprenda a escrever C mas cada coisa na sua idade. Uma vez fui ao Externato Paulo VI em Braga onde o meu pai trabalhava e tinha realizado uns joguinhos no Scratch para as crianças. Tive a experiência de ensiná-las a mexer no Scratch e para as crianças do infantário/1º. ciclo tive de optar por outra metodologia. Para os jovens quase da minha idade na altura já eram mais diretas as coisas. Importante na aprendizagem, é ajustar ao nosso contexto.

Em conclusão, o importante na programação não é as ferramentas que utilizamos para chegar à solução, mas a lógica que está por trás delas. Aprender a programar deve ser ajustado de acordo com o contexto da pessoa. Não vamos pôr uma criança de 3 anos a escrever Python ou C. No caso existe jogos e outras competências que podem ser trabalhadas na criança para ela aprender a programar. Ou seja um nível de literacia básico é exigido. A literacia de uma criança de 3 anos não é a mesma de 10 anos, mas pode-se definir o objetivo na mesma, deve é ser utilizada as ferramentas ajustadas à literacia da criança de 3 anos e à de 10 anos. "Ah estás a falar de crianças e não de adultos", vocês me dizem. Um adulto de 18 ou 19 anos pode aprender a programar mas há uma coisa. Tem mesmo que querer aprender. Senão não chega a lado nenhum. E pode começar pelos jogos do Code.org ou ver vídeos de algoritmos. Ai que vergonha. A jogar jogos de criança. Não é vergonha nenhuma. Vergonha é roubar e ser apanhe como diz o outro.