En aquellos días, los desarrolladores trabajaban mucho más cerca del metal. C fue esencialmente un reemplazo de alto nivel para el ensamblaje, que es casi lo más cercano al hardware que 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 un gran daño si se usan sin cuidado. Además, el uso directo de los punteros abre la posibilidad de muchos problemas de seguridad, que no eran un problema en ese 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 hizo cada vez más importante desde entonces. Por eso, en la actualidad, los lenguajes de nivel superior están diseñados conscientemente para evitar los punteros de memoria en bruto.
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 completados por Turing, por lo que en teoría, todo lo que sea posible en un solo idioma es posible en todos. Solo piense en lo que sucede cuando se compila y ejecuta una pieza de código VB.Net o Java: finalmente, se traduce (o se asigna a) el código de la máquina, porque eso es lo único que la máquina entiende. En lenguajes compilados como C y C ++, puede obtener el cuerpo completo de 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 máquinas virtuales, 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í, eventualmente, está en algún lugar, dentro de los profundos recesos 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 lenguaje específico. Ningún desarrollador sensato comenzaría a escribir una aplicación web en ensamblaje :-) 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, normalmente en C.
Así que para llegar a la pregunta,
¿Cree que el conocimiento sobre los indicadores a los jóvenes es importante?
El concepto detrás de los punteros es indirection . Este es un concepto muy importante y, en mi humilde opinión, todo buen programador debería comprenderlo en un cierto nivel. Incluso si alguien está trabajando únicamente con idiomas de nivel superior, la indirección y las referencias siguen siendo importantes. No entender esto significa no poder usar toda una clase de herramientas muy potentes, lo que limita seriamente la capacidad de resolución de problemas de uno a largo plazo.
Así que mi respuesta es sí, si quieres convertirte en un programador realmente bueno, también debes entender los punteros (así como la recursión: este es el otro obstáculo típico para los desarrolladores en ciernes). Es posible que no necesite comenzar con él. No creo que C sea la mejor lengua como primera lengua en la actualidad. Pero en algún punto uno debería familiarizarse con el direccionamiento indirecto. Sin él, nunca podremos entender cómo funcionan realmente las herramientas, las bibliotecas y los marcos que estamos utilizando. Y un artesano que no entiende cómo funcionan sus herramientas es muy limitado. Justo lo suficiente, uno puede entenderlo en lenguajes de programación de nivel superior también. Una buena prueba de fuego es implementar correctamente una lista doblemente enlazada: si puedes hacerlo en tu idioma favorito, puedes decir que entiendes lo suficientemente bien la indirección.
Pero si no es por otra cosa, deberíamos hacerlo para aprender a respetar a los programadores de la antigüedad que lograron construir cosas increíbles utilizando las herramientas ridículamente simples que tenían (en comparación con las que tenemos ahora). Todos estamos parados sobre los hombros de gigantes, y nos hace bien reconocer esto, en lugar de fingir que somos los mismos gigantes.