Eu acredito que ele esta se referindo ao porque das coisas e talvez como elas chegaram no estado que estão. Eu fiz Sistemas de Informação na UFMT, fiz muitas materias que acho que nao agregaram em nada na minha profissão, mas outras eu acredito que mudaram muito a forma de eu ver um problema. O principal foi algoritmos e estruturas de dados.
- Qual a diferenca entre listas encadeadas, duplamente encadeadas, arrays, arvores, grafos... (e principalmente quando usar)
- Big O
- Algoritmos classicos (algorimso ordenaçao, busca, MST, DFS, BST)
- Como o HD guarda os arquivos? Como o sistema operacional os encontra?
- Quais os principais sistemas de arquivos e porque foram criados?
- Como funcionam processos (de verdade)
- Como o SO decide qual processo deve ser executado, quando, por quanto tempo
- Quando um processo volta a ser executado em um core diferente de quando ela estava sendo executada, como ele continua de onde parou? (escalonamento e comunicacao)
- Quais os algoritmos que decidem isso tudo? (Implementamos um em C que me fez repensar minha existencia kkk)
- Como funciona a memoria ram e oq ela ajuda nas questoes acima
- Como funcionam as paginas de memoria
- O basico de compiladores (já precisei criar uma mini linguagem "DSL" e os aprendizados da universidade me ajudaram muito)
- Como a web funciona.
- As camadas OSI (nao precisa saber tudo sobre todas, mas entender alguns protocolos muda nossa visao sobre muita coisa)
As pessoas se preocupam muito em saber usar o ultimo framework da moda, mas nao entendem o motivo de uma query estar demorando demais pra ser executada, vai logo querendo trocar pra um NoSQL da moda. Pequena história que aconteceu no meu serviço: Em 2016 eu estava no meio da minha graduação e já trabalhava na área a dois anos, eu estava trabalhando numa tarefa que era pra otimizar o tempo de um relatório, então pedi ajuda a um Dev Senior metido a DBA, ele disse que a unica solução era criar indices no banco mas que isso devia ser feito de forma cuidadosa pq ele acabaria aumentando o tamanho do banco, então eu fiz algumas perguntas óbvias: "Por que? Como os indices funcionam? Que mágica eles fazem pra simplesmente ficar mais rapido? Por que o banco cresce?". A partir dai eu ouvi tanta besteira sem sentido que a reputação desse senior foi a 0 comigo. Detalhe, eu realmente não sabia como funcionava, mas as explicações era claramente uma tentativa de inventar desculpa e no final me dizer "voce não vai entender". Alguns dias depois eu estava na aula de estrutura de dados e o professor estava falando sobre Hashing e buscas em arvores e ponteiros e ele soltou a frase "É mais ou menos assim que os indices de banco funcionam". Aquilo explodiu a minha cabeça e a partir dai comecei a dar muito mais valor na minha graduação. Esse foi só um exemplo pq aconteceu com poucos dias de diferenca entre a experiencia prática e a teórica, mas na faculdade aprendi muita coisa que nao fazia ideia de como funcionava de verdade.
Eu estudaria o basico nessa ordem:
- Algoritmos
- Estruturas de dados mais avancadas (arvores, grafos)
- Sistemas operacionais
- Redes de computadores (camada OSI)
Tem bastante conteúdo na internet mas muito baguncado, encontrei esse canal no youtube que tem um pouco de tudo
Mas acho que a melhor forma de aprender seria lendo os livros base das materias na universidade, os mais famosos acho que sao os do Tanenbaum.
Já que vc compartilhou uma pequena história, deixa eu contar a minha também :-)
Teve uma vez que eu precisava analisar um arquivo gigante. Era um formato antigo de um software mais antigo ainda, que continha basicamente dependências (similar a um package.json
). Ou seja, lá tinha descrito que o módulo A depende do módulo B, e o B depende do C, etc.
Só que o software que processava o arquivo dava erro de dependência circular, mas não dizia onde era. E como o arquivo era gigante, analisar somente "no olho" era inviável. Mesmo lendo o arquivo e gerando uma saída mais "bonitinha" e formatada, ainda era difícil detectar todos os problemas, pois era muita informação pra analisar manualmente.
Então eu acabei usando grafos, que é uma daquelas coisas que eu vi na faculdade e achei que nunca fosse precisar. Basicamente eu li o arquivo, montei um grafo direcionado (se A depende de B, criava uma aresta de A para B) e rodei um dos algoritmos clássicos para detectar os ciclos. Pronto, no fim o programa mostrava somente as dependências circulares.
Pode ser apenas um caso anedótico de uma situação rara, mas foi só pra ilustrar que os fundamentos e a "teoria chata" são importantes sim. Teve gente que não propôs esta solução simplesmente porque nem sequer imaginava que ela podia existir. Sabendo a base - no caso, matemática e a capacidade de abstração que ela nos dá - vc pode vislumbrar as soluções mais adequadas para cada caso. Até porque os fundamentos não mudam há décadas, muita coisa já tem pronta, e se vc não souber que elas existem vai acabar reinventando a roda sem necessidade...