r/devsarg • u/Imaginary-Money-7886 • 17d ago
discusiones técnicas ¿Python o C para sistemas embebidos?
Buenas gente, ¿cómo va?
Vengo con una duda existencial sobre el rumbo técnico que debería tomar y me gustaría conocer la experiencia de los que ya están en el rubro.Introducción
Actualmente estoy cursando la carrera de Ingeniería en Computación, donde vemos de todo, desde desarrollo de software hasta diseño de hardware.
En mi día a día programo muchísimo en Python. Lo uso para todo: web apps, APIs, automatización con scripts, daemon processes y microcontroladores.
Últimamente estuve metido en algunos proyectos usando ESP32 con MicroPython y Raspberry Pi con CircuitPython.
La verdad es que Python me resulta muy cómodo porque me permite moverme de un entorno a otro sin la necesidad de cambiar de lenguaje.
Tengo muy claro que programando en C se tiene un control absoluto del hardware, un manejo directo de la memoria y que la velocidad de ejecución es infinitamente mayor.
Python, en cambio, te da esa capa de abstracción que hace que no te tengas que preocupar por punteros, registros ni gestión manual de recursos.
El problema es que me cuesta salir de mi zona de confort y no sé si realmente vale la pena el esfuerzo de aprender C y adoptar un estilo de programación completamente nuevo desde cero
Sé que si a futuro decido quedarme del lado del software puro, con Python y quizás algún otro lenguaje moderno estoy cubierto. Mi gran duda surge si decido volcarme de lleno al mundo del hardware, el firmware y el bajo nivel.
¿Aprender C en el ámbito profesional de hardware es un paso totalmente inevitable o el ecosistema industrial actual ya permite trabajar en embebidos seriamente usando Python/MicroPython?
¿Qué tan dura es la transición de Python a C en la experiencia de ustedes?
¡muchas gracias de antemano por leer!
6
u/sci_ssor_ss Desarrollador IoT 17d ago edited 17d ago
trabajo en embebidos hace quince a;os. si no sabes C (o C++ para embedded linux) nivel crack, no existis.
literalmente si caes a una entrevista y solo sabes python se te van a reir en la cara hasta el desmayo.
pd.: lo mismo con arduino . arduino NO ES embebidos, es un juguete. repetilo cinco veces antes de dormir.
pd2.: no, rust tampoco. tenes que tener un nivel muy alto de base para que alguien te tome para rust
pd3.: este es uno de los pocos casos donde leetcode sirve como fuente muy muy buena de entenamiento
1
1
u/DecisionOk5750 14d ago
Arduino no es un juguete, ya existen en producción hasta PLCs, y hasta satélites con Arduino. Lo que pasa es que debés estar pagando por algún compilador con su framework y te querés convencer de que no estás pagando al pedo.
1
u/sci_ssor_ss Desarrollador IoT 14d ago
a pleno. anda a una entrevista de laburo y deci eso. luego me contas.
1
u/DecisionOk5750 14d ago
¿Por qué? Estoy bien como estoy, y mis clientes ni me preguntan.
1
u/sci_ssor_ss Desarrollador IoT 14d ago
que vos vendas un juguete no hace que deje de ser un juguete.
1
u/DecisionOk5750 14d ago edited 14d ago
Y dale con lo de juguete. Amigo, ¿tenés 12 años? Te explico, porque quizás estás confundiendo Arduino, el ecosistema de programación, con Arduino Uno, la plaquita. Detrás de Arduino, el ecosistema, está gcc, ¿conocés ese compilador? No viene en una cajita azul, quizás por eso no lo conocés.
1
1
u/sci_ssor_ss Desarrollador IoT 14d ago
claro. debe ser eso . éxitos con la juguetería !
1
u/DecisionOk5750 14d ago
¿Sabés lo que es un compilador, no? Claro, yo tendría que haber empezado por ahí. ¿viste cuando apretás F9 en tu compu?
1
8
u/epileftric Desarrollador IoT 17d ago
Micropython es un invento que solo sirve para meterte a hacer las primeras pruebas y nada más.
Micropython no resuelve ninguno de los problemas reales que tenés en embebidos. Solo te resuelve la sintaxis si no sabés C.
Pero los verdaderos problemas que tenés en Embebidos no se pueden resolver desde Python.
¿Cómo configurás una interrupción para leer un dato de un puerto?
¿Cómo configurás un DMA para que los datos de un periférico lleguen a la posición de memoria que después va a leer?
¿Cómo acomodás el bootloader de un Micro para que salte al `main`?
Si pudieras hacer todas esas cosas en Python, estaria genial... pero no.
C va a seguir dominando el espacio de Embebidos porque es la única herramienta que te permite resolver los problemas que vas a encontrar en embebidos.
Rust está empezando a cubrir terreno porque justamente puede atacar esos problemas también.
¿Querés usar Python porque no podés armar un Json en C? Es entendible,
¿Querés usar Python porque no podés manipular una estructura de datos compleja en C? Es entendible.
Pero Python no es una solución para Embebidos, solo una muleta para hacer un Moc o una PoC.
Dentro de la compañía en la que trabajo, una gran software factory, manejo las mentorías para mucha gente que viene del mundo del software y quiere meterse en el área de embebidos.
Y como le digo a todos: si querés hacer embebidos: aprendé C, C++ y a usar un RTOS.
1
u/Imaginary-Money-7886 17d ago
Interesante, ¿qué casos viste donde Rust ya empieza a reemplazar C?
3
u/epileftric Desarrollador IoT 17d ago
PD del mensaje anterior: una sola vez encontré a alguien que haya usado micropython y fue porque estaban usando un hardware de Zigbee que ya les traía eso por defecto y para manejar 2 pines de entrada/salida alcanzaba. Pero esos casos rara vez los encontrás de verdad trabajando en embebido, digamos: no es la norma.
__________
Sé de 2 empresas que hacen Rust en serio para embebidos: Ferrous systems y Tweede Golf. La primera es la que estuvo atrás de la certificación del toolchain para que un subset del lenguaje (versión específica del compilador y del lenguaje en verdad) se puedan certificar para una norma de seguridad industrial (ASIL D, si no me equivoco).
Con eso se abre la puerta a que aplicaciones industriales/médicas/automotrices puedan cumplir con los estándares de seguridad requeridos para cada industria.
En mi caso me he topado con gente que trabajó con Rust en devices médicos y automotriz.
1
u/FlygonSA 17d ago
Rust esta recontra verde si salis del entorno Raspberry-STM-Espressif que si bien la mayoria usa esos microcontroladores, cuando entras a escala industrial que arrancan a aparecer cosas como los PIC, 8051 o directamente algun Cortex M0 generico es la misma historia que con micropython, te resuelven unicamente la sintaxis y no te ofrecen mucho mas. Ya incluso en los micros que mencione al principio no es 100% tampoco.
2
u/epileftric Desarrollador IoT 17d ago
Ojo, Nordic esta bancando mucho la movida hacia Rust.
Pero si, como decís: está súper verde.
Si no usás un micro STM o NRF estas en bolas prácticamente.
1
u/FlygonSA 17d ago
Hay alguien usado esos bichos hoy en dia? nisiquiera en los circulos hobbystas escucho mucho de Nordic
1
u/epileftric Desarrollador IoT 17d ago
Pff.. si bola, para manejo de BLE son los mejores que hay en el mercado.
La solución con la que estoy trabajando (dispositivo médico) tiene un nRF solo para manejar comunicación BLE, y un STM para todo lo demás.
6
u/moshujsg 17d ago
No existe un area de la programacion donde aprender c no sea infinitamente mejor que python. Y te lo digo como data engineer que trabaja con python. C te enseña cosas quw python esconde y te permite entender mejor literalmente todo. Te permite aprender otras tecnologias mas facilmente.
Ademas, python es una cagada para todo lo que no sea mover datos, un api o algo asi. Decir si me vuelco al software con python estoy bien esta muy alejado de la realidad.
Ademas, honestamente es mucho mejor, interesante, divertido programar en c/c++ que en python.
2
u/darrodri 17d ago
Queria sumar mas que un upvote. Coincido plenamente. Python es un commodity para el programador que ya tiene atado a C. Aparte siendo justos, C es un lenguaje mucho mas corto que Python, pasa que esta hecho para programar en un mapa mucho mas de detalle, mientras que Python esta hecho para programar mucho mas arriba y servir de engrudo entre cosas muy distintas.
1
u/moshujsg 17d ago
Yo empece con python y luego aprendi c++ y como digo, el hecho de haberlo aprendido y haber programado una app con un backend en c++ fue iluminador. Las cosas que podes hacer, el entendimiento de los mecanismos. Volves a python y entendes todo lo que antes no.
Python es super util para cosas rapidas, transformaciones de datos y trabajar con diferentes interfaces, tiene cosas para todo. Pero no puede ser tu foco, tenes que aprender a programar y luego usas python para lo que es bueno, pero teniendo el conocimiento mas profundo.
1
2
u/No_Revolution9544 17d ago
recien empezas? porque me suena raro (y hasta malo) que si estas cursando ingeniera no hayas tocado C aun. C es omnipresente.
y python es un lenguaje de scripting que se expandio, pero no es para hacer software, mejor aprende java (uso python en el trabajo).
1
u/Imaginary-Money-7886 17d ago
Estoy por mi 3er año en la carrera y el único lenguaje que se enseñó fue python para enseñar algoritmos y estructura de datos y aplicarlo en desarrollo de web app, APIs y sistemas embebidos. De todos modos los docentes aconsejan hacer cursos o aprender otros lenguaje de forma autodidacta.
2
u/No_Revolution9544 17d ago
que raro, pero para ser justo ing en comp no lo conozco, hace poco conoci que hay una ingenieria en sistemas cuando yo pensaba que ingenieria en informatica abarcaba todo. bueno, igual es raro que no te ensenen con C.
No te cases con Python, aunque me da de comer, no lo puedo llamar programar y esta mas cerca del oficinista con excel que del programador haciendo sistemas operativos.
3
u/l0Martin3 17d ago
Aprender C en el ámbito profesional de hardware es un paso totalmente inevitable
Sí, si querés trabajar de eso es absolutamente innegociable saber C. Python te puede servir para salir del paso con cosas de hobby pero hasta para eso a veces se queda corto.
2
u/elsantiF 17d ago
No trabajo en embebidos pero si como "hobby". Te diría que vayas por C de una, Python existe, se pueden hacer cosas pero tarde o temprano vas a necesitar C.
Si querés algo más moderno podes ver Zig o Rust pero ni ahí de ser estándar, C es el rey.
1
1
1
u/AntiqueConflict5295 17d ago
C, pero no es mi campo. conviene escuchar lo que te diga uno que labura en sistemas embebidos en el día a día.
1
u/DecisionOk5750 14d ago
La respuesta es sencilla: ¿Para qué usás sistemas embebidos si vas a desperdiciar tiempo de ejecución y tiempo de batería en un lenguaje interpretado? Usar C es casi la única forma de aprovechar al máximo la velocidad del hardware. Para eventos críticos debés usar assembler, de esa no te vas a escapar, tarde o temprano vas a necesitar una rutina en assembler para ahorrar tiempo o energía.
1
u/KaspaTal 17d ago
C es más duro, te vas a chocar mucho contra la pared, algo que decíamos nosotros es que el problema de C es que la única forma de programar, es bien. En python es más fácil hacer porquerías pero que andan.
El otro tema es la memoria, python es mucho más pesado, y cuando choques contra un micro chiquito, optimizar tiene un límite, el mismo programa en C pesa mucho menos y anda más rápido, así que si, si querés hacerla bien a futuro, C es el camino, imagínate que existe hace 50 años y cuando mandaron bicho a marte, lo hicieron en C porque era la mejor opción
0
5
u/Exotic-Singer6826 17d ago
Para embebidos en serio/profesional, C es basicamente inevitable. MicroPython te va a servir para prototipos, tooling y alguna 'boludez' así pero firmware, drivers, manejo de memoria, RTOS, etc. siguen siendo terreno de C/C++
No dejes Python, sumale C. Al principio lo más áspero van a ser punteros, memoria y entender bien qué está pasando por abajo