Newsgroup: it.comp.lang.c++
Titolo: le polemiche su "MFC e principianti"

Visto che ciascuno dei miei vari interlocutori sul tema (Aiello, Quack,
Marotta) ha tesi ed opinioni di dettaglio assai differenti, uniti in
pratica solo dal convincimento che MFC sia sbagliato per un
principiante (per ragioni diverse: l'uno non considera mai adatto
un framework di basso livello, un altro potenzialmente si` ma non
quello, un altro ancora opina che MFC "fa troppo" e quindi, per
coerenza, immagino sconsiglierebbe al principiante qualsiasi
framework non rigorosamente progettato a soli fini didattici [e
a maggior ragione le API che fanno ancora di piu`], ecc ecc),
diventa abbastanza difficile "condurre una conversazione" (che
sarebbero almeno tre, ciascuna lunga, dettagliata, articolata);
penso/spero che tutti vari temi, nell'insieme, siano stati trattati
abbastanza a fondo da non renderlo per ora necessario.
Con alcune eccezioni... un punto fondamentale, che, asserito o
no, traspare da tesi espresse da tutti questi interlocutori, e` una
specie di "ipotesi implicita": che le STESSE scelte didattiche
sono "giuste", o "ottimali", per TUTTI i potenziali "studenti". Si
noti che questo non discende necessariamente dalle primarie
considerazioni su "quale framework C++ per un principiante":
su esse, Aiello ad esempio ammette una certa variabilita`
(di alto/basso livello, ovvero astrazione); ma, passando a parlare
del _linguaggio_ piu` adatto (al posto del C++), lo stesso tipo
di "ipotesi implicita" si trova evidenziato.
Secondo me, l'intelligenza umana e` capace di una sbalorditiva
gamma di variazioni; non infinita, vi sono delle "comunanze
biologiche" (e non) che la vincolano, ma amplissima.  In particolar
modo, ci sono persone che, per loro natura, trovano piu` facile,
agevole, produttivo, didatticamente valdio, e naturale, operare
mentalmente ad un livello di astrazione molto elevato; altre, non
necessariamente meno valide, operano invece meglio con
modelli mentali "concreti" (termine sempre relativo, visto che
si tratta pur sempre di oggetti "mentali", non "corporei", ma
penso che ci capiamo).  Le esperienze della vita possono poi
ulteriormente rafforzare, ovvero indebolire, questo tipo di
predisposizioni naturali.
Le variazioni individuali, su tanti diversi "assi perpendicolari",
sono poi anche tante altre.  Ad esempio, dovendo imparare un
argomento relativamente nuovo, alcuni si troveranno meglio
partendo dalle "somiglianze" con altre cose gia` familiari; altri,
al contrario, preferiscono porre l'enfasi iniziale sulle "novita`",
le _differenze_ rispetto a concetti e situazioni gia` note; chi
apprezza esempi o esercizi "sostanziosi" (che affrontano
problemi "reali" o quasi), chi invece trova che i troppi dettagli
importanti, necessariamente presenti, alieni al "tema di base",
offuschino quest'ultimo, e preferisce esempi-giocattolo; e
cosi` via.
L'esistenza di questa grande diversita` di predisposizioni e`,
secondo me, un fatto innegabile.  Non tutte le situazioni sono
altrettanto frequenti, naturalmente; mi sembra, ad esempio,
che nella popolazione in generale tenda ad esserci una certa
predisposizione per il (relativamente) "concreto" a preferenza
del (piu`) "astratto", e per il passaggio graduale dal piu` verso
il meno familiare piuttosto che il contrario, ecc ecc; ma le
proporzioni possono cambiare se quello che considera e`
un campione "biased" (ad esempio, si puo` immaginare che
un gruppo di laureati in matematica, sia per predisposizione
sia per esperienza, tendera` a preferire "l'astrazione" rispetto
alle preferenze della "popolazione in generale").
E` importante che ciascuno conosca le proprie preferenze
"didattico-applicative", e possa scegliere di conseguenza,
tenendo conto dei "gusti" personali (non sono _solo_ gusti,
ma non e` facile trovare un'espressione piu` precisa) oltre
che naturalmente di vari altri fattori (disponibilita` di libri o
insegnanti, eccetera)
La diffusione, ed il successo, di linguaggi (e di framework, ecc),
decisamente _pragmatici_ (e infatti spesso accusati di mancare
di eleganza, non del tutto a torto; ma nondimeno, usatissimi),
e` anzitutto una testimonianza sulle _preferenze della gente_;
nell'uso, come nell'apprendimento, la maggioranza delle persone
pare decisamente preferire il "pragmatico"/"concreto".
Lasciate pure che dicano che e` solo tutta una questione di 
marketing, o che e` colpa della Microsoft, ecc ecc: basta fare
un giro di orizzonte sufficientemente ampio per farsi quattro
risate a spese di chi creda davvero ad affermazioni cosi`
smaccatamente fasulle (perl, il gratuito, pragmaticissimo, 
utilissimo, e bruttissimo linguaggio di scripting piu` diffuso al 
mondo, lo ha forse spinto Microsoft, o quale altro "marketing"?  
e il C?  SQL? X Windows? TCP/IP? NFS? e la notazione infissa 
in aritmetica?-).
Personalmente, le mie preferenze di apprendimento tendono
verso l'astratto, il nuovo, eccetera; a lungo termine, e al netto
degli "effetti-rete" (solito termine tecnico economico), penso
anzi che vi siano seri vantaggi tecnici per certi fattori di
astrazione.  Non posso, pero`, fingere di ignorare che non
tutte le menti umane funzionano in questo modo (anzi, per
fortuna non e` cosi`: il mondo e` bello perche` e` vario!).
Ricapitolando, dunque: secondo me, MFC e` e resta una
scelta perfettamente ragionevole per un principiante, se
il suo "makeup mentale" vi si confa`, e con tutti i "caveat"
gia` ampiamente discussi in questo insieme di thread.  Per
quelle rare persone che hanno invece nette preferenze per
l'astrazione, al punto di poter passare sopra a vari svantaggi
pratici, Fresco e` in tutta probabilita` la scelta migliore -- e`
l'unico, dei tanti framework esaminati, al quale non mi sento
di poter fare serie critiche progettuali in termini di uso del
C++ (in particolare, l'unico ad imperniarsi coerentemente
sull'uso di interfacce puramente astratte, con eredita`
multipla, eccetera), a parte l'ATL, che, visto come framework
per la generica programmazione windows, e` di livello 
_decisamente_ basso, vista la sua enfasi senza compromessi
sulle prestazioni (esso presenta inoltre una complessita`
decisamente elevata, e una nettissima orientazione a COM
e ActiveX).
Non ci si illuda pero` di potere unire un framework veramente
pulito e astratto, come Fresco, all'uso completo delle
potenzialita` delle API Win32; si sara` invece limitati agli 
aspetti che Fresco effettivamente implementa.  Se si vuole
mantenere l'accesso alle API per "arricchire" quelle parti
dove il framework scelto non offre accesso al 100% delle
possibilita` dell'ambiente, si dovra` allora, necessariamente,
scegliere un framework meno astratto; questo, come la
carenza di libri di testo, insegnanti, competenza diffusa in
rete, ecc ecc, e` uno degli "svantaggi" da pagare se si fa
questa scelta.
Scelte completamente prive di svantaggi, secondo me, non
ce ne sono; bisognera` necessariamente "bilanciare" i vari
aspetti, nell'ottica, fra l'altro, delle proprie predisposizioni
mentali individuali.  Fra le varie scelte di compromesso,
alcune mi sembrano piu` difendibili (MFC, nonostante vari
aspetti di bassa qualita`, e VCL, nonostante vari problemi
legati al fatto che non e` C++ e per usarlo da C++ bisogna
usare importanti estensioni proprietarie e non-standard al 
linguaggio stesso, hanno il vantaggio di essere molto ben
supportate dai due migliori e piu` diffusi ambienti C++ di
tipo commerciale, e si trovano dunque anche testi, la
competenza diffusa in rete, ecc; il framework che si trova
a 
www.relisoft.com
 ha il "vantaggio" didattico di essere
assai semplice e povero; Fresco e` della massima eleganza
di progetto, pulizia, astrazione; VWCL, totalmente carente
di documentazione, e` pero` forse il migliore dei framework
"basso livello", funzionalmente ricco, e, come Fresco, gratis;
Tk, non O-O e legato al Tcl, ha pero` dalla sua la semplicita`
e lo splendido layout manager [magari fossero cosi` ben
progettati quelli Java!-)]; ecc ecc); altre meno (OWL non e`
piu` supportata dalla ex Borland, ora Inprise; le API nude
sono troppo complicate/caotiche/dispersive e richiedono
assolutamente un qualche "ricoprimento"; ATL per un
principiante e` probabilmente troppo difficile da usare,
forse anzi inusabile per gli aspetti grafici se un po' gia` non
si conoscono le API; molti framework gratuiti che si trovano
in rete sono mal documentati, troppo poveri, e non di rado
soffrono di tentativi "semidigeriti" di supportare sia Win32,
sia Win16, sia Athena, sia x, y, z, ...); ma ciascuno, come e`
ovvio, scegliera` per se.
Alex

mentali individuali.
E proprio per questo che in un argomento come quello appena affrontato
non si riesce a raggiungere una visione comune... ciascuno di noi valuta
diversamente aspetti che per l'altro possono essere vantaggi o svantaggi.
L'importante comunque e` essere coscienti di cio` e saper raggiungere
(con ulteriori studi) una visione quanto piu` ampia possibile, indipendentemente
dal punto di partenza.
Paolo
----------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  e-mail: 
mar...@cli.di.unipi.it
 
----------------------------------------------------------