PRINCIPI TEORICI DI PROCONTE
) INTRODUZIONE AL
PROCONTE
) INTRODUZIONE
SULLA INTELLIGENZA ARTIFICIALE
) SIMULAZIONE DELLA
MENTE UMANA
) PIACERE
E DOLORE, LE BASI DEL BENE E DEL MALE
) I
CONTENUTI DEL MONDO UMANO E I CONTENUTI DEL MONDO INFORMATICO
) L'INTERFACCIA DI
PROCONTE
) PERCHE' USARE PROCONTE
) I DATI DI PROCONTE
) I MODELLI DI CONTESTO
) LA NON
STRUTTURAZIONE DEI DATI
) LA
AUTODETERMINAZIONE DEI PROCESSI
) IL DATABASE
) CONFRONTO
CON LA PROGRAMMAZIONE TRADIZIONALE
) IL FUTURO DELLA
PROGRAMMAZIONE
) IMPLICAZIONI ECONOMICHE
) CHI
DOVREBBE COMINCIARE A USARE PROCONTE
) GLOSSARIO
INTRODUZIONE AL PROCONTE
ProConte e' un nuovo linguaggio di programmazione creato da Stefano Sampietro,
si tratta di un linguaggio di programmazione "Contestuale",
vale a dire che si programma definendo dei "contesto-dati", dove,
a seguito del verificarsi di un determinato contesto-dati si scatena una azione
procedurale del software .
Si potrebbe dire che funziona in modo associativo, un po' come i cervelli biologici,
un meccanismo stimolo-risposta .
Effettivamente, ProConte e' una via di mezzo tra
la programmazione informatica tradizionale e il funzionamento dei cervelli biologici .
Potrebbe anche essere definito in gergo tecnico come un "SISTEMA ESPERTO BASATO SU
REGOLE", ma (almeno per ora) senza logica fuzzy.
Nella programmazione tradizionale ("C","Basic","Java", ecc.)
,
le azioni del programma sono determinate da:
1) Dal programma:
Quando a seguito del lancio del programma, vengono eseguite delle procedure stabilite
dal programmatore, semplicemente in sequenza .
2) Dagli eventi:
Quando l'utente clicca su un qualche comando sullo schermo (button, listbox, ecc.),
o pigia un tasto della tastiera, o arriva un evento da una qualsiasi altra periferica,
si scatena un evento che fa eseguire determinate procedure,
stabilite dal programmatore quando ha creato il programma .
3) Dal contenuto delle variabili :
Spesso nei programmi viene controllato il contenuto delle variabili
ed in base ad esso viene stabilito quale procedura eseguire .
Effettivamente , bisogna dire che gia' nella programmazione tradizionale vi e' un certo
grado di contestualita' in quanto l'analisi degli eventi o del contenuto delle variabili e' una forma di analisi
contestuale .
Ma purtroppo si tratta di una analisi contestuale con molte limitazioni,
infatti si puo' controllare solo il contenuto delle variabili,
ma c'e' una scarsa attenzione al "ruolo" delle variabili.
A volte si creano apposta delle variabili che indicano il ruolo della variabile, un caso
tipico
e' quello delle "union" del "C" , siccome nella union serve sapere
come interpretare il suo contenuto,
spesso vengono create delle variabili che indicano cio',
una implementazione diffusa e interessante e' la seguente :
union EntitaGeometrica
{
Point Punto;
Line Linea;
Rectangle Rettangolo;
};
struct Str_EntitaGeometrica
{
int typeEnt; //tipo di entita contenuta nella union, che puo' essere, POINT=1, LINE=2, RECTANGLE=3 .
EntitaGeometrica uEnt; //Una entità geometrica .
};
Come i programmatori "C" sanno bene, i 3 dati membro di
"EntitaGeometrica" non sono tre variabili col proprio spazio
di memoria, ma lo spazio di memoria occupato da "EntitaGeometrica" e' quello
della variabile piu'
grande (tra le 3 varibili di "EntitaGeometrica"),
(supponiamo quello di "Rectangle"), nella union quindi ci puo' stare solo o un
punto, o una linea o un rettangolo,
si tratta quindi di sapere cosa ci sia dentro questa union per estrarre correttamente il dato,
pertanto si fa la struct "Str_EntitaGeometrica" che contiene oltre ad un
esemplare di "EntitaGeometrica"
anche un "int typeEnt" che serve a identificare cosa vi sia dentro la union,
cio' corrisponde al "ruolo" in proconte .
Questa e' una della rare situazioni in cui in un linguaggio come il "C" troviamo
un sistema di gestione della
indicazione a runtime di "cosa sia" una variabile, di quale sia il suo ruolo,
ma purtroppo cio' e' stato fatto per risparmiare spazio nella memoria ed e' stato visto
solo da questo punto di vista,
poi e' arrivata la programmazione ad oggetti "C++ e
altri linguaggi" dove gli sforzi di rendere piu' automatizzata
ed efficiente la programmazione hanno preso tutt'altra strada .
ProConte, implementa formalmente un sistema di controllo dei dati che comprende anche il
"ruolo" del dato,
non solo il suo contenuto .
In proconte si vengono a formare dei contesto-dati che definiscono il contesto corrente,
ove, l'interprete proconte,
controlla se al contesto dati corrente corrisponde un modello di contesto
(definito in precedenza da qualche programmatore proconte) .
Se trova un modello coincidente, lo esegue , altrimenti il programmatore proconte deve
creare il modello corrispondente .
La programmazione proconte da certi punti di vista e' piu' semplice che la programmazione
tradizionale, le variabili non vengono manipolate direttamente dal programmatore, ma solo dai CB (contesti base),
non ci sono cicli , vale a dire che il programmatore, non deve scrivere
"for(...)" o "while(...)", ecc.
non ci sono istruzioni condizionali , vale a dire che non ci sono gli "if(...)" o gli "switch(...)", ecc.
La funzione delle istruzioni condizionali e' adempiuta dalla analisi contestuale,
mentre i cicli stanno dentro i CB (contesti base) .
Proconte e' un linguaggio di programmazione di alto livello,
quindi si rende necessario che siano stati creati tutti i CB necessari per eseguire le
elaborazioni di basso livello .
Grazie al fatto che non vi e' la possibilita di definire strutture dati , il grado
di riutilizzabilita delle funzioni "C"
scritte nei CB e' tale da rendere possibile la copertura "semi-preventiva" di
tutte le operazioni di elaborazione .
Se si crea un programma che cicla molto si crea un programma poco efficiente, proconte non e' un
linguaggio di programmazione efficiente in se', se solo immaginiamo che ad ogni operazione
deve esaminare il contesto e verificare se esiste un modello corrispondente (per di piu' su file),
possiamo capire che con un linguaggio del genere non possiamo certo pensare di fare una funzione
che disegna una linea scrivendo pixel per pixel sul video ,
ma dovremo avere un CB che viene eseguito da un modello e disegna la linea internamente con codice "C" ,
al modello (modello di interfaccia) si devono passare il punto iniziale e finale,
il modello di interfaccia deve avere il CB "CB_DISEGNA_LINEA_SULLO_SCREEN" , ecc.
Praticamente deve essere usato per chiamare e passare i dati alle funzioni (CB),
ragione per cui il problema della scarsa efficienza di proconte viene spontaneamente eluso
dal modo di fare le cose che deve essere attuato in esso .
Si potrebbe dire che proconte (dopo essere stato istruito coi modelli) e'come un
programmatore, che conosce bene tutta la libreria di funzioni disponibile,
che sa in quale situazione (contesto) applicare le funzioni e nella giusta sequenza
e dando alle funzioni i dati giusti da elaborare .
Per programmare in proconte, e' importante farsi una idea dei CB che ci sono e trovare i CB che servono ,
ma non e' necessario conoscere i modelli che sono stati fatti,
se si tenta di creare un modello che esiste gia', proconte non consente di salvarlo e da' un avviso.
Inoltre quando si crea un programma, si parte dai modelli di livello piu' alto e si tenta di eseguirli,
se esistono i sub-modelli necessari per eseguire il programma in tutte le sue parti ,
il programma verra' eseguito senza che il programmatore sappia alcunche' dei modelli utilizzati per
eseguire il compito del programma (cio' e' dovuto alla capacita di autodeterminazione del programma) .
Cio' ha determinato la creazione di strumenti software decisamente complessi,
di difficile concezione e scelta tra quelle che sono le varie possibilita,
il risultato finora raggiunto e' frutto di una lunga fatica che dura da molti anni.
Le scelte piu' basilari sembrano essere abbastanza ben consolidate dalla pratica,
ma vi sono ancora molte cose per cui si deve decidere che strada dovranno prendere,
del resto l'impresa e' notevole .
INTRODUZIONE SULLA INTELLIGENZA ARTIFICIALE
Gli studiosi, da tempo immemorabile, hanno sempre tentato in qualche modo di simulare le funzioni della mente umana .
Da quando sono arrivati i primi computers , gli studiosi hanno potuto tentare di simulare il funzionamento del cervello umano,
il cui scopo evidente, e' quello di riprodurre le funzioni della "intelligenza"
e delle abilita umane in modo artificiale, in modo da potere sostituire l'uomo in molti lavori
e arrivare anche a fare cose che per i suoi limiti non puo' fare ,
(non puo' operare in luoghi troppo pericolosi o dannosi, ecc.) .
Quello che pero' e' successo ,
e' che il computer si e' rivelato molto piu' efficace dell'uomo nel fare i calcoli matematici ,
ma molto scarso nel capire la moltitudine di concetti che riguardano la vita degli esseri
umani.
Cio' e dovuto a vari fattori:
) I primi computer erano cosi' scarsi sia come potenza di calcolo e sia come capacita di memoria che ad ogni
tentativo di istruire il computer a reagire agli degli stimoli ambientali si veniva a saturare subito la sua
capacita di memoria e potenza di calcolo .
) L'efficacia matematica, fin dai primi computer era tale che si applico' da subito il computer per i fabbisogni
di calcolo matematico , prima nelle universita, poi nelle banche e poi nella gestione dei dati in tutte le aziende,
dando un ritorno economico che finanzio' lo sviluppo dei computer, ma la tendenza era quella di soddisfare le esigenze
delle attivita aziendali, che sono poi quelle che ancora oggi producono prevalentemente il danaro per finanziare
la ricerca sopratutto industriale in ambito informatico .
) Credo anche di poter dire che i ricercatori, si erano, almeno per la gran parte orientati a cercare dei modelli
di calcolo che implementassero l'intelligenza e le facolta cognitive umane,
come se la mente umana fosse caratterizzata peculiarmente da un particolare modo di elaborare i dati,
ma questo e' vero solo in parte .
Con il tempo e con l'avvento delle scienze psicologiche prima, e delle neuroscienze poi,
si comincio' ad intuire che il cervello funziona (almeno anche) in modo associativo,
tutto sommato il funzionamento sembra concettualmente semplice,
il cervello archivia le percezioni che derivano dagli organi di senso
(vista , udito, olfatto, gusto, somatosensoriale(tatto))
e all'insieme delle percezioni reagisce producendo una risposta che puo' essere
motoria o endoesocrina(secrezioni ghiandolari interne e esterne al corpo )
oppure puo' innescare un ciclo di riflessione mentale
( dove vengono stimolate le parti del cervello dove si attuano gli engrammi(conformazioni di neuroni stimolati)
delle percezioni a rappresentare delle percezioni ricordate e da qui, quindi ricomincia il ciclo.).
Si tratterebbe quindi di una macchina stimolo-risposta,
ma :
Cosa succede quando una persona fa un ragionamento di concetto ?
Cosa succede quando una persona giudica, fa un scelta , prende una decisione ?
Da dove deriva il cosiddetto "buon senso" ?
I concetti , sono delle "simbolizzazioni di sequenze di azioni", per esempio :
il concetto di "camminare" indica la sequenza di azioni che si fanno nel camminare e
la parola "camminare" scritta o parlata costituisce il simbolo che rappresenta le azioni del camminare .
I simboli, sono delle immagini:
che se sono immagini visive sono un grafemi nelle parti della corteccia visiva,
se sono immagini uditive sono fonemi nelle parti della corteccia uditiva,
e anche per gli altri 3 sensi vale lo stesso principio ( olfattemi , gustemi e somatemi ) .
Quindi , il linguaggio e' un insieme di simboli che consentono di spiegare una sequenza di azioni articolata
in modo anche molto complesso, cio' consente una comunicazione tra gli esseri umani molto ricca di contenuti
mantenendo una relativa facilita di attuazione, senza simbolizzazione concettuale,
il cervello riuscirebbe a fare ben poco, senza concetti non si riesce a rappresentare nella memoria una azione,
quindi non si riesce a rappresentare il dinamismo della vita,
solo con la simbolizzazione degli oggetti statici (nomi di cose),
non si riesce a descrivere le relazioni tra le cose, che sono lo scorrere della vita .
Pertanto, fare un ragionamento di concetto, implica di eseguire l'immaginazione delle sequenze di azioni dei
concetti (solitamente simbolizzati in parole) in una combinazione che (in una persona non malata psichicamente)
il piu' delle volte e' diversa, a causa delle diverse condizioni ambientali dello stimolo iniziale o del fatto che
si ricorda di avere gia eseguito il ragionamento e vi e' gia una soluzione pronta per quella situazione .
Giudicare, fare una scelta, prendere una decisione, sono il frutto di un ragionamento, come esposto pocanzi
e anche Il buon senso e' anchesso il frutto di un ragionamento concettuale .
SIMULAZIONE DELLA MENTE UMANA
La mente umana e' teoricamente simulabile,
credo anche che i ricercatori sappiano come simulare il funzionamento cerebrale per riprodurre
la mente umana, il problema e' che e' impossibile realizzare in pratica se non si realizza come sistema di
input e output un corpo equivalente al corpo umano naturale,
vale a dire che alla fine ci ritroveremmo a ricostruire un essere umano tale e quale a quelli gia esistenti
e fatti da madre natura (ammesso di esserne capaci (ora no di certo)).
Cio' e' dovuto al fatto che per capire cio' che capisce l'essere umano,
si deve possedere il patrimonio di percezioni archiviato e concettualizzato che si ottiene mediante i 5 sensi
e bisogna anche avere il corpo umano perche bisogna potere anche reagire come
reagisce l'essere umano all'ambiente,
in modo da potere costruire degli episodi relazionali con l'ambiente che sono quelli che comunemente hanno vissuto
gli esseri umani in virtu proprio della forma del loro corpo .
Per esempio :
Per capire cosa sia il peso bisogna avere una mano per potere prendere in mano l'oggetto e sentire la pressione sulla
mano dovuta al peso dell'oggetto, bisogna avere dei piedi per sentire il peso del proprio corpo quando si cammina, ecc.
Per capire cosa si intenda quando si parla di sessualita bisogna avere degli organi sessuali e averli usati almeno
una volta, sappiamo tutti molto bene, che un bambino di 3 anni probabilmente non ha ancora usato i suoi genitali
in modo maturo come un adulto e quindi non capisce pienamente cosa diciamo se gli parliamo di un rapporto sessuale,
tant' e' che, non a caso l'educazione sessuale nelle scuole viene fatta tendenzialmente in eta' puberale .
Lo stesso vale per gli altri sensi, nel caso dell'udito, avendo a disposizione i microfoni,
si puo' simulare abbastanza fedelmente la percezione uditiva, tant'e' che i ricercatori sono riusciti a riprodurre
(dopo decenni di lavoro e quando i computer hanno raggiunto una sufficiente potenza) la percezione uditiva delle parole
della lingua naturale, ma non la comprensione delle parole, perche', se il software riesce a
estrapolare dal suono percepito la parola "peso", manca il resto del complesso di simbolizzazioni che porta a reagire
coerentemente al significato di "Peso" e che viene dato dal fatto di avere un corpo umano che consente di percepire
il peso ed apprendere cosa si fa nei confronti del peso .
Per quanto riguarda la vista vale lo stesso discorso che per l'udito, grazie alle telecamere, abbiamo una simulazione
degli occhi abbastanza significativa, ma la maggiore complicatezza delle elaborazioni della corteccia visiva
e la maggiore complessita della informazione visiva, hanno fatto si che i ricercatori non siano ancora oggi riusciti
a dare una sufficiente capacita di comprensione delle immagini al software perche si possano fare cose come la guida
di autoveicoli, la conduzione degli spostamenti e delle azioni di un robot, ecc.
PIACERE E DOLORE, LE BASI DEL BENE
E DEL MALE
Il giudizio del bene e del male , si costruisce nell'essere umano partendo dal corpo umano
e dalla percezione del piacere e del dolore.
Il piacere e il dolore sono le basi del giudizio della mente umana ed il corpo e' il regista della vita.
Il bambino vuole toccare tutto , tutto quello che c'e' da toccare e' un piacere, quindi tutto e' bene,
fino a quando tocca la pentola e si scotta un dito, ecco il dolore, quindi non tutto e' bene,
toccare le pentole e' male, quindi per un certo periodo il bambino non tocchera' le pentole in assoluto,
fino a quando imparera'che non sempre scottano,
ma solo quando sono sul fuoco o vi sono state tolte da poco (una discriminante contestuale) .
La fame e' una forma di dolore, il bambino affamato piange , quando viene sfamato prova piacere,
tutto cio' che indica la possibilita di sfamare e' piacere ,
ma se mangiamo qualcosa di avariato che fa star male, allora quel cibo e' "male".
Cosi' , di esperienza in esperienza impariamo a giudicare il bene ed il male,
per il vissuto psicologico relazionale vale la stessa cosa , i comportamenti buoni e cattivi sono
tali in virtu di quanto sono funzionali ai soddisfacimenti del cosiddetti "bisogni primari (bisogni corporali)",
sia pure con delle complesse "sublimazioni" psicologiche .
Nota:
Il dolore :
parte dalle cellule del corpo che producono determinate sostanze che eccitano le fibre nervose
dolorifiche disseminate in tutto il corpo .
Il piacere :
e' prodotto di default dal cervello per ogni percezione,
vale a dire che tutto e' piacere fino a che non ne viene affermato il contrario .
Questo spiega perche i bambini sani sono interessati a tutto e tutto e' tendenzialmente bello ,
fino a quando si fanno male o hanno un diverbio, ove possono passare in un attimo da un umore gaio,
ad un umore disperato, i bambini hanno grandi sbalzi di umore ed e' normale .
Mentre gli adulti tendono sempre di piu' a vedere i pericoli dappertutto, in quanto le molte esperienze
tendono a produrre copie delle associazioni che legano le relazioni tra le cose in modo da ricondurre
tutto alle grandi tematiche causali della vita umana .
L'adulto quindi ha un umore piu' stabile, perche' tutte le possibili forme di percezione che puo' avere
sono state associate pressoche totalmente a delle risposte preparate e relazionate all'insieme dei
contenuti della psiche .
I CONTENUTI DEL
MONDO UMANO E I CONTENUTI DEL MONDO INFORMATICO
I contenuti del mondo umano sono di una quantita e complessita
per cui non credo si possa fare ad oggi un computer in grado di contenerli.
Il cervello umano contiene centinaia di miliardi di neuroni ed ogni neurone puo' produrre ramificazioni verso altri
neuroni su cui si formano milioni di sinapsi per ogni neurone .
Piu' che la velocita di elaborazione, e' la quantita di informazioni (e risposte ambientali preparate)
che puo contenere che e' enorme, inoltre il cervello, lavora in modo piu' parallelo che seriale,
quindi la grande quantita di neuroni fa si che risulti una enorme
potenza (anzi piu' che potenza direi efficienza) di calcolo .
Fortunatamente, il mondo informatico (pure essendo vasto e complesso) , se paragonato al mondo umano,
risulta un piccolo mondo, i "concetti" del mondo informatico direi che possono stare
in un comune personal computer .
Pertanto le situazioni contestuali che si possono venire a verificare nei dati che circolano nei computer,
pure essendo potenzialmente infinite, penso che in pratica siano inferiori a 10 miliardi,
ma se poi consideriamo le situazioni contestuali che piu' frequentemente si vengono a creare,
credo che si stia in qualche milione di contesti .
Questo vuol dire che se scriviamo qualche milione di modelli di contesto copriamo la maggior parte di situazioni
contestuali che si vengono a creare nella conformazione dei dati dei processi elaborativi dei programmi
piu' usati (gestione contabilita, gestione dati aziendali, gestione anagrafiche, acquisti, vendite, ecc.) .
Chiaramente questo non puo' essere fatto da una persona sola, si rende necessario creare,
un linguaggio di programmazione che formalizzi la modalita di creazione dei modelli di contesto e dia gli strumenti
di esecuzione delle elaborazioni, in modo che un numero libero di programmatori possa dedicarsi all'uso di questo
linguaggio e aggiungere i propri modelli di contesto ad una banca (standard) comune dei modelli,
inoltre e' importante che i simboli che rappresentano gli elementi dei modelli di contesto (che sono i dati),
siano costituiti coerentemente rispetto al loro ruolo
e nominati coerentemente rispetto al linguaggio naturale di riferimento e che non vi siano ridondanze.
In questo modo si crea un mondo di modelli di contesto che rappresentano una esperienza precostituita
immagazzinata in formato informatico e che riguarda le azioni nel mondo informatico e che possono essere
applicate con proprieta di autodeterminazione procedurale .
Diciamo che si viene a costituire una cultura informatica informatizzata,
come se ci fosse un programmatore bravo e competente a disposizione di tutti incorporato in proconte .
Naturalmente , resta la liberta di ampliare continuamente considerando situazioni nuove con esigenze nuove,
basta aggiungere degli elementi al contesto che qualificano una situazione diversa e proconte dovra'
trovare il modello di contesto corrispondente che sara' fatto dal programmatore che vuole gestire questa
nuova situazione in modo appropriato .
L'INTERFACCIA DI PROCONTE
L'interfaccia di proconte e' basata su di un form principale "FormMain" ed un numero infinito di
finestre creabili "DialCustom" .
Per creare le interfacce utente, si deve solamente introdurre nel modello di contesto che verra' eseguito, degli RLTP
di tipo CTRLS e compilare i loro parametri, poi una volta creata la finestra , a run time,
cliccando su un apposito bottone si abilita la modalita di customizzazione
dell'interfaccia, dove, col mouse e' possibile modificare le dimensioni e la posizione dei
CTRLS sulla finestra (programmazione visuale). Dobbiamo dire che in ProConte,
l'interfaccia utente e' meno importante che in un tradizionale programma windows, in
quanto, ci si aspetta di fare programmi piu' "intelligenti", vale a dire che
verranno preparate molte risposte specifiche a situazioni corrispondenti, cio' comporta
che e' meno necessario fare delle grandi finestre con molti CTRLS in modo da tenere sotto
controllo in una sola videata molti parametri, in quanto si tende ad avere varie finestre
con una parte dei parametri, cio' consente una maggiore riutilizzabilita delle finestre in
programmi ed applicazioni diverse, non dimentichiamoci che ProConte vuole essere un
linguaggio di programmazione dove quando si programma si produce un pezzo di un enorme
unico e collettivo programma standard . Attualmente, le possibilita di controllare
l'interfaccia utente sono piuttosto limitate, non si puo' certo pensare di fare le cose
piu' strane e particolari che si possono fare programmando in Visual basic, C C++, Java,
C#, ecc., ma in ProConte queste cose ci interessano poco , forse in futuro ProConte sara'
migliorato in queste funzionalita, ma allo stato attuale , la cosa piu' importante e'
sviluppare un comportamento realmente piu' "intelligente" dei programmi,
ProConte e' un linguaggio pionieristico nella ricerca sulla intelligenza artificiale,
questa e' la sua missione principale .
PERCHE' USARE PROCONTE
Proconte e' programmazione contestuale, assomiglia al funzionamento dei cervelli biologici,
ma non contiene tutte le caratteristiche di questi :
) Non contiene il meccanismo del piacere-dolore, perche' proconte non ha un corpo umano,
( si potrebbe simulare il dolore in qualche modo, ma produrrebbe degli apprendimenti legati a
cosa reagisce determinando piacere-dolore, quindi si creerebbe un mondo di comprensione e giudizio nuovo e
differente da quello umano, quindi non ci sarebbe una comprensione tra i due mondi e questo nuovo
mondo risulterebbe inutile per fare qualsiasi cosa nel mondo umano (e di difficile comprensione per gli esseri umani)).
) Non contiene il meccanismo di promozione degli apprendimenti per tentativi ed errori,
(non puo' farlo se non con uno strumento di giudizio la cui base parte dal meccanismo del piacere-dolore) .
) Non contiene il meccanismo della approssimazione (potrebbe essere facilmente introdotto ma non lo facciamo),
perche' per ora ci limitiamo a fare dei software "esatti" come nella programmazione tradizionale,
la creazione di software che tentano una risposta quando non sono certi di dare la risposta esatta,
implica la introduzione di un meccanismo per giudicare se la risposta data va bene o no,
quindi ritorniamo nuovamente al bisogni di uno strumento giudicante e quindi serve sempre il
piacere-dolore, un corpo umano e un lunghissimo e complessissimo processo apprendimento
come quello degli esseri umani .
inoltre, proconte, non e'un tentativo di simulare la mente umana, ma e' un linguaggio di programmazione per
produrre software che all'utente finale risulta equivalente ad un normale programma windows .
Uno degli scopi importanti di proconte e' quello di ridurre i tempi (costi) di programmazione mediante
la sua proprieta di autodeterminazione nel riutilizzare il codice gia scritto,
il fatto che si trovi da se' il modello di contesto mediante il quale eseguire il CB che contiene
la funzione giusta, implica che il programmatore non deve conoscere una libreria di milioni di modelli di contesto
e di 10.000 funzioni (quale potrebbe diventare il numero dei CB di proconte).
Molto spesso i programmatori dei linguaggi tradizionali,
preferiscono scrivere di nuovo una funzione (se non e' troppo impegnativa),
perche perderebbero piu' tempo a trovarla dalla cozzaglia di librerie che ci sono
e poi magari una volta trovata ci si accorge che per un dettaglio
non puo' essere usata o deve essere modificata .
Un'altro scopo di proconte e' quello di aumentare la affidabilita,
il programmatore proconte non tocca il contenuto delle variabili,
ma impartisce solo esecuzioni dei CB mediante la definizione dei modelli ,
la quale ha delle caratteristiche molto simili al modo di ragionare umano (per contesti),
molto familiare al modo di ricordare e prendere decisioni e agire umano .
Non e' necessario essere programmatori "C" o altri linguaggi tradizionali per diventare dei programmatori
proconte (tranne se si vogliono fare i CB),
la struttura del linguaggio non e' come quella di un linguaggio come il "C","BASIC", "JAVA" ecc .
I DATI DI PROCONTE
Un dato del ProConte, e' un "Ruolo-Tipo", vale a dire che e' contraddistinto :
sia dal tipo binario (int,long,double, string, ecc.),
sia dal ruolo che rappresenta il dato nel programma
(Se una stringa e' il campo "nome" di un record di anagrafica,
il ruolo e' il fatto che quella stringa e' il campo "nome" ) .
Internamente ProConte rappresenta il dato in questo modo:
struct RLTP // (RuoloTipo)
{
unsigned long RLTP ; // Ruolo
unsigned short TipoBin;
int DimAry; // Numero di elementi nell'array "p" .
void *p ; // Memoria fisica della variabile .
Array Categorie;
};
Quindi ogni variabile di proconte e' una struct "RLTP"
In questo modo, il programma (a run-time) puo' controllare non solo il contenuto della variabile,
ma anche "che cosa sia" quella variabile .
Se al programma arriva una stringa che e' il campo "nome" di un record, dovra' fare qualcosa di diverso rispetto
a quando arriva una stringa che contiene il campo "cognome" o altro .
Questa si potrebbe definire come una forma di "coscienza" del programma,
in virtu' della quale si possono mettere in atto dei processi decisionali autonomi
di livello superiore a quanto si puo fare con la programmazione tradizionale .
I MODELLI DI CONTESTO
I cervelli biologici, funzionano in questo modo ;
Fasi :
1) Gli organi di senso producono un insieme di percezioni, che costituiscono il "contesto percettorio" del momento .
2) Il contesto percettorio scatena una reazione motoria o chimica(endocrina o/e esocrina) del corpo,
mutando l'ambiente esterno e/o del corpo .
3) Riprende dal punto 1 .
Similmente ProConte ;
Fasi;
1) Riceve un contesto dati che rappresenta il contesto percettorio .
2) Risponde con l'esecuzione di una procedura definita per quel contesto dati che modifica il contesto dati stesso .
3) Riprende dal punto 1 .
Per fare cio', i programmatori ProConte, devono creare dei "modelli di contesto" in cui viene definita la conformazione
dei dati che deve avere il contesto dati per richiamare il modello di contesto in cui e' definita anche la azione che si deve compiere .
Quindi ProConte mette a disposizione gli strumenti per creare e gestire i modelli di contesto che sono di due tipi :
1) Modelli di contesto cognitivi :
dal modello cognitivo, e' possibile eseguire la modifica del contesto corrente aggiungendo o togliendo dati,
ed e' possibile stabilire una sequenza di esecuzione forzata di altri modelli , in modo da eseguire un sequenza
di operazioni sul contesto dati (similmente alla tradizionale programmazione) .
2) Modelli di contesto di interfaccia :
Sono i modelli che lavorano realmente sui dati,
si basano su dei "contesti base" (che sono come delle funzioni C) e
devono essere preparati associando i dati del contesto ai parametri dei contesti base,
in modo che siano passati al contesto base il quale vi applica le sue operazioni .
LA NON STRUTTURAZIONE DEI DATI
I dati in ProConte, non sono strutturabili, non si possono fare classi o struct,
esistono solo i tipi di dati stabiliti in ProConte che sono :
BIN_null
BIN_bool
BIN_char
BIN_uchar
BIN_short
BIN_ushort
BIN_int
BIN_uint
BIN_long
BIN_ulong
BIN_float
BIN_double
BIN_string
BIN_Static
BIN_Edit
BIN_Button
BIN_ListBox
BIN_Combo
BIN_Categoria
BIN_FILE
BIN_DataOra
BIN_RichEdit
BIN_IDModCtx
BIN_pDialCustom
BIN_CheckListBox
BIN_ScrollBar
BIN_SliderCtrl
Con questi tipi di dati si deve fare tutto,
avrete notato che vi sono dei tipi come BIN_Edit e BIN_Button che sono dei Controls,
effettivamente , in ProConte i Controls sono dei dati e fanno parte del contesto dati.
La non strutturazione dei dati consente di riutilizzare meglio le funzioni scritte ,
come i programmatori sanno, la programmazione con strutture dati richiede di riscrivere molte volte delle funzioni
che sostanzialmente fanno la stessa cosa, come per esempio le funzioni di ordinamento .
Per esempio: Se dobbiamo ordinare un array di strutture dati "Point"
class Point
{
double x;
double y;
double z;
};
e dobbiamo ordinare tutti i punti dalla x min alla x max,
dobbiamo fare una funzione che prende in input l'array di "Point" e faccia l'ordinamento sulla x :
void OrdinaPoints_Su_X( Point *Array)
{
// Ciclo per l'ordinamento .
int i, i2;
while( ... )
{
// ...
// ...
if( Array[i].x < Array[i2].x )
{
// Swap
// ...
}
// ...
// ...
}
}
Ho trascurato di scrivere la reale funzione di ordinamento per evitare di mettere molto codice che svierebbe
l'attenzione dalla unica cosa che interessa, che e' quella di notare la riga
"if( Array[i].x < Array[i2].x )"
che ci fa vedere come ci si ritrovi costretti a creare una funzione che fa sempre il solito ordinamento,
ma utilizzando il dato membro "x" della classe "Point" .
Il C++ consente di creare i "template" che possono aiutare a riutilizzare il codice,
ma anche nel template rimane il problema di mantenere il nome del dato membro uguale e
questo non e' sempre possibile, vale a dire che (senza andare tanto lontano) se invece di volere ordinare sulla x si vuole ordinare sulla y,
ecco che si deve gia fare un'altra funzione ( "void OrdinaPoints_Su_Y( Point *Array)" )
che usi internamente il dato membro y invece che x .
Quindi, con la programmazione tradizionale ci si ritrova a scrivere molto spesso delle funzioni che
in via di principio fanno delle cose che sono gia state fatte per qualche altra applicazione,
invece gli esseri umani, quando hanno imparato un concetto, un principio di elaborazione, lo sanno
applicare a qualsiasi ambito senza essere riprogrammati, cosa da alla mente umana questa possibilita ?
Direi che almeno una delle cose che contano molto e' il fatto che i tipi di dati nel cervello sono pochi,
e sono i famosi 5 sensi :
1) Percezioni visive
2) Percezioni auditive
3) Percezioni somatosensoriali (tatto, ecc.)
4) Percezioni olfattive
5) Percezioni gustative
quindi i tipi di dati sarebbero solo 5,
(escludendo le informazioni gestite dai meccanismi automatici, come i riflessi spinali, oculari, endocrini, ecc. ,
che pero' non ci interessano in ProConte ),
pertanto la limitazione della riutilizzabilita degli algoritmi e' derivata
dalle sole differenze di formato dei 5 sensi,
( inoltre, gli engrammi dei 5 sensi, vengono convertiti in engrammi di integrazione sensoriale nella area cerebrale di wernike,
e vengono anche convertiti poi in engrammi per i lobi pre-frontali) .
Per capire un po' meglio la cosa, facciamo un esempio :
) Esempio di Algoritmo visivo :
Il bambino (che ha avuto l'esperienza di scottarsi con la pentola) vede la pentola sul
fornello, quindi i dati in input sono l'immagine della pentola sul fornello,
a cui il cervello reagisce col comando di non toccare la pentola .
in codice C avremo :
if( Immagine == ImmaginePentolaSulFornello )
{
Non_toccare_la_pentola();
}
Ora !
Essendo uguale il tipo di dato (immagine con immagine), il confronto puo' essere fatto,
per semplificare ;
supponiamo che il cervello faccia un semplice controllo per punti di colore delle immagini
e se i punti di colore sono uguali (magari con una tolleranza)
l'immagine coincide con quella archiviata nella esperienza della scottatura
e quindi richiama la reazione apposita che e' la funzione "Non_toccare_la_pentola();"
che costituisce il passo finale dell'algoritmo .
Nota: ( Il cervello fa un controllo molto piu' complesso, ma l'esempio e' necessariamente semplificato ) .
A questo punto, dobbiamo dire che,
se al momento della scottatura, la pentola non faceva alcun rumore e non emetteva alcun odore o vibrazioni,
l'unica percezione era quella visiva, quindi solo la visione della pentola puo' scatenare la reazione stabilita,
se vogliamo che anche il rumore della pentola che bolle, o odore di qualcosa che cuoce,
faccia reagire con la funzione "Non_toccare_la_pentola();"
dovranno essere ripetute delle esperienze che consentano di associare
il fatto che il rumore di qualcosa che bolle , o l'odore di qualcosa che cuoce,
implica che questo qualcosa scotta,
oppure il cervello deve operare quella che chiamiamo "riflessione" o "pensare",
che consente di attribuire le associazioni che si hanno per una percezione ad un'altra percezione,
questo puo' avvenire mediante il fenomeno dell' "incrocio delle associazioni",
il quale consiste nel fatto che se per esempio,
l'individuo ha avuto l'esperienza di scottarsi con una caffettiera mentre o dopo che questa fece
il rumore di ebollizione, quando l'individuo sente il rumore di ebollizione (simile) provenire dalla pentola,
ritiene che anch'essa puo' scottare, in quanto produce lo stesso rumore di ebollizione,
si crea quindi una copia delle associazioni anche per altri sensi,
da quel momento in avanti, se l'individuo vede una vaporiera e sente il rumore di ebollizione,
capisce che la vaporiera scotta e copia l'associazione per la visione della vaporiera e quando vedra' la
vaporiera anche senza sentire alcun rumore sospettera' che questa possa scottare .
Abbiamo quindi il fenomeno della "copia delle associazioni" .
Nota : il fenomeno della copia delle associazioni non e' implementato in Proconte perche per stabilire
se una associazione deve essere copiata ci vuole uno strumento giudicante
che richiede sempre il meccanismo del piacere-dolore (vedi il capitolo sul piacere-dolore).
Pertanto, in proconte, dobbiamo escludere la possibilita di copiare le associazioni,
ma tra l'altro quella della copia delle associazioni non e' comunque la risoluzione del problema,
perche' comunque il cervello umano ha dovuto comunque "programmare" al momento della copia della
associazione e quindi, anche nel cervello umano la diversita del formato dei dati costituisce
una non compatibilita tra i dati .
un dato di tipo visio, non e' confrontabile ne (sommabile,sottraibile,moltiplicabile,divisibile, mescolabile, ecc.)
con un dato di tipo audio o altro, ma e' solo associabile .
Per la riutilizzabilita' degli algoritmi, meno vi sono tipi di dati meglio e' .
Quindi , in proconte, per ogni tipo di dato e combinazione di tipi di dati, devono essere creati degli algoritmi appositi,
(tranne i casi dove la conversione automatica e' possibile, come per esempio,
si puo' creare una funzione che trova il max valore di un array di double e ritorna un double come risultato,
in questo caso il double dato puo' essere assegnato anche ad un int se la perdita del frazionale non interessa) .
LA AUTODETERMINAZIONE DEI PROCESSI
In ProConte si rende possibile la autodeterminazione dei processi in modo superiore
a quanto possibile con la programmazione tradizionale,
in quanto, l'analisi contestuale produce la spontanea capacita di individuare quando si e'
verificata la condizione per eseguire un determinato processo,
in virtu' del fatto che la forma che assume il contesto dati corrente, viene esaminata da
ProConte e se trova un modello di contesto coincidente lo esegue dando modo
alle procedure di quel modello di essere eseguite .
Nella programmazione tradizionale, quando c'e' bisogno di controllare il verificarsi di una situazione per decidere cosa fare,
solitamente viene usata una variabile di cui si controlla il contenuto binario per stabilire quale sia la situazione verificatasi,
teoricamente con questa possibilita si puo' fare tutto (infatti l'interprete di proconte e' fatto in C++),
il problema e' che ogni programma creato in questo modo deve presupporre
che sia stato creato per controllare certe variabili il cui contenuto binario significa una certa cosa,
e' proprio nella stesura del codice ( che poi deve essere fissato
(compilato o comunque salvato il sorgente in modo che venga eseguito dai vari interpreti come il basic o altri) nel programma ),
che si determina cio', quindi un programma puo' fare solo relativamente pochi controlli contestuali predeterminati,
se dovesse sorgere la necessita di usare un altro programma per fare un'altra cosa,
chi decide quale programma usare e come fa ad andare a prenderlo, passargli i dati e utilizzare il risultato ?
Proconte contiene tutti i programmi, e' una enciclopedia di subprogrammi altamente ricombinabili .
Quando bisogna decidere quale subprogramma utilizzare,
lo si deve potere fare conoscendo il contesto che si e' venuto a creare attualmente,
ci sono molti modi per potere fare questo,
in proconte e' stato scelto di identificare il "ruolo" di ogni variabile presente nel contesto dati attuale,
e usare questo ruolo per rappresentare il contesto dati nel proconte
e rendere quindi possibile la sua conoscenza a proconte .
( internamente la definizione dei ruoli e' rappresentata comunque con dei codici binari ovviamente,
visto che in un computer si puo' solo fare quello, ma in superficie,
vale a dire, per il programmatore proconte, i "ruoli" vengono nominati con delle definizioni testuali che
sono equivalenti al linguaggio naturale umano e che rappresentano le cose concrete che sono oggetto di
elaborazione da parte del programma.)
Possiamo dire che proconte non e' altro che un modo particolare di fare dei programmi ,
che risulta molto pratico per fare programmi che si possono assemblare automaticamente
con programmi fatti da altri, autocomponendosi in modo congruo
e con la capacita di andare a prendere i dati correttamente
e mandarli correttamente ai processi successivi .
Per applicare questo modo particolare di fare i programmi , servono degli strumenti che facilitino il lavoro
in modo che non si faccia troppa fatica a programmare in questo modo e che costringano il programmatore a
procedere nel modo stabilito , questi strumenti sono i vari strumenti che troviamo nell'interprete di proconte ,
a disposizione dei programmatori proconte .
Inoltre quando i programmi proconte vengono eseguiti,
la computazione che serve per eseguire le analisi contestuali e' molto intensiva e servono strumenti
preparati a priori per eseguire cio' nel modo piu' efficiente possibile e questi strumenti sono
anch'essi presenti in proconte .
Pertanto, quando parliamo di autodeterminazione dei processi,
intendiamo che il susseguirsi dei "contesto dati", determina cosa dovra' essere fatto nella fase successiva,
vale a dire che :
1) il contesto dati attuale determina come e quali dati dovranno essere elaborati,
2) Il prodotto della elaborazione verra' posto nel contesto dati attuale modificandolo,
3) riprende dal punto 1)
( Questo e' cio' che fa' il cervello degli animali (uomo compreso) ) .
La modifica del contesto dati puo' avvenire in due modi :
1) I dati vengono modificati nel loro contenuto binario .
2) Vengono aggiunti o sottratti dei dati dal contesto
( a seguito del fatto che sono il prodotto di elaborazioni precedenti
o che sopraggiungono da eventi avvenuti in qualche periferica del computer.
).
In proconte esiste una implementazione del contesto dati, vale a dire che, esiste un contenitore (array),
che contiene i dati (ruolotipi) che e' il "contesto dati" corrente .
Quando un processo alla fine del suo lavoro aggiunge o sottrae dati dal contesto,
implica che vengono aggiunti o sottratti dati al contesto corrente di proconte,
quindi proconte esegue un ciclo di controllo contestuale successivo,
ove cerca il modello di contesto che corrisponde al nuovo contesto dati formatosi,
se lo trova lo esegue e poi ricomincia un altro ciclo,
altrimenti va in errore e il programmatore proconte dovra' creare un modello di contesto che corrisponda
al contesto dati e che faccia cio' che in quel contesto dati deve essere fatto .
Quando invece i dati vengono modificati nel loro contenuto binario,
in proconte, quando si definiscono i modelli di contesto, per ogni ruolotipo e' possibile indicare se
deve essere considerato il suo contenuto binario e al momento dell'inserimento del ruolotipo nel modello
viene aperta una finestra ove si deve inserire il valore binario di confronto .
Tipicamente nei programmi tradizionali, ci troviamo a creare una elaborazione con un sottoprogramma,
poi il risultato di questa elaborazione viene passato ad un'altro sottoprogramma,
magari si controllano alcuni contenuti binari del risultato
e cio' determina una scelta per quale sottoprogramma utilizzare .
Quindi, possiamo dire che tra i due sottoprogrammi vi e' stato un cambiamento contestuale,
vale a dire che da una certa situazione di dati di partenza ci si e' trovati ad una successiva situazione dove
i dati sono cambiati o aumentati, passando dai dati iniziali ai dati iniziali piu' il risultato della prima elaborazione,
quindi il contesto dati si e' fatto piu' complesso,
ora, nel programma tradizionale cio' e' previsto dal programmatore, il quale ha predisposto che subito dopo
venisse controllato il risultato e passato al secondo sottoprogramma,
mentre in proconte, alla fine della esecuzione del primo sottoprogramma, il risultato viene messo nel contesto corrente,
poi proconte analizza il contesto e cerca il modello di contesto corrispondente,
se lo trova, esegue il modello di contesto , il quale se preparato correttamente eseguira' il secondo sottoprogramma .
Questa e' une delle caratteristiche piu' importanti di proconte, puo' sembrare una piccola differenza,
ma e' una differenza che apre la programmazione di proconte a potenzialita di autodeterminazione notevoli
ed e' quello che fanno i cervelli biologici degli animali .
Nella programmazione in ProConte, e molto importante nominare coerentemente gli ID dei ruoli,
devono essere il piu' possibile coerenti con le definizioni del linguaggio naturale,
in un certo senso, programmare in ProConte e' anche una operazione culturale,
perche sia i ruoli che i modelli definiscono un rapporto tra la loro definizione e quello che fanno
e se non vi e' coerenza tra le due cose , si produce una programmazione aberrante, difficilmente
comprensibile e non autodeterminante ( per auto determinante si intende che non capita che
si trovino dei modelli di contesto preparati in precedenza che coincidano col contesto corrente
producendo una esecuzione opportuna ).
IL DATABASE
I database tradizionali sono formati da tabelle e records,
vale a dire che i dati sono associati in modo fisico in un contenitore che e' il record,
poi i records sono associati nel contenitore che e' la tabella,
poi le tabelle sono associate nel contenitore che e' file del database .
Abbiamo quindi un sistema di contenitori a 3 livelli dove per trovare il dato che serve bisogna
conoscere il file di data base, la tabella , il campo del record
e quindi eseguire la "query" con eventuali valori da confrontare con qualche
campo (in "SQL" e' la clausola "WHERE") .
Cio' costituisce una strutturazione dei dati, il fatto di essere contenuti in un file, una tabella ed un record,
implica che per essere trovati bisogna conoscere queste tre cose .
Il database di proconte invece non e' strutturato, vale a dire che i dati non sono associati in determinati contenitori,
ma si basa sul fatto che i ruolotipi possono appartenere a delle categorie
e se ad un ruolotipo assegniamo che appartiene ad una categoria, nelle operazioni di salvataggio nel database,
proconte archivia nel suo sistema il puntamento a quel dato mediante quella determinata categoria,
vale a dire che conoscendo la categoria ci si puo' far dare dal database tutti i ruolotipi (dati) che vi appartengono .
Inoltre le categorie si possono incrociare, vale a dire che se diamo piu' di una categoria nella funzione di ricerca,
dal database avremo i dati che sono stati assegnati a tutte le categorie indicate,
praticamente e' un po' come i motori di ricerca per internet, piu' si introducono parole, piu' si restringe
la possibilita di trovare i dati ad una combinazione specifica .
CONFRONTO CON LA PROGRAMMAZIONE TRADIZIONALE
Esempio 1)
Supponiamo di dovere fare un semplice programma dove si richiede di sommare due numeri e produrre un risultato .
In un linguaggio tradizionale come il 'C' scriveremo il seguente codice :
inizio codice "C"
int Calcola()
{
int a = 40;
int b = 60;
int c;
return c = a + b ;
}
fine codice "C"
Bene! Abbiamo fatto il nostro semplice programmino molto in fretta e facilmente !
Ma, cosa abbiamo fatto ?
Che senso ha questa addizione ?
Che cosa abbiamo addizionato ?
Cosa c'entra con la funzione del computer che fa questa addizione nella nostra vita reale umana ?
Direi piuttosto poco, questa addizione e' stata attuata in un ambiente di astrazione matematica dove
l'origine dei dati e la destinazione del prodotto della addizione non esistono .
Pertanto, per rendere utile questo programma dobbiamo collegarlo alla nostra vita reale
e questo lavoro viene fatto dal programmatore C (o basic, java o altro),
e' il programmatore a stabilire il ruolo rappresentato da 'a' e da 'b' e da 'c',
partiamo un po' prima e arriviamo un po' dopo alla fase della creazione ed esecuzione del programma :
per esempio :
ci troviamo in una azienda che produce pane e il titolare incarica il programmatore di fare un programma che
calcoli quanto viene a pesare l'impasto che ogni giorno si produce.
Il programmatore in questo caso deve svolgere un po' di compiti sia prima di iniziare il programma che dopo averlo realizzato ;
innanzitutto sa' che le variabili del programma rappresentano determinate cose, quindi rifacciamo il programma
nominando le variabili con nomi piu' significativi .
inizio codice "C"
int CalcolaPesoImpasto()
{
int ChilogrammiDiFarina = 40;
int ChilogrammiDiAcqua = 60;
int PesoDelImpasto ;
return PesoDelImpasto = ChilogrammiDiFarina + ChilogrammiDiAcqua ;
}
fine codice "C"
Ora leggendo questo codice si capisce molto meglio che cosa faccia questo programma per il nostro mondo reale,
il programmatore ha dovuto preparare i dati tenendo conto di molti fattori ambientali:
) il fatto che e' arrivato il titolare della azienda richiedendo di fare questo calcolo
) andare ad informarsi sui valori da assegnare agli operandi della addizione,
probabilmente per l'acqua gli hanno dato i litri ed ha dovuto fare la conversione
in kg (che per l'acqua corrisponde al rapporto 1 a 1) .
) infine il programmatore deve andare dal titolare a consegnare il risultato .
Il programma non sa alcunche' di tutto cio', anche se abbiamo nominato con nomi significativi le variabili del programma,
il compilatore "C" in fase di compilazione traduce il nome delle variabili in un codice (codice macchina)
che rappresenta l'indirizzo della variabile in memoria (nella memoria del Computer)
e crea una sequenza fissa di operazioni sul contenuto di queste variabili,
il fatto che abbiamo nominato la variabile "ChilogrammiDiFarina" invece che "a"
non implica alcun cambiamento nel risultato della compilazione,
"ChilogrammiDiFarina" e' solo una stringa contenuta nel codice sorgente che serve al programmatore,
qualora si dovesse rileggere il codice (o lo dovesse leggere qualche altro programmatore) per capire cosa sia quella variabile,
pertanto la gestione del "ruolo" delle variabili nel programma e' fatta dai programmatori al momento della scrittura
del codice, ma il programma non ha modo di comprendere perche e cosa stia calcolando, proprio perche non esiste una
definizione del ruolo delle variabili .
A questo punto introduciamo ProConte :
In proconte, ogni dato e' una struttura dati che contiene un po' di cose,
tra cui una variabile chiamata "RLTP" che rappresenta il ruolo della variabile
nel programma ( FARINA, ACQUA, PESO_IMPASTO, NOME, COGNOME, ecc. ),
poi abbiamo una altra variabile chiamata "TipoBin" che indica il tipo binario del dato ( int,double,string, ecc.),
poi abbiamo altre cose che sono spiegate altrove .
Questo significa che per ogni variabile, non solo il programmatore conosce il ruolo della variabile nel programma,
ma anche il programma stesso puo' "conoscere" il contenuto di "RLTP"(Ruolo) .
ProConte e' un interprete, non un compilatore,
(un compilatore compila il codice sorgente in linguaggio macchina e crea un programma *.exe o altro
che viene eseguito direttamente dal computer,
mentre l'interprete traduce il sorgente al momento della esecuzione del programma in linguaggio
macchina una istruzione alla volta)
Cio' e' piuttosto necessario in quanto essendo che i modelli di contesto sono come dei programmi,
siccome diventeranno milioni, se venissero compilati si creerebbe un eseguibile immenso .
Invece le definizioni dei modelli si trovano su file perche non ci starebbero in memoria RAM .
IMPLICAZIONI ECONOMICHE
Non si puo' certo pensare di sviluppare preventivamente tutti i modelli di contesto che servono a
istruire cospicuamente proconte, (nemmeno con un gruppo di 1000 programmatori),
inoltre anche i contesti base attualmente esistenti non possono
certo soddisfare tutte le esigenze di programmazione .
Pensare ad una associazione benefica che produca gratuitamente tutto cio che serve, e' a parer mio una scelta sbagliata,
anche ammesso di trovare i benefattori, la cosa resterebbe confinata a poche
persone incaricate di sapere e risolvere tutti i problemi di programmazione,
credo che non ce la farebbero mai .
C'e' bisogno che vi si impegnino gli addetti ai lavori ,
coloro che fanno i programmi per le aziende e per lavoro
e che di conseguenza devono guadagnarsi da vivere con il loro lavoro .
Ragione per cui, si deve affrontare il problema della retribuzione di coloro che lavorano per ampliare proconte,
pertanto, vi sono molti modi per cercare di risolvere questo problema, uno puo' essere questo :
Vi sono da fare i "modelli di contesto" e i "contesti base = CB" :
) Il RunTime di proconte e' predisposto per conteggiare quante volte viene usato un modello
e lo memorizza in un file che a fine anno viene spedito dall'utente alla societa di gestione
che stabilira' in funzione di alcuni parametri quanto spetta ai vari programmatori che hanno creato i modelli .
Naturalmente , questo implica che proconte sia venduto con un contratto di affitto o noleggio .
Presso la societa di gestione, vi sara' una tabella di corrispondenza tra il codice di un modello o CB
e la anagrafica del programmatore che li ha creati, in modo che la societa di gestione possa rintracciare
il programmatore da pagare,quando, a scadenza mensile (o altro) vengono fatti i controlli dei noleggi pagati.
Se per un dato programmatore vi e' un uso dei modelli o CB che questi ha creato, la societa di gestione
provvedera' ad effettuare il pagamento .
Il calcolo delle spettanze ai programmatori verra' fatto in funzione del numero di volte che un modello o CB
e' stato usato dall'utente, il calcolo potrebbe essere il seguente :
NumeroDiEsecuzioni = NumeroModelli + NumeroCBEseguiti
ValorePerOgniEsecuzione = (ImportoLicenza-Tasse) / NumeroDiEsecuzioni
// Riduzione del 30% trattenuta dalla soceta' di gestione per i diritti sul sistema e per i costi di gestione .
ValorePerOgniEsecuzione = ValorePerOgniEsecuzione * 0.7
SpettanzaAlProgrammatore_Marco_Rossi =
NumeroDiEsecuzioniAppartenentiAiModelli_o_CB_di_Marco_Rossi * ValorePerOgniEsecuzione
Questo vale per ogni licenza pagata.
Nota: I CB possono essere anche piuttosto complessi, pertanto e' giusto remunerare di piu' la esecuzione di un CB
rispetto a quella di un modello, quindi viene stabilito un moltiplicatore di esecuzioni ogni volta che viene
eseguito un CB, vale a dire che risultera' che un CB e' stato eseguito piu' volte di quanto e' stato
realmente eseguito, questo per fare in modo che poi gli venga assegnata una maggiore quantita
di "ValorePerOgniEsecuzione" e che quindi risulti remunerato maggiormente .
Il calcolo del moltiplicatore del CB (Trattandosi di codice "C"), e' il seguente :
MoltiplicatoreDiEsecuzioniDelCB = NumeroDiOperatoriNelCodiceSorgente * CostanteDiMoltiplicazione_KM_CB
Nota: il pagamento sara' effettuato quando la cifra da pagare supera i 100 euro .
Nota: Gli operatori di "NumeroDiOperatoriNelCodiceSorgente"
sono : { } [ ] ( ) : . ; # = == && & || | ! + - / * eccetera .
) Solo per i CB :
Essendo i contesti base delle funzioni "C" o altro, si puo' istruire proconte a caricarsi una DLL
preparata dal programmatore "C" che contiene i contesti base fatti,
ovviamente dovranno essere preparati anche i modelli di contesto che usano i contesti base preparati.
In questo modo si puo' costituire un rapporto privato tra programmatori e clienti ,
per esempio mettendo una chiave hardware nella DLL o una password o altro, in modo da impedire le copie
della DLL e ottenere il pagamento dal cliente per l'acquisto della DLL e dei modelli che la usano .
chiunque non abbia la possibilita di utilizzare la DLL non puo' utilizzare anche i modelli di contesto che usano
il CB contenuti nella Dll, quindi la protezione del proprio lavoro da sfruttamenti indebiti raggiunge condizioni uguali alla
attuale protezione del software .
Questo va a costituire dei mondi privati che presentano lo svantaggio di non sfruttare il lavoro degli
altri, ma se si usa questa opportunita' solo per le parti del software di elevata specializzazione e
si usano il piu' possibile per le parti piu' generiche i modelli del database comune, si puo' ottenere un redditizio compromesso.
Attualmente Proconte e' gratuito, pertanto non possono essere pagati i programmi fino a quando si iniziera' a fare pagare ProConte .
Approssimativamente, il prezzo di noleggio annuo di una licenza potra' essere di circa 10 euro per i privati e 50 euro per le aziende ,
naturalmente, il prezzo delle licenze per le Dll e' oggetto del rapporto privato tra chi ha fatto la Dll e chi
la usa e non riguarda l'economia di proconte .
10 e 50 euro sono un prezzo basso, ma dobbiamo tenere conto che un modello o un CB ,
se fatto con attenzione viene riutilizzato molto,
pertanto i guadagni sono destinati a diventare interessanti, visto che proconte e' sistema generico,
destinato a fare dalle cose piu' generiche alle piu' specialistiche .
Quando gli utenti di proconte disponibili a pagare il noleggio raggiungeranno alcune migliaia ,
si potra' dare inizio ai pagamenti, si passera' dalla versione "Free" alla versione "User",
ovviamente, saranno fatte delle piccole modifiche al formato dei files in modo da renderli incompatibili
col vecchio formato, in modo che coloro che hanno la versione "Free" potranno continuare ad usarla,
ma non sara' piu' possibile aggiornare con i files dei modelli,
in quanto gli aggiornamenti, da quel momento in avanti saranno fatti solo per la versione nuova,
e' ovviamente interesse dei programmatori fare gli aggiornamenti per la versione nuova,
altrimenti non verrebbero pagati del loro lavoro .
Infine, devo dire che quanto esposto sulla questione economica e' solo una abbozzatura che
ho dato per dare una idea di come si potrebbe gestire la remunerazione di chi lavora per
sviluppare in ProConte, non e' da escludere che al momento della messa in pratica di un
sistema di pagamenti non si possano trovare soluzioni migliori .
CHI DOVREBBE COMINCIARE A USARE
PROCONTE
Potenzialmente puo' iniziare chiunque ad usare ProConte, programmatori professionisti, studenti, appassionati, ecc. ,
ma devo dire che attualmente lo sviluppo dei CB e dei modelli di contesto e' veramente iniziale,
per cui potrebbe capitare di dovere aspettare vari giorni prima che gli sviluppatori dell'interprete di proconte
creino i CB richiesti, inoltre se i CB sono troppo specialistici, non verranno sviluppati dagli sviluppatori
di proconte, ma devono essere sviluppati dall'utente e dovra' essere spedito il sorgente in modo che sia compilato
in proconte, oppure dovra' essere fatta una DLL privata .
Se proconte avra' il successo che mi auguro, comunque passera' qualche anno prima che si possa pensare di cominciare a
fare pagare qualcosa agli utenti, pertanto i guadagni potranno essere possibili solo nel caso di creazioni di DLL private.
Ma il bello di proconte non sta nelle DLL private, quelle sono una necessita commerciale resa doverosamente disponibile,
il bello sta nelle cose standard, nel fatto che proconte diventi uno standard,
per fare cio' ci vuole il lavoro di molte persone che inizialmente lavorino gratis, con la sola speranza che un giorno
proconte abbia successo e che cominci ad essere pagato, da quel momento potranno essere pagati
gli usi dei modelli e dei CB come gia' spiegato .
E' quindi un investimento del proprio tempo e del proprio impegno (non di danaro) ad alto rischio,
che se dovesse andare bene potra' diventare una rendita forse anche molto cospicua .
IL FUTURO DELLA PROGRAMMAZIONE
A mio avviso, nel futuro, la programmazione continuera' ad essere frutto del lavoro di programmatori umani per molti anni ancora ,
proconte vuole essere un linguaggio di programmazione che renda il lavoro dei
programmatori piu' facile, piu'riutilizzabile , piu'unificato, piu'affidabile, piu' efficiente, piu' autodeterminante, ecc.
Quindi un linguaggio di programmazione piu' evoluto, un passo in avanti nella tecnologia della programmazione
per computers, almeno questo e' il mio intento .
Ma anche in proconte i programmi vengono fatti da degli esseri umani
e il potenziale cognitivo accumulabile in proconte (come spiegato nei capitoli precedenti),
non contiene le funzioni "giudicanti" ed "approssimanti" ,
senza queste funzioni non possiamo aspettarci che proconte acquisisca la capacita
di diventare un programmatore paragonabile ad un programmatore umano .
Dopotutto, le macchine non devono necessariamente diventare "umanoidi",
ne possiamo fare anche a meno, perche' come ho gia' detto,
per costruire una macchina con capacita umane, dovremmo dotarla di un corpo equivalente al corpo umano,
il che vorrebbe dire ritrovarsi a fare cio' che esiste gia' .
Simulare le funzioni umane e' sempre un esercizio scientifico interessante, perche' puo' servire a sviluppare
macchine che eseguano in parte le funzioni umane , che poi possono venire applicate in macchine che svolgono
compiti che gli esseri umani non vogliono o non possono svolgere per vari motivi.
Quindi, riuscire a copiare le "tecnologie" che la natura ha sviluppato nel cervello umano perche' svolga
le sue fantastiche funzioni di cui siamo tanto ammirati e' evidentemente utile ,
ma il fine finisce per essere ragionevolmente quello di dotare l'uomo di migliori strumenti per la sua vita
e non quello di creare una alternativa all'uomo,
come gia' detto, gli intenti e le volonta dell'uomo, sono causati dai bisogni del suo corpo,
pertanto, tutto cio' che l'uomo puo' voler creare e' qualcosa che sia strumentale ai suoi bisogni e non oltre,
anche se la semplice curiosita
(anchessa un bisogno del corpo (in particolare si tratta di una conseguenza funzionale del cervello) )
potrebbe portare anche a desiderare di tutto .
Bisogna comunque dire che si potrebbe arrivare a fare una macchina con facolta
cognitive anche superiori all'essere umano,
in tal caso, (rischi a parte) potremmo costruire una macchina che riesca a risolvere problemi che gli esseri
umani non riescono a risolvere e cio' potrebbe ricadere a beneficio della umanita, per esempio ,
questa macchina potrebbe riuscire a trovare una cura infallibile contro le malattie gravi che affliggono gli esseri umani .
La costruzione di una macchina superiore all'essere umano potrebbe essere eseguita in due modi :
1) La macchina viene dotata di un corpo equivalente al corpo umano con gli stessi organi di senso,
determinando quindi lo stesso insieme di strumenti percettori che stanno alla base della funzione
giudicante, ma con in piu' un cervello con maggiori capacita di memoria, vale a dire con la
capacita di "ricordare" un maggiore numero di variabili in attesa di elaborazione ,
il che corrisponde ad una maggiore "intelligenza".
2) La macchina viene dotata di un corpo diverso o equivalente e superiore all'essere umano con organi di
senso piu' capaci , (per esempio un sistema uditivo che consenta di percepire anche gli ultrasuoni),
ed anche piu' intelligente, cio' darebbe a questa macchina grandi capacita, ma si porrebbe il problema
di comprendere i concetti che questa produce, perche' verrebbero costruiti elaborando percezioni che
gli esseri umani non hanno e quindi i simboli e i concetti sarebbero basati su percezioni che noi esseri
umani non abbiamo modo di comprendere .
Questa macchina potrebbe comunque creare delle cose utili per noi, ma non comprenderemmo come ha fatto .
Nota : Sembra che tutti gli animali siano meno intelligenti dell'uomo e considerando la capacita creativa
mi viene da accondiscendere a questa ipotesi, ma bisogna dire che gli animali hanno comunque delle
capacita di linguaggio e di espressione superiori a cio' che siamo in grado di capire, in quanto i
loro organi di senso sono diversi ed hanno vantaggi e svantaggi, ma il fatto che siano diversi,
implica che le loro percezioni sono almeno in parte diverse dalle nostre e quindi anche i simboli e
i concetti che creano sono diversi , per esempio, gli uccelli emettono ed odono suoni ed ultrasuoni,
noi umani sentiamo i suoni ma non gli ultrasuoni, quindi del canto degli uccelli sentiamo solo una
parte e ci capiamo ben poco, in passato si credette che fossero gli uccelli ad avere un linguaggio
povero ed elementare, ma poi con degli strumenti che trasformano gli ultrasuoni in suoni udibili
dagli umani ci si e' accorti che il loro linguaggio e' ben piu' ricco e articolato .
Altro esempio:
Per un gatto fare un salto da un muro di 5 metri di altezza non e' un problema,
per un essere umano invece, e' una cosa pericolosa, puo' farsi male seriamente,
ora, entrambi hanno in comune il concetto che saltare comporta dovere atterrare cercando di attutire il colpo con gli arti,
quindi sia per un gatto che per un umano, il concetto fino a qui e' lo stesso , ma il salto e' pericoloso per l'uomo e per il gatto no ,
vale a dire che in cio' che i due corpi sono simili i concetti sono uguali e comprensibili da entrambi
gli animali, ma in cio' che sono diversi no, se un gatto potesse dire ad un essere umano "Fai un bel salto" ,
l'essere umano farebbe un salto di un metro mentre un gatto si aspetterebbe di vedere fare un salto di 5 metri.
Al momento di questo scritto, la possibilita di fare macchine del genere e' estremamente lontana,
sia per la realizzazione di computers capaci di elaborare e memorizzare la quantita di dati necessari e sia
per la possibilita di realizzare organi di senso e un corpo paragonabili all'essere umano,
ragione per cui, almeno per ora conviene cercare di realizzare delle tecnologie che sfruttano parzialmente
quanto capiamo del funzionamento del corpo e del cervello umano, come proconte ne rappresenta un esempio .
Diritti d'autore
I diritti sono riservati, come da legge sul Diritto d'Autore n.518 del 1992 e successive modifiche.
Nessuna parte di questo sito potrà essere copiata, modificata, riprodotta e archiviata
su mezzi e modalita diverse da quelle acconsentite dall'autore .
E' consentito scaricare, conservare e stampare per uso personale e privato del fruitore dell'opera .
E' consentita la citazione del sito e/o di alcune sue pagine interne, senza preventiva autorizzazione,
purchè sia chiaramente identificabile il nome del dominio ufficiale (www.1111az.com/ProConte) .