¿La codificación en C pura usando punteros en lugar de usar contenedores C ++ como vectores ayuda a hacer un mejor programador a largo plazo?

¿Por qué parar en C? He escrito toneladas de código en lenguaje ensamblador. ¿Soy el mejor programador para ello? Bueno, probablemente conozco el conjunto de instrucciones de esa gran marca de mainframe mejor de lo que lo haría de otra manera, pero todavía puedo esperar obtener más funcionalidad de N líneas de código al codificar en Python y luego mantener un lenguaje de bajo nivel. Hay un momento y lugar para varias opciones de herramientas y si su única herramienta es un martillo, la solución a todos los problemas se verá como un clavo.

En ensamblador puedes hacer cosas increíbles, trucos con los registros y secuencias de llamadas. Convertimos los programas PL / I en co-rutinas para que pudieran ejecutarse como rutinas de salida de utilidad de clasificación sin la sobrecarga de construir un entorno de tiempo de ejecución PL / I para cada registro procesado. Fue difícil de explicar a los programadores que solo sabían lenguajes de alto nivel, pero seguro que funcionó bien.

He notado que una clave para ser productivo en Python es dejar de preocuparse por cómo funcionará la implementación subyacente. Puede que tenga que pensar en eso al realizar el ajuste, pero no durante el trabajo de implementación inicial. No se preocupe por optimizar los detalles de bajo nivel hasta que tenga mediciones reales que muestren que esos detalles de bajo nivel son un problema de rendimiento que necesita ajustes. La optimización prematura es la raíz de muchos males.

Hay algunas cosas en las que las personas serán mejores, pero a la larga, usar conceptos de nivel superior es mucho mejor. Ciertamente, puede obtener mucha velocidad bajando al metal, pero algunas técnicas de optimización solo son visibles desde un nivel superior. Por ejemplo, verá que no desea volver a implementar la misma cosa una y otra vez, sino que reutiliza las cosas de manera inteligente.

Sin embargo, el objetivo del desarrollo de software es dedicar tiempo a USAR cosas como vectores en lugar de implementarlas una y otra vez. Entonces, C ++, C #, Java ganan a largo plazo, porque le permiten centrarse más en mejorar los algoritmos de nivel superior. Los programadores de C tienden a centrarse en la optimización local, mientras que los desarrolladores de nivel superior tienden a centrarse en las mejoras y optimizaciones de algoritmos.

Probablemente tendrá dificultades para implementar una cosa similar a una clase de vectores en C tan rápido como el std :: vector. Y std :: vector está justo ahí.

Diría que sí hasta cierto punto, los punteros son algo difícil (desde la perspectiva de un programador novato) y realmente no te alejas de ellos en C ++. Por lo tanto, incluso cuando utiliza principalmente bibliotecas estándar en C ++, le aconsejo que también conozca los punteros. Pero tenga en cuenta que son solo un pequeño aspecto de lo que necesitaría para convertirse en un programador de C ++ realmente bueno.

Para otros lenguajes de más alto nivel como Java / C # o incluso más de alto nivel como Python / Ruby / etc. los indicadores son menos preocupantes ya que estos lenguajes tienden a abstraerlos a una situación “detrás de escena”. Aunque podría ayudarlo a comprender por qué ciertas cosas funcionan más rápido / mejor que otras (es decir, porque puede razonar sobre cómo los internos / bibliotecas de un idioma en particular manejan los datos).

Si está escribiendo C para hacer aplicaciones personales y en el proceso reinventa la biblioteca de clases estándar, entonces sí, terminará después de mucho tiempo con una excelente comprensión del funcionamiento de bajo nivel de una computadora.

Si está tratando de ganarse la vida como programador, entonces no, ¡no lo haga! ¡En el proceso de reinventar la rueda C ++, perderá mucho tiempo depurando bloqueos y tratando con clientes enojados!

¿Es como preguntar si debería ser un reproductor analógico en el mundo digital?

Desde mi punto de vista, podría ser difícil para los futuros desarrolladores mantener el código escrito como el código escrito en punteros puros podría ser difícil de leer para algunos desarrolladores.

More Interesting

¿Cuáles son las aplicaciones de aprendizaje profundo que funcionan en este momento y se usan a diario?

¿Qué herramienta de desarrollo, o característica de herramienta, mejoraría más su productividad y calidad?

¿Cuáles son algunos principios fundamentales de diseño y arquitectura de software cuando se construye un servidor / cliente de juegos MMO?

¿Cómo es que algunos hombres suponen que las mujeres (atractivas) son menos inteligentes?

¿Cuáles son algunos buenos consejos para que un estudiante de pregrado de CS aprenda independientemente sobre la arquitectura de software?

¿Qué tan difícil es programar un software como Facebook?

Me dirijo a mi tercer año como estudiante de ingeniería de software, ¿de qué maneras puedo mejorar mis habilidades antes de volver a la universidad?

¿Cuál es el peor error cometido en informática y programación que resultó ser doloroso para los programadores durante años?

¿Cuáles son las herramientas útiles para la creación de nombres de producto / inicio de crowdsourcing?

Cómo simplificar un proceso de gestión de cambios complejo y frustrante al entregar software a producción

¿Por qué pude exceder el máximo de 'Preguntar para responder'?

¿Debo realizar una pasantía de ingeniería de software en Twitter, Pinterest o Palantir?

¿Cuáles son algunas de las dificultades que un candidato experimentado (10-15) debe tener en cuenta en una entrevista de diseño de sistemas de software?

¿Vale la pena emigrar a Suecia o Noruega como desarrollador de software?

¿Puede un trabajo de enseñanza en Delhi pagar tan bien como un trabajo de desarrollo de software?