Я довольно много узнал о низкоуровневом программировании, и я думаю, что он чрезвычайно полезен для каждого кода, который я пишу. Даже языки высокого уровня имеют некоторые версии, скажем, базовых примитивов синхронизации (мьютексы / блокировки, условия, семафоры); они все еще должны читать с диска или с сетевой карты; им по-прежнему приходится копировать байты из одного места в памяти в другое и т. д. Дело в том, что тот факт, что вы используете язык высокого уровня, не означает, что бесполезно знать, как эти вещи работают. Если у вас есть понимание того, как компьютер работает на самом низком уровне, вы всегда можете применить эти знания для написания более эффективного и / или менее подверженного ошибкам кода независимо от того, насколько абстрактна ваша платформа. Знание низкоуровневых операций может даже научить вас вещам, которые вы, возможно, никогда бы не узнали иначе - нет лучшего способа научиться правильно использовать что-то вроде мьютекса, чем применять его. (Хорошо, может быть, это немного преувеличено, но вы поняли мою точку зрения, я надеюсь)
В итоге, я бы сказал, что да, для программистов на всех уровнях абстракции абсолютно хорошая идея изучить основы. Но я не думаю, что это хорошая идея, чтобы начинать с основ. Программы на уровне ассемблера, как известно, трудны для понимания, и я думаю, что попытка навязать это новичку в программировании, скорее всего, обескуражит его / ее. Я упомянул, что понимание основных операций поможет вам писать более эффективный и / или менее подверженный ошибкам код, но, конечно, совсем не обязательно писать код. Так что, по моему мнению, большинству людей лучше всего начинать где-то посередине, где они все еще могут привязываться к знакомым понятиям, таким как объекты, знакомясь с процессом кодирования. После некоторого опыта в этой области, процессорные ресурсы стали честной игрой; -)