Ошибочно полагать, что изучение C каким-то образом автоматически даст вам лучшее понимание проблем программирования низкого уровня. Во многих случаях даже уровень C слишком высок, чтобы дать вам хорошее понимание проблем эффективности.
Классика i ++ против ++ i. Это слишком цитируется, поэтому, возможно, большинство людей знают о влиянии производительности между этими двумя операциями. Но изучение C магически не научит вас этому.
Полагаю, я понимаю аргументы о строках. Когда строковые операции сделаны обманчиво простыми, люди часто используют их неэффективными способами. Но опять же, знание того, что strncat существует, не дает вам полной оценки проблем эффективности. Многие программисты на C, вероятно, даже не задумывались о том, что strncat должен выполнять внутреннюю операцию strlen.
Даже используя C, важно понимать, что происходит за кулисами, если эффективность является проблемой. Люди, которые знают C, склонны смотреть на вещи в прогрессии. Сборка и машинный код являются строительными блоками C, а C - строительным блоком языков более высокого уровня.
Это не совсем так, но очевидно, что C "ближе к металлу", чем многие языки более высокого уровня. Это имеет по крайней мере два эффекта: проблемы эффективности не так скрыты за неявным поведением, и его легче испортить.
Итак, вам нужен конкретный пример того, как знание C дает вам преимущество. Я не думаю, что есть один. Я думаю, что люди имеют в виду , когда говорят, что знание того, что происходит за кулисами на любом языке, для которого вы пишете, помогает вам принимать более разумные решения о том, как писать код. Однако ошибочно полагать, что, например, C - это «то, что происходит за кулисами» в Java.