2009-04-14 9 views
16

A menudo he pensado en tratar de aprender un idioma como C++ para tener una mejor comprensión de las computadoras. Para mí, conocer C/C++ es como el cinturón negro de la programación. Pero luego miras a algunos grandes desarrolladores y no creo que hayan aprendido C++ alguna vez.¿Saber C y/o C++ me hará un mejor desarrollador?

Es una buena idea para un día lluvioso (más como un año lluvioso) o debería seguir presionando los límites de los idiomas que ya conozco.

EDITAR: Para responder algunas preguntas. Tengo un buen par de años de experiencia en Java. He trabajado bastante con Delphi y hace aproximadamente un año y medio comencé a usar C# para algunas aplicaciones web que tenía que crear.

+0

¿no debería ser wiki de la comunidad? – lothar

+0

"Para mí saber C/C++ es como el cinturón negro de la programación": D – developerbmw

Respuesta

13

Le sugiero que lea este libro: http://csapp.cs.cmu.edu/.

Es una lectura extremadamente buena para cualquier programador. Será Realmente le enseñará cómo funcionan sus programas a bajo nivel.

Este libro usa ensamblaje y C, pero realmente no sé si es legible sin conocimiento de C. De todos modos, sugiero no pasar mucho tiempo aprendiendo C. Probablemente necesitarías al menos un año antes de que comiences a entender cómo escribir buenos programas C (necesitaba dos años, personalmente).

C y C++ no enseñan mucho sobre cosas de bajo nivel (sí, sé que muchas personas dicen lo contrario). Aprende a asignar/desasignar memoria usted mismo, pero creo que eso es todo. Por otro lado, el libro que he vinculado anteriormente le enseñará cómo escribir su propio asignador de memoria, cómo optimizar programas y mucho más.

+0

Buen libro de hecho. –

+1

Yay, +1 por afirmar que C/C++ no enseña tantas cosas de bajo nivel como la gente suele creer. – jalf

+0

Um, te das cuenta de que el libro al que vinculaste usa C para enseñar cosas de bajo nivel, ¿no? – TMN

19

Por supuesto, realmente depende de dónde desee mejorar. Si va a hacer algo de programación de sistemas, por ejemplo, entonces debería hacerlo. Sin embargo, si desea desarrollar aplicaciones en la web, no se moleste. Para más detalles sobre este tema, consulte: Which sector of software industry uses c++

La primera cosa a tener en cuenta cuando empieza a aprender, sin embargo: There is no such language as C/C++.

+0

Buena respuesta y buenas referencias. :) +1 – jalf

23

Cada lengua única y una herramienta que se aprende es un mejor programador. Sí.

+0

Si alguien vota esta respuesta, le pido que proporcione una explicación lógica de por qué la está votando. Esto es lo que me enseñaron cientos de fuentes. No veo cómo puede ser posible que esté mal. – Rayne

+0

La votación negativa de esta gente me hace perder la esperanza en la sociedad. – Juliano

+0

Ha sido downvoted dos veces hasta ahora. Nadie ha explicado por qué. – Rayne

0

¿Estás hablando de C o C++?

Usted no dice lo que sabe actualmente. Si no has hecho C, ciertamente lo recomendaría. Le ayudará a comprender lo que está sucediendo en el nivel bajo, cerca del metal. Su diseño y estilo influyen tanto en las implementaciones actuales de lenguaje/script.

Si desea aprender un idioma de OO, tal vez le sugiera una introducción más simple a OO, quizás Java o C# inicialmente. C++ puede ser una introducción intimidante a este tema.

+0

O Scala. Scala es más OOPish que Java.: P – Rayne

+0

Pero también más complejo y funcional.! –

+0

Sí. Creo que el aspecto funcional oscurecerá el concepto OO de t El POV de aprender OO como concepto –

8

Aprendería las plantillas C++ como ejercicios cerebrales. Esto como cualquier otra técnica de programación te obligará a pensar en una tarea en una base más amplia.

+0

heh, "ejercicios cerebrales". Esa es una buena manera de decirlo. +1 :) – jalf

10

Siempre se recomienda ampliar su base de conocimientos. And as often stated by Joel Spolsky.

Su argumento es, que es como conducir con un palo y saber acerca de la mecánica, la codificación en C (o fácil de usar montar) le ayuda a comprender lo que está pasando bajo el capó

+0

De acuerdo: el aprendizaje de C o C++ no lo convertirá en un mejor programador porque "aprendió otro idioma", sino porque la naturaleza de esos idiomas requiere un nivel diferente de comprensión de lo que sucede debajo del capó, y * que * sin duda te hará un mejor programador. – Matt

0

Sí, si se refiere a conocer a fondo, no solo algunos conocimientos básicos. C++ combina la proximidad a las partes internas de la computadora con una gran flexibilidad, por lo que el conocimiento profundo de C++ implica que usted entiende cómo funciona una computadora muy bien. Y el último ciertamente te da una ventaja.

1

¡Nunca es malo conocer un idioma más! Si aprendes C y Assembler, verás cómo comenzó todo. Esto es realmente útil para las conversaciones en las reuniones;)

Eso es más acerca de usted, que sus habilidades de programación.

8

Conocer el idioma no lo convierte en un mejor desarrollador. Aplicando el idioma de la manera correcta (la mayoría de las veces evita abusar de los conceptos de lenguaje).

usando la potencia del lenguaje hace un mejor desarrollador

+0

+1, lo tienes ^^ –

+0

No -1, pero conocer un idioma lo suficientemente práctico como para hacerte un mejor desarrollador; podrás encontrar mejor una herramienta útil para un trabajo y consolidarás mejor otros conceptos que conoces al hacerlos de diferentes maneras. –

+0

Para conocer un idioma, pero aplicarlo incorrectamente la mayor parte del tiempo parece poco probable. –

1

Sí.(tipo de)

Cada vez que programa en un lenguaje con memoria administrada, permite que el compilador trabaje para usted, y con el tiempo confía en cosas de las que tiene poco o ningún conocimiento del funcionamiento interno de .

En un lenguaje administrado sin memoria como C o C++, tienes que pensar en hacia dónde apuntará un puntero al final de un método, si pasar por referencia o devolver una variable, y otras cosas que hacen piensas en el código que estás escribiendo de una manera mucho más objetiva.

El problema es que la capacidad de saber si usar un vector o un arraylist en Java es el camino correcto no se puede aprender hasta que comprenda los conceptos fundamentales de muchas de las estructuras de datos que usa en un día a diario.

Así que sí, aprender a usar C o C++ te convertirá en un mejor programador, pero si eliges tomar este conocimiento y usarlo para hacerte un mejor desarrollador de es tu elección.

3

Ha habido un gran debate sobre esto por Joel y Jeff en los primeros podcasts y no es concluyente y muy controvertido.

Como la mayoría de los programadores más antiguos (no regalando mi edad aquí), tiendo a creer que cuanto más sepa sobre el sistema subyacente y su funcionamiento interno, mejor utilizará formas más modernas y abstractas de programación.

Por lo tanto, saber sobre (m) alloc (asignar memoria para una variable como una cadena o estructura) y comprender por qué algunas manipulaciones de cadenas son lentas en lenguajes de alto nivel puede ser rentable. Esto es sólo un ejemplo.

Si desea aprender sobre los conceptos de OO, hay mejores lugares a donde ir, entonces un lenguaje híbrido como C++ (puede sentir la ruptura entre la capa OO y no OO).

Entonces, yo diría que echarle un vistazo a C no puede doler.

+0

C++ no "simplemente agrega una capa oo". Agrega muchas características mucho más interesantes que OOP, y vale la pena aprender por esas otras razones. Tornillo OOP, eso es tan última década;) – jalf

3

Yo diría que cada idioma nuevo mejora sus habilidades de programación, por lo que aprender nuevas es siempre una buena idea. Sin embargo, encuentro que el aprendizaje de idiomas que pertenecen a otros paradigmas distintos al que estoy acostumbrado actualmente es una forma aplastante de convertirme en un mejor programador. Por ejemplo, aprender prólogo me hizo comprender realmente la recursión por primera vez, smalltalk y ruby ​​me ayudaron a entender la belleza del tipado dinámico, el ceceo me hizo volar la cabeza y C me hizo darme cuenta de lo que sucedía detrás de las cortinas ...

Si está pensando en aprender un nuevo idioma, le pido que lo haga. C te ayudará a entender la asignación de memoria como ninguna otra cosa (a menos que vayas incluso por cosas esenciales como el ensamblador), y C++ te ayudará a amar cualquier otro idioma que conozcas mucho más. ;)

¡La mejor de las suertes!

0

hay un dicho:

Usted vale tanta gente como el número de idiomas que conoces.

Esa es la única razón real para aprender de ellos;)

5

Hay un gran artículo sobre la auto-mejora en la programación: "Teach yourself programming 10 years"

Se dice, que siempre es bueno aprender cosas nuevas. C++ es difícil de aprender, e incluso más difícil de dominar.

Pero le enseña todo tipo de procesamiento de bajo nivel, que es crucial para entender al escribir software a gran escala.

+1

Gracias por el artículo. –

3

Conocer C/C++ te convierte en un desarrollador más útil. C/C++ son bastante penetrantes y la sintaxis de muchos otros idiomas se deriva de ellos.

Nunca duele aprender C tampoco, porque realmente no oculta nada del desarrollador. Aprenderá sobre la compilación, el enlace, las bibliotecas, etc. en detalles sangrientos. Aprenderá sobre las llamadas al sistema sin procesar y la arquitectura de la máquina; cosas que los lenguajes de alto nivel esconden de ti con sus propias abstracciones de conceptos.

Aprender otro idioma lo suficientemente bien como para resolver un problema práctico lo hará un mejor desarrollador simplemente porque ahora tiene una nueva herramienta que se puede aplicar para resolver algunos problemas mejor que otras herramientas. Más herramientas siempre es útil. Aprender las nuevas formas de resolver problemas en otro idioma fortalecerá aún más su conocimiento de conceptos, patrones de diseño, estructuras de datos, etc. ¡Solo puede ser algo bueno!

0

Podría. Hay algunos conceptos muy importantes que se te presentan en la cara, especialmente en C, con los que tienes que lidiar.

Yo diría llevarlo un paso más allá y aprender a ensamblar. Nunca he programado profesionalmente en ningún lenguaje ensamblador, pero el tiempo que pasé trabajando en cada capítulo y ejercicio en Assembly Langauge for the PC ha pagado los mayores dividendos de cualquiera de mis estudios, escuela o independiente. Sabrá lo que es un puntero y una compensación, tendrá una comprensión más profunda de por qué importa la codificación de caracteres, sabrá sobre la pila y el montón, la gestión de memoria, etc. Nunca podrá usar nada de eso directamente, pero sí te hará un mejor programador.

2

Aprender otro idioma te hará un mejor codificador. ¡Especialmente cuando el paradigma del idioma es significativamente diferente de cualquier otro idioma que ya conozcas!

Learning C le dará una mejor comprensión de lo que realmente está haciendo. Será como estar acostumbrado a una calculadora gráfica completa y luego aprender a hacer toda la aritmética, álgebra, cálculo y gráficas con solo una pizarra y tiza. Será un montón de trabajo, pero si lo logra, su modelo mental del código estará mucho más cerca de lo que realmente está sucediendo en la máquina.

Esto no es realmente necesario para ser un buen codificador. En realidad, creo que una de las características de un buen codificador es la capacidad de comprender el código en un nivel más elevado de abstracción y de ver el sistema como un todo. El conocimiento de bajo nivel no te ayuda con el panorama general.Sin embargo, si quieres ser grandioso, tienes que ir más allá de lo bueno. Debe ser capaz de comprender el sistema en muchos niveles diferentes de abstracción desde el nivel del diagrama conceptual superior hasta el nivel de código de máquina simple. Conocer C te ayudará a comprender los bajos niveles. ¡Poder depurar C le ayudará a solucionar problemas en todos los niveles!

C++ le permite realizar operaciones de bajo nivel de C, pero agrega un conjunto de mecanismos de abstracción e instalaciones de reutilización de código para que pueda ser un poco más productivo. Si ya conoce un lenguaje de nivel superior como Python, Ruby, Perl, VB, Java, etc., le recomendaría que haga un esfuerzo para convertirse en experto en C y no intente abordar C++ por el momento. El propósito de aprender otro idioma debe ser expandir tus horizontes. De esta forma, incluso si no termina utilizándolo como profesional o aficionado, aún mejorará sus habilidades de codificación y análisis para los idiomas que usa.

0

Un lenguaje de programación es solo una herramienta. Para ser mejor, debe conocer mejor sus herramientas, ya sea que su herramienta sea C/C++, un pincel o cualquier otra cosa.

2

C++ - No estoy seguro.

C - sin duda:

  • Se le hará consciente de la memoria mennagement - por ejemplo, nadie que no "piensa" C puede comprender, o pensar en Apache pool

  • Se le hará consciente de los problemas de rendimiento como vector de computación/bit-set y desenrollado de bucles (porque a veces te haces a mano)

  • se sentirá más cómodo con Unix

  • C sigue siendo la lingua franca de la industria

1

Una de las cosas más importantes en el diseño de aplicaciones es la cantidad de código de usuario/bibliotecas en todo el idioma, fragmentos de código, tutoriales y todo lo demás.

Dicho esto, C, Altho viejo lenguaje, es lo que debería haber sido Esperanto en idiomas humanos - el lenguaje que todos deben saber :)

¿Por qué? No es importante. Lo que es importante es que te encontrarás con C en todas partes.

0

Debería intentar aprender C y debería intentar aprender C++. Cuando lo haces, pronto te das cuenta de por qué los separé.

Te convertirá en un mejor programador también, porque aprenderás más sobre la máquina en la que se está ejecutando el código en comparación con los idiomas que conoces hasta ahora. Eso en sí mismo ya sería una recompensa suficiente. Aprender C++ también puede hacer que aprendas herencia múltiple, que es otro concepto de programación útil que no está tan extendido en otros idiomas. Si aprende a usar bien el preprocesador, seguramente también lo perderá en otros idiomas.

Sin embargo, una cosa a tener en cuenta: realmente aprender estos dos idiomas lleva mucho tiempo, porque no es suficiente para leer sobre ellos. Necesita trabajar con ellos y resolver problemas reales. Esa es la parte más gratificante al aprender estos idiomas, pero también es la parte más frustrante y que consume mucho tiempo. Estoy aprendiendo desde hace 10 años y me siento incapaz de decir que ahora conozco ambos idiomas. Me siento bastante cómodo, pero sé que estoy lejos de ser perfecto.

6

No hay nada especial en C y C++, que no sea:

  • C es un lenguaje muy poco ambicioso. Su objetivo es/fue más o menos crear un lenguaje ensamblador portátil. Algo más avanzado que eso, no tiene lugar en el lenguaje. Como tal, en lo que respecta al idioma hay nada para aprender de C. No es de ninguna manera un lenguaje difícil, pero requiere mucho trabajo para lograr incluso las cosas más simples. Y es, por supuesto, muy propenso a errores e inseguro en comparación con los lenguajes de nivel superior.
  • C++ es un lenguaje notablemente complicado. Ha tenido muchas influencias diferentes a lo largo de los años y ha robado ideas de una amplia gama de idiomas y paradigmas de programación. Y luego, en la última década, más o menos, la comunidad de C++ ha llegado a un punto en que ha inventado su propio paradigma (programación genérica). Como tal, C++ ha presentado algunas soluciones bastante inteligentes para muchos problemas comunes (en todos los idiomas). Por mucho que a la gente le guste despreciar C++, con frecuencia lo extraño cuando trabajo en C#. Hay una serie de técnicas y abstracciones de alto nivel que son más simples, más limpias y más elegantes en C++. Entonces, desde una perspectiva de lenguaje puro, creo que vale la pena aprender C++. (Y deseo diseñadores Javas o C# 's se habían molestado en hacer eso, en lugar de basar sus lenguas en lo que puede ser descrito con más precisión como 'C con clases'.

Pero creo que lo que estás recibiendo es que aprendizaje de idiomas le dará una mejor comprensión de "lo que está pasando bajo el capó".

puedo ver el punto en eso. C/C++ le da consejos que pueden ser casi asignada directamente a las direcciones de memoria subyacentes Aprender estos idiomas ciertamente te da una especie de intuición sobre lo que sucede debajo (pero como siempre con la intuición, no siempre es correcto. Uno de los errores más comunes en C++ es suponer que "pointe"). rs son direcciones de memoria ". Ellos no están. En muchos sentidos, se comportan de manera similar, pero los punteros obedecen a muchas restricciones adicionales que pueden existir o no en el hardware real).

¿Por qué no ir directamente a la fuente? Aprenda ensamblaje, aprenda sobre la CPU en sí, aprenda sobre compiladores.

Todo lo anterior vale la pena aprenderlo, y lo convertirá en un mejor programador. Pero aprende C++ por el bien del idioma (no es hermoso, pero hay lecciones que aprender de él), y aprende sobre todas las mecánicas subyacentes (compiladores, el hardware que estás ejecutando, la CPU) estudiando directamente .

Pero vaya donde vaya, definitivamente diversifíquese. Debes aprender los idiomas en los que trabajas, obviamente, pero no te detengas allí. Aprende algo más, casi sin importar de qué se trate. Más idiomas, o una mejor comprensión de la infraestructura subyacente, todo te hará un mejor desarrollador.

Por último, no piense en C/C++ como el "cinturón negro". C++, en particular, puede ser uno de los idiomas más difíciles de dominar, pero eso no significa que los que lo conocen sean los mejores programadores. Lejos de ahi.

+0

En realidad, he asignado punteros directamente a las direcciones de memoria. Muy útil cuando usa E/S mapeadas en memoria y registros de control. – TMN

+0

Como dije, hay fuertes similitudes, pero no son lo mismo. hay cosas que puede hacer con las direcciones de memoria de acuerdo con el conjunto de instrucciones subyacente, que no puede hacer con un puntero C++. En algunos punteros se pueden tratar como direcciones de memoria, pero no siempre. – jalf

+0

+1 Esta es una respuesta épica. ¿Por qué tantos años después, solo tiene +5? – NlightNFotis

0

Le sugiero que aprenda el lenguaje C. Esto te ayudará a aprender todo sobre la programación de computadoras. Para mí, hay un buen libro disponible para que los programadores aprendan programación en C, desde programación hasta administración de memoria, conceptos de SO y otras cosas.

http://www.cs.cf.ac.uk/Dave/C/

echar un vistazo a este libro web usted podrá saber cuán poderoso es el lenguaje es ....

0

Si tuviera que responder a su pregunta en una sola palabra, "SÍ". Es bueno dominar al menos un idioma, pero siempre es mejor aprender más de uno ... quién sabe qué pasará mañana.

En lo que respecta a la comprensión de la computadora, C++ puede no ser tan útil, pero C++ proporciona muchas opciones durante la programación.

Y sí, ¿aprenderlo te convierte en un mejor programador? Lo hace. Cada idioma es único en ciertos aspectos. Aprender más idiomas lo ayuda a explorar la posibilidad de implementar la singularidad de un idioma en otro.

1

La codificación en C le brinda una perspectiva más cercana de lo que está haciendo el sistema real. Realmente está "codificando el metal" de la máquina.

También le da una apreciación más profunda de lo que los lenguajes como Java/C#/Python/Ruby están haciendo por usted.

Y, por último, la gran mayoría (aunque no todas) del código * nix/* BSD está escrito en C, así como en muchos sistemas modernos, por lo que te abre las puertas si estás pensando en un parche o tratando de unirse a un equipo en cierta compañía.

+0

Esa es otra motivación. Para involucrarse en proyectos de código abierto porque entonces tendré mucha gente mirando mi código y dándome consejos. – uriDium

Cuestiones relacionadas