¿Cuándo es comprensible odiar a C ++?

A mi tampoco me gusta C ++.

No te preocupes, Linus te hará sentir mejor:

El miércoles, 5 de septiembre de 2007, Dmitry Kakurin escribió:
>
> Cuando vi por primera vez el código fuente de Git, dos cosas me parecieron extrañas:
> 1. C puro a diferencia de C ++. No tengo idea de por qué. Por favor no hable de portabilidad,
> es BS.

* TÚ * estás lleno de tonterías.

C ++ es un lenguaje horrible. Se ha hecho más horrible por el hecho de que muchos
de los programadores de calidad inferior lo utilizan, hasta el punto en que es mucho
Más fácil de generar total y absoluta basura con él. Francamente, incluso si
La elección de C fue hacer * nada * pero mantener a los programadores de C ++ fuera,
eso en sí mismo sería una gran razón para usar C.

En otras palabras: la elección de C es la única opción sensata. Lo se miles
Bader dijo en broma “para enojarte”, pero en realidad es cierto. he venido
a la conclusión de que cualquier programador que prefiera que el proyecto sea
en C ++ sobre C es probable que un programador que realmente * preferiría * mear
fuera, para que no venga y arruine cualquier proyecto en el que esté involucrado.

C ++ conduce a opciones de diseño realmente realmente malas. Invariablemente empiezas a usar
Las características de la biblioteca “agradable” del lenguaje como STL y Boost y otros
Crap total y total, que puede “ayudarte” a tu programa, pero causa:

– infinitas cantidades de dolor cuando no funcionan (y cualquiera que me diga
que STL y especialmente Boost son estables y portátiles es tan completo
de BS que ni siquiera es gracioso)

– modelos de programación abstraídos ineficientes donde dos años más tarde
nota que alguna abstracción no fue muy eficiente, pero ahora todo
su código depende de todos los simpáticos modelos de objetos que lo rodean, y usted
no puede arreglarlo sin volver a escribir su aplicación.

En otras palabras, la única manera de hacer el bien, la eficiencia y el nivel del sistema y
C ++ portátil termina por limitarse a todas las cosas que son
básicamente disponible en C. Y limitar su proyecto a C significa que las personas
no lo arruines, y también significa que obtienes muchos programadores que
En realidad, entiendo los problemas de bajo nivel y no arruines las cosas con ningún
Idiotas “modelo de objeto” basura.

Así que lo siento, pero para algo como git, donde la eficiencia era una primaria
objetivo, las “ventajas” de C ++ son solo un gran error. El hecho de que
También hacemos enojar a las personas que no pueden ver que es solo un gran adicional.
ventaja.

Si quieres un VCS que está escrito en C ++, ve a jugar con Monotone. De Verdad.
Utilizan una “base de datos real”. Utilizan “bibliotecas orientadas a objetos agradables”.
Utilizan “abstracciones agradables de C ++”. Y francamente, como resultado de todo.
Estas decisiones de diseño que suenan tan atractivas para algunas personas de CS, el fin
El resultado es un lío horrible e inalcanzable.

Pero estoy seguro de que te gustaría más que git.

Linus

Fuente Gmane Loom .

Sin embargo, si esta es tu primera clase de programación, quizás necesites comenzar a aprender a programar correctamente, por tu cuenta. No es algo que pueda ser enseñado por un profesor.

Una idea: Prueba el curso de Zed Shaw Aprende Python por el camino difícil.

¿Por qué?

  1. Programar es programar, no importa qué lenguaje uses. Aprende a programar antes de aprender un lenguaje loco como C ++.
  2. Python es simple y fácil. El lenguaje fue diseñado para ser fácil de leer.
  3. Python es mucho más fácil de depurar y ejecutar que C ++.
  4. Los libros de Zed Shaw son una forma comprobada de aprender. Y son estrictos. No juegues con tutoriales al azar en internet con anuncios en todas partes. Necesitas un sistema. Confía en Zed.

PS, esto me hace ROFL:

“Los malos trabajadores siempre culpan a las herramientas”
He programado C ++ casi todos los días hábiles durante casi 20 años. Cuando aplicas C ++ a algo que un lenguaje diferente puede manejar fácilmente, como lanzar un montón de procesos en segundo plano, odiarás a C ++.
Al escribir una aplicación que tiene muchas opciones de configuración, odiarás C ++. He visto algunas bases de código de C ++ donde el 80-90% era la administración de configuración, con analizadores de configuración, fábricas, instrucciones de conmutación, enumeración. Es un desastre.
Python hace todo eso una brisa. Pero el ajuste del rendimiento es una pesadilla. El rendimiento de C ++ es fácil. Hmmm
Puedo escribir C ++ – enlaces Python para todas mis clases de C ++. Haga módulos de carga en Python, pegue cosas, haga directorios y lea basura de las bases de datos, y entréguelo a C ++ liberando GIL cuando sea apropiado. Ahora tengo un sistema fácil de configurar y escribir, y funciona tan rápido como lo necesito.
Por lo tanto, es comprensible odiar a C ++ si no lo está aplicando correctamente. Si intentas usar un martillo para apretar un perno, también odiarás los martillos.

Creo que está bien odiar a C ++ en cualquier momento, siempre y cuando lo entiendas y lo uses. De lo contrario, no tiene sentido odiar algo que no usas y algo que realmente no entiendes.

Sin embargo, odiar un lenguaje completo es bastante tonto; odiar algunas ‘características’, claro, eso es comprensible. Odiar todo el lenguaje es de mente estrecha, a menos que sea Pascal (broma).

Odia más a los programadores que usan mal ese lenguaje. C ++ es una herramienta maravillosa, usada correctamente.

La razón es que C ++ naufragó C. C es muy fácil de aprender, tiene una biblioteca excelente. Y C ++ es como la sirena que te llama a tener más poder, pero luego lanza tu cabeza contra la roca.

Cuando aprendí C ++ por primera vez, tenía un montón de bibliotecas de C que portaba a C ++. Luego me di cuenta de que podía sustituir las llamadas a los métodos por punteros de función, y varios trucos de objetos hicieron que mi código produjera múltiples instancias de estructuras de datos complicadas, y acorté un poco mi código C. Eso me pareció genial.

Pero luego, a tiempo, me di cuenta de que el código tendía a hincharse y congelarse cuando se escribía en C ++. Se hincharía, porque escribiría todo tipo de funciones pequeñas e inútiles para hacer cosas obvias, porque se lo alentó a hacer esto y luego se congelaba, porque ya no sería capaz de descubrir qué es lo que no está haciendo su código. , por lo que no podías extenderlo. Finalmente, convertí de nuevo todo mi código C ++ a una C orientada a objetos.

No hay nada en C ++ que valga la pena sobre gnu-extended C, excepto la sobrecarga de funciones y los valores de parámetros predeterminados, y esto no es un gran problema, y ​​se puede simular con macros. Las referencias son estúpidas: se vuelven a apuntar, la sobrecarga del operador es peligrosa, los constructores y los destructores pueden hacer que el código sea lento, las plantillas son un desastre, las “funciones en línea”, cuando no se pueden escribir como una macro usando Las extensiones gcc son básicamente una forma de aumentar el recuento de líneas corporativas sin aumentar la funcionalidad, y la filosofía orientada a objetos produce el peor código posible.

El problema real para mí, filosóficamente, es que C ++ no es auto-modificable, por lo que se corta la auto-modificación en las plantillas. No es suficiente. C tampoco es auto-modificable, pero no pretende serlo. Si desea modificar el código C, puede generarlo a partir de un script de Perl automáticamente y luego compilarlo. Puede vincularse a un programa en ejecución si es un dll, y esto le permite optimizar. En C ++, hay una tabla de funciones virtuales que no se le permite tocar y modificar (aunque puede piratearla en gcc C ++ simplemente modificando la tabla de funciones virtuales).

El idioma es un desastre, y fue un desastre desde el primer día que se presentó. Es útil solo como prueba para la competencia del programador: si un programador usa C ++, no lea su código. Desafortunadamente, dado que el control de gcc fue retirado de Stallman, el comité de gcc ha introducido algo de C ++ en el código base. Linus Torvalds logró mantener a C ++ fuera de Linux. Esto muestra los beneficios del estilo de gestión anárquico de Torvalds sobre el enfoque de arriba hacia abajo de Stallman. Una vez que el visionario se ha ido de la parte superior, los hombres de arriba hacia abajo pueden hacer cosas estúpidas.

Me encanta C ++. Por otra parte, no hago locuras como sobrecargar a los operadores para hacer algo que no sea obvio.

Cuando necesita la velocidad de las funciones C y OO, C ++ es la opción obvia. Quiero decir, claro, podrías escribir tu propia capa OO en C, pero ¿cuál sería el punto? Simplemente use C ++ con sensatez y no culpe al lenguaje por sus errores.