View Full Version : Con quale linguaggio "cominciare"?
Ciao a tutti. Premessa: durante questi 5 anni di itis ho avuto modo di utilizzare pascal e di averne un'infarinatura, idem per l'assembler, ho usato mplab per programmare dei microcontrollori a scuola, ma sempre robe semplici e sempre con un insegnante che dava delle dritte.
Dopo il mio recente passaggio a linux (ubuntu) mi è venuta voglia di imparare un linguaggio di programmazione per provare a fare qualche programmino-esperimento solamente non ho la minima idea di dove iniziare, anche perché non so quanto siano sviluppate le comunità e le documentazioni in italiano per i vari linguaggi.
Così mi chiedevo se non poteste voi genietti dell'informatica indirizzarmi verso un linguaggio semplice e abbastanza supportato con documentazione italiana.
Io avevo sentito parlar bene di PYTHON e soprattutto di Ruby.
Thanks
^TiGeRShArK^
05-06-2007, 18:58
python e ruby sono ottimi linguaggi.
Se vuoi qualcosa di + "pratico" nel senso che ti servirà di + nell'ambito lavorativo allora metterei al 1° posto java e poi C#.
Ovviamente dipende anke qualìè l'ambito principale a cui sei interessato..
anke se qua in italia c'è un discreto skifo in questo mondo :rolleyes:
P.S. E ora ovviamente si aprono le danze con la solita diatriba no è meglio il mio linguaggio ... no il mio ce l'ha + lungo... e cose del genere :D
No guarda non è per ambito lavorativo, ho intenzione di andare a studiare giurisprudenza quindi :D
Comunque so che c e c++ sono i più utilizzati e che java è da preferire perché è multipiattaforma.
Tenendo conto dell'impegno che ci metto nel fare DETERMINATE cose, ho bisogno di non accumulare insuccessi in questa cosa, altrimenti mi smonto e mollo subito.
Viceversa se ho dei riscontri positivi mi invoglio ancor di più
^TiGeRShArK^
05-06-2007, 20:24
allora in questo caso ruby e python potrebbero essere una buona scelta...
L'unico neo ke hanno è ke la documentazione, se confrontata con quella ottima a disposizione x java, fa un pò pena.
Cmq mi pare che qualcosa in italiano mezza decente si trovi tipo:
http://it.diveintopython.org/
Per ruby invece non mi ricordo se c'è qualcosa di equivalente in italiano :fagiano:
il libro che ho letto se non sbaglio era in inglese :fagiano:
prova a dare un occhiata qui:
http://ruby-it.org/pages/Guide+in+Italiano
e vedi se trovi quello ke ti serve :p
Fatti coccolare dalla piattaforma Java e dal suo ecosistema di documenti e librerie ed esempi, gestione automatica della memoria e concorrenza e IDE e fiumi di miele alberi di cioccolato e angeli trombe eccetera eccetera.
Poi vedrai se sia il caso di affrontare altri mondi. In fondo c'è sempre tempo per aver voglia di farsi passare la voglia.
potete postare quel sondaggio che recitava piu o meno: "che linguaggio usate al lavoro?" a me non va la funzione cerca.. :(
potete postare quel sondaggio che recitava piu o meno: "che linguaggio usate al lavoro?" a me non va la funzione cerca.. :(
http://www.hwupgrade.it/forum/showthread.php?t=1311007&highlight=lavoro+linguaggio
grande stroustrup
http://www.hwupgrade.it/forum/showthread.php?t=1311007&highlight=lavoro+linguaggio
grande stroustrup
già.. Bjarne è un dio.. :D
cdimauro
06-06-2007, 08:48
Il titolo del thread ("Con quale linguaggio "cominciare"?") e i messaggi di Sgorg sono piuttosto chiari, per cui la scelta mi sembra a dir poco ovvia: Python o Ruby.
Python non a caso viene definito "pseudocodice eseguibile". ;)
P.S. E non serve soltanto per imparare: lo si usa negli ambiti più disparati.
Il titolo del thread ("Con quale linguaggio "cominciare"?") e i messaggi di Sgorg sono piuttosto chiari, per cui la scelta mi sembra a dir poco ovvia: Python o Ruby.
Python non a caso viene definito "pseudocodice eseguibile". ;)
P.S. E non serve soltanto per imparare: lo si usa negli ambiti più disparati.
in teoria sono orientato verso python e ruby, ma non disdegno consigli su altri tipi di linguaggio. Ieri ho provato come ide di python boa-constructor... mi sa che devo cercarmi qualche guida ULTRA-base e qualche guida anche su questo ide...
Più che altro mi secca la storia delle librerie grafiche che poi se uno vuole farlo girare su un altro pc deve averle tutte... con php o java succede la stessa cosa o è tutto "integrato"?
Con Java (o .NET) è tutto integrato ma è per una questione di piattaforma. Anche in Java puoi usare librerie che poi ti tocca trasportare insieme al tuo programma. Nel caso della creazione di interfacce grafiche la piattaforma Java dispone di librerie predefinite: se uno ha installato una cosa cosa che si chiama "Java SE" allora necessariamente ha anche quelle librerie.
yorkeiser
06-06-2007, 15:28
Linguaggio C, senza dubbio
Dark Phoenix
06-06-2007, 15:42
Anche io consiglio Java
l'elevato livello di astrazione secondo me ti consentirebbe in breve tempo cose che in altri linguaggi sarebbero abbastanza complicate.
Poi la sintassi si impara abbastanza in fretta e se c'è un bug nel programma lo trovi abbastanza semplicemente grazie alla gestione delle eccezioni.
Mi spiego se sbagli un indice di un array in ottieni C un ricco e notissimo segmentation fault in Java ti da un IndexOutOfBoundsException (anch'esso notissimo ma nettamente più comprensibile).
Non ti consiglio .NET perché se vuoi lavorare sotto linux non saprei che IDE consigliarti.
Dai ragazzi, teniamo il conto di quanti suggerimenti diversi riesce a collezionare sgorg? :D
Finora abbiamo Java, Python, C, C#.
E scometto un fiorino che tra un po' arriva Haskell.
Dark Phoenix
06-06-2007, 16:04
Dai ragazzi, teniamo il conto di quanti suggerimenti diversi riesce a collezionare sgorg? :D
Finora abbiamo Java, Python, C, C#.
E scometto un fiorino che tra un po' arriva Haskell.
Se qualcuno gli consiglia l'assembly gli :mano: :D :D
Pensandoci forse su quello siamo tutti daccordo
Che dite forse lo abbiamo incastrato? Beh infondo è il primo passo per imparare a programmare :p
Potremmo fare un sondaggio del genere "con quale lingua iniziare" che abbia in elenco ogni linguaggio esistente (o quanti più se ne riesca a trovare). Poi ognuno vota ma con divieto assoluto di motivazione.
Perchè alla fine non sono i nomi che scatenano la (sempre amabile) rissa quanto le ragioni per cui si consiglia questo o quest'altro.
E poi lo si mette là, in rilievo. Ma, ripeto, con divieto di motivazione. Si vota e basta, in via anonima.
Dark Phoenix
06-06-2007, 16:18
Potremmo fare un sondaggio del genere "con quale lingua iniziare" che abbia in elenco ogni linguaggio esistente (o quanti più se ne riesca a trovare). Poi ognuno vota ma con divieto assoluto di motivazione.
Perchè alla fine non sono i nomi che scatenano la (sempre amabile) rissa quanto le ragioni per cui si consiglia questo o quest'altro.
E poi lo si mette là, in rilievo. Ma, ripeto, con divieto di motivazione. Si vota e basta, in via anonima.
quoto
Se qualcuno gli consiglia l'assembly gli :mano: :D :D
Pensandoci forse su quello siamo tutti daccordo
Giammai! Consigliatemi tutto ma non quello! Mi ha fatto passare la voglia di utilizzare il pc :cry:
Finalmente oggi ho trovato una guida molto completa e fatta per neofiti su python, anche se però pure java mi stuzzica non poco
cdimauro
06-06-2007, 21:09
in teoria sono orientato verso python e ruby, ma non disdegno consigli su altri tipi di linguaggio.
Certamente, ma dato lo scopo "didattico" (quello di iniziare a programmare) sono ben pochi i candidati.
Python ti permette (anzi, ti obbliga :D) di scrivere codice in maniera MOLTO semplice, elegante e veloce (anche di un ordine di grandezza più velocemente rispetto ad altri linguaggi più "tradizionali"), che mantiene un elevato grado di manutenibilità, e inoltre non ti fa rinunciare a nulla (puoi programmare usando diversi paradigmi: strutturato, modulare, funzionale e a oggetti; inoltre essendo sostanzialmente un linguaggio di scripting puoi giocare un po' con la meta-programmazione).
Ieri ho provato come ide di python boa-constructor... mi sa che devo cercarmi qualche guida ULTRA-base e qualche guida anche su questo ide...
Come IDE io utilizzo (con grande soddisfazione) SPE: http://pythonide.blogspot.com/
Qui http://www.xnavigation.net/view/289/spe/download.html c'è una descrizione in italiano:
SPE (Stani's Python Editor), come dice lo stesso nome, è un editor per il linguaggio python, relativamente recente ma che si sta già conquistando un'ampia fetta di utenti. Questo editor può essere utile ai principianti come agli utenti esperti.
Editor per php, editor per html, editor per actionscript…e a Python non ci pensa nessuno?
Ci pensano, ci pensano…SPE (Stani’s Python Editor) è infatti un ottimo editor testuale dedicato a Python, che offre le funzioni “classiche” e sempre utili degli editor testuali:
-Auto completamento del codice
-Auto indentamento del codice
-Highlighting del codice
-Controllo della sintassi
-Esploratore di classi
-Lista automatica dei “todo” (cose ancora da fare)
-Browser di file.
Questo editor può tra l’altro essere utilizzato anche in Blender, programma gratuito di grafica tridimensionale. SPE nel download include anche WxGlade (designer di interfacce), PyChecker (controlla il codice sorgente) e Kiki (per le espressioni regolari).
Se siete tra i tanti utenti che si stanno avvicinando a Python e volete iniziare utilizzando un editor che possa anche aiutarvi durante la stesura del codice, suggerendovi la sintassi giusta in modo da evitarvi errori magari banali ma che possono causare grosse perdite di tempo, questo Stani’s Python Editor può esservi decisamente utile, così come può essere utile a sviluppatori più eSPErti.
Due ulteriori elementi sicuramente a suo favore sono la compatibilità con diversi sistemi (windows, macOS e linux) e il suo prezzo, che ammonta a ….zero! Infatti il software è gratuito, se però vi piacesse molto questo programma è possibile fare delle donazioni dal sito dell’autore.
Più che altro mi secca la storia delle librerie grafiche che poi se uno vuole farlo girare su un altro pc deve averle tutte...
Per Python (e Windows) esistono programmi come questo: http://www.py2exe.org/ che permettono di generare un pacchetto completo di virtual machine ed eventualmente delle librerie che la tua applicazione fa uso.
In questo modo non devi avere necessariamente l'ambiente Python (e le altre librerie aggiunte successivamente) installato per poter far girare la tua applicazione.
Comunque Python ti permette di utilizzare la libreria grafica che vuoi.
Ad esempio SPE (che è anch'esso scritto in Python) fa uso della wxWidget (ricordati di scaricare e installare la versione per Python, wxPython, prima di installare SPE; niente di complicato comunque: per entrambi Setup, Avanti, Avanti, Fine ed è tutto risolto, se usi Windows), e integra (come puoi vedere dalla descrizione di cui sopra) anche un'applicazione per il design di GUI (che è in grado di generare codice per Python e per altri linguaggi).
con php o java succede la stessa cosa o è tutto "integrato"?
Solo se hai i rispettivi ambienti installati (come per Python, d'altra parte, a meno che non usi programmi come py2exe appunto).
Dimenticavo: un eccellente testo in italiano per imparare a programmare, in particolare con Python, è http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm
cdimauro
06-06-2007, 21:13
Potremmo fare un sondaggio del genere "con quale lingua iniziare" che abbia in elenco ogni linguaggio esistente (o quanti più se ne riesca a trovare). Poi ognuno vota ma con divieto assoluto di motivazione.
Perchè alla fine non sono i nomi che scatenano la (sempre amabile) rissa quanto le ragioni per cui si consiglia questo o quest'altro.
E poi lo si mette là, in rilievo. Ma, ripeto, con divieto di motivazione. Si vota e basta, in via anonima.
No no: la motivazione serve, eccome. Perché voglio proprio vedere cosa tireranno fuori quelli che hanno scritto C, C++, o addirittura assembly come linguaggio da usare per iniziare a programmare.
P.S. Sull'assembly il tono mi sembrava (ovviamente :D) ironico.
Sono queste divergenze di opinione che producono la bagarre. Io ho consigliato Java ma non considero poi malvagio C come primo amore.
D'altro canto suggerirei C++ solo se l'autore di questo thread fosse mia suocera (:flower: 'sera signora)
Linguaggio C, senza dubbio
Ma anche no.
Me lo vuoi rovinare fin da piccolo ? :D
Dai ragazzi, teniamo il conto di quanti suggerimenti diversi riesce a collezionare sgorg? :D
Finora abbiamo Java, Python, C, C#.
E scometto un fiorino che tra un po' arriva Haskell.
No no, per quello bisogna aspettare che si faccia un po' di ossa con un linguaggio di programmazione normale :p
cdimauro
06-06-2007, 22:05
Sono queste divergenze di opinione che producono la bagarre. Io ho consigliato Java ma non considero poi malvagio C come primo amore.
D'altro canto suggerirei C++ solo se l'autore di questo thread fosse mia suocera (:flower: 'sera signora)
Non consideri malvagio il C (che tra l'altro offre un solo paradigma di programmazione) e suggeriresti il C++, che è un suo SUPERSET?
Io, al contrario, mi chiedo come si faccia ancora oggi a lavorare ancora in C, quando il C++ (fermo restando che non mi piace nemmeno questo linguaggio) offre esattamente le stesse cose, a cui si aggiungono tanti altri interessanti costrutti che permettono di snellire il codice e renderlo più manutenibile.
Per il resto, il tema del thread riguarda "iniziare a programmare", e sfido C, C++, C#, Java e compagnia bella a fare di meglio di linguaggi come Python, Ruby, ecc.
Non c'è assolutamente paragone e non si tratta di opinioni personali, ma di constatazioni "sul campo", e di esempi in cui si confrontano i vari linguaggi sui mattoncini (ma anche roba più avanzate) della programmazione ne possiamo fare quanti ne vogliamo: io sono a disposizione. ;)
Consiglio C, sconsiglio C++ (cioè lo consiglio ma a mia suocera... sai la suocera come antitesi della felicità... eccheccacchio se me la fai spiegare fa schifo! :D).
Insomma, tocca a me scoprire le carte. Con Python e Ruby al massimo ci fai una partita a tresette. Sono linguaggi amorfi e l'industria storicamente ha dimostrato di prediligere le lingue polimorfe. In più supportano ufficialmente diverse prospettive, cosa che già da sola vale il cestino immediato. Un terzo di programma fatto da un punto di vista orientato agli oggetti, un terzo in un ottica funzionale e un terzo procedurale: voglio vedere chi riesce a fare manutenzione su una broda del genere. La documentazione poi è indecente a voler essere generosi.
Consiglio Java ma tanto tra un po' ci mettono dentro le chiusure e va a ramengo pure quello (che già coi generici ha fatto un salto nella fogna mica da ridere).
cdimauro
06-06-2007, 22:33
Consiglio C, sconsiglio C++ (cioè lo consiglio ma a mia suocera... sai la suocera come antitesi della felicità... eccheccacchio se me la fai spiegare fa schifo! :D).
Ma non dici però il perché. Essendo il C++ un SUPERSET del C le tue conclusioni non mi sembrano assolutamente condivisibili, visto che il C++, per male che vada, posso usarlo ESATTAMENTE come il C. ;)
Insomma, tocca a me scoprire le carte. Con Python e Ruby al massimo ci fai una partita a tresette.
E' una tua opinione che cozza violentemente con l'esperienza che io (e tantissimi altri) abbiamo avuto.
Per l'azienda per cui lavoro ho sviluppato applicazioni molto delicate / importanti / critiche, e interamente in Python. Altre ne stanno arrivando, e per il futuro la mia idea è di sviluppare tutti i server in Python, lasciando ai client la libertà del linguaggio da usare per accedere alle loro API (per adesso il PHP regna sovrano. Purtroppo).
Sono linguaggi amorfi e l'industria storicamente ha dimostrato di prediligere le lingue polimorfe.
Non ti seguo: potresti essere più chiaro e fare qualche esempio, cortesemente?
In più supportano ufficialmente diverse prospettive, cosa che già da sola vale il cestino immediato.
Cioé? Idem come sopra.
Un terzo di programma fatto da un punto di vista orientato agli oggetti, un terzo in un ottica funzionale e un terzo procedurale: voglio vedere chi riesce a fare manutenzione su una broda del genere.
Scusami, ma qui ti stai confondendo malamente: offrire diversi paradigmi di programmazione non significa farne un uso scellerato, come hai riportato.
Mi sembra a dir poco ovvio che sta al programmatore utilizzare in maniera sapiente gli strumenti che gli vengono messi a disposizione.
La documentazione poi è indecente a voler essere generosi.
Tutte le librerie sono dotate di documentazione e vengono spiegate le funzioni e/o metodi una per una, con esempi e anche intere applicazioni che ne mostrano l'uso.
Puoi dirmi che la documentazione non è ai livelli di quella disponibile per Java, ma non che sia "indecente".
Consiglio Java ma tanto tra un po' ci mettono dentro le chiusure e va a ramengo pure quello (che già coi generici ha fatto un salto nella fogna mica da ridere).
Come già detto, Java per imparare a programmare, che ricordo ancora una volta essere l'argomento del topic, non è in grado di "reggere i calzari" a Python.
Quanto ai generic / template, vale quanto scritto sopra: sono degli strumenti, e tutto dipende da come vengono usati dal programmatore.
Fino a prova contraria è il programmatore che scrive cattivo codice. Poi ci può anche essere il linguaggio che "invoglia", ma se il programmatore ha la testa sulle spalle il codice lo tira fuori pulito e senza porcate.
UAAOOO :D
facciamo così che mi pare più sensato:
Quali linguaggi di programmazione NON mi interessano:
1) Assembler - PASCAL
2)C - C++
Quali linguaggi mi stuzzicano:
1)python
2)Java (per la ricca documentazione)
3) PHP
Comunque prima della fine degli esami di maturità anche volendo non riesco a dedicarmi quindi fate con calma e fate i bravi :ciapet:
Anch'io ti consiglio il python. Su Gnu/Linux vai una bellezza...
Naturalmente il caro C non passa mai di moda e per le cose a basso livello è sempre la scelta migliore, imho! :D :read:
PS: Come semplicità il python è davvero un altro pianeta rispetto al java.
Esempi di programmi che stampano hello world in java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
e python:
print "Hello World"
Bravo, proprio così. In java devi fare una marea di dichiarazioni, mentre python non ha tutte queste richieste. Di conseguenza il codice è più leggero e leggibile e semplice da scrivere.
Quand'anche dovessi confondermi, vi assicuro che non lo farei malamente. Opterei piuttosto per un lezioso rincoglionimento.
Avevo iniziato con un papiro ma m'è passata la voglia. Riassumo.
1. Tanti usano Python e ne dicono un gran bene.
Fenomeno reale: a volte capita che un gregge di pecore di punto in bianco pigli e si butti giù per un dirupo. Tutte secche. La domanda è: siccome sono tante buttarsi nel fosso è un gran bella idea?
2. Il buon programmatore fa la scelta giusta.
Questa è come la torta della nonna. La torta della nonna è sempre buona perchè la nonna le torte le fa sempre nel modo giusto. Ma se telefoni alla nonna e gli dici che le cinquanta torte che doveva fare per il 23 settembre sono state anticipate al 15, che il nonno da lunedì cambia ditta e che i nipoti han chiamato per dire che la crema anzichè alla vaniglia dev'essere al limone è tanta grazie se quelle torte riesci a vederle, per averle commestibili ti conviene andare a Lourdes.
3. Questa documentazione (http://docs.python.org/lib/lib.html) è oggettivamente indecente, come può confermarti il vostro grafico che immagino abbia una certa cognizione in tema di usabilità e comunicazione.
4. Amorfo.
Amorfo è il termine con cui si indicano, nella teoria dei tipi, i linguaggi in cui i valori non hanno un tipo. Polimorfo è quando i valori possono assumere più di un tipo. Monomorfo è quando i valori hanno un solo tipo. La storia a cui mi riferisco è quella di Smalltalk. La faccio breve. Il suo essere amorfo lo rende indocumentabile a posteriori e sposta il momento in cui è rilevato anche un banale errore di denominazione al tempo di esecuzione. Alcuni dicono che questo causa problemi di rilevamento dei bug quando il numero di linee di codice diventa elevato. Personalmente ritengo invece che non conti la quantità di linee (della serie un tanto al chilo) ma la profondità dell'albero di invocazioni raggiunta dal flusso di controllo. L'indocumentabilità a posteriori è testimoniata dai numerosi tentativi di lungo corso che hanno coinvolto Smalltalk (nove anni che cercano di farlo per Squeak e siamo ancora al pugno di mosche). Le librerie di Python hanno una documentazione sufficiente. Ma sono solo un pezzo del puzzle. Quanto bene sono documentati i programmi scritti in python? Spero che lo siano molto meglio di quanto è comune vedere in altri linguaggi perchè altrimenti i manutentori di quei programmi (chi tra venti anni si troverà di fronte a quel codice per la prima volta) avranno le loro gatte da pelare.
5. Preferisco C a C++.
Perche il secondo supporta dichiaratamente almeno tre prospettive, per la torta della nonna (e un inghippo di psicologia cognitiva) ne saranno usate almeno due (OO e procedurale) e, per la natura delle prospettive, la mescolanza genera incomprensibilità del fenomeno rappresentato. Un'unica prospettiva "naturale" costringe eventuali deviazioni entro i binari dell'osservazione principale. La coerenza non è a beneficio di chi scrive il programma ma di chi dovrà leggerlo. Un programma è una storia e se me la racconti da due punti di vista diversi devi essere uno scrittore dannatamente bravo per non farmi venire il latte alle ginocchia alla terza pagina.
6. I generici.
I generici hanno introdotto in Java il concetto di invarianza e contravarianza che, pur essendo assolutamente legittimo, sono meno intuitivi della covarianza. Le chiusure introdurrano nel linguaggio una nuova forma sintattica per la dichiarazione di un tipo e, francamente, già averne due (interfaccia e classe) ha causato più di un imbarazzo, gli enumerativi e le annotazioni hanno appensantito la faccenda non di poco e le chiusure saranno la goccia che farà traboccare il vaso. E' un pronostico. Da Java 7 la piattaforma inizierà il declino perchè i nuovi programmatori saranno indirizzati verso altre lingue.
7. In conclusione
Se questa è la sintesi, figuratevi com'era prima :D
Anch'io ti consiglio il python. Su Gnu/Linux vai una bellezza...
Naturalmente il caro C non passa mai di moda e per le cose a basso livello è sempre la scelta migliore, imho! :D :read:
PS: Come semplicità il python è davvero un altro pianeta rispetto al java.
Esempi di programmi che stampano hello world in java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
e python:
print "Hello World"
Bravo, proprio così. In java devi fare una marea di dichiarazioni, mentre python non ha tutte queste richieste. Di conseguenza il codice è più leggero e leggibile e semplice da scrivere.
Questi esempi sono suggestivi ma un tantinello fuori dalla realtà. Chiedo a qualcuno dei miei ex colleghi qui presenti tanto per non fare la figura del solito alieno ma:
Quanti hello world vi è stato chiesto di scrivere quest'anno?
Quante sequenze di fibonacci avete mai dovuto scrivere per lavoro?
Sono più o meno del numero di quick-sort?
Non mi stupirei di tre zeri in sequenza.
Sono piu' o meno in linea col pensiero di cdimauro.
Consiglio C, sconsiglio C++ (cioè lo consiglio ma a mia suocera... sai la suocera come antitesi della felicità... eccheccacchio se me la fai spiegare fa schifo! :D).
Capisco che si possa non consigliare il C++, ma non vedo che cosa abbia in piu' il C rispetto al C++. L'unica cosa e' che ha molto di meno, e quindi da un certo punto di vista e' piu' semplice, ma e' cosi' limitato che a parte alcuni ambiti particolari non e' piu' cosi' utile
Insomma, tocca a me scoprire le carte. Con Python e Ruby al massimo ci fai una partita a tresette. Sono linguaggi amorfi e l'industria storicamente ha dimostrato di prediligere le lingue polimorfe.
Dovresti spiegare cosa intendi per "amorfo", perche' per l'accezione che ne ho io Python e Ruby sono decisamente meno amorfi di Java, ma prima preferisco che ci accordiamo sul significato del termine :p.
In più supportano ufficialmente diverse prospettive, cosa che già da sola vale il cestino immediato. Un terzo di programma fatto da un punto di vista orientato agli oggetti, un terzo in un ottica funzionale e un terzo procedurale: voglio vedere chi riesce a fare manutenzione su una broda del genere. La documentazione poi è indecente a voler essere generosi.
Doh, quello per me non e' un difetto. L'uso di un solo paradigma ha il pregio di limitare le alternative che un programmatore ha per compiere la stessa cosa, per cui a quest'ultimo sono richieste meno competenze e meno attenzione, agevolandogli il lavoro. Questo funziona fintanto che le alternative sono equivalenti o paragonabili. Nel momento in cui per "semplicita'" si rinuncia a qualcosa di migliore, non si riduce la complessita', la si sposta.
Io la vedo come una grande stanza piena di sporco. Java preferisce avere uno strato sottile e uniforme dappertutto, in modo che in nessuno punto ce ne sia troppo. Io ritengo invece che possa essere preferibile accumularlo in uno (o piu') angoli. Chi passa di li lo nota e magari resta schifato, ma se si ha l'astuzia di metterlo dove passano in pochi tutti gli altri ne gioveranno.
Sono convinto che se si riesce a fattorizzare la complessita' nascondendola dietro ad interfacce piu' semplici, si limita il numero di persone che c'hanno a che fare e di conseguenza i problemi collegati, e che la programmazione multiparadigma dia ottimi spunti per fare questo.
Sicuramente ci sono delle controindicazioni (in particolare se ci si impegna si riescono a fare di quelle porcherie immonde) ma dipende, oltre che dalla bonta' del programmatore, anche dal linguaggio. Temo che fin troppe persone siano rimaste scottate dalla "multi paradigmicita'" del C++, che fa tutto, ma non troppo bene, e con il quale e' facilissimo tirarsi la zappa sui piedi.
Ti do ragione sulla documentazione ma, a parziale discolpa, faccio notare che la documentazione di riferimento di Java ha il problema contrario, in quanto a volte ha la pretesa di spiegare che un programmatore che la consulta dovrebbe aver gia' imparato da un testo opportuno.
Consiglio Java ma tanto tra un po' ci mettono dentro le chiusure e va a ramengo pure quello (che già coi generici ha fatto un salto nella fogna mica da ridere).
Nel caso di Java e (soprattutto) C# ritengo che il problema sia dovuto non tanto alle funzionalita' aggiunte, ma quanto al fatto che sono posticce, e che quindi si devono adattare a quanto gia' esistente.
mapomapo
07-06-2007, 08:10
puoi usare il C++ come se fosse C....sì....a patto di mandare letteralmente a belle donne la programmazione orientata ad oggetti e trasformando un linguaggio OO in un procedurale....
praticamente se leggessi un file *.cpp scritto con la logica del C inizierei a bestemmiare in tutte le lingue da me conosciute perchè significa non avere le idee chiare su quello che si sta facendo, significa tergiversare la frase di Stroustrup "C++ is a better C".
Tornando in topic, comunque, visto che non ti interessano C e C++ e che hai ristretto il campo a php e java....beh....ti consiglierei il java....
anche se, onestamente, ho iniziato con C e C++ e sono linguaggi che ti "formano"...se inizi a capire come implementare un algoritmo in C (o in un linguaggio funzionale) una volta assimilato il meccanismo la strada è in discesa...
Vito
cdimauro
07-06-2007, 08:45
UAAOOO :D
facciamo così che mi pare più sensato:
Quali linguaggi di programmazione NON mi interessano:
1) Assembler - PASCAL
2)C - C++
Quali linguaggi mi stuzzicano:
1)python
2)Java (per la ricca documentazione)
3) PHP
Comunque prima della fine degli esami di maturità anche volendo non riesco a dedicarmi quindi fate con calma e fate i bravi :ciapet:
OK, ma potresti dirmi perché hai inserito PHP nell'elenco dei linguaggi che ti stuzzicano? Francamente di "stuzzicante" in questo linguaggio non ci strovo assolutamente nulla. :p
Questi esempi sono suggestivi ma un tantinello fuori dalla realtà. Chiedo a qualcuno dei miei ex colleghi qui presenti tanto per non fare la figura del solito alieno ma:
Quanti hello world vi è stato chiesto di scrivere quest'anno?
Quante sequenze di fibonacci avete mai dovuto scrivere per lavoro?
Sono più o meno del numero di quick-sort?
Non mi stupirei di tre zeri in sequenza.
ho scritto un quick sort una settimana fa :rulez:
brutalmente copincollato da wikipedia e adattato allo scopo :asd:
Doh, quello per me non e' un difetto. L'uso di un solo paradigma ha il pregio di limitare le alternative che un programmatore ha per compiere la stessa cosa, per cui a quest'ultimo sono richieste meno competenze e meno attenzione, agevolandogli il lavoro. Questo funziona fintanto che le alternative sono equivalenti o paragonabili. Nel momento in cui per "semplicita'" si rinuncia a qualcosa di migliore, non si riduce la complessita', la si sposta.
Io la vedo come una grande stanza piena di sporco. Java preferisce avere uno strato sottile e uniforme dappertutto, in modo che in nessuno punto ce ne sia troppo. Io ritengo invece che possa essere preferibile accumularlo in uno (o piu') angoli. Chi passa di li lo nota e magari resta schifato, ma se si ha l'astuzia di metterlo dove passano in pochi tutti gli altri ne gioveranno.
Sono convinto che se si riesce a fattorizzare la complessita' nascondendola dietro ad interfacce piu' semplici, si limita il numero di persone che c'hanno a che fare e di conseguenza i problemi collegati, e che la programmazione multiparadigma dia ottimi spunti per fare questo.
Sicuramente ci sono delle controindicazioni (in particolare se ci si impegna si riescono a fare di quelle porcherie immonde) ma dipende, oltre che dalla bonta' del programmatore, anche dal linguaggio. Temo che fin troppe persone siano rimaste scottate dalla "multi paradigmicita'" del C++, che fa tutto, ma non troppo bene, e con il quale e' facilissimo tirarsi la zappa sui piedi.
come dici pgi-bis il problema è nel programmatore che andrà a leggere il programma fra qualche anno.
Poi c'è da dire che se chi l'ha scritto è un manico, e chi lo va a leggere è manico pure, questi problemi non si dovrebbero avere.
Ma se si ragione per programmatori medi(bravi ma non geni), allora si potrebbero avere dei problemi.
Aggiungere potenza aggiungendo complessità non è sempre un bene. Se la si sa usare porta vantaggi, ma questo alza il livello di skill richiesto.
In effetti in java incominciare a ragionare sui generics complica parecchio le cose. Anche se poi chi va usare le funzioni generificate ha qualche vantaggio.
cdimauro
07-06-2007, 09:31
Quand'anche dovessi confondermi, vi assicuro che non lo farei malamente. Opterei piuttosto per un lezioso rincoglionimento.
ROTFL :p
Avevo iniziato con un papiro ma m'è passata la voglia. Riassumo.
Hai anche il dono della sintesi (quello che manca a me). :D
1. Tanti usano Python e ne dicono un gran bene.
Fenomeno reale: a volte capita che un gregge di pecore di punto in bianco pigli e si butti giù per un dirupo. Tutte secche. La domanda è: siccome sono tante buttarsi nel fosso è un gran bella idea?
Questa non è un'osservazione/conclusione degna di un buon programmatore: hai tirato fuori il classico caso delle pecorelle acefale che seguono bovinamente (e dunque acriticamente) un destino comune.
Fenomeno che NON si può applicare all'oggetto della discussione, se permetti.
2. Il buon programmatore fa la scelta giusta.
Questa è come la torta della nonna. La torta della nonna è sempre buona perchè la nonna le torte le fa sempre nel modo giusto. Ma se telefoni alla nonna e gli dici che le cinquanta torte che doveva fare per il 23 settembre sono state anticipate al 15, che il nonno da lunedì cambia ditta e che i nipoti han chiamato per dire che la crema anzichè alla vaniglia dev'essere al limone è tanta grazie se quelle torte riesci a vederle, per averle commestibili ti conviene andare a Lourdes.
Vabbé, altro luogo comune. Passiamo avanti.
3. Questa documentazione (http://docs.python.org/lib/lib.html) è oggettivamente indecente, come può confermarti il vostro grafico che immagino abbia una certa cognizione in tema di usabilità e comunicazione.
http://www.demauroparavia.it/55486
"in|de|cèn|te
agg.
CO
1 che è contrario alla decenza, che offende il comune senso del pudore: comportamento i.; un abbigliamento, una scollatura i.
2 che offende il decoro, la convenienza: questa tovaglia è i., il servizio in quel ristorante è i."
Fino a prova contraria, se la documentazione mi fornisce le informazioni che mi servono per poter lavorare, non è indecente, ma sufficiente: http://www.demauroparavia.it/116746
"suf|fi|cièn|te
agg.
FO
1 che basta al fabbisogno, che risponde alla necessità: denaro s.; anche s.m.: non avere il s. per vivere | nel linguaggio scolastico, voto o giudizio mediocre, corrispondente al sei: tema s.; anche s.m.: prendere s. nel compito di matematica
2 che è adatto allo scopo: un salone s. a contenere cinquanta persone
3 fig., che manifesta un senso di superiorità indisponente: avere un tono s.
4 TS log., mat., di una condizione che basta da sola al verificarsi di un fenomeno o a dimostrare una tesi
Varianti: sofficiente, suffiziente"
Il link che hai postato non dimostra la tua tesi, ma la mia (e vorrei ben vedere, visto che è da più di due anni e mezzo che sviluppo tranquillamente in Python; e non sono l'unico, appunto).
4. Amorfo.
Amorfo è il termine con cui si indicano, nella teoria dei tipi, i linguaggi in cui i valori non hanno un tipo. Polimorfo è quando i valori possono assumere più di un tipo. Monomorfo è quando i valori hanno un solo tipo. La storia a cui mi riferisco è quella di Smalltalk. La faccio breve. Il suo essere amorfo lo rende indocumentabile a posteriori e sposta il momento in cui è rilevato anche un banale errore di denominazione al tempo di esecuzione. Alcuni dicono che questo causa problemi di rilevamento dei bug quando il numero di linee di codice diventa elevato. Personalmente ritengo invece che non conti la quantità di linee (della serie un tanto al chilo) ma la profondità dell'albero di invocazioni raggiunta dal flusso di controllo.
Qui, in assenza di metriche oggettive (che non potranno mai esistere) sull'argomento, si potrebbe dire tutto e il contrario di tutto.
Comunque condivido la tua tesi sulle cause dei problemi, ma non quella sull'amorfismo che comporta conseguentemente l'indocumentabilità, poiché ciò è dovuto sempre alla solita causa (il programmatore).
L'indocumentabilità a posteriori è testimoniata dai numerosi tentativi di lungo corso che hanno coinvolto Smalltalk (nove anni che cercano di farlo per Squeak e siamo ancora al pugno di mosche). Le librerie di Python hanno una documentazione sufficiente. Ma sono solo un pezzo del puzzle.
Quindi mi dai ragione e smentisci la tua precedente affermazione. ;)
Conosco la storia di SmallTalk e qualche volta m'è capitato di leggere i tuoi messaggi su Squeak, ma considerato il fatto che questo ha una documentazione ridicola e che quella di Python (che è sulla stessa barca visto che è anch'esso un linguaggio "amorfo"), invece, è sufficiente, dimostra sempre la tesi di cui sopra (la causa è il programmatore).
Quanto bene sono documentati i programmi scritti in python? Spero che lo siano molto meglio di quanto è comune vedere in altri linguaggi perchè altrimenti i manutentori di quei programmi (chi tra venti anni si troverà di fronte a quel codice per la prima volta) avranno le loro gatte da pelare.
Indubbiamente la causa prima è sempre la stessa (il programmatore :D), ma la sua sintassi rende le applicazioni scritte in questo linguaggio più leggibili rispetto a quelle scritte in altri.
5. Preferisco C a C++.
Perche il secondo supporta dichiaratamente almeno tre prospettive, per la torta della nonna (e un inghippo di psicologia cognitiva) ne saranno usate almeno due (OO e procedurale) e, per la natura delle prospettive, la mescolanza genera incomprensibilità del fenomeno rappresentato. Un'unica prospettiva "naturale" costringe eventuali deviazioni entro i binari dell'osservazione principale. La coerenza non è a beneficio di chi scrive il programma ma di chi dovrà leggerlo. Un programma è una storia e se me la racconti da due punti di vista diversi devi essere uno scrittore dannatamente bravo per non farmi venire il latte alle ginocchia alla terza pagina.
Non condivido questa tua visione. Io vedo degli strumenti messi a disposizione dei programmatori per risolvere i loro problemi. Come programmatore non passo il tempo ad analizzare le mie applicazioni usando le varie prospettive, ma utilizzo l'unica visione (per me) sensata: quella del problema e della sua soluzione.
All'università ho imparato a programmare secondo singoli paradigmi (funzionale con Lisp/Scheme, logica con Prolog, procedurale in Pascal, a oggetti con C++ prima e con Java poi), ma questo m'è servito soltanto ad acquisire gli strumenti e l'approccio mentale ai problemi.
Per il resto quando programmo e utilizzo un linguaggio cerco di sfruttare tutti gli strumenti che mi mette a disposizione, facendo frutto degli studi effettuati in precedenza.
Detto ciò non capisco la difficoltà nell'osservare il fenomeno rappresentato per il solo fatto di avere usato più paradigmi.
Inoltre tu dici che il C++ offre 3 paradigmi di programmazione e questo crea confusione / incomprensibilità, ma quanti paradigmi offre Java? Quello a oggetti e quello modulare (perché Java avrebbe potuto benissimo intraprendere la via del C, dove imperano file di codice e relativi include), ma anche procedurale se permetti (chi m'impedisce di usare una sola classe "madre" quale contenitore di tutto il mio codice, scritto senza tenere in considerazione i "precetti" della POOO ?).
Inoltre Java non offre nemmeno una programmazione a oggetti "pura": non tutti i tipi di dati sono oggetti; tutt'altro. Tant'è che si vede roba come "int" e "Integer", tanto per fare un esempio.
Almeno il C# ha la possibilità di effettuare il "boxing" dei dati, quando serve, in maniera trasparente.
In Python, al contrario di entrambi e similmente a SmallTalk, qualunque cosa è un oggetto (perfino i tipi di dati), e questo modello ha certamente i suoi pregi.
6. I generici.
I generici hanno introdotto in Java il concetto di invarianza e contravarianza che, pur essendo assolutamente legittimo, sono meno intuitivi della covarianza.
Questi concetti non li conosco per cui non posso esprimere giudizi in merito.
Le chiusure introdurrano nel linguaggio una nuova forma sintattica per la dichiarazione di un tipo e, francamente, già averne due (interfaccia e classe) ha causato più di un imbarazzo,
Le closure esitono anche in Python, ma non so se si tratta della stessa cosa.
gli enumerativi e le annotazioni hanno appensantito la faccenda non di poco
L'implementazione degli enumerativi la trovo abbastanza elegante, ma l'impossibilità di poter usare direttamente l'enumerativo senza mettere il prefisso della sua classe lo trovo irritante (abituato come sono al Pascal).
e le chiusure saranno la goccia che farà traboccare il vaso. E' un pronostico. Da Java 7 la piattaforma inizierà il declino perchè i nuovi programmatori saranno indirizzati verso altre lingue.
Mah. Non so che dire. Io vedo Python che presenta diversi paradigmi, il linguaggio viene continuamente aggiornato e la sua popolarità & diffusione sono in continuo aumento.
7. In conclusione
Se questa è la sintesi, figuratevi com'era prima :D
Peccato. Mi sarebbe piaciuto leggere la tua storia critica sulla programmazione. :p
cdimauro
07-06-2007, 09:36
Questi esempi sono suggestivi ma un tantinello fuori dalla realtà. Chiedo a qualcuno dei miei ex colleghi qui presenti tanto per non fare la figura del solito alieno ma:
Quanti hello world vi è stato chiesto di scrivere quest'anno?
Quante sequenze di fibonacci avete mai dovuto scrivere per lavoro?
Sono più o meno del numero di quick-sort?
Non mi stupirei di tre zeri in sequenza.
Stai parlando di lavoro, quando quello voleva essere soltanto un esempio per far veder quanto è semplice programmare in Python rispetto a Java.
D'altra parte il tema del thread rimane sempre quello: la scelta del linguaggio per imparare a programmare, e da questo punto di vista, lo ripeterò ancora a rischio di risultare logorroico, Python è uno dei pochi che ha tutte le carte in regole per poter essere usato a scopo didattico senza causare traumi prematuri alla tenera mente di chi si approccia al mondo della programmazione.
Ovviamente, come avevo detto, sono sempre disponibile a fare degli esempi in merito e comparare le soluzioni in base ai vari linguaggio di programmazione. ;)
Per il resto, ti ho già detto che lo uso a lavoro da un bel po' di tempo, e di certo non mi sono limitato al classico "Hello, world". Ma non sono il solo, appunto.
cdimauro
07-06-2007, 09:43
puoi usare il C++ come se fosse C....sì....a patto di mandare letteralmente a belle donne la programmazione orientata ad oggetti e trasformando un linguaggio OO in un procedurale....
praticamente se leggessi un file *.cpp scritto con la logica del C inizierei a bestemmiare in tutte le lingue da me conosciute perchè significa non avere le idee chiare su quello che si sta facendo, significa tergiversare la frase di Stroustrup "C++ is a better C".
Il C++ NON introduce soltanto la programmazione a oggetti. Il C è stato arricchito con altri (utili) costrutti sintattici.
Tornando in topic, comunque, visto che non ti interessano C e C++ e che hai ristretto il campo a php e java....beh....ti consiglierei il java....
anche se, onestamente, ho iniziato con C e C++ e sono linguaggi che ti "formano"...se inizi a capire come implementare un algoritmo in C (o in un linguaggio funzionale) una volta assimilato il meccanismo la strada è in discesa...
Vito
Al contrario: per la formazione del programmatore si può fare benissimo a meno del "syntactic sugar" (et similia) di C/C++. Per questo Python è particolarmente indicato.
Altrimenti procedendo sullo stesso piano suggerirei di utilizzare l'assembly, e ancora meglio il linguaggio macchina e usando le tabelle degli opcode. :p
cdimauro
07-06-2007, 09:49
come dici pgi-bis il problema è nel programmatore che andrà a leggere il programma fra qualche anno.
Poi c'è da dire che se chi l'ha scritto è un manico, e chi lo va a leggere è manico pure, questi problemi non si dovrebbero avere.
Ma se si ragione per programmatori medi(bravi ma non geni), allora si potrebbero avere dei problemi.
Aggiungere potenza aggiungendo complessità non è sempre un bene. Se la si sa usare porta vantaggi, ma questo alza il livello di skill richiesto.
In effetti in java incominciare a ragionare sui generics complica parecchio le cose. Anche se poi chi va usare le funzioni generificate ha qualche vantaggio.
Ma il punto che voleva sottolineare marco.r è che l'uso di costrutti sintatti & vari paradigmi può portare a una SEMPLIFICAZIONE della complessità del codice, e questo (specialmente con Python) può portare anche a una migliore LEGGIBILITA', che tanto male non fa nell'ottica di chi dovrebbe poi rileggere il codice dopo un po' di tempo. ;)
Ovviamente quoto il discorso sul livello di skill, ma in generale i danni che può fare un programmatore poco esperto con Python sono più ridotti (quanto meno non vedrai nessun famigerato segmentation fault :asd: ).
Ma il punto che voleva sottolineare marco.r è che l'uso di costrutti sintatti & vari paradigmi può portare a una SEMPLIFICAZIONE della complessità del codice, e questo (specialmente con Python) può portare anche a una migliore LEGGIBILITA', che tanto male non fa nell'ottica di chi dovrebbe poi rileggere il codice dopo un po' di tempo. ;)
questo è probabile(e quello che si prefiggono i linguaggi di script). E' la commistione fra i generi che può(PUO') portare confusione.
Ovviamente quoto il discorso sul livello di skill, ma in generale i danni che può fare un programmatore poco esperto con Python sono più ridotti (quanto meno non vedrai nessun famigerato segmentation fault :asd: ).
il segmentation fault dovrebbero vietarlo per legge. O almeno i linguaggi che lo permettono :asd: Se poi qualcuno riesce anche a impedirmi i null pointer lo faccio santo.
^TiGeRShArK^
07-06-2007, 12:02
Questi esempi sono suggestivi ma un tantinello fuori dalla realtà. Chiedo a qualcuno dei miei ex colleghi qui presenti tanto per non fare la figura del solito alieno ma:
Quanti hello world vi è stato chiesto di scrivere quest'anno?
Quante sequenze di fibonacci avete mai dovuto scrivere per lavoro?
Sono più o meno del numero di quick-sort?
Non mi stupirei di tre zeri in sequenza.
0 ovviamente..
però per scrivere l'equivalente semplificato del grep di linux in modo da evitare l'ODIOSA limitazione della ricerca di windows che cerca solo nei files che conosce, mi sono trovato meglio a scriverlo in python:
import os
import sys
import string
def printable(message):
return "".join(char for char in message if char in string.printable)
files = os.walk(".")
for f in files:
for name in f[2]:
filename = os.path.join(f[0], name)
file = open(filename, "r")
for line in file:
if line.upper().find(sys.argv[1].upper()) != -1:
print filename + " " + printable(line)
Inutile dire che in Java sarebbe venuto MOLTO + complesso :p
come disse qualcuno: "The right tool for the right job" :p
^TiGeRShArK^
07-06-2007, 12:10
Almeno il C# ha la possibilità di effettuare il "boxing" dei dati, quando serve, in maniera trasparente.
ehmm..
auto-boxing e auto-unboxing sono possibili anke con java 5..
quanto meno in determinate situazioni.. non mi ricordo se in tutte :p
^TiGeRShArK^
07-06-2007, 12:12
Ma il punto che voleva sottolineare marco.r è che l'uso di costrutti sintatti & vari paradigmi può portare a una SEMPLIFICAZIONE della complessità del codice, e questo (specialmente con Python) può portare anche a una migliore LEGGIBILITA', che tanto male non fa nell'ottica di chi dovrebbe poi rileggere il codice dopo un po' di tempo. ;)
Ovviamente quoto il discorso sul livello di skill, ma in generale i danni che può fare un programmatore poco esperto con Python sono più ridotti (quanto meno non vedrai nessun famigerato segmentation fault :asd: ).
però secondo me Ruby è + leggibile di Python :Prrr:
Inoltre Java non offre nemmeno una programmazione a oggetti "pura": non tutti i tipi di dati sono oggetti; tutt'altro. Tant'è che si vede roba come "int" e "Integer", tanto per fare un esempio.
Almeno il C# ha la possibilità di effettuare il "boxing" dei dati, quando serve, in maniera trasparente.
il boxing è stato introdotto in java dalla 5.0 in poi
yorkeiser
07-06-2007, 13:27
Ma anche no.
Me lo vuoi rovinare fin da piccolo ? :D
Il C apre la mente e insegna tante di quelle cose che in altri linguaggi (escluso l'assembly) purtroppo non vedrai mai perchè di più alto livello (giusto per dirne una, la gestione della memoria). Sono altre le cose che rovinano la mente (ad esempio l'orrendo accrocchio C#/ASP :) o peggio il fatto che oggi il simpatico Sourcesafe ha deciso di sua sponte di cestinarmi le modifiche degli ultimi 3 giorni... non c'è che dire, Microzozz = affidabilità)
Per l'amor del cielo, "indecente" era in senso metaforico: è chiaro che se leggo la documentazione Python non vedo un maniaco che si apre il soprabito nel parco.
Il senso delle pecore era che non puoi portare l'uso frequente di qualcosa a sostegno della sua idoneità a fare quelle cose perchè l'idea che una cosa fatta da molti sia una cosa giusta è una fallacia. Per inciso non è che le pecore siano stupide: è solo che ogni tanto fanno 'sta cosa di cui non conosciamo le ragione (lo fanno davvero).
La torta della nonna simboleggiava l'idea che il programmatore dalla volontà d'acciaio che tutto fa e sempre bene è poco aderente alla realtà perchè in realtà la volontà è uno dei tanti fattori coinvolti nella creazione di software. Voleva essere un luogo comune perchè lo è tanto quanto l'idea del programmatore dei sogni.
La varianza è il rapporto di compatibilità che sussiste tra un valore V parametrico in T e un valore V' := V parametrico in T'. Se V è sottotipo di V' per ogni T sottotipo di T' allora il rapporto tra i due tipi è covariante. Se V è sottotipo di V' per ogni T' sottotipo di T allora il rapporto tra i due tipi è contravariante. Se V non è mai sottotipo di V' per qualsiasi T e T' allora il rapporto tra i due tipi è invariante.
E' il famoso caso della Lista<Object> che non è supertipo della Lista<String> (invariante), mentre la Lista<? extends Object> è supertipo della Lista<String> (Object :> String, covariante) e la Lista<? super String> è supertipo della Lista<Object> (String <: Object, contravariante). Niente di insormontabile, per carità. Però in un contesto in cui di norma il gatto è una specie di animale introdurre il fatto che ci sono gatti che non sono animali e a volte gli animali sono specie di gatti diventa complicato.
Io penso che la documentazione di Python sia scandalosa
me|tà|fo|ra
s.f.
1 TS ret., ling., figura retorica che consiste nel trasferire il significato di una parola o di un’espressione dal senso proprio a un altro figurato che abbia con il primo un rapporto di somiglianza (per es.: sei un leone, sei forte come un leone)
2 CO estens., parola, espressione figurata
Polirematiche
in, per metafora loc.avv. CO in modo allusivo, sotto metafora.
perchè la javadoc ha innalzato il livello sufficienza ed un linguaggio più moderno dovrebbe pretendere di fare meglio dei suoi predecessori. Sarò pazzo ma io mi aspetto che la tecnologia progredisca. E' sufficiente perchè se mi dici che serve alla bisogna mi fido. Ma lo vedi anche tu che quella roba è priva di organizzazione visiva, non ha struttura. E' un singolo enorme testo con degli hyperlink. La parte migliore della documentazione java è quel quadratone cliccabile che c'è all'inizio, perchè tenta di comunicare visivamente l'organizzazione del documento. Perchè non fare di più?
E' vero che Java, come C, consentono l'uso di prospettive diverse. Ma lo fanno talmente male che, a mio avviso, è difficile uscire dai binari. Se vuoi interpretare un fenomeno come una funzione matematica che correla l'input e l'output puoi farlo. Ma devi prima necessariamente creare delle classi e da quelle classi ottenere esplicitamente delle istanze. Quando introdurranno le chiusure consentiranno la creazione di oggetti (perchè saranno istanze di una classe, come gli enumarativo sono istanze Enum) con una sintassi diversa da quella che è usabile per creare altri oggetti. Questa mancanza di uniformità, di regolarità, a mio avviso è un problema.
Quando parlo di prospettiva orientata agli oggetti, prospettiva funzionale, prospettiva procedurale, io faccio sempre riferimento all'immortale
Madsen-Petersen-Nygaard (ftp://ftp.daimi.au.dk/pub/beta/betabook/betabook.pdf)
Lo dico perchè la modularità, che pure è certamente una caratteristica dei linguaggi di programmazione, non è una prospettiva, secondo la definizione di prospettiva di Nygaard.
Da ultimo: non sto dicendo o Java o morte. Prima o poi arriverà qualcosa che lo rimpiazzerà. Alcuni (tra cui Gafter) dicono che sarà Scala. Spero di no perchè anche questo è pluri-prospettico. Mi aspetto però che sia qualcosa di complessivamente migliore. Non penso che python o ruby lo siano e se qualcuno me lo chiede be', glielo dico. Ma tenete conto che è solo una mia opinione.
Mamma mia! Sicuri che non siamo nella sezione: "Filosofia" ??:D
^TiGeRShArK^
07-06-2007, 13:46
Il C apre la mente e insegna tante di quelle cose che in altri linguaggi (escluso l'assembly) purtroppo non vedrai mai perchè di più alto livello (giusto per dirne una, la gestione della memoria). Sono altre le cose che rovinano la mente (ad esempio l'orrendo accrocchio C#/ASP :) o peggio il fatto che oggi il simpatico Sourcesafe ha deciso di sua sponte di cestinarmi le modifiche degli ultimi 3 giorni... non c'è che dire, Microzozz = affidabilità)
e ke te ne frega di gestire la memoria se tanto ci pensa il Garbage Collector che sicuramente lo fa meglio di te? :p
nel 99% delle applicazioni la gestione della memoria è solo un'immensa rottura di palle che ti costringe a seghe mentali inusitate piuttosto che a concentrarti sul tuo effettivo problema.
Che me ne frega di gestire la menoria?
Non mi pagano per quello.
Mi pagano per scrivere un applicazione che funzioni.
Che poi io abbia gestito la memoria o l'abbia fatto il GC a loro non frega assolutamente una mazza.
E sicuramente se non dovrò preoccuparmene impiegherò il mio tempo in modo ben + costruttivo piuttosto che nel cercare un sicuro memory leak.
cdimauro
07-06-2007, 14:10
questo è probabile(e quello che si prefiggono i linguaggi di script). E' la commistione fra i generi che può(PUO') portare confusione.
Chiaro. Posso anche abusare della programmazione funzionale quando dovrei usare quella a oggetti per un determinato compito, ad esempio. L'importante è rendersene conto e ravvedersi. :D
il segmentation fault dovrebbero vietarlo per legge. O almeno i linguaggi che lo permettono :asd:
In questo caso ne rimarrebbero ben pochi... :D
Se poi qualcuno riesce anche a impedirmi i null pointer lo faccio santo.
In Python non ci sono. Per essere precisi c'è l'oggetto None (con significato simile a null), ma di puntatori non c'è nemmeno l'ombra. :sofico:
cdimauro
07-06-2007, 14:20
ehmm..
auto-boxing e auto-unboxing sono possibili anke con java 5..
quanto meno in determinate situazioni.. non mi ricordo se in tutte :p
Nemmeno io adesso (e qui rispondo anche a thebol): è passato troppo tempo dall'ultima volta che ho lavorato con Java (con Diamonds, per la precisione).
però secondo me Ruby è + leggibile di Python :Prrr:
In Python non potresti mai fare cose così:
class LearnToProgramTutorial
@@HLINE = '<div class="fleur"><div class="fleur_stem"> </div></div>'
# If you decide to change coloring or formatting of this tutorial,
# you'll want to change these to something appropriate.
@@NUMBER_COLOR = 'green'
@@STRING_COLOR = 'red'
@@KEYWORD_COLOR = 'blue'
@@INPUT_DESC = 'white box'
@@OUTPUT_DESC = 'blue box'
# Delimiter for input to sample code, since it comes out
# right alongside the output. Must not be html escapable.
@@INPUT = "%%%'f'o'o'"
def initialize (cgi)
@cgi = cgi
@depth = 0
@page = []
# 'format' is a hidden page for testing formatting.
@chapters = {'format'=>['Formatting Page', :generateFormattingPage]}
@chapters['00' ] = ['Getting Started', :generateSetup]
@chapters['01' ] = ['Numbers', :generateNumbers]
@chapters['02' ] = ['Letters', :generateLetters]
@chapters['03' ] = ['Variables and Assignment', :generateVariables]
@chapters['04' ] = ['Mixing It Up', :generateConversion]
@chapters['05' ] = ['More About Methods', :generateMethods]
@chapters['06' ] = ['Flow Control', :generateFlowControl]
@chapters['07' ] = ['Arrays and Iterators', :generateArrays]
@chapters['08' ] = ['Writing Your Own Methods', :generateDefMethod]
@chapters['09' ] = ['Classes', :generateClasses]
@chapters['10' ] = ['Blocks and Procs', :generateBlocksProcs]
@chapters['11' ] = ['Beyond This Tutorial', :generateBeyond]
end
end
:asd:
Comunque alcune scelte stilistiche non mi piacciono. Ad esempio non sopporto l'uso di @ e @@ come prefisso delle variabili: non lo digerisco proprio (mi basta già il PERL). :(
ma non capisco io ho iniziato quest'anno a scuola con c/c++ e mi sono trovato benissimissimo.. perchè li sconsigliate?
cdimauro
07-06-2007, 14:24
Il C apre la mente e insegna tante di quelle cose che in altri linguaggi (escluso l'assembly) purtroppo non vedrai mai perchè di più alto livello (giusto per dirne una, la gestione della memoria).
Guarda, se il C per bene che vada la chiude la mente, su un paradigma di programmazione che può portare soltanto a danni (vedi segmentation fault).
Un buon programmatore deve imparare... a programmare! Non a complicarsi la vita, ivi compreso la conoscenza di dettagli sul sistema o addirittura sull'architettura su cui sta girando.
Sono altre le cose che rovinano la mente (ad esempio l'orrendo accrocchio C#/ASP :)
Vabbé. Adesso ci dirai cosa ci sarebbe di orrendo nel C#...
o peggio il fatto che oggi il simpatico Sourcesafe ha deciso di sua sponte di cestinarmi le modifiche degli ultimi 3 giorni... non c'è che dire, Microzozz = affidabilità)
Adesso partiamo pure con le leggende metropolitane... :rolleyes:
Vabbé. Adesso ci dirai cosa ci sarebbe di orrendo nel C#...
Il preprocessore.
yorkeiser
07-06-2007, 14:47
Guarda, se il C per bene che vada la chiude la mente, su un paradigma di programmazione che può portare soltanto a danni (vedi segmentation fault).
Se lo dici tu... Dovresti però conoscerlo prima di giudicare :)
Un buon programmatore deve imparare... a programmare! Non a complicarsi la vita, ivi compreso la conoscenza di dettagli sul sistema o addirittura sull'architettura su cui sta girando.
Vabbé. Adesso ci dirai cosa ci sarebbe di orrendo nel C#...
Tutti sono capaci di mettere in croce 4 linee di codice: quello che differenzia un buon programmatore casomai è l'ottimizzazione, sia in termini di spazio che di velocità.
Dal C ti muovi con facilità irrisoria verso qualsiasi tipo di linguaggio. Mediamente chi ha le basi non fatica a muoversi verso l'alto. Il percorso inverso, piuttosto, mi pare un tantino più difficoltoso.
Per quanto riguarda .NET, è la solita operazione commerciale di casa Microcess, in questo caso volta a contrastare il dominio di Sun/Java in ambito sviluppo, e il C# di per sè è una brutta copia di Java. Aggiungo, dal mio punto di vista, che si integra pessimamente con ASP (mi sembrano la maionese con la nutella) e la palese instabilità di IIS in confronto a webserver un attimino più seri (e non cito Apache per rispetto).
Adesso partiamo pure con le leggende metropolitane... :rolleyes:
[/QUOTE]
Ma quali leggende, mi è successo stamattina (e non è la prima volta). Non è che la roba Microsoft vada famosa per l'affidabilità del resto, e tranquillo che non sono pagato nè da Sun nè da Torvalds
cdimauro
07-06-2007, 15:00
Per l'amor del cielo, "indecente" era in senso metaforico: è chiaro che se leggo la documentazione Python non vedo un maniaco che si apre il soprabito nel parco.
ROTFL. Era chiaro anche a me che l'accezione non fosse esattamente quella letterale. ;) Diciamo che avevo colto qualcosa come "impresentabile".
Il senso delle pecore era che non puoi portare l'uso frequente di qualcosa a sostegno della sua idoneità a fare quelle cose perchè l'idea che una cosa fatta da molti sia una cosa giusta è una fallacia. Per inciso non è che le pecore siano stupide: è solo che ogni tanto fanno 'sta cosa di cui non conosciamo le ragione (lo fanno davvero).
OK, ma nessuno qui ha portato la frequenza di utilizzo come parametro di paragone. Da questo punto di vista il C spazzerebbe via tutti.
Python non è "bello/fico/ecc. ecc." soltanto perché lo usano un milione di persone. Queste cose non si misurano "a chili", com'è anche vero che non si può giudicare un linguaggio poco adatto al campo lavorativo in base a dei pregiudizi.
La torta della nonna simboleggiava l'idea che il programmatore dalla volontà d'acciaio che tutto fa e sempre bene è poco aderente alla realtà perchè in realtà la volontà è uno dei tanti fattori coinvolti nella creazione di software. Voleva essere un luogo comune perchè lo è tanto quanto l'idea del programmatore dei sogni.
Ovvio che le condizioni ideali non sussistono neppure per il più bravo programmatore, ma la situazione non è nemmeno diametralmente opposta.
Diciamo che un buon programmatore tira fuori un buon codice, anche quando ha l'incubo delle scadenze. Questo non significa che non ci siano bug / difetti e quant'altro.
La varianza è il rapporto di compatibilità che sussiste tra un valore V parametrico in T e un valore V' := V parametrico in T'. Se V è sottotipo di V' per ogni T sottotipo di T' allora il rapporto tra i due tipi è covariante. Se V è sottotipo di V' per ogni T' sottotipo di T allora il rapporto tra i due tipi è contravariante. Se V non è mai sottotipo di V' per qualsiasi T e T' allora il rapporto tra i due tipi è invariante.
E' il famoso caso della Lista<Object> che non è supertipo della Lista<String> (invariante), mentre la Lista<? extends Object> è supertipo della Lista<String> (Object :> String, covariante) e la Lista<? super String> è supertipo della Lista<Object> (String <: Object, contravariante).
Grazie per la spiegazione.
Niente di insormontabile, per carità. Però in un contesto in cui di norma il gatto è una specie di animale introdurre il fatto che ci sono gatti che non sono animali e a volte gli animali sono specie di gatti diventa complicato.
In che modo potrebbe succedere coi generic (che era l'argomento in cui è apparso il concetto di varianza)?
Io penso che la documentazione di Python sia scandalosa
me|tà|fo|ra
s.f.
1 TS ret., ling., figura retorica che consiste nel trasferire il significato di una parola o di un’espressione dal senso proprio a un altro figurato che abbia con il primo un rapporto di somiglianza (per es.: sei un leone, sei forte come un leone)
2 CO estens., parola, espressione figurata
Polirematiche
in, per metafora loc.avv. CO in modo allusivo, sotto metafora.
perchè la javadoc ha innalzato il livello sufficienza ed un linguaggio più moderno dovrebbe pretendere di fare meglio dei suoi predecessori. Sarò pazzo ma io mi aspetto che la tecnologia progredisca. E' sufficiente perchè se mi dici che serve alla bisogna mi fido. Ma lo vedi anche tu che quella roba è priva di organizzazione visiva, non ha struttura. E' un singolo enorme testo con degli hyperlink. La parte migliore della documentazione java è quel quadratone cliccabile che c'è all'inizio, perchè tenta di comunicare visivamente l'organizzazione del documento. Perchè non fare di più?
Perché SI PUO' FARE DI PIU'. Se si vuole. ;)
Anche in python c'è un concetto simile al javadoc, si chiama doc string, ed esistono dei tool per generare automaticamente la documentazione, anche in formato HTML.
Anzi, con Python in dotazione c'è pydoc, come attesta la (scandolosa :D) documentazione: http://www.python.org/doc/2.4/lib/module-pydoc.html ;)
Con SPE puoi vedere immediatamente la pagina HTML, clickando sull'apposito tab (in ordine ci sono tre tab: quello col sorgente, quello con lo scherma UML e quello col pydoc in HTML).
E' vero che Java, come C, consentono l'uso di prospettive diverse. Ma lo fanno talmente male che, a mio avviso, è difficile uscire dai binari. Se vuoi interpretare un fenomeno come una funzione matematica che correla l'input e l'output puoi farlo. Ma devi prima necessariamente creare delle classi e da quelle classi ottenere esplicitamente delle istanze. Quando introdurranno le chiusure consentiranno la creazione di oggetti (perchè saranno istanze di una classe, come gli enumarativo sono istanze Enum) con una sintassi diversa da quella che è usabile per creare altri oggetti. Questa mancanza di uniformità, di regolarità, a mio avviso è un problema.
OK, è chiaro. Python soffre di queste problematiche (legate alle closure).
Consente di utilizzare più paradigmi di programmazione, come fanno altri linguaggi (Java incluso), ma non certamente per una questione "quantitativa" (per la serie: mettiamo nel calderone quante più cose possibili. Il modello di sviluppo di PHP, PERL et similia, per intenderci. :asd: ).
Quando parlo di prospettiva orientata agli oggetti, prospettiva funzionale, prospettiva procedurale, io faccio sempre riferimento all'immortale
Madsen-Petersen-Nygaard (ftp://ftp.daimi.au.dk/pub/beta/betabook/betabook.pdf)
Lo dico perchè la modularità, che pure è certamente una caratteristica dei linguaggi di programmazione, non è una prospettiva, secondo la definizione di prospettiva di Nygaard.
Quando avrò tempo me lo divorerò. Grazie. :)
Da ultimo: non sto dicendo o Java o morte. Prima o poi arriverà qualcosa che lo rimpiazzerà. Alcuni (tra cui Gafter) dicono che sarà Scala. Spero di no perchè anche questo è pluri-prospettico. Mi aspetto però che sia qualcosa di complessivamente migliore. Non penso che python o ruby lo siano e se qualcuno me lo chiede be', glielo dico. Ma tenete conto che è solo una mia opinione.
Come quella di tutti e mi sembra perfettamente legittimo. D'altra parte non esiste una definizione oggettiva di linguaggio "migliore" di un altro.
Attualmente la mia opinione è che Python, per come è strutturato, è un linguaggio didatticamente valido, ma la cui espressività consente di usarlo anche in ambito lavorativo.
cdimauro
07-06-2007, 15:01
Il preprocessore.
Basta non usarlo (se si può). :asd:
^TiGeRShArK^
07-06-2007, 15:03
Se lo dici tu... Dovresti però conoscerlo prima di giudicare :)
vedi che praticamente tutti qui lo conosciamo sufficientemente il C per odiarlo dopo aver visto che c'è di MOLTO meglio ;)
Tutti sono capaci di mettere in croce 4 linee di codice: quello che differenzia un buon programmatore casomai è l'ottimizzazione, sia in termini di spazio che di velocità.
Assolutamente no.
L'ottimizzazione è proprio l'ultimo dei problemi.
Anzi ottimizzare è spesso controproducente e andrebbe fatto solo come ultimo step prima del rilascio perchè l'ottimizzazione ti fa letteralmente crollare la leggibilità e la manutebilità del codice e andrebbe fatta solo nelle piccolissime porzioni veramente critiche.
Inoltre tanto per parafrasare qualcuno un pò + famoso di noi due: "Every fool can write a code that machines can understand, only good programmers can write a code that also human can understand".
E questa imho è la vera differenza tra un programmatore buono ed uno pessimo.
Non certo la capacità di ottimizzare.
Dal C ti muovi con facilità irrisoria verso qualsiasi tipo di linguaggio. Mediamente chi ha le basi non fatica a muoversi verso l'alto. Il percorso inverso, piuttosto, mi pare un tantino più difficoltoso.
Assolutamente no.
Cambiare la mentalità della programmazione procedurale dopo anni e anni è un vero e proprio bagno di sangue.
Imparare ad oggetti è un casino partendo da quella logica perchè ti condiziona a scrivere codice che tutto è tranne che codice Object Oriented.
Quindi per quale masochistico motivo imparare la programmazione procedurale se poi cmq devi fare TABULA RASA per imparare quella ad oggetti?
Per quanto riguarda .NET, è la solita operazione commerciale di casa Microcess, in questo caso volta a contrastare il dominio di Sun/Java in ambito sviluppo, e il C# di per sè è una brutta copia di Java. Aggiungo, dal mio punto di vista, che si integra pessimamente con ASP (mi sembrano la maionese con la nutella) e la palese instabilità di IIS in confronto a webserver un attimino più seri (e non cito Apache per rispetto).
Ma quali leggende, mi è successo stamattina (e non è la prima volta). Non è che la roba Microsoft vada famosa per l'affidabilità del resto, e tranquillo che non sono pagato nè da Sun nè da Torvalds
E a me accadono continuamente problemi con macchine linux o hp/ux :asd:
cdimauro
07-06-2007, 15:12
Se lo dici tu... Dovresti però conoscerlo prima di giudicare :)
L'ultima volta che ho usato il C è stato per sviluppare un decoder JPEG 2000 per conto dell'STMicroelectronics, per cui "qualcosina" sono riuscita a farla con questo linguaggio, e di segmentation fault ne ho avuti a non finire (sono un incubo).
Tutti sono capaci di mettere in croce 4 linee di codice: quello che differenzia un buon programmatore casomai è l'ottimizzazione, sia in termini di spazio che di velocità.
ROTFL. Lasciamo perdere che è meglio:
"First make it work, THEN make it better" ;)
Dal C ti muovi con facilità irrisoria verso qualsiasi tipo di linguaggio.
Ho i miei forti dubbi, visto che ti offre UN solo paradigma di programmazione, e non dei migliori.
Mediamente chi ha le basi non fatica a muoversi verso l'alto. Il percorso inverso, piuttosto, mi pare un tantino più difficoltoso.
Per imparare è meglio partire dall'alto e, semmai nella vita dovesse essere proprio necessario (e spero proprio di no :p), scendere verso il basso.
In soldoni: serve la mentalità del programmatore, e quella te la fai molto più velocemente con un linguaggio di livello più elevato rispetto a roba come il C.
Altrimenti, come dicevo prima, usando lo stesso "metro", sarebbe molto meglio partire direttamente con linguaggio macchina e la tavola degli opcode del processore. :D
Per quanto riguarda .NET, è la solita operazione commerciale di casa Microcess, in questo caso volta a contrastare il dominio di Sun/Java in ambito sviluppo, e il C# di per sè è una brutta copia di Java.
Non hai la benché minima idea del progetto .NET di C#, che è soltanto UN linguaggio che supporta questo framework. Documentati prima di lasciarti andare a leggende metropolitane trite e ritrite che purtroppo circolano ancora...
Aggiungo, dal mio punto di vista, che si integra pessimamente con ASP (mi sembrano la maionese con la nutella) e la palese instabilità di IIS in confronto a webserver un attimino più seri (e non cito Apache per rispetto).
C'è gente che sviluppa tranquillamente in ASP/.NET e IIS.
Per la cronaca, Apache lo uso molto spesso a lavoro (anzi, c'ho sviluppato pure dei server e GUI web con mod_python).
Ma quali leggende, mi è successo stamattina (e non è la prima volta). Non è che la roba Microsoft vada famosa per l'affidabilità del resto, e tranquillo che non sono pagato nè da Sun nè da Torvalds
Quindi vorresti portare il tuo esempio e generalizzare? Allora posso fare tranquillamente anch'io la stessa cosa. Anzi, se vai a cercarti i messaggi che ho scritto (anche nella sezione Linux) ne vedrai di belle sulla mia esperienza col s.o. di Linus.
Comunque questo è OT: qui si parlava di iniziare a programmare.
yorkeiser
07-06-2007, 15:35
L'ultima volta che ho usato il C è stato per sviluppare un decoder JPEG 2000 per conto dell'STMicroelectronics, per cui "qualcosina" sono riuscita a farla con questo linguaggio, e di segmentation fault ne ho avuti a non finire (sono un incubo).
ROTFL. Lasciamo perdere che è meglio:
"First make it work, THEN make it better" ;)
Ho i miei forti dubbi, visto che ti offre UN solo paradigma di programmazione, e non dei migliori.
Per imparare è meglio partire dall'alto e, semmai nella vita dovesse essere proprio necessario (e spero proprio di no :p), scendere verso il basso.
In soldoni: serve la mentalità del programmatore, e quella te la fai molto più velocemente con un linguaggio di livello più elevato rispetto a roba come il C.
Altrimenti, come dicevo prima, usando lo stesso "metro", sarebbe molto meglio partire direttamente con linguaggio macchina e la tavola degli opcode del processore. :D
Non hai la benché minima idea del progetto .NET di C#, che è soltanto UN linguaggio che supporta questo framework. Documentati prima di lasciarti andare a leggende metropolitane trite e ritrite che purtroppo circolano ancora...
C'è gente che sviluppa tranquillamente in ASP/.NET e IIS.
Per la cronaca, Apache lo uso molto spesso a lavoro (anzi, c'ho sviluppato pure dei server e GUI web con mod_python).
Quindi vorresti portare il tuo esempio e generalizzare? Allora posso fare tranquillamente anch'io la stessa cosa. Anzi, se vai a cercarti i messaggi che ho scritto (anche nella sezione Linux) ne vedrai di belle sulla mia esperienza col s.o. di Linus.
Comunque questo è OT: qui si parlava di iniziare a programmare.
Che dirti, il mondo è bello perchè è vario ed ognuno ha la sua visione delle cose... Io resto dell'idea che le basi della programmazione si imparano a basso livello (non a caso nella stragrande maggioranza delle facoltà italiane fondamenti di informatica si fa in c, non in .NET; ma ovviamente anche il sistema educativo italiano sarà la solita leggenda metropolitana :)), poi si è liberi di migrare dove meglio si crede. Il c NON genera segmentation fault a caso, lì si entra nello specifico della tua applicazione e di ciò che scrivevi. Comunque, è giusto che ognuno abbia la sua visione e in qualsiasi caso non credo che questo scambio di idee sia OT, anzi
Si può fare di più ma non s'è fatto. Spero che si faccia, se si fa per Python tanto meglio, non mi è certo antipatico per partito preso.
Prima dei generici in Java non c'era la necessità di parlare di varianza. L'unica roba variante erano gli array. Lo facevano malissimo (un array Java è covariante in compilazione e invariante in esecuzione, roba da mal di testa).
Gli array erano l'unica eccezione. L'unica stramberia. Adessa in Java 5 c'è la questione del "cosa ci metto". Perchè se conosco il linguaggio di programmazione Java allora devo anche sapere cosa diamine posso assegnare a una variabile il cui tipo è:
Pippo<? super Comparable<Pippo<? extends String>>> vaffa;
Per quale T la variabile nbagno il cui tipo è Pippo<T> risulta assegnabile a vaffa? E' un "semplice" problema di varianza.
Ora, io non ho alcuna remora nel dirvi che per stabilire cosa diamine sia compatibile in assegnamento con "vaffa" dovrei prendere carta e penna e mettermi lì per un venti minuti a scrivere insiemi e sottoinsiemi. Mi fido se mi dicono che è l'apoteosi della teoria dei tipi, che adesso Java è "type-safe". Ma per la miseria se per evitare di scrivere:
if(ciccio instanceof Pippo) {
Pippo p = (Pippo)ciccio;
}
devo ammazzarmi di divisioni ho qualche dubbio che qui si stia parlano di evoluzione positiva del linguaggio.
E ho un cattivo presentimento anche per le chiusure. Anzi, la quasi certezza che mi troverò a dover leggere cose tipo:
fun(bongo => tricchetracck : each brik<T>, brak<E>)#(la patatina tira)
Il tutto per evitare di scrivere:
public interface Funzione {
Object esegui(Object... parametri);
}
yorkeiser
07-06-2007, 15:47
vedi che praticamente tutti qui lo conosciamo sufficientemente il C per odiarlo dopo aver visto che c'è di MOLTO meglio ;)
Non credo che una o due persone implichino il "tutti".
Ovvio che c'è molto meglio (non il .NET, per l'amor di dio:)), sono passati diversi anni del resto: qui si sta parlando di linguaggi per iniziare, ponendo l'accento quindi sul valore formativo del linguaggio, non di quello che permette di realizzare effettivamente. Neanch'io oggi mi sognerei mai di fare un'applicazione complessa in c (anche se conosco diversi team chi ci lavorano tuttora e non si lamentano, anzi), ma se qualcuno mi chiede il miglior linguaggio dal punto di vista FORMATIVO resto sempre della stessa idea. Naturalmente, ognuno si basa sulle proprie esperienze ed ogni scelta può avere i suoi punti di forza o meno
^TiGeRShArK^
07-06-2007, 16:00
Che dirti, il mondo è bello perchè è vario ed ognuno ha la sua visione delle cose... Io resto dell'idea che le basi della programmazione si imparano a basso livello (non a caso nella stragrande maggioranza delle facoltà italiane fondamenti di informatica si fa in c, non in .NET; ma ovviamente anche il sistema educativo italiano sarà la solita leggenda metropolitana :)), poi si è liberi di migrare dove meglio si crede. Il c NON genera segmentation fault a caso, lì si entra nello specifico della tua applicazione e di ciò che scrivevi. Comunque, è giusto che ognuno abbia la sua visione e in qualsiasi caso non credo che questo scambio di idee sia OT, anzi
Lasciamo stare quello che insegnano all'università please :asd:
E cmq anche lì finalmente le cose stanno cambiando iniziando col Java e con linguaggi + ad alto livello...anke se ce ne hanno messo di tempo x rendersi conto ke l'era del procedurale era finita... :rolleyes:
^TiGeRShArK^
07-06-2007, 16:07
Non credo che una o due persone implichino il "tutti".
Ovvio che c'è molto meglio (non il .NET, per l'amor di dio:)), sono passati diversi anni del resto: qui si sta parlando di linguaggi per iniziare, ponendo l'accento quindi sul valore formativo del linguaggio, non di quello che permette di realizzare effettivamente. Neanch'io oggi mi sognerei mai di fare un'applicazione complessa in c (anche se conosco diversi team chi ci lavorano tuttora e non si lamentano, anzi), ma se qualcuno mi chiede il miglior linguaggio dal punto di vista FORMATIVO resto sempre della stessa idea. Naturalmente, ognuno si basa sulle proprie esperienze ed ogni scelta può avere i suoi punti di forza o meno
Come linguaggio formativo PROCEDURALE il C è ottimo.
Ma siamo nell'era della programmazione ad oggetti.. quindi perchè perdere del tempo a studiare un linguaggio procedurale? :p
yorkeiser
07-06-2007, 16:18
Lasciamo stare quello che insegnano all'università please :asd:
E cmq anche lì finalmente le cose stanno cambiando iniziando col Java e con linguaggi + ad alto livello...anke se ce ne hanno messo di tempo x rendersi conto ke l'era del procedurale era finita... :rolleyes:
Uhm, non confondere il paradigma con il livello del linguaggio: il c++, nonostante il paradigma ad oggetti, permette di scrivere tranquillamente a basso livello
yorkeiser
07-06-2007, 16:32
Come linguaggio formativo PROCEDURALE il C è ottimo.
Ma siamo nell'era della programmazione ad oggetti.. quindi perchè perdere del tempo a studiare un linguaggio procedurale? :p
Perchè non è una perdita di tempo. Il paradigma è un aspetto, il linguaggio un altro, non sono intrinsecamente legati. Ovvio che un linguaggio ad oggetti deve mettere a disposizione delle funzionalità (anche a livello sintattico) che permettano l'estensione agli oggetti, ma secondo me è un errore mischiare i due concetti. Se voglio posso scrivere (sbagliando) un programma Java in maniera totalmente procedurale. Concordo con te che l'estensione ad oggetti sia un'ottima innovazione (soprattutto in ambito di riusabilità, per come la vedo io), ma il paradigma da utilizzare riguarda più la fase di progettazione che la scrittura in sè e per sè. E credo che una persona alle prime armi debba prima imparare a scriverle le applicazioni e, soprattutto, a capire su che cosa girano e cosa fanno realmente; imparare a progettarle, sulla base ANCHE di queste conoscenze, lo vedo più come un (fondamentale) passo successivo
^TiGeRShArK^
07-06-2007, 16:39
Perchè non è una perdita di tempo. Il paradigma è un aspetto, il linguaggio un altro, non sono intrinsecamente legati. Ovvio che un linguaggio ad oggetti deve mettere a disposizione delle funzionalità (anche a livello sintattico) che permettano l'estensione agli oggetti, ma secondo me è un errore mischiare i due concetti. Se voglio posso scrivere (sbagliando) un programma Java in maniera totalmente procedurale. Concordo con te che l'estensione ad oggetti sia un'ottima innovazione (soprattutto in ambito di riusabilità, per come la vedo io), ma il paradigma da utilizzare riguarda più la fase di progettazione che la scrittura in sè e per sè. E credo che una persona alle prime armi debba prima imparare a scriverle le applicazioni e, soprattutto, a capire su che cosa girano e cosa fanno realmente; imparare a progettarle, sulla base ANCHE di queste conoscenze, lo vedo più come un (fondamentale) passo successivo
no perchè se impari a scrivere codice in maniera procedurale avrai una forma mentis profondamente diversa al codice Object Oriented.
E tranquillo che io ci sono passato e so cosa vuol dire ;)
Cmq il Java è + indicato del C++ perchè ti permette di concentrarti sugli aspetti veramente importanti, ovvero sugli algoritmi e su come la tua applicazione debba funzionarem piuttosto che perdere tempo per imparare l'uso dei puntatori o la gestione della memoria.
Quelle sono cose assolutamente inutile per quanto riguarda la didattica perchè anzikè farti affrontare i problemi che ti interessano ti fanno correre dietro a cose inutili.
Mio dio cosa ho scatenato :D
Tornando al discorso originale (che non è: quale è il miglior linguaggio di programmazione) mi ispira il PHP perché avendo usato spesso forum phpBB so bene o male cosa potrei fare e poi mi sembra che il supporto sia massiccio...
viceversa con altri non saprei cosa fare... un principiante con python o java cosa potrebbe fare di interessante?
wizard_at
07-06-2007, 17:16
ciao
vista la tua conoscenza del Pascal ti consiglierei C++ per poi passare a Java o C#.
con il c++ potresti fare molto e capire come muoverti in ambieti a classi e con programmazione ad oggetti.
ciao
un principiante con python o java cosa potrebbe fare di interessante?
Qualsiasi cosa tu possa trovare "divertente".
Java 6 Applet (http://www.tukano.it/jrabbit/jrabbit.html)
cdimauro
07-06-2007, 20:13
Che dirti, il mondo è bello perchè è vario ed ognuno ha la sua visione delle cose...
Con una frase come questa ogni discussione diventa inutile...
Io resto dell'idea che le basi della programmazione si imparano a basso livello
Anch'io ero della stessa opinione fino a una ventiseina di anni fa. Poi, maturando, si prende coscienza di cosa vuol dire avere un problema e svilupparne una soluzione.
(non a caso nella stragrande maggioranza delle facoltà italiane fondamenti di informatica si fa in c, non in .NET; ma ovviamente anche il sistema educativo italiano sarà la solita leggenda metropolitana :)),
Qui ripeto l'invito che ti ho fatto prima, visto che non hai alcuna idea di quello che stai parlando.
1) .NET NON è un linguaggio.
2) Già nel lontano 1995 al corso di laurea di Scienze dell'Informazione dell'Università degli Studi di Catania si cominciò a studiare Java, che nel giro di qualche anno divenne IL linguaggio adottato nello studio dell'informatica.
Stessa tendenza che troverai nelle altre università, se t'informi.
poi si è liberi di migrare dove meglio si crede. Il c NON genera segmentation fault a caso,
A dir poco lapalissiano... :rolleyes:
lì si entra nello specifico della tua applicazione e di ciò che scrivevi.
Quindi? Traiamo delle conclusioni: sarei io che non so scrivere del buon codice? O sei di quelli che sostengono che è sempre possibile scrivere codice assolutamente privo di bug?
Comunque, è giusto che ognuno abbia la sua visione e in qualsiasi caso non credo che questo scambio di idee sia OT, anzi
Lo scambio di idee è legittimo, e infatti siamo apposta in un forum.
Quanto all'OT, era chiaramente (!) riferito alla parte in cui parlavamo di Windows, Linux, et similia.
cdimauro
07-06-2007, 20:18
Si può fare di più ma non s'è fatto. Spero che si faccia, se si fa per Python tanto meglio, non mi è certo antipatico per partito preso.
Prima dei generici in Java non c'era la necessità di parlare di varianza. L'unica roba variante erano gli array. Lo facevano malissimo (un array Java è covariante in compilazione e invariante in esecuzione, roba da mal di testa).
Gli array erano l'unica eccezione. L'unica stramberia. Adessa in Java 5 c'è la questione del "cosa ci metto". Perchè se conosco il linguaggio di programmazione Java allora devo anche sapere cosa diamine posso assegnare a una variabile il cui tipo è:
Pippo<? super Comparable<Pippo<? extends String>>> vaffa;
Per quale T la variabile nbagno il cui tipo è Pippo<T> risulta assegnabile a vaffa? E' un "semplice" problema di varianza.
Ora, io non ho alcuna remora nel dirvi che per stabilire cosa diamine sia compatibile in assegnamento con "vaffa" dovrei prendere carta e penna e mettermi lì per un venti minuti a scrivere insiemi e sottoinsiemi. Mi fido se mi dicono che è l'apoteosi della teoria dei tipi, che adesso Java è "type-safe". Ma per la miseria se per evitare di scrivere:
if(ciccio instanceof Pippo) {
Pippo p = (Pippo)ciccio;
}
devo ammazzarmi di divisioni ho qualche dubbio che qui si stia parlano di evoluzione positiva del linguaggio.
E ho un cattivo presentimento anche per le chiusure. Anzi, la quasi certezza che mi troverò a dover leggere cose tipo:
fun(bongo => tricchetracck : each brik<T>, brak<E>)#(la patatina tira)
Il tutto per evitare di scrivere:
public interface Funzione {
Object esegui(Object... parametri);
}
Onestamente, PGI-Bis, non saprei che dirti. Con Python, essendo il linguaggio amorfo, tutto mi sembra più facile e "coerente".
Ma poi, a te cosa importa? Dico, evita di usare questi costrutti e vivi in pace. Io sono per risolvere i problemi, non per l'analisi della soluzione. :p
cdimauro
07-06-2007, 20:26
Non credo che una o due persone implichino il "tutti".
Tutti quelli che ci sono passati e si sono fatti le ossa.
Ovvio che c'è molto meglio (non il .NET, per l'amor di dio:)),
A scanso di equivoci te lo ripeto: .NET NON è un linguaggio, e rilancio con http://en.wikipedia.org/wiki/Microsoft_.NET_Framework ma soprattutto con http://en.wikipedia.org/wiki/.NET_Languages
Microsoft .NET languages
C# - Microsoft's flagship .NET Framework language which bears similarities to the C++ and Java languages.
Visual Basic .NET - A completely redesigned version of the Visual Basic language for the .NET Framework. This also includes Visual Basic 2005 (v8.0).
VBx, a dynamic version of Visual Basic .NET that runs on top of the Dynamic Language Runtime.
C++/CLI and the deprecated Managed C++ - A managed version of the C++ language.
J# - A Java and J++ .NET transitional language.
JScript .NET - A compiled version of the JScript language.
Windows PowerShell - An interactive command line shell/scripting language which provides full access to the .NET Framework.
IronPython - A .NET implementation of the Python programming language developed by Jim Hugunin at Microsoft.
IronRuby - A dynamically compiled version of the Ruby programming language targeting the .NET Framework.
F#, a member of the ML programming language family.
Non-Microsoft .NET languages
Note: most of these languages are available in both .NET and non-.NET versions.Ada through A#.
APL through APLNext
Boo, a statically-typed language with Python-inspired syntax.
C. David R. Hanson, a Microsoft researcher, ported LCC to target the .NET virtual machine as a proof of concept.[1]
Chrome, Object Pascal-based
COBOL through Fujitsu NetCOBOL for .NET, Micro Focus Net Express
Component Pascal (Component Pascal is closer to Oberon than to Pascal)
Borland Delphi Studio - An integrated develoment environment and compiler that supports .NET development in Object Pascal and C#.
Eiffel through EiffelEnvision
Forth through Delta Forth .NET
FORTRAN through Silverfrost Limited, Lahey LF Fortran Enterprise
Java bytecode through IKVM
Haskell, greatly modified Haskell for .NET via Mondrian, Hugs for .NET or Haskell.net
Lexico, a didactic in Spanish object-oriented language
Lisp through L# or the Lisp-like DotLisp.
sono passati diversi anni del resto: qui si sta parlando di linguaggi per iniziare, ponendo l'accento quindi sul valore formativo del linguaggio, non di quello che permette di realizzare effettivamente. Neanch'io oggi mi sognerei mai di fare un'applicazione complessa in c (anche se conosco diversi team chi ci lavorano tuttora e non si lamentano, anzi),
Non so come non facciano a lamentarsi: quando ho scritto quel decoder JPEG 2000 (che non è certo un progettino da due soldi: prima o poi te lo ritroverai in qualche fotocamera digitale con chip sviluppato da STM) ho avuto non pochi problemi.
Se avessi avuto la possibilità di usare il C++ sarei stato più contento, ma gli strumenti per portare il codice sotto forma di silicio utilizzano esclusivamente un sottoinsieme del C (non è possibile usare nemmeno i puntatori a funzione).
ma se qualcuno mi chiede il miglior linguaggio dal punto di vista FORMATIVO resto sempre della stessa idea. Naturalmente, ognuno si basa sulle proprie esperienze ed ogni scelta può avere i suoi punti di forza o meno
Quali punti di forza avrebbe il C dal punto di vista formativo? Potresti farci un po' di esempi?
cdimauro
07-06-2007, 20:31
Uhm, non confondere il paradigma con il livello del linguaggio: il c++, nonostante il paradigma ad oggetti, permette di scrivere tranquillamente a basso livello
Anche il Pascal può fare lo stesso, e in più:
- è modulare;
- ha dei costrutti sintattici di livello più alto;
- ha una sintassi molto più semplice e comprensibile.
cdimauro
07-06-2007, 20:36
Perchè non è una perdita di tempo. Il paradigma è un aspetto, il linguaggio un altro, non sono intrinsecamente legati. Ovvio che un linguaggio ad oggetti deve mettere a disposizione delle funzionalità (anche a livello sintattico) che permettano l'estensione agli oggetti, ma secondo me è un errore mischiare i due concetti. Se voglio posso scrivere (sbagliando) un programma Java in maniera totalmente procedurale. Concordo con te che l'estensione ad oggetti sia un'ottima innovazione (soprattutto in ambito di riusabilità, per come la vedo io), ma il paradigma da utilizzare riguarda più la fase di progettazione che la scrittura in sè e per sè.
Per fare un'affermazione così pesante hai mai scritto software? Soprattutto, in base a cosa lo sostieni?
E credo che una persona alle prime armi debba prima imparare a scriverle le applicazioni
Appunto per questo allora è meglio usare linguaggi di livello più alto: lo si impara molto più velocemente.
e, soprattutto, a capire su che cosa girano e cosa fanno realmente;
Allora torniamo al discorso di prima: il linguaggio migliore a questo punto è quello macchina, tabella degli opcode della CPU alla mano.
Ovviamente sarai d'accordo anche tu, giusto?
imparare a progettarle, sulla base ANCHE di queste conoscenze, lo vedo più come un (fondamentale) passo successivo
Il software lo si progetta in base ai REQUISITI del problema, non alle conoscenze sulla macchina che gira sotto. Anche perché un linguaggio può benissimo nascoderti tutti questi dettagli e permetterti tranquillamente di risolvere il tuo problema.
Già, perché per un informatico la questione rimane sempre e soltanto una: risolvere il problema. Non essere assolutamente a conoscenza della macchina su cui sta girando la tua applicazione.
cdimauro
07-06-2007, 20:48
Mio dio cosa ho scatenato :D
Spero che almeno ti sia utile. :p
Tornando al discorso originale (che non è: quale è il miglior linguaggio di programmazione) mi ispira il PHP perché avendo usato spesso forum phpBB so bene o male cosa potrei fare e poi mi sembra che il supporto sia massiccio...
Il supporto per il web c'è sicuramente, ma maggior supporto non implica che il linguaggio / piattaforma sia buono.
E il PHP come linguaggio è veramente ORRIBILE. Anche per sviluppare applicazioni web. In questo campo ha avuto la fortuna di essere stato usato fra i primi e s'è imposto (un po' come MySQL, che è un engine SQL pietoso che è andato avanti allo stesso modo: mettendoci pezza su pezza).
Tanto per farti un esempietto sempre lato web, con mod_python le mie applicazioni non sono altro che funzioni fatte così:
def MiaFunzione1(req):
return 'Prova!'
def MiaFunzione2(req, ParametroObbligatorio):
return 'Il parametro è: ' + ParametroObbligatorio
def MiaFunzione3(req, ParametroOpzionale = 'Questo è il valore di default'):
return 'Il parametro è: ' + ParametroOpzionale
def MiaFunzione4(req, *ElencoParametriOpzionali):
return 'I parametri opzionali sono: ' + ', '.join((p for p in ElencoParametriOpzionali))
def MiaFunzione5(req, **ElencoParametriOpzionaliChiaveValore):
return 'Le coppie chiave-valore opzionali sono: ' + ', '.join((Chiave + ' = ' + Valore for Chiave, Valore in ElencoParametriOpzionaliChiaveValore.iteritems()))
ecc.
Dove req è l'oggetto request (di Apache) che contiene tutti i parametri della richiesta (e ti pemette anche di cambiare eventualmente l'header e altro).
Come vedi non devi andare a controllare nessun array POST o GET per recuperare i tuoi valori: sono tutti messi lì a disposizione, a seconda di come te li aspetti.
Idem per gestire l'upload di file nel server: sarà semplicemente uno dei parametri che, se presente, ti permetterà di accedere al contenuto con la sola chiamata al metodo .read() (se non ricordo male).
Semplice, vero? Prova a vedere il lavoro che faresti con PHP per fare le stesse cose. :p
viceversa con altri non saprei cosa fare... un principiante con python o java cosa potrebbe fare di interessante?
Di tutto: dipende soltanto dalla tua fantasia / hobby.
cdimauro
07-06-2007, 20:49
ciao
vista la tua conoscenza del Pascal ti consiglierei C++ per poi passare a Java o C#.
con il c++ potresti fare molto e capire come muoverti in ambieti a classi e con programmazione ad oggetti.
ciao
Tanto vale rimanere col Pascal allora: permette ugualmente di programmare a oggetti, e ha una sintassi molto chiara ed elegante, oltre a essere pure modulare (invece di impazzire coi file include e la compilazione condizionale). ;)
Effettivamente non è più un mio problema. Ma sai, c'è ancora quel tanto di passione che deriva dall'aver passato tanto tempo a scrivere in Java... ormai è uno di famiglia. Vederlo traballare sotto i colpi di chi (Neal Gafter, Gilad Bracha, ve possino...) dovrebbe mettersi a fare un altro linguaggio e non smozzicare le biglie alla gente mi fa un po' ruotare le nocciole. Ma vi ricordate quant'era verboso, farraginoso e dannatamente facile Java 1.0? Ahhh, che tempi...
cdimauro
07-06-2007, 21:09
Onestamente manco me lo ricordo più: son passati 12 da quando ho conosciuto Java, e non so nemmeno che versione era... :p
In parte ti capisco, perché anch'io sono ancora molto affezionato a Turbo Pascal & Delphi (con quest'ultimo continuo a lavorarci quando c'è da sviluppare GUI per Windows: è eccezionale), ma ho cambiato e studiato decine di linguaggi, per cui rimane più che altro un ben ricordo.
P.S. Perché non è più un tuo problema? Non sviluppi più in Java?
P.P.S. Adesso però vado a nanna... :angel:
^TiGeRShArK^
07-06-2007, 23:04
P.S. Perché non è più un tuo problema? Non sviluppi più in Java?
a quanto ho capito ha mollato il "fantastico" (:stordita: ) mondo della programmazione per approdare ad altri lidi :p
Sempre se non ho frainteso :fagiano:
sarò un po all'antica...ma per me cominciare da quasi 0 con un linguaggio OO è come per uno che ogni tanto va in montagna intraprendere la scalata dell'everest.
a mio avviso un linguaggio come il C non ha paragoni come potenziale formativo.
sarà che io sono partito dallo scalino più basso, e con linguaggi del genere ne ho ancora a che fare (assembler, c, c++).
passare dall'uso spinto delle struct in c, alle classi del c++ è un passaggio "abbastanza" indolore, piuttosto che partire a razzo trovandosi bloccati in un linguaggio OO che non sai cosa ti possa dare più del suo uso procedurale.
my 2 cents
^TiGeRShArK^
07-06-2007, 23:23
Però non imparerai mai a programmare ad oggetti partendo dal procedurale..
O meglio..
sarai convinto di stare programmando ad oggetti mentre in realtà farai una specie di minestra immonda che, solo dopo anni di disintossicazione dalla logica procedurale, si sarà avvicinata alla programmazione Object Oriented :p
Però non imparerai mai a programmare ad oggetti partendo dal procedurale..
O meglio..
sarai convinto di stare programmando ad oggetti mentre in realtà farai una specie di minestra immonda che, solo dopo anni di disintossicazione dalla logica procedurale, si sarà avvicinata alla programmazione Object Oriented :p
ehhhh punti di vista diversi, il mondo è bello perchè e vario perfortuna.
io invece se penso ad un profano che si butta a pesce nella programmazione ad oggetti, lo vedo usare il suo bel linguaggio ad oggetti nel modo più ignobile che si possa fare...proceduralmente, usando l'1% delle sue potenzialità.
poi magari dipende da programmatore a programmatore...
Il C apre la mente e insegna tante di quelle cose che in altri linguaggi (escluso l'assembly) purtroppo non vedrai mai perchè di più alto livello (giusto per dirne una, la gestione della memoria). Sono altre le cose che rovinano la mente (ad esempio l'orrendo accrocchio C#/ASP :) o peggio il fatto che oggi il simpatico Sourcesafe ha deciso di sua sponte di cestinarmi le modifiche degli ultimi 3 giorni... non c'è che dire, Microzozz = affidabilità)
Non sono d'accordo. Per capire come funzionano certe cose probabilmente e' piu' opportuno studiare su di un libro di testo, e lasciare al linguaggio di programmazione il compito di fare un po' di prove "sul campo". Anche perche' ad affidarsi solo ad un linguaggio si ottiene una visione parziale (compresa pure la gestione della memoria).
Si può fare di più ma non s'è fatto. Spero che si faccia, se si fa per Python tanto meglio, non mi è certo antipatico per partito preso.
Migliorare documentazione richiede tempo e fatica, ma si puo' fare. Molto piu' difficile e' invece cambiare un linguaggio, e l'esempio che porti tu di Java e generics dimostra che in parte siamo d'accordo :P
Prima dei generici in Java non c'era la necessità di parlare di varianza. L'unica roba variante erano gli array. Lo facevano malissimo (un array Java è covariante in compilazione e invariante in esecuzione, roba da mal di testa).
<cut>
devo ammazzarmi di divisioni ho qualche dubbio che qui si stia parlano di evoluzione positiva del linguaggio.
E ho un cattivo presentimento anche per le chiusure. Anzi, la quasi certezza che mi troverò a dover leggere cose tipo:
A conferma del discorso che facevo ieri sulle "aggiunte a posteriori" ai linguaggi. Sono modifiche che sono richieste dagli utilizzatori (o almeno una buona parte) ma che fanno a pugni con altre caratteristiche preesistenti del linguaggio. Non che i cugini (C++, C#) se la cavino molto meglio su questo problema specifico, anzi. L'unico linguaggio che lo risolve in modo intelligente mi sembra essere il tanto bistrattato Haskell, ma anche perche', non essendo un linguaggio orientato agli oggetti, ha un approccio un po' diverso al polimorfismo.
Python e gli altri linguaggi dinamici invece questo problema non lo hanno, fintanto che il contenitore e' un contenitore e i contenuti hanno il metodo richiesto, l'interprete e' felice. E' uno degli aspetti che, per me perlomeno, bilanciano ampiamente gli inconvenienti dovuti alla mancanza di controlli sui tipi durante la compilazione. Nella mia esperienza questi ultimi non sono mai stati un grande problema, ed utilizzando regolarmente dei test (cosa che farei comunque) li si evita praticamente del tutto.
fun(bongo => tricchetracck : each brik<T>, brak<E>)#(la patatina tira)
Se decidono di osare la meta' di quello che stanno facendo a C#, potrai vedere ben di peggio :D
cdimauro
08-06-2007, 08:59
a quanto ho capito ha mollato il "fantastico" (:stordita: ) mondo della programmazione per approdare ad altri lidi :p
Sempre se non ho frainteso :fagiano:
In questi casi c'è da esser felici a metà. :stordita:
Perché non poter programmare sarebbe un brutto colpo per chi ne ha fatto hobby e poi professione, ma per contro quando si smette di programmare è perché generalmente si è arrivati a un ruolo dirigenziale.
^TiGeRShArK^
08-06-2007, 09:03
ehhhh punti di vista diversi, il mondo è bello perchè e vario perfortuna.
io invece se penso ad un profano che si butta a pesce nella programmazione ad oggetti, lo vedo usare il suo bel linguaggio ad oggetti nel modo più ignobile che si possa fare...proceduralmente, usando l'1% delle sue potenzialità.
poi magari dipende da programmatore a programmatore...
rubando le parole di marco:
Non sono d'accordo. Per capire come funzionano certe cose probabilmente e' piu' opportuno studiare su di un libro di testo, e lasciare al linguaggio di programmazione il compito di fare un po' di prove "sul campo". Anche perche' ad affidarsi solo ad un linguaggio si ottiene una visione parziale (compresa pure la gestione della memoria).
E cmq io ho fatto proprio il passaggio BASIC --> C (+ inline assembly)--> C++ --> Java (e poi vabbè.. un bel pò di altri linguaggi nel mezzo e alla fine :p) e onestamente ho sudato non poco per passare alla programmazione OO dopo aver programmato x anni in quella procedurale.
Il percorso inverso ad occhio mi sarebbe costato di meno perchè non avrei dovuto formattare il cervello dopo essermi abituato a scrivere codice in un determinato modo :p
cdimauro
08-06-2007, 09:04
sarò un po all'antica...ma per me cominciare da quasi 0 con un linguaggio OO è come per uno che ogni tanto va in montagna intraprendere la scalata dell'everest.
Veramente non si comincia da zero con la OOP: si comincia dalle variabili, dai tipi di dati, dalle operazioni, ecc. ;)
a mio avviso un linguaggio come il C non ha paragoni come potenziale formativo.
Onestamente non vedo proprio come potrebbe.
sarà che io sono partito dallo scalino più basso, e con linguaggi del genere ne ho ancora a che fare (assembler, c, c++).
passare dall'uso spinto delle struct in c, alle classi del c++ è un passaggio "abbastanza" indolore, piuttosto che partire a razzo trovandosi bloccati in un linguaggio OO che non sai cosa ti possa dare più del suo uso procedurale.
my 2 cents
Io sono partito con basic e assembly / linguaggio macchina, e principalmente utilizzavo quest'ultimo: erano i tempi del 6510 di Commodore Vic 20 & 64, e conservo ancora la tabella degli opcode della CPU che usavo per tirare fuori i numeretti da dare in pasto alla SYS del BASIC 2.0 (il Supermon con l'assemblatore arrivò tempo dopo).
Ma erano BEN ALTRI TEMPI. Oggi esistono linguaggi di livello molto elevato che permettono di acquisire i concetti della programmazione (anche quella procedurale) senza dover andare a sbattere la testa su dettagli come puntatori, de/allocazione della memoria, byte order, ecc. ecc. Cose che per imparare a programmare non servono assolutamente.
cdimauro
08-06-2007, 09:15
ehhhh punti di vista diversi, il mondo è bello perchè e vario perfortuna.
Come prima: ma allora che senso ha discutere? Tanto il mondo è bello perché è vario...
io invece se penso ad un profano che si butta a pesce nella programmazione ad oggetti, lo vedo usare il suo bel linguaggio ad oggetti nel modo più ignobile che si possa fare...proceduralmente, usando l'1% delle sue potenzialità.
poi magari dipende da programmatore a programmatore...
Anche, ma è l'approccio che è molto diverso: con la programmazione procedurale per realizzare qualcosina di più complesso devi far ricorso a puntatori, e in particolare a puntatori a funzione. Mica pizza e fichi.
Cose che risolvi in maniera MOLTO più semplice, elegante e funzionale con la programmazione a oggetti.
Mi ricordo ancora quando arrivò il Turbo Pascal 5.5, che rimasi folgorato (sulla via di Borland :D) dalle estensioni orientate agli oggetti che portò (era il 1989 o il 90; adesso non ricordo bene), anche perché era dotato di un manualetto aggiuntivo di una sessantina di pagine incentrato proprio sull'argomento (in italiano, e che conservo ancora gelosamente), e che all'epoca venne definito dalla stampa specialistica "la miglior guida alla programmazione a oggetti".
Per inciso, qui http://dn.codegear.com/article/20803 si può liberamente scaricare il TP 5.5, nella stessa pagina c'è anche il link al manualetto di cui sopra (eccolo qui http://dn.codegear.com/article/images/20803/TP_55_OOP_Guide.pdf ma in inglese). ;)
cdimauro
08-06-2007, 09:20
Python e gli altri linguaggi dinamici invece questo problema non lo hanno, fintanto che il contenitore e' un contenitore e i contenuti hanno il metodo richiesto, l'interprete e' felice. E' uno degli aspetti che, per me perlomeno, bilanciano ampiamente gli inconvenienti dovuti alla mancanza di controlli sui tipi durante la compilazione. Nella mia esperienza questi ultimi non sono mai stati un grande problema, ed utilizzando regolarmente dei test (cosa che farei comunque) li si evita praticamente del tutto.
Hai toccato un tasto dolente: adesso vedrai PGI-Bis partire a testa bassa contro Kent Beck, Martin Fowler e i fanatici dell'extreme programming in generale... :asd:
cdimauro
08-06-2007, 09:22
rubando le parole di marco:
E cmq io ho fatto proprio il passaggio BASIC --> C (+ inline assembly)--> C++ --> Java (e poi vabbè.. un bel pò di altri linguaggi nel mezzo e alla fine :p) e onestamente ho sudato non poco per passare alla programmazione OO dopo aver programmato x anni in quella procedurale.
Il percorso inverso ad occhio mi sarebbe costato di meno perchè non avrei dovuto formattare il cervello dopo essermi abituato a scrivere codice in un determinato modo :p
Anche perché sei già abituato a scrivere codice "di buona qualità", per cui certe cazzate magari non le fai. ;)
Se la disoccupazione è un ruolo dirigenziale allora, ragazzi miei, sono un top-manager :D
Non apriamo le cataratte del TDD se no mandiamo veramente il thread in vacca.
cdimauro
08-06-2007, 15:18
Se la disoccupazione è un ruolo dirigenziale allora, ragazzi miei, sono un top-manager :D
GLOM. Mi spiace. :( Spero potrai trovare velocemente un nuovo impiego.
Non apriamo le cataratte del TDD se no mandiamo veramente il thread in vacca.
Lo so. Infatti la mia era chiaramente una battuta. In passato ci sono state le faide all'arma bianca con fek ed è meglio non tornarci nuovamente. :p
Se potessi dirti quanto mi sono divertito a scrivere il mio primo gestionale da rinnovato hobbista non ti dispiacerebbe più.
Come un bambino con il cerchio e la palla (gioco che non si fa più dai tempi di Cesare Augusto, prendetela in senso figurato).
cdimauro
08-06-2007, 20:55
No, no: ti capisco benissimo! Le poche volte che rimetto mano a qualche mia vecchia applicazione (in Delphi) o ne scrivo qualcuna che mi serve, mi sento gasatissimo. :D
repne scasb
09-06-2007, 20:39
@cdimauro
Ma non avevi smesso di frequentare il .it?
Devo intenderlo come un ritorno?:)
cdimauro
09-06-2007, 21:33
Di frequentare non avevo smesso (anche se ho ridotto enormemente la lettura, oltre ad aver ridotto al lumicino la scrittura).
E' che mi sono stancato di leggere due cose:
- che a ogni thread in cui qualcuno chiede un linguaggio con cui iniziare a programmare arrivino puntualmente risposte raccapriccianti;
- che Python come linguaggio va bene per cazzeggiare, ma non per lavorare (evidentemente in questi ultimi due anni e mezzo avrò passato il tempo a cazzeggiare; PGI, non ce l'ho con te: è un discorso generale).
Penso che di fronte a un ben preciso problema un buon programmatore dovrebbe fornire una soluzione a esso adeguata, motivandola.
P.S. Anche tu non è che ti faccia poi vedere così spesso. :p E' un po' stancante avere a che fare sempre con un certo tipo di utenti... :muro:
Ma tranquillo. Anzi. Se per caso sentissi di dover puntare il dito contro di me non avere remore. Io ho un ego classificato come gigante gassoso. Ero lì lì per diventare stella. Sono astrofisicamente inoffendibile. Darmi del pazzo è come mandare affanculo Giove: non è che se la prenda più di tanto :D.
Darmi del pazzo è come mandare affanculo Giove: non è che se la prenda più di tanto :D.
Dipende quale... ce n'era un nei pressi dell'Olimpo che per molto meno ti fulminava il sedere... :D
python, python sopra ogni cosa!
cdimauro
10-06-2007, 08:05
Ma tranquillo. Anzi. Se per caso sentissi di dover puntare il dito contro di me non avere remore. Io ho un ego classificato come gigante gassoso. Ero lì lì per diventare stella. Sono astrofisicamente inoffendibile. Darmi del pazzo è come mandare affanculo Giove: non è che se la prenda più di tanto :D.
Con te (con cui posso ragionare) lo sai che preferisco essere diretto. :p
x chompy: dipende dal problema da risolvere. ;)
DioBrando
13-06-2007, 15:30
Con cosa cominciare?
Con Visual Basic che domande :O
Scherzavo :asd:
:D
consiglierei anche io Python. Ero nella tua stessa situazione anche se nel mio caso non dovevo scegliere con che linguaggio cominciare ma capire se Python potesse essere un'alternativa valida a Java e alla tecnologia Dot Net che uso attualmente.
Avevo cominciato a darci un occhio tempo fà ma poi per vari motivi l'ho abbandonato.
Poi mi sn imbattuto per caso nel sito della PyCon, dedicato appunto alla conferenza di Python italiana (sulla falsariga di EuroPython che si tiene da diversi anni e tocca varie città dell'Europa, quest'anno Vilnius) e approfittando del fatto che la sede fosse a Firenze, ci sn andato.
Il programma era interessante, ma il motivo per cui ho scelto di andarci è stata la presenza quasi esclusivamente di aziende che lavorano, sviluppano e crescono grazie a Python e ai tools disponibili anche e soprattutto Open Source (come il linguaggio stesso d'altra parte).
E devo dire che mi ha convinto, mi hanno convinto sia i progetti presentati (come PyPy e WSGI), sia gli speakers che l'organizzazione.
Quel che manca a Python è l'hype di cui godono altri linguaggi che hanno avuto un maggiore successo, ma dal punto di vista tecnico non ha nulla da invidiare, anzi penso che come chiarezza semantica e sintattica primeggi rispetto a tutti quelli di matrice C-Like.
Gli strumenti ci sono, le aziende che lo utilizzano anche e se parliamo di settore Enterprise basta citare Google, Nasa, Light Industrial&Magic, Lufthansa ecc. ecc.; ora si sta spostando parecchio nel settore dell'Embedded soprattutto dei device mobili.
Oltre alla diffusione quel che manca forse rispetto ad appunto Java, Dot Net o C++ ma anche Ruby stesso è la documentazione soprattutto cartacea: libri su Python non ce ne sn, non ce ne sn per esempio riguardo ai Design patterns.
Ma se devi cominciare a darci un occhio (che tu abbia esperienze precedenti o meno è indifferente), comincia con Python della serie ApogeoPocket, di Marco Beri (che tra l'altro è molto simpatico :))
Poi sul web e all'interno della community troverai risposte ai problemi + complessi cui troverai di fronte.
non fare questi scherzi...mi è quasi partita una coronaria
cdimauro
13-06-2007, 21:16
Non avrebbe mica tutti i torti: http://it.wikipedia.org/wiki/BASIC
"In informatica il BASIC (un acronimo per Beginner's All purpose Symbolic Instruction Code cioè "Codice di istruzioni simboliche di uso generale per principianti") è un linguaggio di programmazione ad alto livello sviluppato a partire dal 1963 nell'Università di Dartmouth (Dartmouth College) per il calcolatore GE-225. Ne furono coinventori i professori John George Kemeny e Thomas Eugene Kurtz. Il primo programma in BASIC "girò" il 1° maggio 1964, alle ore 4:00.
Il BASIC (almeno nelle versioni di Kemeny e Kurtz, che costituiscono il cosiddetto Dartmouth BASIC) fu progettato per essere un linguaggio semplice da imparare. Per questo si differenziò dalla maggior parte dei linguaggi suoi coetanei enfatizzando la semplicità d'uso piuttosto che la potenza espressiva. Nacque infatti, come dice il suo nome, per poter essere usato anche da principianti (il 75% degli studenti dell'Università di Dartmouth era iscritto a facoltà umanistiche). Le istruzioni erano poche e non complesse. Il BASIC offriva inoltre (non per scelta degli autori, ma solo perché era figlio del suo tempo) pochi costrutti strutturati, quindi orientati alla creazione di programmi chiari e comprensibili. Fu pensato inoltre come un linguaggio algoritmico, adatto cioè a programmare algoritmi."
Anche se oggi c'è di meglio, come dicevamo. :p
x DioBrando: un post da incorniciare! :ave:
DioBrando
13-06-2007, 21:53
non fare questi scherzi...mi è quasi partita una coronaria
sn un burlone sorry :D
l'unico linguaggio che cambia il mondo è il Fortran. :cool:
il resto è solo mm.... roba da commercialisti.
DioBrando
13-06-2007, 22:06
Non avrebbe mica tutti i torti: http://it.wikipedia.org/wiki/BASIC
"In informatica il BASIC (un acronimo per Beginner's All purpose Symbolic Instruction Code cioè "Codice di istruzioni simboliche di uso generale per principianti") è un linguaggio di programmazione ad alto livello sviluppato a partire dal 1963 nell'Università di Dartmouth (Dartmouth College) per il calcolatore GE-225. Ne furono coinventori i professori John George Kemeny e Thomas Eugene Kurtz. Il primo programma in BASIC "girò" il 1° maggio 1964, alle ore 4:00.
Il BASIC (almeno nelle versioni di Kemeny e Kurtz, che costituiscono il cosiddetto Dartmouth BASIC) fu progettato per essere un linguaggio semplice da imparare. Per questo si differenziò dalla maggior parte dei linguaggi suoi coetanei enfatizzando la semplicità d'uso piuttosto che la potenza espressiva. Nacque infatti, come dice il suo nome, per poter essere usato anche da principianti (il 75% degli studenti dell'Università di Dartmouth era iscritto a facoltà umanistiche). Le istruzioni erano poche e non complesse. Il BASIC offriva inoltre (non per scelta degli autori, ma solo perché era figlio del suo tempo) pochi costrutti strutturati, quindi orientati alla creazione di programmi chiari e comprensibili. Fu pensato inoltre come un linguaggio algoritmico, adatto cioè a programmare algoritmi."
Anche se oggi c'è di meglio, come dicevamo. :p
x DioBrando: un post da incorniciare! :ave:
esagerato thx :p
senz'altro è nato per scopi didattici e anche l'humus, accademico appunto, ne favorì questa sua inclinazione: sintassi chiara, regole +ttosto rigide (utili per chi è alle prime armi), insomma probabilmente ai tempi era il miglior modo per imparare la metodologia strutturata.
Ma con le divagazioni successive, rese necessarie dall'evoluzione dell'informatica e dal bisogno di avere per es. interfacce che fossero interattive e visuali allo stesso tempo, si è persa quella caratteristica di chiarezza e semplicità (con VS anche il programmino + idiota diciamo che appare come sintassi +ttosto criptico e poco "pulito" per usare un eufemismo :D).
Insomma oggi c'è di meglio appunto.
Con Python scrivi print Hello World e la console ti stamperà subito Hello World.
Puoi scrivere da 0 una classe in 3 righe di codice e 10 parole di numero senza perderti in tecnicismi.
Molti linguaggi mi sfuggono ma sinceramente una tale similitudine tra la semantica usata dalle persone e quella data in pasto alla shell n l'avevo mai vista prima.
P.S.: vedo solo ora la tua firma, domani ti chiedo lumi :D mi hai incuriosito
cdimauro
13-06-2007, 22:33
l'unico linguaggio che cambia il mondo è il Fortran. :cool:
il resto è solo mm.... roba da commercialisti.
Anche Python ovviamente :asd:
P.S. Ricordo di aver letto tempo fa che hai realizzato dei brevetti (oltre a tirare il filo a Lyane :p): di cosa ti occupi e quali strumenti utilizzi per il tuo lavoro? Ovviamente se non sono indiscreto.
x DioBrando. Quoto ancora :) e per il resto ne parliamo domani.
casomai ho tirato la Lyane a Jane :D
modellazione
finchè si può carta e penna, dopo fortran a sfare.
vietate librerie e routine altrui, nonchè numeri non interi esterni a +-20. :D
cdimauro
14-06-2007, 08:11
Quindi roba che ha a che fare con atomi & molecole suppongo. :D
Visto che parli di modellazione, realizzare velocemente un modello da testare dovrebbe essere una metodologia utile al tuo lavoro.
Il Fortran immagino che lo userai per questioni di velocità di esecuzione e/o di uso di librerie di calcolo numerico et similia esistenti (di cui è ben dotato).
bravo atomi e molecole. ma tante. :D
1) il vero :sborone: usa solo carta e penna: semplificare e stimare l'errore.
2) mathlab e femlab mi fanno cag. :ciapet:
3) il fortran si usa, oltre a tutto il resto, tanto resto (vedi HPF) , per una questione diciamo 'estetica' e di 'gruppo'.
4) ripeto, chi usa fortran in genere NON usa librerie altrui (la nostra religione non ce lo permette) :cool:
sys_64738
14-06-2007, 11:24
Se vuoi imparare un linguaggio serio ti consiglio C++,
lascia perdere JAVA e C#, sono linguaggio legati alle piattaforme. J2EE per JAVA e .NET per C#.
^TiGeRShArK^
14-06-2007, 11:33
Se vuoi imparare un linguaggio serio ti consiglio C++,
lascia perdere JAVA e C#, sono linguaggio legati alle piattaforme. J2EE per JAVA e .NET per C#.
:mbe:
veramente è il C++ ad essere MOLTO ma MOLTO + legato alle piattaforme.
Java e .NET sono esattamente l'opposto riguardo alla portabilità.
Soprattutto il primo.
Ma hai una minima idea del casino per portare codice C++ da windows a linux a mac?
Con Java il costo è quasi nullo.
E cmq JEE5 (J2EE è la versione vecchia ovvero J2EE 1.4) è la versione Enterprise di Java.
Esistono anche Java Standard Edition e Java Micro Edition rispettivamente per applicazioni "normali" e per lavorare sui cellulari.
cdimauro
14-06-2007, 14:16
bravo atomi e molecole. ma tante. :D
1) il vero :sborone: usa solo carta e penna: semplificare e stimare l'errore.
2) mathlab e femlab mi fanno cag. :ciapet:
3) il fortran si usa, oltre a tutto il resto, tanto resto (vedi HPF) , per una questione diciamo 'estetica' e di 'gruppo'.
4) ripeto, chi usa fortran in genere NON usa librerie altrui (la nostra religione non ce lo permette) :cool:
ROTFL
The easiest way to tell a Real Programmer from the crowd is by the programming language he (or she) uses. Real Programmers use Fortran. Quiche Eaters use Pascal. Nicklaus Wirth, the designer of Pascal, gave a talk once at which he was asked, "How do you pronounce your name?". He replied, "You can either call me by name, pronouncing it 'Veert', or call me by value, 'Worth'." One can tell immediately by this comment that Nicklaus Wirth is a Quiche Eater. The only parameter passing mechanism endorsed by Real Programmers is call-by-value-return, as implemented in the IBM/370 Fortran G and H compilers. Real Programmers don't need all these abstract concepts to get their jobs done-- they are perfectly happy with a keypunch, a Fortran IV compiler, and a beer.
Real Programmers do List Processing in Fortran.
Real Programmers do String Manipulation in Fortran.
Real Programmers do Accounting (if they do it at all) in Fortran.
Real Programmers do Artificial Intelligence programs in Fortran.
If you can't do it in Fortran, do it in assembly language. If you can't do it in assembly language, it isn't worth doing.
:asd:
cdimauro
14-06-2007, 14:18
Se vuoi imparare un linguaggio serio ti consiglio C++,
Potresti darci una definizione oggettiva di "linguaggio di programmazione serio"?
Inoltre ti faccio presente che il thread ha un titolo (e un obiettivo) ben preciso che non può essere ignorato quando si fornisce una risposta.
Sul resto ti ha già risposto "Tiger". ;)
ROTFL
:asd:
prova a dirlo con parole tue. :asd:
comunque sì siamo un po' razzisti. :D
diciamo che per noi gestionali, database, web page ecc. hanno puzza come dire di .... m. ecco ! :rotfl:
non di meno per le fast implementation sono ammessi tutti i fortran-derivati : basic, pascal, ecc. :cool:
e se foste intellettualmente onesti, soprattutto per chi si vuole divertire programmando, consigliereste uno di questi: VBxx, VPascal o Delfi o comesichiama.
poi naturalmente per i very :sborone: adesso c'è:
http://hpff.rice.edu/images/HPFF_logo.jpg
:cool:
ma sta' robina qui chi è che ve la fa fare ?
WG(1:5:2, :, :, :) = fi * rlx + rlx1 * WG(1:5:2, :, :, :)
that is the same of:
For ic=1 To 5 Step 2
For k = 1 To KK: For i = 1 To II: For j = 1 To JJ
WG(ic, i, j, k) = fi(i, j, k) * rlx + rlx1 * WG(ic, i, j, k)
Next j, i, k
Next ic
e rega' lassate perde ! :cool:
e questa:
program
print*, 'Hello World'
end program
tre righe e via andare. :sborone:
ma sta' robina qui chi è che ve la fa fare ?
WG(1:5:2, :, :, :) = fi * rlx + rlx1 * WG(1:5:2, :, :, :)
that is the same of:
For ic=1 To 5 Step 2
For k = 1 To KK: For i = 1 To II: For j = 1 To JJ
WG(ic, i, j, k) = fi(i, j, k) * rlx + rlx1 * WG(ic, i, j, k)
Next j, i, k
Next ic
e rega' lassate perde ! :cool:
Mai pensato di darti all'APL ? :D
Mai pensato di darti all'APL ? :D
no, all' AF: :O
Assfuck
Da Wikipedia, l'enciclopedia libera.
Assfuck è un linguaggio di programmazione per computer, di tipo massimalista, creato da Inurban Müller (quello dello yogurt) intorno al 1969. Il linguaggio viene in taluni casi denominato Assf*ck, Assf*** o anche soltanto AFYou&YourSister per evitare di offendere la sensibilità altrui.
Indice
1 Struttura del linguaggio
1.1 Istruzioni
2 Esempi
2.1 FuckYou world!
2.2 Semplici
2.2.1 Loop semplice Up&Down around the hole
2.2.2 Manipolazione dei puntatori AutoRecursiveFucktion
2.2.3 Sommare
2.2.4 Istruzioni condizionali: NoPay_NoPlay, NoMoney_NoHoney
2.2.5 Copiare un byte sono buoni tutti
2.3 Complessi: LittlePenis procedure
2.3.1 Somma: OnePlusOneEnhance
2.3.2 Moltiplicazione:
3 Commento
4 Vedere anche
5 Collegamenti esterni
Struttura del linguaggio
L'obiettivo di Müller (sempre quello dello yogurt) era di creare un semplice linguaggio di programmazione completo per una macchina di AssTuring che potesse essere implementato con il compilatore più piccolo possibile ma se è grosso è meglio. Il linguaggio consiste di due istruzioni: dimme_lo e damme_lo. La versione 2 del compilatore originale, scritta per l'Amiga (quella gran f. di Fortaleza), occupa soltanto 240 byte ma tuuuuttti fino in fondo. È stato ispirato dal linguaggio Stica, un altro linguaggio di programmazione erotico, il cui compilatore occupava 1024 byte, ma solo a metà poverino.
Come il nome suggerisce, i programmi scritti in Assfuck tendono ad essere difficili da comprendere ma facili da sentire. Tuttavia Assfuck è un linguaggio AssTuring-completo in modalità AllHoleFilling , e si può utilizzare per implementare qualunque algo_ritmo eseguibile con una macchina di AssTuring. Trascurando l'enorme difficoltà nella programmazione di certi algoritmi genetici con ereditarietà con Assfuck, è certamente possibile scrivere il relativo codice bypassando certe delicate barriere implementative.
Il linguaggio è basato su un modello molto semplice consistente in un array di byte inizializzato a zero (detto 'corpo cavernoso'), un puntatore all'array (inizializzato per puntare al primo byte dell'array detto glande byte) e due stream di byte per l'input e l'output (ernesto e silvestro).
.....
cdimauro
14-06-2007, 21:16
prova a dirlo con parole tue. :asd:
Solo se mi traduci "Quiche Eater". :asd:
comunque sì siamo un po' razzisti. :D
Come tutti i programmatori: il linguaggio che uso io è sempre il migliore, si sa. :sborone:
diciamo che per noi gestionali, database, web page ecc. hanno puzza come dire di .... m. ecco ! :rotfl:
:asd: Tutte cose su cui ho lavorato e continuo a lavorare. :asd: :asd: :asd:
non di meno per le fast implementation sono ammessi tutti i fortran-derivati : basic, pascal, ecc. :cool:
:ave: Ottimo. Poi è noto che il Pascal è fortemente ispirato al Fortran, per cui utilizzarlo è cosa buona e giusta. :p
e se foste intellettualmente onesti, soprattutto per chi si vuole divertire programmando, consigliereste uno di questi: VBxx, VPascal o Delfi o comesichiama.
Delphi (evoluzione del Pascal). :)
Dopo Python, il mio linguaggio / ambiente preferito (si sa che per i programmatori è sempre meglio tenere un linguaggio di scorta da sfoderare al momento del bisogno. 2 is meglio che one. :sborone: ).
ma sta' robina qui chi è che ve la fa fare ?
WG(1:5:2, :, :, :) = fi * rlx + rlx1 * WG(1:5:2, :, :, :)
that is the same of:
For ic=1 To 5 Step 2
For k = 1 To KK: For i = 1 To II: For j = 1 To JJ
WG(ic, i, j, k) = fi(i, j, k) * rlx + rlx1 * WG(ic, i, j, k)
Next j, i, k
Next ic
e rega' lassate perde ! :cool:
:eek: Ma questa roba dove l'hai presa? La prima, intendo. :p
e questa:
program
print*, 'Hello World'
end program
tre righe e via andare. :sborone:
Occhio che poi arriva il ilsensine e ti spara una riga striminzita fatta col linguaggio della bash. :asd:
P.S. M'è scappata una lacrimuccia quando hai citato l'Amiga. SIGH. SOB. Bei tempi!
Solo se mi traduci "Quiche Eater". :asd:
http://en.wikipedia.org/wiki/Quiche-eater
Come tutti i programmatori: il linguaggio che uso io è sempre il migliore, si sa. :sborone:
io ho cominciato con cobol, fortran77, GWbasic, QB45, VB, VBA, fortran90
:asd: Tutte cose su cui ho lavorato e continuo a lavorare. :asd: :asd: :asd:
posso immaginare ... http://www.vocinelweb.it/faccine/tristi/54.gif
:ave: Ottimo. Poi è noto che il Pascal è fortemente ispirato al Fortran, per cui utilizzarlo è cosa buona e giusta. :p
sì è un dialetto, diciamo :O :D
Delphi (evoluzione del Pascal). :)
Dopo Python, il mio linguaggio / ambiente preferito (si sa che per i programmatori è sempre meglio tenere un linguaggio di scorta da sfoderare al momento del bisogno. 2 is meglio che one. :sborone: ).
sì sì VisualPascal insomma
comunque the easy way to make GUI&computation is VBA+excel
:eek: Ma questa roba dove l'hai presa? La prima, intendo. :p
cazzo questo è fortran90 puro :sborone:
Occhio che poi arriva il ilsensine e ti spara una riga striminzita fatta col linguaggio della bash. :asd:
http://utenti.quipo.it/patserr/immagini/00319.jpg
Programmm'a bash'
p' tutta a semmana
uaglio' da quà fin alla' zumpann a duie a duie
pigli tutt'achiss e i miett' a un a un da l'ata cascia
fin'a fin o' iuorno
fina a fin' o' mese
End Programm' abbash
:D
P.S. M'è scappata una lacrimuccia quando hai citato l'Amiga. SIGH. SOB. Bei tempi!
e te la sei trombata ? :eek:
cdimauro
14-06-2007, 21:56
Alla grande. :asd:
Come tutti i programmatori: il linguaggio che uso io è sempre il migliore, si sa. :sborone:
Non tutti, ma la maggior parte. I cosiddetti "Blub programmers" :stordita:
i "Blob programmers" ? :p
http://www.art.net/studios/visual/stowe/blob.jpg
^TiGeRShArK^
15-06-2007, 20:58
io ho cominciato con cobol, fortran77, GWbasic, QB45, VB, VBA, fortran90
:rotfl:
allora non ero l'unico tanto pazzo da programmare in basic e quickbasic ai tempi :asd:
ai tempi (20 anni fa) QB45 aveva già allocazione dinamica, ricursive, strutture, argomenti opzionali e indeterminati e qualche altra chicca che non ricordo più, praticamente il motore di VB ... :eek:
very :sborone:
:rotfl:
allora non ero l'unico tanto pazzo da programmare in basic e quickbasic ai tempi :asd:
ma non hai mai "salvato" sul mangianastri ???! :rotfl:
ahhh ... se stava mejjo quanno se stava peggio ... :cry: :D
cdimauro
15-06-2007, 21:30
Col Turbo Tape però, altrimenti ci stavi una vita a salvare... :asd:
^TiGeRShArK^
15-06-2007, 21:40
ma non hai mai "salvato" sul mangianastri ???! :rotfl:
ahhh ... se stava mejjo quanno se stava peggio ... :cry: :D
lascia stare ke mi divertivo a guardare mio padre quando sotituiva quei maxi nastri magnetici dove lavorava nel mainframe :asd:
cmq avrò salvato solo un paio di volte su cassetta quando mi ero messo a programmare quella specie di commodore dell'amstrad del mio amico :p
e l'odore dei mazzi di schede
la perforatrice che l' acca non diede
e noi trepidanti ...
programmi ... "importanti"
il lineare con gauss, lo zero bisez
sol cento righe
ma tanto di maz
fosfori verdi
e gli anni li perdi
e rivedo la tua bocca vermiglia
cosi larga nel ridere e nel bere,
e il volto quadro, senza sopracciglia,
tutto sparso d’efelidi leggiere
e gli occhi fermio l’iridi sincere
azzurre d’un azzurro di stoviglia...
Ecco - pensavo - questa è l’Amarena,
ma laggiù, oltre i colli dilettosi,
c’è il Mondo: quella cosa tutta piena
di lotte e di commerci turbinosi,
la cosa tutta piena di quei « cosi
con due gambe » che fanno tanta pena...
Tratto da Guido Gozzano, Poesie, Milano, Biblioteca Universale Rizzoli, 1997, pp. 181-187.
wizard_at
16-06-2007, 17:51
:rotfl:
allora non ero l'unico tanto pazzo da programmare in basic e quickbasic ai tempi :asd:
c'e' gente che lo usa ancora adesso...io!...me ne vergogno:( :( :(
ciao
P.S.: bel topic...divertentissimo da leggere!!!
albeganasa
17-06-2007, 01:49
fan fedele di WC.NET:D alias vb.net...la mia strada da programmatore è stata questa....Assembly 8086, c++ console, c builder ad oggetti, vb.net ad oggetti...mi trovo bene con il vb7-vb8...anche se tanti dicono che non vale nulla! qualche opinione a proposito?
cdimauro
17-06-2007, 06:49
Indubbiamente quei tanti sono dei blub programmer... :asd:
fan fedele di WC.NET:D alias vb.net...la mia strada da programmatore è stata questa....Assembly 8086, c++ console, c builder ad oggetti, vb.net ad oggetti...mi trovo bene con il vb7-vb8...anche se tanti dicono che non vale nulla! qualche opinione a proposito?
il VB6 vale poco IMHO, ma il VB.NET è un linguaggio dignitoso.. provalo il C# però :D
albeganasa
17-06-2007, 12:10
il VB6 vale poco IMHO, ma il VB.NET è un linguaggio dignitoso.. provalo il C# però :D
gia provato..ma le pareantesi graffe mi scassano :D
hai provato col triangolo ? :oink:
o la "torta di riso" (http://www.youtube.com/watch?v=Iiup3ymTZw0&mode=related&search=) ..., magari ti piace ... :O
cdimauro
17-06-2007, 21:20
gia provato..ma le pareantesi graffe mi scassano :D
A me scassa TUTTA la sintassi dei linguaggi C-like. :asd:
P.S. VB6 oggi non ha senso prenderlo in considerazione, visto che s'è evoluto e c'è di meglio. Altrimenti sarebbe facile criticare il BASIC perché il 2.0 di Commodore Vic20 e 64 aveva numeri di riga, e soltanto if, goto e gosub per strutturare il codice (modello spaghetti BASIC, appunto. :D ). ;)
A me scassa TUTTA la sintassi dei linguaggi C-like. :asd:
te lo appoggio.
anche io aborro i linguaggi austroungarici con l'elmetto di Guglielmo II
http://www.esford.com/AH6038%20Pickelhaube%20md.jpg http://www.geocities.com/kruppcapri/oloegrafia.JPG
http://www.decodeunicode.org/data/glyph/196x196/007B.gif http://knorretje.hku.nl/raw/bjarne2.jpg
P.S. VB6 oggi non ha senso prenderlo in considerazione, visto che s'è evoluto e c'è di meglio. ...
e cioè ?
non mi proporre cag. per "Glue programmers" (quelli del copia-incolla). :mbe:
cdimauro
17-06-2007, 21:58
VB.NET 2005 è un linguaggio molto maturo, con parecchi costrutti sintattici ad alto livello.
Purtroppo ogni volta che vedo la gente disprezzare il VB, è sempre e soltanto perché conoscono la versione 6, che ha 7 o 8 anni alle spalle... :rolleyes:
P.S. Glue programmer mi sa tanto di programmatore acefalo. :asd:
gia provato..ma le pareantesi graffe mi scassano :D
L'indentazione prima di tutto!!!! :D
come vivere senza le graffe?
p.s. odio anche chi mette le graffe così
if (a < b) {
a = 0;
return b;
}
VB.NET 2005 è un linguaggio molto maturo, con parecchi costrutti sintattici ad alto livello.
Purtroppo ogni volta che vedo la gente disprezzare il VB, è sempre e soltanto perché conoscono la versione 6, che ha 7 o 8 anni alle spalle... :rolleyes:
P.S. Glue programmer mi sa tanto di programmatore acefalo. :asd:
mi guarderò sto WC.NET ... :O
i "Glue programmers" sono quelli che non riscoprono nè l'acqua calda nè l'ombrello ... e si fanno la doccia con l'acqua fredda. :D
mi guarderò sto WC.NET ... :O
i "Glue programmers" sono quelli che non riscoprono nè l'acqua calda nè l'ombrello ... e si fanno la doccia con l'acqua fredda. :D
WC.NET :D
cdimauro
17-06-2007, 22:26
L'indentazione prima di tutto!!!! :D
come vivere senza le graffe?
Con l'identazione appunto: con Python sei OBBLIGATO a indentare bene il codice, e le parentesi graffe sono usate per BEN ALTRO... :asd:
p.s. odio anche chi mette le graffe così
if (a < b) {
a = 0;
return b;
}
Quindi mi odi. :(
x a2000: ROTFL. Questo thread finirà negli annali. :asd:
DioBrando
18-06-2007, 00:59
A me scassa TUTTA la sintassi dei linguaggi C-like. :asd:
non sei il solo :asd: Fek ci sta tirando una maC(++)umba :rotfl:
infatti non capisco come si possa consigliare per uno che comincia a programmare linguaggi come C e C++, così come non capisco perchè lo si insegni a livello didattico per lo stesso scopo. A senso solo in particolari condizioni (chessò agli istituti tecnici magari poi vai a lavorare nel settore industriale con macchine a controllo numerico, settore embedded ecc.); ormai dover padroneggiare certe strutture/HW delle macchine direttamente dalle mani del programmatore non serve, o cmq non serve come una volta. Si lascia che siano le funzionalità del linguaggio ad alto livello a rendere trasparenti buona parte di questi compiti al programmatore e buonanotte (così non c'è pericolo che si allochino risorse a muzzo per poi scoprire "toh ma come mai c'è un memory leak?" :muro:)
P.S. VB6 oggi non ha senso prenderlo in considerazione, visto che s'è evoluto e c'è di meglio. Altrimenti sarebbe facile criticare il BASIC perché il 2.0 di Commodore Vic20 e 64 aveva numeri di riga, e soltanto if, goto e gosub per strutturare il codice (modello spaghetti BASIC, appunto. :D ). ;)
VB e spaghetti code, due concetti che sì vanno molto d'accordo :D
DioBrando
18-06-2007, 01:10
L'indentazione prima di tutto!!!! :D
come vivere senza le graffe?
esatto con Python :D
è l'indentazione a dare la struttura al tuo codice, questo ti costringe ad essere per forza di cose ordinato e non puoi mascherare l'ordine semplicemente perchè tutte le parentesi che hai aperto poi vengono chiuse.
p.s. odio anche chi mette le graffe così
if (a < b) {
a = 0;
return b;
}
però è il modo + leggibile; in qls corso ti insegnino i rudimenti della Programmazione, quello è il metodo utilizzato.
Poi và a gusti ma ha una sua logica.
però è il modo + leggibile; in qls corso ti insegnino i rudimenti della Programmazione, quello è il metodo utilizzato.
Poi và a gusti ma ha una sua logica.
uhmm non ne sono convinto per niente, in blocchi parecchio lunghi di codice non riesci a capire dove ha inizio, a meno che tu non usi un IDE che evidenzi...
phoenixbf
18-06-2007, 03:13
L'indentazione prima di tutto!!!! :D
come vivere senza le graffe?
p.s. odio anche chi mette le graffe così
if (a < b) {
a = 0;
return b;
}
Perche'?
Io anche ho quello stile :)
cdimauro
18-06-2007, 08:40
uhmm non ne sono convinto per niente, in blocchi parecchio lunghi di codice non riesci a capire dove ha inizio, a meno che tu non usi un IDE che evidenzi...
Se hai blocchi così lunghi c'è qualcosa che non va nel codice, non nella posizione delle graffe. :D
In questi casi è bene rifattorizzare in modo da rendere il codice più snello e leggibile. ;)
Tra parentesi all'STM in tutti i costrutti che operano su blocchi di codice (if, for, while, ecc.) alla fine del blocco andava messo un commento che marcasse la fine del suddetto blocco.
if (...) {
Codice
} /* end if */
A me non piaceva e ho preferito definirmi delle apposite macro, in modo da scrivere invece:
#define endif ;
if (...) {
Codice
} endif
Comunque alla fine è sempre una questione di stile. :D
x DioBrando: ancora una volta quoto tutto. :p
^TiGeRShArK^
18-06-2007, 10:48
L'indentazione prima di tutto!!!! :D
come vivere senza le graffe?
p.s. odio anche chi mette le graffe così
if (a < b) {
a = 0;
return b;
}
e io ki mette le graffe così: :O
if (a < b)
{
a = 0;
return b;
}
:asd:
te lo appoggio.
e cioè ?
non mi proporre cag. per "Glue programmers" (quelli del copia-incolla). :mbe:
Ma se VB6 e' il linguaggio per "Glue programmers" per eccellenza... :mbe: :confused:
VB.NET 2005 è un linguaggio molto maturo, con parecchi costrutti sintattici ad alto livello.
Purtroppo ogni volta che vedo la gente disprezzare il VB, è sempre e soltanto perché conoscono la versione 6, che ha 7 o 8 anni alle spalle... :rolleyes:
Per il 90% delle persone VB6 e' il Visual Basic. VB.NET mi sembra piu' un linguaggio nuovo che incidentalmente ha preservato un nome simile
DioBrando
18-06-2007, 12:53
uhmm non ne sono convinto per niente, in blocchi parecchio lunghi di codice non riesci a capire dove ha inizio, a meno che tu non usi un IDE che evidenzi...
l'highlighting del codice è una funzionalità base di qualsiasi editor decente, non serve nemmeno arrivare agli IDE ;)
Quindi quello è il minimo dei fastidi (poi vabbè se uno vuol essere produttivo usando notepad, fatti suoi :asd:).
E come diceva Cesare se i blocchi sn molto lunghi, c'è qlc che non và nel codice + in generale, che ti crea problemi di leggibilità.
Secondo me il metodo migliore è proprio quello che non ti piace, perchè in questo modo si riesce a capire la gerarchia interna al tuo codice, soprattutto in presenza di molti cicli; ogni istruzione (mettiamo siano degli if annidati) si concluderà con l'apertura di una parentesi graffa e quindi sarà poi abbastanza facile capire quante e dove andranno chiuse. (perchè ogni if avrà a disposizione una sua riga, giusto? :O ).
Cmq mi hai messo della curiosità. Tu che stile usi per scrivere del codice?
DioBrando
18-06-2007, 12:58
e io ki mette le graffe così: :O
if (a < b)
{
a = 0;
return b;
}
:asd:
idem, proprio per il discorso che facevo prima.
Le parentesi aperte hanno lo stesso peso rispetto a quelle chiuse e sn messe usando la medesima tabulazione.
In questo modo se uno non sta attento finisce per confondere una parentesi aperta da una chiusa.
Nei cicli annidati poi è la morte. :banned:
DioBrando
18-06-2007, 13:00
Per il 90% delle persone VB6 e' il Visual Basic. VB.NET mi sembra piu' un linguaggio nuovo che incidentalmente ha preservato un nome simile
Ha ereditato il nome per una questione + di marketing; in realtà per poter essere inserito nella tecnologia .NET (quindi framework ecc.) è stato notevolmente cambiato; e infatti uno dei compiti + ingrati di migrazione sn proprio quelli, per esempio dei gestionali, da VB a VB.NET
albeganasa
18-06-2007, 13:18
l'highlighting del codice è una funzionalità base di qualsiasi editor decente, non serve nemmeno arrivare agli IDE ;)
Quindi quello è il minimo dei fastidi (poi vabbè se uno vuol essere produttivo usando notepad, fatti suoi :asd:).
E come diceva Cesare se i blocchi sn molto lunghi, c'è qlc che non và nel codice + in generale, che ti crea problemi di leggibilità.
Secondo me il metodo migliore è proprio quello che non ti piace, perchè in questo modo si riesce a capire la gerarchia interna al tuo codice, soprattutto in presenza di molti cicli; ogni istruzione (mettiamo siano degli if annidati) si concluderà con l'apertura di una parentesi graffa e quindi sarà poi abbastanza facile capire quante e dove andranno chiuse. (perchè ogni if avrà a disposizione una sua riga, giusto? :O ).
Cmq mi hai messo della curiosità. Tu che stile usi per scrivere del codice?
Non sono d'accordo...La comodità di non dover aprire parentesi con il VB net è tale che non si puo sbalgiare..in quanto l'efficentissimo e pesantissimo ide indenta automaticamente il codice..quindi puoi mettere tutti gli if che vuoi...se sbagli segui l'indentazione e metti l'end if che serve..
Cmq mi hai messo della curiosità. Tu che stile usi per scrivere del codice?
si comunque sono d'accordo che è tutta una questione di abitudine e non c'è un modo sbagliato...basta che uno ci si trovi.
io indento:
if (a < b)
{
a = 0;
return b;
}
e sopratutto niente tab, imposto il tab come 4 spazi.
pensandoci credo che ci si possa scrivere un libro sui diversti stili(parlando di indentazione ecc) di scrittura di codice.
DioBrando
18-06-2007, 13:56
Non sono d'accordo...La comodità di non dover aprire parentesi con il VB net è tale che non si puo sbalgiare..in quanto l'efficentissimo e pesantissimo ide indenta automaticamente il codice..quindi puoi mettere tutti gli if che vuoi...se sbagli segui l'indentazione e metti l'end if che serve..
Sai che non ho capito la tua obiezione :D
Il msg che tu hai quotato faceva un discorso in generale sulla scrittura e leggibilità del codice, ma è agnostico rispetto al linguaggio utilizzato.
Inoltre se vogliamo essere precisi, la comodità non te la dà VB.NET ma l'IDE ovvero Visual Studio che ti dà accesso a quella particolare (e praticissima, come la sostituzione per esempio del nome della classe ovunque sia stata nominata nel sorgente) funzionalità, che però viene messa a disposizione per tutti i linguaggi supportati da VS. ;)
Forse ti riferivi ai msg precedente in cui abbiamo criticato la sintassi di un codice scritto con linguaggi C-Like?
DioBrando
18-06-2007, 14:02
si comunque sono d'accordo che è tutta una questione di abitudine e non c'è un modo sbagliato...basta che uno ci si trovi.
sì e no; metodi sbagliati ce ne sn, qualora si dimostrino particolarmente confusionari.
Poi è vero che è questione di abitudine, ma dato che solitamente i progetti di un minimo di grandezza/importanza comportano il lavoro all'interno di un team, che devono adottare necessariamente il medesimo stile (altrimenti io che vado a leggere codice scritto da Tizio Caio Sempronio, farò una fatica immane in + a capirlo), lo stile che tu usi e che non rispetta gli standard definiti a monte, diventa per quel progetto "sbagliato".
Quindi lo stile è sì soggettivo, ma per determinate situazioni può essere oggettivamente non accettabile
io indento:
if (a < b)
{
a = 0;
return b;
}
e sopratutto niente tab, imposto il tab come 4 spazi.
pensandoci credo che ci si possa scrivere un libro sui diversti stili(parlando di indentazione ecc) di scrittura di codice.
proprio quello descritto da Tiger e che anche a me non piace :p
Però sarebbe un'idea simpatica quella di raccogliere i vari stili.
Vai crea il thread, che poi ci sbizzarriamo :D
cdimauro
18-06-2007, 14:10
Per il 90% delle persone VB6 e' il Visual Basic. VB.NET mi sembra piu' un linguaggio nuovo che incidentalmente ha preservato un nome simile
E' una grossa estensione al VB, di cui però continua a mantenere sintassi e costrutti originali.
Comunque, è vero: quando si parla di VB la gente si riferisce sempre al 6... :rolleyes:
cdimauro
18-06-2007, 14:12
Ha ereditato il nome per una questione + di marketing; in realtà per poter essere inserito nella tecnologia .NET (quindi framework ecc.) è stato notevolmente cambiato; e infatti uno dei compiti + ingrati di migrazione sn proprio quelli, per esempio dei gestionali, da VB a VB.NET
Nel 2000 (o 2001, adesso non ricordo bene) dovevo decidermi se portare il gestionale a cui lavoravo da VB5 a VB6. La prima release del VB6 era talmente piena di bug, che convinsi il principale a passare a Delphi (con mia somma gioia. :p )
DioBrando
18-06-2007, 14:24
Nel 2000 (o 2001, adesso non ricordo bene) dovevo decidermi se portare il gestionale a cui lavoravo da VB5 a VB6. La prima release del VB6 era talmente piena di bug, che convinsi il principale a passare a Delphi (con mia somma gioia. :p )
l'oracolo ha sempre ragione :D
a proposito, hai provato i prodotti della Codegear? Ho visto che è uscito da non molto l'IDE a hoc per lo sviluppo su RoR utilizzando però strettamente metodologie agili.
Sembrava interessante :)
cdimauro
18-06-2007, 14:29
Ho provato soltanto Delphi 2007, ed è molto solido e veloce, ma non c'è nessun aggiornamento particolare che mi faccia gridare al miracolo. :D
Interessante invece Delphi for PHP, che ho sottoposto all'attenzione dei colleghi che sviluppano su web con questo (schifoso :asd: ) linguaggio. Probabilmente compreremo qualche licenza per questo pacchetto, perché i primi commenti sono stati a dir poco entusiastici. :D
RoR non lo seguo perché è il male... :asd:
Interessante invece Delphi for PHP, che ho sottoposto all'attenzione dei colleghi che sviluppano su web con questo (schifoso :asd: ) linguaggio. senza flame: come mai secondo te PHP fa schifo? :p
io non ho mai studiato questo linguaggio, so solo a cosa serve e come funziona, e sono curioso di sapere come mai la pensi così.
cdimauro
18-06-2007, 14:59
Avevo scritto un bel post un paio d'anni fa, ma il motore di ricerca non me lo trova. :muro:
Intanto qualcosa la trovi qui: http://www.hwupgrade.it/forum/showpost.php?p=9275523&postcount=22
Poi in generale è il fatto che il PHP è un linguaggio che è stato fatto evolvere (ispirandosi fortemente al C) a colpi di pezze, senza una "filosofia" bel definita (anche se con PHP 5.0 hanno dato una bella sistemata al linguaggio, in particolare con le classi, interfacce e eccezioni, mutuate senza troppi problemi da Java). Te ne accorgi per la presenza di centinaia e centinaia di funzioni che agiscono sui dati, anziché la presenza di oggetti con metodi appropriati (es: http://www.php.net/manual/it/ref.array.php ).
Per il resto, niente modularizzazione del codice, presenza di pochi costrutti di programmazione funzionale, amalgama fra liste e dizionari, scarsa tipizzazione dei dati (viene preferita la conversione automatica, che può portare a rognosi bug), e se mi viene in mente qualcos'altro lo posto. :D
sì e no; metodi sbagliati ce ne sn, qualora si dimostrino particolarmente confusionari.
Poi è vero che è questione di abitudine, ma dato che solitamente i progetti di un minimo di grandezza/importanza comportano il lavoro all'interno di un team, che devono adottare necessariamente il medesimo stile (altrimenti io che vado a leggere codice scritto da Tizio Caio Sempronio, farò una fatica immane in + a capirlo), lo stile che tu usi e che non rispetta gli standard definiti a monte, diventa per quel progetto "sbagliato".
Quindi lo stile è sì soggettivo, ma per determinate situazioni può essere oggettivamente non accettabile
sono d'accordissimo..se non si arriva ad uno standard interno al team è l'apocalissi, ma dove tutt'ora lavoro e in 2 precedenti ditte....lo stile era sempre questo eheheh
Però sarebbe un'idea simpatica quella di raccogliere i vari stili.
Vai crea il thread, che poi ci sbizzarriamo :D
ehehe magari un giorno lo farò...o magari stasera...raccolgo le idee
DioBrando
18-06-2007, 19:07
Avevo scritto un bel post un paio d'anni fa, ma il motore di ricerca non me lo trova. :muro:
Intanto qualcosa la trovi qui: http://www.hwupgrade.it/forum/showpost.php?p=9275523&postcount=22
Poi in generale è il fatto che il PHP è un linguaggio che è stato fatto evolvere (ispirandosi fortemente al C) a colpi di pezze, senza una "filosofia" bel definita (anche se con PHP 5.0 hanno dato una bella sistemata al linguaggio, in particolare con le classi, interfacce e eccezioni, mutuate senza troppi problemi da Java). Te ne accorgi per la presenza di centinaia e centinaia di funzioni che agiscono sui dati, anziché la presenza di oggetti con metodi appropriati (es: http://www.php.net/manual/it/ref.array.php ).
Per il resto, niente modularizzazione del codice, presenza di pochi costrutti di programmazione funzionale, amalgama fra liste e dizionari, scarsa tipizzazione dei dati (viene preferita la conversione automatica, che può portare a rognosi bug), e se mi viene in mente qualcos'altro lo posto. :D
PHP è il linguaggio per eccellenza dello Spaghetti Coding :D
nella 5a release hanno cercato di sopperire ad alcune grosse manchevolezze cercando di indirizzare lo sviluppo verso una filosofia OO; ma come sempre succede quando un qualcosa nasce per uno scopo e non è fatto per fare "altro" ne viene fuori un minestrone che non sà nè di carne nè di pesce.
Sceglierei PHP solo per progetti molto piccoli, che richiedano un tempo risicatissimo per essere portati a termine e per i quali posso contare su un ENORME bacino di script già pronti (questa è la vera forza di PHP insieme alla documentazion/community).
Il rischio che si corre però è anche di trovare molto materiale non solo bacato ma anche a rischio di SQLinjections et similia (la maggioranza dei CMS per esempio è scritta supportando PHP e di porcherie ne ho viste a iosa, ma che dico a iosa, a cariolate :asd:)
Altro linguaggio con sintassi C-like a cui preferirei tutta la vita ma proprio tutta la vita Python, con il quale per altro sul terreno della tipizzazione dei dati e l'uso dei dizionari non c'è proprio storia :)
DioBrando
18-06-2007, 19:11
Ho provato soltanto Delphi 2007, ed è molto solido e veloce, ma non c'è nessun aggiornamento particolare che mi faccia gridare al miracolo. :D
ma il core è basato sulle precedente release della Borland o su Eclipse, come avevo letto qualche mese fà quando si parlava dell'imminente spin-off?
Interessante invece Delphi for PHP, che ho sottoposto all'attenzione dei colleghi che sviluppano su web con questo (schifoso :asd: ) linguaggio. Probabilmente compreremo qualche licenza per questo pacchetto, perché i primi commenti sono stati a dir poco entusiastici. :D
RoR non lo seguo perché è il male... :asd:
applicazioni web scritte + velocemente che con RoR ne ho viste poche però :D
Delphi for PHP non conosco, ma se dovessi usare un IDE sceglierei o PHPDesigner che ha un editor veramente molto potente e in grado di manipolare la maggiorparte dei linguaggi web-oriented (peso dell'applicazione: 3MB) ed ha anche un debugger proprio per PHP, oppure il classico modulo di espansione per Eclipse (o anche l'incarnazione di Eclipse PHPPythonesca :D, disponibile sul sito della Truworks)
DioBrando
18-06-2007, 19:13
sono d'accordissimo..se non si arriva ad uno standard interno al team è l'apocalissi, ma dove tutt'ora lavoro e in 2 precedenti ditte....lo stile era sempre questo eheheh
vade retro :D
ehehe magari un giorno lo farò...o magari stasera...raccolgo le idee
sarebbe simpatico, come quella discussione sul miglior linguaggio dove vennero tirate fuori le citazioni per ogni tipo di programmatore; cavolo non ricordo minimanente l'url però :doh:
cdimauro
18-06-2007, 20:56
PHP è il linguaggio per eccellenza dello Spaghetti Coding :D
E purtroppo buona parte della nostra piattaforma aziendale è sviluppata in PHP. :cry:
nella 5a release hanno cercato di sopperire ad alcune grosse manchevolezze cercando di indirizzare lo sviluppo verso una filosofia OO; ma come sempre succede quando un qualcosa nasce per uno scopo e non è fatto per fare "altro" ne viene fuori un minestrone che non sà nè di carne nè di pesce.
Ecco, hai reso benissimo ciò che volevo esprimere col mio messaggio. :p
Sceglierei PHP solo per progetti molto piccoli, che richiedano un tempo risicatissimo per essere portati a termine e per i quali posso contare su un ENORME bacino di script già pronti (questa è la vera forza di PHP insieme alla documentazion/community).
Infatti. E' l'unica cosa su cui può contare PHP: l'enorme community e le migliaia e migliaia di script/librerie/framework che sono stati sviluppati per questo linguaggio.
Il rischio che si corre però è anche di trovare molto materiale non solo bacato ma anche a rischio di SQLinjections et similia (la maggioranza dei CMS per esempio è scritta supportando PHP e di porcherie ne ho viste a iosa, ma che dico a iosa, a cariolate :asd:)
Idem. D'altra parte se le API per accedere a un DB ti offrono soltanto di inserire una stringa con la query e tutti i dati incapsulati, la tendenza è proprio quella di scrivere porcate come queste:
$query = "SELECT ID FROM Users WHERE Username = $Username AND Password = $Password";
con tutte le conseguenze che ne seguono. :muro:
Qualcosa è cambiata con PHP 5.2, che ha finalmente della API standardizzate per l'accesso ai db, similmente a quelle di Python e Perl, ma sono ancora giovani e i programmatori troppo legati alla programmazione a spaghetti per pensare di passare a un modello completamento diverso.
Altro linguaggio con sintassi C-like a cui preferirei tutta la vita ma proprio tutta la vita Python, con il quale per altro sul terreno della tipizzazione dei dati e l'uso dei dizionari non c'è proprio storia :)
Verissimo. :D
cdimauro
18-06-2007, 20:59
ma il core è basato sulle precedente release della Borland o su Eclipse, come avevo letto qualche mese fà quando si parlava dell'imminente spin-off?
E' basato sempre sul solito core della Borland. Eclipse lasciamolo perdere che è meglio: già la suite Delphi per win32 è abbastanza pesante, ed è meglio non renderla del tutto inutilizzabile passando a Eclipse... :stordita:
applicazioni web scritte + velocemente che con RoR ne ho viste poche però :D
Bisogna vedere se è una questione di framework o di linguaggio. ;)
Delphi for PHP non conosco, ma se dovessi usare un IDE sceglierei o PHPDesigner che ha un editor veramente molto potente e in grado di manipolare la maggiorparte dei linguaggi web-oriented (peso dell'applicazione: 3MB) ed ha anche un debugger proprio per PHP, oppure il classico modulo di espansione per Eclipse (o anche l'incarnazione di Eclipse PHPPythonesca :D, disponibile sul sito della Truworks)
Niente a che vedere con Delphi for PHP, però. :D
Hai presente quant'è bello Delphi come RAD per realizzare GUI per Windows? Ecco, immagina più o meno la stessa, ma per PHP. :D
P.S. Quanto mi piacerebbe un Delphi for Python per sviluppare applicazioni web!!!
Però sarebbe un'idea simpatica quella di raccogliere i vari stili.
Vai crea il thread, che poi ci sbizzarriamo :D
Ancora piu' interessante sarebbe, secondo me, provare a vedere come diverse persone usano diversi linguaggi per risolvere dei semplici problemi. Se ne sceglie uno ogni una o due settimane, e ognuno propone la propria soluzione e le si discute.
La cosa rischia di creare un po' di confusione (l'insieme di linguaggi che ognuno conosce sara' variopinto) e sicuramente un po' di antagonismo, pero' ci sarebbe da divertirsi. Non occorre trovare dei problemi originali o complicati, in fondo basta vedere cosa succede ogniqualvolta qualcuno chiede lumi sul solito crivello di Eratostene ...
Ancora piu' interessante sarebbe, secondo me, provare a vedere come diverse persone usano diversi linguaggi per risolvere dei semplici problemi. Se ne sceglie uno ogni una o due settimane, e ognuno propone la propria soluzione e le si discute.
La cosa rischia di creare un po' di confusione (l'insieme di linguaggi che ognuno conosce sara' variopinto) e sicuramente un po' di antagonismo, pero' ci sarebbe da divertirsi. Non occorre trovare dei problemi originali o complicati, in fondo basta vedere cosa succede ogniqualvolta qualcuno chiede lumi sul solito crivello di Eratostene ...
non male come idea:
http://www.hwupgrade.it/forum/showthread.php?t=1495999
non male come idea:
http://www.hwupgrade.it/forum/showthread.php?t=1495999
Non capisco se ti riferisci alla mia o a quella del link :mbe:. Faccio l'ottimista e propendo per la prima ipotesi :D. Se dici che sei interessato (e magari lo e' anche qualcun altro), apriamo un thread e cominciamo a vedere che problemi si possono affrontare.
Non capisco se ti riferisci alla mia o a quella del link :mbe:. Faccio l'ottimista e propendo per la prima ipotesi :D. Se dici che sei interessato (e magari lo e' anche qualcun altro), apriamo un thread e cominciamo a vedere che problemi si possono affrontare.
la tua :D e intanto proponevo anche il mio sondaggino.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.