Obrigado por postar isso e oportunidade de falar mais um pouco sobre o assunto (tá quase virando um livro), eu vivo repetindo aqui e em outros lugares a importância dos fundamentos. Porque é realmente a falta dele que está fazendo as pessoas patinarem, e não é fácil elas, que ainda não têm experiência, perceberem isso, ainda mais com a internet inundando com material sobre tecnologia e não fundamento.

Fundamentos

Mas falo muito também que o fundamento em computação/engenharia de software (note que não é só questão de programação) não existe no vácuo. Ninguém vai aprender bem isso sem estar com o mínimo de matemática, comunicação e expressão e ciências.

Ninguém vai resolver problemas de lógica com programação. Ninguém vai aprender bem programação sem estar com a lógica em ordem. Não vai aprender os conceitos de programação sem os conceitos de matemática estarem dominados. Até porque tudo na programação vem da matemática. Só terraplanista acha que dá para programar sem matemática dominada (sem ter que decorar fórmulas e coisas avançadas).

Ninguém vai obter requisitos sem interpretar texto, escrito ou falado, ou até visualizado, e mais ainda, até o que está oculto. Ninguém vai se comunicar bem com outros profissionais, e até com o computador sem ter se virado minimamente bem com comunicação e expressão, saber o mínimo de línguas, o porquê de escrever de um jeito ou de outro, como forma as frases e a motivação disso. Não vai se dar bem quem não tem atenção aos detalhes, por mais dificuldade que a pessoa tenha. Ao mesmo tempo que não consegue ver o todo do que o "texto" do produto que está desenvolvendo.

Não dá para criar soluções sem tudo isso e entender como a ciência funciona. Sem saber o método científico. Parece coisa da NASA, mas é super simples. è fazer a tal análise de sistemas de forma correta. O termo nem anda sendo usado mais. Isso é o que diferencia quem faz um monte de remendo e quem faz software. Entender a ciência, olhar o todo, fazer experimentos, observar os resultados, prever o que poder acontecer de errado ou certo, corrigir rotas, criar hipóteses, reconhecer erros, fazer a evolução acontecer, ser crítico e questionador com o que está fazendo, olhar para a sociedade e entregar algo realmente positivo e não apenas fruto do ego.

Orientação a objetos

Comecei a mexer com orientação a objetos nos anos 80. Pouco antes eu achei que eu tinha inventado o treco (ahhh, a adolescência). Claro que eu não sabia o nome, nem era exatamente o que as pessoas aprendem hoje, não importa se seguem a escola do Alan Kay ou do Bjarne Stroustrup, mas eu vislumbrei que aquilo era o caminho.

E eu estava errado, em parte. Não era só ele o caminho. Abusei dele muito, mas hoje consigo achar o equilíbrio, até onde dá, o mercado te força um pouco ao abuso. Mas fui vendo o que funciona melhor e o que é mais ilusão. Fui entendendo que algumas pessoas só se sentem mais confortáveis. E fui vendo muita gente entrando na área e só adotando isso porque é o que está na moda. Muitas vezes a pessoa não tem a menor ideia do que é OO, mesmo dizendo que faz. E isso precisa mudar para a pessoa evoluir. Não deixa de ser um fundamento entender OO.

A orientação a objetos em si não é um fundamento da computação ou engenharia de software. As pessoas acham isso porque está na moda, falam demais nela. Isso é um conceito avançado que deve ser dominado de todo, mas não é fundamental, no começo. Não é isso que selará o destino da pessoa. Eu até acho que as pessoas colocando como fundamento faz desviar do mais importante para algo com relevância menor.

No momento certo, quando os reais fundamentos estão bem, até para aproveitar melhor algo que é difícil (sim, OO é mais difícil do que as pessoas pensam, fazer errado é fácil, certo é difícil), aí deve aprender OO com profundidade, deve ir no fundamento de OO, não só copiar receita de bolo sem contexto, não ir apenas no fluxo, ver por cima o que a tecnologia usada obriga saber de OO.

Quem não tem tempo para criar os fundamentos, para evoluir, para consertar os defeitos, nunca terá tempo para nada, porque a pessoa passa boa parte do tempo que faria isso "apagando incêndios". Desde "moleque" eu já falava isso para as pessoas. Eu conheço gente que há mais de 30 anos não tem tempo para estudar corretamente, e cada vez pior porque estão gastando o tempo consertando problemas, muitas vezes de decisões erradas. Tem um monte gente "experiente" que toma decisões erradas por falta dos fundamentos e que paga um preço alto. Mas nem consegue perceber. E alguns viram gurus de outras pessoas criando um círculo vicioso.

Conclusão

Pode ser que não precise de algo, mas sempre vai te ajudar de formas que você nem espera. Os fundamentos que diferenciam o bom profissional do medíocre. Não é só dar resultado, é dar bom resultado, e quem não tem fundamento não consegue nem avaliar se é bom ou não.

Todos nós erramos, eu errei e ainda erro muito, mas tive a sorte de ter algumas pessoas no meu caminho que foram ajustando o que eu ia errando. Algumas pessoas próximas, outras só na internet. Já tem gente no Tabnews que está fazendo isso por mim.

Não sei se estou certo, falo da minha experiência.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Muito bom, também acredito nessa ideia de focar em fundamentos. Para pessoas como eu que são autodidatas, dois livros muito bons são o "The Self-taught Programmer" e "The Self-Taught Computer Scientist" ambos do Cory Althoff que te dá uma visão geral e um norte sobre onde você pode se aprofundar

Já me passou pela frente, mas nunca comprei, bom lembrar, pode ser que eu me interesse aprofundar nele pra ajudar criar conteúdo. Muito obrigado pela indicação.

Eu não podia ter explicado de forma melhor! Excelente argumento. E quando mencionei OO como um fundamento, quis dizer que era um fundamento para entender Java com profundidade (ou qualquer outra linguagem OO).