[incr Tcl]

« Esempio: la classe linkedListAppunti di Tcl/TkModuli per Tcl »

Esempio: un derivatore simbolico

Archivio contenente il codice e la relazione del mio derivatore simbolico in [incr Tcl].

Questo è stato il mio progetto all'esame di Ingegneria del Software. In realtà il corso si basava su Java ed io sono stato l'unico (del mio anno, ma probabilmente anche di quelli precedenti) a presentare un progetto in in linguaggio differente.

Ho dovuto perciò giustificare la mia scelta di questo linguaggio e spiegarne i vantaggi e la notevole semplificazione che ne è derivata rispetto ad una implementazione a puntatori, in un linguaggio di sistema come Java.

La novità non ha riscosso l'entusiasmo del docente, nè io sono stato in verità molto brillante sulle domande che mi sono state poste all'esame ;-), comunque alla fine il progetto è stato accettato come valido e l'esame superato (con voto discreto) e per questo ringrazio e stimo molto il docente per la comprensione dimostratami, se mai dovesse capitare su questa pagina - no, non devo fare altri esami con lui, come voi tutti starete pensando ora :-)

Personalmente sono molto critico sulla scelta di molte università italiane di insegnare agli studenti un unico linguaggio di programmazione, appartenente alla categoria dei linguaggi di sistema, ignorando completamente i linguaggi di scripting. Ancora meno daccordo sono poi sulla scelta di Java come linguaggio di sistema. Non mi piace molto Java per varie ragioni. I programmi Java sono prolissi e cerimoniosi. Le prestazioni scarse persino rispetto ad altri linguaggi interpretati. Java, pur volendo essere un linguaggio di sistema, è poco legato ai sistemi operativi che si usano in pratica. Nessun sistema operativo basato su Java, nè tantomeno i processori capaci di eseguire bytecode Java hanno avuto un reale successo. Nemmeno sul web e sui dispositivi mobili Java ha attecchito e in verità ci sono molte altre tecnologie Java-killer più vantaggiose (ad esempio PHP5).

Un linguaggio di sistema senza un sistema importante e diffuso che lo supporti e che vorrebbe avere gli stessi vantaggi dei linguaggi portabili interpretati ma ci riesce piuttosto male, è probabilmente destinato a scomparire nel giro di pochi anni, nonostante la massiccia pubblicità di cui gode.

Ben poche poi sono le novità introdotte da Java. Il suo carattere intermedio tra quello di interprete e compilatore non è una grossa novità. Ricordo che persino i primi interpreti Basic per microcomputer permettevano di compilare il programma in una forma intermedia e in effetti gli interpreti non sono quasi mai puri per ragioni legate alle prestazioni. Non vedo poi per quali concreti motivi Java sia definibile come un linguaggio "veramente pulito" e "pienamente orientato agli oggetti". È facile rendersi conto invece che da questo punto di vista altri linguaggi, come ad esempio Smalltalk, sono ben superiori.

Naturalmente potreste non essere daccordo su queste mie opinioni, sicuramente influenzate in negativo dal fatto che in molti casi ho dovuto usare Java per costrizione, anche in applicazioni in cui non era adatto.

Personalmente credo che le polemiche su quale linguaggio sia migliore o peggiore in assoluto siano sterili. All'atto pratico è impossibile o almeno molto difficile progettare un linguaggio adatto per qualsiasi tipo di applicazione. È per questo che credo sia importante per un ingegnere del software conoscere diversi linguaggi, anche i cosiddetti linguaggi speciali, in modo da poter scegliere in base all'esperienza, alla natura del problema e agli strumenti disponibili il linguaggio (o i linguaggi!) più adatto per ogni specifico progetto. La scelta del linguaggio sbagliato è un grave errore che può costare tempo e denaro. Un buon manager di progetto non può essere miope su questo punto.

Ma tornarndo sul concreto, voi come risolvereste o provereste a risolvere questo problema della derivazione simbolica? Quale linguaggio ritenete più adatto? Mi raccomando, non mancate di mandarmi osservazioni e commenti e anche eventuali critiche.

« Esempio: la classe linkedListAppunti di Tcl/TkModuli per Tcl »