Naquela época, os desenvolvedores estavam trabalhando muito mais perto do metal. C era essencialmente um substituto de nível mais alto para a montagem, que é quase tão próximo do hardware quanto possível, então era natural que você precisasse de ponteiros 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 usados de maneira descuidada. Além disso, o uso direto de ponteiros abre a possibilidade para muitos problemas de segurança, que não eram um problema naquela época (em 1970, a internet consistia em cerca de algumas dezenas de máquinas em algumas universidades, e nem sequer era chamada assim ...), mas tornou-se cada vez mais importante desde então. Portanto, hoje em dia, linguagens de alto nível são projetadas conscientemente para evitar ponteiros de memória brutos.
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: -)
Em primeiro lugar, todas essas linguagens (até mesmo assembly) são Turing completas, portanto, em teoria, o que for possível em um idioma, é possível em todos. Basta pensar sobre o que acontece quando uma parte do código VB.Net ou Java é compilada e executada: eventualmente, ela é traduzida em (ou mapeada para) código de máquina, porque essa é a única coisa que a máquina entende. Em linguagens compiladas como C e C ++, você pode obter o corpo inteiro do código de máquina equivalente ao código fonte de nível superior original, como um ou mais arquivos / bibliotecas executáveis. Em linguagens baseadas em VM, é mais complicado (e pode nem ser possível) obter toda a representação equivalente do código de máquina do seu programa, mas ainda assim ele está lá em algum lugar, dentro dos recessos profundos do sistema de tempo de execução e do JIT. / p>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 em assembly :-) Mas é útil ter em mente que a maioria ou todas essas linguagens de nível mais alto são construídas em cima de uma grande quantidade de tempo de execução e código de biblioteca de classes, um grande pedaço de que é implementado em uma linguagem de nível inferior, normalmente em C.
Então, para chegar à pergunta,
Do you think knowledge on pointers to the young people [...] is important?
O conceito por trás dos ponteiros é indireto . Este é um conceito muito importante e IMHO todo bom programador deve compreendê-lo em um determinado nível. Mesmo que alguém trabalhe apenas com linguagens de nível superior, a indireção e as referências ainda são importantes. Não entender isso significa ser incapaz de usar uma classe inteira de ferramentas muito potentes, limitando seriamente a capacidade de resolver problemas a longo prazo.
Então, minha resposta é sim, se você quer se tornar um programador realmente bom, você deve entender os ponteiros também (assim como a recursão - este é o outro típico obstáculo para desenvolvedores iniciantes). Você pode não precisar começar com isso - eu não acho que C é ideal como primeira língua hoje em dia. Mas, em algum momento, deve-se familiarizar-se com a indireção. Sem isso, nunca podemos entender como as ferramentas, bibliotecas e frameworks que estamos usando realmente funcionam. E um artesão que não entende como suas ferramentas funcionam é muito limitado. Justo o suficiente, pode-se ter uma noção disso em linguagens de programação de nível superior também. Um bom teste decisivo é a correta implementação de uma lista duplamente vinculada - se você pode fazê-lo em seu idioma favorito, pode reivindicar que entende bem a indireção.Mas se não for para mais nada, devemos fazê-lo para aprender o respeito pelos programadores de antigamente que conseguiram construir coisas inacreditáveis usando as ferramentas ridiculamente simples que tinham (comparadas 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 gigantes.