Corso di programmazione per principianti

Tutta l'informatica

Corso di programmazione per principianti

Messaggioda Braddock » sab mag 28, 2005 6:03 pm

Riporto la notizia anche qui come consigliato da ikir :ride:

Segnalo a tutti gli interessati che sul mio sito sto pubblicando una guida di programmazione per principianti, nella quale intendo spiegare i rudimenti della programmazione a tutti i neofiti interessati alla cosa. Il tutto è assolutamente gratuito e verrà pubblicato "a puntate" man mano che la scrivo. Il linguaggio trattato è Python, e vi invito caldamente a fornire del feedback sul mio lavoro per renderlo quanto migliore possibile!

Grazie per l'attenzione :eheh:
Avatar utente
Braddock

Niubbo
 
Messaggi: 6
Iscritto il: sab mag 28, 2005 2:39 pm

Re: Corso di programmazione per principianti

Messaggioda riko » sab mag 28, 2005 10:24 pm

Allora... sollecitato rispondo.

La prima cosa che devo dire, sinceramente e` che non mi fa impazzire lo stile espositivo. Vuoi essere brillante a tutti i costi, e finisce che "divaghi" tantissimo. Per mio gusto (e queste qui sono opinioni mie) preferisco testi semplici e lineari. Deve essere piacevole quello che scrivi, non e` necessario fare ridere chi legge. Una battuta ogni tanto ok, ma non esagerare. :ride:
Se vuoi pero` leggere un testo di informatica "brillante", dai un occhio al Programming Perl di Larry Wall. Il linguaggio e` quello che e`, ma il libro merita di essere letto.

Quando inizi a parlare di interpreti vs. compilatori fai un bel pastrocchio. La differenza tradizionale fra "linguaggi interpretati" e "linguaggi compilati" non ha piu` molto senso. In particolare il Python non e` un linguaggio interpretato in senso tradizionale.

Quando dici che in Python il listato viene letto riga per riga ed eseguito dici una cosa falsa. L'interprete python per prima cosa compila i sorgenti nel bytecode della macchina virtuale python. Poi viene eseguito suddetto bytecode. Nelle successive esecuzioni, se i sorgenti non vengono modificati, vengono usati .pyc o i .pyo generati dalla precedente esecuzione.

Qui maggiori informazioni sulla bytecode python e simili:
http://effbot.org/zone/python-compile.htm

Poi... imho non e` scritta molto bene la parte in cui parli di variabili in Python. Per esempio non capisco perche` parli di "dichiarazione", che e` qualcosa che in Python non esiste. IMHO fai solo confusione in testa a chi legge.
Tieni presente che non essendo particolarmente chiari si rischia di fare danni grossi. In particolare in Python assimilare variabili ed oggetti e` piuttosto pericoloso, e poi diventa difficile spiegare certi comportamenti che sono invece perfettamente logici tenendo conto che gli oggetti sono oggetti, e le "variabili" sono solo nomi che temporaneamente si riferiscono ad una data istanza di un oggetto.

Dopo di che. print non e` una funzione. Print e` uno statement. Le cose sono radicalmente diverse. Come nota a margine, nessuno usa print("qualcosa"), in genere si usa print "qualcosa".

Piu` giu` c'e` un piccolo errore di formattazione html. Non va a capo.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Re: Corso di programmazione per principianti

Messaggioda MazinKaesar » dom mag 29, 2005 11:36 am

riko ha scritto:La prima cosa che devo dire, sinceramente e` che non mi fa impazzire lo stile espositivo. Vuoi essere brillante a tutti i costi, e finisce che "divaghi" tantissimo. Per mio gusto (e queste qui sono opinioni mie) preferisco testi semplici e lineari. Deve essere piacevole quello che scrivi, non e` necessario fare ridere chi legge. Una battuta ogni tanto ok, ma non esagerare. :ride:
Se vuoi pero` leggere un testo di informatica "brillante", dai un occhio al Programming Perl di Larry Wall. Il linguaggio e` quello che e`, ma il libro merita di essere letto.


Quoto... ho dato anche io un'occhiata a suo tempo al libro di Wall.
Carino ... :ahah:
Immagine Immagine
Immagine Immagine
Immagine Immagine
Avatar utente
MazinKaesar

Supporter!!
 
Messaggi: 4051
Iscritto il: sab set 18, 2004 8:43 pm
Località: Modena

Re: Corso di programmazione per principianti

Messaggioda Braddock » lun mag 30, 2005 2:16 am

Innanzitutto grazie per i commenti esaustivi, terrò sicuramente presente le tue osservazioni per i prossimi capitoli
riko ha scritto:Quando dici che in Python il listato viene letto riga per riga ed eseguito dici una cosa falsa.

Questo lo sapevo... se leggi ho scritto che in realtà Python è un linguaggio non interpretato, nè compilato, ma pseudocompilato. Probabilmente ho voluto essere troppo "spiccio" in certi passaggi e si finisce per fraintendere laddove non è chiarissimo quando sto parlando di Python e quando sto parlando di linguaggi in generale.

riko ha scritto:Poi... imho non e` scritta molto bene la parte in cui parli di variabili in Python. Per esempio non capisco perche` parli di "dichiarazione", che e` qualcosa che in Python non esiste. IMHO fai solo confusione in testa a chi legge.

Il fatto è che la mia guida vuole sì mostrare come è fatto Python (e qui ti ringrazio tantissimo per le tue osservazioni, perchè ripeto sono un niubbo totale del linguaggio ed è normale che qua e la scrivo qualche vaccata che provvederò presto a correggere :ride:), ma in realtà vorrebbe anche mostrare che cosa accade in generale nei linguaggi. Infatti mi pareva di aver sottolineato che la dichiarazione è un meccanismo che esiste in molti linguaggi a differenza di quanto avviene in Python

riko ha scritto:Tieni presente che non essendo particolarmente chiari si rischia di fare danni grossi. In particolare in Python assimilare variabili ed oggetti e` piuttosto pericoloso, e poi diventa difficile spiegare certi comportamenti che sono invece perfettamente logici tenendo conto che gli oggetti sono oggetti, e le "variabili" sono solo nomi che temporaneamente si riferiscono ad una data istanza di un oggetto.

Per gli oggetti (e i relativi concetti) pensavo proprio di fare un capitolo a parte ... non volevo mettere troppa carne al fuoco.

riko ha scritto:Dopo di che. print non e` una funzione. Print e` uno statement. Le cose sono radicalmente diverse. Come nota a margine, nessuno usa print("qualcosa"), in genere si usa print "qualcosa".

Anche qui ... non volevo scendere in dettagli eccessivi e ho pensato che spiegando ad un principiante si potesse sorvolare un secondo su questa distinzione.

Grazie comunque per il prezioso feedback :ammicca:
Avatar utente
Braddock

Niubbo
 
Messaggi: 6
Iscritto il: sab mag 28, 2005 2:39 pm

Messaggioda ikir » lun mag 30, 2005 4:07 pm

@Braddock

Wow che onore avere un DF su questo forum :annu:

Riguardo alla guida , io da bravo niubbo di programmazione intendo seguirla. Grazie per il tuo lavoro! :annu:

Se vuoi inviare una news ne sarei felice. Se ti fa piacere la inserisco io, altrimenti usa il form.
http://www.iksnet.it/collabora.php
Avatar utente
ikir

Admin
 
Messaggi: 10202
Iscritto il: mer gen 08, 2003 7:33 pm
Località: SYS:Prefs/

Messaggioda Braddock » lun mag 30, 2005 5:32 pm

Hey, è un onore per me che tu voglia inserire una news. Ti lascio carta bianca :ride:

In ogni caso, ho cercato di apportare qualche veloce modifica nei punti citati da riko. Spero che ora siano leggermente più chiari :felice:
Avatar utente
Braddock

Niubbo
 
Messaggi: 6
Iscritto il: sab mag 28, 2005 2:39 pm

Messaggioda ikir » lun mag 30, 2005 5:55 pm

Braddock ha scritto:Hey, è un onore per me che tu voglia inserire una news. Ti lascio carta bianca :ride:

In ogni caso, ho cercato di apportare qualche veloce modifica nei punti citati da riko. Spero che ora siano leggermente più chiari :felice:

Ok domani da lavoro la posto :felice:
Avatar utente
ikir

Admin
 
Messaggi: 10202
Iscritto il: mer gen 08, 2003 7:33 pm
Località: SYS:Prefs/

Re: Corso di programmazione per principianti

Messaggioda riko » lun mag 30, 2005 10:08 pm

Braddock ha scritto:Questo lo sapevo... se leggi ho scritto che in realtà Python è un linguaggio non interpretato, nè compilato, ma pseudocompilato. Probabilmente ho voluto essere troppo "spiccio" in certi passaggi e si finisce per fraintendere laddove non è chiarissimo quando sto parlando di Python e quando sto parlando di linguaggi in generale.


E` una cosa su cui noi Pythonisti siamo piuttosto sensibili :ride:.
E` che poi regolarmente arriva il C++/Java/C/C#/Delphi-sta che se ne esce con "ah... ma python non e` un *vero* linguaggio di programmazione", "python e` solo un linguaggio di scripting" etc etc :ride:.
Quindi e` abbastanza in uso essere molto fiscali su ste cose qua :ride:.



ma in realtà vorrebbe anche mostrare che cosa accade in generale nei linguaggi. Infatti mi pareva di aver sottolineato che la dichiarazione è un meccanismo che esiste in molti linguaggi a differenza di quanto avviene in Python


Vero. Poi lo dici. Sinceramente mi chiedo se sia la scelta giusta. Mi spiego. Python e` relativamente particolare come linguaggio.
Per esempio non e` comune la fiscalita` con l'indentazione. Non e` nemmeno cosi` diffusa l'assenza totale di costrutti di dichiarazione.

In Perl per esempio puoi forzare l'obbligo di dichiarare le variabili. In Python la "dichiarazione" proprio non esiste. Perfino lo statement global, anche se presente, non fa la cosa ovvia e in genere non e` necessario, oltre che sconsigliato.

Insomma... percorrere le due strade in parallelo non sono certo che non ingeneri piu` confusione del necessario; magari potresti fare prima tutto il Python, poi in un'appendice spiegare le differenze fra Python e un generico linguaggio, per esempio introdurre il concetto di dichiarazione.

Per gli oggetti (e i relativi concetti) pensavo proprio di fare un capitolo a parte ... non volevo mettere troppa carne al fuoco.


Chiaro. Non volevo suggerirti di partire in tronco con gli oggetti. Solo di mettere in evidenza che le "variabili" sono solo delle etichette, dei nomi che denotano degli "enti". Che puoi anche chiamare "oggetti" in senso intuitivo (e poi la cosa si scopre anche essere rigorosa :ride:).

Se si capisce fin da subito che le variabili sono solo un modo di chiamare gli oggetti, ma non sono gli oggetti, IMHO si va avanti meglio. E come concetto non e` nemmeno troppo problematico, sempre IMHO.

Dico questo perche` molte persone cui ho mostrato il Python, abituate a linguaggi in stile C, si chiedevano del perche` di certi comportamenti non ovvi. In particolare dell'apperente dualita` di comportamento fra oggetti mutabili e oggetti immutabili. Dualita` che si vede non esistere considerando che le variabili sono solo nomi.

Anche qui ... non volevo scendere in dettagli eccessivi e ho pensato che spiegando ad un principiante si potesse sorvolare un secondo su questa distinzione.


Purtroppo questa e` un'altra delle idiosincrasie del Python. La differenza fra statement ed espressioni e` molto marcata, e ci sono posti "notevoli" in cui per esempio puoi mettere espressioni ma non statement.

esempio

if a=b: print a

in Python non funzionera` mai, mentre per dire in C sarebbe corretto.
Questo perche` anche l'assegnamento non e` un'espressione.
Gli statement per esempio non hanno valore di ritorno (chiaramente visto che non sono funzioni), mentre le espressioni hanno sempre un valore di ritorno. Loro stesse nella fattispecie, o nel caso delle funzioni, il valore ritornato. Valore che c'e` sempre, al limite None.

IMHO a semplificare troppo, si corrono dei rischi. Per questo e` difficile insegnare ai principianti.
Comunque ci sono numerosi docuementi per principianti "ufficiali", alcuni forse anche tradotti in italiano. Magari dacci un occhio per prendere spunto su certe cose. :ride:
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda Braddock » lun mag 30, 2005 10:31 pm

Ti ringrazio sempre per i consigli. Ripeto che cmq la mia cultura informatica è abbastanza "estesa" (sono al quarto anno di ingegneria inf.), però per Python sono un niubbo totale e certe cose non le avevo pensare finchè non me le hai fatte notare tu :ride:

Vedremo che dirai quando sfornerò il prossimo capitolo sui costrutti di controllo :ahah:
Avatar utente
Braddock

Niubbo
 
Messaggi: 6
Iscritto il: sab mag 28, 2005 2:39 pm

Messaggioda Fab0569 » mar mag 31, 2005 3:53 pm

Bella iniziativa
Avatar utente
Fab0569

Maestro
 
Messaggi: 382
Iscritto il: mar ago 26, 2003 11:01 am
Località: Chieti

Re: Corso di programmazione per principianti

Messaggioda sHaDy » gio giu 02, 2005 4:45 pm

riko ha scritto:E` una cosa su cui noi Pythonisti siamo piuttosto sensibili :ride:.
E` che poi regolarmente arriva il C++/Java/C/C#/Delphi-sta che se ne esce con "ah... ma python non e` un *vero* linguaggio di programmazione", "python e` solo un linguaggio di scripting" etc etc :ride:.
Quindi e` abbastanza in uso essere molto fiscali su ste cose qua :ride:.


Io sono un C/C++ista corretto, non direi mai una cosa simile :ride:

@Braddock

Mi fa piacere che tu abbia iniziato questo progetto, sto approfondendo questo linguaggio (tra l'altro di una praticità incredibile, ringrazio riko per avermi convinto) proprio ultimamente ragion per cui mi potrebbe fare molto comodo la guida.
Life's not a bitch, Life is a beautiful woman,
You only call her a bitch because she won't let you get that pussy
Avatar utente
sHaDy

Maestro
 
Messaggi: 464
Iscritto il: mar feb 04, 2003 7:59 pm

Re: Corso di programmazione per principianti

Messaggioda riko » gio giu 02, 2005 10:03 pm

sHaDy ha scritto:Io sono un C/C++ista corretto, non direi mai una cosa simile :ride:


Sinceramente non so perche` molte persone hanno remore ideologiche verso linguaggi non compilati in codice macchina.
Ma sono posizioni relativamente diffuse. Saranno cattive esperienze con il mastodontico Java (che semplicemente non andrebbe usato per applicazioni "desktop", mentre per i server la piattaforma funziona benissimo -- la piattaforma, il linguaggio fa schifo comunque :ride: -- ).

Ma perche` poi al momento i programmatori ASM puro sono tendenzialmente deceduti o comatosi :))
Se no salterebbero su a dire che anche C o C++ non e` un vero linguaggio e compagnia...
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda Braddock » sab giu 04, 2005 8:18 pm

Avatar utente
Braddock

Niubbo
 
Messaggi: 6
Iscritto il: sab mag 28, 2005 2:39 pm

Messaggioda riko » dom giu 05, 2005 1:44 am

Braddock ha scritto:Terzo capitolo pronto :felice:


Ecchime. :ride:

Allora... c'e` un errore di indentazione mi sa dovuto a roba di HTML quando parli dell'if.
Un appunto che vorrei fare e` che in Python tutte le funzioni hanno sempre un valore di ritorno, eventualmente se non specificato questo sara` None.
Questo serve per rendere comunque valido codice del tipo
a = f()
Male che vada a vale None, ma implementare la possibilita` che f non restituisse niente (non niente "semantico", ma niente "sintattico") sarebbe stata una bella complicazione (e anche poco utile).

Per il resto direi ottimo :ride:.

Magari io butterei dentro da qualche parte che il while e` scoraggiato pressoche` sempre e che viene spinto in ogni caso l'uso di list comprehensions e generatori (quando li farai) e del for (gia` fatto).
Magari puoi anche suggerire di iterare sulle liste e simili senza passare per la variabile i (giusto fare l'esempio, ma magari specificare che e` una cosa "didattica" e che in genere non si fa, se si puo` evitare).


Ah.. e mi chiedevo, perche` hai scelto di presentare prima elif di else? Pura curiosita` la mia :ride:.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda ikir » lun giu 06, 2005 12:37 pm

Braddock ha scritto:Terzo capitolo pronto :felice:

Grande Braddock! Continua così :felice:
Avatar utente
ikir

Admin
 
Messaggi: 10202
Iscritto il: mer gen 08, 2003 7:33 pm
Località: SYS:Prefs/

Prossimo

Torna a Tecnologia, internet, coding

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti