Non penso che per un algoritmo di apprendimento dei programmatori linguistici di alto livello sia importante essere produttivi. È come sapere come funziona il compilatore, come funziona il garbage collector, come funziona una macchina a stati finiti, perché le operazioni in virgola mobile possono portare a risultati di calcolo errati, come ASCII è diverso da UTF-8 e così via.
I linguaggi di alto livello, che nascondono deliberatamente elementi di basso livello dal programmatore, vogliono darti la possibilità di concentrarti sulle regole di business. Ho visto molti programmatori sprovvisti di conoscenze "di basso livello" e comunque lavorano correttamente.
Come un meccanico può ottenere il massimo dalla sua auto rispetto a un normale guidatore di auto, un programmatore con (almeno alcune) conoscenze "di basso livello" prenderà decisioni migliori. Per algoritmi di ordinamento questo significa ad esempio: Se sai che i dati sono in parte ordinati, probabilmente scegli Bubble sort. Il programmatore accanto a te, che non lo sa, potrebbe scegliere un algoritmo più lento. Farà il suo lavoro fatto: sì. Sarà in grado di spiegare agli stakeholder se può rendere l'ordinamento più veloce? Forse no.
Tuttavia: ha importanza? Per la maggior parte delle applicazioni che sono programmate con un linguaggio di programmazione di alto livello, raramente conta. Ma in quei rari casi, le decisioni sbagliate possono avere conseguenze devastanti. L'algoritmo di ordinamento errato renderà il tuo programma lento, la decisione sbagliata sulla codifica dei caratteri renderà impossibile l'internazionalizzazione e il tipo di numero sbagliato porterà a risultati di calcolo errati.
Quindi spetta a te: vuoi essere produttivo o vuoi prendere le decisioni giuste?