Hai ragione che alcune conoscenze di basso livello non contano. Ad esempio, penso che saresti pazzo di aritmetica di routine re-jigger per sostituire la moltiplicazione e la divisione con operazioni di bit shift equivalenti per salvare un ciclo o due. L'accelerazione dovrebbe essere microscopica, il compilatore potrebbe farlo comunque, e ho il sospetto che fare cose come triangle_area = (base >> 1) * height
sia solo per chiedere guai quando qualcuno guarda il tuo codice in sei mesi. Allo stesso modo, un codice molto più vecchio salta attraverso incredibili telai per ridurre il numero di operazioni in virgola mobile; anche in questi giorni non vale la pena, il sovraccarico mentale e il potenziale per i bug.
D'altra parte, ci sono altri concetti di basso livello che possono darti guadagni relativamente grandi per un lavoro minimo. Ad esempio, prendere in considerazione la memorizzazione nella cache. Ad esempio, è possibile scorrere su una matrice NxN in questo modo:
for(i=0; i<N; ++i)
for(j=0; j<N; ++j)
do_something(matrix[i][j]);
o in questo modo:
for(j=0; j<N; ++j)
for(i=0; i<N; ++i)
do_something(matrix[i][j]);
Se la matrice è sufficientemente grande, uno di questi (a seconda di come la lingua definisce l'array) causerà un errore di cache per ogni singolo accesso dell'array, mentre l'altro sarà ottimale. Supponendo che tu debba iterare sopra la matrice in qualche modo, perché non preferire quella potenzialmente più veloce? Sono ugualmente leggibili, ugualmente scrivibili, ecc.
In generale, penso che apprezzare le cose che stanno succedendo "sotto le cappa" può aiutare a informare le tue decisioni quando si programma in linguaggi di livello superiore (ad esempio, posso codificare questo in un modo che non cancella la cache più e più volte ancora?). Se non conosci la relazione tra un indice di array e un indirizzo di memoria, potresti non apprezzare quanto sia importante controllare gli indici di array e le dimensioni del buffer. Penso che potresti raccogliere molte di queste informazioni dalla documentazione del linguaggio di livello superiore, ma sicuramente sarà più intrigante in C.
Ovviamente, il trucco non è esagerare. Esiste una differenza di velocità teorica tra i ++ e ++ i, ma se copiare una singola variabile a quattro byte crea o interrompe la tua web-app, l'app è già in difficoltà.