Programación de computadoras: como desarrollador web, ¿por qué debería aprender C o C ++?

Si bien es cierto que, como desarrollador web, es posible que no sea necesario que aprenda C / C ++ en cualquier momento, existen algunas razones por las que puede considerarlo.

  • Desarrollo del lado del servidor (backend). A menos que esté trabajando con tecnologías como Node.js, el conocimiento de C / C ++ lo ayudará a desarrollar y trabajar con la pila del lado del servidor de manera más efectiva.
  • Preparándose para que las tecnologías basadas en la web desempeñen un papel más importante en la informática. Las aplicaciones web son cada día más sofisticadas y complejas. Con la llegada de los sistemas operativos móviles basados ​​en la web, esto se vuelve aún más importante.

Para los desarrolladores web, la parte más importante a entender es que toda la interfaz de usuario es una aplicación web capaz de mostrar e iniciar otras aplicaciones web. Cualquier modificación que realice en la interfaz de usuario y cualquier aplicación que cree para ejecutarse en Firefox OS son aplicaciones web creadas con HTML, CSS y JavaScript, aunque con acceso mejorado al hardware y servicios del dispositivo móvil.
– Firefox OS

  • Comprender conceptos de nivel de sistema como gestión de memoria, subprocesos, etc. Muchas tecnologías basadas en web, como muchos lenguajes de programación modernos, resumen y automatizan la gestión de memoria. ¿Realmente necesita saber qué son los punteros, cómo funcionan? Depende de a quién le preguntes. Yo diría que es esencial para cualquier tipo de programador. Nuevamente, esto se relaciona bien con el segundo punto anterior.
  • Convertirse en un mejor programador. Tener conocimiento de diferentes lenguajes de programación, paradigmas y patrones de diseño le permitirá convertirse en un programador mejor y más completo. Hay muchas maneras en que se pueden usar las devoluciones de llamada de función. ¿Los conoces a todos? Explora y aprende.

¿Por qué elegirías C ++ para algo?

  • ¿No es eso un C más bonito, que de nuevo es un lenguaje ensamblador más bonito? Si tiene una hora, puede escuchar una gran charla dada por Herb Sutter, y si no, hay una charla más corta con ejemplos concretos.
  • Mire un índice TIOBE y verá que C ++ ocupa un tercer lugar estable en la lista de los idiomas más populares durante los últimos 15 años. No está mal para un idioma antiguo. Lo que me lleva a otro punto …

¿Cómo te gustan los punteros?

  • A la mayoría de las personas que asocian instantáneamente C ++ con punteros se les ha enseñado el camino equivocado. Es la vieja escuela de “C con clases”. Sé por experiencia propia lo malo que es. Ejercicios para pasar matrices C multidimensionales a funciones. Puntero aritmética. Gestión manual de la memoria como si no existieran contenedores e indicadores inteligentes. Implementación de listas doblemente vinculadas. Todo eso, que debe enseñarse en clases C. ¿Quizás no hay nada de malo en enseñar C ++ de esta manera? Bueno, piensa de nuevo.

  • Por supuesto , un programador profesional debe entender cómo funcionan los punteros. Pero de eso no se trata el C ++ moderno. C ++ está en constante evolución. Lo que solía considerarse el código apropiado ayer, puede considerarse un mal estilo hoy.

Codebase corporativo realidad

  • Mucha gente de pregrado de CS imagina que sus carreras serán una especie de experiencia rockstar / ninja / superhéroe. “¡Solo espera hasta que el mundo pueda ver lo que puedo hacer!”. Tiene que ser así porque, bueno, “estoy por encima de la media”, ¿verdad? Esperas largas horas de diseño e implementación de algoritmos complejos (al menos yo lo hice). Entonces obtienes tu primer trabajo y ¡WHAM! Te “engañan” con un código de 20 años que parece ser el resultado de experimentar con drogas duras. strcpy con buffers fijos dispersos en cientos de archivos, funciones de mil líneas de largo, 5 versiones de listas enlazadas escritas a mano, lo que sea. Te remangas las mangas para limpiar de alguna manera este desastre. ¡Detén tus caballos, joven aprendiz! El negocio necesita esta característica implementada ayer. No, no podemos usar el nuevo CCG, porque el otro equipo no está listo para cambiar ”, dice su gerente. Ahora piensas “¿dónde cometí un error …”.
  • Este problema no es específico de C ++. Feliz depuración de algún antiguo código Java creado por un entusiasta de la reflexión. Si eres un desarrollador web, es probable que estés expuesto a algún PHP radiactivo. Incluso si codifica en Ruby o Python o en un lenguaje más nuevo, la cantidad de trabajo duro puede absorber toda su energía. “¿Puedes mover ese botón a la derecha y hacerlo rosa?”. Esa es la realidad de trabajar en la mayoría de las empresas. A lo que me refiero es que, salvo las franjas de código heredado o aburrido, hay trabajos de programación que son desafiantes y entretenidos con una cantidad mínima de BS comerciales. Algunos de esos trabajos se encuentran en áreas donde C ++ brilla …

Donde C ++ es el rey: juegos, HPC, compiladores, finanzas …

  • Si desea evitar pasar toda su vida implementando cosas CRUD, puede considerar aprender C ++ junto con elegir un nicho. Estas son algunas de mis propuestas.
  • Industria del juego . Casi todos los títulos AAA se crean con C ++. El desarrollador de videojuegos es considerado uno de los trabajos más gratificantes en una industria de software. También es una de las áreas más exigentes. La velocidad es muy importante, por eso es esencial escribir código efectivo. Además de saber que C ++ se especializa en desarrollo de juegos se trata principalmente de aprender teoría y patrones que trascienden API / bibliotecas particulares. Gráficos fuertes y habilidades matemáticas a menudo se requieren. Lo suficiente para aprender para toda una carrera.
  • HPC . Para calcular números a velocidades extremas se requiere un excelente conocimiento del hardware subyacente. Ese conocimiento tiene que ser aplicable directamente en el idioma. La aparición de GPGPU junto con marcos de cómputo paralelos como CUDA y OpenCL crearon demanda para programadores de C ++ con este tipo de experiencia. Si te gusta la informática científica, hay muchos trabajos disponibles. ¿Has oído hablar del aprendizaje automático? Es un tema candente hoy en día.
  • Compiladores Esta es mi área favorita. El proyecto LLVM es un éxito tan grande que es difícil encontrar un lenguaje popular que no tenga front-end escrito usando bibliotecas LLVM o no use LLVM para generar código de bytes. Todo es C ++. Aunque los compiladores están escritos en varios idiomas, la teoría que respalda las implementaciones es la misma en todos los casos. Trabaja con optimizadores, analizadores estáticos, depuradores, bibliotecas estándar, vinculadores y todas las demás herramientas relacionadas. Hay problemas de ingeniería junto con problemas teóricos.
  • Si le gustan las finanzas , hay muchos trabajos que requieren la capacidad de escribir código de baja latencia. Los antecedentes matemáticos son una gran ventaja en esta área. Probablemente la mayoría de esos trabajos implican desarrollar y mantener plataformas de negociación de alta frecuencia. Además, es un gran dominio si no quieres llamarte programador. Yo diría que los quants tienen la mayor cantidad de oportunidades para obtener grandes bonificaciones entre todos los codificadores.
  • Eso es solo un puñado de proposiciones . Lo que es común para esos nichos es que simplemente no puedes lanzar un número suficientemente grande de novatos de Java a un problema y esperar que encuentren una solución funcional y sostenible. Se requiere mucho conocimiento de dominio, que solo puede obtener cuando trabaja con personas experimentadas. Eso significa que no son fácilmente reemplazables. Ergo, las compañías tienen que pagarles más y darles problemas interesantes para trabajar para mantenerlos. Por supuesto, hay trabajo duro en todas partes, pero es mucho más tolerable cuando trabajas en algo que realmente te importa.

¿Qué hay de C?

  • Sin embargo , creo que hay ventajas en aprender C primero sobre C ++ o Java. Cuando trabajas en lenguajes como Java, C # e incluso Python, inmediatamente comienzas a alejarte del aprendizaje de los fundamentos de un lenguaje de programación y comienzas a aprender bibliotecas y marcos asociados. Pero con C obtienes algunas llamadas a la biblioteca, te mantienes enfocado en la semántica del lenguaje por más tiempo, y C a menudo te obliga a pensar más y más profundamente sobre lo que sucede debajo del capó.
  • C es un lenguaje de nivel medio . Cuando la gente habla de ello, escuchará frases como “codificación al metal” o “codificación cerca del cable”. C es el lenguaje de:
  • compiladores,
  • intérpretes
  • editores,
  • Sistemas operativos y programación embebida.
  • Cuando aprende a programar en C, casi tiene que comprender cómo se ejecutan los programas. Ya sabes lo que significan IO, mapeado, pila, memoria y mapeado de memoria. Empiezas a pensar cuánto mejor hubiera sido la vida si hubieras nacido con dieciséis dedos.
  • Simplicidad y velocidad

    • C es simple , elegante y malvado rápido; Es compacto y eficiente. Debido a que C tiene punteros sin formato, operadores bit a bit y las palabras clave: externo, volátil, estático y de registro, lo que significa que comprenderá más sobre la escritura de código eficiente de lo que puede obtener de cualquier lenguaje de nivel superior. Lo único que te enseñará mejor estas cosas es un lenguaje de bajo nivel, y con los procesadores modernos no desearía ensamblar a nadie.
    • La sintaxis C es la razón por la cual los programadores hablan de la “Familia de Lenguajes C”, que generalmente incluye lenguajes como: C, C ++, C #, Java, EcmaScript (también conocido como JavaScript), Objective-C y muchos otros. Wikipedialistas mucho más, pero creo que su lista es un poco loca.

    Disciplina

    • C también es exigente , fastidioso, quisquilloso y a veces francamente críptico. Puede escribir fácilmente códigos difíciles de leer, difíciles de mantener en C. Pero, y este es un punto clave, no tiene que hacerlo. Aprender a escribir código mantenible en C requerirá (y con suerte inculcará) disciplina de codificación. En la mayoría de los idiomas, la corrección de errores de sintaxis puede bordear lo trivial. Por ejemplo, los mensajes de error del compilador de Ada son tan buenos que podrían haber reparado el código por usted. Encontrar y corregir un punto y coma faltante o adicional en C a veces puede ser una tarea épica.

    Menos distracciones

    • C no es un lenguaje orientado a objetos para que no te distraigas con cosas como la herencia y el polimorfismo. No digo que estos no sean conceptos importantes, es solo que puedes simplificar un poco las cosas aprendiendo primero la programación directa. De hecho, una vez que haya aprendido C y haya escrito un par de programas integrados en algunas computadoras de placa única, aprender C ++ es el siguiente paso natural. Necesitará que alguien quite sus dedos de las macros y las directivas de preprocesador, pero aparte de eso, será sencillo. Me sentiría tentado a enseñar C con un compilador de C ++, y solo destacaría las pocas diferencias que no eran retrocompatibles con un compilador de C estricto.

    Programación incrustada

    • Mi argumento final para aprender C está relacionado con la programación integrada. Como programador, siempre obtengo una sensación de satisfacción cuando entrego cualquier código de trabajo. Hacer que una computadora haga lo que quieres puede ser satisfactorio. Pero cuando integro mi código incrustado con un hardware personalizado que hace que las cosas sucedan fuera de la computadora, desde mover un brazo robótico hasta generar una forma de onda sincronizada con precisión, obtengo una emoción incomparable. Esa emoción solo sucede porque aprendí C. Por supuesto, terminé haciendo la mayor parte de mi codificación incrustada en C ++, pero aún sentía que aprender C primero lo hizo todo posible. Si desea una forma rápida y agradable de aprender C, Pluralsight lo tiene cubierto, eche un vistazo al Lenguaje de programación C de Kenny Kerr en acción.

    Aprender C o C ++ puede convertirlo en un desarrollador web marginalmente mejor, pero ese tiempo se gastaría mejor aprendiendo más sobre el desarrollo web.

    1. ¿Ya eres un desarrollador web de primer nivel?
    2. ¿Ya está familiarizado con herramientas nuevas y relevantes (React.js, ES6, io.js, etc.)?
    3. ¿Sientes una fuerte curiosidad intelectual sobre lenguajes de nivel inferior como C y C ++?

    Si respondió sí a las tres preguntas, debería aprender C o C ++. De lo contrario, concéntrese en el desarrollo web.

    Node.js es, para la mayoría de los propósitos prácticos, lo suficientemente rápido:

    (fuente: rendimiento de varios idiomas)

    Un par de puntos sobre C ++ vs C:

    • C ++ está orientado a objetos y C no
    • las sintaxis son muy similares
    • C ++ fue creado intencionalmente para parecerse a C de muchas maneras

    Deberías aprender C cuando:

    • necesitas un ensamblador portátil (que es lo que C es realmente) por cualquier razón,
    • su plataforma no proporciona C ++ (un compilador de C es mucho más fácil de implementar),
    • necesita interactuar con otros lenguajes que solo pueden interactuar con C (generalmente el mínimo común denominador en cualquier plataforma) y su código consiste en poco más que la interfaz, no haciendo que valga la pena colocar una interfaz C sobre código C ++,
    • pirateas un proyecto de código abierto

    Consulte aquí para obtener más respuestas y explicaciones: ¿Cuándo usar C sobre C ++ y C ++ sobre C?

    Porque no siempre serás un desarrollador web. Si eso no es cierto, entonces me da pena tu carrera en TI. Hay mucho más en TI que solo desarrollo web. ¿No te aburrirás haciendo el mismo tipo de cosas una y otra vez, año tras año, durante el resto de tu vida profesional?

    Hay muchas otras áreas interesantes que podría explorar: inteligencia artificial, robótica, Big Data, Internet de las cosas, computación en la nube, dispositivos móviles, juegos, realidad virtual, modelado y simulación científica, etc. La mayoría, si no todas, de estas áreas lo harán requieren lenguajes como Java, Python, C ++, C #, Go, Julia y Swift. ¡Seguramente no pedirán JavaScript!

    La mayoría de los lenguajes de desarrollo web se basan en una sintaxis similar a C o C ++. Una vez que aprenda esto, y por qué C es como es, se vuelve mucho más fácil entender por qué otros lenguajes de scripting están escritos de la manera en que están.

    Por ejemplo, una vez que conoces C, entender PHP se vuelve mucho más fácil. Del mismo modo, una vez que conozca C ++ (muy probablemente después de conocer C), comprender Javascript será más fácil.

    En el desarrollo web, generalmente no está haciendo ninguna programación real en la que proporcione directamente las instrucciones de los procesadores de sus visitantes (a menos que esté utilizando Java compilado). Todo se hace a través de un intérprete; generalmente el navegador o la aplicación del servidor (por ejemplo, el intérprete PHP Apache que va en su servidor). Estos a su vez se basan en C, o un lenguaje similar a C. Comprender C puede (a veces) ayudar a depurar y ayudarlo a comprender lo que se puede hacer de manera más eficiente y no se debe hacer.

    Sin duda, puede convertirse en un desarrollador web sin conocer los lenguajes de programación, en lugar de conocer los lenguajes de secuencias de comandos. Sin embargo, descubrí que conocer C y C ++ se vuelve útil de manera sutil, y ciertamente ayuda al depurar.

    Espero que esto sea útil.

    Porque tal vez algún día harás algo más que desarrollo web. Pintar en un rincón tecnológico es la vía rápida para una carrera corta. O el infierno de nunca hacer nada diferente.

    Se versátil

    Digo que después de trabajar durante 34 años en enrutadores de red, servidores de transmisión de video, reproductores de audio y otros productos de IoT, trabajando en el lado del servidor, del lado del cliente, del lado del servidor medio al servidor, incrustado grande y pequeño, solo escala a concurrencia a gran escala.

    En ese tiempo, he visto cómo las tecnologías se mueven de mainframe a minicomputadora a PC a computadora portátil a teléfono móvil y tableta, fuera del centro de datos, al centro de datos, en gran medida a hardware y chippers personalizados que a su vez se trasladaron a hardware básico, con procesadores siendo incrustado en todo excepto las cremalleras (aunque alguien puede estar trabajando en una cremallera inteligente que notifica a su reloj cuando está inactivo).

    Me alegro de no haberme encerrado en ninguna de esas tecnologías individuales. Simplemente pregúntele a IBM, DEC, Compaq, EMC, o cualquier otro miembro del interminable deadpool qué hizo por ellos. Solo los que tenían amplitud y versatilidad sobrevivieron, a veces por la piel de sus dientes. Adaptarse o morir.

    Soy mejor en algunos idiomas que en otros, pero es útil para mi trabajo actual saber Python, Java, Javascript, C y C ++. Y si necesito encontrar un nuevo trabajo mañana, puedo quitar los que necesiten y decir, sí, puedo hacerlo.

    No estoy convencido de que haya una buena razón para aprender C como desarrollador web. Si tienes mucho tiempo libre y curiosidad, seguro. Adelante. Saber otro lenguaje de programación no puede ser algo malo. Sin embargo, como ejercicio de productividad, no sería particularmente rentable. Mejorar sus habilidades de PHP y perfeccionar su CSS será mucho más útil.

    Dos respuestas:

    Si está desarrollando una aplicación web de alto rendimiento porque tiene que manejar miles de solicitudes por segundo, tiene un problema si su sitio web PHP se construirá en aproximadamente 200 ms.

    Jugando con este escenario, escribí un servicio http y construí sitios web con C ++. Esto se parece a la programación PHP, pero incluso las cadenas no se concatenan. Puede obtener objetos de una base de datos o usar sentencias SQL y crear su sitio web como en PHP, pero durante todo el escenario, el sitio web nunca se ensambló en el servidor. Solo había una colección de cosas que podían ensamblarse en una página HTML. Y eso fue solo enviar. Entonces por esto se envió un sitio web html al cliente.
    Entonces, mientras envía 1 respuesta como desarrollador de PHP, envío 100 con C ++.
    Cuando escala a 100 servidores, es hora de que piense en reemplazar mi servidor único por un modelo más nuevo.

    Entonces, si bien tuvo que pagar miles de dólares por servidores adicionales, una sala de servidores, aire acondicionado, un administrador que se encarga de que todas las máquinas estén funcionando y paguen mucho dinero por la energía, mi aplicación todavía está en un solo servidor. Las computadoras se vuelven dos veces más rápido durante los 18 meses. Mientras sus costumbres no se dupliquen más rápido que cada 18 meses, simplemente reemplazo el servidor de vez en cuando.

    Otra respuesta: tal vez quieras entender lo que estás haciendo como desarrollador. Aprende un idioma que te enseña a pensar como un desarrollador. Todavía es bueno aprender ensamblador para comprender la máquina en la que se está ejecutando todo pensamiento, incluido el servicio web y el cliente, y aún es bueno aprender C ++ para comprender los conceptos de Java, C #, PHP, Python, etc., están condenados al fracaso.

    El lenguaje da forma a la forma en que pensamos,
    y determina lo que podemos pensar.

    (Benjamin Lee Whorf)

    No puede convertirse en un buen desarrollador si no comprende la máquina ni al menos los conceptos para implementar software que ya están en el público.

    Hay al menos 2 razones por las que le gustaría aprender sobre C, C ++ de la programación web:

    1. Desea desarrollar una aplicación móvil (por ejemplo, Aprender Objetivo C DESPUÉS de aprender C, C ++)
    2. Aprenderá los fundamentos de la programación, lo que significa que mejorará sus habilidades y capacidad para aplicar lo que aprendió de C / C ++ a la programación web, lo que dará como resultado un código rápido y más eficiente en el uso de los recursos.

    No creo que debas hacerlo, a menos que actualmente desarrolles o tengas la intención de desarrollar juegos. Entonces puede ponerlo en una mejor posición para escribir para plataformas que no sean el navegador.

    Más allá de eso, creo que hay una serie de lenguajes, marcos y plataformas mucho más útiles para los desarrolladores web.

    La programación orientada a objetos tiene MUCHA demanda. El objetivo C le dará una buena base para aprender Swift, que dominará la tienda de aplicaciones de Apple en el lanzamiento público de iOS 8.

    C es ampliamente utilizado en páginas precompiladas para hosts integrados. A menudo, los sitios web que están escritos en un lenguaje de script y crecen muy rápidamente se compilan y luego se dejan como están. Facebook, por ejemplo, está compilado PHP compilado como C ++. Esto se hizo para evitar reescribir el sitio web y optimizar aún más el código en C ++ para ganar velocidad.

    Ok, en primer lugar, ¡odio toda esta noción de “desarrollador web”! ¿Qué es exactamente un desarrollador web? ¿Alguien que escribe programas que usan Internet o tiene que estar en el navegador? si realmente está limitado al navegador y un desarrollador web solo quiere hacer cosas que se muestran allí, ¿no sería el término apropiado como desarrollador front-end del navegador?

    De todos modos, aquí hay algunas razones prácticas para aprender C

    1. La mayoría de los paquetes de álgebra lineal de alto rendimiento están llamando a código C o fortran. Cuando quieres atravesar una gran cantidad de memoria contigua, estos idiomas realmente no pueden ser superados. Entonces, si desea crear su propia biblioteca o modificar una, ahí está su caso de uso. Muy relevante para el aprendizaje automático.
    2. En Android, puede acceder a más memoria y administrarla usted mismo utilizando el NDK (kit de desarrollo nativo (C / C ++)). También puede trabajar directamente con datos como bytes sin formato. Es posible que su aplicación obtenga un mejor rendimiento y que obtenga más compatibilidad cruzada para sus bibliotecas. Sí, supongo que Android quizás no sea “desarrollo web”, pero su aplicación de Android podría estar accediendo a la red, ¿entonces?
    3. Desea crear una base de datos o modificar una base de datos de código abierto. Almacene y recupere datos de la web. Nuevamente, no es realmente desarrollo web, pero dado que se accede a las bases de datos desde la red, es relevante.
    4. Desea escribir una aplicación para un dispositivo pequeño, como un raspberry pi que envía sus datos a través de la red, tal vez no realmente programación web, pero …
    5. el desarrollo del teléfono Ubuntu es qt / c ++
    6. Objective-C para iOS

    Supongo que el único lugar donde no veo que sea relevante, al menos desde un punto de vista contextual, es hacer botones / campos / GUI en la parte frontal de un navegador web.

    En conclusión, si desea salir del navegador (que en mi opinión es una plataforma en decadencia), las posibilidades de que encuentre C bastante útil son altas.

    Si desea que las cosas funcionen más rápido en el back-end, entonces C / C ++ podría ser de ayuda; Sin embargo, tenga en cuenta que esto no quiere decir “porque es c / c ++, se ejecutará más rápido”.

    C y c ++ pueden hacerte un mejor programador, pero serás menos productivo como desarrollador web. Te aconsejo que busques lenguajes dinámicos como python, JavaScript, ruby ​​o un lenguaje de escritura estático como golang
    Estos lenguajes se usan ampliamente para el desarrollo web hoy en día, tienen una gran comunidad de soporte y usan ampliamente marcos y pilas construidos sobre ellos.
    JavaScript: pila media, pila Mern, etc.
    Python – Django, matraz, etc.
    Rubí – sinatra y rieles
    GOlang – ginebra, iris, etc.
    Te sugiero que eches un vistazo a JavaScript y Golang
    JavaScript es un lenguaje que no puede prescindir; como desarrollador web debes saber JavaScript.
    Golang es fácil de aprender y es poderoso. Es un lenguaje tipeado estático y te obliga a cumplir con buenos principios de programación. Golang también es un lenguaje compilado súper rápido que tiene simultaneidad incorporada y está ganando impulso rápidamente en la comunidad de desarrollo web.

    No está claro si alguien que se considera un desarrollador web debería hacerlo. Sin embargo, probablemente deberían aprender un idioma relevante para los dispositivos móviles. Los dispositivos móviles generalmente tienen una experiencia de usuario superior cuando se vuelven nativos y los dispositivos móviles están creciendo en popularidad.

    En mi humilde opinión, un desarrollador web no necesitaría saber C o C ++.

    La pila LAMP (Linux, Apache, MySQL y PHP) es un conjunto de herramientas típico para desarrollar y servir una aplicación web y puede lograr la mayoría de los objetivos.

    Si desea ampliar su habilidad de desarrollador, ¿ha considerado Java?

    Es probable que compilar C ++ en WebAssembly sea una tendencia significativa para la plataforma web en el futuro. Además de los beneficios de conocer otro paradigma de programación, estar listo para esto sería algo bueno.

    No debería, a menos que esté planeando desarrollar dll u otros controles para su sitio web.