Newsgroup: it.comp.programmare
Titolo: OT Imparare a programmare

Sono un consulente informatico ( lavoro prevalentemente come sistemista e
tecnico HW).
Sono completamente a 0 di programmazione e volevo iniziare a fare qualcosa;
sono indeciso tra Delphi e Visual Basic. Cosa mi consigliate?
Siccome non mi va di iniziare comprandomi un libro e mettendomi li a leggere
per i fatti miei cercavo un corso a Brescia; qualcuno conosce qualche posto
?
--
Distinti Saluti
Luca Ferrari

sono indeciso tra Delphi e Visual Basic. Cosa mi consigliate?
Delphi.

 conosce qualche posto ?
Forse google :)
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

 qualcosa; sono indeciso tra Delphi e Visual Basic. Cosa mi consigliate?
tra i due litiganti... python
www.python.org
www.python.it
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 tra i due litiganti... python
Nelle ultime settimane ho trovato un po' di tempo per dare un'occhiata al
Python e devo dire che ne sono rimasto piacevolmente impressionato.
La rapidita` con il quale ho imparato il core del linguaggio e` stata
incredibile pero` ho ancora qualche dubbio sul fatto che sia il linguaggio
ideale per cominciare, nonostante mi stia convincendo sempre di piu`.
Il problema e` la tipizzazione dinamica: e` veramente piu` semplice
imparare per un neofita un linguaggio con tipizzazione dinamica anziche`
statica?
Maurizio
-- 
The last thing one knows in constructing a work is what to put first.
                -- Blaise Pascal

 statica?
Da quello che ho visto io mi sembra che sia più facile un linguaggio con 
tipizzazione dinamica ma con tipizzazione forte, non come VB o Perl (print 
"5" + 3 => 8).
-- 
Marco Barisione  (ICQ 84277092)
Vota per la creazione di it.comp.software.editor seguendo le istruzioni
contenute nel messaggio news://
MK.it.comp.soft...@news.nic.it

 "5" + 3 => 8).
No! Ultimamente sento spesso questa cosa (leggi il primo e unico articolo su 
python di 
www.programmazione.it
) della tipizzazione forte utilizzata a 
sproposito. Sollevo due punti veloci e do dei riferimenti:
1_ Definire strong il type system di un linguaggio che viene interpretato 
durante l'esecuzione e' un po' una sottigliezza, infatti per essere strong 
il type system dovrebbe garantire a tempo di traduzione il non verificarsi 
di errori di tipo a tempo di esecuzione. Nel nostro caso (visto che il 
translation-time e il run-time quasi coincidono), l'unico modo per definire 
il type system del linguaggio non e' tanto quello di fare esempi, ma quello 
di leggerne la specifica formale. 
2_  Come nell'articolo che ho citato di 
www.programmazione.it
, qui viene 
portato ad esempio di safeness il fatto che "5" + 3 dia un errore di tipo. 
Ora che il php o perl o vb o altri definiscano una regola di conversione 
fra stringhe di un certo tipo e la applichi (in certi casi) in maniera 
implicita (coercion) non significa affatto che il linguaggio non sia 
safeness, anzi! Stando alla definizione [Ghezzi], se l'errore dato da 
python in questo caso fosse da considerarsi a run-time (e non a 
translation-time) si sarebbe dimostrato esattamente il contrario, e cioe' 
che php, perl e seguenti sono safe, mentre python non lo e'
Riferimenti:
pp. 138 e seguenti di "Programming language concepts" e seguenti di Ghezzi 
Jazayeri
"Type system" di Cardelli (
http://www.luca.demon.co.uk/Bibliography.html
)
-- 
{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}
SunGray aka Gabriele Lana
contact me @ 
sun...@tiscalinet.it
See you space cowboy ...

 anziche` statica?
Secondo me dal punto di vista del neofita non cambia nulla: fin tanto che 
scrive programmi banali (e quindi sin tanto che non e` piu` un neofita 
;-) non riuscira`  a percepire la distinzione tra tipizzazione statica e 
dinamica. Confronta i due esempi:
int a = 3; // affermo che "a" e` un numero intero con valore 3
int b = 5; // affermo che "b" e` un numero intero con valore 5
cout << a + b; // calcolo la somma di due numeri interi
a = 3 # affermo che "a" e` un numero intero con valore 3
b = 5 # affermo che "b" e` un numero intero con valore 5
print a+b # calcolo la somma di due numeri interi
L'unica differenza e` che nel primo caso hai affermato due volte la 
stessa cosa (prima dici che "a" e` un numero intero, poi dici che "a" e` 
un numero intero che vale 3).
Sin tanto che i programmi sono corretti le differenze sono minime; ma nel 
caso di programmi banali anche i programmi sbagliati sono simili:
int a = "3";
int b = 5;
cout << a + b;
Probabilmente il newbie usa una GUI che possiede un tasto "esegui", 
quindi non e` ancora a conoscenza della differenza tra compile-time e 
run-time: quando preme il tasto "esegui" vede un messaggio di errore 
poiche` "3" non e` un intero.
a = '3'
b = 5
print a + b
Alla pressione del tasto "esegui" l'utente vede un messaggio di errore in 
cui si afferma che non puo` sommare una stringa e un intero.
Come puoi vedere la differenza e` minima anche in questo caso: ovviamente 
man mano che i programmi diventano piu` complessi le differenze sono 
grosse, ma questo non e` piu` un problema per "neofiti della 
programmazione".
Per inciso IMHO per semplicita` & potenza la tipizzazione dinamica e` ben 
superiore a quella statica, ma questo e` un altro discorso...


 superiore a quella statica, ma questo e` un altro discorso...
Qui invece non sono completamente d'accordo. Ovviamente la tipizzazione
dinamica e` superiore in potenza a quella statica ma non in semplicita`
(almeno non DOPO gli inizi): in grossi programmi la tipizzazione statica
unita alla dichiarazione dei tipi di variabile IMHO permette di evitare
insidiosi bug altrimenti avvertibili solo a tempo di esecuzione. (e quindi
potenzialmente solo in alcune condizioni di esecuzione)


 potenzialmente solo in alcune condizioni di esecuzione)
Io ho trovato molto convincenti a riguardo i vari post di Alex Martelli 
sull'argomento, se non li hai già letti prova a cercarli con google.


 safeness, anzi!
Parlavo semplicemente di semplicità per un newbie. Le persone che ho visto 
che iniziano ad imparare si domandano molto presto il perché 5 + "3" sia 
possibile, invece non ho mai visto nessun newbie porsi problemi o non 
capire il sistema usato dal C o quello di Python.


 sull'argomento, se non li hai già letti prova a cercarli con google.
Ho cercato un po' di post di Alex Martelli sull'argomento su google come mi
hai consigliato e li ho trovati in effetti molto interessanti.
Non sono comunque nonostante tutto troppo d'accordo. ;)
In sostanza, da quanto ho capito da quello che ho letto (ma puo` essere anche
che io non abbia letto i post "giusti" :) ) lui afferma che la tipizzazione
dinamica accelera notevolmente il processo di sviluppo, in questo modo e`
possibile dare piu` tempo per la fase di testing. Inoltre nel caso specifico
di Python si rivela anche un'ottima arma a suo vantaggio il fatto di poter
facilmente individuare il punto ESATTO dove il programma causa l'errore
cosa invece spesso impossibile con linguaggi compilati, o almeno impossibile
con il C o il C++ (specialmente se il problema e` derivato da un uso improprio
dei puntatori, in questo caso spesso gli effetti indesiderati dell'errore
si subiscono sempre in punti del processo apparentemente indipendenti).
Inoltre la maggiore flessibilita` data dalla tipizzazione dinamica e`
incredibile.
Correggimi se ho sbagliato l'interpretazione dei suoi post (magari potrei
proprio non aver letto quelli che te intendevi, se trovi il tempo di passarmi
gli url te ne sarei infinitamente grato)
Dal mio piccolo pero` posso dire che secondo me puo` essere utile evitare
di scambiare l'uso di due oggetti simili ma non uguali perche` appartenenti
a classi simili ma non uguali. :) Questo e` un problema della programmazione
generica in generale, non solo della tipizzazione dinamica.


 generica in generale, non solo della tipizzazione dinamica.
Questo è vero ma, usando sempre nomi significativi e sensati, non mi è 
quasi mai capitato questo problema; cioè ho avuto una sola volta un 
problema in Python perché un oggetto aveva un metodo chiamato write come 
quello dei file mentre il poter usare un oggetto con il metodo write dove 
serviva un file mi è servito più volte.


 serviva un file mi è servito più volte.
che tradotto in italiano sarebbe? :)


 che tradotto in italiano sarebbe? :)
Una volta per sbaglio ho utilizzato al posto di un file un oggetto con un 
metodo chiamato write. Me ne sono comunque accorto poco dopo.
Molte volte invece ho trovato molto comodo usare oggetti (non derivati da 
file) al posto di file, ad esempio per scrivere su un file di log tutto 
quello che viene stampato sullo stdout con print basta:
class FileDiLog:
    [...]
import sys
sys.stdout = FileDiLog('out.log')
E FileDiLog deve solo definire un paio di metodi per funzionare 
correttamente.


 cut >
C'è un bellissimo thread su comp.lang.python in questi giorni.
E' intervenuto anche un certo Andrew Koenig.
Dagli un'occhiata casomai.
Ciao,
	Nicholas

,
Nicholas Wieland ha scritto:

Sto leggendo :), grazie.


 E' intervenuto anche un certo Andrew Koenig.
Mi puoi dire il subject o il message-id, per favore?


 Mi puoi dire il subject o il message-id, per favore?
source code size metric: Python and modern C++
Ciao,
	Nicholas