Aspettando Embedded World 2021 – Parte 2
Nota del redattore: la prima parte della serie di cinque blog che ci stanno accompagnando all'edizione 2021 di Embedded World è stata dedicata a una presentazione della manifestazione. In questa parte, Randall fornisce un ripasso delle nozioni sul linguaggio di programmazione in C. La terza parte si concentra su come la programmazione orientata agli oggetti possa contribuire a ridurre la complessità. La quarta parte, la quarta, illustra come la buona progettazione si misuri sulla capacità di riconfigurazione al mutare dei requisiti senza bisogno di implementare di nuovo i componenti costitutivi. Nella quinta parte finale, ci si interroga sull'aumento incessante dello spazio richiesto dai sistemi operativi e si tocca l'argomento della scomposizione del sistema prima del discorso introduttivo di Randall a Embedded World 2021.
Sto pensando alla complessità e alla necessità di ridurla a livello generale. Con la mia presentazione vorrei illustrare il modo in cui è stata trattata la complessità negli anni, ricordare come siamo arrivati a questo punto e mettere in luce alcune tecniche di semplificazione che non sono molto conosciute.
Come ho già accennato il mese scorso, sono praticamente in pensione e ho tempo di dedicarmi a questioni tecniche. Non molto tempo fa, per padroneggiare gli strumenti di sviluppo embedded di un cliente, ho dovuto ripassare la sintassi del linguaggio di programmazione C, perciò ho recuperato la mia copia di "The C Programming Language" di Brian Kernighan e Dennis Ritchie (K&R). A dire il vero, ho sia l'edizione originale di questo testo che la seconda edizione.
Fonte: Wikipedia (https://en.wikipedia.org/wiki/The C Programming Language)
Ho finito per leggere la prefazione, l'introduzione e il capitolo 1 di entrambi i testi e mi sono ricordato dei tempi in cui stavo imparando a utilizzare questo linguaggio. Ho iniziato la mia carriera come programmatore di linguaggio assembly alla fine degli anni '70. Era veramente difficile tentare di focalizzare la mente su concetti di alto livello. Programmare in linguaggio assembly era come programmare con la mia calcolatrice HP-67: si lavorava direttamente con i registri e gli step della macchina per ottenere il risultato corretto. Ero un programmatore assembly. Scrivere in linguaggio assembly era noioso ma semplice. Mi ricordo che mi chiedevo se valesse la pena usare questo livello più elevato, perché l'unico vantaggio che vedevo ai tempi era la possibilità di passare da una CPU all'altra.
I miei programmi in linguaggio assembly erano utilizzati in uno dei nove microprocessori degli strumenti musicali elettronici realizzati da Baldwin Piano e Organ Company di Cincinnati, in Ohio. Baldwin aveva inventato l'organo elettronico e puntava a realizzare tecnologia all'avanguardia. Essere in grado di generare un ritmo musicale di accompagnamento mentre si decodificano gli accordi che suona il musicista imponeva vincoli in tempo reale molto rigidi. Prestazioni prevedibili erano sinonimo di successo. Ridurre la complessità non lo era.
Il capitolo 1 di ogni testo K&R è un tutorial. Con mia grande soddisfazione, quando inserivo gli esempi nel mio computer Linux nel modo in cui erano indicati nel testo e davo i comandi per compilarli ed eseguirli, tutto funzionava esattamente come veniva descritto. Era una bellissima sensazione. La pubblicazione del primo volume risale al 1978. Il mio computer esegue la versione più recente di Linux (la 5.8.14), rilasciata il 7 ottobre 2020, e niente nel software è stato cambiato a tal punto da impedire al mio semplice programma C di funzionare. Fantastico! Mi ricorda quella vecchia canzone: "Fin che la barca va, lasciala andare".
Vista l'esperienza, ho deciso di recuperare e rileggere le sezioni introduttive del testo che ho su C++. Si tratta di "The C++ Programming Language, 2nd edition" di Bjarne Stroustrup, pubblicato nel 1991. Sia il testo su C che quello su C++ sono scritti dai creatori dei due linguaggi. Mi piace leggere direttamente il pensiero degli inventori. I testi scritti da altri autori in tempi successivi potrebbero descrivere le cose in modo più chiaro, dato che possono basarsi sul pensiero degli inventori, ma possono anche essere pieni di dettagli inutili se uno ha semplicemente bisogno di imparare i concetti.
Fonte: https://stroustrup.com/2nd.html
In sole 10 pagine, Stroustrup fa una carrellata sulle tecnologie che lo hanno spinto verso l'obiettivo (che si potrebbe definire informatico) con il C++. La strategia era praticamente quella di ridurre la complessità insita nella modellazione di quei problemi della vita reale che potevano essere risolti con un programma informatico.
Spiega che abbiamo iniziato con la programmazione procedurale e poi siamo passati a quella modulare, seguita dall'astrazione dei dati e infine dalla programmazione orientata ad oggetti. La programmazione procedurale, come definita da Stroustrup, è:
La programmazione modulare per Stroustrup è:
In questo caso per ridurre la complessità i dati sono stati nascosti in moduli. Si tratta di un attributo chiave della semplificazione dei sistemi. Ed è l'inizio del concetto di incapsulamento.
Stroustrup prosegue con il suo paradigma di astrazione dei dati:
Per Stroustrup, l'astrazione dei dati non è immune da problemi. Secondo il suo pensiero, per adattare l'astrazione a nuovi utilizzi bisogna modificarne la definizione. E, nel momento in cui si modifica una definizione, non è possibile riutilizzare esattamente ciò che era stato definito. Questo lo conduce al concetto di programmazione orientata ad oggetti:
A questo punto, abbiamo il concetto di gerarchia, che è fondamentale per ridurre la complessità.
Ciò che scrivo in questi blog non è il punto a cui sono arrivato per preparare il mio discorso di apertura a Embedded World. È vero che in questo momento sto analizzando un susseguirsi di tecnologie, ma i concetti che illustro in questi blog sono ciò che ha dato forma al mio pensiero. Vi racconterò di più nella prossima puntata.
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum

