Hacia Embedded World 2021: episodio 2

Nota del editor: En el primer blog de una serie de cinco blogs que conducen a la feria Embedded World 2021,episodio 1, se presentó una descripción general de lo que es Embedded World. En esta entrega, episodio 2, Randy repasa el lenguaje de programación C. El episodio 3 se centra en cómo usar la programación orientada a objetos puede reducir la complejidad. El episodio 4 muestra cómo la medida fundamental de un buen diseño es la capacidad para reconfigurarse a medida que cambian los requisitos sin tener que volver a implementar los componentes básicos. En el blog final, episodio 5, se cuestiona el espacio en expansión constante que requieren los sistemas operativos y se analiza la descomposición del sistema antes de la presentación principal de Randall en Embedded World 2021.

Mi mente está en la complejidad y la necesidad general de reducirla. Quiero que mi presentación muestre cómo se ha abordado la complejidad a lo largo de las décadas, recordar a la gente cómo llegamos adonde estamos y sacar a la luz algunas técnicas de simplificación que no son muy conocidas.

Como dije el mes pasado, tengo tiempo para perseguir intereses técnicos en mi estado semirretirado. Recientemente, para ponerme al día con las herramientas de desarrollo integradas de un cliente, tuve que buscar alguna sintaxis del lenguaje de programación C olvidada, así que tomé mi copia de “El lenguaje de programación C” de Brian Kernighan y Dennis Ritchie (K&R) para repasar. De hecho, tengo tanto la versión original de este texto como la segunda edición.

Fuente: Wikipedia (https://en.wikipedia.org/wiki/The C Programming Language)

Terminé volviendo a leer sus prefacios, introducciones y el capítulo 1, todo lo cual me trajo recuerdos de una época en la que estaba aprendiendo este idioma por primera vez. Comencé mi carrera como programador en lenguaje ensamblador a fines de la década de 1970. Recuerdo la dificultad para cambiar mi pensamiento a conceptos de nivel superior. La programación en lenguaje ensamblador era como programar mi calculadora programable HP-67; se ocupaba directamente de los registros y pasos de la máquina para obtener el resultado correcto. Yo era programador en lenguaje ensamblador. Escribir en lenguaje ensamblador era tedioso pero simple. Recuerdo haberme preguntado si este nivel más alto realmente valía la pena porque la única ventaja que tenía para mí en ese momento era la capacidad de cambiar de CPU.

Mis programas de lenguaje ensamblador se utilizaron en uno de los nueve microprocesadores integrados en instrumentos musicales electrónicos fabricados por Baldwin Piano and Organ Company en Cincinnati, Ohio. Baldwin inventó el órgano electrónico y se comprometió con la tecnología de punta. Ser capaz de generar un ritmo musical acompañante mientras decodificaba los acordes que el músico estaba tocando impuso restricciones muy severas en tiempo real. El rendimiento predecible era equivalente al éxito. Reducir la complejidad no lo era.

De todos modos, el Capítulo 1 de cada texto de K&R es un tutorial. Para mi gran satisfacción, al ingresar los ejemplos en mi máquina Linux exactamente como se muestran en el texto y al ejecutar los comandos textualmente para compilar y ejecutar esos ejemplos, todo funcionó exactamente como se describe. Fue una gran sensación. Este texto se publicó por primera vez en 1978. Mi máquina Linux está ejecutando la última versión de Linux (es decir: 5.8.14) que se lanzó el 7 de octubre de 2020 y no se cambió nada para evitar que mi programa C simple funcione. ¡Excepcional! Recuerdo el adagio: "Si no está dañado, no lo arregles".

Con esta experiencia, decidí retomar y volver a leer las secciones introductorias de mi libro de C++. Este es “El lenguaje de programación C++, 2.ª edición” de Bjarne Stroustrup publicado en 1991. Tanto mis libros de C como C++ están escritos por los creadores de esos lenguajes. Me gusta leer cómo pensaban los inventores. Los libros escritos por autores posteriores pueden describir las cosas con mayor claridad, habiendo tenido el beneficio de leer cómo pensaban los autores, pero también pueden estar inflados con más de lo que uno realmente necesita para aprender un concepto.

Fuente: https://stroustrup.com/2nd.html

Stroustrup, en solo 10 páginas, explica la cascada de tecnologías que impulsaron su objetivo (se podría decir, el objetivo de los informáticos) con C++ y esta estrategia fue reducir fundamentalmente la complejidad de modelar problemas de la vida real que podrían resolverse con un programa de computadora.

Explicó que comenzamos con la programación procedimental y luego la programación modular, seguida de la abstracción de datos y finalmente la programación orientada a objetos. Para revisar, la programación procedimental, como lo expresa Stroustrup, es:

La programación modular por Stroustrup es:

Aquí vemos un ápice para reducir la complejidad; es decir, para ocultar datos en módulos. Este es un atributo clave de la simplificación de sistemas. Es el comienzo del concepto de encapsulamiento.

Stroustrup continúa con su paradigma de abstracción de datos:

La abstracción de datos no está exenta de problemas según Stroustrup. Explica que adaptar la abstracción a nuevos usos requiere modificar su definición. Entonces, una vez que uno tiene que modificar una definición, uno no puede reutilizar exactamente lo que se ha definido. Esto lo lleva al concepto de programación orientada a objetos:

Entonces, ahora, tenemos el concepto de jerarquía y este es un concepto central para reducir la complejidad.

Lo que escribo en estos blogs no es donde me encuentro en mi investigación actual, en preparación para mi discurso de apertura de Embedded World. Estoy en una cascada de tecnologías propias, pero los conceptos sobre los que escribo en estos blogs es lo que ha dado forma a mi pensamiento. Tengo más por compartir en mi siguiente episodio.

Información sobre el autor

Image of Randy Restle

Randall Restle tiene más de 40 años de experiencia en la industria de los componentes electrónicos. Ahora está semijubilado y se desmpeñó como Vicepresidente de Ingeniería de Aplicaciones de DigiKey. Su experiencia incluye la dirección de equipos de ingenieros de aplicación, técnicos y personal de gestión cualificados para desarrollar productos originales y únicos de tecnología avanzada.

Sus actividades personales incluyen el procesamiento de señales digitales, la implementación de lógica programable, mejoras en el control del movimiento y el diseño de software. Es titular de patentes en múltiples industrias y es miembro senior del IEEE. Randall tiene títulos de BSEE, MS y MBA de la Universidad de Cincinnati.

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum