Naquela época, os desenvolvedores estavam trabalhando muito mais próximos do metal. C era essencialmente uma substituição de nível superior para montagem, que é quase o mais próximo possível do hardware, por isso era natural que você precisasse de indicadores para ser eficiente na solução de problemas de codificação. No entanto, os ponteiros são ferramentas afiadas, que podem causar grandes danos se usadas de forma descuidada. Além disso, o uso direto de ponteiros abre a possibilidade de muitos problemas de segurança, que não eram um problema na época (em 1970, a Internet consistia em cerca de algumas dúzias de máquinas em algumas universidades, e nem era chamada assim. ...), mas tornou-se cada vez mais importante desde então. Atualmente, linguagens de nível superior são projetadas conscientemente para evitar indicadores de memória não processada.
Dizer que "coisas avançadas feitas em VB.Net ou Java não são possíveis em C" mostra um ponto de vista muito limitado, para dizer o mínimo :-)
Antes de tudo, todas essas linguagens (inclusive montagem) são Turing completas, portanto, em teoria, o que for possível em um idioma, é possível em todos. Apenas pense no que acontece quando um pedaço de código VB.Net ou Java é compilado e executado: eventualmente, é traduzido (ou mapeado para) código de máquina, porque essa é a única coisa que a máquina entende. Em linguagens compiladas como C e C ++, é possível obter todo o corpo do código de máquina equivalente ao código fonte original de nível superior, como um ou mais arquivos / bibliotecas executáveis. Em linguagens baseadas em VM, é mais complicado (e talvez nem seja possível) obter toda a representação equivalente de código de máquina do seu programa, mas ainda assim ela está presente em algum lugar, dentro dos recessos profundos do sistema de tempo de execução e do JIT.
Agora, é claro, é uma questão totalmente diferente se alguma solução é viável em um idioma específico. Nenhum desenvolvedor sensato começaria a escrever um aplicativo Web no assembly :-) Mas é útil ter em mente que a maioria ou todas essas linguagens de nível superior são criadas com base em uma enorme quantidade de código de tempo de execução e de biblioteca de classes, uma grande parte da que é implementado em um idioma de nível inferior, normalmente em C.
Então, para chegar à pergunta,
Você acha importante o conhecimento de indicadores para os jovens [...]?
O conceito por trás dos ponteiros é indireto . Este é um conceito muito importante e IMHO todo bom programador deve entender em um determinado nível. Mesmo se alguém estiver trabalhando apenas com idiomas de nível superior, a indireção e as referências ainda serão importantes. Não compreender isso significa ser incapaz de usar toda uma classe de ferramentas muito potentes, limitando seriamente a capacidade de resolução de problemas a longo prazo.
Portanto, minha resposta é sim, se você quiser se tornar um programador realmente bom, também deve entender os ponteiros (assim como a recursão - esse é o outro obstáculo típico para desenvolvedores iniciantes). Você pode não precisar começar com isso - não acho que o C seja ótimo como primeira língua hoje em dia. Mas em algum momento deve-se familiarizar com a indireção. Sem ele, nunca podemos entender como as ferramentas, bibliotecas e estruturas que estamos usando realmente funcionam. E um artesão que não entende como suas ferramentas funcionam é muito limitado. Justo o suficiente, pode-se entender também em linguagens de programação de nível superior. Um bom teste decisivo está implementando corretamente uma lista duplamente vinculada - se você pode fazê-lo no seu idioma favorito, pode afirmar que entende bem a indireção.
Mas, se não fosse por mais alguma coisa, deveríamos fazê-lo para aprender a respeitar os programadores antigos que conseguiram construir coisas inacreditáveis usando as ferramentas ridiculamente simples que possuíam (em comparação com o que temos agora). Estamos todos de pé sobre os ombros dos gigantes, e é bom para nós reconhecer isso, em vez de fingir que somos os próprios gigantes.