Este será un tema que siempre genere controversia, puesto que los seres humanos tenemos la característica de dar nuestro punto de vista como la
verdad absoluta, por eso a mi me gusta mucho un verso de una canción de un compositor cubano que dice: "la verdad de la verdad, es que no es una".
Bueno, dicho lo anterior para que nadie se ponga bravo, doy mi modesta opinión sobre este tema tan candente.
Que lenguaje usar depende principalmente de algunos factores:
- De la aplicación misma
- De los intereses y gustos del programador o diseñador de sistemas digitales
- De los conocimientos del programador o equipo de desarrollo
- De los intereses de la entidad que financia el desarrollo (para el caso de los que trabajan para una empresa)
- Otros factores
Podríamos dar todo un teque sobre cada uno de los factores, pero de eso ustedes saben bastante y han hablado suficiente, así que directo a mi criterio muy personal.
Si usted es un purista de la programación, que quiere sentirse un DIOS y saber todo lo que hará su microprocesador o microcontrolador, o es profesor de una universidad y quiere que sus alumnos aprendan bien la teoría de sistemas a microporocesadores, etc. El lenguaje de elección es el ensamblador.
Yo aprendí un montón de cosas sobre los sistemas a microcotrolador gracias al ensamblador, y creo que en las universidades que se respeten deben comenzar por allí, los amantes del hacking y los puristas utilizan este tipo de lenguajes porque sus intereses están orientados a sacar el máximo de rendimiento a sus diseños.
Sin embargo yo me decanto por el uso de lenguajes de alto nivel para la mayoría de las aplicaciones, y solamente en casos excepcionales utilizar el ensamblador, las razónes son muy simples:
- Los lenguajes de alto nivel, como C, BASIC o PASCAL permiten obtener soluciones completas en menos tiempo, debido a que la programación en alto nivel es más fácil de realizar y depurar, si bien es cierto que en el caso de los uC se consumen más recursos del sistema, hay uC en tal variedad que será difícil encontrar uno en el que nuestra aplicación no corra suficientemente bien. Por otro lado, si damos un vistazo a las últimas entregas de Microchip, veremos que muchos uC simplemente vienen siendo secuelas de versiones anteriores con más memoria de datos y programas, ejemplo: PIC16F877=>>PIC16F877A=>>PIC16F887, en cada caso se ha doblado la memoria de programas y se ha aumentado un poco la RAM, más algunas mejoras más bien cosméticas.
- La mayoría de los compiladores de alto nivel permiten la coexistencia de código de alto nivel y de código en ASM
- Es una falacia afirmar que una apliación profesional tiene que estar programada en ensamblador: De hecho, mientras desarrollaba mi cursillo de RTOS aquí en el foro, pude comprobar que la mayoría de las empresas dedicadas al desarrollo de soluciones profesionales no hacen sus sistemas en ASM, precisamente porque la programación con ensamblador reduce su competitividad y aumenta el tiempo de desarrollo, la cantidad de errores en sistemas grandes y dificulta el mantenimiento del software, etc, etc. y de hecho actualmente la gran mayoría de los sistemas medianos y grandes se programan con algún tipo de Sistema Operativo de tiempo Real (RTOS)
No es que sea un acérrimo defensor de los lenguajes de alto nivel y actualmente de los RTOS, sino que en la medida que el nivel de integración crece, también las herramientas de desarrollo van evolucionando y cosas como los lenguajes de alto nivel, antes vedados para el mundo de los uC, son ahora la elección por defecto para los profesionales, el resultado de ello es palpable, cada día vemos montones de productos nuevos o mejoras a estos en el mercado y eso no solo se debe al desarrollo de la electrónica, sino al desarrollo paralelo de las herramientas de desarrollo y puesta a punto de sistemas digitales, al uso de lenguajes de alto nivel que mejoran la productividad en varios órdenes sobre la programación en ASM y recientemente a la escalda de los RTOS en el desarrollo de sistemas digitales.
Mi consejos:
- No se vuelva fanático de ningun entorno de desarrollo o métodología de trabajo, cada una tiene sus aciertos y desaciertos, ventajas y desventajas.
- Antes de comenzar a programar, piense, razone saque conclusiones y valore el uso de una u otra herramienta de programación o el uso combinado, pero no elija por su temperamento o porque no tiene intensiones de aprender a programar con un nuevo lenguaje
Espero que mi criterio no caliente mucho este hilo, pero si se calienta, no importa esa es una de las cosas que mejor se nos dan aquí.
Saludos Reinier