En aquellos días, los desarrolladores estaban trabajando mucho más cerca del metal. C fue esencialmente un reemplazo de nivel superior para el ensamblaje, que está casi tan cerca del hardware como puede obtener, por lo que era natural que necesitara punteros para ser eficiente en la resolución de problemas de codificación. Sin embargo, los punteros son herramientas afiladas, que pueden causar grandes daños si se usan descuidadamente. Además, el uso directo de punteros abre la posibilidad a muchos problemas de seguridad, que no eran un problema en aquel entonces (en 1970, Internet consistía en unas pocas docenas de máquinas en un par de universidades, y ni siquiera se llamaba así ...), pero se volvió más y más importante desde entonces. Así que hoy en día los lenguajes de nivel superior están diseñados conscientemente para evitar punteros de memoria sin procesar.
Decir que "las cosas avanzadas hechas en VB.Net o Java no son posibles en C" muestra un punto de vista muy limitado, por decir lo menos :-)
En primer lugar, todos estos lenguajes (incluso el ensamblaje) están completos, por lo que, en teoría, todo lo que es posible en un idioma, es posible en todos. Solo piense en lo que sucede cuando se compila y ejecuta un fragmento de código VB.Net o Java: eventualmente, se traduce (o se asigna a) código de máquina, porque eso es lo único que la máquina entiende. En lenguajes compilados como C y C ++, en realidad puede obtener el cuerpo completo del código de máquina equivalente al código fuente original de nivel superior, como uno o más archivos / bibliotecas ejecutables. En los lenguajes basados en VM, es más complicado (y puede que ni siquiera sea posible) obtener la representación de código de máquina equivalente completa de su programa, pero aún así está allí en algún lugar, dentro de las profundidades del sistema de tiempo de ejecución y el JIT.
Ahora, por supuesto, es una pregunta completamente diferente si alguna solución es factible en un idioma específico. Ningún desarrollador sensato comenzaría a escribir una aplicación web en conjunto :-) Pero es útil tener en cuenta que la mayoría o todos esos lenguajes de nivel superior están construidos sobre una gran cantidad de código de biblioteca de clase y tiempo de ejecución, una gran parte de que se implementa en un lenguaje de nivel inferior, generalmente en C.
Entonces, para llegar a la pregunta,
¿Crees que el conocimiento sobre los consejos para los jóvenes [...] es importante?
El concepto detrás de los punteros es indirección . Este es un concepto muy importante y, en mi humilde opinión, todo buen programador debería comprenderlo en cierto nivel. Incluso si alguien está trabajando únicamente con lenguajes de nivel superior, la indirección y las referencias siguen siendo importantes. No comprender esto significa no poder utilizar toda una clase de herramientas muy potentes, lo que limita seriamente la capacidad de resolución de problemas a largo plazo.
Entonces, mi respuesta es sí, si quieres convertirte en un programador verdaderamente bueno, también debes comprender los punteros (así como la recursividad: este es el otro obstáculo típico para los desarrolladores en ciernes). Es posible que no necesite comenzar con esto: no creo que C sea óptimo como primer idioma hoy en día. Pero en algún momento uno debería familiarizarse con la indirección. Sin ella, nunca podremos entender cómo funcionan realmente las herramientas, bibliotecas y marcos que estamos utilizando. Y un artesano que no entiende cómo funcionan sus herramientas es muy limitado. Es justo que uno también lo entienda en lenguajes de programación de alto nivel. Una buena prueba de fuego es implementar correctamente una lista doblemente vinculada: si puede hacerlo en su idioma favorito, puede afirmar que entiende la indirección lo suficientemente bien.
Pero si no fuera por otra cosa, deberíamos hacerlo para aprender a respetar a los programadores de antaño que lograron construir cosas increíbles utilizando las herramientas ridículamente simples que tenían (en comparación con lo que tenemos ahora). Todos estamos parados sobre los hombros de gigantes, y nos hace bien reconocer esto, en lugar de pretender que somos nosotros mismos los gigantes.