Я не согласен с Джоэлом в том, что проблема заключается в том, чтобы думать на нескольких уровнях абстракции как таковой, я думаю, что это больше, чем указатели и рекурсия, это два хороших примера проблем, которые требуют изменения в ментальной модели людей, как работают программы.
Я думаю, что указатели являются более простым примером для иллюстрации. Работа с указателями требует умственной модели выполнения программы, которая учитывает то, как программы фактически работают с адресами памяти и данными. Мой опыт показывает, что часто программисты даже не думают об этом, прежде чем узнают об указателях. Даже если они знают это в абстрактном смысле, они не приняли его в свою когнитивную модель работы программы. Когда вводятся указатели, это требует фундаментального изменения в том, как они думают о том, как работает код.
Рекурсия проблематична, потому что есть два концептуальных блока для понимания. Первый - на уровне машины, и, как и указатели, его можно преодолеть, развивая хорошее понимание того, как программы на самом деле хранятся и выполняются. Другая проблема с рекурсией, я думаю, заключается в том, что у людей есть естественная тенденция пытаться деконструировать рекурсивную проблему в нерекурсивную, что запутывает понимание рекурсивной функции как гештальта. Это либо проблема людей с недостаточным математическим образованием, либо ментальная модель, которая не связывает математическую теорию с разработкой программ.
Дело в том, что я не думаю, что указатели и рекурсия - единственные две области, которые являются проблематичными для людей, застрявших в недостаточной ментальной модели. Параллелизм, по-видимому, является еще одной областью, в которой некоторые люди просто застревают и испытывают трудности с адаптацией своей ментальной модели для объяснения, просто часто в интервью легко проверить указатели и рекурсию.