Definizione di programma informatico

di il
24 risposte

Definizione di programma informatico

A parte l'accezione comunemente usata per indicare una applicazione, per la quale ritengo più appropriato il termine "software", che ne dite di questa mia definizione, certo superficiale, di programma informatico?

Un algoritmo, o un insieme di algoritmi, tradotto in un linguaggio comprensibile al computer.

24 Risposte

  • Re: Definizione di programma informatico

    Queste definizioni in linguaggio naturale sono sempre necessariamente imprecise e vaghe. Il buon vecchio Wittgenstein e le sue patologiche fissazioni per "l'esattezza" nel linguaggio comune sono morti da un pezzo, non solo in senso anagrafico: dai tempi della scuola di Vienna si è capito che il rigore come genialmente anticipato da Leibniz e Kant e modernamente inteso da Frege in poi è possibile solo entro sistemi formali ben definiti.

    Come tali, certe definizioni si trovano facilmente su vocabolari e dizionari tecnici di un certo pregio ed è del tutto ragionevole accontentarsi del modo in cui sono formulate, in maniera semplice e valida uniformemente per l'ingegnere come per il fattorino, per l'artista come per l'insegnante di letteratura. Poi si possono compilare intere enciclopedie con i dettagli e le definizioni specialistiche, ma sempre senza pretendere di cavar sangue da una rapa ossia di andare oltre i limiti semantici, le ambiguità del linguaggio naturale, l'arbitrarietà di talune scelte lessicali fatte sostanzialmente per alzata di mano o per prelazione storica. Per tutto il resto, coerenza e rigore si trovano a iosa solo nell'intero apparato concettuale e simbolico dell'informatica teorica, che peraltro in quanto teoria della calcolabilità (già teoria della ricorsione) è parte integrante della logica matematica assieme alla teoria dei sistemi logici propriamente detta, alla teoria dei modelli e alle teorie fondazionali (insiemistica infinita e grandi cardinali, categorie, gruppoidi etc.), tutte oggetto di studio in un buon PhD e postdoctoral - anche sotto forma algebrica di teoria dei reticoli.

    In ogni caso, un calcolatore è solo un ammasso di circuiti a base di silicio e metalli vari, quindi non è in grado di "comprendere" alcunché. Esso è semplicemente progettato e costruito per eseguire sequenze organizzate di istruzioni in linguaggio macchina, ed è dunque questa la corretta definizione di base di computer program o programma per calcolatore elettronico, che comunque nella comunicazione ordinaria è sinonimo di software senza se e senza ma.

    Se poi siamo colti da un accesso di acribia filologica, già superiore alla media degli estensori di dizionari, possiamo anche voler aggiungere il dettaglio che esistono linguaggi e programmi interpretati, i quali non consistono direttamente in sequenze di istruzioni in linguaggio macchina, ma vengono indirettamente elaborati con la mediazione di un altro programma, a sua volta direttamente eseguibile (che può essere un interprete o una macchina virtuale o altro assimilabile) il che inevitabilmente riconduce ricorsivamente alla definizione già data, anche in modo molteplicemente annidato se si vuole.
  • Re: Definizione di programma informatico

    A rigore, tali ragionamenti andrebbro estesi all'intero scibile, però. Non solo alla definizione di "programma informatico". Che significa "comprendere", anche per gli esseri viventi, o per gli esseri umani? In quale modo non siamo anche noi, in senso lato, delle "macchine"?

    Cos'è il linguaggio, se non una approssimazione che serve a noi umani (ma anche, seppur in altra misura, agli animali) per esprimere idee, concetti, impressioni? E cosa sono idee, concetti, ed impressioni, se l'unico modo per definirle è il linguaggio stesso?

    Detto questo, apprezzo il tuo intervento, sicuramente colto e frutto di riflessioni sincere, ma come vedi tutto quanto, ed il contrario di tutto quanto, sono opinabili, possono essere portati al paradosso, etc. etc.
  • Re: Definizione di programma informatico

    agentsmith ha scritto:


    Detto questo, apprezzo il tuo intervento, sicuramente colto e frutto di riflessioni sincere, ma come vedi tutto quanto, ed il contrario di tutto quanto, sono opinabili, possono essere portati al paradosso, etc. etc.
    Ti sbagli. Non tutto, non sempre. Esistono dei punti fermi e dei solidi risultati definitivi anche in filosofia del linguaggio e dell'argomentazione, nella belief revision, nella teoria dell'apprendimento, eccetera. Esistono piani diamesici e convenzioni tacite, che vanno conosciuti prima di cimentarsi in certe imprese. Inoltre la dialettica hegeliana non è una forma di discesa infinita o tireless rebutting: ha dei limiti ben precisi, anche se troppi non l'hanno mai capito.

    Comunque in un caso come il presente non occorre certo scomodare i massimi sistemi: basta e avanza la definizione di un qualsiasi dizionario tecnico.

    Per quanto sia limitata la conoscenza attuale sui meccanismi e i processi della "comprensione" come associazione semantica di significato e significante, è comunque estremamente chiaro che tale termine non può in alcun modo applicarsi letteralmente al modo di funzionare di un calcolatore - eccetto al più il caso paradossale, puramente evocativo, in cui tale calcolatore stia eseguendo una qualche applicazione di IA (sempre e comunque in linguaggio macchina, o interpretata da un altro programma in linguaggio macchina direttamente eseguibile!) che "in qualche modo", ma sempre in un senso tecnico piuttosto preciso, simula meccanismi cognitivi e apprendimento.

    Direi che nel caso della tua definizione si tratta solo di una ingenuità, un uso puramente simbolico e traslato del termine che però contrasta apertamente con la volontà di fornire una definizione "tecnica" accettabilmente rigorosa, il che implica un uso letterale ed il più possibile inequivocabile dei termini, pur restando nell'ambito della genericità.
  • Re: Definizione di programma informatico

    ultrasound91 ha scritto:


    Un algoritmo, o un insieme di algoritmi, tradotto in un linguaggio comprensibile all'unità centrale di elaborazione del computer.
    Questa "definizione", oltre a mantenere il problema esiziale della prima, ne introduce altri.
    E' riduttivo dare per scontato che tutti i calcolatori siano organizzati secondo l'architettura Von Neumann: nella maggioranza dei sistemi di elaborazione dedicati (embedded) non vi è distinzione fisica, e spesso neppure logica (sistemi distribuiti), tale da consentire di individuare una "unità centrale" qualsivoglia. Nonostante ciò, tali calcolatori fanno comunque uso di programmi come qualsiasi altro.

    Generalizzare e astrarre sono arti sottili, padroneggiate da pochi specialisti.

    Siete molto giovani e in qualche misura "vittime" di un sistema scolastico allo sbando, in Italia e purtroppo in tutta Europa, sebbene in misura minore. Una volta queste cose si apprendevano al Liceo e si capivano definitivamente in un corso universitario di area tecnoscientifica. Cercate di non confondere l'attività scolastica di fornire una definizione informale "con parole tue", volta unicamente a colpire l'immaginario del discente (se fatta dal lato giusto della cattedra) o a verificare la comprensione di un concetto (caso simmetrico), con quella che è l'attività professionale di coniare una definizione linguistica il meno ambigua possibile, che è un mestiere vero e proprio come molti altri, e come tale richiede una lunga e appropriata preparazione - certo non improvvisabile con una semplice conoscenza scolastica di questa o quella materia.

    Repetita juvant: la comunicazione verbale, tecnica e non, poggia su un cumulo enorme di strati sedimentari di premesse inespresse, convenzioni non scritte, accordi faticosamente raggiunti che non si possono né ignorare, né rimettere facilmente in discussione (per giunta su un forum, e senza competenze specifiche). Per i vostri scopi basta e avanza la definizione standard da dizionario tecnico, certo elaborata da chi ne ha la competenza (wikipedia va ignorata, è solo un pessimo segno dei tempi), senza sognarsi personalizzazioni o "umanizzazioni" di computer che "comprendono" una banalissima sfilza di istruzioni numeriche: poetiche immagini, magari evocative in una lezione svolta in una classe di ITIS, che non trovano però posto su dizionari e glossari tecnici.
    Laddove poi la generalità e anche gli usi estensivi come "programma (per calcolatore) in sorgente" o il più appropriato "sorgente/i di un programma (per calcolatore)" non bastino più, c'è un intero arsenale di termini specifici per descrivere di volta in volta un eseguibile PE o un binario per uno Z80 o una MCU Fujitsu o un TriCore Infineon, o un firmware in formato HEX Intel o Motorola, eccetera.
  • Re: Definizione di programma informatico

    Premesso che esistono anche calcolatori non digitali (analogici, son pochi ma ci sono ancora in giro), aspetto di vedere chi scriverà che il classico calcolatore digitale esegue essenzialmente due funzioni logiche: AND e NOT (oppure OR e NOT, le cugine NOR e NAND e così via).
    O magari scendendo pure a livello del funzionamento dei transistor, o infine la mitica IEEE-1990 col suo glossario più o meno antiquato

    La vera domanda è (scusa l'impertinenza)... ma perchè ti è sorta questa domanda?
  • Re: Definizione di programma informatico

    M.A.W. 1968 ha scritto:


    Siete molto giovani...
    Bhè io almeno giovane inside
  • Re: Definizione di programma informatico

    agentsmith ha scritto:


    Cos'è il linguaggio, se non una approssimazione che serve a noi umani (ma anche, seppur in altra misura, agli animali) per esprimere idee, concetti, impressioni? E cosa sono idee, concetti, ed impressioni, se l'unico modo per definirle è il linguaggio stesso?
    Ueeee... mò si parte col pippone di cos'è un colore.
    Perchè siamo sicuri che, ad esempio, il colore rosso che vedo io (o meglio che il mio cervello interpreta sulla base delle tensioni che arrivano sul nervo ottico a loro volta collegato alla retina, alle varie cellule *** dell'occhio) sia il rosso che vedi te?

    Lassà stà questi argomenti, ci si sono fatti "***" immani (più o meno produttive) generazioni e generazioni
  • Re: Definizione di programma informatico

    +m+ ha scritto:


    Premesso che esistono anche calcolatori non digitali (analogici, son pochi ma ci sono ancora in giro), aspetto di vedere chi scriverà che il classico calcolatore digitale esegue essenzialmente due funzioni logiche: AND e NOT (oppure OR e NOT, le cugine NOR e NAND e così via).
    I calcolatori analogici sono sempre bellissimi e in molti settori dell'automazione di processi continui ce ne sono molti più di quanto normalmente si pensi, sostanzialmente per questioni di certificazioni acquisite e costi non ricorrenti di eventuali nuovi progetti. Quasi tutti oggi sono comunque "digitalizzati" usando microcontroller, ADC, DAC, fotoaccoppiatori con output proporzionale e digipot per sostituire gli originali potenziometri e altri input di controllo analogici per i PGA; in altri casi, un po' più invasivamente, si sono sostituiti direttamente i PGA e gli OTA di bordo con versioni digitally controlled, realizzando degli ibridi nei quali anche switch e relay di controllo dei percorsi di segnale sono controllati da una catena di decisione digitale basata su ADC e core logico programmabile in maniera tradizionale o direttamente asservito ad un PLC EN 61131 di nuova concezione. La presenza di numerosi SoC ibridi con ampie sezioni analogiche a bordo, ampiamente interfacciate con la logica, offre poi ulteriori possibilità ad una tecnologia mai totalmente abbandonata in taluni ambiti industriali, navali ed energetici.
    Invito chiunque voglia divertirsi un po' a procurarsi su una bancarella il mitico "Sistemi di Controllo" di Noel M. Morris nell'edizione Hoepli sulla quale hanno studiato generazioni (passate) di ingegneri e progettisti, è uno dei pochi testi classici ancora reperibili che parlano più diffusamente della progettazione, costruzione e messa a punto di calcolatori analogici tradizionali.


    Tornando al digitale, a livello di integrazione di porte logiche standard (escluse le esotiche ECL, conosciute da quattro gatti e usate da uno e mezzo) è quasi tutto implementato come combinazione di NAND, per due motivi molto semplici: il primo è la naturale intrinseca ridondanza dell'algebra booleana alla quale accennava anche il paragrafo citato, che consente la sintesi logica di ogni altro tipo di funzione; il secondo è che l'implementazione su silicio di tale porta richiede esattamente due FET o transistor, con tutto ciò che ne consegue in termini di densità di integrazione.

    ultrasound91 ha scritto:


    Io credo che approfondire e conoscere la definizione esatta, sia compito di un professore o di uno scrittore di libri (di informatica).
    ...e casualmente, su questo forum come su molti altri, c'è anche chi fa o ha fatto l'uno e/o l'altro, tra le tante.

    Ma al di là di questo, conoscere quella banale definizione è veramente a portata di chiunque sappia aprire un dizionario.
    Possedere delle nozioni e informazioni tecniche, più o meno approfondite, tante o poche che siano, è un conto; ben altro è sviluppare e coltivare quello che il noto cognitivista Massimo Piattelli Palmarini chiama "la griglia culturale", ossia la capacità di giustapporre, collocare, organizzare e correlare informazioni, nozioni, concetti lungo assi temporali e concettuali, ossia in a nutshell quella che si chiamava, e si chiama, un buona cultura generale.


    EDIT: post join e link update.
  • Re: Definizione di programma informatico

    +m+ ha scritto:


    La vera domanda è (scusa l'impertinenza)... ma perchè ti è sorta questa domanda?
    Se è rivolto a me... (altrimenti ho inteso male...) in primo luogo: dato che siamo programmatori, o perlomeno appassionati di programmazione, mi sembra logico chiedersi "ma cos'è un programma". Gente, non devo scrivere un dizionario di informatica, nè tantomeno una tesi di laurea, volevo semplicemente trovare una definizione adeguata, e per adeguata non intendo certo "esatta", specialmente per i non addetti ai lavori, che spesso pongono queste domande.
  • Re: Definizione di programma informatico

    agentsmith ha scritto:


    ...volevo semplicemente trovare una definizione adeguata, e per adeguata non intendo certo "esatta", specialmente per i non addetti ai lavori, che spesso pongono queste domande.
    La domanda successiva è inevitabile: cosa ti fa ritenere "inadeguata" la definizione del dizionario, che è scritta in modo da soddisfare chiunque voglia una prima informazione sul termine?
  • Re: Definizione di programma informatico

    agentsmith ha scritto:


    A parte l'accezione comunemente usata per indicare una applicazione, per la quale ritengo più appropriato il termine "software", che ne dite di questa mia definizione, certo superficiale, di programma informatico?

    Un algoritmo, o un insieme di algoritmi, tradotto in un linguaggio comprensibile al computer.
    Non ti sembra che manchi qualcosa?

    1) usi il termine algoritmo che, ovviamente, richede un'ulteriore definizione
    2) usi il termine computer che, ovviamente, richiede un'ulteriore definizione

    3) non c'e' nessun riferimento al fatto che un algoritmo ha il compito di risolvere un qualche tipo di problema (il termine problema e' un termine che, in qualche modo, puo' essere considerati gia' compreso), che riceve in ingresso delle informazione e ritorna dei risultati!

    Quindi, la tua definizione e' altamente insoddisfacente!

    Inoltre, perche' associare il programma necessariamente ad un computer digitale?
    Esistono anche i computer meccanici, oltre a quelli analogici (vedasi i telai per la creazione dei tessuti, la macchina di Babbage, ... ).

    Per quanto riguarda l'arrivare ad una definizione esatta, certo che e' possibile, basta appoggiarsi al corpo di conoscenze della matematica.

    In questo ambito, le definizioni sono esatte, o, se vogliamo, sono fatte in modo da non presentare ambiguita'.

    E come viene assicurata la mancanza di ambiguita'? Non solo assegnando un nome all'oggetto, ma anche assegnandone un certo numero di proprieta' che questo oggetto deve possedere.

    Questo non implica, evidentemente, che l'oggetto in se non possa avere anche altre proprieta', ma di sicuro, per chiamarsi pinco deve avere le proprieta' A,B,C. Magari potrebbe essere anche un pluto, se possiede anche le proprieta' D,E,F.

    Tutto questo cosa a porta? Alla mitica Macchina di Turing, alla SECD machine, alle macchine RASP, RAM, al Lambda Calcolo, ...

    Anche tali definizioni, ovviamente, dipendono da altre definizioni, ma l'informatico, o meglio, il Computer Scientist, possiede un corpo di conoscenze tale da comprendere ogni singolo termine della definizione.


    Ritornando al discorso iniziale, basta che leggi che cosa scrive Wikipedia, per capire che una definizione comprensibile e' abbastanza complicata da realizzare, perche' ogni volta che tenti una definizione, se guardi un po' piu' in dettaglio ti accorgi che manca qualcosa, o c'e' un certo numero di casi che non rientrano nella definizione, ...


    https://en.wikipedia.org/wiki/Curt
  • Re: Definizione di programma informatico

    migliorabile ha scritto:


    Inoltre, perche' associare il programma necessariamente ad un computer digitale?
    Esistono anche i computer meccanici, oltre a quelli analogici (vedasi i telai per la creazione dei tessuti, la macchina di Babbage, ... ).
    A rigore, i telai Jacquard sono programmabili, i computer analogici possono esserlo in senso lato, ma nessuna delle due tipologie originali ha un programma memorizzato, ciò che (dopo EDVAC e il report di Von Neumann, giusto per piantare un comodo paletto storico) è usualmente parte sottintesa della moderna definizione di calcolatore elettronico, peraltro sottolineata dall'uso del termine software con tutto il suo portato - che in modo sottile ma coerente esclude schede e nastri perforati, sistemi di programmazione ottici, cablaggi, interruttori e quindi anche simpatici dinosauri come Mark I o UNIVAC.
    Tra l'altro la velleitaria distinzione tra "software" e "programma per calcolatore elettronico" è in rotta di collisione con la pacifica assunzione del "programma memorizzato".

    Tuttavia, questo è probabilmente il difetto meno grave della definizione fornita, in confronto agli altri errori e al problema metodologico a monte: il primissimo posto in cui cercare una definizione generica è un buon vocabolario!

    Se non altro, occorre dire che questi thread consentono di distrarsi un po' dalle solite banali domandine, la cui risposta (ai tempi gloriosi in cui bandwidth e memorie di massa erano ancora risorse preziose) non poteva che essere un laconico RTFM.
  • Re: Definizione di programma informatico

    agentsmith ha scritto:


    +m+ ha scritto:


    La vera domanda è (scusa l'impertinenza)... ma perchè ti è sorta questa domanda?
    Se è rivolto a me... (altrimenti ho inteso male...) in primo luogo: dato che siamo programmatori, o perlomeno appassionati di programmazione, mi sembra logico chiedersi "ma cos'è un programma". Gente, non devo scrivere un dizionario di informatica, nè tantomeno una tesi di laurea, volevo semplicemente trovare una definizione adeguata, e per adeguata non intendo certo "esatta", specialmente per i non addetti ai lavori, che spesso pongono queste domande.
    Sei un programmatore e ti chiedi cos'è un programma?
    Ma che te ne fai di una "definizione adeguata" (qualsiasi sia la semantica da attribuirvi)?

    PS sarò sfortunato, ma finora nessun "non addetto ai lavori" mi ha posto il quesito, si vede che i tempi son cambiati!

    Comunque se vuoi quella che è ritenuta la definizione "ufficiale", basta - come ho già scritto - rifarsi al mitico IEEE 610.12-1990

    computer program. A combination of computer instructions and data definitions that enable computer hardware to perform computational or control functions.
  • Re: Definizione di programma informatico

    @MAW, il fatto di leggere il dizionario e' stato fatto notare piu' volte.

    Pero' penso che @agentesmith stia cercando di creare una definizione per conto suo, SENZA passare per il dizionario. In qualche modo, alternativa.

    Quale e' la questione? E' far notare dove la sua definizione risulti carente.

    Ovviamente, tra correzioni ed osservazioni, inevitabilmente dovra' arrivare ad una definizione simile a quella del dizionario !

    Personalmente non lo trovo scorretto!
    Anch'io quando devo affrontare un problema, cerco una prima possibile soluzione per conto mio.
    Quindi cerco della bibliografia al riguardo e confronto la soluzione descritta con la mia.

    Questo ha il doppio effetto collaterale di comprendere meglio la soluzione descritta, e capire quanto bene era stato compreso il problema!

    @+m+: c'e' un'evidente differenza tra un Programmatore ed un Computer Scientist.

    Il primo fa un lavoro.

    Il secondo, magari lavora anche, ma cerca anche di capire le cose, cercando di arrivare ai concetti fondamentali ed universali.

    Una corretta definizione, cosi' come la struttura dati corretta, puo' fare la differenza tra riuscire a scrivere un programma e fallire.

    Nel settore dell'Intelligenza Artificiale, ma anche, piu' banalmente, nella programmazione di software che giocano (scacchi, dama, go, carte, ...), questi aspetti sono fondamentali.

    Un esempio in tale senso e' la Fisica: confronta la Fisica di oggi con quella di Galileo, e pensa alle macchine che usano le scoperte della Fisica ...

    Ma anche la matematica, ...

    Ma senza andare troppo lontano, quello di trovare la definizione corretta e' pratica di ogni buon programmatore!
    Nel momento in cui una definizione e' associata ad un oggetto, e la separazione delle competenze tra oggetti, fa si che tali oggetti possano esser riutilizzati in altre parti del programma, in altri programmi, o diventare una libreria di terze parti.

    L'errore dei principianti (e non solo! Anche di pseudo-esperti!), infatti, e' proprio questo: non avere chiaro come modularizzare il codice, con relativi incasinamenti tra dipendenze circolari, responsabilita' assegnate ad oggetti che non c'azzeccano per nulla, solo perche' era comodo aggiungere il metodo li', in quel particolare momento, ...
Devi accedere o registrarti per scrivere nel forum
24 risposte