Ще в ті часи розробники працювали набагато ближче до металу. По суті, C був заміною більш високого рівня для складання, яка майже наближається до апаратних засобів, наскільки ви можете отримати, тож було природно, що вам потрібні вказівники для ефективного вирішення проблем кодування. Однак покажчики - це гострі інструменти, які при необережному використанні можуть завдати великої шкоди. Крім того, пряме використання покажчиків відкриває можливість для багатьох проблем із безпекою, які тоді не були проблемою (в 1970 році Інтернет складався з декількох десятків машин у декількох університетах, і його навіть не називали подібним ...), але з цього часу набуває все більшого значення. Тож нині мови вищого рівня свідомо розроблені, щоб уникнути необмежених покажчиків пам'яті.
Якщо говорити про те, що "вдосконалені речі, зроблені в VB.Net або Java, неможливо в C", показує дуже обмежену точку зору, якщо не менше :-)
Перш за все, всі ці мови (навіть складання) є Тюрінгом завершеними, тому теоретично все, що можливо на одній мові, можливо в усіх. Подумайте лише про те, що трапиться, коли фрагмент коду VB.Net або Java буде зібраний і виконаний: зрештою, він переводиться на (або відображається в) машинний код, тому що це єдине, що розуміє машина. У компільованих мовах, таких як C і C ++, ви можете фактично отримати повний корпус машинного коду, еквівалентний вихідному вихідному коду вищого рівня, як один або кілька виконуваних файлів / бібліотек. У мовах, що базуються на VM, складніше (а може і не можливо) отримати ціле еквівалентне представлення машинного коду вашої програми, але все-таки це десь там, в глибоких поглибленнях системи виконання та JIT.
Тепер, звичайно, зовсім інше питання, чи можливе якесь рішення певною мовою. Жоден розумний розробник не почне писати веб-додаток на зборах :-) Але корисно мати на увазі, що більшість або всі ці мови вищого рівня побудовані на основі величезної кількості бібліотечного коду виконання та класу, великий шматок яка реалізована мовою нижчого рівня, як правило, на С.
Отже, щоб перейти до питання,
Як ви вважаєте, важливі знання про вказівки для молоді [...]?
Поняття за вказівниками - непряме . Це дуже важлива концепція, і IMHO кожен хороший програміст повинен зрозуміти її на певному рівні. Навіть якщо хтось працює виключно з мовами вищого рівня, непрямість та посилання все ще важливі. Нерозуміння цього означає неможливість використовувати цілий клас дуже потужних інструментів, серйозно обмежуючи здатність вирішувати проблеми в довгостроковій перспективі.
Тож моя відповідь - так, якщо ви хочете стати по-справжньому хорошим програмістом, ви також повинні розуміти покажчики (як і рекурсія - це інший типовий камінь спотикання для розробників-початківців). Можливо, вам не потрібно буде починати це - я не думаю, що C є оптимальним як перша мова в наш час. Але в якийсь момент слід ознайомитися з непрямістю. Без цього ми ніколи не можемо зрозуміти, як насправді працюють інструменти, бібліотеки та рамки, які ми використовуємо. А майстриня, який не розуміє, як працюють його інструменти, дуже обмежений. Досить справедливо, ви можете зрозуміти це і в мовах програмування вищого рівня. Один хороший тест на лакмус - це правильно реалізувати подвійний список - якщо ви можете це зробити улюбленою мовою, ви можете стверджувати, що ви досить добре розумієте непрямість.
Але якщо ні для чого іншого, ми повинні зробити це, щоб навчитися поваги до старих програмістів, яким вдалося побудувати неймовірні речі, використовуючи смішно прості інструменти, які вони мали (порівняно з тим, що ми маємо зараз). Всі ми стоїмо на плечах гігантів, і нам добре визнати це, а не робити вигляд, що ми самі гіганти.