que programacion lenguajes lenguaje entre diferencia aprender c# c++

c# - entre - lenguajes de programacion



¿Qué ventajas puedo obtener de aprender C++ si soy principalmente un programador de C#? (18)

Aparte de lo que otros han dicho:

A la gente le gusta verlo en el currículum.

Aprender cualquier idioma te ayuda a traducir ese lenguaje a C #, lo que te hace más valioso como programador.

Aprender otro idioma le ayuda a entender muestras utilizando ese lenguaje, posiblemente le permite dibujar en una amplia gama de muestras, libros, ejemplos, expertos.

Envoltorios! ¡Aprender C ++ lo ayuda a envolver esos molestos archivos C ++ para su consumo en C #!

Dicho esto, es muy posible que debas aprender otras cosas antes de C ++ si eres un programador de C # que nunca aprendió C ++ en primer lugar.

Recientemente comencé a notar muchas sonrisas y comentarios generalmente groseros cada vez que menciono C #. Todos con los que hablo dicen que aprendan Python o aprenden C ++.

Python es un buen lenguaje, lo entiendo. Pero no le encuentro mucho uso ahora (para mis casos de uso), y C ++ escuché es un lenguaje más rápido (no estoy seguro).

Entonces, mi pregunta es esta: ¿qué ventaja puedo obtener de aprender C ++ (además del conocimiento y la expansión de mis horizontes), cuando programo principalmente en C #?


Aprende C ++ para que puedas apreciar mejor C #.


Aprende C ++ para que te sientas como enloquecidas.


Con cada lenguaje de programación, puede hacer crecer su visión del paisaje y aplicar las lecciones aprendidas. Aunque nunca he escrito una aplicación de producción de C ++, fue muy educativo para mí entender el sistema a ese nivel. Si tienes el tiempo libre, ¡sumérgete! También es posible que desee explorar el código C # inseguro. Podría ayudarlo a comprender muchas de las capacidades avanzadas de C ++.


Con respecto a C / C ++, aquí hay algunas cosas que vienen a la mente de mi propia experiencia.

  1. Aprender C / C ++ puede proporcionar experiencia trabajando más de cerca con las características detalladas del sistema operativo y con memoria en bruto. Por ejemplo, muchas aplicaciones de audio, video y juegos requieren este nivel de acceso para rendir al máximo.

  2. Saber cómo interoperar con componentes y bibliotecas escritas en C / C ++ es una habilidad práctica. Hay muchas bibliotecas útiles por ahí que todavía no tienen equivalentes adecuados en C #. Es mucho más fácil trabajar con TSAPI (telefonía), varias bibliotecas de formatos de archivo y componentes heredados en C # si comprende su construcción en C / C ++ y otros idiomas.

  3. Si está trabajando con aplicaciones de Windows, tener experiencia con Win32 a través de C / C ++ le permite comprender cómo funcionan otras aplicaciones escritas en código no administrado; incluso si no tiene el código fuente disponible para usted. Luego puede usar P / Invoke de manera más efectiva para tratar con bibliotecas que normalmente no estarán disponibles o serán demasiado opacas para manejarlas de otra manera.

  4. Muchas técnicas, aunque potencialmente de sombrero negro en la naturaleza, son más difíciles de lograr con C #. Cosas como la sustitución de DLL, la reescritura de puntos de entrada de funciones, la inyección de código en otros procesos y la generación de código de ensamblaje en línea son más fáciles de hacer con C / C ++; aunque no imposible con C #.

  5. Finalmente, el control preciso sobre los objetos no gestionados es algo más adecuado para el código escrito con C / C ++. Por ejemplo, cosas como la E / S superpuesta en Windows, algunas características de la biblioteca de sockets (por ejemplo, la multidifusión UDP) y el control del dispositivo tienen más ejemplos de C / C ++ que funcionan mejor que C #. Pero, estos son bastante esotéricos y por lo general no se manejan en aplicaciones de C # de todos modos. Es probable que algunos de estos también tengan equivalentes en futuras API o marcos.

En resumen, la principal motivación que sugeriría para aprender C / C ++ es ampliar su conocimiento de otros sistemas que no están disponibles en C #. Aprender Python sería un paso en la otra dirección, donde el aprendizaje de otros estilos y semánticas de construcción de código es un beneficio más probable. El código C / C ++ escrito por otras personas no suele tener patrones más beneficiosos ni reconocibles como el software escrito en Python, Ruby o Lisp.


Depende de qué programas estés trabajando. Nunca he usado Python antes, así que no puedo comentar sobre eso.

En cuanto a C ++; La mayoría del software crítico de rendimiento está escrito en él debido a su velocidad. Usted tiene más poder sobre su hardware, pero con ese poder viene la responsabilidad y una curva de aprendizaje más pronunciada. Tampoco tiene acceso a .NET; ¡así que probablemente tendrás que profundizar en la programación de Win32 para hacer algunas de las tareas!

Ejemplos de dónde se utiliza C ++: desarrollo de juegos, aeroespacial, sistemas de control de tráfico aéreo.

Personalmente, creo que aprender C / C ++ te hace un mejor programador en general, te enseña muchas cosas; especialmente sobre el rendimiento y la memoria. Y también bien ... casi todo lo importante está construido en C ++.


Depende.

Lo que me gusta de C ++ es que, en cierto modo, es un lenguaje más expresivo y sí, más elegante que C #. Permite algunas abstracciones realmente agradables (como la programación genérica o RAII) que simplemente no se pueden duplicar en C #.

De esa manera, es una revelación. Por supuesto, también lo son los lenguajes funcionales. Así es Python. Merece la pena aprender todos ellos, incluso si escribes todo el código en C # ahora y siempre.

Por supuesto, C ++ también es un desorden demasiado complicado y un lenguaje mucho más propenso a errores que cualquier otra cosa. Y si no lo sabes realmente bien, entonces explotará en tu cara cuando menos lo esperes.

Por supuesto, mucha gente gritará el RENDIMIENTO! cuando preguntas por qué debes aprender C ++. No lo hare Debido a que en muchos casos comunes, C # será tan rápido o más rápido como su código C ++. This antiguo intercambio entre Raymond Chen y Rico Mariani ilustra bastante bien las características de rendimiento de ambas plataformas.

C ++ tiene el potencial de ser extremadamente rápido. Pero también tiene muchas fallas de rendimiento sutiles que significan que la mayoría de las veces , a menos que sea un dios del código omnisciente, su código será menos eficiente que el C # equivalente.

Si le interesan los lenguajes de programación, C ++ es un maravilloso ejemplo de la teoría de la evolución. ;)

No ha crecido de acuerdo con un gran plan predefinido. Siempre ha mejorado y se ha adaptado paso a paso, de acuerdo con lo que mejoraría el idioma en este momento . Como resultado, es enorme, hinchado, demasiado complejo, pero también es más expresivo que algo estrictamente diseñado de acuerdo con la visión de una sola persona, como C #. C # está diseñado con una obsesión malsana con OOP, porque eso fue lo genial cuando se diseñó.

En C ++, la POO se desvió hacia la periferia, no tanto como una decisión de diseño consciente, sino porque surgieron mejores alternativas.

Es un lenguaje divertido. Y recomendaría aprenderlo solo por convertirse en un mejor programador. Pero no estoy convencido de que tengas que usarlo realmente. Por supuesto, facilitará ciertas tareas (interoperabilidad nativa o programación de pequeños programas que, por una razón u otra, no pueden suponer que el .NET framework está instalado), pero en la mayoría de los casos, probablemente no lo necesite.

Eso deja el argumento de "conviértete en un mejor programador", y si bien ese es un argumento válido, también es válido para otros idiomas. Definitivamente también deberías saber un lenguaje funcional. Y Python, o un tipo de lenguaje pragmático y de alto nivel similar "lo hace fácil para el programador".


En primer lugar, suena como si estuvieras interesado en aprender más. Esa es realmente la parte más importante de ser un buen programador.

Dicho esto; Casi todos los grandes proyectos de código abierto están escritos en C o C ++, si desea aprovechar o construir sobre los que necesita saber el idioma. No solo trabajar con un gran proyecto de código abierto se ve bien en el currículum, sino que también le permite examinar un código realmente bueno (y realmente malo). Para mí eso solo ha sido una experiencia de aprendizaje invaluable.


En términos de rendimiento, es mucho más rápido. Si tiene algún deseo de hacer programación de juegos o computación de alto rendimiento, C ++ es un gran lenguaje para eso.

Pero, también diría que C ++ es muy difícil de aprender. No hay recolector de basura, compile los errores que necesitan ser descifrados, y la necesidad de bibliotecas externas son todas dificultades para superar.


Hay razones para usar casi cualquier idioma.

C y C ++ tienen usos en que se compilan en código nativo en lugar de ejecutarse en una máquina virtual. Hay una ventaja de velocidad y también significa que estos programas pueden ejecutarse sin tener instalado un marco de 50 MB +.

Casi todos los juegos (sin duda los shooters en primera persona) están escritos en C o C ++.

¿Esto es aplicable a usted? No tengo idea porque no tengo idea de lo que estás tratando de lograr.

¿Qué aprenderás de C o C ++? Punteros, gestión de memoria y similares. Es un mundo bastante diferente de los lenguajes más modernos recolectados como C #, Java o Python.


He sido desarrollador de C ++ durante los últimos 10 años y los últimos dos años, he estado usando Java para el desarrollo de nuevos productos. También he hecho algo de programación en C# solo para aprenderlo. Según mi experiencia, diría que C ++ es un lenguaje desafiante y de alto rendimiento que es bueno para que los estudiantes de ciencias de la computación entiendan el concepto de programación y los algoritmos. Otro uso de C ++ sería la implementación de un protocolo que no cambia con frecuencia, por ejemplo, la implementación de un proxy SIP o un servidor HTTP.

Para el desarrollo de productos de práctica donde los requisitos cambian a menudo, recomendaría cualquier lenguaje de alto nivel donde los desarrolladores puedan centrarse en la lógica de la aplicación en lugar de reinventar la rueda. Por ejemplo, recientemente comencé un proyecto de código abierto xcapserver en el que pude hacer un prototipo rápido en dos días utilizando tecnologías java (Glassfish, REST, log4j, eXist db), pero quería utilizar las bibliotecas de impulso y, de nuevo, es un protocolo que no se espera. cambio a menudo, así que decidí implementar en C ++. Pasé 4 días solo para que el registrador funcionara con BOOST::log y otros 4 días para solucionar los problemas de interbloqueo de hilos con Berkeley DB XML.

Otro aspecto es el mantenimiento del producto. He pasado días y noches reparando las pérdidas de memoria, la corrupción y la curva de aprendizaje para los nuevos desarrolladores es demasiado alta en comparación con J2EE o .NET, donde es fácil encontrar desarrolladores y el mantenimiento es mucho más fácil.

En términos generales, C ++ es un buen lenguaje de programación que recomendaría a todos los desarrolladores que aprendan, pero no veo un gran uso de él en el futuro, ya que los procesadores son cada vez más rápidos y más baratos, por lo que el rendimiento no es la razón.


La razón principal para aprender cualquier lenguaje nuevo o diferente es aprender un enfoque nuevo y diferente para resolver problemas en la programación. C # y C ++ ciertamente tienen algunas similitudes. También tienen algunas diferencias bastante importantes. Al principio, esas diferencias parecerán (como algunos han mencionado) ser principalmente con sintaxis. Sin embargo, estudios posteriores revelarán diferencias considerablemente mayores que van más allá de la simple sintaxis.

Eso significa que si decides estudiar C ++, debes planear dedicarle una buena cantidad de tiempo y esfuerzo antes de ganar mucho. Si quieres algo que es radicalmente diferente del comienzo, probablemente estarías mejor con otra cosa. Mi propio consejo para un idioma completamente diferente sería Scheme, básicamente Lisp con una buena limpieza del hogar.

Hay muchos otros lenguajes funcionales, y algunos de ellos son bastante buenos, pero Lisp ha sobrevivido a muchos de los posibles sucesores, y creo que sobrevivirá a muchos más. Si fuera un apostador, apostaría a que Lisp sobreviviera a F # por varias décadas ...


Las mejores razones para aprender C ++ para un desarrollador de C # es aprender nuevos paradigmas de programación. C ++ es más que un lenguaje "orientado a objetos" y, por lo tanto, ofrece la oportunidad de aprender nuevos enfoques para resolver problemas. Con C # 3.0 y .NET 3.5, C ++ no ofrece tantos paradigmas únicos, pero si no los está utilizando, la programación efectiva de C ++ lo obligará a aprenderlos.

En particular, C ++ todavía ofrece un paradigma de programación genérico muy poderoso que no es compatible con C #. El STL lo obliga a usar conceptos de programación funcional que muchos desarrolladores de C # evitan o no usan (extensiones LINQ y lambda por ejemplo).

También encontré que fortalece la comprensión y el aprecio de las personas por el alcance léxico. Conceptos como los espacios de nombres RAII o C ++ realmente empujan la necesidad de administrar el alcance con mucho cuidado ... en C #, muchas de estas preocupaciones existen, pero son menos "en su cara". La metaprogramación de plantillas es otro concepto único que C ++ ofrece que C # no ofrece.


Los mayores problemas son los siguientes:

  • C ++ es el estándar de facto de la programación de aplicaciones y sistemas durante los últimos 20 años.
  • C ++ es portátil y existen compiladores para ~ 95% de todas las arquitecturas de procesadores.
  • C ++ puede mejorar su código .NET, con esto quiero decir que PInvoke se puede hacer para ejecutar código optimizado escrito en C ++ -OR- se puede usar para ejecutar código de terceros, lo que le permite escribir envoltorios personalizados, etc.
  • C ++ es compatible con linux / mac / PSP / Cray II / Random de Tailandia, no tiene problemas para compilar porque no se ejecuta a través de la CLI de .NET (que debo admitir que es una pieza de arte hermosa) C # está vinculado, Por ahora, a implementaciones Mono y Windows a través de .NET.

Como programador de aplicaciones .NET profesional, me encanta C #, adoro el terreno por el que caminaron los arquitectos. Pero C ++ es, en mi opinión, el idioma más importante que puede aprender, porque abrirá más puertas profesionales que cualquier otro idioma en la industria moderna. Si conoces C #, te llevará unos meses aprenderlo. Recomiendo el libro de C ++ de Timothy D''Orazi si tiene una formación académica en ingeniería de software.

Pensamiento posterior: C ++ es una herramienta, al igual que C # o un simulacro o una escopeta (podría decirse) que se ajusta a la herramienta para la tarea, prefiero morir antes que escribir código funcional en C ++, del mismo modo, no haría el desarrollo de aplicaciones en F #, Todos ellos están bien langauges. ¡Aprende algo que te interese! Si quiere ser un mejor programador, aprenda C ++, si quiere ser un mejor desarrollador de aplicaciones, ¡puede ser más beneficioso aprender nuevas tecnologías dentro del marco en el que ya está trabajando! Usted es un programador de C #, ¿ha aprendido WPF? WCF? ¿Qué pasa con las características de C # 4.0? ¿Has dominado las funciones lambda? árboles de expresión? Hay tantas direcciones que puedes seguir desde aquí, C ++ es solo una de ellas. Pregúntate a ti mismo las siguientes preguntas:

  • ¿Qué puedo aprender que me agregue valor?
  • ¿Qué puedo aprender que me interese como desarrollador?
  • ¿Qué puedo aprender que me beneficie en mi posición inmediata?
  • ¿Qué puedo aprender que me ayude a entrar en el tipo de trayectoria profesional en la que quiero estar?

Descubrirá que habrá muchas respuestas que se superponen a estas preguntas, tómese su tiempo, encuentre algo que le interese y no sea una tarea difícil de aprender; se lo agradecerá en los próximos 3 meses.


Obtendrías más utilidad al aprender un lenguaje funcional como Clojure, Haskel (o quizás F # dado que obviamente te sientes cómodo con CLR). Tienen un modelo de programación subyacente diferente que expandirá sus horizontes de manera que el aprendizaje de una nueva sintaxis no lo hará.

En la otra dirección, aprender C en realidad sería mucho más útil que aprender C ++. Eso centrará su aprendizaje en los punteros, la memoria y los temas ''cercanos al metal''.


Para respetar los deseos de los OP, no diré nada sobre cómo creo que C ++ puede ayudar a un programador de C # a pensar de manera diferente sobre el código. ;-pag

En serio, como herramienta, la principal ventaja de C ++ es que es multiplataforma. El código escrito en C ++ se puede ejecutar en una gran variedad de plataformas.

Por otro lado, la gran desventaja de C ++ en comparación con C # es que se necesita mucho más tiempo para escribir el código correcto.

Si bien es posible escribir código más rápido en C ++ en teoría, esto supone una cantidad ilimitada de tiempo de desarrollo. En la práctica, ya que puedo escribir código más sofisticado más rápidamente en C #, puedo pasar el tiempo adicional optimizando el código.


Actualización 2015

Aprende rápido. Le enseñará el mismo uso de patrones funcionales y generativos que el C ++ moderno pero sin el equipaje o tantos errores. También es semánticamente una superposición significativa con F # para que tenga la oportunidad de estudiar programación funcional. Hay una comunidad funcional vibrante que empuja los límites de Swift.

Irónicamente, en mi trabajo actual del día en los enlaces de C # para Realm, todavía estoy usando mis habilidades de C ++ junto con C #, pero no ha cambiado mucho mi actitud en los últimos 6 años.

Original

Hablo como programador de C ++ durante más de 15 años, y he pasado el último año aprendiendo y utilizando C # (y C ++ / CLI), además de una fascinación constante por los idiomas y una amplia gama de estudios de otros idiomas para mejorar mi pensamiento.

Estoy muy impresionado con C # como lenguaje, especialmente con las mejoras en C # 3.0.

Yo tomaría las opiniones contrarias:

  1. A menos que desee empleo escribiendo juegos de computadora, o componentes de nivel relativamente bajo, olvídese de C ++ como lenguaje porque hay suficientes programadores expertos en C ++ y la industria de los juegos genera mucho más (de una calidad supuestamente variable). No va a mejorar sus perspectivas profesionales.
  2. Invierta un poco de tiempo en estudiar las profundidades interesantes de C #, las implicaciones de la sobrecarga del operador, cómo usar el código inseguro, etc. Elija un libro como el excelente C # en pocas palabras y sea capaz de analizar y anotar todo el contenido con explicaciones más detalladas. de cómo se podría usar ese idioma.
  3. Aprenda un lenguaje dinámico como Ruby o Python, utilícelo para algunas tareas del mundo real, como generar o modificar archivos de prueba, de modo que aprecie el lenguaje más simple para manipular archivos, estructuras y cadenas.
  4. Aprenda F # u otro lenguaje funcional y desarrolle algunas sonrisas propias sobre las implicaciones de los lenguajes funcionales para el procesamiento paralelo y las nubes :-) En unos pocos años (o antes), esto generará enormes beneficios profesionales cuando las personas luchan por la nube. programadores conocedores Recuerde, no ha aprendido un nuevo idioma hasta que lo puede comparar con los antiguos, por lo que necesita poder pontificar cuándo y dónde usar F # (o Haskell) en lugar de C #.

Respuesta corta: aprender al menos algo de C ++ (y también lenguaje ensamblador) lo hace mejor aprovechando y, quizás más importante, depurando la plataforma de software debajo de su código. Esto es cierto independientemente del lenguaje de programación o sistema operativo en el que esté trabajando.

Respuesta larga:

Uno de los factores diferenciadores, en mi humilde opinión, entre los buenos desarrolladores y los grandes desarrolladores, es que los grandes saben lo que está pasando debajo del capó en una pieza de software y son capaces de profundizar rápidamente debajo de las capas de abstracción en la pila de tecnología, desde las más difíciles los problemas de software a menudo son causados ​​por cosas debajo de su código en la pila.

Por lo tanto, siempre he recomendado que los desarrolladores, en algún momento de sus carreras, pasen al menos un tiempo aprendiendo dos idiomas que se encuentran en la parte inferior de casi todas las pilas de software: C / C ++ y lenguaje de ensamblaje x86. Eso no significa que deba convertirse en un experto en ninguno de los dos, pero tener un conocimiento práctico de cosas como punteros, registros, gestión de memoria, pilas y pilas, búferes de cadenas sin GC, fugas, etc. es muy útil cuando debe llegar a la pila para diagnosticar un problema, para comprender mejor el comportamiento extraño o simplemente para tomar decisiones más inteligentes a medida que diseña software de nivel superior, independientemente del idioma.

Una analogía: me convertí en un conductor de transmisión manual mucho mejor una vez que desarmé el motor de mi motocicleta y vi cómo funcionaba el embrague. Eso no significaba que tenía que convertirme en un mecánico de motocicletas, solo que ayudaba a mis habilidades generales de conducción una vez que lo que estaba sucediendo dentro de mi bicicleta ya no era un misterio.

Además, independientemente del idioma o el marco con el que esté trabajando, para los proyectos que deben recurrir directamente a la plataforma subyacente, el conocimiento de C / C ++ es muy útil y, a veces, necesario.

Tenga en cuenta que no estoy tocando deliberadamente la pregunta más polémica sobre si debería escribir aplicaciones completas en C ++ o no. Otras respuestas han hecho un gran trabajo cubriendo esos argumentos. En su lugar, simplemente estoy convencido de que las habilidades de C ++ te beneficiarán, independientemente de si continúas escribiendo la mayoría de tu código en C # (o Java o Python o Ruby o ...)