¿Por qué y cómo usan los ingenieros eléctricos C ++?

Como técnico de hardware, a menudo trabajará cerca del “metal desnudo”. Hasta la fecha, aprendí y usé muchos lenguajes de ensamblaje de muchos microcontroladores, DSP y procesadores de propósito general diferentes para escribir controladores y para depurar el hardware y pasarlo al equipo de software (la mayoría de los cuales no quieren entender el subyacente hardware más de lo que debían).

Cuando apareció “C”, fue un regalo del cielo. “Lenguaje de la Asamblea Universal”, se burlaron sus sumos sacerdotes. ¡Perfecto, gracias! Todavía se requería (y se requiere) un cierto ensamblaje, especialmente para extraer la última onza de rendimiento de instrucciones especializadas, pero la mayoría de las veces, cada línea de “C” era solo una abreviatura para mí para un acceso casi directo a la potencia total del procesador .

Para no quedarse fuera de la fiesta, los sumos sacerdotes del software intentaron “arreglar” C agregando clases, herencia, funciones orientadas a objetos, etc. Ninguno de los cuales se sumó al poder del lenguaje para expresarse directamente en el hardware. Lo vi como una “muleta” para las personas que no saben cómo codificar bien a bajo nivel.

Dicho esto, utilizo principalmente solo las características “C” con C ++, ya que sigue siendo el idioma nativo utilizado para la mayoría de los microcontroladores, DSP y sistemas operativos. Y sí, he estado lo suficiente como para codificar programas de propósito general en C ++, Fortran, Pascal, PL / M, Jovial, Delphi, ADA, Matlab y muchos otros que probablemente esté olvidando, incluido el aprendizaje de Python ahora. Lo hago para resolver problemas generales de ingeniería y analizar datos. Pero para diseñar y abrir hardware, dame mi compilador C / C ++ y vete a practicar tu religión / idioma del día en otro lugar.

Ahora que es una pregunta interesante, para ingresar a la industria del software debe saber cómo codificar, y a un gran nivel. Mira, también soy un estudiante de ECE, y también me dedico a codificar hasta el punto de que olvido mis estudios de rama. Debe conocer los conceptos de estructuras de datos, algoritmos y su implementación.

Furthet para motivarte es el campo de la codificación competitiva, y eso es simplemente increíble.

Hay varias plataformas como codechef, hackerearth, hackerrank, code force, top coder y muchas para contar. Allí puedes competir con programadores de todo el mundo y puedes medir tu potencial.

Así que sigue y codifica …

Que lo uses o no dependerá de a dónde te lleve tu carrera.

Tengo un BSEE Yo uso C y C ++ regularmente. También he trabajado con otros EE que no pudieron codificar para salir de una bolsa de papel mojada. (Al menos, no en C o C ++.) Algunos de esos mismos ingenieros podrían hacer círculos a mi alrededor en el análisis de integridad de la señal, el diseño del circuito, etc.

No he visto un gráfico de Smith desde la universidad, y he retenido lo suficiente de mi conocimiento de diseño de circuitos para hackear proyectos geniales con microcontroladores.

Pero así como no hago nada con fasores, factor de potencia y CA trifásica, todavía estudié el material y obtuve una calificación decente en mi curso de electrónica de potencia. No he presentado ningún transistor desde 1996, aunque sí trabajo en la industria de chips.

No había escrito más de una o dos líneas de MATLAB desde que me gradué, hasta que tomé un curso en línea de Machine Learning hace unos años. (Usé Octave, pero el lenguaje es el mismo). Encendí SPICE hace varios años para analizar un circuito de transistor simple para un mod compuesto para un sistema de videojuego. Antes de eso, no lo había ejecutado en varios años. Tampoco lo he ejecutado desde entonces.

No aplicará la mayoría de las cosas específicas que aprenderá en su grado BSEE. Sin embargo, aprenderá a ser ingeniero si se lo propone. Parte de ser ingeniero significa aprender a usar nuevas herramientas, cómo crear nuevas herramientas y cómo construir un futuro que aún no existe. C ++ es una de esas herramientas.

Muchas de las herramientas que uso a diario no existían cuando estaba en la escuela. En mi último trabajo, muchas de las herramientas que utilizó mi equipo fueron creadas por el propio equipo. Algunos fueron construidos por mí, en una combinación de Perl y C ++, nada menos.

Trabaja en desarrollar cierta flexibilidad mental. Deje de evaluar las herramientas por completo sobre la base de “¿cuándo usaré esto?” Podría ser que solo necesite usar esto durante los próximos 6 meses. (¡ Hola, MAGIC! ¡Disfruté de nuestro breve romance de verano! ) O podrías terminar usándolo durante 20 años. En mi último trabajo, finalmente retiré una herramienta que pirateé juntos en C como pasante de verano 13 años después. No tenía idea de que tomaría tanto tiempo matarlo. Otros proyectos más grandes murieron más rápidamente.

No sabrá qué herramientas necesitará en el futuro, porque el futuro aún no se ha construido. Su trabajo, si decide aceptarlo, es prepararse para la tarea de diseñar parte de ese futuro.

Ignora el idioma por un momento. Piensa en lo que realmente te está enseñando. La idea es que usted, como EE, debe estar familiarizado con algún tipo de desarrollo de software. Idealmente, tu universidad / colegio te obliga a tomar un curso de estructuras de datos también. Si no, entonces debes tomar uno como electivo.

La pregunta que debe hacerse es: ¿por qué me importa el desarrollo de software?

Lo más probable es que nunca haga un diseño de circuito estrictamente analógico, como una elección de carrera. Incluso si lo hace, querrá automatizar partes del flujo. Necesitarás hacer algo de programación para hacerlo. Incluso si permanece estrictamente en el nivel del dispositivo, encontrará que la programación es útil para ayudar a automatizar partes del proceso de simulación. A menos que estés exclusivamente en física de semiconductores, de la que no sé demasiado, como una elección de carrera.

Supongamos que estás pensando, a-ha! Voy a entrar en algo que ver con circuitos magnéticos en su lugar. Incluso allí, usará microcontroladores para detectar y controlar. O incluso sistemas de energía, necesitará escribir simulaciones.

Supongamos que ahora termina haciendo un trabajo de circuito digital, todo es ASIC / FPGA, que se realiza en VHDL o Verilog, los cuales son más fáciles de aprender si conoce algo de programación.

Si hace algo más, deberá utilizar técnicas de programación. Incluso las personas de telecomunicaciones usan MATLAB para simular sistemas antes de la implementación utilizando hardware “real”. Los campos como la detección de radar usan MATLAB para el trabajo de simulación. Necesitas hacer programación para esos.

En estos días, las radios están definidas por software; Los PLL son programables; La distribución del reloj en una CPU o SOC se realiza mediante algoritmos. Todo está definido y controlado por software. Es mejor que comprenda cómo hacer ese software.

En resumen, usted como EE, incluso si está trabajando lejos de cualquier “programación” obvia, necesitará utilizar técnicas de programación más de lo que espera.

Aprende a codificar y hacerlo bien. Hará que su trabajo como EE sea mucho más fácil a largo plazo, y tendrá más posibilidades de empleo.

Espero que esto haya ayudado a arrojar algo de luz para ti. ¡Buena suerte!

Bueno, C ++ como lenguaje orientado a objetos es especialmente bueno para escribir simulaciones.

En sistemas embebidos siempre prefiero escribir los programas en C ++ si es posible. Para muchos problemas, un programa C ++ es más rápido de escribir (todas esas buenas bibliotecas) que un programa C. Lástima que no todos los microcontroladores sean compatibles con C ++.

¿Y cómo entra un EE en la ingeniería de software? Todos esos microcontroladores y sistemas integrados también necesitan programas. Y los ingenieros de software “reales” tienden a despreciar ese trabajo tan mundano, pero alguien tiene que hacerlo de todos modos.

¡Y es divertido!

(Lo sé, tengo una visión sesgada de lo divertido que es)

Cuando hice mi licenciatura en ingeniería electrónica, nos enseñaron C ++ el primer año porque más adelante sería necesario el conocimiento de C y / o C ++ para aprender microcontroladores y programación integrada.

El curso de C ++ fue impartido por profesores del departamento de ciencias de la computación, y aunque hicieron un buen trabajo dando conferencias sobre clases y diseño orientado a objetos, no se centró mucho en escribir programas estándar de procedimientos en C.

El siguiente semestre tuvimos un curso de programación de microcontroladores, donde estábamos usando microcontroladores PIC Microchip de 8 bits (creo que era la serie 16F). Hasta donde sé, solo hay compiladores de C para estos microcontroladores, no C ++. Y como resultado, todas las lecciones de importación aprendidas sobre el diseño orientado a objetos en el semestre anterior fueron de poca o ninguna utilidad, y creo que muchos estudiantes tenían dificultades al intentar programar en el plano C. Creo que mi universidad más tarde reemplazó el curso C ++ con un curso C integrado para estudiantes de electrónica.

Entonces, ¿por qué (su colegio / universidad) enseñan C ++ a estudiantes de electrónica? Creo que probablemente se deba a una de las siguientes razones:

  • Piensan que debe conocer la programación orientada a objetos, incluso si no la necesita en este momento, podría necesitarla en el futuro.
  • Dependen del Departamento de Ciencias de la Computación para enseñarle programación, y solo ofrecen cursos de C ++.
  • No se dan cuenta de que C es suficiente para programar muchos microcontroladores, y probablemente se encuentran entre las personas que piensan que C y C ++ son más o menos lo mismo, lo que en mi opinión está tan lejos de la verdad como parece:
  • Aunque se dice que casi “cada programa C es un programa C ++ válido”, y C ++ a menudo se conoce como un superconjunto de C, creo que el dominio en uno no implica dominio en el otro, y la programación en C y C ++ es fundamentalmente diferente.
  • Para programar C, no puede usar la construcción orientada a objetos. A una persona que solo haya programado C ++ orientado a objetos le resultará difícil limitarse solo a C.
  • Del mismo modo, una persona que solo conoce C no puede reclamar conocimiento de C ++ solo porque sus programas C también son programas C ++ técnicamente válidos. E incluso si usa algunas cosas útiles de C ++ como std :: string y std :: cout en lo que de otro modo hubiera sido un programa en C, no creo que califique como programación en C ++.
  • De hecho, Bjarne Stroustup, el autor del lenguaje C ++, tiene una sección sobre las personas que usan el término “C / C ++” en las preguntas frecuentes de su sitio web: Stroustrup: preguntas frecuentes

Pero para responder a su pregunta:

Existe una buena posibilidad de que pueda sobrevivir sin C ++. Si solo va a programar algunos microcontroladores simples de 8/16 bits que solo tienen soporte C, probablemente no lo necesite.

  • En mi primer trabajo después de completar mi licenciatura y maestría, pasé 2 años escribiendo firmware, principalmente para microcontroladores Microchip dsPIC30 / 33-series, usando solo C. No escribí un solo programa C ++ esos 2 años.
  • Debo mencionar que desde entonces comencé un doctorado, y para mi proyecto de doctorado, he estado usando C ++ ampliamente para escribir algunas simulaciones de hardware usando la biblioteca SystemC.

Pero dicho esto, no le recomendaría que limite su conocimiento a solo C. Piense en su futura carrera y futuros desarrollos en tecnología, cada vez más microcontroladores y plataformas integradas tienen soporte C ++. La mayoría de los lenguajes modernos están orientados a objetos, y gran parte de la teoría orientada a objetos que aprenda en un curso de C ++ será útil si intenta aprender un lenguaje de programación diferente.

En cuanto al tipo de ingeniería de software en el que puede ingresar, probablemente estará relacionado con el hardware, el microcontrolador / programación integrada. Espero que disfrutes leyendo hojas de datos, porque eso es probablemente lo que pasarás el 90% de tu tiempo haciendo, no la codificación real.

Los ingenieros eléctricos necesitan saber cómo programar para poder manejar microprocesadores, por supuesto. La cantidad que desean involucrarse en el software varía mucho.

En un procesador pequeño (8 bits, 256 bytes de RAM), podría codificarse en ensamblado. Puede ser una cosa muy simple que hace funcionar un motor a diferentes velocidades dependiendo de la cantidad de línea que queda para tirar, o un controlador de horno de microondas o algo así.

Pero me saltaría C por completo si puedes. C ++ es mejor. En cada. Soltero. Camino. La única razón para usar C es si es un proyecto existente, o si el microprocesador no tiene un compilador de C ++ disponible para él.

Si las excepciones o RTTI están haciendo que su código C ++ sea demasiado grande, puede desactivarlos. C ++ está diseñado para que sus usuarios no tengan que pagar por nada que no quieran. Entonces terminas con un mejor lenguaje con la capacidad de escribir código más seguro con menos repetición.

Básicamente para programar cosas como Arduino, plcs, etc.

More Interesting

Como estudiante de pregrado, ¿cómo puedo comenzar con Computer Vision?

¿Qué idioma se utiliza para construir la mayoría de los principales sitios web como Google, Facebook y Twitter?

¿Por qué Java está separado en Core Java y Enterprise Java (Java EE)?

¿Los ingenieros de software de Silicon Valley dibujan diagramas antes de codificar o saltar y codificar?

¿Cuál es la mejor manera de encontrar distribuidores, revendedores de software?

Cómo pasar de un trabajo de prueba al desarrollo, prácticamente

¿Cuál es el lenguaje de programación más utilizado para la ciberseguridad?

¿Cuáles son las oportunidades de trabajo para los ingenieros de software en el campo del cricket?

¿Se incorporan las mejores prácticas modernas de desarrollo (TDD, patrones de diseño, separación de preocupaciones, etc.) en los cursos universitarios de desarrollo de software?

Cómo hacer que mi software que hemos desarrollado sea agradable y aceptable para todos y cada uno de los usuarios de mi software

Entonces, ¿qué hace que un buen ingeniero de software? ¿Después de una graduación de pregrado?

¿Cómo es la transición de la ingeniería eléctrica al aprendizaje automático y la ingeniería de software?

¿Qué es BAP (Bedien und Anzeigeprotokoll) y sus usos en el desarrollo de software automotriz?

¿Cuáles son las empresas de desarrollo de software más innovadoras?

¿Cuál sería el mejor enfoque para hacer una plataforma de descarga OTA para teléfonos móviles?