В те времена разработчики работали гораздо ближе к металлу. По сути, C был заменой сборки на более высоком уровне, который почти настолько близок к аппаратному обеспечению, насколько это возможно, поэтому естественно, что вам нужны указатели, чтобы быть эффективными в решении проблем кодирования. Тем не менее, указатели являются острыми инструментами, которые могут нанести большой ущерб при неосторожном использовании. Кроме того, прямое использование указателей открывает возможность для многих проблем безопасности, которые тогда не были проблемой (в 1970 году Интернет состоял из нескольких десятков машин в нескольких университетах, и его даже так не называли). ...), но с тех пор становится все более и более важным. Так что в настоящее время языки более высокого уровня сознательно разработаны, чтобы избежать необработанных указателей памяти.
Сказать, что «продвинутые вещи, выполненные в VB.Net или Java, не возможны в C», показывает очень ограниченную точку зрения, если не сказать больше :-)
Прежде всего, все эти языки (даже ассемблер) являются полными по Тьюрингу, поэтому теоретически все, что возможно на одном языке, возможно на всех. Подумайте только о том, что происходит, когда часть кода VB.Net или Java компилируется и выполняется: в конце концов, он преобразуется (или сопоставляется) в машинный код, потому что это единственное, что понимает машина. В скомпилированных языках, таких как C и C ++, вы фактически можете получить полный объем машинного кода, эквивалентный исходному исходному коду более высокого уровня, в виде одного или нескольких исполняемых файлов / библиотек. В языках на основе виртуальных машин более сложно (и может даже не быть возможным) получить полное эквивалентное представление машинного кода вашей программы, но, тем не менее, в конечном итоге оно находится где-то в глубоких нишах системы времени выполнения и JIT.
Теперь, конечно, это совсем другой вопрос, возможно ли какое-то решение на конкретном языке. Ни один здравомыслящий разработчик не начал бы писать веб-приложение в сборке :-) Но полезно иметь в виду, что большинство или все эти языки более высокого уровня построены на основе огромного количества кода времени выполнения и библиотеки классов, большой кусок который реализован на языке более низкого уровня, как правило, на C.
Итак, чтобы перейти к вопросу,
Считаете ли вы, что знания об указателях для молодежи [...] важны?
Концепция указателей - косвенность . Это очень важная концепция, и ИМХО каждый хороший программист должен понять ее на определенном уровне. Даже если кто-то работает исключительно с языками более высокого уровня, косвенные ссылки и ссылки по-прежнему важны. Неспособность понять это означает неспособность использовать целый класс очень мощных инструментов, серьезно ограничивающих способность решать проблемы в долгосрочной перспективе.
Так что мой ответ - да, если вы хотите стать действительно хорошим программистом, вы должны понимать и указатели (а также рекурсию - это другой типичный камень преткновения для начинающих разработчиков). Возможно, вам не нужно начинать с этого - я не думаю, что C является оптимальным в качестве первого языка в наши дни. Но в какой-то момент нужно ознакомиться с косвенностью. Без этого мы никогда не сможем понять, как на самом деле работают инструменты, библиотеки и интегрированные среды. И мастер, который не понимает, как работают его инструменты, очень ограничен. Справедливо, можно понять это и на языках программирования более высокого уровня. Одним из хороших лакмусовых тестов является правильная реализация двусвязного списка - если вы можете сделать это на своем любимом языке, вы можете утверждать, что понимаете косвенное обращение достаточно хорошо.
Но если бы не что-то еще, мы должны сделать это, чтобы научиться уважать старых программистов, которым удалось создать невероятные вещи, используя смехотворно простые инструменты, которые у них были (по сравнению с тем, что мы имеем сейчас). Мы все стоим на плечах гигантов, и нам полезно это признать, а не делать вид, что мы сами гиганты.