Base/fundamento é basicamente entender como as coisas funcionam. E isso não vale só para programação, vale para qualquer área. Todo tópico estudado tem uma base por trás, então estudar as bases é um estudo regressivo.
Exemplo:
- Como aprender a programar?
Estude uma linguagem de programação como Python, C, JavaScript ou Haskell por exemplo.
- Tá, mas como entender como elaborar algoritmos nessa linguagem?
Estude o paradigma da linguagem, onde o paradigma imperativo é o que as pessoas erroneamente chamam de "lógica de programação" aqui no Brasil. Também estude estrutura de dados e algoritmos. E pratique muito!
- Tá, mas como entender como linguagens de programação funcionam?
Estude Programming Language Theory, o que inclui estudar compiladores.
- Tá, mas como entender como o código gerado pelo compilador funciona?
Estude sobre Assembly, máquinas virtuais, bytecode, algoritmos de otimização de código, paradigma funcional, linguagens intermediárias, máquinas abstratas etc.
- Tá, mas como entender como essas coisas rodam na prática?
Estude sobre como sistemas operacionais funcionam, o que inclui estudar como executáveis funcionam e como os processos são executados.
- Tá, mas como entender como sistemas operacionais funcionam no computador?
Estude arquitetura de processadores, o que inclui estudar código de máquina mais todo o processo de execução de código em um processador multicore. E também como o sistema operacional faz configurações e gerenciamentos (de memória, tarefas etc.) em uma arquitetura de processador (ISA).
- Tá, mas como entender como isso funciona no hardware?
Estude sobre portas lógicas, linguagens de descrição de hardware e eletrônica digital. Também pode estudar sobre FPGA de bônus para poder fazer uns projetos caseiros.
- Tá, mas e para entender como isso tudo funciona?
Estude elétrica.
- E para entender elétrica?
Estude física e matemática.
- E para entender matemática?
Estude filosofia, a base de tudo. 😄
Ok, agora você pode estar se perguntando por que entender como as coisas funcionam?
A maioria dos programadores não querem sequer entender como o framework que ele usa funciona, muito menos vai querer entender de Assembly e porta lógica.
Só que quanto mais você entende como as coisas funcionam, melhor fica sua capacidade cognitiva para fazer análise, engenharia e ter ideias sobre o assunto que você entende.
É essa capacidade analítica que faz um programador ser visto como "foda". Não é escrever umas instruções em Assembly, não é decorar o que leu em um livro de design patterns ou clean code, não é dar uma explicação tecnicamente imprecisa quando alguém pergunta como um processador funciona.
É parar, pensar e ter ótimas ideias sobre àquilo. Isso é um bom programador: o programador que tem capacidade de criar soluções e não meramente decorar as soluções que leu em um livro, documentação, ChatGPT, stack overflow etc.
E para ter essa capacidade você precisa ter muitas informações sobre como as coisas funcionam. Quanto mais informações você tem, melhor você se torna em criar soluções.
E estudar como as coisas funcionam também é estudar como alguém resolveu um determinado problema. Porque as coisas não foram feitas de determinada forma por mero acaso, decisões em projetos sérios não são tomadas jogando uma moeda para o alto ou por meio de votação (como se a maioria soubesse de alguma coisa 😛).
Então isso também te dá insights para ter ideias de como resolver problemas semelhantes. Então até mesmo estudar como coisas funcionam em áreas diferentes também serve para esse propósito, por exemplo: biologia, física, matemática, psicologia ou neurociência.
Pare para pensar em quantas soluções da computação surgiram do estudo de outras áreas. Pensa por exemplo em aviões, helicópteros, foguetes, I.A., algoritmos de ordenação, segurança da informação etc.