Passa ai contenuti principali

IMPERATIVE (IT.6.1)

Tateo’s Interdisciplinary Lifelong Learning Project
T I L L L
LEARNING - SHARING - NETWORKING
Learning, knowledge sharing and Communities engagement about:
Artificial Intelligence, Augmented / Virtual / Mixed Reality, Automation, Electronics, Computer Science and Information Technology, Mobile Technologies, Problem Solving, Readings, Social Media, Simulation, Artificial Vision, Work and Soft Skills
by Tateo Giovanni Battista
_____________________________
LEARNING
COMPUTER SCIENCE

The imperative era is now nearing its end.

L'era imperativa è ormai al tramonto.


Hashtag keywords
: #computerScience #imperativeProgramming #functionalProgramming #softwareDevelopment #TILLL 
#TateoBlog 

Summary. Main and distinctive characteristics of programming languages based on the "imperative" paradigm. The advent of new hardware technologies requires a change in our programming style. Let's see what are the weaknesses of the "imperative" paradigm and what are the reasons that are making the "imperative" era go down in favor of the "functional" one. 

Caratteristiche principali e distintive dei linguaggi di programmazione basati sul paradigma "imperativo". L’avvento delle nuove tecnologie hardware richiede un cambiamento del nostro stile di programmazione. Vediamo quali sono i punti deboli del paradigma "imperativo" e quali sono i motivi che stanno facendo tramontare l’era “imperativa” a favore di quella “funzionale”.


~ o ~

You are here (>>>) within the TILLL project
Ti trovi qui (>>>) all'interno del progetto TILLL

|
+->>> TILLL 
      |
      +-> LEARNING
      |   +->>> IT. COMPUTER SCIENCE
      |         +->>> 1. BIG DATA
      |         +->>> 2. BUSINESS INTELLIGENCE
      |         +->>> 3. CLOUD COMPUTING
      |         +->>> 4. COMPUTER GRAPHICS
      |         +->>> 5. HPC
      |         +->>> 6. SW DEVELOPMENT
      |         |     +->>> 1. IMPERATIVE
      |         |     +->>> 2. FUNCTIONAL
      |         |     +->>> 3. OOP
      |         |     +->>> 4. HTML
      |         +->>> 7. OPERATIONS RESEARCH
      |         +->>> 8. BLOCKCHAIN
      |         +->>> 9. EVENTS
      |
      +->>> SHARING
      |     +->>> BLOG
      |
      +->>> NETWORKING
      |
      +->>> ABOUT ME


~ o ~

§1. The oldest programming paradigm.
Il più antico paradigma di programmazione.


  Imperative programming (from the Latin imperare = to command) is the oldest programming paradigm. According to this paradigm, a program consists of a clearly defined sequence of instructions given to a computer.
   The source code of imperative languages brings together the commands that determine what the computer must do, and when, to achieve the desired result. The values used in the variables are changed during program runtime. To control commands, control structures such as loops or branches are integrated into the code.
  La programmazione imperativa (dal latino imperare = comandare) è il più antico paradigma di programmazione. Secondo questo paradigma, un programma consiste in una sequenza chiaramente definita di istruzioni date a un computer.
  Il codice sorgente dei linguaggi imperativi mette insieme i comandi che determinano cosa deve essere fatto dal computer, e quando, per raggiungere il risultato desiderato. I valori utilizzati nelle variabili vengono modificati durante il runtime del programma. Per controllare i comandi, vengono integrate nel codice strutture di controllo come loop o rami.

   The alternative to the imperative paradigm is the "declarative" paradigm, whose key difference is that, unlike "imperative" programming which focuses on the HOW, "declarative" programming focuses on the WHAT. Unlike imperative programming languages, which are written as a step-by-step guide (HOW) for the computer, in declarative programming, the desired end result (WHAT) is directly described. Using a culinary metaphor, we can say that imperative languages are similar to recipes, while declarative languages are similar to an explanatory photo of the dish already prepared.
  L'alternativa al paradigma imperativo è rappresentato dal paradigma "dichiarativo",  la cui differenza fondamentale consiste nel fatto che, a differenza della programmazione "imperativa" che si concentra sul COME, la programmazione "dichiarativa" si concentra sul COSA. A differenza dei linguaggi di programmazione imperativi, che sono scritti come una guida passo passo (COME) per il computer, nella programmazione dichiarativa, viene descritto direttamente il risultato finale desiderato (COSA). Utilizzando una metafora culinaria, possiamo affermare che i linguaggi imperativi sono assimilabili alle  ricette, mentre i linguaggi dichiarativi sono assimilabili ad una foto esplicativa della pietanza già preparata.

  The various imperative programming languages can in turn be assigned to three further subordinate programming styles: the structuredprocedural, and modular programming style.
  I vari linguaggi di programmazione imperativi possono a loro volta essere assegnati a tre ulteriori stili di programmazione subordinati: lo stile di programmazione strutturato, procedurale e modulare.

  The structured programming style extends the basic imperative principle through specific control structures, sequences, selection (selection) and iteration (repetition). At its core is the containment or complete elimination of jump instructions, which unnecessarily complicate the imperatively designed code.
  Lo stile di programmazione strutturato estende il principio di base imperativo mediante strutture di controllo specifiche, sequenze, selezione (selezione) e iterazione (ripetizione). Alla base c'è il contenimento o la completa eliminazione delle istruzioni di salto, che complicano inutilmente il codice progettato in modo imperativo.

  The procedural approach divides the activity to be performed by a program into smaller secondary activities, which are described individually in the code. This creates programming modules that can also be used in other programs.
  L'approccio procedurale divide l'attività che deve essere svolta da un programma in attività secondarie più piccole, che sono descritte singolarmente nel codice. Si creano così moduli di programmazione che possono essere utilizzati anche in altri programmi. 

  The modular programming model goes a step further: Here the individual program components are designed, developed and tested completely independently of each other. Finally, the individual modules combined form the actual software.
  Il modello di programmazione modulare fa un ulteriore passo avanti: qui i singoli componenti del programma sono progettati, sviluppati e testati in modo completamente indipendente l'uno dall'altro. Infine, i singoli moduli combinati formano il software effettivo.

Resources and Insights.
Fonti ed approfondimenti
 1. Imperative programming: Overview of the oldest programming paradigm, Digital Guide IONOS (link)
     Programmazione imperativa: il paradigma di programmazione più antico, Digital Guide IONOS  (link)

~ o ~

§2. The end of the "imperative" era.
La fine dell’era “imperativa”.

  The approach that we software developers are traditionally used to follow is inspired by a very specific paradigm. Many of us were born with this methodology and perhaps we don't even suspect the existence of alternatives. Perhaps many like me who am writing know that the paradigm we usually use is called "imperative". No one has ever felt the need to question this methodology as the performance obtained in terms of resources used and processing times did not raise the need to consider other techniques.
  L’approccio che noi sviluppatori software siamo tradizionalmente abituati a seguire si ispira ad un paradigma ben preciso. Molti di noi sono nati con questa metodologia e forse neanche sospettiamo l’esistenza di alternative. Forse molti come me che sto scrivendo sanno che il paradigma che usualmente utilizziamo si chiama “imperativo”. Nessuno ha mai sentito l’esigenza di mettere in discussione questa metodologia in quanto le performance che si ottengono in termini di risorse impiegate e di tempi di processing non hanno sollevato l’esigenza di prendere in considerazione altre tecniche.


~ o ~

§3. Hardware resources are no longer critical.
Le risorse hardware non sono più critiche.

  Today, however, multicore hardware technologies are increasingly appearing on the market, making parallel processing more affordable. Memory is no longer a critical resource for processing. For example, my first PC had 64K of RAM, while the computer I'm writing from has 8GB of RAM: 130,000 times more !. Furthermore, my legendary Commodore 64 worked at a frequency of 1 MHz, while today I work with a 3.4 GHz multi-core processor: a good 3,400 times faster! Therefore, no longer having to preserve processing time and memory occupation, the style of our programming can be oriented towards the optimization of other aspects that until now were kept in the background.
  Oggi, però, sul mercato si affacciano sempre più prepotentemente tecnologie hardware multicore che rendono più abbordabile l’elaborazione parallela. La memoria non rappresenta più una risorsa critica per l’elaborazione. Si osservi a titolo di esempio che il mio primo PC aveva 64K di RAM, mentre il computer da cui sto scrivendo ha 8GB di RAM : ben 130’000 volte di più!. Il mio mitico Commodore 64, inoltre, lavorava ad una frequenza di 1 MHz, mentre oggi lavoro con un processore multi-core da 3.4 GHz : ben 3’400 volte più veloce! Quindi, non dovendo più preservare il tempo di elaborazione e l’occupazione di memoria, lo stile della nostra programmazione può essere orientato alla ottimizzazione di altri aspetti che fino ad ora erano tenuti in secondo piano.


~ o ~

§4. Parallel programming requires a different style.
La programmazione parallela richiede uno stile differente.

  The trend to engage in new code optimization techniques is not a fad of the moment and was not born to satisfy a desire for renewal. In reality it is the daughter of the same technological innovations introduced by the hardware. The multi-core architecture is enhanced only if the processing is parallelizable. But obviously, in order for the code to be sorted on several processors at the same time, it must offer greater guarantees in terms of memory sharing and management, stability of the algorithms, absence of side effects, referential transparency, etc.
  La tendenza a dedicarsi a nuove tecniche di ottimizzazione del codice non è una moda del momento e non è nata per soddisfare una voglia di rinnovamento. In realtà essa è figlia delle stesse innovazioni tecnologiche introdotte dall'hardware. L’architettura multi-core è valorizzata solo se la elaborazione è parallelizzabile. Ma ovviamente affinché il codice possa essere smistato su più processori contemporaneamente deve offrire delle garanzie maggiori in termini di condivisione e gestione della memoria, di stabilità degli algoritmi, di assenza di effetti collaterali (side-effect), di trasparenza referenziale, ecc.


~ o ~

§5. Functional Programming takes the field.
La Programmazione Funzionale scende in campo.

  There is a paradigm known as "functional programming" which appears to be suitable for current technology. This technique until now has remained confined to research centers and university campuses. Set aside by the development world as it is considered a resource-eater and very slow in the management of large databases. The availability of increasingly larger memories, the advent of fast and multi-core processors, have made this technique more affordable. Its weaknesses have faded in favor of strengths that would offer greater stability, optimization, and maintainability of code meant to run in parallel.
  Esiste un paradigma noto col nome di “programmazione funzionale” che sembrerebbe essere adatto alla tecnologia attuale. Questa tecnica fino ad oggi è rimasta confinata nei centri di ricerca e nei campus universitari. Messa da parte dal mondo dello sviluppo in quanto ritenuta mangia-risorse e molto lenta nella gestione di grosse basi di dati. La disponibilità di memorie di dimensioni sempre maggiori, l’avvento di processori veloci e multi-core, ha reso questa tecnica più abbordabile. I suoi punti deboli si sono affievoliti a favore dei punti di forza che offrirebbero una maggiore stabilità, ottimizzazione e manutenibilità di codice pensato per essere eseguito in modo parallelo.

Differenze generali tra l’approccio “imperativo” e quello “funzionale”


~ o ~

§6. Spotlight on Functional Programming.
Riflettori accesi sulla Programmazione Funzionale.

  If in the future we want to continue to produce efficient software, we cannot ignore the adoption of this paradigm. In the next posts tagged with #FunctionalProgramming we will analyze in detail the merits of this paradigm: absence of side effects, referential transparency, recursion, thread-safe. We will also review the programming languages oriented to this style (Clojure, F #, Scala) and those usable in functional style (Ruby, Pyton, Perl). I look forward to the next post and I invite you to share your experiences in order to make this topic a little less mysterious.
  Se in futuro, vogliamo continuare a produrre software efficiente, non possiamo prescindere dalla adozione di questo paradigma. Nei prossimi post taggati con #FunctionalProgramming analizzeremo in dettaglio i pregi di questo paradigma : assenza di effetti collaterali, trasparenza referenziale, ricorsione, thread-safe. Inoltre prenderemo in rassegna i linguaggi di programmazione orientati a questo stile (Clojure, F#, Scala) e quelli utilizzabili in stile funzionale (Ruby, Pyton, Perl). Vi attendo al prossimo post e vi invito a condividere le vostre esperienze in modo da rendere questo argomento un pò meno misterioso.


~ o ~

§7. References and insights.
Riferimenti ed approfondimenti.

  Here are some references to websites, videos and books that you could use to learn more about the topics covered in this article:
  Riporto di seguito alcuni riferimenti a siti web, filmati e libri che potresti utilizzare per approfondire gli argomenti trattati nel presente articolo : 
1   "Imperative programming", Wikipedia
“Programmazione imperativa”, Wikipedia
2   "Functional programming", arcetri.astro.it
“La programmazione funzionale”, arcetri.astro.it
3   “Imperative and functional languages”, okpanico.wordpress
“Linguaggi imperativi e linguaggi funzionali”, okpanico.wordpress 4   “Differences between functional programming and imperative programming”, Microsoft
“Differenze tra programmazione funzionale e programmazione imperativa”, Microsoft


~ o ~

§8. More generally.

Più in generale.


  In this article we have analyzed the "imperative" paradigm of programming for software development.

   But if you want to examine all the other interesting aspects of the Information Technology, then allow me to suggest you the reading of the following article which is the main one of the thematic area dedicated to this discipline, within TILLL~Encyclopedia (En).

  In questo articolo abbiamo analizzato il paradigma "imperativo" della programmazione per lo sviluppo del software

    Ma se vuoi approfondire tutti gli altri aspetti interessanti dell'Information Technology, allora permettimi di suggerirti la lettura del seguente articolo che è il principale dell'area tematica dedicata a questa disciplina, all'interno di TILLL~Encyclopedia (En)}


Computer Science and Information Technology

Informatica e Tecnologie dell’Informazione

(IT)


~ o ~

§9. Stay up to date.

Rimani aggiornato.


If you are interested in the topics covered in the current article and want to be updated on my latest compositions dealing with them, then I invite you to register 


on the Facebook page: 

Computer Science and Information Technology by Tateo's Interdisciplinary Lifelong Learning" (>)


and at the Pinterest dashboard: 

Computer Science and Information Technology by Tateo's Interdisciplinary Lifelong Learning" (>)


which I dedicated specifically for sharing the most recent changes made to the corresponding thematic area of Tateo~Learning (>).

Se sei interessato agli argomenti trattati nell'articolo corrente e vuoi essere aggiornato sulle mie ultime composizioni che trattano di essi, allora ti invito a registrarti.


alla pagina Facebook

Computer Science and Information Technology by Tateo's Interdisciplinary Lifelong Learning" (>)


ed alla bacheca Pinterest:

Computer Science and Information Technology by Tateo's Interdisciplinary Lifelong Learning" (>)


che ho dedicato appositamente per la condivisione delle modifiche più recenti apportate all'area tematica corrispondente di Tateo~Learning (>).



~ o ~

§10. Let's keep in touch.
Teniamoci in contatto.

  I hope you enjoyed this article, belonging to the Learning (>) section of the Tateo's Interdisciplinary Lifelong Learning (TILLL) project (>), and that the notes and observations I gathered within it meets your interests. 

  If you want stay tuned with the TILLL project evolution, then I invite you to follow the next upgrades that are published on the TILLL's Blog and on the social media pages dedicated to the TILLL community.


  Spero che questo articolo, appartenente alla sezione Learning (>) del progetto Tateo's Interdisciplinary Lifelong Learning (TILLL) (>), ti sia piaciuto e che le note e le osservazioni che ho raccolto al suo interno soddisfino i tuoi interessi. 

  Se vuoi rimanere aggiornato sull'evoluzione del progetto TILLL, allora ti invito a seguire i prossimi aggiornamenti che vengono pubblicati sul Blog di TILLL e sulle pagine social dedicate alla community TILLL.


  (>Tateo-Blogofficial blog of TILL project

  (>LinkedIn page dedicated to TILL project

  (>Facebook page dedicated to TILL project

  (>Twitter account dedicated to TILL project

  (>Pinterest account dedicated to TILL project

  (>Instagram account dedicated to TILL project



~ o ~

§11. Something about me, the founder and author of Tateo~Blog Project.
Qualcosa su di me, il fondatore e sull'autore del progetto Tateo~Blog.

First of all, thank you for visiting one of the pages of my blog. My name is Giovanni Battista Tateo (shortly Bat) and I am the founder and author of a project of Interdisciplinary Lifelong Learning of which the Tateo~Blog (:::) blog is the means of sharing. I was initially an Information Technology expert, and later I became an electronic engineer, specializing in industrial Automation. I'm passionate about Artificial intelligenceVirtual RealitySimulation, and I'm an expert in Artificial Vision applied to industrial Automation. Currently, and starting four years ago, I am employed as a Proposal Engineer at Mer Mec S.p.A. (:::) company. Previously, starting in 2004, I was employed, always at the same company, as a Designer of Artificial Vision Systems and Image Processing Algorithms, applied in particular to Railway Diagnostics. I am a supporter and promoter of Lifelong LearningSocial Networking and Knowledge Sharing by means of the web. If you want more details about me, visit the About Me (:::) page.

Innanzitutto ti ringrazio per aver visitato una delle pagine del mio blog. Mi chiamo Giovanni Battista Tateo (brevemente Bat) e sono il fondatore e l'autore di un progetto Lifelong Learning Interdisciplinare di cui il blog Tateo~Blog (:::) ne è il mezzo di condivisione. Sono stato in principio un esperto di Informatica, e in seguito sono diventato un Ingegnere Elettronico, specializzato in Automazione Industriale. Sono un appassionato di Intelligenza ArtificialeRealtà VirtualeSimulazione, e sono un esperto di Visione Artificiale applicata all'Automazione Industriale. Attualmente, ed a partire dall'anno 2016, sono impiegato come Proposal Engineer presso la società Mer Mec S.p.A. (:::). Precedentemente, a partire dal 2004, sono stato impiegato, sempre presso la stessa società, come Progettista di Sistemi di Visione Artificiale e di Algoritmi di Elaborazione delle Immagini, applicati in particolare alla Diagnostica Ferroviaria. Sono un sostenitore e promotore dell'apprendimento permanente, dei social network e della condivisione delle conoscenze tramite il web. Se vuoi ulteriori dettagli su di me, visita la pagine About Me (:::).


  References to contact me. Following you can find my personal references that you can use if you want to contact me directly, and the links to my social accounts that you can use to follow me or to keep in touch with me by means of social media networks.

  Riferimenti per contattarmi. In seguito puoi trovare i miei riferimenti personali che puoi utilizzare se vuoi contattarmi personalmente, ed i collegamenti ai miei account social che puoi utilizzare per seguirmi e rimanere in contatto con me tramite le reti di social media


Eng. Tateo Giovanni Battista

    - e-mail: tateogb@libero.it (send e-mail)

    - phone / WhatsApp : (+39) 388 8419726

    - Skype (link)

    - LinkedIn account (link)

    - Facebook account (link)

    - Twitter account (link)

    - Instagram account (link)

    - Pinterest account (link)


-----------------------------------------

TILLL~Learning © January 21, 2022

Commenti