martedì 22 gennaio 2008

Java ostacolo alla formazione di solide basi per gli studenti

Nell'articolo Computer Science Education: Where Are the Software Engineers of Tomorrow?, Robert B.K. Dewar e Edmond Schonberg, illustrano i loro dubbi in merito alla adozione di Java come primo linguaggio di programmazione, nelle facoltà di Informatica. Nel doppio ruolo di professori della New York University e fondatori di una società specializzata in programmazione con Ada, ravvisano come questa scelta abbia indebolito la preparazione degli studenti, e come diventi ogni giorno più difficile recrutare personale dotato di solide basi. Secondo gli autori, negli ultimi anni, si stanno concretizzando alcuni trend negativi nell'insegnamento di Scienze dell'Informazione:
  • Il contenuto teorico matematico nei corsi di Informatica si sta riducendo
  • L'acquisizione di competenze in diversi linguaggi di programmazione sta lasciando il posto ad un approccio di ricopiatura di pezzi di codice, l'utilizzo di grosse librerie o package specializzati
  • Le competenze acquisite sono insufficienti per l'industria del software odierna, mentre invece sembrano indicate per l'industria dell'outsourcing e così si producono professionisti facilmente sostitubili.

Ma quali sono le ragioni che li inducono a pensare che non sia corretta la generale adozione di Java come linguaggio di programmazione nei corsi introduttivi. Sicuramente la popolarità del linguaggio nell'ambito delle applicazioni Web e la relativa facilità con cui permette anche ai novizi di creare programmi dotati di grafica ha favorito questa scelta, ma verificano le difficoltà già nel primo corso di sistemi. Gli studenti hanno difficoltà nello scrivere programmi privi di interfaccia grafica, non riescono a percepire la relazione tra il sorgente e le elaborazioni hardware e non riescono ad entrare nella semantica dei puntatori.

Mi sembra molto chiaro il principio che spiegano in merito alla bellezza della programmazione. L'essenza della programmazione consiste nella riduzione di processi complessi in una serie di semplici operazioni primitive. Il linguaggio Java, secondo gli autori, invece di adattarsi a questa essenza, propone un approccio alla "idraulico in un negozio di ferramenta": rovistando in una moltitudine di cassetti - package - si arriverà a trovare un qualche attrezzo - classe - che più o meno è adatto a fare quello che ci serve. Come lo fa non è importante. Questo porta gli studenti ad essere dei confezionatori di pezzi di programma, ma non dei programmatori.

Un altro problema che individuano nell'uso delle librerie Java e dei framework è il fatto che gli studenti non riescono ad avere la percezione del costo di runtime di quello che producono, perchè è estremamente difficile ricostruire ciò che ogni metodo chiama e tutto il codice eseguito.

Devo dire che le ragioni esposte non mi convincono molto se applicate solo a Java. Sembra più che altro che si stia facendo una critica alla programmazione orientata agli oggetti, perchè le problematiche esposte si possono facilmente applicare a tutti quei linguaggi che si basano su questo paradigma. Ma del resto, chiariscono nel proseguio dell'articolo, che considerano importante imparare il Java, ma come competenza aggiuntiva.

Quindi per chiarire riassumendo, i due professori ritengono che come primo linguaggio di programmazione, per formare basi solide, non sia adatto un linguaggio object oriented, ma piuttosto un linguaggio imperativo, e sopratutto non si debba praticare un unico linguaggio, ma vederne diversi.