View Full Version : Iniziare a programmare
Th3 Kn0wl3dg3
27-09-2007, 20:13
Ho 19 anni, quasi 20, e amo i computer e mi affascina tutto ciò che li riguarda. Vorrei iniziare a programmare ma per un niubbo come me in con tutti questi linguaggi non è facile. Con quale potrei iniziare considerando che comincio proprio da zero? Con Java, php, python, C......
AnonimoVeneziano
27-09-2007, 20:52
Questo è un thread tipico da flame, però sono convinto di una cosa:
Tu sei un principiante e lo fai come hobby, quindi devi anche divertirti, quindi ,a mio parere , dovresti imparare il linguaggio che più ti avvicina al tuo campo di interesse.
Se ti interessa il web e internet allora magari un linguaggio come HTML etc
Se ti interessa l'hardware e vuoi capire come funziona a basso livello allora il C prima e l'assembly poi. Così puoi vedere come viene gestita la memoria, le chiamate di funzione, l'I/O.
Se ti interessa capire come vengono sviluppati li grossi software applicativi allora un linguaggio orientato agli oggetti . Qui hai veramente l'imbarazzo della scelta: Java , C#, Python ... vedi un po' tu :D (poi magari qualcun'altro ti chiarirà meglio le idee).
Poi una volta che hai capito se questo ti interessa veramente puoi andare un po' dove più ti piace e hai bisogno :)
Il fatto che è solo un hobby ti apre la strada a tante possibilità che chi lo fa per lavoro o studio non ha .
Ciao
devo dire che per un principiante python mi sembra molto buono...non devi sbatterti più di tanto per imparare la sintassi, e questo aiuta a concentrarsi di più sull'aspetto vero e proprio della programmazione. imho ovviamente :)
cdimauro
27-09-2007, 22:14
Ho 19 anni, quasi 20, e amo i computer e mi affascina tutto ciò che li riguarda. Vorrei iniziare a programmare ma per un niubbo come me in con tutti questi linguaggi non è facile. Con quale potrei iniziare considerando che comincio proprio da zero? Con Java, php, python, C......
Dati i requisiti che poni nella tua domanda, la risposta è a dir poco scontata: Python. :p
Ecco qui http://www.hwupgrade.it/forum/showthread.php?t=1487400 una discussione in cui se n'è parlato, e qui http://www.hwupgrade.it/forum/showpost.php?p=17427521&postcount=19 un messaggio che ti può essere utile.
Th3 Kn0wl3dg3
28-09-2007, 06:05
Questo è un thread tipico da flame, però sono convinto di una cosa:
Tu sei un principiante e lo fai come hobby, quindi devi anche divertirti, quindi ,a mio parere , dovresti imparare il linguaggio che più ti avvicina al tuo campo di interesse.
Se ti interessa il web e internet allora magari un linguaggio come HTML etc
Se ti interessa l'hardware e vuoi capire come funziona a basso livello allora il C prima e l'assembly poi. Così puoi vedere come viene gestita la memoria, le chiamate di funzione, l'I/O.
Se ti interessa capire come vengono sviluppati li grossi software applicativi allora un linguaggio orientato agli oggetti . Qui hai veramente l'imbarazzo della scelta: Java , C#, Python ... vedi un po' tu :D (poi magari qualcun'altro ti chiarirà meglio le idee).
Poi una volta che hai capito se questo ti interessa veramente puoi andare un po' dove più ti piace e hai bisogno :)
Il fatto che è solo un hobby ti apre la strada a tante possibilità che chi lo fa per lavoro o studio non ha .
Ciao
Io veramente vorrei iniziare a programmare perchè dopo il diploma voglio andare o a ingegneria informatica o a scienze informatiche e poi lo vorrei fare per lavoro, non per hobby. apparte questo molti mi hanno consigliato anche java perchè ha un vasto campo applicativo e si usa sia per fare di tutto. da niubbo il quale sono python non mi attira molto, una volta per caso avevo letto la documentazione, si è vero che è semplice la sintassi, ma non so perchè non mi convince
cdimauro
28-09-2007, 07:09
Per iniziare a programmare non c'è niente di meglio di Python, fidati. :cool:
Poi ha un vasto campo applicativo: http://www.python.org/about/apps/
Guarda anche http://www.python.org/about/quotes/ chi lo usa e i commenti. ;)
Io lo uso stabilmente da tre anni a lavoro e ci faccio di tutto.
mad_hhatter
28-09-2007, 08:55
mi permetto di far notare che lui non sta cercando di imparare un linguaggio, ma di iniziare a programmare. La cosa importante non è quindi il linguaggio, ma la mentalità, l'approccio, la consapevolezza delle regole sottese alla programmazione e il rigore metodologico ad esse collegato.
E in quest'ottica un linguaggio amorfo e multi-paradigma come python direi che decisamente dannoso. PRIMA è bene che si renda conto dei diversi aspetti legati alla programmazione, dei vincoli cui il programmatore è sottoposto e delle metriche di qualità di un software, POI può orientarsi a linguaggi meno fiscali, ma più pericolosi quando non si sia ben consci di cosa si sta facendo.
ovviamente questo è il mio personalissimo parere
Non c'è nulla meglio di python a parte tutto il resto.
Scala:
http://www.scala-lang.org/
o Java:
http://java.sun.com/javase/downloads/index.jsp
noooooooo un altro 3d così noooooooo :cry:
Th3 Kn0wl3dg3
28-09-2007, 13:01
credo che allora andrò su java
cdimauro
28-09-2007, 13:20
mi permetto di far notare che lui non sta cercando di imparare un linguaggio, ma di iniziare a programmare. La cosa importante non è quindi il linguaggio, ma la mentalità, l'approccio, la consapevolezza delle regole sottese alla programmazione e il rigore metodologico ad esse collegato.
D'accordo.
E in quest'ottica un linguaggio amorfo e multi-paradigma come python direi che decisamente dannoso.
Non vedo perché: al contrario, ti permette di focalizzare l'attenzione proprio sull'apprendimento dei concetti basilari della programmazione, senza andare a scomodare altri dettagli di più basso livello.
PRIMA è bene che si renda conto dei diversi aspetti legati alla programmazione, dei vincoli cui il programmatore è sottoposto e delle metriche di qualità di un software,
E questo lo può fare benissimo anche con Python.
POI può orientarsi a linguaggi meno fiscali, ma più pericolosi quando non si sia ben consci di cosa si sta facendo.
Suppongo che ti riferisca a C, PHP, PERL, Ruby, ecc., perché Python è molto fiscale.
ovviamente questo è il mio personalissimo parere
Idem.
cdimauro
28-09-2007, 13:21
credo che allora andrò su java
Te lo sconsiglio: prova Python. Per iniziare (ma anche per lavorare) non c'è di meglio. ;)
mad_hhatter
28-09-2007, 13:24
Te lo sconsiglio: prova Python. Per iniziare (ma anche per lavorare) non c'è di meglio. ;)
forse dovresti argomentargliela di più, se no mi senbra un'affermazione sterile... almeno ai fini della sua decisione, no?
mad_hhatter
28-09-2007, 13:36
D'accordo.
Non vedo perché: al contrario, ti permette di focalizzare l'attenzione proprio sull'apprendimento dei concetti basilari della programmazione, senza andare a scomodare altri dettagli di più basso livello.
E questo lo può fare benissimo anche con Python.
Suppongo che ti riferisca a C, PHP, PERL, Ruby, ecc., perché Python è molto fiscale.
Idem.
io parlo di amorfismo e supporto per più paradigmi. E ritengo che un approccio orientato alla didattica, non alla produttività, debba essere focalizzato su pochi concetti chiari e fondanti.
un linguaggio che nasconde il più possibile la complessità è negativo per lo studio, perché studiare significa capire cosa c'è sotto. POI, quando sai cos'hai in mano puoi permetterti di delegare alcune scelte alla macchina, ma finché impari devi sporcarti ben bene le manine.
E' come usare un IDE: per imparare un linguaggio non c'è niente di peggio perché automatizza troppi passaggi, te li nasconde... e tu non impari, sai come si fa a farti fare e cose, ma non sai cosa succede dietro le quinte... e quando avrai bisogno di maggior controllo saranno dolori perché dovrai perdere il tempo che non hai guadagnato all'inizio.
Un linguaggio con un type system dinamico richiede una grossa attenzione a quello che si sta facendo, attenzione e consapevolezza che uno studente, per definizione, non ha e deve acquisire.
Similmente, se uno inizia mischiando paradigmi diversi avrà in tsta una gran confuzione. al contrario se parte distinguendo nettamente i vari paradigmi, riuscirà a estrapolare i pro e i contro dei vari metodi e poi sarà in grado di decidere consapevolmente come comportarsi e come, eventualmente, fondere più approcci... ma se impara a programmare mescolando gli stili, non riuscirà a capire i confini di una metodologia rispetto alle altre
cdimauro
28-09-2007, 13:36
forse dovresti argomentargliela di più, se no mi senbra un'affermazione sterile... almeno ai fini della sua decisione, no?
Gliel'ho già argomentata: ho fornito anche un paio di link in cui se ne discute, visto che è una richiesta ciclica e nel thread da me segnalato se n'é già parlato AMPIAMENTE.
mad_hhatter
28-09-2007, 13:38
faccio notare che fin'ora non ho consigliato neanche un linguaggio: il motivo è che per imparare a programmare, il linguaggio in sè è l'aspetto meno importante
cdimauro
28-09-2007, 13:48
io parlo di amorfismo e supporto per più paradigmi. E ritengo che un approccio orientato alla didattica, non alla produttività, debba essere focalizzato su pochi concetti chiari e fondanti.
Nessuno ti obbliga a passare immediatamente alla programmazione funzionale, o a oggetti o alla metaprogrammazione: se devi imparare puoi benissimo partire dalla basi:
a = raw_input('Inserisci il primo numero: ')
b = raw_input('Inserisci il secondo numero: ')
c = a + b
print 'La somma di', a, 'e', b, 'è', c
Prova a fare lo stesso con un altro linguaggio e confrontalo con quest'esempio.
un linguaggio che nasconde il più possibile la complessità è negativo per lo studio, perché studiare significa capire cosa c'è sotto.
1) Python non nasconde niente.
2) Capire "cosa c'è sotto" non è una condizione necessaria per imparare a programmare, ma al contrario è MOLTO meglio non saperlo e concentrarsi sui concetti di più alto livello.
POI, quando sai cos'hai in mano puoi permetterti di delegare alcune scelte alla macchina, ma finché impari devi sporcarti ben bene le manine.
Al contrario: se è possibile le manine è meglio non sporcarsele mai.
Alla macchina, poi, preferisco delegare esattamente quello che mi aspetto: che risolva il mio problema. E per risolvere un problema NON è assolutamente necessario conoscere i dettagli della macchina su cui sta girando l'applicazione.
E' come usare un IDE: per imparare un linguaggio non c'è niente di peggio perché automatizza troppi passaggi, te li nasconde... e tu non impari, sai come si fa a farti fare e cose, ma non sai cosa succede dietro le quinte... e quando avrai bisogno di maggior controllo saranno dolori perché dovrai perdere il tempo che non hai guadagnato all'inizio.
Quando avrai bisogno di maggior controllo allora studierai per realizzarlo. Nel frattempo è molto meglio spendere proficuamente il proprio tempo non curandosi dei dettagli di basso livello.
L'informatico deve risolvere problemi, e questo non implica null'altro che trovare e implementarne la soluzione.
Un linguaggio con un type system dinamico richiede una grossa attenzione a quello che si sta facendo, attenzione e consapevolezza che uno studente, per definizione, non ha e deve acquisire.
Ma anche no, perché è un linguaggio fortemente tipizzato, per cui roba come
'Pippo' + 1
non te la fa fare e ti bacchetta le manine se ci provi.
Similmente, se uno inizia mischiando paradigmi diversi avrà in tsta una gran confuzione.
Non capisco perché dovresti mischiarli: iniziare significa partire dai mattoncini di base. O tu quando inizi con la matematica ti metti a risolvere sistemi di equazioni differenziali non lineari?
al contrario se parte distinguendo nettamente i vari paradigmi, riuscirà a estrapolare i pro e i contro dei vari metodi e poi sarà in grado di decidere consapevolmente come comportarsi e come, eventualmente, fondere più approcci...
Infatti nessuno t'impedisce di fare esattamente come dici.
Il vantaggio di Python, poi, è che ti permette, con lo stesso linguaggio, di poter usare tanti paradigmi di programmazione, cosa che non puoi fare con tanti altri linguaggi. Esempio: in Java puoi lavorare con la programmazione funzionale? No, per cui saresti costretto a cambiare linguaggio se volessi cimentarti con questo paradigma.
ma se impara a programmare mescolando gli stili, non riuscirà a capire i confini di una metodologia rispetto alle altre
Ripeto: non vedo perché dovrebbe mischiare tutto.
Tra l'altro se inizi con un linguaggio come Java, mica parti subito con gli oggetti (che il paradigma su cui è sostanzialmente basato): parti col concetto di dato, di variabile, di operazione, condizione, ciclo, ecc. ecc. e poi man mano tratti altri concetti più avanzati.
cdimauro
28-09-2007, 13:50
faccio notare che fin'ora non ho consigliato neanche un linguaggio: il motivo è che per imparare a programmare, il linguaggio in sè è l'aspetto meno importante
Al contrario: per iniziare è decisamente comodo un linguaggio con una sintassi molto semplice.
Poi puoi anche iniziare direttamente col linguaggio macchina, ci mancherebbe, ma la difficoltà non è certo la stessa che iniziare con Python. :p
a = raw_input('Inserisci il primo numero: ')
b = raw_input('Inserisci il secondo numero: ')
c = a + b
print 'La somma di', a, 'e', b, 'è', c
Prova a fare lo stesso con un altro linguaggio e confrontalo con quest'esempio.
10 INPUT "Inserisci il primo numero: "; A
20 INPUT "Inserisci il secondo numero: "; B
30 C = A + B
40 PRINT "La somma di ";A;" e ";B;" è ";C
:sofico:
cdimauro
28-09-2007, 14:05
10 INPUT "Inserisci il primo numero: "; A
20 INPUT "Inserisci il secondo numero: "; B
30 C = A + B
40 PRINT "La somma di ";A;" e ";B;" è ";C
:sofico:
A parte i numeri di riga, è semplice pure questo. :)
mad_hhatter
28-09-2007, 14:06
no guarda, non ti seguo sulla strada del confronto tra linguaggi, su chi ti offre cosa o su chi non ti offre qualcos'altro.
Tu continui a parlare di produttività, ma la differenza tra il tuo punto di vista e il suo è che tu sai di cosa hai bisogno, di cosa parli ecc, lui no: lui deve impararlo.
Tu sai distinguere i paradigmi, lui no quindi non saprà dove finisce uno e inizia un altro.
La semplicità della sintassi a livello didattico non c'entra nulla: non stiamo discutendo quale linguaggio è più bello, stiamo parlando di uno che vuole apprendere l'arte della programmazione, non l'arte di programmare in <linguaggio_qualsiasi>.
Se python ti obbliga a produrre codice mantenibile è, paradossalmente, diseducativo: è più educativo sbagliare, rendersi conto che qualcosa non va e correggere un atteggiamneto errato.
poi la programmazione si inoltra anche in problemi di performance, di efficienza, ecc per cui un minimo di consapevolezza della macchina ci vuole... certo che l'aspetto più importante è la modellazione del domininio del problema, ma non c'è solo questo.
è uno studente, non un bambino: non dobbiamo salvarlo delle brutture del mondo della programmazione, deve rendersi conto di quel che fa e di che strumenti ha in mano perché ha scleto un cammino professionale, non hobbistico. Farlo iniziare con un linguaggio che nasconde il più possibile è controproducente: non deve imparare un linguaggio, lo ripeto, deve imparare a programmare
cdimauro
28-09-2007, 14:25
no guarda, non ti seguo sulla strada del confronto tra linguaggi, su chi ti offre cosa o su chi non ti offre qualcos'altro.
Sei tu che hai tirato in ballo i diversi paradigmi di programmazione.
Tu continui a parlare di produttività, ma la differenza tra il tuo punto di vista e il suo è che tu sai di cosa hai bisogno, di cosa parli ecc, lui no: lui deve impararlo.
Infatti la produttività l'hai tirata fuori tu, mentre io mi sono limitato a parlare della questione che era stata posta: IMPARARE A PROGRAMMARE.
Tu sai distinguere i paradigmi, lui no quindi non saprà dove finisce uno e inizia un altro.
Lui non sa nemmeno cos'è un paradigma: è nella condizione migliore per evitare tutte le seghe mentali sull'argomento. :p
La semplicità della sintassi a livello didattico non c'entra nulla: non stiamo discutendo quale linguaggio è più bello, stiamo parlando di uno che vuole apprendere l'arte della programmazione, non l'arte di programmare in <linguaggio_qualsiasi>.
Appunto: apprendere l'arte della programmazione è più facile con un linguaggio dotato di una sintassi più semplice, e che permette anche di evitare di andare a sbattere subito la testa su dettagli di più basso livello.
Ci si concentra sui concetti.
Se python ti obbliga a produrre codice mantenibile è, paradossalmente, diseducativo: è più educativo sbagliare, rendersi conto che qualcosa non va e correggere un atteggiamneto errato.
Python non ti obbliga a scrivere codice manutenibile né tanto meno ti salva da qualunque errore: ti sei perso un thread in cui ho postato una funzione che nessuno, a parte chi conosceva questo linguaggio, capiva come funzionava. :asd:
Questo per dire che il codice scritto coi piedi e bacato lo si può scrivere con qualunque linguaggio.
Certo, è indubbio che con Python non troverai nessun segmentation fault, ma questa è un'OTTIMA cosa. :p
poi la programmazione si inoltra anche in problemi di performance, di efficienza, ecc per cui un minimo di consapevolezza della macchina ci vuole...
Ci vuole SE E SOLO ti rendi conto, alla prova dei fatti, che il codice ha bisogno di prestazioni migliori. E in questo caso PER PRIMA COSA si vede se è possibile realizzare una versione che utilizza ALGORITMI più efficienti, e soltanto in ultima analisi si pensa di spostare parte del codice a un livello più basso.
certo che l'aspetto più importante è la modellazione del domininio del problema, ma non c'è solo questo.
Infatti, ma intanto si affronta questo, che è, appunto, il più importante. Poi SE E' REALMENTE NECESSARIO ci si pone il problema delle prestazioni.
è uno studente, non un bambino: non dobbiamo salvarlo delle brutture del mondo della programmazione,
Quelle le può imparare a prescindere: è una questione di mentalità ed esperienza.
deve rendersi conto di quel che fa e di che strumenti ha in mano perché ha scleto un cammino professionale, non hobbistico.
Lo può fare benissimo con Python.
Farlo iniziare con un linguaggio che nasconde il più possibile è controproducente: non deve imparare un linguaggio, lo ripeto, deve imparare a programmare
Infatti per imparare a programmare, che è il problema in questione, Python è di gran lunga la soluzione migliore.
E poi non ti nasconde niente: SE lo ritieni opportuno puoi andare a scavare nei dettagli più "a basso livello" del linguaggio e della sua implementazione. Ovviamente l'augurio è di non arrivare mai a perdere tempo su queste cose.
Infatti per imparare a programmare, che è il problema in questione, Python è di gran lunga la soluzione migliore.
Anche del "Codice di istruzioni simboliche di uso generale per principianti" ? :D
cdimauro
28-09-2007, 14:47
In generale direi di sì. :)
DioBrando
28-09-2007, 15:14
Paiton.
Perchè:
- ha una sintassi semplice da leggere, che si avvicina di + degli altri linguaggi ed al lessico utilizzato nelle azioni e ragionamenti che compiamo quotidianamente.
- incorpora tutte le caratteristiche dei linguaggi ad alto livello moderni
- i suoi utilizzi sono all'avanguardia (così come lo sono le industrie che ne fanno uso) e vanno dai webservices allo sviluppo per device mobili.
- ha una buona documentazione ed una community solida alle spalle
- ha un parco strumenti molto variegato ( ma non troppo dispersivo come per altri linguaggi) che soddisfa tutti i tipi di esigenze ed utilizzatori. L'editor incluso nel SDK (pochi mega a differenza di quel bisonte del corrispettivo Java) và benissimo per iniziare, ma ci sn anche plugin per gli IDE + usati e validi sul mercato, da Visual Studio a Eclipse tanto per citarne due.
Molti commettono l'errore secondo me di cominciare con un linguaggio che poi verrà utilizzato nel corso di Programmazione 1 perchè così pensano "mi avvantaggio" e tipicamente sarà C o Java.
E a volte anche i professori ci mettono del loro confondendo l'obiettivo finale che è imparare (diciamo apprendere le basi via) a programmare e non imparare a programmare nel linguaggio X.
Invece la scelta dev'essere quella di prendere lo strumento migliore che mi consenta di apprendere queste basi. E' lo strumento migliore al momento, IMHO, è proprio Python, non c'è nulla di + didattico.
Tutti quelli che vogliono cominciare a smanettare hanno bisogno di capire quello che c'è scritto e di come funziona e oggettivamente la sintassi di Python tra tutte quelle citate è nettamente la + chiara, anche quando si passa a sorgenti + complessi.
Inoltre, cosa non affatto trascurabile, COSTRINGE attraverso il tipo di indentazione ad essere ordinati, cosa che nell'ambito del problema di manutenibilità del codice è FONDAMENTALE.
Una volta apprese le basi, quando dovrai studiare C (bleah :D), Java o quel che sia, si tratterà di applicare gli stessi concetti imparati precedentemente ma con una sintassi parzialmente diversa.
Niente di trascendentale.
Il vantaggio sarà però quello di avere acquisito competenze maggiori rispetto ai tuoi colleghi in primis, in secundis, quando ti troverai davanti al paradigma OO, rispetto a quelli che per la prima volta lo vedranno applicato in C++ o Java, non ti sembrerà così astruso (perchè appunto avrai avuto a che fare con Python.
E fidati che le prime volte in cui ti trovi a navigare in quell'universo dominato al caos qual'è il mondo delle API per Java (per non parlare di scrivere pagine JSP) ti viene da pensare perchè non ti sei scelto un altro indirizzo.
cdimauro
28-09-2007, 15:21
:ave: :ave: :ave:
Parole sante. :)
mindwings
28-09-2007, 15:44
al primo anno di uni (informatica tps) , ho studiato in maniera non troppo approfondita :cry: java , adesso sto studiando il C++ dai deitel :fagiano:
imho nulla è difficile :read: . Scegliti un buon buon manuale (questo è il mio consiglio) ;)
cdimauro
28-09-2007, 15:51
Che nulla sia difficile è ovvio... avendo sufficiente tempo. :D
Però ci sono linguaggi che ti permettono di sprecarne molto meno, e soprattutto senza troppi mal di testa.
Vedi il post di DioBrando che è piuttosto eloquente. ;)
DioBrando
28-09-2007, 16:07
:ave: :ave: :ave:
Parole sante. :)
susu alzati che poi mi imbaVazzo :D
cmq non ho detto niente di speciale, ringraziamo Guido al max :p che ci ha fornito queste caratteristiche.
E poi ho dato in realtà un piccolo esempio di esperienza diretta.
Ho cominciato con Java proprio perchè (anzi a dirla tutta ho cominciato con C++, rigettandolo dopo un paio di mesi :asd: ) all'Università quella era la scelta.
Niente di male, voglio dire Java è senz'altro + didattico di C, ma quando si arriva al grosso, ai Design Patterns e compagnia, solo per citarne un aspetto, mi spiace ma non c'è proprio paragone.
Inoltre, a mio modo di vedere i progetti maggiormente interessanti del panorama software (specialmente weboriented) ora come ora, escluso l'ambiente NET, sono proprio sviluppati in Python.
killer queen
28-09-2007, 18:28
ciao a tutti ho 14 anni e vorrei dare il mio parere.....
anche io sto imparando a programmare e secondo me
il c++ e più coinvolgente.....
ciao a tutti ho 14 anni e vorrei dare il mio parere.....
anche io sto imparando a programmare e secondo me
il c++ e più coinvolgente.....
anche io ho cominciato alla tua età col c++ ma quando (molti anni dopo) ho imparato VERAMENTE il c++ mi sono accorto che non avevo capito proprio nula, perchè usavo il c++ proceduralmente... secondo me, come hanno detto in maniera migilore molti altri prima di me :p , non c'è niente di meglio di un linguaggio semplice sintatticamente ma che ti permetta anche di essere ordinato (l'indentazione obbligatoria di python in questo è veramente didattica) e ti permetta quindi di imparare la programmazione senza doversi sbattere su sintassi e costrutti malsani
killer queen
28-09-2007, 18:42
ok accetto il tuo consiglio devo allora cambiare linguaggio prima di entrare nel profondo del c++!!!!:)
Th3 Kn0wl3dg3
28-09-2007, 18:52
scusate se mi intrometto(anche se la discussione l'ho aperta io!). Voi qua state tralasciando completamente l'oggetto del mio post, cioè un consiglio su quale linguaggio utilizzare per imparare a programmare. vi ho detto che non ho mai programmato anche se amo tutto ciò che riguarda informatica e tecnologia e che andrò ad ingegneria o scienze informatiche perchè voglio arrivare a livelli più alti possibili nel mondo della informatico e della programmazione. con tutte questi botta e risposta non mi siete stati molto d'aiuto. ho deciso di iniziare con python, sono più convinto. se nessun'altro deve dare un parere valido qualcuno sarebbe cosi gentile da linkarmi una guida fatta bene che parte da zero per python o anche se ci sono dei libri cosi li ordino? grazie
se per te non è un problema l'inglese (e non dovrebbe esserlo se vuoi veramente lanciarti in questo mondo :p ) allora questa guida è, credo, esattamente quello che ti serve:
http://http://www.ibiblio.org/obp/thinkCSpy/ (http://www.ibiblio.org/obp/thinkCSpy/)
Th3 Kn0wl3dg3
28-09-2007, 19:13
so benissimo che l'inglese si deve sapere e io lo conosco abbastanza e la amo molto come lingua, infatti tengo sempre il vocabolario di inglese accanto, però non credo di conoscerlo tanto bene da poter studiare un linguaggio di programmazione, soprattutto partendo da zero essendo che non ho mai programmato.
comunque la guida che mi hai linkato non va
scusami ci stava un http:// di troppo ora dovrebbe andare :p mi dispiace in italiano non ne conosco, prova sui soliti html.it o roba del genere magari!
variabilepippo
28-09-2007, 19:38
Le guide in italiano per principianti le trovi in questo sito (http://www.python.it/doc/newbie.html).
Th3 Kn0wl3dg3
28-09-2007, 20:28
grazie. cmq nel link di prima anche se toglievo l'http superfluo mi apriva wikipedia
cdimauro
28-09-2007, 20:46
ok accetto il tuo consiglio devo allora cambiare linguaggio prima di entrare nel profondo del c++!!!!:)
Onestamente spero che tu non abbia la sfortuna di dover lavorare col C++ o, peggio ancora, col C. :D
Programmare, per quanto possibile, dev'essere una gioia, non un supplizio. :p
x Th3 Kn0wl3dg3: la versione in italiano del bellissimo libro che ti hanno segnalato la trovi nel link che ti è stato fornito, ed ovviamente lo stesso consiglio che ti do io. :)
Perry_Rhodan
28-09-2007, 21:54
una raccolta di materiale interessante (ovviamente in anglese)
http://www.comms.scitech.susx.ac.uk/fft/
Onestamente spero che tu non abbia la sfortuna di dover lavorare col C++ o, peggio ancora, col C. :D
Programmare, per quanto possibile, dev'essere una gioia, non un supplizio. :p
questo credo sia vero in parte..devo dire che ho fatto dei programmi di analisi numerica e simulazione di alcuni (semplici) modelli fisici in C e in java o in python credo che avrebbero girato molto più lentamente :P
Th3 Kn0wl3dg3
29-09-2007, 05:57
questo credo sia vero in parte..devo dire che ho fatto dei programmi di analisi numerica e simulazione di alcuni (semplici) modelli fisici in C e in java o in python credo che avrebbero girato molto più lentamente :P
non fatemi venire dubbi....
cdimauro
29-09-2007, 06:12
questo credo sia vero in parte..devo dire che ho fatto dei programmi di analisi numerica e simulazione di alcuni (semplici) modelli fisici in C e in java o in python credo che avrebbero girato molto più lentamente :P
In Java non credo, perché è abbastanza veloce (idem per il C#), in Python sicuramente se non fai uso di apposite librerie http://wiki.python.org/moin/NumericAndScientific che ti semplificano la vita e che sono ottimizzate allo scopo.
Sempre che la velocità, comunque, sia un fattore importante, e ciò non è sempre vero fortunatamente. ;)
cdimauro
29-09-2007, 06:16
non fatemi venire dubbi....
Non ti preoccupare: abbi fede (detto da un ateo fa quanto meno ridere :asd:).
In primo luogo gli strumenti ci sono (vedi link che ho postato), e in secondo luogo Python si può estendere come si vuole per ottimizzare parti del codice che EVENTUALMENTE (lo evidenzio) dovessero risultare critiche per il tipo di applicazione: http://docs.python.org/ext/ext.html
Al solito, la mia speranza è che tu NON debba arrivare a un livello così basso, ma che ti goda Python così com'è. :)
ma ancora sta storia del linguaggio migliore?? :eekk:
non è per dire.. ma uno che vuole iniziare a programmare e non sa da cosa iniziare parte già col piede sbagliato IMHO
per il resto tutti i discorsi che portano a concludere che un linguaggio è più adatto di un altro sono basati sull'aria più o meno :asd: :read: :fuck:
AnonimoVeneziano
29-09-2007, 11:21
Io veramente vorrei iniziare a programmare perchè dopo il diploma voglio andare o a ingegneria informatica o a scienze informatiche e poi lo vorrei fare per lavoro, non per hobby. apparte questo molti mi hanno consigliato anche java perchè ha un vasto campo applicativo e si usa sia per fare di tutto. da niubbo il quale sono python non mi attira molto, una volta per caso avevo letto la documentazione, si è vero che è semplice la sintassi, ma non so perchè non mi convince
IMHO se lo fai per l'università allora inizia ad impararti il linguaggio con la quale in uni ti introdurrebbero al mondo della programmazione. Controlla nelle informazioni del primo corso di programmazione che ti propongono nell'università che hai scelto.
Per esempio io frequento Ing. informatica al Politecnico di Milano e al primo anno , nel primo corso di programmazione, ci hanno presentato il C standard. Conoscendo già il C al momento dell' esame (e anche durante il laboratorio) è stata una passeggiata. Ti semplifica molto la vita. Controlla qual'è il linguaggio insegnato per primo nella tua università e imparati quello.
Ciao
Th3 Kn0wl3dg3
29-09-2007, 11:47
ancora non so in che università andare e poi se ne parla il prossima anno perchè ho perso un anno al liceo(sempre perstare ore ed ore al computer, sui palmari, lettori, aggiustare computer alle persone ecc ecc). forse però quella di studiare il linguaggio che potrebbero presentare all'università non è una brutta idea..anzi. però io vorrei iniziare ad imparare un a programmare e a conoscere un linguaggio subito. quindi come faccio? dovrei andare ad occhi chiusi.. io sono dell'idea che java è uno stupendissimo linguaggio...
IMHO se lo fai per l'università allora inizia ad impararti il linguaggio con la quale in uni ti introdurrebbero al mondo della programmazione. Controlla nelle informazioni del primo corso di programmazione che ti propongono nell'università che hai scelto.
Per esempio io frequento Ing. informatica al Politecnico di Milano e al primo anno , nel primo corso di programmazione, ci hanno presentato il C standard. Conoscendo già il C al momento dell' esame (e anche durante il laboratorio) è stata una passeggiata. Ti semplifica molto la vita. Controlla qual'è il linguaggio insegnato per primo nella tua università e imparati quello.
Ciao
Quoto AnonimoVenezioano...
Io faccio informatica e anche da noi ci han fatto programmare in C...se dovessi sceglere di programmare con quello son sicuro che all'universita (sempre che facciate quello, ma penso di si) ti troverai molto bene
Dopo approfondimenti mi rimangio il suggerimento "Scala". Mi resta Java.
credo che allora andrò su java
Concordo. Per Python ci sarà sempre tempo, visto che vuoi andare ad ingegneria.
Th3 Kn0wl3dg3
29-09-2007, 14:46
vada per java. link per newbie?
In italiano:
http://www.java-net.it/jmonline/introduzione/indice.htm
Parti dal capitolo 2.
Scarica e installa Netbeans (primo link):
http://java.sun.com/javase/downloads/netbeans.html
Poi puoi tranquillamente scegliere se usarlo o no. Comunque ti installa un IDE (Netbeans) un SDK (per produrre programmi java) e un JRE (per eseguire programmi java).
Qui c'è la documentazione on-line dell'SDK
http://java.sun.com/javase/6/docs/
che puoi anche scaricare
http://java.sun.com/javase/downloads/index.jsp (verso il fondo, Java SE 6 Documentation -> download)
Th3 Kn0wl3dg3
29-09-2007, 17:29
grazie mille!!
cdimauro
29-09-2007, 20:02
ma ancora sta storia del linguaggio migliore?? :eekk:
non è per dire.. ma uno che vuole iniziare a programmare e non sa da cosa iniziare parte già col piede sbagliato IMHO
per il resto tutti i discorsi che portano a concludere che un linguaggio è più adatto di un altro sono basati sull'aria più o meno :asd: :read: :fuck:
Questa non è la classica diatriba sul linguaggio "migliore", che abbiamo già affrontato e risolto: non esiste, sono tutti turing-completi, ed è una questione di gusti.
Si tratta, invece, del (anch'esso noto e reiterato) problema del linguaggio da scegliere per INIZIARE a programmare, e per questo Python, com'è stato ampiamente discusso, è sicuramente il candidato ideale.
cdimauro
29-09-2007, 20:05
ancora non so in che università andare e poi se ne parla il prossima anno perchè ho perso un anno al liceo(sempre perstare ore ed ore al computer, sui palmari, lettori, aggiustare computer alle persone ecc ecc). forse però quella di studiare il linguaggio che potrebbero presentare all'università non è una brutta idea..anzi. però io vorrei iniziare ad imparare un a programmare e a conoscere un linguaggio subito. quindi come faccio? dovrei andare ad occhi chiusi.. io sono dell'idea che java è uno stupendissimo linguaggio...
vada per java. link per newbie?
Mi spiace che tu abbia deciso di desistere dall'uso di Python. A mio avviso, date le tue premesse, era sicuramente il linguaggio migliore.
Tra l'altro hai detto che hai ancora un anno davanti, e in questo tempo IMHO potresti fortificarti nei fondamenti della programmazione andando avanti in maniera semplice e acquisendo la giusta mentalità, ma soprattutto divertendoti e senza tanti grattacapi.
Passare poi ad altri linguaggi non ti sarebbe stato difficile.
Ripensaci.
Questa non è la classica diatriba sul linguaggio "migliore", che abbiamo già affrontato e risolto: non esiste, sono tutti turing-completi, ed è una questione di gusti.
Scusa l'ignoranza : con l'espressione "turing-completi" intendi Alan Turing?
Non capisco comunque cosa significhi l'espressione.
Edit - tanto per rientrare in topic : How to think like a computer scientis, per chi non lo sapesse è disponibile in italiano, ben tradotto, nella sezione Newbie (http://www.python.it/doc/newbie.html) di Python.it (http://www.python.it/).
Credo che sia necessario uno stimolo continuo per imparare a programmare. E' inutile dire che programmare è divertente, se poi il 99% della gente abbandona al primo approccio.
Gli inizi sono frustranti per tutti.
Piuttosto che consigliare questo o quel libro, potremmo pensare a qualche idea da prestare ai nuovi del mondo della programmazione.
Qualcuno, in questo stesso topic, ha consigliato di cominciare dal Python perchè più semplice e dovrebbe rendere accessibili i concetti base della programmazione in modo molto più veloce (e a mio avviso, dovendo ricominciare, partirei dal libro di A.Downey). Non credo che la scelta del linguaggio con cui cominciare possa influire sull'apprendimento delle basi.
Alla fin dei conti, secondo me (anche se spero che sia un'idea condivisa dai più), un buon programmatore dovrebbe essere capace di saltare da un linguaggio all'altro senza troppa fatica ed in poco tempo, non essere incatenato su uno stesso linguaggio : questo è possibile solo con solide basi (come in ogni attività umana, solo delle buone basi permettono di andare lontano).
D'altronde si programmava anche prima dell'invenzione dei moderni computer (proprio Turing creò un programma per giocare a scacchi e fu costretto ad eseguire i calcoli a mano dato che non c'erano calcolatori abbastanza potenti per eseguire i calcoli). Quindi la scelta del linguaggio influisce poco e niente.
EDIT2 : Per quanto riguarda la mia idea riguardo al cominciare a programmare divertendosi o comunque con uno stimolo continuo, ho due proposte :
1) Provare,provare,provare,provare e ancora provare
2) Leggere questo libro (http://www.amazon.com/Beginning-C-Game-Programming-Development/dp/1592002056)
cdimauro
29-09-2007, 21:20
Scusa l'ignoranza : con l'espressione "turing-completi" intendi Alan Turing?
Sì.
Non capisco comunque cosa significhi l'espressione.
Che i linguaggi turing-completi sono "equipotenti".
In soldoni: il dominio delle applicazioni che sono in grado di computare è lo stesso.
In parole povere: ogni linguaggio è in grado di "fare le stesse cose".
Edit - tanto per rientrare in topic : How to think like a computer scientis, per chi non lo sapesse è disponibile in italiano, ben tradotto, nella sezione Newbie (http://www.python.it/doc/newbie.html) di Python.it (http://www.python.it/).
L'avevamo segnalato, comunque... repetita iuvant. :p
Credo che sia necessario uno stimolo continuo per imparare a programmare. E' inutile dire che programmare è divertente, se poi il 99% della gente abbandona al primo approccio.
Gli inizi sono frustranti per tutti.
Piuttosto che consigliare questo o quel libro, potremmo pensare a qualche idea da prestare ai nuovi del mondo della programmazione.
Qualcuno, in questo stesso topic, ha consigliato di cominciare dal Python perchè più semplice e dovrebbe rendere accessibili i concetti base della programmazione in modo molto più veloce (e a mio avviso, dovendo ricominciare, partirei dal libro di A.Downey). Non credo che la scelta del linguaggio con cui cominciare possa influire sull'apprendimento delle basi.
Alla fin dei conti, secondo me, un buon programmatore dovrebbe essere capace di saltare da un linguaggio all'altro senza troppa fatica ed in poco tempo, non essere incatenato su uno stesso linguaggio, e questo è possibile solo con solide basi (come in ogni attività umana, solo basi solide permettono di andare lontano).
Certamente, ma proprio per questo è meglio scegliere un linguaggio semplice, ma comunque "potente" (nel senso di espressivo) per potersi creare le basi più velocemente e senza troppi mal di testa.
Meglio focalizzarsi sui concetti fondamentali, insomma.
Poi il buon programmatore, come dici tu, non avrà difficoltà a passare ad altri linguaggi, ma intanto si sarà risparmiato tante seccature.
La scelta di Python, tra l'altro, permetterebbe di potersi fare un bagaglio culturale più consistente, visto che il linguaggio permette di approcciarsi agevolmente e in maniera semplice a diversi paradigmi di programmazione (strutturato, funzionale, a oggetti, ad aspetti, e anche la metaprogrammazione), mentre tanti altri sono decisamente limitati (ne offrono soltanto alcuni, se non addirittura uno).
Sarebbe un'esperienza completa (se vissuta fino in fondo, ovviamente).
Il tutto ovviamente non di colpo, ma progressivamente (e in questo libri come quello citato didatticamente sono ottimi).
cdimauro
29-09-2007, 21:23
EDIT2 : Per quanto riguarda la mia idea riguardo al cominciare a programmare divertendosi o comunque con uno stimolo continuo, ho due proposte :
1) Provare,provare,provare,provare e ancora provare
2) Leggere questo libro (http://www.amazon.com/Beginning-C-Game-Programming-Development/dp/1592002056)
http://www.pygame.org/news.html
http://www.pygame.org/wiki/tutorials
http://rene.f0o.com/mywiki/PythonGameProgramming
;)
Che i linguaggi turing-completi sono "equipotenti".
In soldoni: il dominio delle applicazioni che sono in grado di computare è lo stesso.
In parole povere: ogni linguaggio è in grado di "fare le stesse cose".
Pressappoco è quello che avevo intuito. Turing nella vita quotidiana non lo sento nominare spesso (no, a dire il vero non l'ho mai sentito "nominare", quindi magari sbaglio pure pronuncia), è alquanto emozionante leggerne al di fuori di saggi specifici (in soldoni : è la prima volta che lo trovo dinanzi senza andarmelo a cercare).
Per il resto mi sembra che siamo sulla stessa lunghezza d'onda.
Domani darò un'occhiata ai link che hai postato (su pygame ho scritto anche un tutorial eoni addietro, non avevo nemmeno la barba :^).
Ora ho bisogno di aria.
Th3 Kn0wl3dg3
30-09-2007, 10:17
io sono ancora fermo allo stesso punto di quando ho aperto il post, mi sto solo confondendo con tutti questi discorsi
cdimauro
30-09-2007, 10:37
Il tuo scopo non era quello di IMPARARE A PROGRAMMARE?
Se sì, io e altri la risposta te l'abbiamo già fornita e ampiamente argomentata da un pezzo: scegli Python come linguaggio. Didatticamente (ma non solo per questo) non c'è di meglio.
Hai un anno di tempo per farti delle BUONE BASI partendo col piede giusto.
Passare a un qualunque altro linguaggio una volta imparato a programmare sarà poi una questione di mero esercizio.
Fidati.
Questa non è la classica diatriba sul linguaggio "migliore", che abbiamo già affrontato e risolto: non esiste, sono tutti turing-completi, ed è una questione di gusti.
Si tratta, invece, del (anch'esso noto e reiterato) problema del linguaggio da scegliere per INIZIARE a programmare, e per questo Python, com'è stato ampiamente discusso, è sicuramente il candidato ideale.
invece secondo me è la solita diatriba :fagiano:
non è detto che un linguaggio semplice da imparare sia la scelta migliore, ma anche se lo fosse il python non è il solo ad avere una sintassi "semplice"
il punto della questione è che per imparare a programmare bisogna imparare risolvere problemi mediante algoritmi e questo lo puoi fare in qualsiasi linguaggio esistente. il più adatto a questo compito per quello che mi riguarda rimane il pascal, ma ci sono spesso casi in cui mi viene da consigliare altro (questo perchè non esisterà mai IL linguaggio migliore per imparare).
in questo caso Th3 Kn0wl3dg3 ha detto che java gli sembra stupendo, quindi il mio consiglio è quello di imparare java, perchè la volontà/passione/determinazione è la prima cosa che conta in questo caso, non la facilità della sintassi ecc..
java ha il vantaggio di avere una documentazione eccellente, una comunità vastissima e se poi vuole studiare informatica da java ci deve passare per forza, non esiste un corso di studi che non prevede java
@Th3 Kn0wl3dg3
detto questo mi domando perchè hai creato questo thread invece che metterti a imparare java :fagiano: sii determinato ;)
cdimauro
30-09-2007, 10:47
invece secondo me è la solita diatriba :fagiano:
non è detto che un linguaggio semplice da imparare sia la scelta migliore,
Ti sei risposto da solo, visto che l'obiettivo è proprio quello di imparare a programmare. :p
ma anche se lo fosse il python non è il solo ad avere una sintassi "semplice"
Puoi farci altri esempi allora?
il punto della questione è che per imparare a programmare bisogna imparare risolvere problemi mediante algoritmi e questo lo puoi fare in qualsiasi linguaggio esistente.
Già detto prima: sono tutti equipotenti. Per imparare, però, non sono tutti uguali.
il più adatto a questo compito per quello che mi riguarda rimane il pascal,
Lo sai che parli con un pascaliano convinto, vero? :D
Nonostante ciò, per lo scopo prefisso la scelta migliore non è nemmeno il Pascal.
ma ci sono spesso casi in cui mi viene da consigliare altro (questo perchè non esisterà mai IL linguaggio migliore per imparare).
Trovamene un altro che possa prendere il posto di Python allora, e poi li confronteremo.
in questo caso Th3 Kn0wl3dg3 ha detto che java gli sembra stupendo, quindi il mio consiglio è quello di imparare java, perchè la volontà/passione/determinazione è la prima cosa che conta in questo caso, non la facilità della sintassi ecc..
Sai quanta gente, dopo aver imparato a programmare con altri linguaggi, provando Python ha cambiato idea e adesso ci lavora e/o lo consiglierebbe?
Un'impressione di per sé non vuol dire proprio niente, a maggior ragione adesso che deve iniziare.
java ha il vantaggio di avere una documentazione eccellente, una comunità vastissima e se poi vuole studiare informatica da java ci deve passare per forza, non esiste un corso di studi che non prevede java
Anche Python ha una buona documentazione e una comunità estremamente attiva.
Inoltre è vero che Java è previsto in diversi corsi di studi, ma visto che è un linguaggio che offre un paradigma di programmazione, in altri corsi sarà costretto a imparare altri linguaggi (funzionali, strutturati).
Python ha il vantaggio di abbracciare diversi paradigmi di programmazione, e lo fa in maniera semplice ed elegante: passare poi ad altri linguaggi sarà un mero esercizio.
@Th3 Kn0wl3dg3
detto questo mi domando perchè hai creato questo thread invece che metterti a imparare java :fagiano: sii determinato ;)
Perché se uno deve cominciare a fare qualcosa di cui è a digiuno, è a dir poco ovvio che chieda consiglio a chi ha già esperienza in materia.
Lui vuole iniziare a programmare e questa, "casualmente", è una sezione dedicata a quest'arte.
Th3 Kn0wl3dg3
30-09-2007, 10:51
è evidente ormai che la scelta debba ricadere su python o java... molti di voi consigliate python, ma java imho ha più campi apllicativi rispetto a python.. spero di non aver detto una ca...
cdimauro
30-09-2007, 11:03
è evidente ormai che la scelta debba ricadere su python o java... molti di voi consigliate python, ma java imho ha più campi apllicativi rispetto a python.. spero di non aver detto una ca...
Guarda, da ben tre anni lavoro in azienda e uso quasi esclusivamente Python per scrivere server e applicazioni di ogni tipo.
Nel campo dei videogiochi ormai la parte di scripting si sta spostando su linguaggi come Python o LUA (e NON Java).
Google, Yahoo, IBM, persino la NASA usano Python per gli scopi più disparati.
Parlare di campi applicativi al momento è prematuro, visto che devi iniziare.
Ciò non toglie che, dopo aver imparato a programmare, passare a un altro linguaggio di programmazione non ti sarà difficile.
Al momento, però, devi imparare, e IMHO non c'è scelta migliore di Python.
Se non ne sei ancora convinto possiamo provare con degli esempi di problemi e vedere in che modo vengono risolti in Python, Java, o qualunque altro linguaggio: giudicherai tu, leggendo il codice, quale linguaggio ti ispira di più per iniziare. ;)
P.S. Porto a spasso la mia famiglia. :)
Se qualcuno nel frattempo vuole iniziare a pensare a qualche problema da risolvere, lo faccia pure. Ci sentiamo stasera o domani eventualmente.
@cdimauro
il fatto che un linguaggio è semplice da imparare non significa che sia la scelta migliore per imparare a programmare.. altrimenti avrei consigliato VB6 :stordita:
oltre a python altri linguaggi con una sintassi semplice sono (scontando dimenticanze varie) i vari basic, pascal e (si lo so questo scatenerà le ire di tutto il thread) C. io sostengo pascal perchè i vari basic sono deprecati :D e C ha una sintassi semplice ma non una semantica semplice :O
python è un linguaggio abbastanza particolare, per questo non lo consiglierei io, ma mi è anche capitato di consigliarlo nel caso la persona era particolarmente interessata (quando una persona è determinata non bisogna contraddirla perchè la si confonde e basta).
come dicevo prima la cosa più importante è la volontà di imparare, quindi contano anche cose poco oggettive, come la simpatia ad esempio :sofico:
Th3 Kn0wl3dg3
30-09-2007, 12:33
ok cdimauro.. proviamo il tuo metodo, quello dei problemi. fammi vedere qualche cosa
E' interessante. Vediamo un po'. Aprire una finestra, in Java.
import java.awt.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new ApplicationStarter());
}
}
class ApplicationStarter implements Runnable {
public void run() {
JFrame window = new JFrame("Hello world");
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
window.setSize(400, 400);
window.setVisible(true);
}
}
Qui c'è la documentazione di quello che vedi usato là sopra:
EventQueue (http://java.sun.com/javase/6/docs/api/java/awt/EventQueue.html)
Runnable (http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html)
JFrame (http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html)
Funziona su:
Windows 95, 98, 2000, XP, Vista (32/64bit), MacOSX, Linux (32/64bit, Gnome o KDE), Solaris, OS/2, AIX, FreeBSD
Questo è il tutorial ufficiale su Swing:
http://java.sun.com/docs/books/tutorial/uiswing/index.html
Qui c'è una serie di articoli sulla creazione di un'applicazione Java:
http://java.sun.com/developer/onlineTraining/new2java/divelog/part1/
Un elenco della bibliografia sulla libreria (standard, cioè già presente nella piattaforma java) Swing lo trovi qui (http://www.amazon.com/s/ref=sr_nr_n_15/103-1664312-2127843?ie=UTF8&rs=5&keywords=swing&rh=n%3A1000%2Ck%3Aswing%2Cn%3A5%2Cn%3A3839). Sono libri che trattano di Swing (una fettina della piattaforma Java).
variabilepippo
30-09-2007, 13:26
L'equivalente Python (http://wiki.wxpython.org/Getting_Started#head-6e8427493dcc765fb873a1838adfbd6b8d08e0ee) è:
import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, wx.ID_ANY, "Hello World")
frame.Show(True)
app.MainLoop()
Il tuo programma mi da un errore:
Microsoft Windows XP [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
X:\gametest>python app.py
Traceback (most recent call last):
File "app.py", line 1, in <module>
import wx
ImportError: No module named wx
X:\gametest>
Piattaforma Python 2.5.1, Windows XP Home sp2
variabilepippo
30-09-2007, 13:51
E' possibile sviluppare interfacce grafiche in Python usando diversi framework (QT, TkInter, wxWidgets, GTK, ...), l'esempio proposto necessita che wxPython (http://www.wxpython.org/) sia installato sul PC.
Lo so :).
Questo crea e salva un'immagine bitmap (la classica texture a scacchi) in formato BMP:
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class Main {
public static void main(String[] args) {
GeneratoreBitmap g = new GeneratoreBitmap();
g.generaBitmap();
}
}
class GeneratoreBitmap {
public void generaBitmap() {
BufferedImage immagine = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = immagine.createGraphics();
graphics.setPaint(Color.WHITE);
graphics.fillRect(0, 0, 128, 128);
graphics.fillRect(128, 128, 128, 128);
graphics.setPaint(Color.BLACK);
graphics.fillRect(0, 128, 128, 128);
graphics.fillRect(128, 0, 128, 128);
try {
salvaBitmap(immagine);
} catch(IOException ex) {
System.out.println("Si è verificato un errore durante il salvataggio");
ex.printStackTrace();
}
}
private void salvaBitmap(BufferedImage immagine) throws IOException {
File file = new File("immagine.bmp");
ImageIO.write(immagine, "bmp", file);
}
}
Qui c'è la documentazione degli strumenti usati:
BufferedImage (http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html)
Graphics2D (http://java.sun.com/javase/6/docs/api/java/awt/Graphics2D.html)
Color (http://java.sun.com/javase/6/docs/api/java/awt/Color.html)
IOException (http://java.sun.com/javase/6/docs/api/java/io/IOException.html)
System (http://java.sun.com/javase/6/docs/api/java/lang/System.html)
File (http://java.sun.com/javase/6/docs/api/java/io/File.html)
ImageIO (http://java.sun.com/javase/6/docs/api/javax/imageio/ImageIO.html)
Qui c'è il tutorial ufficiale:
http://java.sun.com/docs/books/tutorial/2d/index.html
Vi risparmio l'elenco di libri :D.
Ps.: naturalmente siamo sempre nell'alveo della piattaforma Java standard, quella predefinita, il precotto, chiamatelo come volete.
PGI come la solito ha preso nel segno. Il framework di Java è il punto forte del linguaggio. Il fatto di trovare TUTTA la documentazione nel solito posto è indubbiamente un grossissimo vantaggio.
Al contrario Python, come altri d'altronde, deve ricorrere a librerie da installare e da configurare che possono creare notevoli problemi, soprattutto ad un principiante.
DioBrando
30-09-2007, 15:23
è evidente ormai che la scelta debba ricadere su python o java... molti di voi consigliate python, ma java imho ha più campi apllicativi rispetto a python.. spero di non aver detto una ca...
se parliamo in termini di quantità di programmi e di gente che ci lavora forse sì, anche perchè Java ha goduto di parecchio hype (all'inizio anche giustificato) a scapito di altri ( e Python nasce negli stessi anni).
Ma non se ci riferiamo ai campi di applicazione, perchè per esempio Python ha un uso anche di tipo missioncritical (esempio la NASA) o dove i tempi di esecuzione sono molto stretti, come nelle applicazioni real-time.
Python viene usato parecchio anche per il rendering 3D, dalla LucasArts per esempio, ma anche da programmi che avrai sentito come Blender e Maya.
Quindi è vero che numericamente magari il computo è inferiore ma QUALITATIVAMENTE assolutamente no, anzi.
In ogni caso sì le scelte si riducono a quei due, sono entrambi didattici, grosse comunità, documentazione ecc., anche se io ti ho elencato i motivi per cui secondo me sia preferibile Python.
Il discorso dei paradigmi è complesso, ma come accennato da Cesare, è un motivo in + per preferirlo.
Per il manuale non sò se ti è già stato consigliato ma c'è un libro che ha scritto Marco Beri e che ho avuto il piacere di conoscere personalmente, molto ben fatto...ed è edito dall'Apogeo, fà parte della serie Pocket e si chiama proprio "Python".
Costa 7 Euro, ci sono esempi di codice, scritto con uno stile tecnico ma abbastanza leggero (io l'ho comprato proprio all'inizio della mia "avventura pitonesca :D).
Per iniziare comunque sfogliati il classico DiveIntoPython che immagino sia già stato menzionato :)
Ribadisco invece la mia disapprovazione verso scelte orientate al C/C++ e affini.
E' vero ti avvantaggi se poi lo utilizzi nel corso di Programmazione1, perchè impari i costrutti prima di studiarlo all'Università ma quel tempo che avrai risparmiato lo perderai moltiplicato per n volte quando ti troverai ad affrontare problemi da risolvere + complessi e soprattutto modi di ragionare diversi dalla logica con cui si scrivono programmi in C e C++, perchè sono linguaggi meno flessibili e nati in tempi in cui il modo di programmare era molto diverso da quello odierno. (scusa se sono criptico e magari capisci poco del mio discorso, ma quando avrai affrontato corsi di programmazion e affini ti torneranno + chiari...ora non voglio metterti + confusione in testa di quanta non ne hai già :))
Tu vuoi imparare a programmare, non vuoi imparare a programmare in C o C++ o cos'altro, altrimenti sceglieresti un corso professionale da 400 ore e morta lì (solo che poi non avresti la flessibilità, di fronte a situazioni da risolvere con linguaggi diversi, che ha invece un universitario).
Quindi devi scegliere un linguaggio, che ti faccia risparmiare tempo, che non ti complichi la vita con una sintassi difficile e che ti metta a disposizione strumenti in grado di capire quello che fai, come lo fai e se il percorso giusto per risolvere un problema X e che magari anche ti "diverta".
Questa è la mia idea.
Quindi Python per me è la scelta migliore, Java in seconda battuta (molto meglio cmq delle alternative proposte, Pascal compreso).
Scegli tu :)
Il discorso delle prospettive è un punto a sfavore, specialmente per Python che, come altre lingue, ha una prospettiva principale ed alcune secondarie. In Python una funzione è un oggetto ed è istanza di una classe. Ciò significa che Python ha due forme sintattiche per la dichiarazione di un oggetto delle quali una è speciale (vale solo per le funzioni) e l'altra è generale (vale per tutti gli oggetti).
Il fatto che sia amorfo fa di ogni refuso (es.: widht anzichè width) un problema rilevabile unicamente all'atto dell'esecuzione.
La "singolarità" di Java, il suo essere unicamente orientato agli oggetti, unicamente class-based, lo rende immancabilmente omogeneo. Classe, istanza, classe, istanza. Non si scappa: qualsiasi cosa un programmatore Java voglia fare, sedicente top-programmer o meno che sia, sarà fatto di classi e istanze di quelle classi.
Il suo essere staticamente tipato riduce il numero di refusi problematici. Quando ogni nome è una novità questa caratteristica conta e non poco.
La quantità e la qualità della documentazione disponibile per la piattaforma Python non è lontanamente paragonabile alla quantità ed alla qualità della documentazione disponibile per la piattaforma Java.
Ciò non fa di Java un linguaggio migliore di Python ma, a mio personalissimo avviso, lo rende uno strumento di apprendimento di gran lunga migliore di Python.
Th3 Kn0wl3dg3
30-09-2007, 19:04
cavolo, il codice java è il doppio più lungo rispetto a quello di python
cavolo, il codice java è il doppio più lungo rispetto a quello di python
solo quando si tratta di programmi banali.. il secondo esempio di PGI-Bis probabilmente è più esemplificativo :fagiano:
Credo che Java sia uno dei linguaggi più "verbosi" in assoluto. La quantità di codice è comunque irrilevante.
Ps.: sono del tutto convinto che anche un omologo del secondo programma possa essere scritto con meno linee in Python. Lo sono per via dell'elevato numero di forme implicite di cui dispone Python. Ed è esattamente la ragione per cui non lo consiglio come strumento di apprendimento.
Th3 Kn0wl3dg3
30-09-2007, 19:49
però per un principiante come me, che parte proprio da zero, non sia molto semplice usare tutte quelle righe di codice per scrivere un programma cosi banale. fa solo confondere... sempre imho logicamente
cdimauro
30-09-2007, 20:23
@cdimauro
il fatto che un linguaggio è semplice da imparare non significa che sia la scelta migliore per imparare a programmare.. altrimenti avrei consigliato VB6 :stordita:
Python è semplice, leggibile e completo: ha tutte le carte in regole per diventare IL punto di riferimento per quanto riguarda l'apprendimento della programmazione.
oltre a python altri linguaggi con una sintassi semplice sono (scontando dimenticanze varie) i vari basic, pascal e (si lo so questo scatenerà le ire di tutto il thread) C. io sostengo pascal perchè i vari basic sono deprecati :D e C ha una sintassi semplice ma non una semantica semplice :O
Hai fatto degli esempi di linguaggi che vengono letteramente spazzati via da Python a livello di semplicità. :p
La semplicità non è soltanto una questione di sintassi (ti ricordo che Python, tra l'altro, mutua buona parte degli operatori del C), ma anche di strumenti per implementare gli algoritmi.
In soldoni: risolvere problemi con Python è decisamente più semplice che con altri linguaggi.
python è un linguaggio abbastanza particolare, per questo non lo consiglierei io, ma mi è anche capitato di consigliarlo nel caso la persona era particolarmente interessata (quando una persona è determinata non bisogna contraddirla perchè la si confonde e basta).
come dicevo prima la cosa più importante è la volontà di imparare, quindi contano anche cose poco oggettive, come la simpatia ad esempio :sofico:
In questo caso servono anche strumenti DIDATTICAMENTE utili allo scopo.
Tu puoi anche non consigliarlo (anche se non hai detto il perché) ma non hai nemmeno fatto dei esempi concreti di linguaggi didatticamente migliori.
Io ho proposto di fare alcuni esempi anche per questo motivo: così è possibile toccare con mano quale linguaggio si presta a essere più facilmente assimilato e usato da un principiante.
cdimauro
30-09-2007, 20:27
Il tuo programma mi da un errore:
Microsoft Windows XP [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
X:\gametest>python app.py
Traceback (most recent call last):
File "app.py", line 1, in <module>
import wx
ImportError: No module named wx
X:\gametest>
Piattaforma Python 2.5.1, Windows XP Home sp2
Il programma era valido: hai presentato un esempio in Java che con Python poteva essere risolto in diversi modi.
Uno era quella di usare la libreria Tk, che è inclusa nella distribuzione standard.
Un'altra era quella di usare una libreria "più comoda", come WxPython, che è stata usata allo scopo.
Un buon programmatore usa gli strumenti che gli permettono di risolvere nel "migliore dei modi" i propri problemi. Come in questo caso, appunto.
cdimauro
30-09-2007, 20:47
Lo so :).
Questo crea e salva un'immagine bitmap (la classica texture a scacchi) in formato BMP:
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class Main {
public static void main(String[] args) {
GeneratoreBitmap g = new GeneratoreBitmap();
g.generaBitmap();
}
}
class GeneratoreBitmap {
public void generaBitmap() {
BufferedImage immagine = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = immagine.createGraphics();
graphics.setPaint(Color.WHITE);
graphics.fillRect(0, 0, 128, 128);
graphics.fillRect(128, 128, 128, 128);
graphics.setPaint(Color.BLACK);
graphics.fillRect(0, 128, 128, 128);
graphics.fillRect(128, 0, 128, 128);
try {
salvaBitmap(immagine);
} catch(IOException ex) {
System.out.println("Si è verificato un errore durante il salvataggio");
ex.printStackTrace();
}
}
private void salvaBitmap(BufferedImage immagine) throws IOException {
File file = new File("immagine.bmp");
ImageIO.write(immagine, "bmp", file);
}
}
Qui c'è la documentazione degli strumenti usati:
BufferedImage (http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html)
Graphics2D (http://java.sun.com/javase/6/docs/api/java/awt/Graphics2D.html)
Color (http://java.sun.com/javase/6/docs/api/java/awt/Color.html)
IOException (http://java.sun.com/javase/6/docs/api/java/io/IOException.html)
System (http://java.sun.com/javase/6/docs/api/java/lang/System.html)
File (http://java.sun.com/javase/6/docs/api/java/io/File.html)
ImageIO (http://java.sun.com/javase/6/docs/api/javax/imageio/ImageIO.html)
Qui c'è il tutorial ufficiale:
http://java.sun.com/docs/books/tutorial/2d/index.html
Vi risparmio l'elenco di libri :D.
In Python, usando "Python Imaging Library (PIL)" http://www.pythonware.com/products/pil/index.htm :
import Image, ImageColor, ImageDraw
Immagine = Image.new('RGB', (256, 256), ImageColor.colormap['black']) #Avrei potuto anche scrivere Immagine = Image.new('RGB', (256, 256))
Superficie = ImageDraw.Draw(Immagine)
Bianco = ImageColor.colormap['white']
Superficie.rectangle((0, 0, 128, 128), Bianco, Bianco)
Superficie.rectangle((128, 128, 128, 128), Bianco, Bianco)
try:
Immagine.save('immagine.bmp', 'BMP')
except:
print "Si e' verificato un errore durante la scrittura del file"
Semplice, non è vero? E molto facile da comprendere anche per chi è del tutto a digiuno di Python. ;)
Ps.: naturalmente siamo sempre nell'alveo della piattaforma Java standard, quella predefinita, il precotto, chiamatelo come volete.
L'uso delle librerie di sistema non era un requisito del problema: http://www.hwupgrade.it/forum/showpost.php?p=18935345&postcount=67
"Se non ne sei ancora convinto possiamo provare con degli esempi di problemi e vedere in che modo vengono risolti in Python, Java, o qualunque altro linguaggio: giudicherai tu, leggendo il codice, quale linguaggio ti ispira di più per iniziare."
Tra l'altro, dovendo Th3 Kn0wl3dg3 iniziare a programmare, la mia idea era di tirare fuori esempi non eccessivamente complessi. Comunque se vogliamo continuare su questa strada non c'è problema.
cdimauro
30-09-2007, 20:55
PGI come la solito ha preso nel segno. Il framework di Java è il punto forte del linguaggio. Il fatto di trovare TUTTA la documentazione nel solito posto è indubbiamente un grossissimo vantaggio.
Al contrario Python, come altri d'altronde, deve ricorrere a librerie da installare e da configurare che possono creare notevoli problemi, soprattutto ad un principiante.
Un principiante difficilmente andrà a sbattere la testa con cose come quelle trattate, visto che gli mancano le basi.
Per andare a caccia di API, librerie et similia c'è sempre tempo. ;)
Quanto alle librerie standard, averne molte può anche essere fonte di confusione e smarrimento. Ad esempio Java ha sia AWT che SWT: vaglielo a spiegare a un principiante del perché ce ne sono due e quale dovrebbe usare.
Inoltre Java non integra l'equivalente di tutte le librerie di Python (ad esempio, prova ad aprire una nuova scheda del browser di sistema su un'apposita pagina: con Python, a parte l'import dell'apposita libreria standard, basta una semplice riga di codice perché è tutto pronto).
In ogni caso sappiamo bene che le librerie standard da sole possono non bastare nello sviluppo delle applicazioni: servirà cercarne altre in base a quello che dobbiamo fare, e questo vale per qualunque linguaggio.
cdimauro
30-09-2007, 21:09
Il discorso delle prospettive è un punto a sfavore, specialmente per Python che, come altre lingue, ha una prospettiva principale ed alcune secondarie. In Python una funzione è un oggetto ed è istanza di una classe. Ciò significa che Python ha due forme sintattiche per la dichiarazione di un oggetto delle quali una è speciale (vale solo per le funzioni) e l'altra è generale (vale per tutti gli oggetti).
Ne abbiamo discusso e questo vale anche per Java che, tra l'altro, offre pure lui una prospettiva primaria (quella a oggetti) e una secondaria (quella strutturata).
Per lo meno Python nella prospettiva a oggetti (che è quella principale) offre un modello consistente: ogni cosa è un oggetto, mentre in java puoi dichiarare una variabile di tipo "int" che non lo è affatto.
Poi ci sono delle scorciatoie per creare oggetti che hanno particolari funzionalità, ma anche qui Java ha le sue (stringhe e array).
Il fatto che sia amorfo fa di ogni refuso (es.: widht anzichè width) un problema rilevabile unicamente all'atto dell'esecuzione.
Certamente. Esistono comunque dei syntax checker (tra l'altro inclusi nella distribuzione standard) che permettono di controllare la sintassi dei sorgenti e di ricevere utili indicazioni, come quella citata da te ad esempio.
La "singolarità" di Java, il suo essere unicamente orientato agli oggetti, unicamente class-based, lo rende immancabilmente omogeneo. Classe, istanza, classe, istanza. Non si scappa: qualsiasi cosa un programmatore Java voglia fare, sedicente top-programmer o meno che sia, sarà fatto di classi e istanze di quelle classi.
Vedi sopra: non è affatto vero. Ha le sue belle eccezioni, perché i programmatori hanno comunque bisogno di SEMPLIFICARSI la vita anziché rincorrere un modello di ideale perfezione che, se fossero costretti a seguire, renderebbe la risoluzione di un problema un incubo.
Parliamo dei costruttori delle stringhe; il tuo esempio di tempo fa mi sembra piuttosto eloquente in merito: senza di esso un programmatore che dovesse usarle potrebbe aspirare al suicidio.
Il suo essere staticamente tipato riduce il numero di refusi problematici. Quando ogni nome è una novità questa caratteristica conta e non poco.
Vero, ma per un programmatore che deve iniziare è frustrante dover dichiarare variabile e tipo; un linguaggio dinamicamente tipato è MOOOOOLTO più comodo e semplice.
Poi se a una caratteristica assegnamo un ben preciso nome, difficilmente capiteranno errori di questo tipo.
La quantità e la qualità della documentazione disponibile per la piattaforma Python non è lontanamente paragonabile alla quantità ed alla qualità della documentazione disponibile per la piattaforma Java.
Non è nemmeno un cesso: è sufficiente per capire e lavorare.
Ciò non fa di Java un linguaggio migliore di Python ma, a mio personalissimo avviso, lo rende uno strumento di apprendimento di gran lunga migliore di Python.
Mi spiace, ma proprio a livello di apprendimento rimango convinto che Python non abbia proprio paragoni.
All'inizio mancano le basi, e la documentazione di librerie et similia non è che sia d'aiuto.
In questi casi serve un buon manuale, e mi sembra che per Python ce ne sono di ottima fattura.
cdimauro
30-09-2007, 21:14
cavolo, il codice java è il doppio più lungo rispetto a quello di python
però per un principiante come me, che parte proprio da zero, non sia molto semplice usare tutte quelle righe di codice per scrivere un programma cosi banale. fa solo confondere... sempre imho logicamente
Bravo. Adesso guardati il secondo esempio, e dimmi se la soluzione con Python non è di gran lunga più semplice di quella in Java, anche da comprendere (per te che devi ancora iniziare). :p
solo quando si tratta di programmi banali.. il secondo esempio di PGI-Bis probabilmente è più esemplificativo :fagiano:
Al contrario: più aumenta di complessità il problema, più è facile vedere il distacco fra Python e gli altri linguaggi.
Non c'è proprio paragone: non è difficile realizzare programmi anche di un ordine di grandezza più piccoli (per Th3 Kn0wl3dg3: significa approssimativamente dieci volte più piccoli), pur continuando a rimanere leggibili e manutenibili. ;)
cdimauro
30-09-2007, 21:18
Credo che Java sia uno dei linguaggi più "verbosi" in assoluto. La quantità di codice è comunque irrilevante.
Non direi, visto che generalmente la soluzione Python è anche più semplice, leggibile e manutenibile.
Ps.: sono del tutto convinto che anche un omologo del secondo programma possa essere scritto con meno linee in Python.
Infatti. :D
Lo sono per via dell'elevato numero di forme implicite di cui dispone Python.
Non ne ho usata neppure una. ;)
Ed è esattamente la ragione per cui non lo consiglio come strumento di apprendimento.
Le forme implicite ci sono anche per Java, e le hanno messe perché sono oggettivamente utili, come sono oggettivamente utili le funzioni in Python, pur essendo degli oggetti.
DioBrando
30-09-2007, 21:26
Il discorso delle prospettive è un punto a sfavore, specialmente per Python che, come altre lingue, ha una prospettiva principale ed alcune secondarie. In Python una funzione è un oggetto ed è istanza di una classe. Ciò significa che Python ha due forme sintattiche per la dichiarazione di un oggetto delle quali una è speciale (vale solo per le funzioni) e l'altra è generale (vale per tutti gli oggetti).
Il fatto che sia amorfo fa di ogni refuso (es.: widht anzichè width) un problema rilevabile unicamente all'atto dell'esecuzione.
La "singolarità" di Java, il suo essere unicamente orientato agli oggetti, unicamente class-based, lo rende immancabilmente omogeneo. Classe, istanza, classe, istanza. Non si scappa: qualsiasi cosa un programmatore Java voglia fare, sedicente top-programmer o meno che sia, sarà fatto di classi e istanze di quelle classi.
Il suo essere staticamente tipato riduce il numero di refusi problematici. Quando ogni nome è una novità questa caratteristica conta e non poco.
Sulla tipizzazione ha già risposto Cesare, mentre sul resto come lui non sn d'accordo.
Java non ha una unica prospettiva e per quanto nasca OO non lo è in senso stretto (tant'è che comunque eredita costrutti C-like come Python del resto); in quel caso parliamo di linguaggi OO puri come loè Smalltalk tanto per citarne uno.
Ed infatti nel corso di Programmazione 1 in cui viene adottato Java lo si utilizza proprio nella programmazione strutturata.
La logica delle classi metodi, TDA viene accennata ma il cuore dei ragionamenti e dell'approccio OO viene studiato poi in Programmazione 2.
Quindi quello che dici non è propriamente esatto, dipende sempre da che utilizzo vogliamo fare dell'X linguaggio.
Che poi sia utilizzato prevalentemente in applicazioni sviluppate con metodologia OO possiamo essere d'accordo, ma è un altro paio di maniche rispetto a quello che hai affermato tu.
E alla fine il punto centrale è che l'utente deve imparare a programmare, quindi il viatico della strutturata lo deve attraversare per forza così come dovrà imparare a discernere a seconda dei casi quali sia l'approccio migliore per la risoluzione del problema che avrà davanti.
Questo con Java come con Python.
La quantità e la qualità della documentazione disponibile per la piattaforma Python non è lontanamente paragonabile alla quantità ed alla qualità della documentazione disponibile per la piattaforma Java.
Ciò non fa di Java un linguaggio migliore di Python ma, a mio personalissimo avviso, lo rende uno strumento di apprendimento di gran lunga migliore di Python.
Sulla quantità sì, sulla qualità non lo sò, se rapportato alla quantità.
Per esempio esistono pessimi libri di Java che ne decantano le lodi ma non sottolineano invece per esempio il falso mito dell'essere multipiattaforma, le pecche del garbage collector (se confrontato all'alter-ego .NET) e via discorrendo, mentre in Python, magari ho visto solo quelli buoni, ma non ne ho mai trovati così "di parte".
DioBrando
30-09-2007, 21:39
PGI come la solito ha preso nel segno. Il framework di Java è il punto forte del linguaggio. Il fatto di trovare TUTTA la documentazione nel solito posto è indubbiamente un grossissimo vantaggio.
Al contrario Python, come altri d'altronde, deve ricorrere a librerie da installare e da configurare che possono creare notevoli problemi, soprattutto ad un principiante.
secondo me ci ha preso poco invece, perchè si sta sfuggendo al problema iniziale posto dall'utente.
Il linguaggio + adatto per imparare a programmare. I problemi sul ricercare la libreria giusta per fare determinate cose sono problemi che affronterà in seguito, quando si sarà impossessato delle basi.
Per fare gli esempietti semplici bastano le librerie standard di qualsiasi linguaggio dai. ;)
E per programmi + complessi invece dovrà cercarsi librerie ad hoc, che facciano al caso suo. Come SEMPRE.
Che poi voglio dire, l'organizzazione delle API di Java...sì voglio dire, se ne potrebbe discutere ampiamente, con quale logica malata sia stata scelta...un universo dominato dal caos.
variabilepippo
30-09-2007, 22:20
Credo che avvicinarsi al mondo della programmazione scontrandosi fin da subito con EventQueue, invokeLater, Runnable (per non parlare delle complicazioni di linguaggi low-level come il C) non sia il massimo in termini di incentivo a proseguire.
Secondo me conviene partire con linguaggi che consentono di risolvere un problemi nella maniera più intuitiva possibile, senza doversi preoccupare di "dettagli" non direttamente riferibili alla soluzione. Di conseguenza è meglio iniziare con un linguaggio che non distragga troppo il neo-programmatore,per complicare le cose c'è sempre tempo! ;)
cdimauro
30-09-2007, 22:36
Perfettamente d'accordo. :)
Spero che lo capisca anche Th3 Kn0wl3dg3 e che faccia la scelta giusta: è tutto a suo vantaggio. ;)
Python è semplice, leggibile
molto facile da comprendere
di gran lunga più semplice
leggibili e manutenibili
Qui si insiste nel friggere l'aria.
cdimauro
30-09-2007, 22:51
Confrontiamoci sugli esempi e poi vedremo se si tratta di aria fritta o tangibile realtà. ;)
Intanto un esempietto te l'ho fornito, e non mi sembra che Java ne esca fuori tanto bene. :D Se vuoi puoi provare anche con SmallTalk / Squeak. :p
EDIT: Adesso vada a nanna. A domani. Notte a tutti. :)
variabilepippo
30-09-2007, 22:54
Confrontiamoci sugli esempi e poi vedremo se si tratta di aria fritta o tangile realtà.
Al momento Python conduce per 2 a 0 su Java. :D
Come arbitro imparziale propongo Th3 Kn0wl3dg3, cioè colui che dovrà scegliere il "vincitore". ;)
DioBrando
01-10-2007, 00:10
Secondo me conviene partire con linguaggi che consentono di risolvere un problemi nella maniera più intuitiva possibile, senza doversi preoccupare di "dettagli" non direttamente riferibili alla soluzione. Di conseguenza è meglio iniziare con un linguaggio che non distragga troppo il neo-programmatore,per complicare le cose c'è sempre tempo! ;)
è proprio quello il discorso. Inutile imparare i dettagli all'inizio quando poi sfugge il quadro di insieme, non ha senso...poi ci si trova ad un punto in cui uno deve fare tabula rasa perchè capisce che fino a quel momento ha ragionato nel modo sbagliato.
Si fà il doppio della fatica ed è stato buttato nel cesso del tempo impiegabile in altri modi.
Una piccola annotazione.
Dire che il numero delle righe è irrilevanti non sta nè in cielo nè in terra.
Considerato che vi è una statistica di quanti errori si commettono per ogni tot linee di codice (ed uno dei parametri per giudicare la qualità di un SW è proprio questo), se si risparmia sulla scrittura del sorgente, automaticamente ne verrà fuori che ci saranno meno errori da correggere.
E il ragazzo che deve scegliere, gli errori lì dovrà correggere dal primo giorno che si troverà a buttare giù del codice, fino a quello in cui deciderà di smettere.
Quindi è una variabile importante, da mettere in conto prima di fare la propria scelta, altrimenti i programmi li scriveremmo ancora in assembly. (non tutti ma un buon numero sì)
cdimauro
01-10-2007, 07:31
Al momento Python conduce per 2 a 0 su Java. :D
E difficilmente gli lascerà fare punti. :p
Anche perché se la discussione dovesse ancora continuare sul confronto fra le librerie di sistema anziché dei linguaggi in merito all'apprendimento (che era l'obiettivo di questo thread, tra l'altro), ho sempre L'asso nella manica che posso tirar fuori quando voglio per chiudere questa partita. :asd:
Così riprendiamo con lo scopo del thread, che è decisamente più interessante. ;)
Come arbitro imparziale propongo Th3 Kn0wl3dg3, cioè colui che dovrà scegliere il "vincitore". ;)
Concordo. D'altra parte serve a lui (pure a noi, ma per divertirci :)).
EDIT. Ovviamente son d'accordo con DioBrando su tutta la linea. :D
A me sinceramente i programmi in Python mi sembrano di una confusione incredibile, alla faccia della leggibilità.
Il programma sopra si avvicina più alla programmazione procedurale che alla programmazione ad oggetti. Sembra che il programma non si strutturato internamente, ma solo una sequenza di istruzioni. Poi sarò io che preferisco un approccio ad oggetti classico, ma proprio confrontando i sorgenti Java e Python preferisco di gran lunga quello Java.
import Image, ImageColor, ImageDraw
Immagine = Image.new('RGB', (256, 256), ImageColor.colormap['black']) #Avrei potuto anche scrivere Immagine = Image.new('RGB', (256, 256))
Superficie = ImageDraw.Draw(Immagine)
Bianco = ImageColor.colormap['white']
Superficie.rectangle((0, 0, 128, 128), Bianco, Bianco)
Superficie.rectangle((128, 128, 128, 128), Bianco, Bianco)
try:
Immagine.save('immagine.bmp', 'BMP')
except:
print "Si e' verificato un errore durante la scrittura del file"
Non è tanto quello che fanno le istruzioni che non si capisce...ma cosa è quella sequenza di istruzioni.
Domande che mi vengono vedendo questo codice sono: cos'è questo ? Una classe, una funzione, un metodo ? Come si chiama ?
Th3 Kn0wl3dg3: la lunghezza del programma non conta niente, alla fine le istruzioni efficaci alla risoluzione del problema sono dello stesso ordine, il resto è appunto la struttura del programma, quella che in Python mi sembra assente, e che in Java all'80% viene scritta automaticamente dall'ide.
cdimauro
01-10-2007, 08:43
A me sinceramente i programmi in Python mi sembrano di una confusione incredibile, alla faccia della leggibilità.
Il programma sopra si avvicina più alla programmazione procedurale che alla programmazione ad oggetti. Sembra che il programma non si strutturato internamente, ma solo una sequenza di istruzioni. Poi sarò io che preferisco un approccio ad oggetti classico, ma proprio confrontando i sorgenti Java e Python preferisco di gran lunga quello Java.
Gli oggetti li uso soltanto quando ha senso usarli.
Crearmi una classe soltanto per infilarle del codice non ha nessun valore aggiunto. Quando creo una classe lo faccio perché ho bisogno di un oggetto che si comporti in un certo modo.
import Image, ImageColor, ImageDraw
Immagine = Image.new('RGB', (256, 256), ImageColor.colormap['black']) #Avrei potuto anche scrivere Immagine = Image.new('RGB', (256, 256))
Superficie = ImageDraw.Draw(Immagine)
Bianco = ImageColor.colormap['white']
Superficie.rectangle((0, 0, 128, 128), Bianco, Bianco)
Superficie.rectangle((128, 128, 128, 128), Bianco, Bianco)
try:
Immagine.save('immagine.bmp', 'BMP')
except:
print "Si e' verificato un errore durante la scrittura del file"
Non è tanto quello che fanno le istruzioni che non si capisce...
De gustibus. Io trovo decisamente meno comprensibile quell'accozzaglia di istruzioni in Java per fare la stessa cosa.
ma cosa è quella sequenza di istruzioni.
Domande che mi vengono vedendo questo codice sono: cos'è questo ? Una classe, una funzione, un metodo ? Come si chiama ?
Immagine è un'istanza, e new è una factory per creare un'istanza dell'oggetto Image.
Superficie è un'istanza della classe Draw che mette a disposizione delle primitive per poter lavorare col contenuto dell'immagine. rectangle, infatti, è un metodo per disegnare un rettangolo specificando colore di riempimento e del bordo.
Infine save è un metodo di Image per salvare l'immagine nel formato richiesto.
Non capisco cosa ci sia di incomprensibile.
Vogliamo prendere invece il sorgente in Java? Mi spieghi che roba è una "BufferedImage" e un Graphics2D? E perché devo crearmi un file per poter salvare l'immagine?
Idem per il resto del sorgente: c'è tanta roba "ridondante" che ha poco a che fare col problema vero e proprio, che invece in Python viene affrontato e risolto direttamente.
Th3 Kn0wl3dg3: la lunghezza del programma non conta niente,
Opinabile, specialmente quando vengono tirate in ballo misure come numero di bug per righe di codice, ampiamente usata nella letteratura informatica.
alla fine le istruzioni efficaci alla risoluzione del problema sono dello stesso ordine,
Esattamente, e in Python ci sono solo quelle necessarie: nessuno "zucchero sintattico" addizionale.
il resto è appunto la struttura del programma, quella che in Python mi sembra assente,
No, in Python la struttura del programma è esattamente quella che ti serve per risolvere il problema. Nessuna arzigogolatura forzata / addizionale.
e che in Java all'80% viene scritta automaticamente dall'ide.
Adesso dopo le librerie standard tiriamo fuori anche gli IDE con completamento automatico per cercare di nascodere l'inutile prolissità di Java.
Limitiamoci al linguaggio, invece, visto che già al primo impatto il sorgente Java mostra al principiante il concetto di classe, e di metodo "main" che sono già qualcosa in più rispetto al problema che dovrebbe risolvere.
Poi di buoni IDE ce ne sono anche per Python, ma ripeto, non è questo l'oggetto della discussione.
Non capisco cosa ci sia di incomprensibile.
Niente nella sequenza, ma non è comprensibile cosa sia quella sequenza.
Limitiamoci al linguaggio, invece, visto che già al primo impatto il sorgente Java mostra al principiante il concetto di classe, e di metodo "main" che sono già qualcosa in più rispetto al problema che dovrebbe risolvere.
Ed invece ci vuole al primo impatto. In questo caso Python allora permette di fare gli stessi errori che sono permessi in C++...cioè programmare con oggetti invece che a oggetti.
Imho il concetto di classe e oggetto deve essere la prima cosa che viene fatta in un linguaggio ad oggetti.
Quella struttura non può essere mantenuta anche per programmi semplicissimi, quindi di fatto è inutile. Serve solo a dimostrare che in QUESTO esempio il sorgente Python è più corto di quello di Java. Un programma debitamente strutturato avrà la stessa lunghezza di quello in Java ;)
cdimauro
01-10-2007, 09:25
Niente nella sequenza, ma non è comprensibile cosa sia quella sequenza.
Una sequenza di istruzioni. Poi cosa faccia esattamente ogni istruzione è prematuro saperlo.
Infatti non è roba per chi deve iniziare a programmare e non sa nemmeno cosa significhi classe, ma anche istruzione, variabile, ecc. Per questo volevo partire con degli esempi "terra terra", anziché andare subito su esempi con elaborazioni di immagini, et similia. ;)
Ed invece ci vuole al primo impatto. In questo caso Python allora permette di fare gli stessi errori che sono permessi in C++...cioè programmare con oggetti invece che a oggetti.
Python ti permette di fare quello che vuoi: non ti vincola a nessun paradigma di programmazione.
Imho il concetto di classe e oggetto deve essere la prima cosa che viene fatta in un linguaggio ad oggetti.
Io partirei dal concetto di dato, di operazione, di istruzione, ecc. :p
Quella struttura non può essere mantenuta anche per programmi semplicissimi, quindi di fatto è inutile. Serve solo a dimostrare che in QUESTO esempio il sorgente Python è più corto di quello di Java. Un programma debitamente strutturato avrà la stessa lunghezza di quello in Java ;)
Al più potrei suddividere il codice in moduli, e sarebbe sempre MOOOOLTO più compatto rispetto a quello di Java. :D
Veramente, lo vedo tutti i giorni: non c'è paragone con un linguaggio "classico", come Java.
Diamonds in Python avrebbe occupato meno della metà di codice (righe e/o spazio che dir si voglia), e sarebbe stato di gran lunga più leggibile. ;)
Poi, ripeto, io le classi le uso soltanto se mi servono oggetti che hanno dei ben precisi requisiti.
Come semplici "contenitori", come sei costretto a fare con Java con la classe "principale", le trovo del tutto inutili.
Comunque per quanto riguarda "dimensione del codice ed espressività" guarda qui: http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness
In particolare selezionando Java e Python abbiamo quanto segue: http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=java&lang2=python
Come vedi i programmi Python rimangono sempre decisamente più corti. Non c'è proprio storia. :p
Una piccola annotazione.
Dire che il numero delle righe è irrilevanti non sta nè in cielo nè in terra.
Considerato che vi è una statistica di quanti errori si commettono per ogni tot linee di codice (ed uno dei parametri per giudicare la qualità di un SW è proprio questo), se si risparmia sulla scrittura del sorgente, automaticamente ne verrà fuori che ci saranno meno errori da correggere.
Siamo d'accordo, ma non è questo il caso. In questo caso il numero delle righe è diverso perché il programma è strutturato diversamente. Ma facendo programmi anche un filino più complicati anche in Python si dovrà adottare una struttura simile a quella di Java e di conseguenza il numero di linee sarà comparabile.
Al più potrei suddividere il codice in moduli, e sarebbe sempre MOOOOLTO più compatto rispetto a quello di Java.
Certo...peccato che il 30% delle istruzioni contate nei programmi Java siano parentesi graffe ;)
E' ovvio che Python è più corto se i blocchi si creano per indentazione.
Ma le parentesi non sono da considerare istruzioni imho.
cdimauro
01-10-2007, 09:38
Siamo d'accordo, ma non è questo il caso. In questo caso il numero delle righe è diverso perché il programma è strutturato diversamente. Ma facendo programmi anche un filino più complicati anche in Python si dovrà adottare una struttura simile a quella di Java e di conseguenza il numero di linee sarà comparabile.
Per quanto già detto ne dubito fortemente.
Comunque possiamo sempre organizzare un contest anche per questa parte della discussione: per me non c'è problema. :p
cdimauro
01-10-2007, 09:40
Certo...peccato che il 30% delle istruzioni contate nei programmi Java siano parentesi graffe ;)
E' ovvio che Python è più corto se i blocchi si creano per indentazione.
Ma le parentesi non sono da considerare istruzioni imho.
Possiamo anche toglierle dal conteggio, non c'è problema: tanto il risultato non cambierà di molto, te l'assicuro. :p
Comunque possiamo sempre organizzare un contest anche per questa parte della discussione: per me non c'è problema. :p
Non importa farli...basta prenderli in giro. Ad esempio cerchiamo l'heap sort sviluppato in Java ed in Python.
Ho 19 anni, quasi 20, e amo i computer e mi affascina tutto ciò che li riguarda. Vorrei iniziare a programmare ma per un niubbo come me in con tutti questi linguaggi non è facile. Con quale potrei iniziare considerando che comincio proprio da zero? Con Java, php, python, C......
Inizia con il qbasic:
http://www.gratispro.it/freedownload.asp?cat=freeware%20informatica&sgl=qbasic
solo 1mb lo metti su un dischetto e te lo porti dove vuoi.
Installazione:
http://www.pcopen.it/01NET/HP/0,1254,4_ART_76346,00.html?lw=10000;CHL
corso e tutorial:
http://web.tiscalinet.it/paranco/page3.html
Sei agli inizi quello che devi fare è capire l'immissione di stringhe e numeri fare operazioni con essi usare i for while e creare file e vedere i vari salti condizionali con i goto e i return.
poi puoi passare al vb6 molto semplice con finestre già pronte e, poi dopo, allora potresti passare a linguaggi + tosti come c/c++, java, asm e tutti quelli proposti nel 3d.
ciao
mad_hhatter
01-10-2007, 09:57
non voglio far polemica, ma questo thread ha ormai preso il piglio del "101 modi per giustificare python a ogni costo"... non credo che all'autore del thread questo semplifichi le cose
negli ultimi post ho letto cose come
1) "una sequenza di istruzioni, cosa faccia ogni istruzione è prematuro saperlo",
2) "python non ti vincola a nessun paradigma di programmazione",
3) "<CIT>Imho il concetto di classe e oggetto deve essere la prima cosa che viene fatta in un linguaggio ad oggetti.</CIT>
Io partirei dal concetto di dato, di operazione, di istruzione, ecc."
vorrei rispondere:
1) alla faccia della chiarezza e dell'alto livello: ho un ammasso informe di istruzioni che non so bene cosa facciano... un oggetto nasconde i dettagli e fornisce un'idea immediata del suo scopo... non è forse meglio?
2) per un principiante direi che qualche vincolo al posto giusto non può fare che bene... per navigare verso altri lidi c'è sempre tempo una volta che si sa verso dove si vuol navigare... ma navigare a naso in alto mare non credo porti buoni risultati
3) allora tanto vale partire col C
cdimauro
01-10-2007, 10:05
Non importa farli...basta prenderli in giro. Ad esempio cerchiamo l'heap sort sviluppato in Java ed in Python.
Certamente. Così ci risparmiamo anche il lavoro. :D
Comunque dovremmo prendere un insieme di algoritmi "di base" delle tipologie più variegate per avere un quadro abbastanza attendibile.
cdimauro
01-10-2007, 10:08
Inizia con il qbasic:
http://www.gratispro.it/freedownload.asp?cat=freeware%20informatica&sgl=qbasic
solo 1mb lo metti su un dischetto e te lo porti dove vuoi.
Installazione:
http://www.pcopen.it/01NET/HP/0,1254,4_ART_76346,00.html?lw=10000;CHL
corso e tutorial:
http://web.tiscalinet.it/paranco/page3.html
Sei agli inizi quello che devi fare è capire l'immissione di stringhe e numeri fare operazioni con essi usare i for while e creare file e vedere i vari salti condizionali con i goto e i return.
poi puoi passare al vb6 molto semplice con finestre già pronte e, poi dopo, allora potresti passare a linguaggi + tosti come c/c++, java, asm e tutti quelli proposti nel 3d.
ciao
Il QBasic è un linguaggio che ha una struttura semplice, ma non per tutte le cose. Infatti è limitato alla sola programmazione strutturata. Quando poi dovrà passare a quella a oggetti e/o funzionale, che farà? Cambierà nuovamente linguaggio?
Poi i salti coi goto e i return sono roba da spaghetti basic, appunto: assolutamente vietati in tutta la lettura informatica da decenni.
Se deve iniziare, facciamolo partire col piede giusto.
cdimauro
01-10-2007, 10:15
non voglio far polemica, ma questo thread ha ormai preso il piglio del "101 modi per giustificare python a ogni costo"...
Sei libero di presentare altri linguaggi di programmazione se ne conosci di utili allo SCOPO del thread.
non credo che all'autore del thread questo semplifichi le cose
Deciderà lui. Per fortuna non ha nessuna infarinatura.
negli ultimi post ho letto cose come
1) "una sequenza di istruzioni, cosa faccia ogni istruzione è prematuro saperlo",
2) "python non ti vincola a nessun paradigma di programmazione",
3) "<CIT>Imho il concetto di classe e oggetto deve essere la prima cosa che viene fatta in un linguaggio ad oggetti.</CIT>
Io partirei dal concetto di dato, di operazione, di istruzione, ecc."
vorrei rispondere:
1) alla faccia della chiarezza e dell'alto livello: ho un ammasso informe di istruzioni che non so bene cosa facciano... un oggetto nasconde i dettagli e fornisce un'idea immediata del suo scopo... non è forse meglio?
Per iniziare? Non direi proprio. L'ammasso sembra informe perché ci si è voluti lanciare per forza di cose su concetti più avanzati. Una volta appresi quei concetti è ovvio che la forma sarà ben definita, ma NON è questo lo scopo del thread mi pare.
Se scrivo:
a = 1
b = 2
c = a + b
print 'La somma di', a, 'e', b, 'è', c
le istruzioni sono tutt'altro che "informi": il significato è chiarissimo e funzionale allo scopo.
2) per un principiante direi che qualche vincolo al posto giusto non può fare che bene... per navigare verso altri lidi c'è sempre tempo una volta che si sa verso dove si vuol navigare... ma navigare a naso in alto mare non credo porti buoni risultati
Appunto per questo è meglio iniziare con un linguaggio semplice, ma anche completo e che permetta via via di salire di "complessità". E' inutile spiattellare adesso cose complicate: c'è tempo per arrivarci, appunto.
3) allora tanto vale partire col C
Che didatticamente è secondo soltanto ad assembly e linguaggio macchina quanto a livello di "didattica". :asd:
mad_hhatter
01-10-2007, 10:18
scusate, i modi erano 102 :)
Il QBasic è un linguaggio che ha una struttura semplice, ma non per tutte le cose.
A lui non servono tutte le cose... serve capire cosa è una stringa e cosa è un numero.
Infatti è limitato alla sola programmazione strutturata. Quando poi dovrà passare a quella a oggetti e/o funzionale, che farà? Cambierà nuovamente linguaggio?
certo perchè sarà in grado di approcciarlo da subito.
Poi i salti coi goto e i return sono roba da spaghetti basic, appunto: assolutamente vietati in tutta la lettura informatica da decenni.
...ma dove hai letto che i goto sono vietati. L'unica cosa vietata è l'errore del compilatore che ti segnala.
Se deve iniziare, facciamolo partire col piede giusto.
Se deve iniziare il piede lo deve muovere lui ...senza imposizioni...
quello che dici non è un dogma ricordalo.
cdimauro
01-10-2007, 10:25
scusate, i modi erano 102 :)
Il tuo contributo a questa discussione è NULLO.
Hai qualche altro linguaggio da proporre, ARGOMENTANDO? Altrimenti è inutile che continui a flammare e basta.
mad_hhatter
01-10-2007, 10:31
Il tuo contributo a questa discussione è NULLO.
Hai qualche altro linguaggio da proporre, ARGOMENTANDO? Altrimenti è inutile che continui a flammare e basta.
guarda che è un pezzo che argomento restando il più neutrale possibile... e non ho nessuna intenzione di flammare. ho solo fatto notare che voler per forza giustificare l'uso di python in ogni situazione può non essere il modo migliore di aiutare l'autore del thread. tutto qua
cdimauro
01-10-2007, 10:31
A lui non servono tutte le cose... serve capire cosa è una stringa e cosa è un numero.
E poi? Si fermerà? Mica ci sono soltanto le stringhe e i numeri come concetto di dati "elementari"; ad esempio ci sono anche le liste.
certo perchè sarà in grado di approcciarlo da subito.
Cambiando linguaggio.
...ma dove hai letto che i goto sono vietati. L'unica cosa vietata è l'errore del compilatore che ti segnala.
Abbiamo studiato cose diverse allora. Sia chiaro: puoi anche usarlo, ma è del tutto sconsigliato.
Tra l'altro ci sono pure linguaggi in cui il goto è del tutto assente, visto che è una "bad practice" usarlo.
Se deve iniziare il piede lo deve muovere lui ...senza imposizioni...
quello che dici non è un dogma ricordalo.
Stiamo discutendo, infatti, altrimenti avrei tirato fuori il catechismo e avremmo chiuso qui.
cdimauro
01-10-2007, 10:32
guarda che è un pezzo che argomento restando il più neutrale possibile... e non ho nessuna intenzione di flammare. ho solo fatto notare che voler per forza giustificare l'uso di python in ogni situazione può non essere il modo migliore di aiutare l'autore del thread. tutto qua
Le tue alternative a Python quali sarebbero? Ovviamente rimanendo nel campo puramente didattico.
mad_hhatter
01-10-2007, 10:40
Le tue alternative a Python quali sarebbero? Ovviamente rimanendo nel campo puramente didattico.
ho già detto quanto il linguaggio in sè non sia assolutamente importante: piuttosto che consigliargli un linguaggio penso sia meglio indirizzarlo su qualche documento di algoritmica e di principi di progettazione e scrittura del codice. Se poi si vuol mettere in pratica una soluzione, ho già detto che vedo meglio qualcosa come java, ma non per il linguaggio in sè, ma per la coerenza, i vincoli imposti, la pulizia dell'ambiente e della documentazione.
resto comunque dell'idea che dovremmo insistere di meno sul linguaggio e molto di più sulla teoria che sta alla base della programmazione
cdimauro
01-10-2007, 10:49
Tolta la documentazione, che per iniziare va benissimo quella di un qualunque linguaggio (di buone guide per iniziare ce ne sono josa), rimane comunque il linguaggio da scegliere.
Python, poi, non ha niente di "incoerente" ed è fra i linguaggi più "puliti" (oltre che semplici) come linguaggio. Sui "vincoli" dovresti essere più chiaro.
Il nocciolo della questione, ripeto, rimane: una scelta del linguaggio è necessaria, perché gli serve per programmare.
E per quanto detto finora la soluzione migliore è quella di Python.
mad_hhatter
01-10-2007, 10:55
E per quanto detto finora la soluzione migliore è quella di Python.
secondo alcuni sì... secondo altri meno...
la criitica che muovevo prima è appunto questa: non mi pare molto profiquo continuare a voler mostrare a tutti i costi che python è per forza il linguaggio da usare... gli abbiamo proposto alcune (poche, per fortuna) alternative... se fossi in lui mi documenterei un po' su python E su java (o qualsiasi altra cosa lui ritenga interessante) e scelga poi in base a ciò che più lo appassiona/solletica intelelttualmente. Ma continuare a voler insistere che python è l'unica alternativa sensata non mi sembra di grossa utilità. Ma lo dico non per flammare, ma semplicemnete perché non mi pare che tutte le nostre chiacchiere lo abbiano minimamente aiutato.
forse sarebbe stato meglio indirizzarlo verso un buon testo di algoritmica e di data structures, innanzi tutto, e verso una buona descrizione dei vari paradigmi di programmazione
cdimauro
01-10-2007, 10:57
Gli esempi che proponevo avevano questo scopo infatti: permettergli di valutare i due linguaggi (ma a parte Python e Java potremmo mettere anche il QBasic) e poi decidere.
DioBrando
01-10-2007, 11:00
...ma dove hai letto che i goto sono vietati. L'unica cosa vietata è l'errore del compilatore che ti segnala.
e' una struttura deprecata, tanto che in Java si è deciso di farla diventare una parola riservata (da usare in casi ESTREMAMENTE limitati) per evitare che si facessero delle porcate tipo quelle degli anni 70-80 come accadeva in C per esempio.
In Python invece non esiste proprio.
E a ben donde, dato che come tu ben sai il teorema di Bohm-Jacopini ha dimostrato come fosse possibile scrivere codice implementando qualsiasi tipo di algoritmi ma senza usare il GOTO, che è un tipico esempio di spaghetti code.
Lo è ormai da 20 anni e +.
Non sò dove hai vissuto negli ultimi anni :)
E cmq si sta sfuggendo il problema principale
mad_hhatter
01-10-2007, 11:02
Gli esempi che proponevo avevano questo scopo infatti: permettergli di valutare i due linguaggi (ma a parte Python e Java potremmo mettere anche il QBasic) e poi decidere.
ok, ma se poi scadiamo nel contare il numero di istruzioni o in altri dettagli iper-tecnici senza mostrargli le differenze NON tra i linguaggi ma tra gli STILI di programmazione, i PARADIGMI, la discussione diventa sterile e inutile per uno che vuole imparare a programmare: lui non vuole imparare UN linguaggio
cdimauro
01-10-2007, 11:07
Prensentiamo gli esempi e non gli diciamo niente di stili, paradigmi, et similia: sarà lui poi a valutare quale linguaggio lo ispira di più.
Tanto sul resto ne abbiamo già discusso.
DioBrando
01-10-2007, 11:08
ho già detto quanto il linguaggio in sè non sia assolutamente importante: piuttosto che consigliargli un linguaggio penso sia meglio indirizzarlo su qualche documento di algoritmica e di principi di progettazione e scrittura del codice. Se poi si vuol mettere in pratica una soluzione, ho già detto che vedo meglio qualcosa come java, ma non per il linguaggio in sè, ma per la coerenza, i vincoli imposti, la pulizia dell'ambiente e della documentazione.
documenti su algoritmi, principi di progettazione...
Vuoi fargli iniziare dalle cose semplici insomma :D
Gli algoritmi e la loro implementazione se li studierà dal secondo anno in poi, i principi di progettazione idem (o dal terzo, non sò quando avrà IngSW).
Non capisco perchè dobbiate complicargli la vita.
Avete mai provato a fare ripetizioni a qualcuno?
Se dovete insegnare della matematica partite dalle tabelline o dalle dimostrazioni di algebra?
La scelta del linguaggio è la scelta di uno strumento, come può essere la scelta di un pennello o di una tavolozza per un pittore.
Ma è chiaro che, soprattutto all'inizio, è una scelta che può fare un'enorme differenza.
Poi quando sarà pratico, cambiare sintassi e semantica non sarà poi un problema. La scelta è importante soprattutto all'inizio.
P.S.: cionci dai adesso tiri fuori il problema degli IDE quando a pagina 2 ho scritto che Python è supportato da VS ed Eclipse che sono tra i due ambienti + utilizzati e migliori del panorama.
Su ;)
Io non ho tirato fuori il problema degli IDE, ho solo scritto che confrontare quei due programmi sul numero di righe ha poco senso, perché quello in Python non ha una struttura, mentre quello in Java ha una struttura ben definita ed in più la maggior parte di quelle righe in più viene scritta dall'IDE.
mad_hhatter
01-10-2007, 11:16
Se dovete insegnare della matematica partite dalle tabelline o dalle dimostrazioni di algebra?
non è un bambino e vuole affrontare l'università: se dovessi insegnargli matematica inizierei dagli assiomi sui numeri
DioBrando
01-10-2007, 11:17
Inizia con il qbasic:
http://www.gratispro.it/freedownload.asp?cat=freeware%20informatica&sgl=qbasic
solo 1mb lo metti su un dischetto e te lo porti dove vuoi.
Installazione:
http://www.pcopen.it/01NET/HP/0,1254,4_ART_76346,00.html?lw=10000;CHL
corso e tutorial:
http://web.tiscalinet.it/paranco/page3.html
Sei agli inizi quello che devi fare è capire l'immissione di stringhe e numeri fare operazioni con essi usare i for while e creare file e vedere i vari salti condizionali con i goto e i return.
poi puoi passare al vb6 molto semplice con finestre già pronte e, poi dopo, allora potresti passare a linguaggi + tosti come c/c++, java, asm e tutti quelli proposti nel 3d.
ciao
non ha alcun senso mettergli in testa 5-6 linguaggi quando deve ancora capire cosa sia un ciclo if-else.
Ne sceglie uno, dove non ci siano i goto (e due), DIDATTICO, con buona documentazione e strumenti di sviluppo, che non gli debba far perdere troppo tempo in dettagli implementativi che all'inizio non importa lui conosca e ma che gli consenta di focalizzarsi sulla risoluzione di un problema, tipo non sò calcolare l'area di un triangolo.
Java o Python, IMHO...e l'idea di valutare con gli esempi serve proprio a decidere quale :)
ASM non solo è tosto, è inutile, che si studi solo linguaggi ad alto livello, come fanno le persone normali a questo mondo (a meno che non serva esplicitamente l'uso di Assembly).
Mi vengono i brividi se penso che qualcuno di voi possa diventare docente :D
DioBrando
01-10-2007, 11:21
Io non ho tirato fuori il problema degli IDE, ho solo scritto che confrontare quei due programmi sul numero di righe ha poco senso, perché quello in Python non ha una struttura, mentre quello in Java ha una struttura ben definita ed in più la maggior parte di quelle righe in più viene scritta dall'IDE.
l'autocompletamento, le strutture memorizzate e tutti gli aiuti che un IDE ti può dare te li dà indipendentemente dal linguaggio utilizzato...basta che sia supportato e Python lo è nei due che ti ho citato.
poi se vogliamo dirla tutta, parlare di IDE ora è prematuro, all'inizio dovrà "sporcarsi le mani" con strumenti il + semplici possibili e un IDE, solitamente, non lo è.
Con Java potrebbe iniziare da BlueJ e con Python l'editor integrato nel pacchetto di sviluppo.
DioBrando
01-10-2007, 11:26
non è un bambino e vuole affrontare l'università: se dovessi insegnargli matematica inizierei dagli assiomi sui numeri
il paragone è lo stesso di un bambino che affronta la matematica per la prima volta. (e non c'è niente di male nel dirlo, non è un'offesa)
Lui di programmazione NON SA' NULLA. Parlare di algoritmi, di heap-sort e quant'altro è una bestialità.
Cioè lo vuoi far partire da argomenti che all'Università non affronti nemmeno al primo anno, quando lui non ha nemmeno mai scritto un Hello World e l'Università la deve ancora cominciare.
Sei un vero genio :)
cdimauro
01-10-2007, 11:30
Quoto ogni singola parola che hai detto. :)
mad_hhatter
01-10-2007, 11:36
il paragone è lo stesso di un bambino che affronta la matematica per la prima volta. (e non c'è niente di male nel dirlo, non è un'offesa)
Lui di programmazione NON SA' NULLA. Parlare di algoritmi, di heap-sort e quant'altro è una bestialità.
Cioè lo vuoi far partire da argomenti che all'Università non affronti nemmeno al primo anno, quando lui non ha nemmeno mai scritto un Hello World e l'Università la deve ancora cominciare.
Sei un vero genio :)
università di padova, corso di laurea in ing. info. corso di Fondamenti di informatica 1 (primo anno, primo corso di informatica del corso di laurea)... il programma del corso verte su data structures e algoritmi di ordinamento dopo una introduzione al funzionamento di una macchina (esempi in assembly) e una breve panoramica di programmazione strutturata e OO...
il corso è per assoluti principianti.
non sono un genio, hai ragione, ma almeno non parto dal presupposto di aver ragione a priori
DioBrando
01-10-2007, 11:45
università di padova, corso di laurea in ing. info. corso di Fondamenti di informatica 1 (primo anno, primo corso di informatica del corso di laurea)... il programma del corso verte su data structures e algoritmi di ordinamento dopo una introduzione al funzionamento di una macchina (esempi in assembly) e una breve panoramica di programmazione strutturata e OO...
il corso è per assoluti principianti.
si vede che a Padova sono + bravi di altri, dato che Fondamenti lo si studia di solito al secondo anno e non prima di aver affrontato Programmazione 1.
E in ogni caso TheKnowledge l'Università la deve ancora iniziare, non capisco per quale motivo gli si deve presentare difficoltà che potrà poi superare quando avrà le basi e l'impostazione che solo l'Università stessa gli potrà dare.
Vuole imparare a programmare, non vuole laurearsi prima di iscriversi.
non sono un genio, hai ragione, ma almeno non parto dal presupposto di aver ragione a priori
Non si tratta di aver ragione, si tratta di capire che far partire un ragazzo che è a digiuno completo di un argomento, da teorie, modelli di progettazione, algoritmi che stanno alla base di programmi molto + complicati di quelli che dovrà scrivere lui all'inizio, non ha alcun senso.
Poi si vede che abbiamo una visione diversa della metodologia di insegnamento di un qualsiasi argomento (può essere eh).
Ma di solito si comincia dalle cose semplici. Se vuoi possiamo fare un sondaggio e vedere chi preferebbe i due metodi :)
cdimauro
01-10-2007, 11:45
università di padova, corso di laurea in ing. info. corso di Fondamenti di informatica 1 (primo anno, primo corso di informatica del corso di laurea)... il programma del corso verte su data structures e algoritmi di ordinamento dopo una introduzione al funzionamento di una macchina (esempi in assembly) e una breve panoramica di programmazione strutturata e OO...
il corso è per assoluti principianti.
non sono un genio, hai ragione, ma almeno non parto dal presupposto di aver ragione a priori
Non è un genio nemmeno chi ha predisposto un corso del genere "per assoluti principianti". :muro:
mad_hhatter
01-10-2007, 11:50
va bene, allora mettiamola così: quando gli abbiamo mostrato come stampare Hello World e fare la somma di 2 numeri mi dite che strumenti gli abbiamo dato in mano per capire l'intima differenza tra due linguaggi?
@cdimauro: quel corso non ha rappresentato una difficoltà per la maggior parte dei 300 iscritti... forse un buon docente universitario sa fare il suo lavoro :)
cdimauro
01-10-2007, 11:56
va bene, allora mettiamola così: quando gli abbiamo mostrato come stampare Hello World e fare la somma di 2 numeri mi dite che strumenti gli abbiamo dato in mano per capire l'intima differenza tra due linguaggi?
Non era certo qualche esempietto come questo che avevo suggerito.
@cdimauro: quel corso non ha rappresentato una difficoltà per la maggior parte dei 300 iscritti... forse un buon docente universitario sa fare il suo lavoro :)
In tal caso, visto che è un "buon docente", potrebbe benissimo usare il linguaggio macchina: non avrà difficoltà lui e neppure i suoi studenti. Tanto è bravo, no?
Al corso di fisica immagino che si cominci con le equazioni Schrodinger, in geometria con lo spazio di Minkowski, in algebra con gli spazi ellittici, ecc.
Tanto basta avere dei buoni docenti e si può cominciare con quel che si vuole...
DioBrando
01-10-2007, 11:56
ce lo vedo uno studente che viene dal liceo classico, che se và bene è arrivato a studiare trigonometria e forse, dico forse i limiti, affrontare gli argomenti di Fondamenti, prima ancora di fare algebra, analisi 1, Prog1, Logica...
Se non ha rappresentato problemi per la maggiorparte degli iscritti, allora non solo ci sono gli studenti + bravi, ma anche i docenti, evidentemente.
Perchè di tutti i corsi che ci sono in Italia, Fondamenti come primo insegnamento di tutto il corso di laurea, giuro non l'avevo mai sentito.
mad_hhatter
01-10-2007, 12:00
Non era certo qualche esempietto come questo che avevo suggerito.
In tal caso, visto che è un "buon docente", potrebbe benissimo usare il linguaggio macchina: non avrà difficoltà lui e neppure i suoi studenti. Tanto è bravo, no?
Al corso di fisica immagino che si cominci con le equazioni Schrodinger, in geometria con lo spazio di Minkowski, in algebra con gli spazi ellittici, ecc.
Tanto basta avere dei buoni docenti e si può cominciare con quel che si vuole...
come banalizzare un post per il puro gusto di polemizzare... va beh, pazienza
Io sono d'accordo con mad_hhatter, quando si fanno le cose è bene farle bene. Facendo le cose alla carlona comporta il rischio di doverle fare due volte.
cdimauro
01-10-2007, 12:02
come banalizzare un post per il puro gusto di polemizzare... va beh, pazienza
Si vede che la verità dà fastidio, perché quello che hai riportato non sta né in cielo né in terra, didatticamente parlando.
cdimauro
01-10-2007, 12:05
Io sono d'accordo con mad_hhatter, quando si fanno le cose è bene farle bene. Facendo le cose alla carlona comporta il rischio di doverle fare due volte.
Allora cominciamo, e a questo punto anche finiamo, direttamente con Campi Elettromagnetici 2 e Teoria dei Segnali: per un ingegnere che deve operare nel campo dei dispositivi elettronici non c'è niente di meglio.
Allora cominciamo, e a questo punto anche finiamo, direttamente con Campi Elettromagnetici 2 e Teoria dei Segnali: per un ingegnere che deve operare nel campo dei dispositivi elettronici non c'è niente di meglio.
Non vedo cosa c'entri. La teoria deve essere la base della pratica. Anche alle elementari prima di farti fare un esercizio di matematica ti insegnano come fare 1 + 1.
Poi non è detto che uno debba fare TUTTA la teoria prima di passare al linguaggio, ma sicuramente almeno un'infarinatura teorica serve prima di programmare. E te lo dice uno che ha cominciato prima con la pratica, ma che ha capito come funzionavano davvero le cose solo dopo aver fatto la teoria.
DioBrando
01-10-2007, 12:10
Io sono d'accordo con mad_hhatter, quando si fanno le cose è bene farle bene. Facendo le cose alla carlona comporta il rischio di doverle fare due volte.
cioè per te è meglio studiare prima la teoria che sta alla base della programmazione, progettazione inclusa.
Vabbè mi arrendo allora...per me cominciare a programmare significa cercare di risolvere problemi, partendo dai + facili e salendo di difficoltà.
E fare esercizi su esercizi, sbagliare, capire i propri errori, senza preoccuparsi troppo di quel che c'è dietro, perchè poi il tempo per "studiarselo" ne avrà in abbondanza all'Università, con persone competenti.
Anche perchè seguire quel percorso da autodidatta comporta il triplo del tempo (a meno che il soggetto non abbia qualità intellettive sopra la media).
Cmq questo OT per me finisce qui perchè non ha senso continuare, tanto ci sn due visioni antitetiche che non sono conciliabili.
Theknowledge potrà scegliere quindi tra:
- Python e Java (se qlc1 altro vuol fare esempi in altri linguaggi faccia pure)
- un apprendimento teorico oppure pratico
lasciamo parlare gli esempi
cioè per te è meglio studiare prima la teoria che sta alla base della programmazione, progettazione inclusa.
Progettazione esclusa.
Io sono per un approccio misto pratico e teorico. Prima un'introduzione teorica e poi l'implementazione pratica. Argomento per argomento.
cdimauro
01-10-2007, 12:26
Con un linguaggio di scripting semplice e interattivo come Python la teoria si può accompagnare con la pratica.
Comunque sono d'accordo con DioBrando: siamo usciti anche troppo fuori dal seminato. Chiudiamo l'OT e lasciamo che gli esempi illustrino l'approccio dei due linguaggi di programmazione che sono venuti fuori per l'ambito strettamente didattico.
DioBrando
01-10-2007, 13:08
Progettazione esclusa.
Io sono per un approccio misto pratico e teorico. Prima un'introduzione teorica e poi l'implementazione pratica. Argomento per argomento.
attenzione che con quello che io ho scritto non intendevo dire di sbattere la testa solo con la pratica senza accompagnarla ad un minimo di teoria.
Ma c'è teoria e TEORIA, quella trattata in corsi come Fondamenti, Algoritmi e Strutture Dati, Ingegneria del SW non è del tipo consono ad uno che deve ancora cominciare a scrivere un print.
Per il resto sn d'accordo con Cesare, torniamo agli esempi, così l'interessato (e tutti quelli nelle sue condizioni), potrà visivamente valutare quale sia il + adatto.
E gli esempi devono essere semplici, cosicchè possa essere in grado di valutare da solo anche senza saperne un h di classi e quant'altro.
mad_hhatter
01-10-2007, 13:14
per progettazione intendevo qualcosa tipo "non buttarti subito sul codice, fermati a pensare 10 secondi prima di buttar giù la prima idea che ti passa per la testa", mica progettazione di alto livello...
mad_hhatter
01-10-2007, 13:17
potrà visivamente valutare quale sia il + adatto.
E gli esempi devono essere semplici, cosicchè possa essere in grado di valutare da solo anche senza saperne un h di classi e quant'altro.
ma come fa a valutare se non ha le basi? guarda il lato estetico? boh...
DioBrando
01-10-2007, 13:26
ma come fa a valutare se non ha le basi? guarda il lato estetico? boh...
se hai due testi di letteratura del 300 ma non conosci nessuno dei due autori, sei in grado o no di valutare quale testo dei due (anche se non ne comprendi appieno il significato) sia + semplice?
L'unico requisito è un minimo di lingua inglese, che è la lingua del'informatica.
Non sò mi fai delle domande...a Padova siete così sopra la media che non riuscite a venire fuori da questioni del genere, perchè troppo banali?
Vabbè che complicare la vita è tipico della formazione ingegneristica.
Mi ricordo ancora i due professori di reti1 (poi silurati), entrambi ingegneri elettronici, che avevano basato almeno metà del loro corso sul livello fisico, trasformata di Fourier e affini.
Peccato che lo studio di Reti nel nostro corso di laurea fosse orientato alla comprensione dell'interazione con lo sviluppo su web, la creazione di WebServices, insomma se c'era uno strato da capire BENE era il 4° nella scala TCP/IP non il primo.
Ma forse è perchè ci mancano gli ingegneri e docenti di Padova :)
DioBrando
01-10-2007, 13:30
per progettazione intendevo qualcosa tipo "non buttarti subito sul codice, fermati a pensare 10 secondi prima di buttar giù la prima idea che ti passa per la testa", mica progettazione di alto livello...
Io invece quando ho detto pratica intendevo dire scrivere 100 righe di codice, magari a caso, e poi controllare se funzionava, pensa un pò.
Non ho scritto che prima di scrivere codice, doveva rifletterci sopra, perchè mi sembrava un consiglio fin troppo banale, da doverlo dire.
Ma guardando quello che hai risposto tu, forse non era così banale dato che non hai compreso quello che intendevo dire poco sopra.
E in ogni caso, che poi è il primo insegnamento in un corso di Programmazione1 (un corso normale, a Padova non sò come lavoriate), è quello di buttare giù la soluzione su carta, ragionando sul problema, per poi implementarla con un codice, dalla + banale alla + complessa.
E scriverla magari in "pseudocodice", che poi l'utente imparerà a capire cosa significhi.
Possiamo tornare agli esempi ora?
mad_hhatter
01-10-2007, 13:34
personalmente l'approccio solo pratico in cui si inizia a dare in pasto al compilatore qualche riga di codice, magari scopiazzata da un paio di esempi di cui si scapisce mezza istruzione su 3 non porta troppo lontano... non si ha mai una visione d'insieme di cosa si sta facendo e di cosa si sta maneggiando. E' un approccio che posso accettare per imparare un linguaggio, ma non per imparare a programmare. non si sa mai cosa venga fuori da un metodo di studio di questo tipo... applicare le cose senza capirle è il modo peggiore di apprendere.
altro esempio per chi pensa che la didattica fatta ANCHE di assembly sia sbagliata... supponiamo di avere a che fare col C#. In c# ci sono sia gli oggetti che le struct... se non ho presente come è fatta una macchina (anche in modo astratto) come posso sperare di capire perché il linguaggio introduce queste due forme di dato e quando usare una al posto dell'altra?
è un esempio, di un caso molto particolare, ma spero faccia capire il mio punto di vista...
variabilepippo
01-10-2007, 13:37
ma come fa a valutare se non ha le basi? guarda il lato estetico? boh...
Più o meno... Dovrebbe scegliere il linguaggio che gli sembra più comprensibile e più vicino al suo modo di ragionare, entrambi i requisiti sono strettamente soggettivi quindi riconducibili in senso lato all'aspetto "estetico". ;)
Mi ricordo ancora i due professori di reti1 (poi silurati), entrambi ingegneri elettronici, che avevano basato almeno metà del loro corso sul livello fisico, trasformata di Fourier e affini.
Peccato che lo studio di Reti nel nostro corso di laurea fosse orientato alla comprensione dell'interazione con lo sviluppo su web, la creazione di WebServices, insomma se c'era uno strato da capire BENE era il 4° nella scala TCP/IP non il primo.
In realtà credo sia normale che nell'insegnamento di Reti UNO si parta dal livello fisico e si vada a salire, magari senza arrivare neanche all'Application Layer. Web Services, programmazione Web e tutto il resto dovrebbero essere trattati in esami diversi, "Programmazione per il Web" o "Ingegneria del Web" per esempio.:rolleyes:
mad_hhatter
01-10-2007, 13:45
se hai due testi di letteratura del 300 ma non conosci nessuno dei due autori, sei in grado o no di valutare quale testo dei due (anche se non ne comprendi appieno il significato) sia + semplice?
L'unico requisito è un minimo di lingua inglese, che è la lingua del'informatica.
Non sò mi fai delle domande...a Padova siete così sopra la media che non riuscite a venire fuori da questioni del genere, perchè troppo banali?
Vabbè che complicare la vita è tipico della formazione ingegneristica.
Mi ricordo ancora i due professori di reti1 (poi silurati), entrambi ingegneri elettronici, che avevano basato almeno metà del loro corso sul livello fisico, trasformata di Fourier e affini.
Peccato che lo studio di Reti nel nostro corso di laurea fosse orientato alla comprensione dell'interazione con lo sviluppo su web, la creazione di WebServices, insomma se c'era uno strato da capire BENE era il 4° nella scala TCP/IP non il primo.
Ma forse è perchè ci mancano gli ingegneri e docenti di Padova :)
ritengo che la scelta del linguaggio fatta solo sulla base di quanto semplice è la sintassi evidenziata in una manciata di esempi sia quanto meno poco oculata e superficiale, soprattutto se sto imparando a programmare.
la mia non è formazione ingegneristica, è approccio logico-matematico: parto da alcuni presupposti, semplici e ben definiti e poi procedo... è molto semplice di quanto vuoi far sembrare. Senza nessuna pretesa di superiorità intellettuale, anzi, al contrario: più una cosa è semplice, più è efficace.
Ho portato l'esempio di Padova per mostrare un esempio di didattica... se tu lo vuoi vedere come un modo di guardare gli altri dall'alto in basso questa è un'interpretazione tua e che non trova alcuna corrispondenza col mio pensiero, col mio atteggiamento o con quanto ho scritto.
Da nessuna parte ho scritto che essere ingegneri è sinonimo di far le cose per bene, ho soltanto detto che un mio docente ha seguito un certo percorso nella sua didattica e che questo metodo è stato apprezzato... se poi tu ci leggi altro non è un mio problema
DioBrando
01-10-2007, 13:48
personalmente l'approccio solo pratico in cui si inizia a dare in pasto al compilatore qualche riga di codice, magari scopiazzata da un paio di esempi di cui si scapisce mezza istruzione su 3 non porta troppo lontano... non si ha mai una visione d'insieme di cosa si sta facendo e di cosa si sta maneggiando. E' un approccio che posso accettare per imparare un linguaggio, ma non per imparare a programmare. non si sa mai cosa venga fuori da un metodo di studio di questo tipo... applicare le cose senza capirle è il modo peggiore di apprendere.
Mi sà che forse c'è un difetto di comprensione nelle parole in cui scrivo, perchè io scrivo una cosa e voi ne capite un'altra.
Oppure sono che io non sò parlare, cosa possibilissima e allora cerco di spiegarmi meglio, come se dovessi parlare a un bambino di 5 anni :)
Io NON ho scritto che l'approccio debba essere quello di scrivere codice, capire cosa faccia, ripetere finchè non viene giusto e passare a scrivere del codice + complesso ecc. ecc.
Quello è un procedimento esclusivamente pratico (empirico) che non ti permette di capire quale sia logica dietro alla sequenza di parole e simboli che formano un codice sorgente.
E infatti in un corso di Programmazione 1, normale, il percorso didattico è: ti spiego una struttura, ti mostro degli esempi e ti dò degli esercizi da svolgere.
Quando avrai compreso appieno l'utilizzo di quella struttura, passiamo ad una fase successiva.
E' chiaro però che non posso spiegarti TUTTO il codice che andrai scrivere, altrimenti accadrebbe che prima ancora di capire cosa sia un ciclo if-else, debba spiegarti come funzioni il metodo main, cosa sia un metodo, cosa sia una classe, cosa sia un'eccezione e via avanti.
Per fare un paragone, è come se un 18enne andasse a lezioni di guida e prima ancora di aver imparato a mettere la prima, si sorbisse tutta la teoria di come funziona il ciclo del motore a scoppio.
IMHO è il modo migliore per fare confusione in testa, primo, secondo creare disgusto in chi, prima di cominciare, trova che la programmazione sia divertente.
Poi la si può pensare in modo diverso, d'altra parte se a Padova hanno scelto Fondamenti 1 come primo insegnamento, che ci siano opinioni diverse dalla mia e che anzi hanno preso piede, è un dato di fatto.
altro esempio per chi pensa che la didattica fatta ANCHE di assembly sia sbagliata... supponiamo di avere a che fare col C#. In c# ci sono sia gli oggetti che le struct... se non ho presente come è fatta una macchina (anche in modo astratto) come posso sperare di capire perché il linguaggio introduce queste due forme di dato e quando usare una al posto dell'altra?
è un esempio, di un caso molto particolare, ma spero faccia capire il mio punto di vista...
per imparare a capire come funziona una macchina c'è il corso di Architettura 1 e 2 che assolve questo ruole, dove, a seconda del tipo di corso, si studiano ANCHE (ma non sempre) piccoli esempi di codice ASM.
La cosa muore lì però perchè ormai lo studio ed il mondo del lavoro è focalizzato su linguaggi ad alto livello.
L'utente che ha citato prima ASM ha fatto una generica citazione dicendo che all'inizio poteva cominciare con X e poi passare a cose "+ toste", come C++, Assembly ecc.
Il che è diverso dal dire "sì ti puoi dare un'occhiata a questo linguaggio per capire meglio come lavora e ragiona una macchina".
Almeno dall'italiano che ho imparato io.
Poi non sò, se si vuole interpretare diversamente anche questo, fate vobis. :)
mad_hhatter
01-10-2007, 13:49
Più o meno... Dovrebbe scegliere il linguaggio che gli sembra più comprensibile e più vicino al suo modo di ragionare, entrambi i requisiti sono strettamente soggettivi quindi riconducibili in senso lato all'aspetto "estetico". ;)
se per linguaggio intendi un paradigma, cioè un modo di ragionare e un determinato approccio alla risoluzione di una classe di problemi, allora sono d'accordo... ma non sono d'accordo se la scelta è tra linguaggi differenti che adottano lo stesso punto di vista
DioBrando
01-10-2007, 13:56
In realtà credo sia normale che nell'insegnamento di Reti UNO si parta dal livello fisico e si vada a salire, magari senza arrivare neanche all'Application Layer. Web Services, programmazione Web e tutto il resto dovrebbero essere trattati in esami diversi, "Programmazione per il Web" o "Ingegneria del Web" per esempio.:rolleyes:
ingegneria del Web non esiste :asd:
Ripeto che continuo a non capire per quale motivo le mie parole siano interpretate in un modo diverso da quel che c'è scritto.
Ho forse detto che il docente avrebbe dovuto saltare a piè pari gli strati e presentare solo quello Applicativo?
Se sì mi quoti dove esattamente?
In un corso triennale dove si studia soltanto Reti1, datosi che alcuni studenti possono decidere di non continuare, focalizzare META' del corso sullo strato fisico, sacrificando il resto, quando l'obiettivo formativo del corso di laurea è web-oriented, è una stupidaggine.
A che serve la specializzazione se poi gli argomenti sono gli stessi di Ingegneria Informatica, Informatica di corsi + tradizionali?
E a che serve la divisione tanto pubblicizzata del 3+2? (e in effetti a volte me lo chiedo)
Allora tanto vale fare un UNICO corso di laurea di Informatica per tutta l'Italia no?
mad_hhatter
01-10-2007, 14:02
Io NON ho scritto che l'approccio debba essere quello di scrivere codice, capire cosa faccia, ripetere finchè non viene giusto e passare a scrivere del codice + complesso ecc. ecc.
Quello è un procedimento esclusivamente pratico (empirico) che non ti permette di capire quale sia logica dietro alla sequenza di parole e simboli che formano un codice sorgente.
E infatti in un corso di Programmazione 1, normale, il percorso didattico è: ti spiego una struttura, ti mostro degli esempi e ti dò degli esercizi da svolgere.
Quando avrai compreso appieno l'utilizzo di quella struttura, passiamo ad una fase successiva.
E' chiaro però che non posso spiegarti TUTTO il codice che andrai scrivere, altrimenti accadrebbe che prima ancora di capire cosa sia un ciclo if-else, debba spiegarti come funzioni il metodo main, cosa sia un metodo, cosa sia una classe, cosa sia un'eccezione e via avanti.
ma su questo siamo d'accordo! è ovvio che per teoria non si intende "leggiti prima tutta la letteratura informatica e poi vediamo", che discorso è? è ovvio che si va per gradi e per esempi, ma appunti gli esempi vengono dopo, per mostrare quello che ti ho spiegato, non prima e al posto della spiegazione.
la cosa da cui son partito è criticare il fatto che si insistesse a concentrarsi sul linguaggio in sè invece che sulla programmazione. tutto qua...
per imparare a capire come funziona una macchina c'è il corso di Architettura 1 e 2 che assolve questo ruole, dove, a seconda del tipo di corso, si studiano ANCHE (ma non sempre) piccoli esempi di codice ASM.
La cosa muore lì però perchè ormai lo studio ed il mondo del lavoro è focalizzato su linguaggi ad alto livello.
L'utente che ha citato prima ASM ha fatto una generica citazione dicendo che all'inizio poteva cominciare con X e poi passare a cose "+ toste", come C++, Assembly ecc.
Il che è diverso dal dire "sì ti puoi dare un'occhiata a questo linguaggio per capire meglio come lavora e ragiona una macchina".
Almeno dall'italiano che ho imparato io.
Poi non sò, se si vuole interpretare diversamente anche questo, fate vobis. :)
per capire come funziona NEL DETTAGLIO la macchina ci sono quei corsi, ma per un'infarinatura di cos'è una macchina bastano poche lezioni per proporre i concetti basilari necessari al resto del corso (che resta un corso introduttivo alla programmazione)
DioBrando
01-10-2007, 14:12
ritengo che la scelta del linguaggio fatta solo sulla base di quanto semplice è la sintassi evidenziata in una manciata di esempi sia quanto meno poco oculata e superficiale, soprattutto se sto imparando a programmare.
se la vuoi mettere su questo piano allora il consiglio migliore che puoi dare è:
"theKnowledge aspetta l'Università per programmare".
Perchè il tuo approccio se fatto da autodidatta non funziona.
A meno che la persona non sia estremamente portata, è inutile imparare i fondamenti della programmazione e addentrarsi in problematiche che nell'Università vengono spezzettate in diversi corsi specifici (e quindi viene da sè, che il livello di nozioni e competenze da acquisire non è certo uno scherzo).
Aspetta il primo anno, in cui verrà seguito da un professore, potrà confrontarsi con i coetanei, avrà i laboratori, i ricevimenti ecc. ecc.
E così non correrà nemmeno il rischio di dover fare tabula rasa perchè studiando da solo ha imparato che una struttura funzionava in un certo modo e invece funziona in un altro.
la mia non è formazione ingegneristica, è approccio logico-matematico: parto da alcuni presupposti, semplici e ben definiti e poi procedo... è molto semplice di quanto vuoi far sembrare. Senza nessuna pretesa di superiorità intellettuale, anzi, al contrario: più una cosa è semplice, più è efficace.
a mio modo di vedere l'approccio logico-matematico per chi non ha la + pallida idea di cosa sia la programmazione, non è affatto il + banale.
Punti di vista.
E in ogni caso, permettimi ma quando vuoi invogliare qualcuno ad iniziare a programmare, dirgli che prima si deve studiare algoritmi, strutture dati, progettazione non è certo il modo migliore.
Anche perchè tu adesso vieni a dire che sono esempi facili ecc. ma quando intendi progettazione sai benissimo cosa significhi (o almeno credo) e quali metodologie si nascondano dietro questa parola.
Quindi circostanzi solo ora, quando invece dietro una parola poteva nascondersi l'uso di Design Patterns, TDD...argomenti non certo adatti e comprensibili per un novellino.
Ho portato l'esempio di Padova per mostrare un esempio di didattica... se tu lo vuoi vedere come un modo di guardare gli altri dall'alto in basso questa è un'interpretazione tua e che non trova alcuna corrispondenza col mio pensiero, col mio atteggiamento o con quanto ho scritto.
Da nessuna parte ho scritto che essere ingegneri è sinonimo di far le cose per bene, ho soltanto detto che un mio docente ha seguito un certo percorso nella sua didattica e che questo metodo è stato apprezzato... se poi tu ci leggi altro non è un mio problema
Non ho detto che guardi gli altri dall'alto verso il basso, la mia era solo un'annotazione ironica sul fatto che per te è tutto facile.
Lui non sà niente e allora partiamo con la "progettazione", le strutture dati.
Perchè è facile? Perchè noi a Padova abbiamo studiato queste cose in Fondamenti 1, Fondamenti 1 è stato il primo corso universitario e dato che gli studenti sono stati bravi a superare questo scoglio allora tanto vale che anche lui inizi così.
Per carità può essere un metodo che funziona. Io dico di no, perchè, guarda caso, nei corsi che ho guardato in giro per l'Italia, nessuno adotta questo tipo di percorso didattico.
E ti faccio notare comunque che il tuo ragionamento segue proprio la logica empirico-deduttiva che invece hai prontamente dimostrato di non apprezzare poco sopra.
"Abbiamo fatto tot argomenti nel primo corso, è andato bene e allora è un metodo valido".
Una discreta contraddizione ;)
DioBrando
01-10-2007, 14:23
ma su questo siamo d'accordo! è ovvio che per teoria non si intende "leggiti prima tutta la letteratura informatica e poi vediamo", che discorso è? è ovvio che si va per gradi e per esempi, ma appunti gli esempi vengono dopo, per mostrare quello che ti ho spiegato, non prima e al posto della spiegazione.
beh allora scusa riformula meglio il tuo pensiero, perchè tu prima hai scritto di studiare la teoria della programmazione e dopo scegliere il linguaggio.
In un corso di programmazione universitario questo non succede proprio perchè, come hai detto tu stesso, la teoria si accompagna agli esempi in modo che si fissi meglio nelle teste di chi studia.
E come li facciamo gli esempi se non scegliamo nessun linguaggio con cui svilupparli?
Con il pongo? :D
la cosa da cui son partito è criticare il fatto che si insistesse a concentrarsi sul linguaggio in sè invece che sulla programmazione. tutto qua...
ma qua nessuno, credo, quando abbiamo discusso dello strumento migliore per imparare a programmare, ha detto o pensato che il tutto si sarebbe dovuto fare senza il supporto della teoria.
Anche perchè sarebbe una vaccata e infatti era talmente scontato che nessuno (magari colpevolmente) l'ha messo in chiaro.
Ora che cmq è chiaro che le cose vadano fatte di pari passo, possiamo andare avanti? :)
per capire come funziona NEL DETTAGLIO la macchina ci sono quei corsi, ma per un'infarinatura di cos'è una macchina bastano poche lezioni per proporre i concetti basilari necessari al resto del corso (che resta un corso introduttivo alla programmazione)
A parte che in un X libro di programmazione abbastanza corposo, l'introduzione a come funzioni un computer, la macchina di Von Neumann ecc. ci sono quasi sempre, io continuo a sostenere che un minestrone di troppe cose fà solo confusione in testa.
Lui dovrebbe studiarsi i concetti basilari di Architettura 1 ( e poi quali sono? Sii n pò + specifico così si fà un'idea anche lui), poi di Algoritmi e strutture dati, poi una spruzzatina di OOP, poi qualcosa sulla progettazione (non sò UML?)...poi?
Io invece per non dover stabilire i confini di quali sono i concetti basilari da sapere e quali no, visto che poi tutte queste cose le approfondirà a tempo debito, sono per la soluzione "make it simple".
ovvero tagliare alla radice e lasciar perdere.
Imparare a conoscere le strutture fondamentali della programmazione (cicli, array), seguendo la teoria ed applicandola con esempi ed esercizi.
Io la vedo così :)
AnonimoVeneziano
01-10-2007, 14:26
cioè per te è meglio studiare prima la teoria che sta alla base della programmazione, progettazione inclusa.
Assurdo, non reggerebbe 2 giorni
Ciao
DioBrando
01-10-2007, 14:31
Assurdo, non reggerebbe 2 giorni
Ciao
quel che pensavo anche io...e infatti non devi dirlo a me ;)
Ciao a tutti. Tempo fa avevo pensato di aprire anch'io un post con una domanda simile, del tipo: " da dove inizio x imparare a programmare?"
Mi scuso con 'The knowledge' se mi intrometto, ma visto che questo post mi interessava, volevo approfittarne.
Io di programmazione sono moolto niubbo, so usare solo il labview (nn so se conoscete). Siccome per necessità devo utilizare dei programmi che hanno il codice in C o C++, volevo imparare questo linguaggio. Nonostante il manuale e la volontà, ho capito che cominciare così, senza un corso base è impossibile (almeno per me, chiaro).
Non so perchè ma mi fido delle parole dei pythoniani, nonostante il java sembra essere più utilizzato e diffuso (web, programmi win, applicazioni per cellulari). Dite che cominciare con questo per imparare la logica e poi passare ad un altro linguaggio imparandosi la nuova sintassi sia cosa fattibile?
grazie
isAlreadyInUse
01-10-2007, 15:39
Tratto da
How To Become A Hacker, rev. 1.15, October 03, 2002 di Eric Steven Raymond
1. Impara a programmare.
Questa, ovviamente, è la capacità fondamentale dell'hacker. Se non conosci alcun linguaggio di programmazione, ti suggerisco di iniziare con Python. È progettato in maniera chiara, ben documentato e abbastanza adatto ai principianti. Malgrado sia un buon linguaggio con il quale cominciare, non è proprio un giocattolo; è molto potente e flessibile e adatto anche a grandi progetti. Ho scritto una più dettagliata recensione su Python. Dei buoni manuali sono disponibili sul sito web di Python.
Anche Java è un buon linguaggio per imparare a programmare. È più difficile di Python, ma produce un codice più veloce rispetto a Python. Lo ritengo un eccellente secondo linguaggio.
Ma devi essere conscio che non raggiungerai i livelli di abilità di un hacker o più semplicemente di un programmatore se conosci solamente uno o due linguaggi - hai bisogno di imparare a pensare ai problemi legati alla programmazione in maniera più generale, indipendentemente dal linguaggio specifico. Per essere un vero hacker, hai bisogno di arrivare al punto di poter apprendere un nuovo linguaggio in pochi giorni semplicemente confrontando il manuale con quanto già sai. Questo significa che dovrai imparare parecchi linguaggi differenti tra loro.
Se vuoi dedicarti seriamente alla programmazione, dovrai imparare il C, il linguaggio cardine di Unix. Il C++ è molto vicino al C; se già ne conosci uno, non ti sarà difficile imparare l'altro. Nessuno di questi due linguaggi, comunque, è adatto per iniziare ad imparare. E, al momento, quanto più riesci a evitare di programmare in C tanto più sarai produttivo.
Il C è veramente efficiente, e utilizza al meglio le risorse della macchina. Sfortunatamente, C fornisce questa efficienza in cambio di una notevole mole di lavoro manuale per la gestione delle risorse (quali la memoria) ad un basso livello. Tutta la programmazione di basso livello è complessa e soggetta a bug, e ti richiederà un'enorme quantità di tempo per il debugging. Con le odierne macchine, così potenti, questo in genere rappresenta un cattivo compromesso - è più conveniente utilizzare un linguaggio che impiega in maniera meno efficiente il tempo della macchina ma che impiega più efficacemente il tuo tempo. Ad esempio, Python.
Altri linguaggi di particolare importanza per gli hacker sono Perl e LISP. Perl è degno di essere appreso per ragioni pratiche; è largamente utilizzato per costruire pagine web dinamiche e per l'amministrazione di sistema; così, anche se non dovrai mai scrivere in Perl, dovresti imparare almeno a leggerlo. Molte persone usano Perl nella maniera in cui io suggerisco di usare Python, per evitare di programmare in C quei lavori che non richiedono l'efficienza della macchina che C fornisce. Avrai bisogno di essere in grado di capire il loro codice.
LISP è da imparare per un altro motivo: la profonda e illuminante esperienza che proverai quando finalmente riuscirai a farlo tuo. Questa esperienza ti renderà un programmatore migliore per il resto dei tuoi giorni, anche se non lo utilizzerai poi molto. (Puoi procurarti qualche esperienza iniziale con LISP in maniera abbastanza semplice realizzando e modificando le modalità di editing per l'editor di testo Emacs.)
È meglio, addirittura, imparare tutti questi cinque linguaggi (Python, Java, C/C++, Perl e LISP). Oltre che essere i linguaggi più importanti per l'hacking, essi rappresentano approcci molto differenti alla programmazione, e ognuno ti educherà in maniera preziosa.
Non posso fornire qui delle istruzioni complete su come imparare a programmare - è un compito complesso. Ma posso dirti che libri e corsi vari non te lo insegnano (molti, forse la maggior parte dei migliori hacker è autodidatta). Puoi imparare le caratteristiche dei linguaggi - frammenti di conoscenza - dai libri, ma l'approccio mentale che trasforma quella conoscenza in reali capacità può essere appreso solo mediante la pratica e l'apprendistato. Ciò che devi fare è (a) leggere codice e (b) scrivere codice.
Imparare a programmare è come imparare a scrivere bene nel linguaggio nativo. Il miglior modo per farlo è leggere del materiale scritto dai maestri della forma, scrivere qualcosa per conto proprio, leggere molto di più, scrivere qualcosa in più, leggere molto di più, scrivere qualcosa in più... e ripetere il tutto finché la tua scrittura inizia a sviluppare la forza e l'economia che vedi nei tuoi modelli.
Una volta, trovare del buon codice da leggere era un'impresa ardua, poiché esistevano ben pochi programmi disponibili anche sotto forma di codice sorgente, a disposizione degli hacker per la lettura e la manipolazione. Tutto ciò è cambiato radicalmente; software open-source, strumenti per la programmazione e sistemi operativi (tutti costruiti da hacker) sono oggi largamente disponibili. Questo mi porta al prossimo argomento...
cdimauro
01-10-2007, 15:39
Ciao a tutti. Tempo fa avevo pensato di aprire anch'io un post con una domanda simile, del tipo: " da dove inizio x imparare a programmare?"
Mi scuso con 'The knowledge' se mi intrometto, ma visto che questo post mi interessava, volevo approfittarne.
Io di programmazione sono moolto niubbo, so usare solo il labview (nn so se conoscete). Siccome per necessità devo utilizare dei programmi che hanno il codice in C o C++, volevo imparare questo linguaggio. Nonostante il manuale e la volontà, ho capito che cominciare così, senza un corso base è impossibile (almeno per me, chiaro).
Non so perchè ma mi fido delle parole dei pythoniani, nonostante il java sembra essere più utilizzato e diffuso (web, programmi win, applicazioni per cellulari). Dite che cominciare con questo per imparare la logica e poi passare ad un altro linguaggio imparandosi la nuova sintassi sia cosa fattibile?
grazie
Certamente: è da un pezzo che lo ripetiamo. :)
Intanto acquisisci le basi della programmazione con un linguaggio semplice (ma NON sempliciotto) come Python, e poi passare a un linguaggio più complicato sarà una questione di mero esercizio.
Per complicarsi la vita c'è sempre tempo. :p
'mazza.. sti pythoniani sono peggio dei testimoni di geova (senza offesa ovviamente) :doh:
sapete cosa vi dico? chi vuole iniziare dovrebbe iniziare con il C e se si arrende per qualche segfault vuol dire che la programmazione non fa per lui :O
piccola nota: io quando guardo un programma python vedo una massa informe di righe di codice, mentre se guardo un programma java già a occhio riesco a individuare alcune caratteristiche. forse non l'avete capito, ma scrivere meno righe di codice significa dare meno informazione per forza di cose
cdimauro
01-10-2007, 16:15
No, significa dare informazioni IN FORMA DIVERSA. ;) Ed è una forma molto chiara, per quanto mi riguarda.
Per il resto, se suggerisci il C tanto vale passare direttamente al linguaggio macchina: non ti arrenderai mica di fronte alle tabelle degli opcode, vero? :D
aimè! la sottile linea di confine tra elettronica e informatica :D
tra l'altro le informazioni saranno pure in forma diversa e fantastica, ma sono meno indubbiamente
variabilepippo
01-10-2007, 17:34
In un corso triennale dove si studia soltanto Reti1, datosi che alcuni studenti possono decidere di non continuare, focalizzare META' del corso sullo strato fisico, sacrificando il resto, quando l'obiettivo formativo del corso di laurea è web-oriented, è una stupidaggine.
A che serve la specializzazione se poi gli argomenti sono gli stessi di Ingegneria Informatica, Informatica di corsi + tradizionali?
E a che serve la divisione tanto pubblicizzata del 3+2? (e in effetti a volte me lo chiedo)
Me lo chiedo anch'io da molto tempo... Ripeto il concetto espresso nel messaggio precedente, forse non è filtrato correttamente: secondo me un corso di Reti I NON dovrebbe trattare minimamente lo sviluppo Web, in un piano di studi *serio* di una laurea triennale dovrebbe esserci spazio per l'analisi dello stack ISO/OSI (Reti I) E per l'approccio web-oriented alla programmazione in 2 insegnamenti *diversi*. Gli argomenti *possono* essere approfonditi da chi decide di seguire la specializzazione con corsi specifici: Reti II e Programmazione per il Web II (o denominazioni analoghe).
Ovviamente la colpa non è degli studenti (le vere vittime del 3+2) ma di chi crea percorsi accademici assolutamente lacunosi e/o cervellotici.
Un po' allibisco. Forse qui non si conosce esattamente Java. I due esempi che ho fatto non sono stati presi a caso. Entrambi usano librerie che in Java sono standard e disponibili per nove sistemi operativi diversi (tutti quelli per i quali esiste una piattaforma Java). Non ho visto l'esempio fatto con tk, lo dò per scontato perchè mi fido, quindi diciamo 1 a zero. Per Java.
C'è di più. Il secondo esempio è un caso di programmazione concorrente in Java. Mi premeva farlo per render chiaro che programmare in Java significa scontrarsi con la programmazione concorrente: Java è un linguaggio concorrente orientato agli oggetti. E' importate tenerlo presente, siamo nell'era del calcolo parallelo. Due a niente.
Il codice mostra anche l'unità fondamentale della programmazione Java: la classe. Avere un'unità fondamentale per un linguaggio significa essere noioso, ripetitivo, verbose e certo: perchè in Java io so che le librerie usate nei due esempi hanno la stessa forma dei programmi che ho scritto. E so anche che la forma delle librerie usate per il corrispettivo Python è diversa dalla forma del programma Python che le usa. Tre a nulla.
Java è un linguaggio molto omogeneo (certo non quanto avrebbe potuto) e ripetitivo. Sono due cose che aiutano l'apprendimento. E questa non è aria tirata dal camino: teoria dell'anafora a dei pattern, psicologia cognitiva, scienza dell'apprendimento umano. Facciamo quattro?
Ps.: la sintesi è un processo distruttivo, per la banale considerazione che se dire con meno significasse dire la stessa cosa allora la differenza tra il più e il meno non vorrebbe dire nulla e dunque il più coiciderebbe col meno.
cdimauro
01-10-2007, 18:21
tra l'altro le informazioni saranno pure in forma diversa e fantastica, ma sono meno indubbiamente
Spero non dirai la stessa cosa di un segnale a cui hai appena applicato una trasformata di Fourier: le informazioni sono le stesse o di meno?
Qui è concettualmente la stessa cosa: la soluzione viene data da entrambi i sorgenti, ma in forma diversa. Infatti l'informazione trasportata è la stessa: quella che permette di costruire la soluzione al problema. Né più né meno.
Spero non dirai la stessa cosa di un segnale a cui hai appena applicato una trasformata di Fourier: le informazioni sono le stesse o di meno?
il paragone con la trasformata di fourier non riesco a immaginarlo.. nel caso dei segnali sinusoidali possiamo riassumere tutta l'informazione usando 2 parametri per il semplice motivo che tutto il resto è ridondante (solo in teoria, perchè come sappiamo si tratta di un'approssimazione della realtà quella di usare i segnali sinusoidali).
ora nei sorgenti java che ha postato PGI-Bis non vedo niente di ridondante, ogni singola riga di codice significa qualcosa
Qui è concettualmente la stessa cosa: la soluzione viene data da entrambi i sorgenti, ma in forma diversa. Infatti l'informazione trasportata è la stessa: quella che permette di costruire la soluzione al problema. Né più né meno.
tutti e due i programmi risolvono il problema, ma in uno dei due molta dell'informazione è implicita.
inoltre non si può fare il confronto utilizzando librerie esterne al framework, altrimenti ti posso fare tutti i programmi che vuoi importando una libreria fatta da me e chiamando una singola funzione all'interno del programma :D
infine PGI-Bis ha linkato la documentazione per capire come funziona il suo programma.. voi no ;)
cdimauro
01-10-2007, 18:50
Un po' allibisco. Forse qui non si conosce esattamente Java. I due esempi che ho fatto non sono stati presi a caso.
Questo era evidente. :p
Entrambi usano librerie che in Java sono standard e disponibili per nove sistemi operativi diversi (tutti quelli per i quali esiste una piattaforma Java).
Solo quelli supportati da Sun. Inoltre le API di Java non sono supportate da tutti i s.o..
Non ho visto l'esempio fatto con tk, lo dò per scontato perchè mi fido, quindi diciamo 1 a zero. Per Java.
Direi proprio di no: l'uso di librerie standard NON era un requisito del problema. Si doveva fornire una soluzione al problema, e ciò è stato fatto. Tu hai scelto la libreria standard e variabilepippo wxPython: scelte perfettamente legittime.
I confronti si fanno, quindi, sulle due soluzioni proposte. ;)
C'è di più. Il secondo esempio è un caso di programmazione concorrente in Java. Mi premeva farlo per render chiaro che programmare in Java significa scontrarsi con la programmazione concorrente: Java è un linguaggio concorrente orientato agli oggetti. E' importate tenerlo presente, siamo nell'era del calcolo parallelo. Due a niente.
Non era nei requisiti del problema. Quindi idem come sopra.
Poi stai tirando fuori addirittura la programmazione concorrente a uno che non sa nemmeno com'è fatta una variabile: mi sembra UN TANTINO OT, non trovi? :D
Il codice mostra anche l'unità fondamentale della programmazione Java: la classe.
Che non serve a nulla nello specifico: quello che hai usato è codice procedurale nudo e crudo.
Avere un'unità fondamentale per un linguaggio significa essere noioso, ripetitivo, verbose e certo: perchè in Java io so che le librerie usate nei due esempi hanno la stessa forma dei programmi che ho scritto. E so anche che la forma delle librerie usate per il corrispettivo Python è diversa dalla forma del programma Python che le usa. Tre a nulla.
Scusa, ma questo come fai a dirlo? Hai dato un'occhiata ai sorgenti delle librerie Python per poterlo affermare?
Ecco un pezzo della libreria Tk che riporta una parte del codice della classe "principale":
class Tk(Misc, Wm):
"""Toplevel widget of Tk which represents mostly the main window
of an appliation. It has an associated Tcl interpreter."""
_w = '.'
def __init__(self, screenName=None, baseName=None, className='Tk',
useTk=1, sync=0, use=None):
"""Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will
be created. BASENAME will be used for the identification of the profile file (see
readprofile).
It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME
is the name of the widget class."""
self.master = None
self.children = {}
self._tkloaded = 0
# to avoid recursions in the getattr code in case of failure, we
# ensure that self.tk is always _something_.
self.tk = None
if baseName is None:
import sys, os
baseName = os.path.basename(sys.argv[0])
baseName, ext = os.path.splitext(baseName)
if ext not in ('.py', '.pyc', '.pyo'):
baseName = baseName + ext
interactive = 0
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
if useTk:
self._loadtk()
self.readprofile(baseName, className)
E' codice Python, mi pare.
Questo:
class Control(Window):
"""
This is the base class for a control or 'widget'.
A control is generally a small window which processes user input
and/or displays one or more item of data.
"""
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
def __init__(self, *args, **kwargs):
"""
__init__(self, Window parent, int id=-1, Point pos=DefaultPosition,
Size size=DefaultSize, long style=0, Validator validator=DefaultValidator,
String name=ControlNameStr) -> Control
Create a Control. Normally you should only call this from a subclass'
__init__ as a plain old wx.Control is not very useful.
"""
_core_.Control_swiginit(self,_core_.new_Control(*args, **kwargs))
self._setOORInfo(self)
è lo stesso, ma preso, dalla libreria wxPython.
Infine questo:
class Image:
format = None
format_description = None
def __init__(self):
self.im = None
self.mode = ""
self.size = (0, 0)
self.palette = None
self.info = {}
self.category = NORMAL
self.readonly = 0
è preso dalla Python Image Library.
Tutto codice Python e... che si usa come Python comanda.
Java è un linguaggio molto omogeneo (certo non quanto avrebbe potuto) e ripetitivo. Sono due cose che aiutano l'apprendimento. E questa non è aria tirata dal camino: teoria dell'anafora a dei pattern, psicologia cognitiva, scienza dell'apprendimento umano. Facciamo quattro?
Anche Python è un linguaggio omogeneo. Per ripetitivo poi bisognerebbe vedere esattamente cosa intendi.
Ps.: la sintesi è un processo distruttivo, per la banale considerazione che se dire con meno significasse dire la stessa cosa allora la differenza tra il più e il meno non vorrebbe dire nulla e dunque il più coiciderebbe col meno.
L'importante è l'informazione trasmessa, come dicevo nell'altro messaggio a kont3, e questa non viene certo "distrutta" passando da una "base" a un'altra.
Facciamo 4 a zero per Python. :D
cdimauro
01-10-2007, 18:57
il paragone con la trasformata di fourier non riesco a immaginarlo.. nel caso dei segnali sinusoidali possiamo riassumere tutta l'informazione usando 2 parametri per il semplice motivo che tutto il resto è ridondante (solo in teoria, perchè come sappiamo si tratta di un'approssimazione della realtà quella di usare i segnali sinusoidali).
ora nei sorgenti java che ha postato PGI-Bis non vedo niente di ridondante, ogni singola riga di codice significa qualcosa
Bene, e la stessa cosa avviene con Python, ma IN FORMA DIVERSA.
tutti e due i programmi risolvono il problema, ma in uno dei due molta dell'informazione è implicita.
Niente è implicito: ogni oggetto usato ha le sue PRECISE caratteristiche. Caratteristiche si imparano man mano che si costruiscono le BASI, esattamente come l'uso di una classe che nei sorgenti in Java attualmente fa la figura della bella statuina.
inoltre non si può fare il confronto utilizzando librerie esterne al framework, altrimenti ti posso fare tutti i programmi che vuoi importando una libreria fatta da me e chiamando una singola funzione all'interno del programma :D
Infatti, visto che il tema era quello di iniziare a programmare, l'uso delle librerie è un argomento più avanzato.
Un argomento che, quindi, andrebbe trattato DOPO che aver provveduto a imparare le basi della programmazione, e come si impara a usare una libreria standard, lo stesso si può fare con una che non lo è.
Infine l'uso delle librerie standard NON era un requisito del problema.
infine PGI-Bis ha linkato la documentazione per capire come funziona il suo programma.. voi no ;)
Non era fra i requisiti del problema: eravamo rimasti che si dovevano postare degli esempi, mi pare. Nulla di più, nulla di meno. La sovraingegnerizzazione è uno dei mali dell'informatica.
Da buon informatico io preferisco attenermi al testo del problema, senza uscire fuori dal seminato. ;)
Più che guardo codice Python e più mi sembra che abbia una leggibilità, non bassa, ma addirittura nulla :D
cdimauro
01-10-2007, 19:27
Certo, certo, perché questo:
<E, T extends Document & Comparable<? super String> & Map<? extends Comparable<Number>, ? extends Comparable<E>>>
codice Java invece è di una leggibilità estrema, vero? :asd:
mumble fai riferimento ai requisiti del problema, ma mi deve essere sfuggito dove questo è stato definito formalmente :fagiano:
ripeto, se parliamo dell'uso di librerie esterne faccio tutto chiamando una sola funziona :sofico:
ps. la docomentazione e il framework sono dei punti di forza di java e la differenza la fanno soprattutto quando si deve imparare
Più che guardo codice Python e più mi sembra che abbia una leggibilità, non bassa, ma addirittura nulla :D
perchè non è quello il suo obiettivo.. io ce lo vedo bene per lo scripting, lì sicuramente permette di fare le cose in poco tempo e bene
cdimauro
01-10-2007, 20:18
mumble fai riferimento ai requisiti del problema, ma mi deve essere sfuggita dove questo è stato definito formalmente :fagiano:
ripeto, se parliamo dell'uso di librerie esterne faccio tutto chiamando una sola funziona :sofico:
http://www.hwupgrade.it/forum/showpost.php?p=18935345&postcount=67
"Al momento, però, devi imparare, e IMHO non c'è scelta migliore di Python.
Se non ne sei ancora convinto possiamo provare con degli esempi di problemi e vedere in che modo vengono risolti in Python, Java, o qualunque altro linguaggio: giudicherai tu, leggendo il codice, quale linguaggio ti ispira di più per iniziare. "
Come vedi non c'è NESSUN riferimento a librerie, tanto meno standard: si parlava di esempi e di relativo CODICE da postare.
Soprattutto si parlava di INIZIARE a programmare (che poi, lo ricordo, è il tema del thread), e l'uso delle librerie è certamente un argomento più avanzato.
ps. la docomentazione e il framework sono dei punti di forza di java e la differenza la fanno soprattutto quando si deve imparare
Prima devi imparare a programmare in Java però.
perchè non è quello il suo obiettivo..
Perché non lo chiedi a Guido? Vedrai cosa ti risponde. :asd:
io ce lo vedo bene per lo scripting, lì sicuramente permette di fare le cose in poco tempo e bene
Python è un linguaggio come altri, e il suo campo applicativo va BEN OLTRE lo scripting.
P.S. Vedo che sul pezzo di codice Java che ho postato non hai avuto nulla da dire: il suo obiettivo è quello di essere leggibile, vero? ;)
Certo, certo, perché questo:
<E, T extends Document & Comparable<? super String> & Map<? extends Comparable<Number>, ? extends Comparable<E>>>
codice Java invece è di una leggibilità estrema, vero? :asd:
Te hai preso un codice Java molto particolare, io parlo del Python in genere...questo sopra fa il pari con il codice Python che avevi postato te la volta scorsa ;)
@cdimauro
in tutti i linguaggi si possono scrivere cose incomprensibili.. ad esempio ricordo un esempio di codice python che avevi postato tu stesso in un altro thread ;)
confrontandoli non so cosa è meglio :fagiano:
cdimauro
01-10-2007, 20:58
Te hai preso un codice Java molto particolare, io parlo del Python in genere...questo sopra fa il pari con il codice Python che avevi postato te la volta scorsa ;)
A me questo sembra decisamente meno comprensibile.
Comunque l'aveva postato PGI-Bis qualche tempo fa. :read: :Prrr:
@cdimauro
in tutti i linguaggi si possono scrivere cose incomprensibili.. ad esempio ricordo un esempio di codice python che avevi postato tu stesso in un altro thread ;)
confrontandoli non so cosa è meglio :fagiano:
Il mio ("oste, com'è il vino? Buono!" :p):
def StrToInt(s):
Bases = (('%', 2), ('&', 8), ('$', 16), ('0x', 16), ('0X', 16), ('', 10))
return int(*((s[len(Prefix) : ], Base) for Prefix, Base in Bases if s.startswith(Prefix)).next())
Quello in Java:
<E, T extends Document & Comparable<? super String> & Map<? extends Comparable<Number>, ? extends Comparable<E>>>
;)
Quattro risate ragazzi:
Bill Gates e General Motors
Ad una recente fiera dell'informatica, Bill Gates ha paragonato i progressi fatti dall'industria dei computer a quelli fatti dall'industria automobilistica, tirando in ballo la General Motors: "Se la GM fosse tecnologicamente così avanzata come l'industria dei computer, oggi staremmo guidando macchine che costerebbero 25 dollari e che farebbero ben 500 km con un litro di benzina!".
Molto divertente (e per nulla campata in aria) è stata la risposta della GM che, in un comunicato ha elencato i 10 motivi per cui rifiuta una patnership con la Microsoft:
- Ogni volta che verrà rifatta la segnaletica stradale bisognerà acquistare anche una nuova macchina
- Ogni volta che il motore si fermerà in autostrada senza alcuna ragione apparente (in media 2 volte al giorno), dovrai semplicemente accettare il fatto, riavviare il motore e ripartire dal casello da dove eri entrato.
- Ogni volta che l'esecuzione di una manovra farà sì che la tua macchina si fermi e rimanga definitavente bloccata, dovrai ovviare all'inconveniente reinstallando il motore.
- Potrai avere soltanto una persona alla volta a bordo, a meno che tu non decida di acquistare "Macchina 95" o "Macchina NT". Poi dovrai comprare i sedili addizionali.
- Con la Apple le cose sarebbere ben diverse, essa sarebbe in grado di progettare una macchina alimentata ad energia solare, affidabile, cinque volte più veloce e due volte più facile da guidare ma che potrà girare solo sul 5% delle autostrade.
L'ultimo problema potrà essere ovviato molto facilmente, acquistando degli upgrade carissimi per adattarsi alle autostrade Microsoft, ottenendo delle prestazioni dimezzate rispetto ad una macchina analoga di Microsoft.
Le spie di olio, benzina, freni e batteria sarebbero rimpiazzate da un unico segnale che dice "Questa macchina ha eseguito un'operazione illegale e sarà arrestata".
- I nuovi sedili costringeranno tutti ad avere la stessa misura del culo.
Prima di entrare in funzione, l'airbag ti chiederebbe " Sei sicuro di voler eseguire questa operazione?"
In caso di collisione, non avrai la minima idea di che cosa sia accaduto a te e alla macchina, di come ripararla e di dove sei.
cdimauro
01-10-2007, 21:10
:rotfl: :rotfl: :rotfl:
MI-CI-DIA-LE! :asd:
Th3 Kn0wl3dg3
01-10-2007, 21:39
allora. non ho letto tutto perchè non mi sono collegato per mezza giornata e ho trovate 4 pagine in più di thread. thread che per giunta invece di aiutarmi mi fa solo confondere e che sembra che sia il vostro campo da combattimento. adesso gentilmente blocco tutto qua. ho letto abbastanza da poter scegliere python come linguaggio con il quale apprendere l'arte della programmazione, non per apprendere a programmare con un determinato linguaggio. detto questo ringrazio tutti i vostri pareri e basta battaglie. ok?
DioBrando
01-10-2007, 22:41
allora. non ho letto tutto perchè non mi sono collegato per mezza giornata e ho trovate 4 pagine in più di thread. thread che per giunta invece di aiutarmi mi fa solo confondere e che sembra che sia il vostro campo da combattimento. adesso gentilmente blocco tutto qua. ho letto abbastanza da poter scegliere python come linguaggio con il quale apprendere l'arte della programmazione, non per apprendere a programmare con un determinato linguaggio. detto questo ringrazio tutti i vostri pareri e basta battaglie. ok?
da parte mia, se ho contribuito a farti confusione, ti chiedo scusa (anche se volevo solo mettere in luce i perchè, secondo me, Python sarebbe stata una buona scelta per cominciare).
E nel farlo, ti suggerisco di utilizzare a piene mani la documentazione linkata al sito ufficiale (python.it) e di iscriverti alla mailinglist per porre i tuoi quesiti anche + banali.
Una parte delle persone che rispondono abitualmente le ho conosciute personalmente come i ragazzi che lavorano alla Develer o alla eMaze e sono davvero disponibili :)
Th3 Kn0wl3dg3
01-10-2007, 23:01
ok, grazie. una cosa: di questo link http://www.python.it/doc/newbie.html quale guida mi consigli di scaricare fra tutte?
DioBrando
01-10-2007, 23:11
Me lo chiedo anch'io da molto tempo... Ripeto il concetto espresso nel messaggio precedente, forse non è filtrato correttamente: secondo me un corso di Reti I NON dovrebbe trattare minimamente lo sviluppo Web, in un piano di studi *serio* di una laurea triennale dovrebbe esserci spazio per l'analisi dello stack ISO/OSI (Reti I) E per l'approccio web-oriented alla programmazione in 2 insegnamenti *diversi*. Gli argomenti *possono* essere approfonditi da chi decide di seguire la specializzazione con corsi specifici: Reti II e Programmazione per il Web II (o denominazioni analoghe).
Ovviamente la colpa non è degli studenti (le vere vittime del 3+2) ma di chi crea percorsi accademici assolutamente lacunosi e/o cervellotici.
Chiudo solo con questo OT perchè potrebbe essere spunto di un altro thread ad hoc questa volta.
Siamo d'accordo che Reti 1 sia Reti 1 (io non ho parlato di approcci legati alla programmazione web-oriented, ho fatto solo un accenno ai web-services e + in generale dello strato applicativo che cmq fa parte sia dello stack ISO-OSI che TCP-IP), ma santoddio, gli insegnamenti ed i programmi DEVONO essere piegati allo scopo che si prefigge un corso di laurea altrimenti è perfettamente inutile poi parlare di specializzazioni, diversa offerta formativa (ed in effetti spesso è così: nomi diversi ma pappa identica, buona però per far mangiare + professori di quanti ce n'erano prima).
Allora, io studente che studio informatica orientata al web, in un corso di reti1 in cui non affronto minimamente il problema di interazione delle reti e dell'infrastruttura con le dinamiche ed i servizi che la utilizzano mi sento preso in giro.
E ne ho ben donde; perchè allora la triennale non serve a niente. Ed invece di avere un minimo di basi su cui poter costruire la propria esperienza lavorativa, non ce le ho.
Mentre un'infarinatura (almeno quella), la dovrei ricevere e POI, se voglio, se ho soldi, se ho tempo, posso approfondire nella specialistica.
E dato che la riforma era necessaria perchè in tutta Europa esiste il bachelor mentre noi non ce l'avevamo fino al 2000 e perchè le aziende lo richiedevano, mi sembra un controsenso poi operare in direzione opposta, ovvero non fornire strumenti adeguati a chi decide di non proseguire. (naturalmente ci sn anche le responsabilità del mondo del lavoro che ha spinto per questa riforma ma non si è adeguato affatto, sfruttando il + delle volte, invece che offrire un impiego, ma questo è un altro discorso)
E ci si lamenta che la media italiana di laureati, rispetto agli iscritti, una delle + basse d'Europa.
E grazie al...eh
DioBrando
01-10-2007, 23:17
ok, grazie. una cosa: di questo link http://www.python.it/doc/newbie.html quale guida mi consigli di scaricare fra tutte?
di niente :)
Allora, il primo citato nella lista "Pensare da informatico: Imparare con Python" è molto buono, un altro, citato credo in queste pagine è Dive into Python (http://it.diveintopython.org/); entrambi disponibili in italiano e in + formati a seconda di quello che preferisci per sfogliare le pagine.
Se l'inglese per te non è un problema, avrai molta + scelta, ma solo quando dovrai affrontare problemi specifici come l'uso di Design Patterns e cosa insomma che ora non ti interessa nemmeno sapere cosa siano :D
Ah e ricordati del libricino che ti ho citato, se lo trovi in una libreria dacci un occhio ;)
Ho 19 anni, quasi 20, e amo i computer e mi affascina tutto ciò che li riguarda. Vorrei iniziare a programmare ma per un niubbo come me in con tutti questi linguaggi non è facile. Con quale potrei iniziare considerando che comincio proprio da zero? Con Java, php, python, C......
Restane fuori finchè sei in tempo :D
Th3 Kn0wl3dg3
02-10-2007, 05:51
allora scaricherò dive into python. spero davvero di imparare.. perchè adesso mi sembra impossibile anche fare un programma che fa la somma di due numeri
cdimauro
02-10-2007, 07:29
Restane fuori finchè sei in tempo :D
ARGH!!! Dopo tutta la fatica che abbiamo fatto!!!!!! :cry:
P.S. Non hai tutti i torti. E poi se comincia a prenderci la mano, chi lo staccherà più dalla tastiera? :p
cdimauro
02-10-2007, 07:31
allora scaricherò dive into python. spero davvero di imparare.. perchè adesso mi sembra impossibile anche fare un programma che fa la somma di due numeri
Un bel po' di pagine fa avevo scritto 4 righe di codice che lo faceva: dagli un'occhiata, e vedrai che non ti sembrerà impossibile realizzarne uno anche tu. :)
Th3 Kn0wl3dg3
02-10-2007, 12:59
linkami tu la pagina perchè adesso devo andare a prendere una scheda di memoria prima che chiude il negozio
sarò breve e conciso.. l'ho già scritto prima e lo ripeto: per imparare a programmare il linguaggio che usi importa relativamente, le cose più importanti sono la passione per l'argomento e la determinazione. perciò trovo superficiali affermazioni come "python è senza dubbio la scelta migliore" ecc.. sono cose campate lì senza molte argomentazioni.
esempi
"in python si scrivono meno righe di codice"
e chi ha detto che per imparare a programmare bisogna scrivere il minor numero di righe di codice? :confused:
"la sintassi di python è bellissima fighissima e leggibilissima"
questione di gusti, a me non piace ad esempio
"non ci sono i segmentation fault"
in compenso ci sono le eccezioni
e così via
"non ci sono i segmentation fault"
in compenso ci sono le eccezioni
Che sono pienamente gestibili e utili, cosa c'entrano con i segmentation fault?! :doh:
Che sono pienamente gestibili e utili, cosa c'entrano con i segmentation fault?! :doh:
la cosa è del tutto indifferente a questo livello (cioè il livello didattico), che venga lanciata un'eccezione (parlo di quelle non gestite) o che ti trovi scritto "errore" cambia poco, si tratta di un bug nel codice
spero di non aver mai detto che sono inutili! non me lo perdonerei :O
Scusa, ma questo come fai a dirlo? Hai dato un'occhiata ai sorgenti delle librerie Python per poterlo affermare?
Ecco un pezzo della libreria Tk che riporta una parte del codice della classe "principale":
class Tk(Misc, Wm):
Esatto. Non c'è qualcosina di diverso tra questo Python e quello dei programmi incollati? Dimmi di no e ti tiro una makumba :D.
La concorrenza l'ho citata perchè in Java occorre tenerne conto, che piaccia o no. Relegare l'esposizione dei Thread Java in un capitoletto finale, della serie "ah già, c'è anche questo..." significa non avere ben chiare le caratteristiche della lingua. Se l'unità fondamentale della programmazione Java è la classe, l'unità fondamentale dell'esecuzione di un programma Java è il metodo in quanto frame di un Thread.
Tenerlo nascosto per non complicare le cose è cialtroneria informatica.
Se usate Java dovete studiare la programmazione concorrente. E non c'è nulla da temere perchè la programmazione concorrente in Java è uno scherzetto.
cdimauro
02-10-2007, 19:26
linkami tu la pagina perchè adesso devo andare a prendere una scheda di memoria prima che chiude il negozio
Mi spiace, ma oggi sono stato di matrimonio e sono appena rincasato (ebbene sì: mi sono abbuffato come un :oink: :p). Ecco qua il codice per realizzare la somma fra due numeri:
a = raw_input('Inserisci il primo numero: ')
b = raw_input('Inserisci il secondo numero: ')
c = a + b
print 'La somma di', a, 'e', b, 'è', c
cdimauro
02-10-2007, 19:31
sarò breve e conciso.. l'ho già scritto prima e lo ripeto: per imparare a programmare il linguaggio che usi importa relativamente, le cose più importanti sono la passione per l'argomento e la determinazione. perciò trovo superficiali affermazioni come "python è senza dubbio la scelta migliore" ecc.. sono cose campate lì senza molte argomentazioni.
Abbiamo fornito tonnellate di argomentazioni: se non ti bastano non possiamo farci niente.
L'importante è che siano arrivati al diretto interessato e l'abbiano aiutato nella scelta.
esempi
"in python si scrivono meno righe di codice"
e chi ha detto che per imparare a programmare bisogna scrivere il minor numero di righe di codice? :confused:
Non puoi snaturare una frase estraendola dal contesto.
In ogni caso è vero che generalmente si scrivono molte righe di codice: se non è necessario per imparare a programmare, è comunque una gran comodità.
"la sintassi di python è bellissima fighissima e leggibilissima"
questione di gusti, a me non piace ad esempio
Sui gusti non ho mai avuto nulla da dire e non lo farò certo adesso. ;)
"non ci sono i segmentation fault"
in compenso ci sono le eccezioni
e così via
la cosa è del tutto indifferente a questo livello (cioè il livello didattico), che venga lanciata un'eccezione (parlo di quelle non gestite) o che ti trovi scritto "errore" cambia poco, si tratta di un bug nel codice
spero di non aver mai detto che sono inutili! non me lo perdonerei :O
Fra segmentation fault ed eccezioni c'è un abisso, ovviamente in favore di queste ultime perché, come ti è stato già detto, sono gestibili.
Inoltre con Python, nella peggiore delle ipotesi (cioé non hai messo nessun try: / except: per intrappolarle), la virtual machine si blocca visualizzando il traceback di tutte le chiamate che sono state fatte, con tanto di numero E riga di codice di ogni chiamata, e di messaggio con il tipo di eccezione sollevata.
Insomma, è MOOOOOOOLTO utile per risalire velocemente al bug e correggerlo.
Prova a fare la stessa cosa a seguito di un segmentation fault. :read: :Prrr:
Didatticamente, quindi, non c'è proprio storia.
Abbiamo fornito tonnellate di argomentazioni: se non ti bastano non possiamo farci niente.
io ho visto solo argomentazioni fragili e basate sulle esperienze personali più che su dati di fatto
L'importante è che siano arrivati al diretto interessato e l'abbiano aiutato nella scelta.
in questo caso più che aiutare il diretto interessato scrivo per dovere di cronaca.. tanto non è la prima volta che decide di partire con python, eppure è ancora in alto mare
Non puoi snaturare una frase estraendola dal contesto.
impossibile! non aveva un contesto :p
Fra segmentation fault ed eccezioni c'è un abisso, ovviamente in favore di queste ultime perché, come ti è stato già detto, sono gestibili.
urca non lo sapevo :D
il fatto che le eccezioni sono gestibili non mi aiuta a imparare a programmare
Inoltre con Python, nella peggiore delle ipotesi (cioé non hai messo nessun try: / except: per intrappolarle), la virtual machine si blocca visualizzando il traceback di tutte le chiamate che sono state fatte, con tanto di numero E riga di codice di ogni chiamata, e di messaggio con il tipo di eccezione sollevata.
Insomma, è MOOOOOOOLTO utile per risalire velocemente al bug e correggerlo.
per prima cosa bisogna sapere come si legge lo stack trace, anzi prima ancora bisogna sapere cos'è uno stack. dopodichè certamente è molto utile per individuare il bug, ma di solito per uno che sta imparando a programmare non c'è bisogno di uno strumento così potente
Prova a fare la stessa cosa a seguito di un segmentation fault. :read: :Prrr:
Didatticamente, quindi, non c'è proprio storia.
sarebbe il caso di imparare a usare un debugger, quindi didatticamente non cambia molto
cdimauro
02-10-2007, 20:11
Esatto. Non c'è qualcosina di diverso tra questo Python e quello dei programmi incollati? Dimmi di no e ti tiro una makumba :D.
Sì, non c'è proprio niente di diverso (SGRAT SGRAT SGRAT :D), e il motivo è molto semplice: in Python OGNI COSA è un oggetto e le operazioni riguardano interazioni (o scambio di messaggi) fra oggetti.
Sia che scrivo:
a = 1
oppure il pezzo di codice che hai riportato:
class Tk(Misc, Wm):
il risultato è che nel namespace viene inserito un nuovo simbolo con un oggetto.
Sì, entrambi sono oggetti, ma sono istanze di classi diverse e hanno caratteristiche diverse.
In particolare Tk rappresenta la definizione di una classe, ed è un oggetto che in Python è definito come "callable", cioé richiamabile (come fosse una funzione; anch'essa oggetto "callable") e che come risultato della chiamata restituisce un'istanza della classe che definisce.
Come vedi Python è un linguaggio a oggetti "puro", e in ciò è assolutamente coerente.
La stessa cosa, però, non si può dire di Java, dove gli oggetti esistono soltanto nella misura in cui sei proprio tu a crearli, tramite la chiamata a un costruttore pubblico (con l'operatore new) oppure "occulto" (stringhe, array).
Le classi, quindi, non sono l'unità fondamentale della programmazione in Java: lo sarebbero se al posto di definire una variabile di tipo int ci fosse Integer, tanto per fare un esempio, e quindi lavorasse sempre con oggetti, ossia istanze di particolari classi.
Ciò non è, e quindi Java lo possiamo definire come un ibrido, un linguaggio che è un misto fra dati / codice strutturati e oggetti, e che offre due paradigmi di programmazione: a oggetti e strutturato.
Python lo possiamo definire un linguaggio puramente a oggetti, e che offre però diversi paradigmi di programmazione: a oggetti, strutturato, funzionale, ad aspetti e anche metaprogrammazione.
Questo lo possiamo considerare un "effetto collaterale" dovuto alle intrinseche caratteristiche che offrono gli oggetti che questo linguaggio mette a disposizione.
Non so se sono stato chiaro. :p
La concorrenza l'ho citata perchè in Java occorre tenerne conto, che piaccia o no. Relegare l'esposizione dei Thread Java in un capitoletto finale, della serie "ah già, c'è anche questo..." significa non avere ben chiare le caratteristiche della lingua. Se l'unità fondamentale della programmazione Java è la classe, l'unità fondamentale dell'esecuzione di un programma Java è il metodo in quanto frame di un Thread.
Tenerlo nascosto per non complicare le cose è cialtroneria informatica.
Se usate Java dovete studiare la programmazione concorrente. E non c'è nulla da temere perchè la programmazione concorrente in Java è uno scherzetto.
Stiamo partendo dalle basi, PGI: Java può offrire o meno la programmazione concorrente, ma al momento è del tutto trascurabile per chi non sa nemmeno cos'è una variabile.
Poi anche Python dà questa possibilità e lo fa pure in maniera molto semplice. Ma al momento, per quanto detto, non è nemmeno in discussione.
cdimauro
02-10-2007, 20:24
io ho visto solo argomentazioni fragili e basate sulle esperienze personali più che su dati di fatto
Se sono fragili non hai che da smontarle, eh! Peccato che è da un pezzo che ci provi, ma con scarsi risultati. :p
in questo caso più che aiutare il diretto interessato scrivo per dovere di cronaca.. tanto non è la prima volta che decide di partire con python, eppure è ancora in alto mare
Sarebbe ancora peggio se avesse cominciato con Java: per scrivere il banale programmino della somma di due numeri avrebbe dovuto scomodare la definizione di una classe, di un metodo, e l'importazione di alcune librerie standard... oltre al codice vero e proprio che serve allo scopo.
Con Python, invece, deve scrivere soltanto il codice che serve a risolvere il problema. E scusa se è poco (anche come dimensioni :D).
impossibile! non aveva un contesto :p
Vabbé, lasciamo perdere. :)
urca non lo sapevo :D
il fatto che le eccezioni sono gestibili non mi aiuta a imparare a programmare
Invece i segmentation fault sì: alleluia! :p
per prima cosa bisogna sapere come si legge lo stack trace, anzi prima ancora bisogna sapere cos'è uno stack. dopodichè certamente è molto utile per individuare il bug, ma di solito per uno che sta imparando a programmare non c'è bisogno di uno strumento così potente
E' uno strumento che è disponibile aggratis, e anche un niubbo riesce velocemente a capire come funziona.
sarebbe il caso di imparare a usare un debugger, quindi didatticamente non cambia molto
:eek: Ancora deve iniziare e già tiri fuori il debugger. Ma dico io, hai presente che non conosce nemmeno il concetto di variabile? :muro:
La prossima volta cosa gli consiglierai? Dai un'occhiata alla finestra della CPU, col valore dei registri, e i dump dei segmenti di codice, dati e stack? :asd:
Un traceback è nettamente più a portata di mano di un debugger, specialmente per chi comicia a programmare.
Poi ai debugger preferisco di gran lunga una batteria di test. ;)
Qui però ci stiamo infognando su discorsi che vanno ben oltre lo scopo del thread.
Se sono fragili non hai che da smontarle, eh! Peccato che è da un pezzo che ci provi, ma con scarsi risultati. :p
il problema è che voi sostenete che python è il linguaggio migliore per imparare, mentre per me la scelta del linguaggio è abbastanza secondaria, nonostante ho espresso la mia preferenza per pascal.
quindi semplicemente la pensiamo in maniera diversa.. sarà dura convincerti della mia idea, ma non credere che le tue argomentazioni hanno un effetto diverso su di me :Prrr:
Sarebbe ancora peggio se avesse cominciato con Java: per scrivere il banale programmino della somma di due numeri avrebbe dovuto scomodare la definizione di una classe, di un metodo, e l'importazione di alcune librerie standard... oltre al codice vero e proprio che serve allo scopo.
certo che non sarebbe male capire questi concetti visto che lo scopo era imparare :p
Con Python, invece, deve scrivere soltanto il codice che serve a risolvere il problema. E scusa se è poco (anche come dimensioni :D).
anche creare una classe fa parte della risoluzione del problema
Invece i segmentation fault sì: alleluia! :p
nel caso non si fosse capito sostenevo che è indifferente
E' uno strumento che è disponibile aggratis, e anche un niubbo riesce velocemente a capire come funziona.
non resta che provare allora
:eek: Ancora deve iniziare e già tiri fuori il debugger. Ma dico io, hai presente che non conosce nemmeno il concetto di variabile? :muro:
La prossima volta cosa gli consiglierai? Dai un'occhiata alla finestra della CPU, col valore dei registri, e i dump dei segmenti di codice, dati e stack? :asd:
Un traceback è nettamente più a portata di mano di un debugger, specialmente per chi comicia a programmare.
Poi ai debugger preferisco di gran lunga una batteria di test. ;)
Qui però ci stiamo infognando su discorsi che vanno ben oltre lo scopo del thread.
il debugger è uno strumento importantissimo, non sapevo che ci vuole una laurea in ingegneria nucleare per usarlo. scorrere il codice riga per riga è una delle cose più utili al mondo per capire come funziona la programmazione.
la batteria di test non sostituisce in nessun modo il debugger
la batteria di test la deve scrivere uno che se la cava abbastanza, altrimenti fa più danni di quelli che risolve (quindi dubito che sia il nostro caso)
DioBrando
02-10-2007, 22:18
sarò breve e conciso.. l'ho già scritto prima e lo ripeto: per imparare a programmare il linguaggio che usi importa relativamente, le cose più importanti sono la passione per l'argomento e la determinazione. perciò trovo superficiali affermazioni come "python è senza dubbio la scelta migliore" ecc.. sono cose campate lì senza molte argomentazioni.
Le argomentazioni sn state date ampiamente, se poi uno fà finta di non vederle per portare acqua al proprio mulino, possiamo andare avanti anche fino al giorno del Giudizio perchè non si convincerà mai e rimarrà sulle proprie posizioni.
esempi
"in python si scrivono meno righe di codice"
e chi ha detto che per imparare a programmare bisogna scrivere il minor numero di righe di codice? :confused:
Non è solo questione di righe, è questione di codice sorgente in toto.
+ è il codice e + aumentano gli errori, inoltre se il codice risulta sintetico e ridotto allo stretto necessario, è possibile concentrarsi maggiormente sulla risoluzione del problema e sull'algoritmo da implementare.
Questi sn ragionamenti che si applicano per la programmazione in generale, non certo per la programmazione in un dato linguaggio.
"la sintassi di python è bellissima fighissima e leggibilissima"
dai non fare il bambino, è stato scritto altro, non stupidaggini buttate lì così come se si dovesse vendere un detersivo.
questione di gusti, a me non piace ad esempio
che la sintassi e la semantica di un linguaggio sia + semplice a quelle di un altro non è affatto questione di gusti.
In primis vi sono studi scientifici così come vi sono analisi che determinano la scelta di un linguaggio +ttosto che un altro nella realizzazione di qualsiasi progetto e qualsiasi software "serio".
In secundis se io dico che la sintassi del Perl è + complessa di quella di Java, credo di non dire una bestialità per nessuno.
E allora cos'è questo "gusto" piace a tutti mentre se si tratta di Python no?
Dai su, fai la persona seria ;)
"non ci sono i segmentation fault"
in compenso ci sono le eccezioni
e così via
Perchè in Java non ci sono le eccezioni? E altri linguaggi non utilizzano meccanismi per gestirle?
Siete riusciti a dire che Java utilizza un solo paradigma di programmazione (OO), siete riusciti a dire che Python non dispone di strumenti di sviluppo qualitativamente pari a quelli Java, ora le eccezioni e poi me ne dimentico altre per strada.
Chissà quale sarà la prossima panzana che vi inventerete pur di dare sostanza alle vostre argomentazioni :asd:
cdimauro
02-10-2007, 22:22
il problema è che voi sostenete che python è il linguaggio migliore per imparare, mentre per me la scelta del linguaggio è abbastanza secondaria, nonostante ho espresso la mia preferenza per pascal.
quindi semplicemente la pensiamo in maniera diversa.. sarà dura convincerti della mia idea, ma non credere che le tue argomentazioni hanno un effetto diverso su di me :Prrr:
Allora con te è inutile continuare questa parte della discussione. ;)
certo che non sarebbe male capire questi concetti visto che lo scopo era imparare :p
E per chi inizia con la matematica non sarebbe male capire il concetto di equazione differenziale. :D
anche creare una classe fa parte della risoluzione del problema
Solo in linguaggi come Java, dove si è obbligati a usa una classe come "contenitore" della funzione da chiamare per avviare l'esecuzione dell'applicazione.
Una classe io la uso soltanto per modellare il comportamento di un oggetto.
nel caso non si fosse capito sostenevo che è indifferente
Non lo è, perché un segmentation fault non aiuta, mentre un'eccezione sì.
non resta che provare allora
Ottimo. :)
il debugger è uno strumento importantissimo, non sapevo che ci vuole una laurea in ingegneria nucleare per usarlo.
Ci vuole esperienza: quella che manca a chi inizia a programmare.
scorrere il codice riga per riga è una delle cose più utili al mondo per capire come funziona la programmazione.
Certamente, prima però ti servono le basi per capire quello che c'è scritto nelle righe di codice. ;)
la batteria di test non sostituisce in nessun modo il debugger
Ne limita non poco l'uso, e a volte permette di farne del tutto a meno.
Poi non sempre è possibile utilizzare un debugger.
la batteria di test la deve scrivere uno che se la cava abbastanza, altrimenti fa più danni di quelli che risolve (quindi dubito che sia il nostro caso)
Danni non ne può fare: al più può scrivere test inutili.
Le argomentazioni sn state date ampiamente, se poi uno fà finta di non vederle per portare acqua al proprio mulino, possiamo andare avanti anche fino al giorno del Giudizio perchè non si convincerà mai e rimarrà sulle proprie posizioni.
quello che state facendo anche voi del resto.. non mi sorprende che ognuno rimane della sua idea, è abbastanza normale
Non è solo questione di righe, è questione di codice sorgente in toto.
+ è il codice e + aumentano gli errori, inoltre se il codice risulta sintetico e ridotto allo stretto necessario, è possibile concentrarsi maggiormente sulla risoluzione del problema e sull'algoritmo da implementare.
Questi sn ragionamenti che si applicano per la programmazione in generale, non certo per la programmazione in un dato linguaggio.
premettendo che la mia intenzione era solo fare degli esempi tanto per intenderci... rispondo ugualmente :D
non è vero che meno codice = meno errori
a = 1
b = "pippo"
c = a/b
mentre invece
int a
int b
int c
a = 1
b = "pippo"
c = a/b
darebbe errore di compilazione
nonostante sia più codice è evidente che nel secondo caso il linguaggio mi viene in aiuto per evitare degli errori
dai non fare il bambino, è stato scritto altro, non stupidaggini buttate lì così come se si dovesse vendere un detersivo.
l'impressione era appunto da televendita :D
che la sintassi e la semantica di un linguaggio sia + semplice a quelle di un altro non è affatto questione di gusti.
In primis vi sono studi scientifici così come vi sono analisi che determinano la scelta di un linguaggio +ttosto che un altro nella realizzazione di qualsiasi progetto e qualsiasi software "serio".
In secundis se io dico che la sintassi del Perl è + complessa di quella di Java, credo di non dire una bestialità per nessuno.
E allora cos'è questo "gusto" piace a tutti mentre se si tratta di Python no?
Dai su, fai la persona seria ;)
non so cosa c'entra perl.. è ancora tutto da dimostrare che python è più leggibile di java (per me ad esempio vale il contrario)
è tutto serio quello che ho detto ;)
Perchè in Java non ci sono le eccezioni? E altri linguaggi non utilizzano meccanismi per gestirle?
considerando che tutti e due sappiamo che java ha le eccezioni è evidente che non stavo parlando di java
e comunque non so perchè tutti hanno letto: "le eccezioni sono inutili"
ho detto questo per caso?
Siete riusciti a dire che Java utilizza un solo paradigma di programmazione (OO), siete riusciti a dire che Python non dispone di strumenti di sviluppo qualitativamente pari a quelli Java, ora le eccezioni e poi me ne dimentico altre per strada.
Chissà quale sarà la prossima panzana che vi inventerete pur di dare sostanza alle vostre argomentazioni :asd:
difatti java utilizza solo il paradigma OO (e la programmazione strutturata solo se si è abbastanza perversi)
e python dispone di strumenti di sviluppo totalmente differenti da quelli di java, quindi un confronto è abbastanza inutile
DioBrando
02-10-2007, 23:33
quello che state facendo anche voi del resto.. non mi sorprende che ognuno rimane della sua idea, è abbastanza normale
noi abbiamo esplicitato con codice, argomentazioni, dati, fatti per cui Python sia, secondo noi, la scelta migliore per il primo approccio con la programmazione da parte di un neofita, desideroso di imparare.
Per esempio è un fatto che l'indentazione forzata di Python costringa il programmatore a scrivere codice in un dato modo, ordinato, evitando che vi siano spaziature diverse per una medesima struttura e all'interno di un unico file di codice sorgente.
Con Java da questo punto di vista si ha + libertà.
A parte scrivere "voi avete torto", non mi sembra di aver scorto molta sostanza, men che meno da parte tua.
Ma puoi sempre rimediare, argomentando con eloquenza i tuoi punti
premettendo che la mia intenzione era solo fare degli esempi tanto per intenderci... rispondo ugualmente :D
non è vero che meno codice = meno errori
a = 1
b = "pippo"
c = a/b
mentre invece
int a
int b
int c
a = 1
b = "pippo"
c = a/b
darebbe errore di compilazione
nonostante sia più codice è evidente che nel secondo caso il linguaggio mi viene in aiuto per evitare degli errori
che discorsi, se fai un esempio ad hoc dove nel primo caso non dichiari il tipo di variabile, mentre nel secondo sì è ovvio che si giunga alla tua conclusione.
Io parlo di esempi che siano raffrontabili.
E in ogni caso, sfuggi al discorso già menzionato, il numero di linee di codice sorgente è una discriminante per poi poter valutare la qualità del codice stesso che è dato ANCHE dal numero di errori ivi presenti.
Se tu o chi altro, vuole continuare a sostenere che non sia un parametro importante ai fini della correttezza, della manutenibilità e della leggibilità del codice allora siete liberi di farlo.
E conseguentemente di riscrivere buona parte della teoria di Ingegneria del Software degli ultimi 30 anni (per carità le teorie nuove sono sempre bene accette...a volte si tratta di vere e proprie rivoluzioni :))
non so cosa c'entra perl.. è ancora tutto da dimostrare che python è più leggibile di java (per me ad esempio vale il contrario)
è tutto serio quello che ho detto ;)
era un esempio per dimostrare come la sintassi di un linguaggio non sia semplice a seconda dei gusti di chi la legge e di chi ne fà uso.
considerando che tutti e due sappiamo che java ha le eccezioni è evidente che non stavo parlando di java
e comunque non so perchè tutti hanno letto: "le eccezioni sono inutili"
ho detto questo per caso?
hai risposto in merito a quello che ha scritto Cesare sul fatto che in Python non si corra il pericolo dei segmentation fault.
Tu hai risposto che ci sono le eccezioni.
Mbè?
Ci sono anche in Java come in altri linguaggi, quindi non capisco il motivo per cui tu abbia dato una risposta del genere.
Lui ha dato una motivazione per cui sia preferibile cominciare con Python, tu hai risposto dando un'annotazione che non mette in luce Java, bensì qualsiasi linguaggio che sappia gestire delle eccezioni.
Non sò quali siano i tuoi interlocutori abituali, ma rigirare la minestra qui credo funzioni molto poco ;)
difatti java utilizza solo il paradigma OO (e la programmazione strutturata solo se si è abbastanza perversi)
A meno che l'italiano non sia improvvisamente diventato un'opinione, avere è diverso da "usare". (PGI-BIS aveva parlato di "essere unicamente orientato agli oggetti". Non è così,è un ibrido come la quasi totalità dei linguaggi + utilizzati al mondo)
E infatti nei corsi di programmazione in Java, quando si studiano i mattoni fondamentali si parte proprio dalla programmazione strutturata...evidentemente in Java e non in un altro linguaggio (cosa che poi sarebbe necessaria se si seguisse il tuo consiglio di cominciare dal Basic, quando poi ci si trova ad affrontare l'OOP...), dato che uno switching dopo nemmeno un trimestre di corso sarebbe un suicidio didattico-educativo.
e python dispone di strumenti di sviluppo totalmente differenti da quelli di java, quindi un confronto è abbastanza inutile
E si vede quanto tu lo conosca Python. :asd:
Sono così diversi per cui, esistono versioni di Eclipse sviluppate ad hoc per sviluppare sia in Java che in Python, oppure si può utilizzare i plugin per sfruttare il medesimo ambiente (PyDev il + famoso).
Questo vale per Eclipse, vale per Visual Studio, vale per jEdit, IntelliJIDEA, JDeveloper ecc...praticamente tutti gli IDE migliori e + famosi in circolazione che usano, com'è logico che sia, una struttura a plugin.
Sempre + Zelig Circus :rotfl:
mad_hhatter
02-10-2007, 23:42
Sì, non c'è proprio niente di diverso (SGRAT SGRAT SGRAT :D), e il motivo è molto semplice: in Python OGNI COSA è un oggetto e le operazioni riguardano interazioni (o scambio di messaggi) fra oggetti.
provo ad azzardare... ereditarieta' multipla (con il problema di ambiguita' che si porta dietro)?
Come vedi Python è un linguaggio a oggetti "puro", e in ciò è assolutamente coerente.
La stessa cosa, però, non si può dire di Java, dove gli oggetti esistono soltanto nella misura in cui sei proprio tu a crearli, tramite la chiamata a un costruttore pubblico (con l'operatore new) oppure "occulto" (stringhe, array).
e in quale altro momento dovrebbero esistere? cos'ha che non va la creazione esplicita di un'istanza di una classe ben precisa?
poi butti li' un "occulto" quasi in senso spregiativo... ma non eri tu che, a proposito delle forme implicite, dicevi che queste sono ben documentate nelle specifiche del linguaggio?
Le classi, quindi, non sono l'unità fondamentale della programmazione in Java: lo sarebbero se al posto di definire una variabile di tipo int ci fosse Integer, tanto per fare un esempio, e quindi lavorasse sempre con oggetti, ossia istanze di particolari classi.
java e' talmente pervaso di tipi primitivi che non ti si puo' dar torto :D se per ogni variabile temporanea che fa da indice a un ciclo iterativo dovessi creare un oggetto da mettere nello heap e che deve essere gestito in termini di garbage collection avrei un'efficienza spaventosamente bassa :) vedi io sono convinto che le cose debbano essere mantenute semplici: ti serve un oggetto, usa un oggetto... ti serve un dato primitivo, non scomodare cose inutilmente complesse... l'eleganza e' semplicita'.
Ciò non è, e quindi Java lo possiamo definire come un ibrido, un linguaggio che è un misto fra dati / codice strutturati e oggetti, e che offre due paradigmi di programmazione: a oggetti e strutturato.
il fatto che esistano dei tipi primitivi non implica che si adotti il punto di vista della programmazione strutturata... in java, visto che sostenevi che la classe non e' l'unita' fondamentale, nulla esiste se non all'interno di una definizione di una classe, neppure un main... fai tu. poi in java e' talmente arduo, cognitivamente parlando, scrivere codice in modo puramente strutturato che direi che la tua affermazione e' priva di senso.
Python lo possiamo definire un linguaggio puramente a oggetti, e che offre però diversi paradigmi di programmazione: a oggetti, strutturato, funzionale, ad aspetti e anche metaprogrammazione.
Questo lo possiamo considerare un "effetto collaterale" dovuto alle intrinseche caratteristiche che offrono gli oggetti che questo linguaggio mette a disposizione.
Non so se sono stato chiaro. :p
chiarissimo :) in python tutto ha una collocazione metafisica assolutamente voluta e cercata, negli altri linguaggi qualche difettuccio sfugge sempre... :)
Stiamo partendo dalle basi, PGI: Java può offrire o meno la programmazione concorrente, ma al momento è del tutto trascurabile per chi non sa nemmeno cos'è una variabile.
Poi anche Python dà questa possibilità e lo fa pure in maniera molto semplice. Ma al momento, per quanto detto, non è nemmeno in discussione.
ma guarda, non consigliavi python perche' consente diversi paradigmi di programmazione? argomento decisamente elementare per un novizio che ha problemi con la somma di due numeri... se vogliamo guardare solo alle basi va bene carta e penna, o al massimo un QUALSIASI linguaggio... certo java puo' offrire la programmazione concorrente, ma al momento e' trascurabile... pero' una delle argomentazioni a favore di python era che permettendo vari paradigmi di programmazione si poteva, in futuro, utilizzare il linguaggio gia' noto per una miriade di situazioni diverse... invece per la programmazione concorrente perche' dovrebbe valere lo stesso? no, e' talmente trascurabile... ma guarda un po'.
l'ho gia' detto e lo ripeto, con la speranza di sbagliarmi: tutto cio' sa molto di "101 modi per giustificare l'uno di python a ogni costo".
mad_hhatter
02-10-2007, 23:50
il numero di linee di codice sorgente è una discriminante per poi poter valutare la qualità del codice stesso che è dato ANCHE dal numero di errori ivi presenti.
Se tu o chi altro, vuole continuare a sostenere che non sia un parametro importante ai fini della correttezza, della manutenibilità e della leggibilità del codice allora siete liberi di farlo.
ineccepibile... vogliamo pero' parlare del fatto che essendo dinamicamente tipizzato python spalanca la porta a numerosissimi bug "da errore di battitura" (scrivo "abbc" al posto di "abc")?
parlando di manutenibilita'... vogliamo parlare di quanto possa essere difficile, per chi prende in mano un codice non suo, districarsi tra oggetti di tipo ignoto (cosa che rende il codice NON auto esplicativo)?
Ma di ruby cosa mi dite?
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
cdimauro
03-10-2007, 07:49
provo ad azzardare... ereditarieta' multipla (con il problema di ambiguita' che si porta dietro)?
No, tutto il mio primo quote in realtà è incentrato sul fatto che PGI-Bis lamenta (da tempo :D) di Python il fatto che metta a disposizione diversi modi / sintassi per "costruire oggetti".
Questo lo fa anche Java, perché è oggettivamente utile avere delle "scorciatoie" in alcuni casi, che semplificano di molto la scrittura del codice.
e in quale altro momento dovrebbero esistere? cos'ha che non va la creazione esplicita di un'istanza di una classe ben precisa?
Per quanto mi riguarda non ha niente. :p
poi butti li' un "occulto" quasi in senso spregiativo... ma non eri tu che, a proposito delle forme implicite, dicevi che queste sono ben documentate nelle specifiche del linguaggio?
Non hai capito il senso del mio discorso: vedi sopra.
Io non ho alcuna difficoltà ad accetterle: è PGI-Bis che oppone una forte resistenza, e la forma "dispregiativa" che ho usato era proprio per calcare la mano. :D
Per quanto riguarda queste "forme implicite", non sono tali perché si tratta di oggetti aventi PRECISE caratteristiche, che tra l'altro sono anche ben documentate.
Esempio: se definisco un oggetto funzione, so ESATTAMENTE cosa potrò fare. Non c'è niente di "occulto", "implicito", "poco documentato".
java e' talmente pervaso di tipi primitivi che non ti si puo' dar torto :D se per ogni variabile temporanea che fa da indice a un ciclo iterativo dovessi creare un oggetto da mettere nello heap e che deve essere gestito in termini di garbage collection avrei un'efficienza spaventosamente bassa :)
E chi se ne frega. :D Abbiamo forte parlato di efficienza qui? Mi pare di no.
A me hanno insegnato intanto a RISOLVERE i problemi. POI, SE E SOLO SE le prestazioni sono un problema, si pensa a soluzioni ALGORITMICHE, e come ultima possibilità c'è quella di riscriverne parti con linguaggi più a basso livello.
Tra l'altro col termine efficienza abbracciamo sia le prestazioni che lo spazio di memoria occupato, e in quest'ultimo caso Python, dai test effettuati (di cui ho riportato anche un link), mediamente risulta gestire meglio la memoria.
vedi io sono convinto che le cose debbano essere mantenute semplici: ti serve un oggetto, usa un oggetto... ti serve un dato primitivo, non scomodare cose inutilmente complesse... l'eleganza e' semplicita'.
Ma dove starebbe la complessità, scusa? Anzi, è pure molto più semplice ed elegante avere un solo modello per tutto (tutti gli elementi usati sono oggetti).
il fatto che esistano dei tipi primitivi non implica che si adotti il punto di vista della programmazione strutturata... in java, visto che sostenevi che la classe non e' l'unita' fondamentale, nulla esiste se non all'interno di una definizione di una classe, neppure un main... fai tu. poi in java e' talmente arduo, cognitivamente parlando, scrivere codice in modo puramente strutturato che direi che la tua affermazione e' priva di senso.
Certo, e infatti si vede dagli esempi che sono stati riportati l'uso che se ne è stato fatto delle classi: banali contenitori di codice.
Ai miei tempi queste cose si chiamavano unit, moduli, ecc. In Java tra l'altro vengono chiamati "package".
Per me è privo di senso usare una classe per scopi diversi da questo: http://it.wikipedia.org/wiki/Classe_(informatica)
Sui tipi primitivi, vedi sopra
Tra l'altro è bene notare che in Java avere le classi e usarle sono due cose diverse.
chiarissimo :) in python tutto ha una collocazione metafisica assolutamente voluta e cercata, negli altri linguaggi qualche difettuccio sfugge sempre... :)
In Python non c'è niente di metafisico, ma tutto ha una sua BEN PRECISA logica (oltre che coerenza).
ma guarda, non consigliavi python perche' consente diversi paradigmi di programmazione? argomento decisamente elementare per un novizio che ha problemi con la somma di due numeri... se vogliamo guardare solo alle basi va bene carta e penna, o al massimo un QUALSIASI linguaggio... certo java puo' offrire la programmazione concorrente, ma al momento e' trascurabile... pero' una delle argomentazioni a favore di python era che permettendo vari paradigmi di programmazione si poteva, in futuro, utilizzare il linguaggio gia' noto per una miriade di situazioni diverse... invece per la programmazione concorrente perche' dovrebbe valere lo stesso? no, e' talmente trascurabile... ma guarda un po'.
l'ho gia' detto e lo ripeto, con la speranza di sbagliarmi: tutto cio' sa molto di "101 modi per giustificare l'uno di python a ogni costo".
Vorrei capire il senso di questo tuo post, perché non riesco a trovarne uno.
PGI-Bis ha parlato di programmazione concorrente, e io ho sottolineato due cose:
- che per l'argomento del topic è inutile citarla;
- che non è un'esclusiva di Java visto che altri linguaggi la mettono a disposizione.
Mi spieghi cosa c'è che non va in quello che ho scritto, e come si concilia il tuo quote con tutto ciò? :rolleyes:
cdimauro
03-10-2007, 07:50
Ma di ruby cosa mi dite?
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
Non lo trovo abbastanza leggibile, specialmente per alcuni suoi costrutti sintattici.
per prima cosa modera i toni che non stai parlando con tua sorella, zelig circus tientelo per te
noi abbiamo esplicitato con codice, argomentazioni, dati, fatti per cui Python sia, secondo noi, la scelta migliore per il primo approccio con la programmazione da parte di un neofita, desideroso di imparare.
e per me invece non avete dimostrato niente, continuate a ripetere che python è migliore perchè ha una sintassi semplice (fosse l'unico), è il più leggibile (IMHO falso) ecc.. le argomentazioni serie dove sono? cosa comporta iniziare a programmare da python?
Per esempio è un fatto che l'indentazione forzata di Python costringa il programmatore a scrivere codice in un dato modo, ordinato, evitando che vi siano spaziature diverse per una medesima struttura e all'interno di un unico file di codice sorgente.
Con Java da questo punto di vista si ha + libertà.
però il fatto di non avere dei simboli che racchiudono i blocchi vanifica questo tentativo di migliorare la leggibilità. prendi ad esempio un (pseudo)codice del genere:
while(a<b)
dosomething()
if(b>c)
a = a +1
...
else
c = c - 2
...
try
dosomethingelse()
except Error
print "error"
se piazzi questo frammento di codice in un programma capisci che risulta difficile distinguere i blocchi a occhio (risulta più evidente in sorgenti di una certa complessità)
altra cosa che balza subito all'occhio è la mancanza di omogeneità nel linguaggio. perchè print "error" e non print("error") per esempio?
A parte scrivere "voi avete torto", non mi sembra di aver scorto molta sostanza, men che meno da parte tua.
Ma puoi sempre rimediare, argomentando con eloquenza i tuoi punti
ti sbagli.. voi continuate a ripetere "abbiamo ragione" senza molta sostanza a vostro favore. io dico semplicemente che il linguaggio scelto è una cosa secondaria, ci sono cose più importanti se si vuole imparare a programmare.
la sensazione che ho è che ultimamente il consiglio a chi vuole imparare è "non sporcarti le mani", ovvero "è meglio che stai in una cupolina di vetro perchè sennò rischi di farti male" ecc..
ragazzi se uno vuole diventare programmatore le mani se le deve sporcare e deve pure capire tutto quello che succede nel suo codice. hanno insegnato e da qualche parte continuano a insegnare C come primo linguaggio di programmazione eppure non è mai morto nessuno. anzi se il risultato di un segmentation fault è il panico consiglio di cambiare hobby (parlo di programmazione al livello iniziale, non programmi di decine di migliaia di righe codice.. lì il panico ci sta :D )
che discorsi, se fai un esempio ad hoc dove nel primo caso non dichiari il tipo di variabile, mentre nel secondo sì è ovvio che si giunga alla tua conclusione.
Io parlo di esempi che siano raffrontabili.
E in ogni caso, sfuggi al discorso già menzionato, il numero di linee di codice sorgente è una discriminante per poi poter valutare la qualità del codice stesso che è dato ANCHE dal numero di errori ivi presenti.
Se tu o chi altro, vuole continuare a sostenere che non sia un parametro importante ai fini della correttezza, della manutenibilità e della leggibilità del codice allora siete liberi di farlo.
E conseguentemente di riscrivere buona parte della teoria di Ingegneria del Software degli ultimi 30 anni (per carità le teorie nuove sono sempre bene accette...a volte si tratta di vere e proprie rivoluzioni :))
incredibile.. ho appena dimostrato che ci sono casi in cui scrivere più codice corrisponde a evitare errori eppure tu continui a sostenere l'opposto :mbe: perchè non posti un esempio in cui nella versione java è più facile commettere errori? daltronde in java si scrive molto più codice.. dovrebbe esserti facile
era un esempio per dimostrare come la sintassi di un linguaggio non sia semplice a seconda dei gusti di chi la legge e di chi ne fà uso.
dimostrare? :confused:
il fatto che perl sia "oggettivamente" poco leggibile non significa che python sia "oggettivamente" leggibile. tu continui a dire di dimostrare cose, ma io non vedo niente
hai risposto in merito a quello che ha scritto Cesare sul fatto che in Python non si corra il pericolo dei segmentation fault.
Tu hai risposto che ci sono le eccezioni.
Mbè?
in realtà la mia non era una risposta a un post in particolare
Ci sono anche in Java come in altri linguaggi, quindi non capisco il motivo per cui tu abbia dato una risposta del genere.
Lui ha dato una motivazione per cui sia preferibile cominciare con Python, tu hai risposto dando un'annotazione che non mette in luce Java, bensì qualsiasi linguaggio che sappia gestire delle eccezioni.
Non sò quali siano i tuoi interlocutori abituali, ma rigirare la minestra qui credo funzioni molto poco ;)
per prima cosa non ho rigirato nessuna minestra, ho detto dall'inizio che ai fini didattici il lancio di un eccezione e o un errore sono praticamente indifferenti.
ho dato una risposta del genere perchè il mio obiettivo non era confrontare python con java, ma stavo facendo considerazioni più generali. e in queste considerazioni generali ho affermato che il fatto che python gestisce le eccezioni non è un motivo per preferirlo come linguaggio per imparare a programmare. non perchè le eccezioni sono inutili, ma perchè sono superflue ai fini dell'apprendimento (della programmazione in generale). c'è sempre tempo per imparare a usarle
A meno che l'italiano non sia improvvisamente diventato un'opinione, avere è diverso da "usare". (PGI-BIS aveva parlato di "essere unicamente orientato agli oggetti". Non è così,è un ibrido come la quasi totalità dei linguaggi + utilizzati al mondo)
E infatti nei corsi di programmazione in Java, quando si studiano i mattoni fondamentali si parte proprio dalla programmazione strutturata...evidentemente in Java e non in un altro linguaggio (cosa che poi sarebbe necessaria se si seguisse il tuo consiglio di cominciare dal Basic, quando poi ci si trova ad affrontare l'OOP...), dato che uno switching dopo nemmeno un trimestre di corso sarebbe un suicidio didattico-educativo.
:confused: a te hanno insegnato la programmazione strutturata in java? roba da pazzi..
un dato di fatto è che in java non si può fare a meno di un qualche oggetto e quindi la definizione di programmazione strutturata in questo caso è un pò tirata. diciamo che si può emulare la programmazione strutturata usando solo metodi statici, ma è diverso da dire che java supporta la programmazione strutturata
E si vede quanto tu lo conosca Python. :asd:
in effetti ho preso solo 27 all'esame
Sono così diversi per cui, esistono versioni di Eclipse sviluppate ad hoc per sviluppare sia in Java che in Python, oppure si può utilizzare i plugin per sfruttare il medesimo ambiente (PyDev il + famoso).
Questo vale per Eclipse, vale per Visual Studio, vale per jEdit, IntelliJIDEA, JDeveloper ecc...praticamente tutti gli IDE migliori e + famosi in circolazione che usano, com'è logico che sia, una struttura a plugin.
Sempre + Zelig Circus :rotfl:
e eclipse dovrebbe essere la dimostrazione che java e python hanno strumenti simili? :rotfl:
per prima cosa non mi puoi paragonare il plugin per python di eclipse con quello di java :doh:
seconda cosa io parlavo del framework, non dell'IDE... hai un pò di confusione in testa
mad_hhatter
03-10-2007, 08:49
E chi se ne frega. :D Abbiamo forte parlato di efficienza qui? Mi pare di no.
A me hanno insegnato intanto a RISOLVERE i problemi. POI, SE E SOLO SE le prestazioni sono un problema, si pensa a soluzioni ALGORITMICHE, e come ultima possibilità c'è quella di riscriverne parti con linguaggi più a basso livello.
non sto parlando di algoritmica, sto parlando di scelte implementative a livello di linguaggio... non mischiamo le cose. Tra l'altro, se una feature del linguaggio è tale da inficiare le performance e tale linguaggio non offre alternative a tale feature, mi spieghi come ottimizzi nel caso fosse necessario?
Ma dove starebbe la complessità, scusa? Anzi, è pure molto più semplice ed elegante avere un solo modello per tutto (tutti gli elementi usati sono oggetti).
non è detto che il modello più generale sia il più semplice o il più efficace in ogni circostanza.
Certo, e infatti si vede dagli esempi che sono stati riportati l'uso che se ne è stato fatto delle classi: banali contenitori di codice.
Ai miei tempi queste cose si chiamavano unit, moduli, ecc. In Java tra l'altro vengono chiamati "package".
Per me è privo di senso usare una classe per scopi diversi da questo: http://it.wikipedia.org/wiki/Classe_(informatica)
banali contenitori di codice? mi domando perché tu programmi con linguaggi OO :eek:
se ho una classe che esegue solo istruzioni sto definendo un tipo di oggetto che espone un determinato comportamento... non mi interessa cosa faccia internamente, so che è un'entità con caratteristiche definite, cioè un oggetto... non mi pare scandaloso e anzi, del tutto in linea con il link che hai postato.
Vorrei capire il senso di questo tuo post, perché non riesco a trovarne uno.
è molto semplice: molti tuoi post mi sembrano orientati a voler giustificare python sempre e comunque e ad ogni costo.
@DioBrando
quasi dimenticavo... non mi confondere basic con pascal ;)
mindwings
03-10-2007, 09:11
Primo anno di "Informatica e Tecnologie produzione software " (Bari)
Esame di Programmazione :
Linguaggio usato ---> Java :read:
argomenti del corso in pillole ---> programmazione strutturata (come si è arrivati e il perchè [GOTO] ecc ecc)
---> Cos'è l' OOP e infarinatura di Java
---> Algoritmi fondamentali (metodi di ordinamento e di ricerca principalmente)
---> Case of study (programmazione in piccolo per la risoluzione di un problema )
Questo sopra mi sembra un ottimo corso universitario per principianti...bello. Giudizio dopo averlo seguito ?
mindwings
03-10-2007, 09:46
Questo sopra mi sembra un ottimo corso universitario per principianti...bello. Giudizio dopo averlo seguito ?
Il giudizio è buono :) . Io avrei preferito un' iniezione pesante di Java e un caso di studio moolto più complicato , ci hanno spiegato concetti potenti :D interfacce polimorfismo ereditarietà ma non ci hanno stimolato ad usarli o meglio non ce n'è mai stata la necessità. (forse con l'esame di ing del sw)
DioBrando
03-10-2007, 11:07
Ma di ruby cosa mi dite?
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
la sintassi perliana non mi piace, però è oggettivamente uno dei linguaggi + "trendy" del momento, ci sono parecchi screencast sia su Ruby che su RubyOnRails (mi pare abbiano fatto una conferenza internazionale da poco).
DioBrando
03-10-2007, 13:09
@DioBrando
quasi dimenticavo... non mi confondere basic con pascal ;)
ho pensato ad uno e ho scritto l'altro.
Il concetto è il medesimo, dato che nessuno dei due nasce con il paradigma OO, quindi i discorsi si applicano nella medesima sostanza e quindi lo switch dovresti farlo cmq.
DioBrando
03-10-2007, 13:19
ineccepibile...
bene, allora su questo siamo tutti d'accordo che è un punto a favore di Python rispetto a tutti gli altri linguaggi, Java compreso?
vogliamo pero' parlare del fatto che essendo dinamicamente tipizzato python spalanca la porta a numerosissimi bug "da errore di battitura" (scrivo "abbc" al posto di "abc")?
perchè se io scrivo il nome di una classe e poi la richiamo sbagliando una maiuscola cosa succede?
Non tiriamo per favore questo tipo di problemi, perchè sono comuni a QUALSIASI linguaggio con un minimo di espressività.
parlando di manutenibilita'... vogliamo parlare di quanto possa essere difficile, per chi prende in mano un codice non suo, districarsi tra oggetti di tipo ignoto (cosa che rende il codice NON auto esplicativo)?
sono problemi che si affrontano in ogni linguaggio, specie quando hai a che fare con lavori di teamwork (ovvero SEMPRE, in progetti un minimo seri)
Vogliamo parlare invece dell'utilizzo di strutture come i dizionario e le liste, che per esempio Java non utilizza al contrario di Python e di quanto ti semplifichino la vita?
perchè a me sembra che voi che contestiate questo linguaggio, lo facciate in modo superficiale, come se, magari sbaglio, in realtà in Python non abbiate mai sviluppato per davvero.
E altra cosa. Io la smetterei con questa solfa del "101 modi per giustificare la scelta di Python", come se si trattasse di convincere i beduini a comprare della sabbia.
Nessuno sta vendendo niente, nè tantomeno fumo, se vuoi puoi non essere d'accordo su alcune tesi, ma sui dati di fatto (l'indentazione, le strutture utilizzate) si può parlare quanto si vuole che i fatti sono quelli.
Il resto sono chiacchere da bar ;)
la cosa è del tutto indifferente a questo livello (cioè il livello didattico), che venga lanciata un'eccezione (parlo di quelle non gestite) o che ti trovi scritto "errore" cambia poco, si tratta di un bug nel codice
spero di non aver mai detto che sono inutili! non me lo perdonerei :O
Un segmentation fault ha lo stesso contenuto didattico di un calcio in culo ad un bambino che sbaglia una divisione. Capirà che qualcosa è sbagliato, ma non avrà idea nè del dove nè del perché.
E magari lo farà pure innervosire.
mad_hhatter
03-10-2007, 13:31
bene, allora su questo siamo tutti d'accordo che è un punto a favore di Python rispetto a tutti gli altri linguaggi, Java compreso?
non la farei così semplice...
perchè se io scrivo il nome di una classe e poi la richiamo sbagliando una maiuscola cosa succede?
viene sollevato un errore a compile-time perché il tipo non è definito... è appunto a questo che mi riferivo dicendo che un type-system dinamico apre la porta a quel tipo di bug.
sono problemi che si affrontano in ogni linguaggio, specie quando hai a che fare con lavori di teamwork (ovvero SEMPRE, in progetti un minimo seri)
dichiarare esplicitamente il tipo degli oggetti veicola immediatamente una serie di informazioni a chi legge il codice, rendendo quest'ultimo più comprensibile ad una prima occhiata... almeno comunica a grandi linee le intenzioni del programmatore.
Vogliamo parlare invece dell'utilizzo di strutture come i dizionario e le liste, che per esempio Java non utilizza al contrario di Python e di quanto ti semplifichino la vita?
http://java.sun.com/javase/6/docs/api/java/util/package-summary.html
cos'è che java non usa?
E altra cosa. Io la smetterei con questa solfa del "101 modi per giustificare la scelta di Python", come se si trattasse di convincere i beduini a comprare della sabbia.
Nessuno sta vendendo niente, nè tantomeno fumo, se vuoi puoi non essere d'accordo su alcune tesi, ma sui dati di fatto (l'indentazione, le strutture utilizzate) si può parlare quanto si vuole che i fatti sono quelli.
Il resto sono chiacchere da bar ;)
ho solo lamentato il fatto che alcuni commenti sembravano un po' troppo parziali e tendenziosi
cdimauro
03-10-2007, 13:36
non sto parlando di algoritmica, sto parlando di scelte implementative a livello di linguaggio... non mischiamo le cose.
Non sono stato io a parlare di "efficienza", mi pare: finora m'ero attenuto esclusivamente al linguaggio.
Tra l'altro, se una feature del linguaggio è tale da inficiare le performance e tale linguaggio non offre alternative a tale feature, mi spieghi come ottimizzi nel caso fosse necessario?
Te l'ho già detto, e te lo ripeto: in primis cerco una soluzione algoritmica, e se e solo se non la trovo passo a convertire la parte di codice incriminata con un linguaggio di più basso livello.
Quest'ultimo caso finora non m'è mai capitato, comunque avevo anche postato un link alla documentazione di Python in cui si spiega come fare ad "estendere" il linguaggio integrando moduli compilati con altri linguaggi.
Le alternative, quindi, ci sono e, anzi, sono ampiamente previste da Python.
non è detto che il modello più generale sia il più semplice o il più efficace in ogni circostanza.
Continui a parlare di efficienza quando dovremmo discutere del linguaggio: come vedi non sono io certo io a mischiare le cose. :rolleyes:
Sull'efficienza mi sono già espresso. Sul modello "più generale" non è detto che sia più semplice: dipende dal linguaggio.
banali contenitori di codice? mi domando perché tu programmi con linguaggi OO :eek:
Perché so distinguere esattamente un contenitore di codice, quale potrebbe essere un modulo/package, da una classe, e io uso quello più opportuno a seconda del problema che devo risolvere.
se ho una classe che esegue solo istruzioni sto definendo un tipo di oggetto che espone un determinato comportamento... non mi interessa cosa faccia internamente, so che è un'entità con caratteristiche definite, cioè un oggetto... non mi pare scandaloso e anzi, del tutto in linea con il link che hai postato.
Ovviamente il mio NON era un discorso generale, ma era riferito all'uso che è stato fatto del concetto di classe in quegli esempi.
è molto semplice: molti tuoi post mi sembrano orientati a voler giustificare python sempre e comunque e ad ogni costo.
Questo, se permetti, non c'entra niente.
Io ho fatto delle precise affermazioni, tu le hai contestate con delle cose prive di senso, te ne ho chiesto la spiegazione, ma hai sviato il discorso.
Attendo ancora una risposta.
cdimauro
03-10-2007, 13:43
non la farei così semplice...
Non capisco perché non esprimi la tua opinione allora...
viene sollevato un errore a compile-time perché il tipo non è definito... è appunto a questo che mi riferivo dicendo che un type-system dinamico apre la porta a quel tipo di bug.
Esistono dei syntax checker (tra l'altro Python ne ha in dotazione uno) per questo tipo di errori (e altri).
dichiarare esplicitamente il tipo degli oggetti veicola immediatamente una serie di informazioni a chi legge il codice, rendendo quest'ultimo più comprensibile ad una prima occhiata... almeno comunica a grandi linee le intenzioni del programmatore.
a = 1
b = 3.14
c = 'Pippo'
d = ['Qui', 'Quo', 'Qua', 1234567]
e = {'Qui' : 1, 'Quo' : 2, 'Qua' : 3}
A me sembra piuttosto semplice capirlo anche senza che abbia specificato che si tratti di un dato intero, in virgola mobile, stringa, lista e dizionario. ;)
http://java.sun.com/javase/6/docs/api/java/util/package-summary.html
cos'è che java non usa?
Come libreria, non come linguaggio. In Python sono nativi, e soprattutto... molto più facili da usare e più flessibili (possono contenere qualunque tipo di oggetto).
ho solo lamentato il fatto che alcuni commenti sembravano un po' troppo parziali e tendenziosi
In questo caso puoi sempre contestarli anziché rifugiarti nella solita frase fatta.
EDIT: dimenticavo. Il tipo NON è affatto ignoto.
Th3 Kn0wl3dg3
03-10-2007, 13:48
dai raga credo che basti cosi. per le vostre lotte aprite un altro topic
mad_hhatter
03-10-2007, 13:50
Non sono stato io a parlare di "efficienza", mi pare: finora m'ero attenuto esclusivamente al linguaggio.
Te l'ho già detto, e te lo ripeto: in primis cerco una soluzione algoritmica, e se e solo se non la trovo passo a convertire la parte di codice incriminata con un linguaggio di più basso livello.
Quest'ultimo caso finora non m'è mai capitato, comunque avevo anche postato un link alla documentazione di Python in cui si spiega come fare ad "estendere" il linguaggio integrando moduli compilati con altri linguaggi.
e questo sarebbe meglio o più semplice e coerente rispetto a fare delle scelte di ordine pratico a livello di linguaggio implementando una manciata di tipi primitivi?
Continui a parlare di efficienza quando dovremmo discutere del linguaggio: come vedi non sono io certo io a mischiare le cose. :rolleyes:
sto parlando di efficienza del linguaggio... questo non è parlare DEL linguaggio?
Perché so distinguere esattamente un contenitore di codice, quale potrebbe essere un modulo/package, da una classe, e io uso quello più opportuno a seconda del problema che devo risolvere.
mi sfugge il motivo per cui sembri affermare che in java ci sia ambiguità tra classe e package.
Attendo ancora una risposta.
visto che il thread è molto lungo e complesso mi rarà sicuramente sfuggito qualcosa... se vuoi ripetere le domande a cui non ho risposto sarò lieto di cercare di risponderti
DioBrando
03-10-2007, 13:51
per prima cosa modera i toni che non stai parlando con tua sorella, zelig circus tientelo per te
i parenti lasciali stare per cortesia, perchè non voleva essere certo un riferimento così personale.
D'altra parte se tu continui a scrivere baggianate, cercando di stravolgere ogni volta o quello che si dice o quello che tu rispondi in prima battuta (come per il discorso degli IDE), mi viene spontaneo dire una cosa del genere, perchè è un atteggiamento ridicolo oltre che infantile.
e per me invece non avete dimostrato niente, continuate a ripetere che python è migliore perchè ha una sintassi semplice (fosse l'unico), è il più leggibile (IMHO falso) ecc.. le argomentazioni serie dove sono? cosa comporta iniziare a programmare da python?
che significa "cosa comporta iniziare a programmare con Python?" Cosa vuoi che comporti, il percorso iniziale è il medesimo per ciascun linguaggio scelto, i primi algoritmi da implementare ecc ecc.
però il fatto di non avere dei simboli che racchiudono i blocchi vanifica questo tentativo di migliorare la leggibilità. prendi ad esempio un (pseudo)codice del genere:
while(a<b)
dosomething()
if(b>c)
a = a +1
...
else
c = c - 2
...
try
dosomethingelse()
except Error
print "error"
se piazzi questo frammento di codice in un programma capisci che risulta difficile distinguere i blocchi a occhio (risulta più evidente in sorgenti di una certa complessità)
altra cosa che balza subito all'occhio è la mancanza di omogeneità nel linguaggio. perchè print "error" e non print("error") per esempio?
ti sbagli.. voi continuate a ripetere "abbiamo ragione" senza molta sostanza a vostro favore. io dico semplicemente che il linguaggio scelto è una cosa secondaria, ci sono cose più importanti se si vuole imparare a programmare.
la sensazione che ho è che ultimamente il consiglio a chi vuole imparare è "non sporcarti le mani", ovvero "è meglio che stai in una cupolina di vetro perchè sennò rischi di farti male" ecc..
ragazzi se uno vuole diventare programmatore le mani se le deve sporcare e deve pure capire tutto quello che succede nel suo codice. hanno insegnato e da qualche parte continuano a insegnare C come primo linguaggio di programmazione eppure non è mai morto nessuno. anzi se il risultato di un segmentation fault è il panico consiglio di cambiare hobby (parlo di programmazione al livello iniziale, non programmi di decine di migliaia di righe codice.. lì il panico ci sta :D )
a me sembra siate voi ad arrampicarvi sugli specchi, visto che quando si è parlato di comparare Java sono state tirate fuori argomentazioni molto discutibili (paradigma OO unico, "classe e oggetto"...) e che su Python stesso ci sia poco, perchè mi viene il sospetto che qui quelli che abbiano programmato realmente in Python in realtà siano pochi tra gli interlocutori.
Detto questo, il discorso che fai sulla campana di vetro è assolutamente futile perchè nessuno di noi che sostiene Python ha detto una cosa simile.
Anzi, qualche pagine fà ho proprio usato la stessa espressione, a proposito di quanto cionci aveva affermato sugli IDE.
Ovvero che è un discorso prematuro in ogni caso, proprio perchè all'inizio un newbie si deve sporcare le mani e quindi sarebbe preferibile non usare strumenti che gli facilino troppo la vita (editor integrato di Python và benissimo, prompt di comandi Java idem).
Sarebbe meglio che leggeste attentamente i post prima di rispondere ;)
incredibile.. ho appena dimostrato che ci sono casi in cui scrivere più codice corrisponde a evitare errori eppure tu continui a sostenere l'opposto :mbe: perchè non posti un esempio in cui nella versione java è più facile commettere errori? daltronde in java si scrive molto più codice.. dovrebbe esserti facile
vedo che sulla teoria riguardo a IngSW non hai scritto niente, deduco tu sia d'accordo con me.
Altrimenti aspetto una dimostrazione formale del fatto che il numero di righe sia ininfluente nel valutare la bontà di un codice sorgente.
E poi la pubblichiamo su qualche rivista scientifica, d'accordo? :D
dimostrare? :confused:
il fatto che perl sia "oggettivamente" poco leggibile non significa che python sia "oggettivamente" leggibile. tu continui a dire di dimostrare cose, ma io non vedo niente
in realtà la mia non era una risposta a un post in particolare
per prima cosa non ho rigirato nessuna minestra, ho detto dall'inizio che ai fini didattici il lancio di un eccezione e o un errore sono praticamente indifferenti.
ho dato una risposta del genere perchè il mio obiettivo non era confrontare python con java, ma stavo facendo considerazioni più generali. e in queste considerazioni generali ho affermato che il fatto che python gestisce le eccezioni non è un motivo per preferirlo come linguaggio per imparare a programmare. non perchè le eccezioni sono inutili, ma perchè sono superflue ai fini dell'apprendimento (della programmazione in generale). c'è sempre tempo per imparare a usarle
Lui ha fatto presente come in Python non vi siano i segmentation fault e questo, rispetto alla scelta di iniziare con C per esempio è un punto a favore, perchè permette di focalizzarsi sulla risoluzione dei problemi invece che su problemi di implementazione tipiche di un linguaggio che ti concede troppe libertà, cosa che non funziona per chi COMINCIA a programmare e che necessità proprio di SEMPLICITA'.
Le eccezioni sono gestite da Python, Java ecc...quindi la tua era una risposta non pertinente all'osservazione di Cesare, punto e fine del discorso.
Uno parla di banane dicendo che non ci sono i semi e tu te ne vieni fuori affermando che "sì però c'è la buccia".
Praticamente TUTTA LA FRUTTA ha la buccia, quindi?
Quindi la tua osservazione è senza senso.
Con questo paragone sei riuscito finalmente a capirla o no?
:confused: a te hanno insegnato la programmazione strutturata in java? roba da pazzi..
un dato di fatto è che in java non si può fare a meno di un qualche oggetto e quindi la definizione di programmazione strutturata in questo caso è un pò tirata. diciamo che si può emulare la programmazione strutturata usando solo metodi statici, ma è diverso da dire che java supporta la programmazione strutturata
se in un'Università programmazione 1 si insegna tramite Java secondo te uno come comincia con la programmazione strutturata?
Con il didò? :asd:
in effetti ho preso solo 27 all'esame
Eccoci qua, prima o poi ci dovevamo arrivare ai titoli nobiliari...quando cominciano a scarseggiare le argomentazioni succede questo.
hai preso 27 in Programmazione in Python?
Perchè io ti ho risposto che si vede quanto tu lo conosca.
Quindi non mi tirare fuori il tuo voto in Programmazione 1.
e eclipse dovrebbe essere la dimostrazione che java e python hanno strumenti simili? :rotfl:
No dovrebbe essere la dimostrazione che sono completamente diversi, vero? :asd:
Ti ho citato gli IDE che supportano Python e Java allo stesso tempo e dove si utilizzano i medesimi strumenti di revisione del codice, accesso a basi dati e via di seguito.
L'ambiente è lo stesso, l'interfaccia pure.
ora vediamo cos'avrai il coraggio di scrivere e cosa in realtà intendevi per "completamente diversi".
Sono proprio curioso :asd:
per prima cosa non mi puoi paragonare il plugin per python di eclipse con quello di java :doh:
Ah e per quale motivo sentiamo?
seconda cosa io parlavo del framework, non dell'IDE... hai un pò di confusione in testa
aahahah tu parlavi del framework?
Se sì DOVE? Quotami esattamente una tua frase dove citi, nelle ultime pagine la parola "framework" a proposito del discorso che stavo facendo sugli strumenti di sviluppo.
Sono proprio curioso di vederla.
Io ho citato una frase di cionci all'inizio in cui si parla di ambienti di sviluppo, che si riferisce chiaramente ad IDE non ai Framework (nell'esame di inglese quanto hai preso? :asd: )
Certo certo sono io che ho confusione in testa...poi ti offendi se parlo di Zelig Circus.
Mavàvà :rolleyes:
DioBrando
03-10-2007, 13:53
dai raga credo che basti cosi. per le vostre lotte aprite un altro topic
sì sorry.
Aprite un altro topic dalle prossime risposte, tanto qui abbiamo finito credo.
Casomai se avessi bisogno di aiuto chiedi pure in merito a Python ;)
dai raga credo che basti cosi. per le vostre lotte aprite un altro topic
Anche per me basta così. Spero solo che tu non ti penta della scelta ;)
cdimauro
03-10-2007, 14:00
e questo sarebbe meglio o più semplice e coerente rispetto a fare delle scelte di ordine pratico a livello di linguaggio implementando una manciata di tipi primitivi?
E perché mai? Si tratta di casi particolari, e come tali vanno trattati.
Ripeto: finora non ho MAI avuto la necessità neppure di andare a cercare un algoritmo diverso per le implementazioni delle applicazioni che ho realizzato, e non credo di essere l'unico.
sto parlando di efficienza del linguaggio... questo non è parlare DEL linguaggio?
Allora per una questione di coerenza non dire a me che mischio le cose http://www.hwupgrade.it/forum/showpost.php?p=18976477&postcount=209 :
"java e' talmente pervaso di tipi primitivi che non ti si puo' dar torto se per ogni variabile temporanea che fa da indice a un ciclo iterativo dovessi creare un oggetto da mettere nello heap e che deve essere gestito in termini di garbage collection avrei un'efficienza spaventosamente bassa"
Sei stato tu il primo a tirare in ballo l'efficienza.
Poi, non contento, http://www.hwupgrade.it/forum/showpost.php?p=18978106&postcount=215 :
"non sto parlando di algoritmica, sto parlando di scelte implementative a livello di linguaggio... non mischiamo le cose."
Io, infatti, non le ho MAI mischiate: sei tu che continui a farlo.
mi sfugge il motivo per cui sembri affermare che in java ci sia ambiguità tra classe e package.
Ti sfugge perché non hai capito quello che ho scritto: rileggi i messaggi precedenti e vedrai che il senso non è certo quello che vorresti far passare. :rolleyes:
visto che il thread è molto lungo e complesso mi rarà sicuramente sfuggito qualcosa... se vuoi ripetere le domande a cui non ho risposto sarò lieto di cercare di risponderti
http://www.hwupgrade.it/forum/showpost.php?p=18977450&postcount=212
"Vorrei capire il senso di questo tuo post, perché non riesco a trovarne uno.
PGI-Bis ha parlato di programmazione concorrente, e io ho sottolineato due cose:
- che per l'argomento del topic è inutile citarla;
- che non è un'esclusiva di Java visto che altri linguaggi la mettono a disposizione.
Mi spieghi cosa c'è che non va in quello che ho scritto, e come si concilia il tuo quote con tutto ciò?"
cdimauro
03-10-2007, 14:02
M'avete fregato per un minuto. :D
OK, per me va bene proseguire in un altro thread. Chi deve rispondere lo faccia creandone uno nuovo e mettendo il link a questo all'inizio (oltre, ovviamente, a un titolo che richiami la diatriba in corso).
Th3 Kn0wl3dg3
03-10-2007, 14:07
per qualunque cosa chiederò grazie
mad_hhatter
03-10-2007, 14:28
ho aperto questo
http://www.hwupgrade.it/forum/showthread.php?p=18983944#post18983944
ho pensato ad uno e ho scritto l'altro.
Il concetto è il medesimo, dato che nessuno dei due nasce con il paradigma OO, quindi i discorsi si applicano nella medesima sostanza e quindi lo switch dovresti farlo cmq.
se per switch intendi il passaggio da programmazione strutturata a programmazione a oggetti, ancora nessuno è ancora riuscito a dimostrare che sia così difficoltoso. comunque ci tenevo a precisare perchè non avrei mai potuto consigliare basic :D
i parenti lasciali stare per cortesia, perchè non voleva essere certo un riferimento così personale.
D'altra parte se tu continui a scrivere baggianate, cercando di stravolgere ogni volta o quello che si dice o quello che tu rispondi in prima battuta (come per il discorso degli IDE), mi viene spontaneo dire una cosa del genere, perchè è un atteggiamento ridicolo oltre che infantile.
io non stravolgo niente ne tanto meno scrivo baggianate, ti ripeto che non sono tua sorella.
pensavo di aver fatto riferimento al framework perchè era quello che pensavo, se non l'ho scritto me lo fai notare e la cosa finisce lì. invece tu mi vieni a dire che sono infantile (che è un comportamento infantile)
a me sembra siate voi ad arrampicarvi sugli specchi, visto che quando si è parlato di comparare Java sono state tirate fuori argomentazioni molto discutibili (paradigma OO unico, "classe e oggetto"...) e che su Python stesso ci sia poco, perchè mi viene il sospetto che qui quelli che abbiano programmato realmente in Python in realtà siano pochi tra gli interlocutori.
Detto questo, il discorso che fai sulla campana di vetro è assolutamente futile perchè nessuno di noi che sostiene Python ha detto una cosa simile.
Anzi, qualche pagine fà ho proprio usato la stessa espressione, a proposito di quanto cionci aveva affermato sugli IDE.
Ovvero che è un discorso prematuro in ogni caso, proprio perchè all'inizio un newbie si deve sporcare le mani e quindi sarebbe preferibile non usare strumenti che gli facilino troppo la vita (editor integrato di Python và benissimo, prompt di comandi Java idem).
Sarebbe meglio che leggeste attentamente i post prima di rispondere
sarebbe stato interessante discutere sulla leggibilità dei blocchi.. o sulla disomogeneità della sintassi python..
comunque io ho usato python e quindi so di cosa parlo. lo "sporcarsi le mani" era più riferito al fatto che sembra che più è alto il livello del linguaggio e più è meglio per iniziare. nessuno sa qual'è la strada corretta, per cui escludere delle strade a priori è senz'altro sbagliato. non mi riferivo certo al programma usato per scrivere il codice.. il blocco note va bene per tutto
vedo che sulla teoria riguardo a IngSW non hai scritto niente, deduco tu sia d'accordo con me.
Altrimenti aspetto una dimostrazione formale del fatto che il numero di righe sia ininfluente nel valutare la bontà di un codice sorgente.
E poi la pubblichiamo su qualche rivista scientifica, d'accordo?
senti è inutile continuare a parlare di aria.. io ti ho fornito un esempio, sei in grado di fare altrettanto te?
al massimo si potrebbe teorizzare che un programma scritto in un certo linguaggio lungo 6 righe di codice ha meno probabilità di contenere bug di un altro programma scritto nello stesso linguaggio con più righe di codice. ma confrontare due programmi scritti in due linguaggi diversi ci dice molto poco... se non nulla.
Lui ha fatto presente come in Python non vi siano i segmentation fault e questo, rispetto alla scelta di iniziare con C per esempio è un punto a favore, perchè permette di focalizzarsi sulla risoluzione dei problemi invece che su problemi di implementazione tipiche di un linguaggio che ti concede troppe libertà, cosa che non funziona per chi COMINCIA a programmare e che necessità proprio di SEMPLICITA'.
Le eccezioni sono gestite da Python, Java ecc...quindi la tua era una risposta non pertinente all'osservazione di Cesare, punto e fine del discorso.
forse perchè non era una risposta all'osservazione di cesare :fagiano:
lasciamo perdere sta faccenda delle eccezioni, per me a uno che inizia non danno nessun aiuto. nel senso che imparare a usare un debugger è buona cosa comunque.
se poi parliamo di SEMPLICITA' mi dispiace ma con python non ci siamo.. troppi modi per fare la stessa cosa.. troppi paradigmi insieme. C è un linguaggio semplice, ma come ho detto è preferibile il PASCAL per via del fatto che la gestione della memoria è trasparente, inoltre con il compilatore della borland (ma praticamente tutti i compilatori moderni) si possono pure usare gli oggetti
Uno parla di banane dicendo che non ci sono i semi e tu te ne vieni fuori affermando che "sì però c'è la buccia".
Praticamente TUTTA LA FRUTTA ha la buccia, quindi?
Quindi la tua osservazione è senza senso.
Con questo paragone sei riuscito finalmente a capirla o no?
no
se in un'Università programmazione 1 si insegna tramite Java secondo te uno come comincia con la programmazione strutturata?
Con il didò?
banalmente se vuoi iniziare dalla programmazione strutturata non inizi da java. pessima scelta quella far finta che un linguaggio a oggetti sia un linguaggio procedurale.
Eccoci qua, prima o poi ci dovevamo arrivare ai titoli nobiliari...quando cominciano a scarseggiare le argomentazioni succede questo.
hai preso 27 in Programmazione in Python?
Perchè io ti ho risposto che si vede quanto tu lo conosca.
Quindi non mi tirare fuori il tuo voto in Programmazione 1.
ma quali titoli nobiliari.. non mi interessa dirti quale esame era o cosa faccio nella mia vita. sta di fatto che in un esame ho affrontato l'argomento python e visto che è andato bene posso dire che lo conosco.
No dovrebbe essere la dimostrazione che sono completamente diversi, vero?
Ti ho citato gli IDE che supportano Python e Java allo stesso tempo e dove si utilizzano i medesimi strumenti di revisione del codice, accesso a basi dati e via di seguito.
L'ambiente è lo stesso, l'interfaccia pure.
ora vediamo cos'avrai il coraggio di scrivere e cosa in realtà intendevi per "completamente diversi".
Sono proprio curioso
beh ti posso dire che il plugin per java di eclipse rappresenta un punto di riferimento per qualsiasi IDE, ma un giorno proverò questo pydev.
parlando del framework penso che ci sia poco da dire.. quello di java non teme rivali. come anche la documentazione, la javadoc è un punto di riferimento
la questione ide/framework è già chiarita ;)
:doh: ho visto l'altro thread ora.. ma penso che non continuerò a parlare di aria :D ho qualcosa di meglio da fare :O
cdimauro
03-10-2007, 16:51
Edita e copia dall'altra parte, no? ;)
Poi se non avevi voglia di continuare ti saresti benissimo potuto risparmare di scrivere quel messaggio di risposta.
Th3 Kn0wl3dg3
06-10-2007, 14:00
scusate, ora che sono un pò tranquillo con la scuola ho deciso di stampare il dive into python, ma ad una prima occhiata c'è messo che è per programmatori esperti e ci sono anche riferimenti a html, xml ecc.. siete sicuri che per uno che parte da 0, e ripeto parte da 0, sia buona qst guida?
di questo link http://www.python.it/doc/newbie.html oltre a dive into python quale guida potrei usare buona per uno che la programmazione l'ha solo sentita nominare?
forse il migliore è pensare da informatico:imparare con python
variabilepippo
06-10-2007, 14:05
di questo link http://www.python.it/doc/newbie.html oltre a dive into python quale guida potrei usare buona per uno che la programmazione l'ha solo sentita nominare?
Se fossi in te scaricherei tutte le guide presenti in quella pagina e verificherei di persona quale risulta più comprensibile... :rolleyes:
In particolare: Pensare da informatico Imparare con Python, Tutorial per principianti in Python di Josh Cogliati e Imparare a programmare in versione PDF.
Th3 Kn0wl3dg3
06-10-2007, 14:59
credo che inizierò con pensare da informatico:imparare con python.. se avete altri consigli dite pure
cdimauro
06-10-2007, 15:10
Fai bene: l'ho trovato molto chiaro e semplice. :)
DioBrando
06-10-2007, 19:17
credo che inizierò con pensare da informatico:imparare con python.. se avete altri consigli dite pure
sì era uno dei due che avevo citato, oltre al libricino dell'Apogeo.
Penso siamo tutti d'accordo visto che l'abbiano nominato in 4 :D
Ci farai sapere come procede ;)
^TiGeRShArK^
08-10-2007, 14:43
questo credo sia vero in parte..devo dire che ho fatto dei programmi di analisi numerica e simulazione di alcuni (semplici) modelli fisici in C e in java o in python credo che avrebbero girato molto più lentamente :P
Ma anche no :p
Java 5 nel benchmark scimark 2.0 se non erro andava circa il 3% in media + lento del C o del C++ :p
quindi, mi dispiace, ma non credo proprio che i tuoi programi di simulazione sarebbero MOLTO + lenti scritti in java :p
^TiGeRShArK^
08-10-2007, 15:36
La quantità e la qualità della documentazione disponibile per la piattaforma Python non è lontanamente paragonabile alla quantità ed alla qualità della documentazione disponibile per la piattaforma Java.
questo è purtroppo VERISSIMO.
^TiGeRShArK^
08-10-2007, 16:52
Spero non dirai la stessa cosa di un segnale a cui hai appena applicato una trasformata di Fourier: le informazioni sono le stesse o di meno?
:mbe:
di meno :fagiano:
Con la trasformata di fourier approssimi il segnale reale con una serie di armoniche che per essere completamente corrispondente al segnale originale dovrebbe tendere ad infinito.
Ovviamente nella realtà si approssima BEN prima di infinito, ma cmq rappresentare ad esempio un'onda quadra nel dominio di fourier degrada abbastanza le informazioni contenute nel segnale originario :p
Ti sei accorto che hanno aperto una nuova discussione per continuare il discorso ? :D
^TiGeRShArK^
08-10-2007, 17:29
Ma di ruby cosa mi dite?
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
a me personalmente piace + di python :p
Poi ovviamente dipende da quello ke ci devi fare..
per stringhe e accesso ai file preferisco python, per programmazione di rete preferisco ruby :D
^TiGeRShArK^
08-10-2007, 17:36
Vogliamo parlare invece dell'utilizzo di strutture come i dizionario e le liste, che per esempio Java non utilizza al contrario di Python e di quanto ti semplifichino la vita?
Perchè in java non si utilizzano? :fagiano:
java.util.List e java.util.Map cosa sono? :mbe:
^TiGeRShArK^
08-10-2007, 17:37
Ti sei accorto che hanno aperto una nuova discussione per continuare il discorso ? :D
ehmmm...:fiufiu:
vabbè ormai finisco di leggere questa e poi incollo gli interventi di là :p
a meno che un qualche mod di buona volontà non mi sposti gli interventi di là :angel:
cdimauro
08-10-2007, 20:13
http://www.hwupgrade.it/forum/showthread.php?p=19060684&posted=1#post19060684 :fiufiu:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.