PDA

View Full Version : La programmazione ad un incompetente


Vinnie Costante
13-07-2008, 22:26
Vorrei imparare dei fondamenti di programmazione un po per hobby e curiosità.
Anche se confesso i miei interessi siano votati al videogioco ciò che mi interessa ora è soprattutto acquisire una buona logica di insieme, valida ipoteticamente per un approfondimento futuro.
Per questo motivo, armato di questa (http://it.wikibooks.org/wiki/Pascal) guida, ho pensato al pascal che da ciò che ho letto in giro dovrebbe essere un linguaggio a scopo didattico.

Faccio bene?
Che compilatore dovrei usare (contando che vorrei scrivere gli algoritmi semplicemente con un notepad++)
Qualche guida per l'ignorante comune da consigliarmi?

Vi prego di non dilungarvi su quale sia il linguaggio che è più sensato saper usare per avere sbocchi nell'informatica (java etc. etc.), a me interessa solo imparare nella maniera concettualmente + giusta e indolore.

Grazie.

cdimauro
13-07-2008, 22:45
Perfetto: la soluzione al tuo problema è sicuramente Python.

Ecco qui http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm un eccellente manuale per imparare a programmare.

Per qualsiasi dubbio o informazione, chiedi pure. :)

k0nt3
13-07-2008, 23:08
se ti interessa pascal senza dubbio ti serve un compilatore ( http://www.freepascal.org/ ) e possibilmente la conoscenza dell'inglese.
un pò di documentazione la trovi qui http://www.freepascal.org/docs.var
per installare e capire come funziona il compilatore questo può essere d'aiuto http://www.freepascal.org/docs-html/user/user.html
mentre questo http://www.taoyue.com/tutorials/pascal/ per muovere i primi passi nel codice vero e proprio
ci sono anche guide in italiano ma in generale il materiale in inglese è meglio

ps. ho notato ora che avevi trovato una guida in italiano :p

cdimauro
13-07-2008, 23:17
Se proprio vuol usare il Pascal, non c'è niente di meglio di Turbo Delphi: http://cc.codegear.com/free/

Se invece vuol imparare a programmare bene, la risposta l'ha già avuta: Python. :cool:

Vinnie Costante
13-07-2008, 23:23
Il python è un linguaggio che mi incuriosisce molto ed ho anche trovato un ottima guida per quello: http://www.freenetpages.co.uk/hp/alan.gauld/italian/index.htm

Il fatto è che la mia conoscenza non mi permette di giudicare con dovere e mi baso sullo standard (le scuole con pascal) per procedere.

Su molti forum ho letto che alcuni consigliano il python ma non è troppo evoluto per ora? cioè francamente, non è che me lo consigli perché lo ritieni un ottimo linguaggio a prescindere dal fatto che sia buono per imparare?

Per quanto riguarda l'inglese, non sono molto dotato, capisco un poco di quello scritto ma non credo mi convenga una guida in quell'idioma.
Free pascal lo avevo installato ma mi partiva il compilatore in una finestra simil dos! allora ho provato lazarus ma è troppo incasinato. Non c'è un modo di avere un editor senza fronzoli (tipo notepad++) per poi poter complilare ciò che si è scritto?

k0nt3
13-07-2008, 23:28
Per quanto riguarda l'inglese, non sono molto dotato, capisco un poco di quello scritto ma non credo mi convenga una guida in quell'idioma.
Free pascal lo avevo installato ma mi partiva il compilatore in una finestra simil dos! allora ho provato lazarus ma è troppo incasinato. Non c'è un modo di avere un editor senza fronzoli (tipo notepad++) per poi poter complilare ciò che si è scritto?
si puoi scrivere il sorgente con qualsiasi editor di testo e poi compilarlo dal prompt di dos (suppongo che stai su windows) con il comando: fpc nomefile.pas
nella directory in cui hai salvato il sorgente

oppure scrivi il sorgente e poi lo apri con la finestra "simildos" per compilarlo

cdimauro
13-07-2008, 23:30
Il python è un linguaggio che mi incuriosisce molto ed ho anche trovato un ottima guida per quello: http://www.freenetpages.co.uk/hp/alan.gauld/italian/index.htm

Il fatto è che la mia conoscenza non mi permette di giudicare con dovere e mi baso sullo standard (le scuole con pascal) per procedere.

Su molti forum ho letto che alcuni consigliano il python ma non è troppo evoluto per ora? cioè francamente, non è che me lo consigli perché lo ritieni un ottimo linguaggio a prescindere dal fatto che sia buono per imparare?

Per quanto riguarda l'inglese, non sono molto dotato, capisco un poco di quello scritto ma non credo mi convenga una guida in quell'idioma.
Free pascal lo avevo installato ma mi partiva il compilatore in una finestra simil dos! allora ho provato lazarus ma è troppo incasinato. Non c'è un modo di avere un editor senza fronzoli (tipo notepad++) per poi poter complilare ciò che si è scritto?
Python te lo consiglio proprio perché è facilissimo da imparare, ma al contempo è un linguaggio molto potente e pieno di strumenti molto utili.

Quindi se vuoi imparare a programmare non c'è niente di meglio.

Il libro che di cui t'ho fornito il link è interamente in italiano. ;)

P.S. Lascia perdere Lazarus e FP: Turbo Delphi è di gran lunga più semplice come IDE per Pascal & derivati. :cool:

Vinnie Costante
13-07-2008, 23:40
Sto cercando di informarmi tantissimo prima di iniziare e leggevo che si sconsiglia vivamente l'uso di qualsiasi IDE per imparare a programmare, questo perché da quello che ho capito si comincia a dipendere da quella piattaforma (scusa se non riesco ad esprimermi meglio).
Per quanto riguarda python, lo so che è molto potente, ma il pascal mi interessa solo come introduzione, eventualmente se tutto andasse a buon fine con le conoscenze apprese comincerei a ponderare un linguaggio serio di programmazione (considerando quindi il python).
Mi serve qualcosa che mi aiuti ad imparare il linguaggio in maniera tale che possa applicarne le nozioni acquisite in una sorta di "pensiero generalizzato" sulla programmazione, ho paura che il python sia bello ma che mi dica poco sugli altri sistemi (che poi se mi sbaglio mi fa piacere, preferirei avere conoscenze + su un linguaggio utile)

k0nt3
14-07-2008, 00:01
a parte le questioni di religione tipo: questo è il migliore, questo ce l'ha più lungo ecc..
per imparare a programmare devi acquisire alcune capacità, tra cui la più importante è quella di riuscire a tramutare in algoritmi le soluzioni che hai elaborato nella tua testa per risolvere un dato problema.
tipicamente questa abilità basilare si apprende facendo uso della programmazione strutturata che sostanzialmente è lo scopo di pascal (non delphi).
per dovere di cronaca in realtà la programmazione strutturata è sempre un sottoinsieme di altri paradigmi di programmazione e nella fattispecie pascal è un linguaggio procedurale.
inoltre è bene sapere che oggi la "programmazione a oggetti" va per la maggiore ed è fondamentale conoscerla, ma è ancora meglio sapere che la programmazione strutturata è alla base anche della programmazione a oggetti.
un discorso diverso andrebbe fatto per la programmazione funzionale, ma è un modo di programmare che secondo me dovresti affrontare molto più avanti nei tuoi studi. non per motivi tecnici, ma per il semplice motivo che sono linguaggi meno usati e che stanno iniziando a emergere solo recentemente.
python contiene elementi di tutto quello di cui ho parlato fino ad ora. può essere un bene o un male, chi lo sa

Vinnie Costante
14-07-2008, 01:00
L'è dura davero :D
Fra le poche cose che ho capito:
-Per iniziare è meglio python che java (programmazione a oggetti)
-E' meglio glissare il c/c++ almeno all'inizio.
-Sarebbe meglio leggere prima un libro sui fondamenti della programmazione (non ho trovato niente sulla rete a riguardo però, mi puoi aiutare?)

Per ora credo che mi terrò ancora sul pascal e domani penso un python.
Continuo a cercare. accetto piacevolmente nuovi consigli/pareri.

cdimauro
14-07-2008, 08:03
Sto cercando di informarmi tantissimo prima di iniziare e leggevo che si sconsiglia vivamente l'uso di qualsiasi IDE per imparare a programmare, questo perché da quello che ho capito si comincia a dipendere da quella piattaforma (scusa se non riesco ad esprimermi meglio).
Queste sono le leggende metropolitane che tirano fuori gli incompetenti, o quelli che ancora oggi si ostinano a ignorare gli IDE e utilizzano gli editor di testo che andavano di moda 40 anni fa per sviluppare codice.

Non farti abbindolare: certa gente continuerà a risolvere i problemi con la clava anche se a disposizione c'è il bisturi del chirurgo...
Per quanto riguarda python, lo so che è molto potente, ma il pascal mi interessa solo come introduzione, eventualmente se tutto andasse a buon fine con le conoscenze apprese comincerei a ponderare un linguaggio serio di programmazione (considerando quindi il python).
Premetto che il Pascal è tanto serio quanto Python (e, dopo Python, è il mio linguaggio preferito), ti assicuro che se vuoi imparare a programmare non c'è niente di meglio di Python al momento. :cool:
Mi serve qualcosa che mi aiuti ad imparare il linguaggio in maniera tale che possa applicarne le nozioni acquisite in una sorta di "pensiero generalizzato" sulla programmazione, ho paura che il python sia bello ma che mi dica poco sugli altri sistemi (che poi se mi sbaglio mi fa piacere, preferirei avere conoscenze + su un linguaggio utile)
Con Python ti formi la mentalità del programmatore molto più velocemente rispetto ad altri linguaggi, e con mooolti meno pensieri.

Poi, quando ti sarai fatto le ossa, potrai anche far uso di concetti molto avanzati che incontrerai in altri linguaggi che non possono fare a meno di essi (ma io, in 3 anni e mezzo, non ho MAI avuto bisogno di arrivare a farmi del male :D).
a parte le questioni di religione tipo: questo è il migliore, questo ce l'ha più lungo ecc..
per imparare a programmare devi acquisire alcune capacità, tra cui la più importante è quella di riuscire a tramutare in algoritmi le soluzioni che hai elaborato nella tua testa per risolvere un dato problema.
tipicamente questa abilità basilare si apprende facendo uso della programmazione strutturata che sostanzialmente è lo scopo di pascal (non delphi).
Falso. Non confondiamo i concetti basilari con la programmazione strutturata.
per dovere di cronaca in realtà la programmazione strutturata è sempre un sottoinsieme di altri paradigmi di programmazione e nella fattispecie pascal è un linguaggio procedurale.
inoltre è bene sapere che oggi la "programmazione a oggetti" va per la maggiore ed è fondamentale conoscerla, ma è ancora meglio sapere che la programmazione strutturata è alla base anche della programmazione a oggetti.
Falso anche questo: con la programmazione a oggetti puoi benissimo fare a meno di quella strutturata.

Un esempio su tutti: SmallTalk.
un discorso diverso andrebbe fatto per la programmazione funzionale, ma è un modo di programmare che secondo me dovresti affrontare molto più avanti nei tuoi studi. non per motivi tecnici, ma per il semplice motivo che sono linguaggi meno usati e che stanno iniziando a emergere solo recentemente.
Veramente i linguaggi funzionali sono fra i più antichi in assoluto. Il LISP, ad esempio, è stato di poco posteriore al FORTRAN.
python contiene elementi di tutto quello di cui ho parlato fino ad ora. può essere un bene o un male, chi lo sa
E' un bene. Anzi, è un bene assoluto. :D
L'è dura davero :D
Fra le poche cose che ho capito:
-Per iniziare è meglio python che java (programmazione a oggetti)
Diciamo che per iniziare è sempre meglio Python, a prescindere dagli altri linguaggi.
-E' meglio glissare il c/c++ almeno all'inizio.
Se puoi, fanne a meno sempre. Io sviluppo in Python da 3 anni e mezzo non sento assolutamente la mancanza di tornare a lavorare con linguaggi come C, C++, assembly, linguaggio macchina, ecc. ecc. Tutt'altro.
-Sarebbe meglio leggere prima un libro sui fondamenti della programmazione (non ho trovato niente sulla rete a riguardo però, mi puoi aiutare?)
Il libro che ti ho indicato è completo: ti aiuterà anche in questo. Anzi, è fatto proprio apposta per iniziare da zero. :)
Per ora credo che mi terrò ancora sul pascal e domani penso un python.
Continuo a consigliarti Python, per quello che devi fare (ma anche per MOLTO altro).

Fattelo dire da uno che ha lavorato con Pascal & derivati per più di vent'anni, e di cui nutre ancora profonda stima e ammirazione.
Continuo a cercare. accetto piacevolmente nuovi consigli/pareri.
Speriamo siano serviti. :)

k0nt3
14-07-2008, 09:30
...

sulla faccenda IDE sono daccordo che all'inizio sono inutili e servono solo a confondere le idee. è più importante concentrarsi sulla programmazione, non sugli strumenti correlati.

sul fatto che i concetti basilari non sono la programmazione strutturata... ma hai letto la guida che tu stesso hai linkato su python? fino al capitolo 6 (se non anche oltre) sostanzialmente insegna la programmazione strutturata.

sul fatto che la programmazione a oggetti non ha bisogno di quella strutturata... non diciamo fesserie, parlavo di programmazione a oggetti usata in pratica, non smalltalk.

sul fatto che i linguaggi funzionali sono più antichi: non ho capito cosa c'entra con quello che ho detto.

sul fatto che python ce l'ha più lungo: no comment
non ho tempo per il solito flame

k0nt3
14-07-2008, 09:41
se ti interessa una base teorica indipendente dal linguaggio qui c'è un buon pdf sulla programmazione strutturata http://elite.polito.it/courses/06azn/lucidi/p01-algoritmi.pdf

Vinnie Costante
14-07-2008, 13:14
La confusione è grossa :D, facciamo che comincio dal libro che mi ha passato kont e poi vediamo se cambio idea :P
(ho guardato il tuo libro per python, solo in prefazione però, e sembra molto buono, sicuramente lo tengo presente!)

variabilepippo
14-07-2008, 13:18
Se sei orientato verso il Pascal segui il consiglio di cdimauro ed usa Turbo Delphi al posto di Lazarus&Co.

Pur essendo cresciuto a pane&Pascal anch'io ti consiglio Python per iniziare.

cdimauro
14-07-2008, 13:19
sulla faccenda IDE sono daccordo che all'inizio sono inutili e servono solo a confondere le idee. è più importante concentrarsi sulla programmazione, non sugli strumenti correlati.
Indubbiamente. Per questo non serve né un IDE né un editor: basta lanciare Python e lavorare con la shell interativa.

E la produttività s'impenna...

http://maidirevideo.files.wordpress.com/2007/05/carcarlo-pravettoni.jpg
sul fatto che i concetti basilari non sono la programmazione strutturata... ma hai letto la guida che tu stesso hai linkato su python? fino al capitolo 6 (se non anche oltre) sostanzialmente insegna la programmazione strutturata.
E' nel capitolo 6 che si parla sostanzialmente di programmazione strutturata. Fino al 5 ci sono concetti basilari, e soltanto in mezzo al 4 c'è un accenno di programmazione strutturata.
sul fatto che la programmazione a oggetti non ha bisogno di quella strutturata... non diciamo fesserie, parlavo di programmazione a oggetti usata in pratica, non smalltalk.
Guardo che lo smalltalk non è un linguaggio morto.
sul fatto che i linguaggi funzionali sono più antichi: non ho capito cosa c'entra con quello che ho detto.
Semplicemente perché hai scritto questo:

sono linguaggi meno usati e che stanno iniziando a emergere solo recentemente

e questo è falso perché sono fra i più antichi e usati linguaggi.
sul fatto che python ce l'ha più lungo: no comment
non ho tempo per il solito flame
Anche perché perderesti sicuramente: si sa che il pitone ce l'ha più lungo. :cool:

k0nt3
14-07-2008, 13:38
mi pareva di essere stato chiaro l'altra volta: non esistono verità assolute
e tu continui a dire che meglio di python non c'è niente.. crei solo confusione, uno che vuole imparare a programmare va assecondato e basta.

@Vinnie Costante
quello che ho linkato non è un vero e proprio libro, comunque gli argomenti teorici di base della programmazione sono quelli. se qualcosa ti risulta poco chiaro si può cercare qualcosa di più specifico.

ps. certo smalltalk non è mai morto, solo che non lo usa nessuno
pps. ho detto che i linguaggi funzionali stanno emergendo recentemente, non che sono stati inventati recentemente ( http://www.demauroparavia.it/38510 ) e quello che ho detto è vero

cdimauro
14-07-2008, 14:01
mi pareva di essere stato chiaro l'altra volta: non esistono verità assolute
Esistono, esistono. Non staremmo qui a scrivere altrimenti (qui però andremmo sul filosofico :D). :cool:
e tu continui a dire che meglio di python non c'è niente..
Perché... è vero. :D
crei solo confusione, uno che vuole imparare a programmare va assecondato e basta.
Fammi capire: se il Kraken, ehm, il mio figlioletto vuole mettere la mano sul forno acceso, io dovrei assecondarlo e basta, giusto?

Così si ritrova le manine con delle pustole enormi e le corde vocali impegnate a emanare onde ad alta frequenza e volume smisurato per la gioia di condominio e dintorni.

Io preferisco, invece, educarlo (nell'accezione originale e concreta della parola, ossia CONDURLO) e, quindi, indicargli una via da seguire.

Poi se al momento ha poco effetto perché non è in grado di recepire pienamente questi consigli, è un altro discorso, e capiterà che mi troverò a desiderare ardentemente un paio di tappi per le orecchie perché non sono stato abbastanza veloce da bloccare la sua formidabile corsa verso quel "bellissimo giocattolo che usano i grandi" (tradotto per i grandi: il forno).
@Vinnie Costante
quello che ho linkato non è un vero e proprio libro, comunque gli argomenti teorici di base della programmazione sono quelli. se qualcosa ti risulta poco chiaro si può cercare qualcosa di più specifico.
Gli argomenti teorici di base li trova nel libro di cui ho postato il link. E più avanti NON troverà sicuramente tutte le rogne a cui andrà incontro con linguaggi come C, C++, Pascal, ecc.
ps. certo smalltalk non è mai morto, solo che non lo usa nessuno
Infatti è noto che le società che ne COMMERCIALIZZANO delle versioni sono andate fallite da un pezzo...
pps. ho detto che i linguaggi funzionali stanno emergendo recentemente, non che sono stati inventati recentemente ( http://www.demauroparavia.it/38510 ) e quello che ho detto è vero
E' falso perché sono emersi già EONI fa, sono stati AMPIAMENTE usati (in alcuni ambiti non sono mai stati abbandonati), e soltanto di recente hanno avuto una "seconda giovinezza" con nuovi linguaggi funzionali che sono arrivati, oppure con alcuni concetti che sono stati assimilati da altri linguaggi. :read: :O

k0nt3
14-07-2008, 14:11
Infatti è noto che le società che ne COMMERCIALIZZANO delle versioni sono andate fallite da un pezzo...

almeno quanto è noto che smalltalk non è un linguaggio diffuso

E' falso perché sono emersi già EONI fa, sono stati AMPIAMENTE usati (in alcuni ambiti non sono mai stati abbandonati), e soltanto di recente hanno avuto una "seconda giovinezza" con nuovi linguaggi funzionali che sono arrivati, oppure con alcuni concetti che sono stati assimilati da altri linguaggi. :read: :O
non sono emersi eoni fa, perchè nonostante esistessero questi linguaggi sono sempre stati usati solo in settori di nicchia. solo recentemente stanno emergendo

cdimauro
14-07-2008, 14:23
almeno quanto è noto che smalltalk non è un linguaggio diffuso
Questo sicuramente, ma non è affatto morto. Anzi, con linguaggi come Ruby che ne hanno "importato" alcune caratteristiche, è stato un po' rispolverato (lo stesso vale per i linguaggi funzionali).
non sono emersi eoni fa, perchè nonostante esistessero questi linguaggi sono sempre stati usati solo in settori di nicchia. solo recentemente stanno emergendo
Anche il FORTRAN è stato relegato a settori di nicchia, ma è sopravvissuto finora. Idem per tanti altri linguaggi (purtroppo il C è duro a morire, ma spero che almeno venga relegato alle briciole della programmazione :D). ;)

malocchio
14-07-2008, 14:27
Sentite, un linguaggio vale l'altro.

Se non è stupido, imparerà, che sia Java, Python o Pascal.
Io personalmente ho iniziato a scuola con Pascal, perché non ha niente di complicato. Non posso dire niente sul Python perché non l'ho né mai visto né mai provato...

Ancora non ho capito perché vuoi imparare a programmare.. per sfizio, curiosità.. cosa? Cmq non penso ti serva la programmazione ad oggetti che per un "novizio?" è assolutamente astrusa secondo me.

Se vuoi usare Pascal ti posso consigliare di usare Bloodshed Dev-Pascal: un editor di testo con evidenziazione sintassi e 2 pulsanti: compila ed esegui. Non ti serve altro secondo me.


I consigli sono consigli. Per cui non cerchiamo di imporre le nostre idee (non mi riferisco a nessuno in particolare). Tu fai quello che ti va più a genio.

BUONA PROGRAMMAZIONE;)

cdimauro
14-07-2008, 14:40
Sentite, un linguaggio vale l'altro.

Se non è stupido, imparerà, che sia Java, Python o Pascal.
In questo caso, visto che un linguaggio vale l'altro, propongo il linguaggio macchina (per Intel Itanium). :D
Io personalmente ho iniziato a scuola con Pascal, perché non ha niente di complicato. Non posso dire niente sul Python perché non l'ho né mai visto né mai provato...
Allora provalo: vedrai che non te ne pentirai. :cool:
Ancora non ho capito perché vuoi imparare a programmare.. per sfizio, curiosità.. cosa? Cmq non penso ti serva la programmazione ad oggetti che per un "novizio?" è assolutamente astrusa secondo me.
Bisogna vedere come viene spiegata. :cool:
Se vuoi usare Pascal ti posso consigliare di usare Bloodshed Dev-Pascal: un editor di testo con evidenziazione sintassi e 2 pulsanti: compila ed esegui. Non ti serve altro secondo me.
Guarda, non c'è IDE che tenga: Turbo Delphi è il non plus ultra per Pascal & affini.
I consigli sono consigli. Per cui non cerchiamo di imporre le nostre idee (non mi riferisco a nessuno in particolare). Tu fai quello che ti va più a genio.

BUONA PROGRAMMAZIONE;)
Speriamo scelga bene. Ne va della sua sanità mentale (questo giusto per non imporre nessuna idea :p).

malocchio
14-07-2008, 14:51
In questo caso, visto che un linguaggio vale l'altro, propongo il linguaggio macchina (per Intel Itanium). :D

Allora provalo: vedrai che non te ne pentirai. :cool:

Bisogna vedere come viene spiegata. :cool:

Guarda, non c'è IDE che tenga: Turbo Delphi è il non plus ultra per Pascal & affini.

Speriamo scelga bene. Ne va della sua sanità mentale (questo giusto per non imporre nessuna idea :p).

Non voglio offenderti, ma se continui così mi fai venire l'angoscia. L'umiltà non fa mai male.

Speriamo che vinnie costante si decida.

astorcas
14-07-2008, 14:58
cdimauro, non credi che la compilazione sia uno step importante per un programmatore? Una cosa che mi angoscia di python è che è pseudo-compilato! :D

Per il resto ammetto che la curva di apprendimento è praticamente piatta ;)

cdimauro
14-07-2008, 15:01
Non voglio offenderti, ma se continui così mi fai venire l'angoscia. L'umiltà non fa mai male.

Speriamo che vinnie costante si decida.
L'umiltà sta nell'accettare i consigli di chi ha accumulato parecchia esperienza in materia e che non ha difficoltà ad argomentare sul perché sia meglio iniziare con certi linguaggi di programmazione piuttosto che altri.

Perché i linguaggi di programmazione sono diversi (altrimenti non ne esisterebbe una così ampia varietà), e l'esperienza non può quindi essere la stessa.

Altrimenti, come dicevo prima, visto che non ci sono differenze consigliamogli pure di particore col linguaggio macchina, ma sono sicuro che gli basteranno pochi minuti per realizzare che è meglio abbandonare del tutto la programmazione. ;)

cdimauro
14-07-2008, 15:02
cdimauro, non credi che la compilazione sia uno step importante per un programmatore?
No. Interpretazione, compilazione intermedia, compilazione completa, ecc. sono soltanto aspetti di particolari implementazioni di un linguaggio.
Una cosa che mi angoscia di python è che è pseudo-compilato! :D
Diciamo che l'implementazione più diffusa è compilata in bytecode, similmente a Java, ma non mancano implementazioni dotate di JIT compiler. :)
Per il resto ammetto che la curva di apprendimento è praticamente piatta ;)
Già. Proprio per questo insisto. :)

malocchio
14-07-2008, 15:37
L'umiltà sta nell'accettare i consigli di chi ha accumulato parecchia esperienza in materia e che non ha difficoltà ad argomentare sul perché sia meglio iniziare con certi linguaggi di programmazione piuttosto che altri.

Perché i linguaggi di programmazione sono diversi (altrimenti non ne esisterebbe una così ampia varietà), e l'esperienza non può quindi essere la stessa.

Altrimenti, come dicevo prima, visto che non ci sono differenze consigliamogli pure di particore col linguaggio macchina, ma sono sicuro che gli basteranno pochi minuti per realizzare che è meglio abbandonare del tutto la programmazione. ;)

Non sto consigliando niente... Ho solo dato la mia esperienza.

Non dico che Python sia meno adatto di Pascal, solo che io mi sono trovato bene.

Ripeto è lui che sceglie.

PS. smettila con sta storia dell'assembly. Sai benissimo che mi riferivo a linguaggi "tradizionali".

Se proprio vogliamo continuare la pantomima mandami un pm, non sporchiamo questo 3d ancora di più.

Vinnie Costante
14-07-2008, 16:23
Ho dato una guardata a dev-pascal ed è abbastanza sobrio, ad ogni modo quando proverò a scrivere le prime righe (se con pascal) di codice credo che lo farò con un editor di testo e il comando da prompt di dos che mi ha consigliato kont (fino ad ora mi sembra il metodo + pulito possibile).

Non vi preoccupate, non mi spavento, anzi in genere mi piace leggere le diatribe però alla fine volendo giungere ad una soluzione non sempre sono favorevoli.

La mia intenzione per ora è solo capire in maniera semplice ma non a senso unico, esclusivo (come esempio estremo mettiamo un Visual Basic).

In futuro (se ci sarà un futuro) mi interessano i videogiochi e le comunità open source (e ok, python è ancora ottimo per questo).

variabilepippo
14-07-2008, 17:15
o farò con un editor di testo e il comando da prompt di dos che mi ha consigliato kont (fino ad ora mi sembra il metodo + pulito possibile).


E quando avrai bisogno di scovare gli inevitabili bug, come farai senza un buon debugger?

^TiGeRShArK^
14-07-2008, 17:17
editor di testo e il comando da prompt di dos

:Puke:
ehmm.. non vorrei dire, ma siamo nel 2008, non nel 1988... :mbe:

k0nt3
14-07-2008, 17:31
E quando avrai bisogno di scovare gli inevitabili bug, come farai senza un buon debugger?
senza dubbio prima di debuggare il codice deve imparare a scrivere il codice. e senza dubbio dovrà usare un IDE.

comunque vedo che è abbastanza determinato, per cui mi sembra partito con il piede giusto :cool:

variabilepippo
14-07-2008, 17:53
senza dubbio prima di debuggare il codice deve imparare a scrivere il codice. e senza dubbio dovrà usare un IDE.

Il codice può scriverlo anche (e soprattutto) con un IDE ed anche (e soprattutto) i primi programmini saranno pieni di bug... Mi spieghi come potrà scovarli senza un debugger a sua disposizione? La cosa non riesce neanche a programmatori molto esperti (quindi con un "occhio" molto allenato) mi sembra impossibile che possa farlo un principiante armato soltanto di notepad e compilatore. :muro:

k0nt3
14-07-2008, 17:57
Il codice può scriverlo anche (e soprattutto) con un IDE ed anche (e soprattutto) i primi programmini saranno pieni di bug... Mi spieghi come potrà scovarli senza un debugger a sua disposizione? La cosa non riesce neanche a programmatori molto esperti (quindi con un "occhio" molto allenato) mi sembra impossibile che possa farlo un principiante armato soltanto di notepad e compilatore. :muro:
considerando che i primi programmi che scriverà saranno di 5 o 6 righe tipo (ok 5-6 è esagerato :D ma in quell'ordine di grandezza comunque) beh basta anche carta e penna per scovare i bug. io facevo esattamente così, cioè prendevo un foglio e passo per passo calcolavo i valori delle variabili.
poi ho imparato a usare il debugger e tutto è risultato molto più facile. di sicuro non è molto sensato imparare a usare il debugger prima di imparare a programmare (o meglio scrivere qualche riga di codice) però se uno ci riesce tanto di cappello

Vinnie Costante
14-07-2008, 18:07
Si i miei intenti in pascal sono nell'ordine di poche righe!
I due ide che ho provato mi han dato fastidio perché mi hanno subito tirato (come nuovo documento) delle righe di codice standard (tipo begin, end, ecc. ecc.) che anche se andranno sempre scritte preferirei non ritrovarmele già li :P
è solo una questione di ordine :P

variabilepippo
14-07-2008, 18:09
beh basta anche carta e penna per scovare i bug


Perché usare carta e penna quando ci sono strumenti appositamente pensati per individuare i bug? Se per avvitare le viti esiste l'avvitatore elettrico perché uno deve farsi venire i calli usando il cacciavite manuale o peggio ancora una forchetta?! Forse ho capito, eri tu quello che si definiva masochista, o sbaglio? :D

Io ho imparato ad usare il debugger mentre imparavo a scrivere il codice ed ho risparmiato tempo e fatica evitando il "metodo carta&penna".

Se non aveva senso farlo nel 1988, più o meno quando ho iniziato io, figuriamoci se possa averne in pieno 2008, come qualcuno ha giustamente sottolineato...


che anche se andranno sempre scritte preferirei non ritrovarmele già li :


Nessuno ti vieta di creare progetti vuoti, quindi senza le righe "standard"...

k0nt3
14-07-2008, 18:23
Perché usare carta e penna quando ci sono strumenti appositamente pensati per individuare i bug? Se per avvitare le viti esiste l'avvitatore elettrico perché uno deve farsi venire i calli usando il cacciavite manuale o peggio ancora una forchetta?! Forse ho capito, eri tu quello che si definiva masochista, o sbaglio? :D
:cool: :asd: :p

Vinnie Costante
14-07-2008, 18:29
Ma è solo un ordine logico che mi agevola a capire le cose, per esempio se voglio studiare meglio ho bisogno che la scrivania che mi sia difronte sia completamente vuota anche se magari poi il libro lo leggo sulle gambe! insomma una cosa personalissima!

continuando la tua metafora Se per avvitare le viti esiste l'avvitatore elettrico perché uno deve farsi venire i calli usando il cacciavite manuale o peggio ancora una forchetta?! però magari chi ha perso un po di tempo con il cacciavite si rende conto + facilmente di non stare spanando le viti magari prima di averne spanato 10 con l'avvitatore (cosa provata, da me XD)

gugoXX
14-07-2008, 18:58
Fra un po' arrivo con il C#.
Ora non ho tempo, vado a fare la spesa.
A frappe'.

variabilepippo
14-07-2008, 19:09
però magari chi ha perso un po di tempo con il cacciavite si rende conto + facilmente di non stare spanando le viti magari prima di averne spanato 10 con l'avvitatore (cosa provata, da me XD)


Non devo convincere nessuno del fatto che un debugger sia preferibile a carta&penna (:doh: :bsod: :doh: :ncomment:)... Se preferisci fare tutto a mano, fai pure, usa notepad e lascia stare tutte le comodità offerte dagli IDE. Io sono di un'altra parrocchia...

Vinnie Costante
14-07-2008, 19:13
Lol ma perché siete così estremisti, nessuno parla in quei termini! il debugger non è solo utile ma è indispensabile è ovvio! la mia scelta di non usare un IDE è ovviamente solo per l'inizio per non dovermi applicare allo studio di un interfaccia che è .... vabe ma è inutile che mi scemunisco :doh:
VIVA GLI IDE E VIVA I DEBUGGER XD

k0nt3
14-07-2008, 19:14
mah questi non masochisti io proprio non li capisco :boh: :O

71104
14-07-2008, 19:49
ROTFL, un'altra volta! :rotfl:

morskott
14-07-2008, 20:24
Personalmente come linguaggio mi sento di consigliare Java, usato da chi vuole imparare è estremamente facile ma nel contempo per chi ha esigenze mirate ad un'applicazione un po piu complessa si trova con un linguaggio molto potente e flessibile, utilizzabile in quasi ogni situazione (ovvio che se uno deve programmare in ambienti strict real time o ha bisogno di accedere alla sottostante specifica architettura hw (cheso, ottimizzare il codice su un'architettura x86 piuttosto che su un PPC) con Java non ci fai niente, ma non penso sia questo il caso).

Poi la sterminata documentazione ufficiale disponibile (vedi il Tutorial (http://java.sun.com/docs/books/tutorial/index.html)) unita ad un framework di classi standard molto consistente (vedi Javadoc (http://java.sun.com/javase/6/docs/api/index.html)) aiutano di certo!!!

Come IDE consiglio Netbeans (http://www.netbeans.org), ma anche Notepad++ va benissimo per un iniziante.

Ecco un'opinione di un java fan boy, come cdmauro per il python

Ma nel contempo penso altresì che se uno si impara un linguaggio di programmazione passare ad un altro non trova queste difficoltà eccessive!!

^TiGeRShArK^
14-07-2008, 20:26
ora arriva gugoxx con il C sharp e parte il flame :asd:
cmq java è rimasto troppo indietro..
se non si sbrigano a fare uscire la versione 7 con le closures e qualcosa di equivalente al linq saranno dolori....

morskott
14-07-2008, 20:32
ora arriva gugoxx con il C sharp e parte il flame :asd:
cmq java è rimasto troppo indietro..
se non si sbrigano a fare uscire la versione 7 con le closures e qualcosa di equivalente al linq saranno dolori....

Per quel che ho visto anche il C# è un gran bel linguaggio, ho consigliato Java al posto del C# solo per la mia maggiore familiarità con esso, ma per l'occhiata che ci ho dato sono quasi equivalenti.

Le closures per quel che ho letto su wikipedia non sono tipo le classi interne alle funzioni?
Del tipopublic void foo(){
StringBuffer b=new StringBuffer("ciao");
class A{
StringBuffer sb;
A(StringBuffer s){sb=s;}

void foo2(){s.append(" mario");}
}
A a=new A();
a.foo2();
}naturalmente la classe A puo accedere a variabili interne alla funzione foo tramite passaggio di parametri nel costruttore (tipo lo StringBuffer), o sbaglio?

^TiGeRShArK^
14-07-2008, 20:35
Per quel che ho visto anche il C# è un gran bel linguaggio, ho consigliato Java al posto del C# solo per la mia maggiore familiarità con esso, ma per l'occhiata che ci ho dato sono quasi equivalenti.

java 6 è pressappoco equivalente al C# 2.0.
Ma imho da quando è stata introdotta la parte funzionale e linq in C# 3.0, ora il C# sta una spanna sopra....
O quanto meno io mi sono trovato MOLTO meglio a scrivere codice che in java o in C# 2.0 sarebe risultato assai + complesso :p

morskott
14-07-2008, 20:40
java 6 è pressappoco equivalente al C# 2.0.
Ma imho da quando è stata introdotta la parte funzionale e linq in C# 3.0, ora il C# sta una spanna sopra....
O quanto meno io mi sono trovato MOLTO meglio a scrivere codice che in java o in C# 2.0 sarebe risultato assai + complesso :p

Mi dai qualche link su questi altri 2 aspetti? (google è offline :O )

k0nt3
14-07-2008, 20:43
secondo me java non deve diventare un clone di C#, il suo successo lo deve proprio alla sua identità. per programmare in maniera funzionale c'è scala che per certi versi è innovativo, poi java e scala possono interagire molto facilmente (aspetto solo un plugin decente per eclipse :fagiano: )

^TiGeRShArK^
14-07-2008, 21:02
Mi dai qualche link su questi altri 2 aspetti? (google è offline :O )
non è offline google:mbe:
http://en.wikipedia.org/wiki/Language_Integrated_Query
wikipedia da una introduzione generale a linq ed accenna qualcosina su plinq (cosa che non esiste nè in java nè in scala e che permette di sfruttare tutte i core presenti sul sistema semplicemente aggiungendo una chiamata al metodo .asParallels() ).
questo invece è un ottimo tutorial sulla programmazione funzionale in c#:
http://blogs.msdn.com/ericwhite/pages/FP-Tutorial.aspx

Vinnie Costante
14-07-2008, 22:06
Alla fine ho guardato bene questi lucidi http://elite.polito.it/courses/06azn/lucidi/p01-algoritmi.pdf , sono utili però un po troppo stringati, devo cercare qualcosa di + discorsivo :D

morskott
14-07-2008, 22:07
non è offline google:mbe:


Ovviamente no, la mia era una battuta per dire che avevo zero voglia di cercare :D

^TiGeRShArK^
14-07-2008, 22:20
Ovviamente no, la mia era una battuta per dire che avevo zero voglia di cercare :D

ma vaff... :Prrr:

cdimauro
15-07-2008, 07:45
Non sto consigliando niente... Ho solo dato la mia esperienza.
Idem.
Non dico che Python sia meno adatto di Pascal, solo che io mi sono trovato bene.
Idem con entrambi, meglio col primo.
Ripeto è lui che sceglie.
E infine ha scelto, appunto. Nessuno gli ha puntato la pistola alla testa.
PS. smettila con sta storia dell'assembly. Sai benissimo che mi riferivo a linguaggi "tradizionali".
L'assembly è un linguaggio tradizionale, e comunque io avevo consigliato il linguaggio macchina.
Se proprio vogliamo continuare la pantomima mandami un pm, non sporchiamo questo 3d ancora di più.
Potevi dare il buon esempio e cominciare tu rispondendomi via PVT.

Inutile fare la vittima e pretendere poi di continuare in privato...
Lol ma perché siete così estremisti, nessuno parla in quei termini! il debugger non è solo utile ma è indispensabile è ovvio! la mia scelta di non usare un IDE è ovviamente solo per l'inizio per non dovermi applicare allo studio di un interfaccia che è .... vabe ma è inutile che mi scemunisco :doh:
VIVA GLI IDE E VIVA I DEBUGGER XD
Il debugger è il MALE. (c) fek :p

http://en.wikipedia.org/wiki/Test-driven_development :cool:
Personalmente come linguaggio mi sento di consigliare Java, usato da chi vuole imparare è estremamente facile ma nel contempo per chi ha esigenze mirate ad un'applicazione un po piu complessa si trova con un linguaggio molto potente e flessibile, utilizzabile in quasi ogni situazione (ovvio che se uno deve programmare in ambienti strict real time o ha bisogno di accedere alla sottostante specifica architettura hw (cheso, ottimizzare il codice su un'architettura x86 piuttosto che su un PPC) con Java non ci fai niente, ma non penso sia questo il caso).
Python è ancora più facile da imparare.
Poi la sterminata documentazione ufficiale disponibile (vedi il Tutorial (http://java.sun.com/docs/books/tutorial/index.html)) unita ad un framework di classi standard molto consistente (vedi Javadoc (http://java.sun.com/javase/6/docs/api/index.html)) aiutano di certo!!!
Indubbiamente. Per Java in genere si trova un'ottima documentazione.
Come IDE consiglio Netbeans (http://www.netbeans.org), ma anche Notepad++ va benissimo per un iniziante.
Per lavorare con Java preferisco Eclipse.

Al limite come editor tradizionale opto per PSPadPro.
Ecco un'opinione di un java fan boy, come cdmauro per il python
Non sono un fanboy: i fanboy non argomentano, e soprattutto non sono disposti a cambiare idea nemmeno se gli dimostri che hanno torto.
Ma nel contempo penso altresì che se uno si impara un linguaggio di programmazione passare ad un altro non trova queste difficoltà eccessive!!
Dipende dal tipo di linguaggio a cui passerà.

Sempre meglio iniziare con un linguaggio semplice che permetta di focalizzarsi sulle basi della programmazione.
ora arriva gugoxx con il C sharp e parte il flame :asd:
cmq java è rimasto troppo indietro..
se non si sbrigano a fare uscire la versione 7 con le closures e qualcosa di equivalente al linq saranno dolori....
Le closure sono le funzioni anonime?

Comunque, a forza di inseguire C#, Java sta diventando una porcata come linguaggio. Forse aveva ragione il buon PGI-Bis...

gugoXX
15-07-2008, 08:11
Sai cosa penso oramai su questo argomento?
Per inziare secondo me va bene un qualsiasi linguaggio decente.
Java, C#, Python, C++, etc.

Decente significa usato in modo commerciale oggi. Non per niente il C lo si usa oramai solo per prodotti di nicchia dove non se ne puo' fare a meno.
Pascal sinceramente l'ho incontrato solo alle superiori, pertanto non sono in grado di formulare giuidizi. A parte una breve parentesi di 4-5 mesi nel 2001 quando dovetti imparare e usare il Delphi per lavoro, non ho mai piu' toccato nulla di simile.
Parentesi, allora sembrava che il Delphi fosse il linguaggio del futuro. Si parlava solo di quello, sembrava dover diventare il nuovo unico vero linguaggio. Come mai si e' arginato o quantomeno e' rallentato?

Comunque, come dicevo 2-3 mesi fa io sono dell'idea che il Goto lo si debba conoscere, per apprezzarne i difetti e per giustificarne l'assenza. Questo solo perche' la traduzione dei primi flow-chart in un programma prevede l'uso del goto, e mi piacerebbe pensare che almeno all'inizio un paio di diagrammi di flusso li si studi, giusto per imparare.

Un buon sviluppatore riuscira' poi ad imparare un linguaggio nuovo in una settimana, ed in un mese lo possiedera' al punto da poterlo usare efficacemente.

shinya
15-07-2008, 08:17
Comunque, a forza di inseguire C#, Java sta diventando una porcata come linguaggio. Forse aveva ragione il buon PGI-Bis...

"Java was, as Gosling says in the first Java white paper, designed for average programmers. It's a perfectly legitimate goal to design a language for average programmers. (Or for that matter for small children, like Logo.) But it is also a legitimate, and very different, goal to design a language for good programmers."
Paul Graham

^TiGeRShArK^
15-07-2008, 12:14
Le closure sono le funzioni anonime?

Comunque, a forza di inseguire C#, Java sta diventando una porcata come linguaggio. Forse aveva ragione il buon PGI-Bis...
Yes.
http://gafter.blogspot.com/2006/08/closures-for-java.html
Comunque dipende anche come viene introdotto il supporto.
In C# hanno fatto imho un ottimo lavoro, in java, per il poco che ho visto, non mi piace molto come implementazione....

cdimauro
15-07-2008, 13:58
Sai cosa penso oramai su questo argomento?
Per inziare secondo me va bene un qualsiasi linguaggio decente.
Java, C#, Python, C++, etc.
Non sono d'accordo: è un tantino diverso lavorare con Python rispetto agli altri linguaggi. Hai molti meno pensieri ed è molto più semplice scrivere il codice.

Di esempi in passato ne abbiamo fatti (ricordi la famosa CPUID?). ;)

Con Python sono abituato a concentrarmi soltanto sul problema, perché generalmente non mi devo curare di dettagli che in altri linguaggi non sono tali, ma elementi fondamentali.
Decente significa usato in modo commerciale oggi. Non per niente il C lo si usa oramai solo per prodotti di nicchia dove non se ne puo' fare a meno.
Purtroppo...
Pascal sinceramente l'ho incontrato solo alle superiori, pertanto non sono in grado di formulare giuidizi. A parte una breve parentesi di 4-5 mesi nel 2001 quando dovetti imparare e usare il Delphi per lavoro, non ho mai piu' toccato nulla di simile.
Parentesi, allora sembrava che il Delphi fosse il linguaggio del futuro. Si parlava solo di quello, sembrava dover diventare il nuovo unico vero linguaggio. Come mai si e' arginato o quantomeno e' rallentato?
Purtroppo con l'avvento delle versioni Express di MS ha avuto una bella botta, e Borland l'ha capito troppo tardi IMHO (soltanto dopo un bel po' sono arrivate le versioni "Turbo" gratuite).

Aggiungiamoci anche il fatto che le versioni Turbo hanno delle limitazioni che come sviluppatore trovo troppo pesanti quando devo uscire dalla fase di "gioco" e realizzare un progetto concreto (mi riferisco all'impossibilità di installare componenti esterni). Aggiungiamo il supporto a .NET che è stato ed è in ritardo, e il quandro è completo.

E' un vero peccato perché ancora oggi ritengo Delphi il miglior RAD in circolazione.
Comunque, come dicevo 2-3 mesi fa io sono dell'idea che il Goto lo si debba conoscere, per apprezzarne i difetti e per giustificarne l'assenza. Questo solo perche' la traduzione dei primi flow-chart in un programma prevede l'uso del goto, e mi piacerebbe pensare che almeno all'inizio un paio di diagrammi di flusso li si studi, giusto per imparare.
Questo perché i flow chart sono troppo legati alla programmazione strutturata.

Esistono linguaggi in cui il goto non è stato inserito nella sintassi del lingaggio di proposito, proprio per evitarne l'uso. Il GOTO non serve, ed esistono costrutti di alto livello che permettono tranquillamente, e senza alcun rimpianto, di farne a meno.
Un buon sviluppatore riuscira' poi ad imparare un linguaggio nuovo in una settimana, ed in un mese lo possiedera' al punto da poterlo usare efficacemente.
Su questo sono sostanzialmente d'accordo. Il problema, al solito, è diventare un buon programmatore. :p
"Java was, as Gosling says in the first Java white paper, designed for average programmers. It's a perfectly legitimate goal to design a language for average programmers. (Or for that matter for small children, like Logo.) But it is also a legitimate, and very different, goal to design a language for good programmers."
Paul Graham
Certamente, ma bisogna vedere come viene esteso...
Yes.
http://gafter.blogspot.com/2006/08/closures-for-java.html
Comunque dipende anche come viene introdotto il supporto.
In C# hanno fatto imho un ottimo lavoro, in java, per il poco che ho visto, non mi piace molto come implementazione....
GLOM. Sempre peggio. Prendono concetti a destra e a manca, complicando sempre più la sintassi.

Addirittura la "short form" è quasi presa in prestito da Python:
int(int) plus2b = (int x) : x+2;
plus2b = lambda x: x + 2

k0nt3
15-07-2008, 14:06
la sintassi che hanno in mente per le chiusure comunque non è quella postata da ^TiGeRShArK^
quello è un articolo molto vecchio
qui c'è qualche idea più recente http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html
ma ancora niente di ufficiale

^TiGeRShArK^
15-07-2008, 14:28
ah, meno male..
questa è già un pò + decente....

banryu79
15-07-2008, 15:10
Non so, introdurre le closure in Java non mi sembra male tutto sommato.
Potrebbe sembrare poco OOP, lo ammetto, ma potrebbe anche essere un ottimo strumento in più durante il refactoring del codice.

Mi spiace solo che, usando una closure, dietro le quinte sia neccessaria la definizione di una classe astratta che definisce l'unico metodo + la definizione di un'altra classe, quella anonima che implementa quella astratta + l'istanziazione di un oggetto.
Probabilmente è il meglio o quanto di più vicino al meglio si potesse fare.
Sono contento invece che abbiano migliorato la faccenda rispetto a quanto ho letto nel link precedente.

Però a questo punto penso che se proprio ho bisogno di un meccanismo del genere utilizzo un altro linguaggio che lo implementa fin dalla sua nascita.
Mi sembra che così Java perda un po' della sua identità (mi sembra che si stia prostituendo lo spirito del linguaggio).

gugoXX
15-07-2008, 15:24
Non sono d'accordo: è un tantino diverso lavorare con Python rispetto agli altri linguaggi. Hai molti meno pensieri ed è molto più semplice scrivere il codice.

Di esempi in passato ne abbiamo fatti (ricordi la famosa CPUID?). ;)


Beh, mi ricordo che in Python per avere i risultati della CPUID hai dovuto usare una libreria esterna, soluzione non meno nobile (e neppure diversa) di cosa ho fatto io. Non trovando una l;ibreria esterna su cui appoggiarmi (non cercando a dir la verita') ho costruito una libreria esterna in C++ e poi l'ho usata in C#. Sbaglio?

Sul fatto che sia piu' semplice e si abbiano meno pensieri in Python rispetto al C# resto non d'accordo. Rispetto ad altri linguaggi non lo metto in dubbio, cosa che sostengo peraltro anche per il C#.

Sull'idea del goto. Secondo me iniziare con il paradigma procedurale e' piu' semplice, soprattutto se non si hanno grosse basi matematiche o logiche, come puo' essere la situazione di un quindicenne.
E' una sensazione, ma se quando iniziai io, ovvero in prima media 25 anni fa (sigh), ci fossero stati solo paradigmi funzionali non so come l'avrei presa.
Almeno ho la scusa che allora c'erano solo Goto e Gosub. Mica si poteva fare tanto altro... e le cose funzionavano lo stesso.
Ma ovviamente non appena ho visto il primi cicli for, while & C. ho gettato Goto dalla finestra e non l'ho mai piu' usato. Ma so perfettamente perche'.
Ora, non dico di passare 3 anni sul goto nel 2008, ma almeno un paio di settimane insieme ai diagrammi di flusso secondo me non fa male.

shinya
15-07-2008, 15:28
Non so, introdurre le closure in Java non mi sembra male tutto sommato.
Potrebbe sembrare poco OOP,

Perchè? Java è un linguaggio ad oggetti? Io sapevo fosse "un pò" ad oggetti.


Però a questo punto penso che se proprio ho bisogno di un meccanismo del genere utilizzo un altro linguaggio che lo implementa fin dalla sua nascita.
Mi sembra che così Java perda un po' della sua identità (mi sembra che si stia prostituendo lo spirito del linguaggio).

Mi sembrava di aver letto da qualche parte che ci fu una diatriba prima della release "ufficiale", dove un certo tizio argomentava per infilare closure e generics già nella prima versione del linguaggio. E invece Gosling non voleva, per motivi principalmente commerciali. Maledetto! Voglio l'operator overloading, le closure e i generic a runtime, Gosling!! Dammeli!

Per quanto riguarda lo spirito di java, non è che sia mai stato cosi puro secondo me...anche se si prostituisce un pò, chissenefrega.

k0nt3
15-07-2008, 15:35
@shinya
che piaccia o no Java ha incarnato la programmazione a oggetti moderna senza compromessi. non quella di smalltalk&Co, ma quella che ha definitivamente attirato le masse di programmatori.
ora se riescono a fare un bel lavoro con le chiusure (ergo omogenee con la sintassi esistente e con una semantica traducibile in oggetti) alla fine è giusto che le inseriscano nel linguaggio.. ci si deve evolvere.

shinya
15-07-2008, 15:42
@shinya
che piaccia o no Java ha incarnato la programmazione a oggetti moderna senza compromessi. non quella di smalltalk&Co, ma quella che ha definitivamente attirato le masse di programmatori.
ora se riescono a fare un bel lavoro con le chiusure (ergo omogenee con la sintassi esistente e con una semantica traducibile in oggetti) alla fine è giusto che le inseriscano nel linguaggio.. ci si deve evolvere.

La mia era una battuta. Quella sul "un pò ad oggetti" dico.

Per il resto guarda, sfondi una porta aperta. Ti dico che voglio anche l'operator overloading e i generics a runtime, oltre alle closure! Vorrei anche strumenti per modellare il linguaggio come dico io, tipo macro in lisp.
Vorrei anche la tail-call optimization a livello di jvm.

Vorrei tutte quelle cose che Gosling ha omesso dal linguaggio perchè pensava che io fossi un cattivo programmatore e ne potessi abusare. Io continuo a pensare di essere un pessimo programmatore, ma a Gosling e soci non deve fregare niente!

k0nt3
15-07-2008, 15:43
Vorrei tutte quelle cose che Gosling ha omesso dal linguaggio perchè pensava che io fossi un cattivo programmatore e ne potessi abusare. Io continuo a pensare di essere un pessimo programmatore, ma a Gosling e soci non deve fregare niente!
beh ma a conti fatti ha avuto ragione lui :p

ps. io sono daccordo con lui, se si può evitare (usando il linguaggio) di fare porcherie è meglio per tutti. perchè l'uomo tende a fare più porcherie possibili :asd: (vedi C++ ecc.. )

shinya
15-07-2008, 15:44
beh ma a conti fatti ha avuto ragione lui :p

ps. io sono daccordo con lui, se si può evitare nel linguaggio di fare porcherie è meglio per tutti. perchè l'uomo tente a fare più porcherie possibili :asd:

Ha avuto ragione il reparto marketing di Sun.

banryu79
15-07-2008, 16:30
Vorrei tutte quelle cose che Gosling ha omesso dal linguaggio perchè pensava che io fossi un cattivo programmatore e ne potessi abusare. Io continuo a pensare di essere un pessimo programmatore, ma a Gosling e soci non deve fregare niente!

Sì, su questo sono sulla tua stessa linea, forse Gosling si è fatto prendere un po' troppo la mano nel cercare di rendere il linguaggio più sicuro possibile. Probabilmente perchè quel requisito allora era sentito in modo molto forte come un'evoluzione importante, un salto in avanti rispetto ad altri linguaggi già esistenti (ricordo le comparazioni con i pitfall tra C vs C++, e poi C++ vs Java).
E magari come idea, commercialmente, vende.

Ora invece, facendo i conti con altre realtà nel frattempo affermatesi, forse non vende più come prima, e si deve correre ai ripari.


P.S.: anche in Smalltalk, tra l'altro, esiste il concetto di funzione anonima (chiamata code block) espressa come literal value (il che è un oggetto, perchè i literal values sono comunque tradotti in oggetti in Smalltalk).
La sintassi è del tipo:
[ : params | <message-expressions> ]

ad esempio:

[:x | x + 1]

il cui significato è equivalente a f(x) = x + 1

Siccome in Smalltalk ogni cosa è un oggetto, anche le closure sono oggetti (in effetti sono oggetti pure i blocchi di codice che rappresentano i corpi dei metodi delle classi).

Per cui faccio due passi indietro rispetto la mia precedente affermazione circa lo spirito poco OOP delle closure (ho sbagliato causa ignoranza, ma fortunatamente proprio ieri ho cominciato a smanettare con Squeak e dintorni).

71104
15-07-2008, 16:31
Perchè? Java è un linguaggio ad oggetti? Io sapevo fosse "un pò" ad oggetti. perché? in Java non è possibile usare altri paradigmi di programmazione; per esempio non puoi fare programmazione procedurale perché non puoi mettere funzioni così all'aria; puoi solo creare metodi. potresti anche creare una sola classe contenente solo metodi statici, ma la semantica è diversa: per quanto faccia schifo stai ancora facendo OOP.

un linguaggio che è solo "un po'" OO invece è il C++: è OO solo a metà, per il resto è procedurale.

shinya
15-07-2008, 16:48
perché? in Java non è possibile usare altri paradigmi di programmazione; per esempio non puoi fare programmazione procedurale perché non puoi mettere funzioni così all'aria; puoi solo creare metodi. potresti anche creare una sola classe contenente solo metodi statici, ma la semantica è diversa: per quanto faccia schifo stai ancora facendo OOP.

un linguaggio che è solo "un po'" OO invece è il C++: è OO solo a metà, per il resto è procedurale.

Si ho capito, ma ripeto, era una battuta... mi riferivo al fatto che in java non tutto è un oggetto. (tipi primitivi, blocchi di codice, metodi, ecc...)

cdimauro
15-07-2008, 20:57
la sintassi che hanno in mente per le chiusure comunque non è quella postata da ^TiGeRShArK^
quello è un articolo molto vecchio
qui c'è qualche idea più recente http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html
ma ancora niente di ufficiale
ah, meno male..
questa è già un pò + decente....
Va già molto meglio, anche se:
- mi sembra una copia di C#;
- che senso ha chiamare il metodo invoke? E' una funzione, che si usino direttamente le () per invocarla, coerentemente con le funzioni, appunti;
- il fatto di mischiare istruzioni ed espressioni è anch'esso poco coerente; normalmente se voglio tornare un valore uso l'istruzione return; qui invece sembra prendere l'ultima espressione calcolata.
Mi spiace solo che, usando una closure, dietro le quinte sia neccessaria la definizione di una classe astratta che definisce l'unico metodo + la definizione di un'altra classe, quella anonima che implementa quella astratta + l'istanziazione di un oggetto.
Probabilmente è il meglio o quanto di più vicino al meglio si potesse fare.
A me pare una porcata immane se è così, oltre che uno spreco di risorse.
Sono contento invece che abbiano migliorato la faccenda rispetto a quanto ho letto nel link precedente.
Molto meglio sicuramente, ma ci sono alcuni aspetti che non mi vanno proprio giù.
Però a questo punto penso che se proprio ho bisogno di un meccanismo del genere utilizzo un altro linguaggio che lo implementa fin dalla sua nascita.
Mi sembra che così Java perda un po' della sua identità (mi sembra che si stia prostituendo lo spirito del linguaggio).
La penso come te. Per lo meno per le soluzioni che stanno scegliendo per aggiungere nuove funzionalità.
Beh, mi ricordo che in Python per avere i risultati della CPUID hai dovuto usare una libreria esterna, soluzione non meno nobile (e neppure diversa) di cosa ho fatto io. Non trovando una l;ibreria esterna su cui appoggiarmi (non cercando a dir la verita') ho costruito una libreria esterna in C++ e poi l'ho usata in C#. Sbaglio?
Beh, sì, perché non era su questo che c'eravamo concentrati.

Quello di recuperare i dati è un problema che abbiamo risolto per strade diverse, ma era sulla presentazione dei risultati che poi è stato fatto il confronto fra i due linguaggi. :fagiano:
Sul fatto che sia piu' semplice e si abbiano meno pensieri in Python rispetto al C# resto non d'accordo. Rispetto ad altri linguaggi non lo metto in dubbio, cosa che sostengo peraltro anche per il C#.
Da quel che ho visto finora confrontando i due linguaggi, rimango della mia idea. :)
Sull'idea del goto. Secondo me iniziare con il paradigma procedurale e' piu' semplice, soprattutto se non si hanno grosse basi matematiche o logiche, come puo' essere la situazione di un quindicenne.
E' una sensazione, ma se quando iniziai io, ovvero in prima media 25 anni fa (sigh), ci fossero stati solo paradigmi funzionali non so come l'avrei presa.
Almeno ho la scusa che allora c'erano solo Goto e Gosub. Mica si poteva fare tanto altro... e le cose funzionavano lo stesso.
Quando riuscivi a venirne a capo. :D
Ma ovviamente non appena ho visto il primi cicli for, while & C. ho gettato Goto dalla finestra e non l'ho mai piu' usato. Ma so perfettamente perche'.
Proprio perché è inutile e dannoso: non appena ci si rende conto dei problemi che porta, non lo si usa più. E allora, tanto vale non metterlo nemmeno nel linguaggio, visto che se ne può fare benissimo a meno. :p
Ora, non dico di passare 3 anni sul goto nel 2008, ma almeno un paio di settimane insieme ai diagrammi di flusso secondo me non fa male.
Io la penso diversamente. :)
La mia era una battuta. Quella sul "un pò ad oggetti" dico.

Per il resto guarda, sfondi una porta aperta. Ti dico che voglio anche l'operator overloading e i generics a runtime, oltre alle closure! Vorrei anche strumenti per modellare il linguaggio come dico io, tipo macro in lisp.
Le macro mi sembra difficile che le vedrai, con la JVM che è così poco dinamico (poi a me non piaccono proprio).
Vorrei anche la tail-call optimization a livello di jvm.
Questo non capisco perché non l'abbiano già fatto eoni fa.
beh ma a conti fatti ha avuto ragione lui :p

ps. io sono daccordo con lui, se si può evitare (usando il linguaggio) di fare porcherie è meglio per tutti. perchè l'uomo tende a fare più porcherie possibili :asd: (vedi C++ ecc.. )
Mettiamoci anche il C, che è messo pure peggio. :D
Siccome in Smalltalk ogni cosa è un oggetto, anche le closure sono oggetti (in effetti sono oggetti pure i blocchi di codice che rappresentano i corpi dei metodi delle classi).

Per cui faccio due passi indietro rispetto la mia precedente affermazione circa lo spirito poco OOP delle closure (ho sbagliato causa ignoranza, ma fortunatamente proprio ieri ho cominciato a smanettare con Squeak e dintorni).
Sì, ma dipende sempre dal linguaggio che andiamo a considerare.

In SmallTalk, Python, Ruby, ecc. qualunque cosa è un oggetto, e noi non facciamo altro che manipolare oggetti, anche quando "invochiamo" una closure.

In linguaggi come Java questo non si può dire: non tutto è un oggetto.

banryu79
16-07-2008, 10:35
Riguardo a questo:

Va già molto meglio, anche se:
- che senso ha chiamare il metodo invoke? E' una funzione, che si usino direttamente le () per invocarla, coerentemente con le funzioni, appunti;


ho trovato questa spiegazione:

we cannot use () instead of invoke(). Look at this:

public class Simple {
static void m() {
System.out.println("hi");
}
public static void main(String[] args) {
{ => void } m = { =>
System.out.println("hello"); };
m.invoke();
}
}

How would you interpret m() used instead of m.invoke()?

gugoXX
16-07-2008, 10:46
Non ho capito.
Non avrebbero potuto risolverla come risolvono la seguente?


public class Simple {
static int Test=5;

public static void main(String[] args) {
System.out.println(Test);
int Test;
Test = 7;
System.out.println(Test);
System.out.println(Simple.Test);
}
}

astorcas
16-07-2008, 11:26
Non ho capito.
Non avrebbero potuto risolverla come risolvono la seguente?


public class Simple {
static int Test=5;

public static void main(String[] args) {
System.out.println(Test);
int Test;
Test = 7;
System.out.println(Test);
System.out.println(Simple.Test);
}
}




io non ho capito il tuo controesempio :fagiano:
Lì si parla di un metodo e una closure, tu hai fatto l'esempio con una variabile locale e una globale

banryu79
16-07-2008, 11:28
Non ho capito.
Non avrebbero potuto risolverla come risolvono la seguente?
...
[/code]
Sì, infatti c'è chi ha fatto questa osservazione.
Posto il link (http://tronicek.blogspot.com/2008/01/usage.html?showComment=1206799620000#c5367077271932448362) alla pagina web relativa.

gugoXX
16-07-2008, 11:51
io non ho capito il tuo controesempio :fagiano:
Lì si parla di un metodo e una closure, tu hai fatto l'esempio con una variabile locale e una globale

Prova a leggere il link di Banryu. Se dovesse ancora servire potrei provare a spiegare.
Ma mi occorrerebbe sapere se hai un qualche background tipo "Linguaggi e Traduttori" o simili.

cdimauro
16-07-2008, 13:19
Non ho capito.
Non avrebbero potuto risolverla come risolvono la seguente?


public class Simple {
static int Test=5;

public static void main(String[] args) {
System.out.println(Test);
int Test;
Test = 7;
System.out.println(Test);
System.out.println(Simple.Test);
}
}



Concordo. E' una scusa che suona di (mala)pezza lontano un miriametro.

Bastano le () per invocare un tipo funzione: niente storie. ;)

Poi quella soluzione si legherà mani e piedi l'implementazione: sarà sempre necessario creare una classe "incognita" e un metodo che conterrà il codice vero e proprio, da invocare poi con invoke.

k0nt3
16-07-2008, 14:40
a me non dispiace come sintassi perchè ha una semantica a oggetti che si "intona" meglio con il resto del linguaggio.
se parliamo dell'implementazione... non sono problemi di chi deve usare il linguaggio :p se la vedranno poi loro con la JVM.
la cosa più importante è introdurre una caratteristica utile per rendere il codice più comprensibile in certi casi (alla fine, quello che farebbe il compilatore automaticamente, ora andrebbe fatto manualmente).

banryu79
16-07-2008, 14:44
Poi quella soluzione si legherà mani e piedi l'implementazione: sarà sempre necessario creare una classe "incognita" e un metodo che conterrà il codice vero e proprio, da invocare poi con invoke.

Già, non ci sono escamotage. In Java un metodo non è un oggetto, e quindi le closure hanno bisogno delle Interfacce e delle calssi anonime dietro le quinte.

Capisco la comodità delle closure in certe circostanze, ma più che una nuova feature del linguaggio la considero una "patch-feature", dettata da ragioni commerciali. Per questo prima sostenevo che così Java "si prostituisce".

Però prima di fasciarmi la testa vorrei sperimentarle, non è detto che dal punto di vista pratico siano malvagie, anche implementate così.

dasdsasderterowaa
16-07-2008, 14:47
Toc toc, scusate se mi intrometto e ne approfitto per chiedere lumi :p
Avete mai sentito parlare del linguaggio Boo (simile a Python come sintassi, ma per CLI)? che ne pensate? è ancora molto acerbo o è utilizzabile in maniera produttiva?

http://boo.codehaus.org/

Grazie a chi mi risponderà. ;)

cdimauro
16-07-2008, 18:15
a me non dispiace come sintassi perchè ha una semantica a oggetti che si "intona" meglio con il resto del linguaggio.
A me pare di no: c'è una notevole differenza con l'invocazione di metodi/funzioni.
se parliamo dell'implementazione... non sono problemi di chi deve usare il linguaggio :p se la vedranno poi loro con la JVM.
Non hai capito: QUESTA soluzione costringerà a legare "mani e piedi" le closure all'implementazione utilizzata.
la cosa più importante è introdurre una caratteristica utile per rendere il codice più comprensibile in certi casi (alla fine, quello che farebbe il compilatore automaticamente, ora andrebbe fatto manualmente).
Sì, ma bisogna farlo in "armonia" col resto del linguaggio. Altrimenti si finisce col generare dei Frankenstein.
Già, non ci sono escamotage. In Java un metodo non è un oggetto, e quindi le closure hanno bisogno delle Interfacce e delle calssi anonime dietro le quinte.
Continuo a non vedere il perché: una closure è un pezzo di codice a cui semplicemente non è stato assegnato un nome.

Perché dovrebbe essere trattato diversamente dai metodi?
Capisco la comodità delle closure in certe circostanze, ma più che una nuova feature del linguaggio la considero una "patch-feature", dettata da ragioni commerciali. Per questo prima sostenevo che così Java "si prostituisce".

Però prima di fasciarmi la testa vorrei sperimentarle, non è detto che dal punto di vista pratico siano malvagie, anche implementate così.
Che ci sia un'esigenza che s'è venuta a creare (per ragioni commerciali / di marketing), va bene, ma bisognerebbe coprirla "cum grano salis", senza ricorrere a soluzione veloci e/o di comodo creando pastrocchi.
Toc toc, scusate se mi intrometto e ne approfitto per chiedere lumi :p
Avete mai sentito parlare del linguaggio Boo (simile a Python come sintassi, ma per CLI)? che ne pensate? è ancora molto acerbo o è utilizzabile in maniera produttiva?

http://boo.codehaus.org/

Grazie a chi mi risponderà. ;)
:eek: Frankenstein. :Puke:

dasdsasderterowaa
17-07-2008, 08:25
:eek: Frankenstein. :Puke:

Perfetto! Non potevi essere più chiaro! :sofico:

cdimauro
17-07-2008, 09:04
Forse sono stato troppo sintetico, ma quel linguaggio è un patchwork: l'autore ha "copia & incollato" costrutti sintattici prendendo a piene mani da linguaggi diversi condendo il tutto in "salsa .NET".

Preferisco un linguaggio che si evolve più lentamente, ma che mantiene una certa "filosofia".

Seguendo la mailing list degli sviluppatori di Python (intendo del linguaggio vero e proprio e delle relavite librerie standard) non hai idea di quante "nuove idee" vengano discusse, anche per lunghissimi thread, e soltanto quelle ritenute "pythonic" assumono forma di documento ufficiale che porta poi al relativo cambiamento.

Ad esempio una mia proposta (di introdurre un costrutto simile al with del Pascal) di qualche tempo fa è stata bocciata, ma mi è stata fornita un'alternativa abbastanza valida da Alex Martelli. ;)