¿Está bien que no me guste C ++ totalmente y ser un mejor ‘desarrollador de sistema operativo’ o ‘programador de red’ usando otra cosa?

Los sistemas integrados de baja potencia están codificados casi exclusivamente en C. Si desea realizar la programación del sistema operativo, trabaje en un sistema operativo para microcontroladores. Si desea trabajar en redes de red, busque redes de sensores inalámbricos / Internet de las cosas. Hay muchas cosas que se pueden mejorar en sus pilas de software existentes. Estas son frutas mucho más bajas que, por ejemplo, la programación del kernel de Linux (que, por cierto, también usa principalmente C. Aunque los modelos de kernel teóricamente se pueden escribir en C ++, pocos lo hacen por razones obvias: el kernel en sí es C).

Sí, las cosas están cambiando, ahora incluso hay Python para microcontroladores. Pero los desarrolladores integrados tradicionalmente son muy conservadores (así que supongo que los lenguajes más nuevos como Rust tienen pocas posibilidades) y no les gusta C ++ debido a razones que están bastante justificadas en este dominio (por ejemplo, tamaños de código binario más grandes debido a operaciones implícitas de constructor / destructor de C ++ ) C seguirá siendo el paradigma líder en este dominio durante mucho tiempo.

Te sugiero que superes tus prejuicios. Es solo una herramienta y no vale la pena odiarla.

Dicho esto, sí, estoy seguro de que puedes hacer un buen trabajo solo en C.

No basado en la creación de productos de software de sistemas comerciales en C, C ++, C # y Java. Ningún C ++ lo mantendrá alejado de muchos o incluso de la mayoría de los trabajos de software del sistema. Si no le gusta C ++, interferirá con su capacidad de aprender lo suficiente como para usarlo efectivamente para el software del sistema.

En su lugar, usar C desperdiciará su tiempo reinventando la rueda y hará que su código sea más difícil de extender y comprender que C ++ bien escrito. Cambié de opinión sobre la posibilidad de que los programadores de solo C fueran razonables en los productos de software del sistema después de que el último par de proyectos consecutivos proporcionaran un marcado contraste en la productividad y la facilidad de mantenimiento. Linus Torvalds tiene razón en que los malos programadores son aún peores en C ++, aunque en los esfuerzos comerciales no tiene que aceptar a todos los que estén dispuestos a trabajar de forma gratuita.

El uso de Java conducirá a violaciones de restricciones en tiempo real debido a pausas del recolector de basura, agotamiento de recursos sin memoria porque la finalización no es determinista (a menos que salte los aros con la gestión manual, que es una abstracción permeable), una huella de memoria más grande (por qué Android los teléfonos necesitan más que iPhones) y limitan el rendimiento. Impide que Resource-Acquisition-Is-Initialization sea menos propenso a errores que los bloques try-catch con limpieza manual o que lea la documentación lo suficientemente bien como para aplicar C # “using” o Java try-with-resources kludge. Cambié de opinión sobre todos los lenguajes derivados de ALGOL orientados a objetos que estaban lo suficientemente cerca como para que no importara (pocas pulsaciones de teclas separan cosas como Object foo(x); std::shared_ptrfoo = new Object(x); y Object foo = new Object(x); todos usan administración automática de memoria) después de llevar un buscapersonas para admitir el software del sistema escrito en Java: el rastreo de recolección de basura en lugar del recuento de referencias tiene un impacto inaceptable en la confiabilidad del mundo real cuando eso importa.

Es más probable que Java se ejecute en todas partes, aunque en la práctica eso no es un problema importante en el código C ++ multiplataforma: envío mi producto actual a más de 1300 empresas que ejecutan Windows, Mac, más al menos una docena de versiones de Linux y no vea los problemas de portabilidad o instalación como ingeniero principal propietario de la cola de problemas escalados.

Reevaluar sus sentimientos en C ++ y / o espacio profesional sería prudente.

El lenguaje, como todos saben, es una herramienta de implementación. Para ser bueno en cualquier dominio del trabajo, los siguientes serían los requisitos que debe cumplir (en el orden de prioridad decreciente):

1. Buenas habilidades para resolver problemas

2. Buena comprensión del dominio.

3. Idioma

Si está considerando una carrera en el sistema operativo, el obstáculo más difícil para usted sería el conocimiento de los conceptos básicos: administración de memoria, programación de procesos, sistemas de archivos, algunos conocimientos de hardware y similares. Si eres fuerte en lo mencionado anteriormente, no habrá ningún problema para ti cuando trabajes en el dominio.

Ahora, si consideramos el lenguaje, puede encontrar muchos grupos de investigación u organizaciones que trabajan con C. Eso tampoco debería ser un problema para usted y, por lo tanto, la menor de sus preocupaciones.

Quizás debería considerar un campo donde C ++ es más raro, como el desarrollo web.

Cuando era desarrollador de sistemas operativos y usaba exclusivamente C (y un puñado de lenguajes de ensamblaje según fuera necesario), tenía que conocer y comprender C ++ porque eso era lo que usaban nuestros clientes. Si alguien bloqueó el kernel o (más comúnmente) rompió el compilador, y obtuve el informe de error para manejar, lo más probable es que usaran el sistema a su máxima capacidad, y eso siempre significaba que su código estaba escrito en C ++. Ver un increíble código de cliente también fue lo que me llevó a cambiar mi carrera a C ++ en ese entonces.

Si está desarrollando en sistemas operativos, use C, no C ++.

No. Es porque, C ++ se usa principalmente para el desarrollo de software del sistema.

Si pudieras programar C y Java, no veo ninguna razón por la que no puedas programar C ++ porque C ++ tiene ambas características de C y Java. Comience a creer que puede hacerlo y siga adelante con la codificación C ++, ¡no es tan difícil!

Desaprobar cualquier tecnología lo colocará en una situación de discapacidad en algún momento de su carrera. Un colega mío fue despedido por mostrar disgusto por ASP, y le dijo a su jefe “Soy un hombre de Java”.

No muy listo Siempre evalúe las técnicas y tecnologías solo en función de su mérito e idoneidad para una tarea determinada, nunca por si le sale un sarpullido de la sintaxis.

Sí.

A pesar de las muchas buenas respuestas aquí sobre por qué C ++ es importante (y son correctas), voy a decir que sería posible crear algo mejor dada la advertencia de que puede usar C.

Podría comentar que el kernel de Linux está escrito en C y es un logro notable. No hay ninguna razón por la que no pueda implementar algo más innovador de manera similar utilizando puramente C. Se reduce a la comprensión de la máquina en última instancia.

Dicho esto, si puedes usar C, entonces también podrías aprender a usar C ++.

Probablemente puedas hacer lo que necesites sin C ++.

Pero no conseguirá que nadie lo contrate si se niega a usar C ++.