Está correto. Mas tem um ponto que todo mundo cai na armadilha. Inclusive pessoas que estudam o assunto dizem que é muito difícil aprender duas coisas ao mesmo tempo (não é o mesmo que aprender várias coisas em momentos e situações diferentes). Ou você aprende a programar, ou aprende a linguagem. Se você não for um privilegiado no aprendizado, fará uma das duas mal, ou ambas. Esse é um dos motivos pelos quais as pessoas não conseguem se tornar boas programadoras. Um outro motivo será mencionado abaixo, indiretamente.
Gostei de ver a expressão "a lógica na programação".
Lógica de programação não existe. Esse é um dos termos inventados no Brasil (já vi indianos usando também), extremamente disseminado. Quando afirmo isso, 99% das pessoas me acham maluco, até porque hoje em dia, para quase todo mundo, o que vale é a primeira informação superficial que aparece para elas, e não o aprofundamento. Por exemplo, poucos tentam verificar se eu realmente sou maluco antes de me classificarem assim.
E também acontece muito, com todos nós, em maior ou menor grau — incluindo eu, que tento cada vez mais estar entre os que erram menos —, aprender algo de forma equivocada, seja por fontes que não deveriam errar, seja por fontes ruins. Esse erro é treinado, fixado e, mesmo quando se aprende o certo, pode ser difícil de abandonar.
O que mais gostaria de mudar no mundo, e sei que só conseguirei ajudar "meia dúzia" de pessoas, é incentivar as pessoas a questionarem tudo o que aparece para elas. De forma saudável, sem exageros ou paranoia, mas refletindo e entendendo o que está diante delas, em vez de apenas consumirem. Isso é especialmente importante entre programadores, embora menos do que entre cientistas (hoje em dia, até estes não questionam tanto quanto deveriam — estou generalizando, claro).
Existe lógica e existe programação. O que as pessoas chamam de "lógica de programação" é, na verdade, algoritmo, ou algo próximo disso. Elas fazem isso porque vários livros usam o termo, até na capa, mas não explicam o que significa. Quando explicam, acabam dando a definição de algoritmo ou até mesmo de programação.
Já pedi várias vezes — e peço de novo: que alguém me apresente uma definição única e consistente para "lógica de programação". Adoraria não ter mais que escrever esses textos e reconhecer que o conceito existe. O método científico é assim. Fui taxativo no início, mas admito que posso estar errado. Pena que, até agora, ninguém conseguiu demonstrar isso para mim.
Algumas pessoas acham que algoritmos são fórmulas prontas. Existem alguns prontos, mas a maioria é criada por quem está resolvendo o problema. O mesmo acontece com design patterns: as pessoas entendem algo diferente do que eles realmente são.
Lógica é muito importante para a programação, mas não é ensinado diretamente nas escolas (e, quando é, costuma ser mal ensinado no dia a dia). Para dominá-la, é necessário entender os fundamentos da matemática — e não decorar fórmulas complexas, mas sim dominar o "arroz com feijão" muito bem.
O que se deve aprender são os mecanismos básicos existentes em qualquer linguagem de programação, sejam elas sofisticadas como Haskell e C++, ou mais simples, como PHP e Lua. Isso inclui até Portugol, fluxogramas, Excel (sim, todas são linguagens de programação) ou a construção de algoritmos em bom português. Poderia incluir até mesmo Brainfuck, mas não "foda sua cabeça" com isso, a menos que seja por curiosidade rápida.
Os mecanismos básicos incluem:
- Armazenamento e recuperação de dados em algum tipo de memória.
- Manipulação de estados (dados) de formas matemáticas, começando pela aritmética, passando por relações e operações lógicas específicas.
- Controle de fluxo de execução, que vai da execução linear simples até desvios condicionais ou incondicionais.
Depois, há mecanismos um pouco mais sofisticados derivados desses fundamentos. Ah, você sabe que o computador só entende 0 e 1, certo? Mas sabia que ele só faz três operações: adição, multiplicação e inversão? E nem é do jeito que você pensa, mas de forma muito mais simples. Todo o resto é derivado disso. (Tecnicamente, ainda há bufferização, mas isso não entra em algoritmos.)
Após entender os mecanismos básicos, é necessário aprender como combiná-los para atingir objetivos específicos, geralmente envolvendo entrada, manipulação e saída de dados. O controle de execução é o aspecto mais novo para quem nunca programou. Muitas vezes, quando se fala em "lógica de programação", refere-se quase exclusivamente a isso. O restante pode ou não ser "lógica", mas, em geral, já foi aprendido de alguma forma na escola.
Aprender a fazer isso é difícil, e, se for feito de forma errada, o erro será perpetuado. É necessário enxergar padrões e manipular o problema para torná-lo mais adequado à escrita de algoritmos.
Não sei se a dificuldade de migrar para outra linguagem é tão relevante. É verdade que existe, mas muitas pessoas já têm dificuldades na linguagem que usam, apenas estão mais acostumadas. Há quem aprenda 10 linguagens (casos raros, claro) e ainda não saiba programar, embora consigam produzir software tecnicamente funcional.
Um exemplo comum: vejo muitas pessoas usando reduce()
achando que estão "abafando", justamente por não entenderem programação. Quem entende, também usa, mas só quando é vantajoso, e não porque alguém mostrou ou disse para usar (provavelmente sem saber o que estava fazendo). Isso perpetua o aprendizado errado, e o ciclo não tem fim. Muitas atrocidades são feitas com reduce()
, ou mesmo com lambda e closure.
Da mesma forma, criticam o goto
e endeusam exceções. Sim, estou falando de pessoas experientes que estudaram "lógica de programação", como diziam nossos pais ou avós, "que nem o nariz deles", só isso não basta, achar que aprendeu só faz seu https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect ser maior.
S2
Farei algo que muitos pedem: ajudar as pessoas a aprenderem a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria). (Links aqui; também disponível no perfil).