Desculpe, pela minha pergunta confusa. Estou procurando algumas dicas.
Até agora, tenho trabalhado principalmente com Java e Python na camada de aplicativos e tenho apenas uma vaga compreensão de sistemas operacionais e hardware. Eu quero entender muito mais sobre os níveis mais baixos da computação, mas fica realmente impressionante de alguma forma. Na universidade, participei de uma aula sobre microprogramação, ou seja, como os processadores se conectam para implementar os códigos ASM. Até agora, eu sempre pensei que não faria mais se aprendesse mais sobre o "nível baixo".
Uma pergunta que tenho é: como é possível que o hardware oculte quase completamente do desenvolvedor? É preciso dizer que o sistema operacional é uma camada de software para o hardware? Um pequeno exemplo: na programação, nunca me deparei com a necessidade de entender o que é o cache L2 ou L3. Para o ambiente típico de aplicativos de negócios, quase nunca é preciso entender o montador e os níveis mais baixos da computação, porque hoje em dia existe uma pilha de tecnologias para quase tudo. Eu acho que o objetivo desses níveis mais baixos é fornecer uma interface para níveis mais altos. Por outro lado, me pergunto quanta influência os níveis mais baixos podem ter, por exemplo, toda essa coisa de computação gráfica.
Por outro lado, existe esse ramo teórico da ciência da computação, que trabalha em modelos abstratos de computação. No entanto, também raramente encontrei situações em que achei útil pensar nas categorias de modelos de complexidade, verificação de provas etc. Eu meio que sei que existe uma classe de complexidade chamada NP e que é meio impossível de resolver. um grande número de N. O que estou perdendo é uma referência para uma estrutura para pensar sobre essas coisas. Parece-me que existem todos os tipos de campos diferentes, que raramente interagem.
Nas últimas semanas, tenho lido sobre problemas de segurança. Aqui, de alguma forma, muitas das diferentes camadas se juntam. Ataques e explorações quase sempre ocorrem no nível inferior; portanto, neste caso, é necessário aprender sobre os detalhes das camadas OSI, o funcionamento interno de um sistema operacional, etc.