Quando eu vi de quem era o post, ja fui direto em up, nem li ainda, mas ja digo logo, isso daqui é um conhecimento extremamente importante, independente da sua expertise, linguagem, framework, patterns que aplicar, ter esse conhecimento profundo de como computadores funcionam, entender como a sua linguagem se relaciona com essa parte do computador vai te fazer ser um dev melhor!
Edit: post incrível @maniero!
Meus 50 centavos dedicados a Jrs:
- No post ele fala sobre "pilha de chamadas de funções", sempre que você executa uma função, ela é adiconada na pilha pro computador saber o que está sendo feito no momento e se dentro dessa função for executada outra função, essa segunda é adiconada numa nova "sessão" em cima da pilha, se a segunda executar uma terceira, cria nova "sessão" dessa forma vai "empilhando" (conceitualmente) as chamadas por cima e por fim se uma função do topo entrar em excessão (erro) o computador vai anotando "descendo" a pilha procurando uma tratativa (como um try catch), caso nao encontre, esse erro é lançado para visualização e é assim que é gerada aquelas varias linhas no erro indicando todo o caminho trilhado.
- Ele fala que o "garbage collector" é responsável por desalocar memoria, ele faz isso contando quantas vezes determinada parte da memória é utilizada, quando chega a 0, ele disponibiliza essa parte para uso. ou seja, sabe quando você faz uma querie no banco, pega aquela infinidade linhas pra gerar um relatório CSV? se você nao trabalhar bem essa parte, ficara com dados duplicados na memória (o resultado da querie E a string CSV montada), entao o ideal é retornar isso o quanto antes ao cliente, para que o garbage collector veja que esses dados nao estão sendo utilizados e libere memória, mas se for necessário alguma outra ação após gerar o relatório, como disparar notificações de que o relatório ficou pronto ou cachear esse CSV... é interessante que procure na doc da sua linguagem como indicar ao computador que pode "matar" pelomenos a variável que guarda o resultado da querie (já que costuma servir somente para gerar o CSV).
- Mesmo linguagens de alto nivel como JS e Python que automatizam essas questoes de memória, possuem formas de limpar e tratar a memoria utilizada, pesquise e pode não parecer mas essas linguagens também possuem ponteiros que podem te ajudar a ser mais eficiente em muitos casos, inclusive quando voce cria um Objeto no javascript, a variável nao guarda os dados do objeto diretamente, ela guarda o ponteiro indicando onde os dados estão na memória. inclusive em objetos que possuem outros objetos são basicamente listas de ponteiros indicando onde cada pedaço está, por essa razão que não dá para comparar diretamente dois objetos como fazemos com variáveis numéricas ou de strings.