PDA

View Full Version : Voglio imparare a programmare!!!


Pagine : [1] 2

PeppinoX
07-02-2006, 01:57
Salve a tutti/e.

Lavoro 18h al giorno con i pc e mi sono stufato di essere un "utente" vorrei iniziare a programmare, mi hanno consigliato per iniziare il Visual Basic 6, dato ke nn conosco nessun linguaggio di programmazione a parte i nomi, vi chiedo un aiuto per trovare qualke guida (naturalmente in ita se possibile) ke spieghi da zero come utilizzare tale linguaggio.

Grazie anticipatamente.

mjordan
07-02-2006, 02:09
Salve a tutti/e.

Lavoro 18h al giorno con i pc e mi sono stufato di essere un "utente" vorrei iniziare a programmare, mi hanno consigliato per iniziare il Visual Basic 6, dato ke nn conosco nessun linguaggio di programmazione a parte i nomi, vi chiedo un aiuto per trovare qualke guida (naturalmente in ita se possibile) ke spieghi da zero come utilizzare tale linguaggio.

Grazie anticipatamente.

Se n'è parlato tantissimo in questo forum di quale linguaggio utilizzare per primo ma quasi mai è stato consigliato Visual Basic, tantomeno la 6.
Le conclusioni sono sempre 3, alla fine, cioè quelle di partire con C, C++ o Java. Io ti consiglio il C.

AnonimoVeneziano
07-02-2006, 02:44
Mah, io credo che potresti anche provare a partire o con VB .NET (visual basic .NET) oppure C# .

Credo che per quello che vuoi fare tu siano linguaggi più utili del C (si arriva ad una operatività molto maggiore molto più velocemente e volendo si possono fare applicazioni grafiche con altrettanta celerità) .

Se vuoi ,invece, comprendere al meglio il funzionamento del calcolatore nella sua completezza allora C o C++ sono i linguaggi che possono fare al caso tuo , ma non sempre partire col C, per me, è una buona cosa :)

Io sono partito col C perchè è usanza partire con questo linguaggio e , da autodiatta qual'ero fino a qualche mese fa, ho seguito questa usanza :p

Però mi sono accorto, imparando successivamente altri linguaggi come C++, C# o Java, che il C non mi ha dato la nozione di molti concetti programmativi invece molto importanti , come ad esempio la programmazione orientata agli oggetti .
C# e Java sono linguaggi altamente tipizzati e "classizzati" dove tutto è una classe , un oggetto. Ti obbligano a imparare a programmare avendo in mente le classi e l'organizzazione del codice in pezzi anzichè in un unico blocco monolitico (cosa di cui, il programmatore novello affacciandosi al C , spesso non comprende l'importanza) .

Insomma, credo che alla fine, ma è solo un parere personale, linguaggi come C# o Java , in un certo senso, contribuiscano a far capire meglio a un apprendista come si dovrebbe progettare un software. Anche il C++ lo fa , ma per me molto meno e il C non ne parliamo :D .

Certo , poi il C è d'obbligo saperlo , e dopo aver imparato C# o Java (che sono i due che consiglio maggiormente) e averne assorbito i concetti puoi tranquillamente , probabilmente senza difficoltà , affrontare l'apprendimento dell' ANSI C e magari anche del C++.

Su una cosa però credo che siamo tutti d'accordo . Visual Basic 6 NO!! :p

Ciao

franksisca
07-02-2006, 10:40
guarda, ti consiglio java, anche perchè si trova una marea di materiale e di appunti, su tutti i siti.
per una guida ti consiglio www.html.it

Ziosilvio
07-02-2006, 10:47
mi sono stufato di essere un "utente" vorrei iniziare a programmare
Io suggerisco di cominciare con Python (http://www.python.org/), esiste per tutti i principali sistemi operativi e ci puoi fare sia piccole utility, sia progetti più complessi, sia cose "al volo" con l'interprete interattivo.
mi hanno consigliato per iniziare il Visual Basic 6
E ti hanno detto una stupidaggine grossa come una casa.
VB è esattamente il linguaggio da non scegliere per iniziare a programmare: è legato a doppio filo a Windows (quindi non lo riusi da nessun'altra parte), ha una sintassi macchinosa, per fare la cosa più elementare del mondo devi costruirci intorno un'interfaccia grafica, e soprattutto è disponibile solo a pagamento (salato).

E' allucinante come in pieno 2006 circolino ancora degli "esperti di informatica" convinti che tutto ciò che ha a che vedere con i computer debba provenire da Microsoft.
Ma si rendono conto o no, di essere la rovina del loro stesso settore?
vi chiedo un aiuto per trovare qualke guida (naturalmente in ita se possibile) ke spieghi da zero come utilizzare tale linguaggio
Dive into Python (http://www.diveintopython.org/) dovrebbe andare bene.

k0nt3
07-02-2006, 11:20
la mia opinione:
VB6: è molto poco didattico.. impararlo non ti è molto utile
VB.NET: non lo conosco
C#&Java&Delphi: ok sono facili, però richiedono la padronanza della programmazione ad oggetti! prima è meglio che ti concentri sulla padronanza di un linguaggio non object oriented e dopo passi a uno di questi :D
Python: è un pò troppo diverso dagli altri linguaggi.. dopo faresti fatica a passare ad altri linguaggi
C&C++: sarebbero perfetti e molto utili, ma per chi è alle prime armi a volte causano diversi problemi e incomprensioni principalmente dovute alla gestione della memoria (che non è nascosta al programmatore)
PASCAL: secondo me è il più adatto per imparare (forse perchè io ho iniziato così) per i seguenti motivi..
- è un linguaggio semplice
- ha dei meccanismi per nascondere la gestione della memoria
- una volta che lo hai imparato il passaggio a C/C++/Java non è difficile (cambia la sintassi, ma poi ti ritrovi), mentre il passaggio a Delphi dovrebbe essere immediato (io non conosco Delphi però :D)
- è stato creato apposta per imparare a programmare a quanto ne so
ecco alcuni links:
http://www.taoyue.com/tutorials/pascal/contents.html
http://www.techtutorials.info/pascal.html
http://www.pascal-central.com/tools.html

il mio consiglio quindi è iniziare a fare qualche programma senza interfaccia grafica che richiede degli input da tastiera e stampa l'output a schermo (è classico), poi quando senti di avere sufficiente padronanza puoi passare alla programmazione ad oggetti (ad esempio con Delphi oppure Java o C#) e vedere come si disegna un'interfaccia grafica...

ps. c'è un grande IMHO davanti a tutto!

PeppinoX
07-02-2006, 11:38
Grazie dei consigli, ho aperto il VB6 e ho visto che è molto semplice da utilizzare (basta spostare gli oggetti nella finestra ed è tutto fatto) scusate ma il linguaggio C è testuale e lo posso utilizzare anche su linux?

k0nt3
07-02-2006, 11:45
Grazie dei consigli, ho aperto il VB6 e ho visto che è molto semplice da utilizzare (basta spostare gli oggetti nella finestra ed è tutto fatto) scusate ma il linguaggio C è testuale e lo posso utilizzare anche su linux?
C lo puoi utilizzare su linux (che è fatto in C praticamente).. come anche la maggiorparte dei linguaggi (VB non credo proprio però)!
VB6 è facile da usare e nessuno lo nega, però a mio avviso da un'impostazione sbagliata allo stile di programmazione! cioè finchè vuoi farti la tua finestrella che schiacci un bottone e fa qualcosa ok.. ma se vuoi imparare davvero a programmare ti ho dato i miei consigli (di cominciare senza grafica)

k0nt3
07-02-2006, 11:47
se comunque vuoi spostare oggetti nella finestra come fai in VB6 allora prova C# o VB.NET (che non conosco però)

PeppinoX
07-02-2006, 15:26
se volessi iniziare con C# cosa mi servirebbe?

tglman
07-02-2006, 15:31
Secondo me se vuoi capire come realmente funzionano le macchine che
stai usando devi iniziare con il c, dal quale puoi passare a quasi qualsiasi altro linguaggio.

se voui programmare per fare il vecchio bottoncino che salta da un lato all'altro dello schermo ti puoi buttare tranquillamente su VB ;)

Pero gran parte del mondo gira su c, c++, java
basta guardare dei rei del software, del tipo GNU e APACHE...

Ciao

k0nt3
07-02-2006, 15:42
se volessi iniziare con C# cosa mi servirebbe?
.NET http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5
.NET SDK http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=fe6f2099-b7b4-4f47-a244-c96d69c35dec
o se hai il 64bit vedi http://msdn.microsoft.com/netframework/downloads/updates/default.aspx per gli altri download..
e VisualStudio .NET se ce l'hai oppure l'ottimo Borland C# Builder http://www.borland.com/downloads/download_csharpbuilder.html la cui versione Personal per scopi non commerciali è gratuita (vedi link)

ps. prima facevi riferimento a linux... si può programmare in C# su linux, ma non si hanno a disposizione gli stessi strumenti.. dovresti usare MONO al posto del Framework .NET e MonoDevelop al posto di C# Builder o Visual Studio

0rph3n
07-02-2006, 15:46
qua (http://msdn.microsoft.com/vstudio/express/visualcsharp/) trovi le versioni express di vb.net, vc#, vj# e vc++.net, che secondo me son molto buone!
io ti consiglio di cominciare con la programmazione ad oggetti in un linguaggio alto livello e quando ti senti abbastanza sicuro di aver appreso la logica che ci sta dietro passare via via a qualcosa di più complicato.

'iao

Crashbandy80
07-02-2006, 16:34
Io suggerisco di cominciare con Python (http://www.python.org/), esiste per tutti i principali sistemi operativi e ci puoi fare sia piccole utility, sia progetti più complessi, sia cose "al volo" con l'interprete interattivo.

E ti hanno detto una stupidaggine grossa come una casa.
VB è esattamente il linguaggio da non scegliere per iniziare a programmare: è legato a doppio filo a Windows (quindi non lo riusi da nessun'altra parte), ha una sintassi macchinosa, per fare la cosa più elementare del mondo devi costruirci intorno un'interfaccia grafica, e soprattutto è disponibile solo a pagamento (salato).

E' allucinante come in pieno 2006 circolino ancora degli "esperti di informatica" convinti che tutto ciò che ha a che vedere con i computer debba provenire da Microsoft.
Ma si rendono conto o no, di essere la rovina del loro stesso settore?

Dive into Python (http://www.diveintopython.org/) dovrebbe andare bene.
La rovina del settore?
Costosa?
La microsoft ha messo a disposizione le versioni Express gratuitamente.

L'ambiente .NET e' molto valido, sia per iniziare vista la documentazione (msdn in primis), sia per la facilita', praticita', potenzialita' dello stesso.

E' un'alternativa da prendere in considerazione e non da scartare come molti anti-microsoft, magari senza aver toccato con mano il prodotto, affermano ;) .

Crashbandy80
07-02-2006, 16:37
Ad ogni modo trovo Python parecchio interessante, e lo preferirei quasi rispetto a java :D.

mjordan
07-02-2006, 17:48
Io consiglio il C per diversi motivi. Quando si parla di "didattica" bisogna considerare i concetti della programmazione, non la produttività. Quella è una cosa che secondo me viene dopo. Il C è un linguaggio che ha una sintassi spartana, come linguaggio è piccolo, ha poche parole riservate, una sintassi senza restrizioni. Ed è considerato la "lingua franca" per chi parla di programmazione. Insomma per me il C sta ai linguaggi di programmazione come l'inglese sta alle lingue parlate. Molti articoli, tutorial e standard si basano sul C liscio.

Quindi non imparare la OO in un primo linguaggio non la vedo una mancanza. Anzi, considerando che la OO in fondo è solo un'aspetto della programmazione strutturata, direi che è meglio imparare prima a strutturare un programma con un'approccio "procedurale". Per l'OO c'è tempo.

E il C ha tutto quello che serve per imparare linguaggi, in futuro. Una sintassi che è la base di altri linguaggi è una delle cose piu' importanti.

Ultima cosa, ma non per importanza, il C conforma la mente alla risoluzione dei problemi con il ragionamento, non con il mero utilizzo di un'API. E questo secondo me è una cosa molto importante per chi vuole imparare a programmare.

k0nt3
07-02-2006, 17:56
Io consiglio il C per diversi motivi. Quando si parla di "didattica" bisogna considerare i concetti della programmazione, non la produttività. Quella è una cosa che secondo me viene dopo. Il C è un linguaggio che ha una sintassi spartana, come linguaggio è piccolo, ha poche parole riservate, una sintassi senza restrizioni. Ed è considerato la "lingua franca" per chi parla di programmazione. Insomma per me il C sta ai linguaggi di programmazione come l'inglese sta alle lingue parlate. Molti articoli, tutorial e standard si basano sul C liscio.

Quindi non imparare la OO in un primo linguaggio non la vedo una mancanza. Anzi, considerando che la OO in fondo è solo un'aspetto della programmazione strutturata, direi che è meglio imparare prima a strutturare un programma con un'approccio "procedurale". Per l'OO c'è tempo.

E il C ha tutto quello che serve per imparare linguaggi, in futuro. Una sintassi che è la base di altri linguaggi è una delle cose piu' importanti.

Ultima cosa, ma non per importanza, il C conforma la mente alla risoluzione dei problemi con il ragionamento, non con il mero utilizzo di un'API. E questo secondo me è una cosa molto importante per chi vuole imparare a programmare.
mai QUOTE più QUOTE di questo :D

Ziosilvio
07-02-2006, 18:08
La rovina del settore?
Microsoft, di per sé, alterna prodotti ottimi (Excel, WinXP SP2), buoni (.NET, Word), mediocri (Outlook Express, Internet Explorer) e pessimi (FrontPage, WinME); ma, da sola, non è lei la rovina del settore.

Il problema viene da quegli individui che, dopo aver imparato a usare Windows (magari piratato), Word (magari piratato), Excel (magari piratato) ed eventualmente VB (magari piratato) senza impallare il computer una volta ogni tre per due, si autoproclamano "esperti di informatica" e si mettono a divulgare il verbo (falso) secondo cui "PC=Microsoft".
Col risultato che molta gente che parte da zero, e che potrebbe conoscere l'informatica per quella che è veramente --- standard, protocolli, linguaggi comuni --- viene invece indottrinata e resa incapace di capire che esistono alternative, spesso altrettanto adatte alle proprie necessità.

Nell'informatica come nella vita, il problema non è la religione, ma i fanatici.
Costosa?
La microsoft ha messo a disposizione le versioni Express gratuitamente.
Questa mi giunge nuova. Chiedo scusa.
L'ambiente .NET e' molto valido, sia per iniziare vista la documentazione (msdn in primis), sia per la facilita', praticita', potenzialita' dello stesso.
Potenzialità che però possono essere espresse al massimo solo in ambiente Microsoft.
Il che taglia fuori tutti i calcolatori --- e sono una fetta molto consistente --- che girano con sistemi diversi.
Sarà il caso di "imparare a programmare", ossia acquisire un tipo di competenza ad amplissimo raggio, adoperando cose con limitazioni così pesanti?
Io dico di no.
E' un'alternativa da prendere in considerazione e non da scartare come molti anti-microsoft, magari senza aver toccato con mano il prodotto, affermano
Purtroppo io il prodotto l'ho visto toccare con mano, e ho capìto subito che potevo ottenere le stesse cose, in modo più semplice, con strumenti diversi e che potevano essere usati su macchine non Windows.

Ovviamente, se uno fa il programmatore Windows per lavoro, allora VB.NET e VC++.NET sono la scelta giusta.
Ma se uno deve imparare, ce ne sono di molto migliori.

Ziosilvio
07-02-2006, 18:14
Io consiglio il C per diversi motivi. Quando si parla di "didattica" bisogna considerare i concetti della programmazione, non la produttività. Quella è una cosa che secondo me viene dopo.
Ok, ti seguo.
Il C è un linguaggio che ha una sintassi spartana, come linguaggio è piccolo, ha poche parole riservate, una sintassi senza restrizioni. Ed è considerato la "lingua franca" per chi parla di programmazione. Insomma per me il C sta ai linguaggi di programmazione come l'inglese sta alle lingue parlate. Molti articoli, tutorial e standard si basano sul C liscio.
Mettiamola così: tu, hai imparato l'inglese prima delle altre lingue?
Sono d'accordo anch'io che un programmatore completo debba conoscere il C, così come chi gira per il mondo deve conoscere l'inglese (e magari anche un po' di spagnolo e di cinese).
Ma qui parliamo di persone che iniziano a programmare, e che hanno sì e no una vaga idea di cosa voglia dire la parola "algoritmo".
Prima facciamo loro vedere come si risolvono i problemi per mezzo della programmazione; e poi daremo loro strumenti potenti per applicazioni complesse.
Ogni cosa a suo tempo.
Quindi non imparare la OO in un primo linguaggio non la vedo una mancanza. Anzi, considerando che la OO in fondo è solo un'aspetto della programmazione strutturata, direi che è meglio imparare prima a strutturare un programma con un'approccio "procedurale". Per l'OO c'è tempo.
Quoto.
Ultima cosa, ma non per importanza, il C conforma la mente alla risoluzione dei problemi con il ragionamento, non con il mero utilizzo di un'API. E questo secondo me è una cosa molto importante per chi vuole imparare a programmare.
Essere indipendenti dall'API e saper ragionare, è importante.
Il guaio del C è che te lo fa imparare a furia di imprecazioni contro una delle librerie di input-output più raffazzonate che si siano mai viste.
Il che, peraltro, è precisamente il motivo per cui io non consiglio mai il C come primo linguaggio.

mjordan
07-02-2006, 19:20
Ma qui parliamo di persone che iniziano a programmare, e che hanno sì e no una vaga idea di cosa voglia dire la parola "algoritmo".
Prima facciamo loro vedere come si risolvono i problemi per mezzo della programmazione; e poi daremo loro strumenti potenti per applicazioni complesse.
Ogni cosa a suo tempo.


Appunto. E per come la vedo io, non significa usare le API. Tu in Java puoi creare una socket senza nemmeno sapere cos'è una socket. Non lo vedo un modo per imparare. Le API di Java sono fantastiche quando devi fre qualcosa abbastanza velocemente, senza sbatterti troppo e senza neanche dover ricordare chissà quali concetti.
Per uno che invece deve imparare a programmare, deve imparare per primo i cicli, il concetto di variabile, la gestione di un flusso di esecuzione, la strutturazione di una funzione, il passaggio dei parametri, la compilazione di un programma con piu' file sorgenti, la definizione di tipi non primitivi... Cose che devi imparare pure se inizi a programmare con Java. Quindi per come la vedo io, va benissimo il C, perchè non è tutto questo mostro sacro che lo si fa credere. Saper scrivere qualcosa di decente in C è proprio il minimo per buttarsi nel mondo della programmazione. Uno che impara a programmare per come la vedo io deve capire i fondamenti della programmazione, non spaccarsi il cervello a impostare una classe, un costruttore e altra roba. Iniziare a programmare con Java ti fa avere una mentalità che dopo potrebbe essere difficile "sconfiggere". Quindi io la vedo molto piu' facile per uno che passa da C a Java, che non uno che passa da Java a C. Parere personale.

Inoltre, per uno che sta a 0 di programmazione, quanto meno deve comprarsi un libro, non si può dipendere dai tutorial in rete. Un libro esaustivo è davvero il minimo. Quindi (sempre IMHO) trovo scorretto consigliare Java solo perchè si trovano parecchi tutorial in rete. Anche perchè per C ci si trovano addiruttura gli standard. Se vuoi imparare OpenGL, per esempio, devi conoscere C, non Java. Se vuoi imparare OpenMP devi conoscere C, non Java. Se vuoi imparare la network programming cn le palle, devi conoscere C, non Java.
Questo è il succo del mio ragionamento.

k0nt3
07-02-2006, 20:27
Potenzialità che però possono essere espresse al massimo solo in ambiente Microsoft.
Il che taglia fuori tutti i calcolatori --- e sono una fetta molto consistente --- che girano con sistemi diversi.
Sarà il caso di "imparare a programmare", ossia acquisire un tipo di competenza ad amplissimo raggio, adoperando cose con limitazioni così pesanti?
Io dico di no.
non taglia fuori un bel niente! http://www.mono-project.com/Main_Page
.NET funziona nativamente su tutti i processori x86 e può essere interpretato sugli altri! c'è già la versione per MacOS di mono, e quella per i sistemi solaris/sparc è in beta.

Purtroppo io il prodotto l'ho visto toccare con mano, e ho capìto subito che potevo ottenere le stesse cose, in modo più semplice, con strumenti diversi e che potevano essere usati su macchine non Windows.

Ovviamente, se uno fa il programmatore Windows per lavoro, allora VB.NET e VC++.NET sono la scelta giusta.
Ma se uno deve imparare, ce ne sono di molto migliori.
hai visto male! http://beaglewiki.org/Development è fatto in .NET e funziona su linux!
poi non c'è solo VB.NET e VC++.NET! ti consiglio di dare un'occhiata al C#, perchè è considerato uno dei migliori linguaggi (EDIT: di quel tipo) disponibili (infatti non è uscito dal turbante di bill)!
Ma qui parliamo di persone che iniziano a programmare, e che hanno sì e no una vaga idea di cosa voglia dire la parola "algoritmo".
allora diamogli un'idea di cosa sia un algoritmo! non si va da nessuna parte altrimenti!
Prima facciamo loro vedere come si risolvono i problemi per mezzo della programmazione; e poi daremo loro strumenti potenti per applicazioni complesse.
appunto! gli strumenti potenti di cui parli è la programmazione a oggetti! prima si imparano i fondamenti..

Il guaio del C è che te lo fa imparare a furia di imprecazioni contro una delle librerie di input-output più raffazzonate che si siano mai viste.
Il che, peraltro, è precisamente il motivo per cui io non consiglio mai il C come primo linguaggio.
questo è il motivo per cui io consigliavo il PASCAL.. ma se uno riesce già col C tanto meglio!

PeppinoX
07-02-2006, 21:49
Scusate, ho lavorato in un negozio di pc, in due anni ho visto solo 2 pc con linux e nessuno dei clienti mi ha chiesto <<"mi potrebbe installare mandriva (o qualsiasi altro S.O. linux) nel mio pc">> nonostante sia un S.O. gratuito, tutti si accontentano di spendere 100 euro per la licenza WIN, deduco che linux & co. sono S.O. poco utilizzati dalla "popolazione comune" motivo del quale su linux si trovano poki gioki e tutte le case produttrici elaborano prg, giochi, utility, etc. per Win, ora nn voglio dire ke il linux nn deve essere preso in considerazione però per i tempi ke corrono penso ke sia più indicato programmare su "piattaforma" WIN.

Scusate se mi sono espresso male.

IspiCiosa
07-02-2006, 22:28
io consiglio il C. ;)

mjordan
07-02-2006, 22:55
Scusate, ho lavorato in un negozio di pc, in due anni ho visto solo 2 pc con linux e nessuno dei clienti mi ha chiesto <<"mi potrebbe installare mandriva (o qualsiasi altro S.O. linux) nel mio pc">> nonostante sia un S.O. gratuito, tutti si accontentano di spendere 100 euro per la licenza WIN, deduco che linux & co. sono S.O. poco utilizzati dalla "popolazione comune" motivo del quale su linux si trovano poki gioki e tutte le case produttrici elaborano prg, giochi, utility, etc. per Win, ora nn voglio dire ke il linux nn deve essere preso in considerazione però per i tempi ke corrono penso ke sia più indicato programmare su "piattaforma" WIN.

Scusate se mi sono espresso male.

Il problema non è programmare per l'una o l'altra piattaforma. Il problema è quando si impara bisognerebbe imparare i concetti comuni. Programmando in C puro non sei legato ad un SO in modo particolare (ci sono ancora casi in cui bisogna farci caso) ma in linea di massima sei indipendente dalla piattaforma.
Linux non vedrai mai chiedertelo. Chi lo usa è gente che se lo sa installare da solo e difficilmente ricorre alle assistenze tecniche.

PeppinoX
07-02-2006, 23:40
Sono daccordo x la stabilità di linux, ma trovami doom3 o call of duty 2 che girano su tale S.O.

k0nt3
07-02-2006, 23:41
Sono daccordo x la stabilità di linux, ma trovami doom3 o call of duty 2 che girano su tale S.O.
non so che probabilità avevi... :D doom3 c'è anche per il popolo di linux!!! :read: io ci ho anche giocato e va che è una meraviglia :D

PeppinoX
07-02-2006, 23:42
ancora peggio per MAC

PeppinoX
07-02-2006, 23:45
cmq potrei iniziare con Visual C# (tipo VB) e fare da subito "stupide" applicazioni tipo sommare due numeri.... e da lì approfondire il C?

k0nt3
07-02-2006, 23:53
cmq potrei iniziare con Visual C# (tipo VB) e fare da subito "stupide" applicazioni tipo sommare due numeri.... e da lì approfondire il C?
il mio parere più o meno l'ho gia espresso.. sarebbe meglio se all'inizio lasci da parte l'interfaccia grafica e ti concentri sui fondamenti della programmazione! è più facile passare da C a C# che viceversa IMHO!
inizi appunto con un programma che ti chiede due numeri dal prompt di dos, li somma e poi ti mostra il risultato..

k0nt3
08-02-2006, 00:01
nel caso potrebbe interessarti questo link che spiega come compilare un programma scritto in C http://cplus.about.com/od/compilersandide1/

AnonimoVeneziano
08-02-2006, 01:06
Il problema non è programmare per l'una o l'altra piattaforma. Il problema è quando si impara bisognerebbe imparare i concetti comuni. Programmando in C puro non sei legato ad un SO in modo particolare (ci sono ancora casi in cui bisogna farci caso) ma in linea di massima sei indipendente dalla piattaforma.
Linux non vedrai mai chiedertelo. Chi lo usa è gente che se lo sa installare da solo e difficilmente ricorre alle assistenze tecniche.

Con nessun linguaggio sei legato ad una piattaforma particolare (tranne VB 6 e altre cose MS :D ) , ma forse con C si tende ad essere legati alla piattaforma da dove si inzia più che con altri .

L' ANSI C è universale, è vero, ma quando si inzia a sconfinare un po' oltre , ossia si inizia a sviluppare programmi un "pochino" più complessi col C non si scappa, bisogna usare le API del sistema operativo. Vuoi aprire un socket in C ? Sotto i sistemi POSIX dovrai fare in un modo, sotto altri sistemi in un altro. Vuoi gestire nuovi processi? (ad esempio fare un fork() di un processo) POSIX lavora in un modo, windows in un altro. Insomma, anche per cose abbastanza basilari il C non è dopotutto così universale ;) Infatti il livello di astrazione che offre il C , comparato ad altri linguaggi , per così dire, "un po' più ad alto livello" (per usare un espressione che ho letto nella discussione sui livelli della programmazione che va molto in voga in questi giorni :p) , non è molto elevato .

Dici che se uno impara ad aprire socket in Java , non impara ad aprire sockets? Ti dirò la verità, non ho mai aperto un socket in Java e non ho la minima idea di come si faccia , però , se si chiama socket, significa che condividerà una certa logica di funzionamento con quest' ultimo . Bisognerà (Ipotizzando che sia un SOCK_STREAM , PF_INET ) impostare una porta, un indirizzo (ma forse questo se lo imposta da solo) e metterlo in ascolto fino a che qualcuno dall' altra parte non richiede una connessione e a quel punto puoi usarlo per comunicare con l'altro capo. Questo è il concetto base di socket, se impari che un socket lavora in questo modo credo che puoi usarlo su ogni piattaforma e linguaggio (imparandone le interfacce specifiche ad ognuno) . In C l'unica differenza è che per aprirlo (sotto POSIX) devi chiamare socket() , bind() , listen() , accept() scomodare almeno 3 strutture dati piuttosto complicate ( 2 sockaddr_in e 1 hostent in complesso per client e server ) inoltre quando imposti l'indirizzo della macchina e la porta devi fare in modo di convertire, con le funzioni htonl() e htons() i numeri INT da usare come porta e specificatore di indirizzo da little-endian (host order per gli x86) a big-endian ( network order) . Inoltre se vuoi lavorare con più sockets in contemporanea devi persino scomodare fork() e tutta l'infrastruttura multi processo del sistema operativo. Personalmente non credo che sia tutto ciò più educativo , forse è solo più complicato (anzi, forse impossibile per uno alle prime armi ed autodidatta, bisogna pensare anche questo , non c'è nessuno che gli spiega ) . Per me tutto ciò può solo scoraggiare e , se la passione iniziale non è sufficiente, far abbandonare il progetto di imparare escludendo così anche la possibilità di aumentare ancora di più la propria passione. Vedere che le cose che si fanno funzionano e che non sono solo "Hello World" a schermo o un algoritmo di ordinamento per array può essere utile per imparare più di quanto lo sia effettivamente apprendere da subito gli idiomi del C puro (che tra l'altro sono tramandati anche nel C++ / Java e tutti i linguaggi che hanno preso spunto dal C)

Ovviamente questo è solo il mio personalissimo (e criticabilissimo) pensiero ;)

Ciao

AnonimoVeneziano
08-02-2006, 01:08
Sono daccordo x la stabilità di linux, ma trovami doom3 o call of duty 2 che girano su tale S.O.



Doom3 gira su linux in maniera Nativa ( c'è installer sul sito della ID ). Call of Duty 2 non lo so , ma potrebbe esserci la possibilità che giri sotto Cedega , che è un layer di traduzione on the fly Direct3D->OpenGL fortemente basato su Wine .


Ciao

mjordan
08-02-2006, 02:20
Con nessun linguaggio sei legato ad una piattaforma particolare (tranne VB 6 e altre cose MS :D ) , ma forse con C si tende ad essere legati alla piattaforma da dove si inzia più che con altri .

L' ANSI C è universale, è vero, ma quando si inzia a sconfinare un po' oltre , ossia si inizia a sviluppare programmi un "pochino" più complessi col C non si scappa, bisogna usare le API del sistema operativo. Vuoi aprire un socket in C ? Sotto i sistemi POSIX dovrai fare in un modo, sotto altri sistemi in un altro. Vuoi gestire nuovi processi? (ad esempio fare un fork() di un processo) POSIX lavora in un modo, windows in un altro. Insomma, anche per cose abbastanza basilari il C non è dopotutto così universale ;) Infatti il livello di astrazione che offre il C , comparato ad altri linguaggi , per così dire, "un po' più ad alto livello" (per usare un espressione che ho letto nella discussione sui livelli della programmazione che va molto in voga in questi giorni :p) , non è molto elevato .

Dici che se uno impara ad aprire socket in Java , non impara ad aprire sockets? Ti dirò la verità, non ho mai aperto un socket in Java e non ho la minima idea di come si faccia , però , se si chiama socket, significa che condividerà una certa logica di funzionamento con quest' ultimo . Bisognerà (Ipotizzando che sia un SOCK_STREAM , PF_INET ) impostare una porta, un indirizzo (ma forse questo se lo imposta da solo) e metterlo in ascolto fino a che qualcuno dall' altra parte non richiede una connessione e a quel punto puoi usarlo per comunicare con l'altro capo. Questo è il concetto base di socket, se impari che un socket lavora in questo modo credo che puoi usarlo su ogni piattaforma e linguaggio (imparandone le interfacce specifiche ad ognuno) . In C l'unica differenza è che per aprirlo (sotto POSIX) devi chiamare socket() , bind() , listen() , accept() scomodare almeno 3 strutture dati piuttosto complicate ( 2 sockaddr_in e 1 hostent in complesso per client e server ) inoltre quando imposti l'indirizzo della macchina e la porta devi fare in modo di convertire, con le funzioni htonl() e htons() i numeri INT da usare come porta e specificatore di indirizzo da little-endian (host order per gli x86) a big-endian ( network order) . Inoltre se vuoi lavorare con più sockets in contemporanea devi persino scomodare fork() e tutta l'infrastruttura multi processo del sistema operativo. Personalmente non credo che sia tutto ciò più educativo , forse è solo più complicato (anzi, forse impossibile per uno alle prime armi ed autodidatta, bisogna pensare anche questo , non c'è nessuno che gli spiega ) . Per me tutto ciò può solo scoraggiare e , se la passione iniziale non è sufficiente, far abbandonare il progetto di imparare escludendo così anche la possibilità di aumentare ancora di più la propria passione. Vedere che le cose che si fanno funzionano e che non sono solo "Hello World" a schermo o un algoritmo di ordinamento per array può essere utile per imparare più di quanto lo sia effettivamente apprendere da subito gli idiomi del C puro (che tra l'altro sono tramandati anche nel C++ / Java e tutti i linguaggi che hanno preso spunto dal C)

Ovviamente questo è solo il mio personalissimo (e criticabilissimo) pensiero ;)

Ciao

Io infatti ho detto che è meglio imparare il C standard (l'ANSI C, per capirci meglio) perchè è un linguaggio "piccolo" e contiene tutto quello che serve per cominciare con la programmazione... Le API per assolvere ai compiti piu' disparati sono altra cosa.

Comunque, visto quanto sono banali le socket da gestire in Java e quanta roba si deve sapere invece in C (sotto Posix), io credo che una volta che si comincia in Java poi tornare indietro ci si ammazza e si rischia di rinunciare.

In ogni caso, per uno che sta a digiuno di programmazione, non credo neanche che Java sia tutta questa semplicità. Anzi.

E poi, sarai d'accordo con me, cosa c'è di piu' istruttivo (forma mentis parlando) che risolvere quel bastardo messaggio che ottengono tutti quelli che scrivono in C durante la prima esecuzione del proprio programma:

"Segmentation Fault".

:asd: :asd:

Io per quel maledetto messaggio mi sono convinto a imparare a usare un debugger... gdb per la precisione... :asd:

k0nt3
08-02-2006, 10:47
se uno inizia in java deve capire cos'è un oggetto prima ancora di imparare a usare i cicli, gli if-then-else, le funzioni, le variabili, i parametri per riferimento, quelli per valore... no è assurdo!

@AnonimoVeneziano: dici che il C non ti ha fatto imparare niente... ti sbagli di grosso! senza il C non avresti avuto le basi per imparare Java come l'hai imparato!
poi quando dici "Personalmente non credo che sia tutto ciò più educativo , forse è solo più complicato (anzi, forse impossibile per uno alle prime armi ed autodidatta, bisogna pensare anche questo , non c'è nessuno che gli spiega )."
beh prima di tutto se PeppinoX non riesce a capire qualcosa può sempre tornare a postare qui! secondo.. internet è una fonte inesauribile di tutorials!
infine non c'è bisogno che PeppinoX arriva a capire come funzionano i socket! l'importante è che riesce ad avere una certa padronanza del C, dopodichè può iniziare a studiarsi gli oggetti e passare a un linguaggio Object Oriented! guarda che a te sembra banale il concetto di oggetto... ma per uno che inizia non lo è affatto!

AnonimoVeneziano
08-02-2006, 11:12
se uno inizia in java deve capire cos'è un oggetto prima ancora di imparare a usare i cicli, gli if-then-else, le funzioni, le variabili, i parametri per riferimento, quelli per valore... no è assurdo!

@AnonimoVeneziano: dici che il C non ti ha fatto imparare niente... ti sbagli di grosso! senza il C non avresti avuto le basi per imparare Java come l'hai imparato!
poi quando dici "Personalmente non credo che sia tutto ciò più educativo , forse è solo più complicato (anzi, forse impossibile per uno alle prime armi ed autodidatta, bisogna pensare anche questo , non c'è nessuno che gli spiega )."
beh prima di tutto se PeppinoX non riesce a capire qualcosa può sempre tornare a postare qui! secondo.. internet è una fonte inesauribile di tutorials!
infine non c'è bisogno che PeppinoX arriva a capire come funzionano i socket! l'importante è che riesce ad avere una certa padronanza del C, dopodichè può iniziare a studiarsi gli oggetti e passare a un linguaggio Object Oriented! guarda che a te sembra banale il concetto di oggetto... ma per uno che inizia non lo è affatto!

Ehi ehi, calma ,non mi mettere in bocca parole che non ho mai detto :asd: Al C devo molto ed ancora lo vedo come un grande linguaggio che non sarà mai sostituito (ci sono campi in cui il C è meglio lasciarlo perdere e campi in cui invece è il top) . Sicuramente partendo dal C si impara , eccheccaspita, tutti noi credo che siamo partiti da lì , no? :D E qualcosa sappiamo ...

Questo per rispondere un po' a tutti coloro che hanno letto e replayato al mio post:

Ovviamente qua si finisce in un circolo vizioso perchè noi, che ormai a programmare qualcosina abbiamo già imparato, tendiamo a dimenticarci le difficoltà e i pensieri dei primi periodi e ciò sicuramente non ci aiuta a metterci nei panni di PeppinoX per giudicare AL MEGLIO quale sia il consiglio più adatto da dargli . Ovviamente un metodo è partire dal classico, ossia il C . Un altro metodo potrebbe essere quello di farlo partire da un linguaggio con strutture sintattiche e di raggruppamento un po' più complesse.
Ovviamente per il motivo spiegato poco sopra non sono in grado di valutare bene se ciò che gli consiglio sia giusto oppure no, però io ho fatto questo ragionamento : La programmazione orientata agli oggetti può essere considerata ostica ad alcuni anche perchè come primo approccio hanno avuto a che fare con un linguaggio che ne è completamente sprovvisto ed , anzi, sembra quasi consigliare di piazzare tutto il codice in meno istruzioni possibili e nel main ( Quei bei programmi C da Hackers che concentrano 30 istruzioni in un unica riga totalmente illeggibile :asd: ) e quindi può sembrare inutile o ridondante ad un principiante appena uscito dal C (Il che la rende più difficile da apprendere).

Ripeto: la mia è solo una considerazione personale e può essere totalmente cannata :D

Nonostate tutto anche con Java non è necessario partire subito dal concetto di classe. Dopotutto all' inizio basta imparare che il metodo principale del programma , il main, deve essere messo all' interno di due parentesi graffe precedute da una strana dicitura "class NomeProgramma" senza interessarsi minimamente di cosa voglia dire. Imparare poi i concetti base, variabili, cicli for, while ... blah blah ... e poi capire cosa realmente significava quel "class" :)

Ciao

AnonimoVeneziano
08-02-2006, 11:13
E poi, sarai d'accordo con me, cosa c'è di piu' istruttivo (forma mentis parlando) che risolvere quel bastardo messaggio che ottengono tutti quelli che scrivono in C durante la prima esecuzione del proprio programma:

"Segmentation Fault".

:asd: :asd:

Io per quel maledetto messaggio mi sono convinto a imparare a usare un debugger... gdb per la precisione... :asd:

Indimenticabili momenti :D

Ore buttate davanti al GDB per capire che .... QUELLA STRUTTURA LA DEVI INIZIALIZZARE!! :muro: :muro: :D

k0nt3
08-02-2006, 11:29
Ehi ehi, calma ,non mi mettere in bocca parole che non ho mai detto :asd: Al C devo molto ed ancora lo vedo come un grande linguaggio che non sarà mai sostituito (ci sono campi in cui il C è meglio lasciarlo perdere e campi in cui invece è il top) . Sicuramente partendo dal C si impara , eccheccaspita, tutti noi credo che siamo partiti da lì , no? :D E qualcosa sappiamo ...
scusa :D avevo capito male!

Ovviamente qua si finisce in un circolo vizioso perchè noi, che ormai a programmare qualcosina abbiamo già imparato, tendiamo a dimenticarci le difficoltà e i pensieri dei primi periodi e ciò sicuramente non ci aiuta a metterci nei panni di PeppinoX per giudicare AL MEGLIO quale sia il consiglio più adatto da dargli .
no io non l'ho dimenticato... ma allora piuttosto che complicare la vita all'inizio con gli oggetti (che BISOGNA capire come funzionano altrimenti non si va lontano) allora preferirei PASCAL! certo è un pò diverso dal C-like come sintassi, ma passare al C-like non è difficile! alla fine i concetti sono esattamente gli stessi!

Nonostate tutto anche con Java non è necessario partire subito dal concetto di classe. Dopotutto all' inizio basta imparare che il metodo principale del programma , il main, deve essere messo all' interno di due parentesi graffe precedute da una strana dicitura "class NomeProgramma" senza interessarsi minimamente di cosa voglia dire. Imparare poi i concetti base, variabili, cicli for, while ... blah blah ... e poi capire cosa realmente significava quel "class" :)
Ciao
il fatto è che non puoi scrivere un programma in java senza metterci degli oggetti! dovresti anche non interessarti di cosa voglia dire new, o la notazione ".", oppure la differenza tra int e Integer... insomma anche in un banale assegnamento non è facile far capire al novello programmatore che se si tratta di un oggetto ottieni 2 riferimenti allo stesso oggetto, mentre se si tratta di un tipo primitivo copi il valore nell'altra variabile!
detto questo ho esaurito gli argomenti :D byez

^TiGeRShArK^
08-02-2006, 12:20
Iniziare a programmare con Java ti fa avere una mentalità che dopo potrebbe essere difficile "sconfiggere". Quindi io la vedo molto piu' facile per uno che passa da C a Java, che non uno che passa da Java a C. Parere personale.

ma infatti è proprio il contrario!
la mentalità del Java e della programmazione OO è quella giusta in ambito lavorativo.
Invece si deve "sconfiggere" la programmazione procedurale....
e ti posso assicurare che dopo aver lavorato per anni in linguaggi non object oriented imparare a programmare in modo OO è abbastanza pesante dato ke devi disimparare quello ke hai utilizzato per molto tempo e ke ormai era diventato una parte del tuo stile di programmazione.
Per questo motivo io suggerirei ad uno ke si approccia per la prima volta alla programmazione di iniziare direttamente con l'approccio ad oggetti e di lasciare perdere totalmente la programmazione procedurale...per quella c'è sempre tempo se avrà tempo da perdere in futuro... ma ormai non è per nulla richiesta....
seguendo la tua logica ad esempio si potrebbe dire che bisogna imparare a programmare in assembly perchè in questo modo vedi come realemente come funziona tutto...
ma per un programmatore moderno non c'è nulla di piu' sbagliato... se ci sono delle API che ti offrono un astrazione dell'hardware non vedo perchè non utilizzarle, magari documentandosi sui vantaggi e gli svantaggi delle varie implementazioni.
Per concludere... io voto per Java/C# o Python :D

Inoltre, per uno che sta a 0 di programmazione, quanto meno deve comprarsi un libro, non si può dipendere dai tutorial in rete. Un libro esaustivo è davvero il minimo. Quindi (sempre IMHO) trovo scorretto consigliare Java solo perchè si trovano parecchi tutorial in rete. Anche perchè per C ci si trovano addiruttura gli standard. Se vuoi imparare OpenGL, per esempio, devi conoscere C, non Java. Se vuoi imparare OpenMP devi conoscere C, non Java. Se vuoi imparare la network programming cn le palle, devi conoscere C, non Java.
Questo è il succo del mio ragionamento.[/QUOTE]

^TiGeRShArK^
08-02-2006, 12:28
guarda che a te sembra banale il concetto di oggetto... ma per uno che inizia non lo è affatto!
appunto... ma visto che ormai a mio parere è diventato il concetto di oggetto il + importante, non vedo perchè incaponisrsi sui problemi del C e magari scoraggiarsi subito, se si può iniziare invece con un linguaggio ke imposti subito al corretto approccio Object Oriented......
Come ho detto prima altrimenti dopo aver imparato il C si troverà a disimparare delle cose che ormai gli sembravano naturali per imparare la programmazione ad oggetti...
Risultato:
1)Grande fatica ad imparare il C con tutti i suoi vari casini e peculiarità
2)fatica per disimparare quello ke ha imparato e nuovo sforzo per imparare la programmazione ad oggetti
Quindi non mi pare una cosa tanto furba iniziare dal C.....

k0nt3
08-02-2006, 13:28
Risultato:
1)Grande fatica ad imparare il C con tutti i suoi vari casini e peculiarità
2)fatica per disimparare quello ke ha imparato e nuovo sforzo per imparare la programmazione ad oggetti
Quindi non mi pare una cosa tanto furba iniziare dal C.....
non sono assolutamente daccordo!
1) fare programmi semplici per capire come funziona un linguaggio di programmazione in C non è per niente difficile!
es. somma di 2 numeri:

#include <stdio.h>

int main()
{
int a,b;
printf("inserisci un numero: ");
scanf("%d", &a);
printf("inseriscine un altro: ");
scanf("%d", &b);
printf("la somma dei due numeri è: %d\n", a+b);
return 0;
}

in questo caso Java sarebbe inutilmente più complesso!

2) perchè le variabili non ci sono in java? e i cicli? le funzioni (lì si chiamano metodi)? e poi la sintassi di java è c-like che tu lo voglia o no, per cui passare a java non è così difficile! inoltre la programmazione ad oggetti ha bisogno di una base di programmazione procedurale per poter essere capita! sarebbe veramente assurdo partire da concetti così avanzati per imparare a programmare IMHO!

^TiGeRShArK^
08-02-2006, 13:49
non sono assolutamente daccordo!
1) fare programmi semplici per capire come funziona un linguaggio di programmazione in C non è per niente difficile!
es. somma di 2 numeri:

#include <stdio.h>

int main()
{
int a,b;
printf("inserisci un numero: ");
scanf("%d", &a);
printf("inseriscine un altro: ");
scanf("%d", &b);
printf("la somma dei due numeri è: %d\n", a+b);
return 0;
}

in questo caso Java sarebbe inutilmente più complesso!

2) perchè le variabili non ci sono in java? e i cicli? le funzioni (lì si chiamano metodi)? e poi la sintassi di java è c-like che tu lo voglia o no, per cui passare a java non è così difficile! inoltre la programmazione ad oggetti ha bisogno di una base di programmazione procedurale per poter essere capita! sarebbe veramente assurdo partire da concetti così avanzati per imparare a programmare IMHO!
ma appunto solo x programmini così semplici...
ma una volta che inizia a programmare in C ke cosa dovrebbe fare?
abbandonare una volta che ha imparato a fare programmi di quel tipo e imparare la sintassi del java, ke anke se molto simile, è differente?
a questo punto meglio iniziare direttamente da Java... e tieni conto che programmi di questo tipo in java sono anke molto semplici...eclipse ti crea da solo tutta la struttura di base necessaria (dichiarazione della classe, del costruttore e del metodo main) e a quel punto basta scrivere all'interno del main il codice che interessa..
forse l'unica complicazione in Java è la gestione dell'input ke è + makkinosa rispetto al C...

k0nt3
08-02-2006, 14:01
ma appunto solo x programmini così semplici...
ma una volta che inizia a programmare in C ke cosa dovrebbe fare?
abbandonare una volta che ha imparato a fare programmi di quel tipo e imparare la sintassi del java, ke anke se molto simile, è differente?
il C ha tutto ciò che serve per imparare.. anzi il PASCAL è meglio! purtroppo il PASCAL è meno C-like.. e questo è un punto a sfavore! se sai programmare in C e ti metti a imparare la programmazione a oggetti con java... è tutto come ti aspetti che sia! quello che hai imparato dal C non lo butti via, ma ci aggiungi quello che impari da java!

a questo punto meglio iniziare direttamente da Java... e tieni conto che programmi di questo tipo in java sono anke molto semplici...eclipse ti crea da solo tutta la struttura di base necessaria (dichiarazione della classe, del costruttore e del metodo main) e a quel punto basta scrivere all'interno del main il codice che interessa..
eh!? vuoi dire che uno per iniziare oltre a imparare il linguaggio deve anche imparare a usare eclipse? non ci siamo.. si inizia sempre con il blocco note :D
forse l'unica complicazione in Java è la gestione dell'input ke è + makkinosa rispetto al C...
anche, ma soprattutto il fatto che se non sai programmare a oggetti è troppo inutilmente complicato, e se non sai programmare in maniera procedurale... figurati a oggetti!

nota: ho detto SE non sai programmare a oggetti è troppo inutilmente complicato :D

ps. dovresti convincere i professori delle varie università a insegnare Java prima del C :Prrr: :D

^TiGeRShArK^
08-02-2006, 14:15
ps. dovresti convincere i professori delle varie università a insegnare Java prima del C :Prrr: :D
ma infatti è da un paio d'anni a questa parte ke in alcune università stanno iniziando...
ad esempio al polimi se non sbaglio (o alla statale.. non mi ricordo quale delle due)
cmq per tagliare la testa al toro a queto punto direi Python o ruby ke sono veramente una cavolata rispetto a java e a c :D

k0nt3
08-02-2006, 14:26
ma infatti è da un paio d'anni a questa parte ke in alcune università stanno iniziando...
ad esempio al polimi se non sbaglio (o alla statale.. non mi ricordo quale delle due)
cmq per tagliare la testa al toro a queto punto direi Python o ruby ke sono veramente una cavolata rispetto a java e a c :D
polimi è impossibile :D lo avrei saputo! se lo fanno alla statale è una grossa cavolata! è come se un architetto impara a progettare un palazzo di 20 piani prima di riuscire a disegnare la sua cameretta! :D

il problema di python e ruby è che sono linguaggi totalmente non-c-like e da quei due passare a qualcosa di più standard è molto difficile! a questo punto pascal ha meno problemi.. non trovi? EDIT: anzi ruby potrebbe assomigliare un pò al c... non l'ho mai usato però! non sono sicuro
REEDIT: no non ci assomiglia per niente

^TiGeRShArK^
08-02-2006, 16:45
polimi è impossibile :D lo avrei saputo! se lo fanno alla statale è una grossa cavolata! è come se un architetto impara a progettare un palazzo di 20 piani prima di riuscire a disegnare la sua cameretta! :D

il problema di python e ruby è che sono linguaggi totalmente non-c-like e da quei due passare a qualcosa di più standard è molto difficile! a questo punto pascal ha meno problemi.. non trovi? EDIT: anzi ruby potrebbe assomigliare un pò al c... non l'ho mai usato però! non sono sicuro
REEDIT: no non ci assomiglia per niente
ma l'importante è la filosofia di programmazione, non la sintassi...
è quella la cosa difficile da imparare... una volta imparata quella OO basta studiarsi la nuova sintassi del linguaggio senza la benkè minima difficoltà...
almeno io non ho avuto alcun problema a imparare qualcosina di python, ruby o C# venendo da java (e ancora prima C++, C, basic e qualkosina di assembly :D)... insomma me ne sono passati un paio di linguaggi diversi :D
e in base all'esperienza ke ho passato ritengo ke se avessi iniziato direttamente con un linguaggio OO avrei sudato un pò meno :p

EDIT: la facoltà di cui aprlavo è questa: http://www.unimi.it/didattica/scienzemfn/informatica.htm

0rph3n
08-02-2006, 17:11
se lo fanno alla statale è una grossa cavolata! è come se un architetto impara a progettare un palazzo di 20 piani prima di riuscire a disegnare la sua cameretta! :D
come faccia a stare in piedi questa analogia proprio non lo so!

'iao

k0nt3
08-02-2006, 17:24
ma l'importante è la filosofia di programmazione, non la sintassi...
è quella la cosa difficile da imparare... una volta imparata quella OO basta studiarsi la nuova sintassi del linguaggio senza la benkè minima difficoltà...
almeno io non ho avuto alcun problema a imparare qualcosina di python, ruby o C# venendo da java (e ancora prima C++, C, basic e qualkosina di assembly :D)... insomma me ne sono passati un paio di linguaggi diversi :D
e in base all'esperienza ke ho passato ritengo ke se avessi iniziato direttamente con un linguaggio OO avrei sudato un pò meno :p
non hai avuto nessun problema perchè conoscevi il C... non so come fartelo capire :D

EDIT: la facoltà di cui aprlavo è questa: http://www.unimi.it/didattica/scienzemfn/informatica.htm
beh sia il potecnico di milano che quello di torino insegnano il C al primo anno! addirittura al polito java lo insegnano al terzo anno! e non mi sembrano degli sprovveduti no?


ps. comunque sia vorrei sapere PeppinoX cosa ne ha ricavato da questa discussione..

^TiGeRShArK^
08-02-2006, 17:27
non hai avuto nessun problema perchè conoscevi il C... non so come fartelo capire :D

beh sia il potecnico di milano che quello di torino insegnano il C al primo anno! addirittura al polito java lo insegnano al terzo anno! e non mi sembrano degli sprovveduti no?


ps. comunque sia vorrei sapere PeppinoX cosa ne ha ricavato da questa discussione..
anke da me lo insegnaVANO al primo anno... ma ora la tendenza a quello ke vedo in giro è di privilegiare sempre + l'insegnamento d java ai primi anni al posto di C ;)
e cmq te l'ho detto...x la mia esperienza proprio l'ultima cosa ke consiglierei è iniziare dal C e poi buttare sangue come me x imparare la programmazione ad oggetti.....

k0nt3
08-02-2006, 17:45
anke da me lo insegnaVANO al primo anno... ma ora la tendenza a quello ke vedo in giro è di privilegiare sempre + l'insegnamento d java ai primi anni al posto di C ;)
ti ho detto.. al polimi lo insegnano al secondo anno! anzi non è esatto! il corso è di ingegneria del software e java danno per scontato che lo sai usare visto che il C si è fatto il primo anno! quello che ti insegnano è la programmazione a oggetti e annessi e connessi!
al polito invece insegnano la programmazione a oggetti al terzo anno http://didattica.polito.it/pls/portal30/gap.a_mds.espandi?p_a_acc=2006&p_id_cdl=1068&p_sdu=37&p_cds=444&p_header=
quindi non vedo dov'è questa tendenza di cui parli..
e cmq te l'ho detto...x la mia esperienza proprio l'ultima cosa ke consiglierei è iniziare dal C e poi buttare sangue come me x imparare la programmazione ad oggetti.....
io ho capito perchè la pensi così! il C dipende molto da come lo impari, da chi te lo insegna (io da autodidatta) e da come lo riesci ad assimilare.. io ho imparato prima il pascal del C e secondo me è stato un bene! il C però è stato indispensabile per cominciare con il C++ e quindi java.. comunque non mi hai ancora detto cos'ha il pascal che non ti piace :D! poi dopo il pascal il passaggio più logico sarebbe il delphi (che è a oggetti)! dopo non credo ci siano barriere a passare a qualsiasi altro linguaggio (EDIT: compreso python che anche a me piace parecchio :D)!

^TiGeRShArK^
08-02-2006, 18:26
io ho capito perchè la pensi così! il C dipende molto da come lo impari, da chi te lo insegna (io da autodidatta) e da come lo riesci ad assimilare.. io ho imparato prima il pascal del C e secondo me è stato un bene! il C però è stato indispensabile per cominciare con il C++ e quindi java.. comunque non mi hai ancora detto cos'ha il pascal che non ti piace :D! poi dopo il pascal il passaggio più logico sarebbe il delphi (che è a oggetti)! dopo non credo ci siano barriere a passare a qualsiasi altro linguaggio (EDIT: compreso python che anche a me piace parecchio :D)!
il pascal non l'ho mai imparato... sono sempre rifuggito da quella scelta buttandomi sul C + assembly :asd:
cmq il problema come ti ho detto non è tanto la sintassi quanto il modo di ragionare, xkè se ti entra in zucca quello tipico del C, poi per levartelo di testa ci perdi un bel pò di tempo...
mentre imparare una sintassi di un linguaggio è MOLTO + facile ke non cambiare modo di ragionare.....
almeno x me è stato così... sarà ke ho programmato x anni senza considerare la programmazione ad oggetti... ma poi quando mi sono ritrovato a programmare ad oggetti mi sono accorto ke mi trascinavo dietro dei costrutti sbagliatissimi derivanti dal mio modo di pensare "alla vekkia maniera"... e infatti è "relativamente da poco" ke posso dire di aver imparato a programmare ad oggetti....

k0nt3
08-02-2006, 18:39
il pascal non l'ho mai imparato... sono sempre rifuggito da quella scelta buttandomi sul C + assembly :asd:
cmq il problema come ti ho detto non è tanto la sintassi quanto il modo di ragionare, xkè se ti entra in zucca quello tipico del C, poi per levartelo di testa ci perdi un bel pò di tempo...
mentre imparare una sintassi di un linguaggio è MOLTO + facile ke non cambiare modo di ragionare.....
almeno x me è stato così... sarà ke ho programmato x anni senza considerare la programmazione ad oggetti... ma poi quando mi sono ritrovato a programmare ad oggetti mi sono accorto ke mi trascinavo dietro dei costrutti sbagliatissimi derivanti dal mio modo di pensare "alla vekkia maniera"... e infatti è "relativamente da poco" ke posso dire di aver imparato a programmare ad oggetti....
ecco! allora vedi che siamo daccordo? il C serve per imparare i fondamenti.. poi (senza lasciare che la programmazione procedurale metta le radici dentro il tuo cervello) ti compri un bel libro sulla programmazione a oggetti e non troverai nessuna difficolta a capire! anche perchè già in C cominci a vedere qualcosa di più o meno simile a un oggetto (le struct).. è tutto allenamento che fa bene dopo :D

ps. il tuo problema è stato sicuramente il radicamento dello stile procedurale

^TiGeRShArK^
08-02-2006, 18:48
ps. il tuo problema è stato sicuramente il radicamento dello stile procedurale
appunto.. .quindi xkè non usare un bel linguaggio ad oggetti quale python x iniziare? :asd:
così parti già con l'impostazione ad oggetti senza correre il rischio di ricadere nel lato oscuro (la programmazione procedurale :asd: )

k0nt3
08-02-2006, 19:07
appunto.. .quindi xkè non usare un bel linguaggio ad oggetti quale python x iniziare? :asd:
così parti già con l'impostazione ad oggetti senza correre il rischio di ricadere nel lato oscuro (la programmazione procedurale :asd: )
perchè l'oggetto è un concetto complesso! non può essere trattato in prima istanza! fai conto che uno che inizia non sa nemmeno cosa sia un for o una variabile.. e poi la programmazione OO contiene concetti di programmazione procedurale! è un'estensione che permette di costruire cose più complesse e vederle in maniera più semplice.. ma ci vuole già una base sotto, non si parte con gli oggetti dal nulla! per python non me la sentirei di consigliarlo per iniziare.. ha un comportamento molto diverso dai linguaggi più comuni! e tra l'altro non ha una sintassi così bella da guardare :D quindi ci puoi fare programmi di dimensioni limitate sennò non si capisce più nulla IMHO

^TiGeRShArK^
08-02-2006, 20:45
perchè l'oggetto è un concetto complesso! non può essere trattato in prima istanza! fai conto che uno che inizia non sa nemmeno cosa sia un for o una variabile.. e poi la programmazione OO contiene concetti di programmazione procedurale! è un'estensione che permette di costruire cose più complesse e vederle in maniera più semplice.. ma ci vuole già una base sotto, non si parte con gli oggetti dal nulla! per python non me la sentirei di consigliarlo per iniziare.. ha un comportamento molto diverso dai linguaggi più comuni! e tra l'altro non ha una sintassi così bella da guardare :D quindi ci puoi fare programmi di dimensioni limitate sennò non si capisce più nulla IMHO
non mi pare ke la sintassi del python sia inguardabile..
l'unica cosa ke odio personalmente è la dikiarazione delle classi....
ma cmq ci sono diversi ke lo usano per lavoro python, quindi immagino che non sia così difficile da usare per progetti complessi... anzi... probabilmente è molto + semplice di C e derivati :p
e in questo modo oltre a capire in maniera facile le strutture base queli cicli, variabili ecc.. si imparano anke nozioni della programmazione ad oggetti approfondendo il linguaggio...

marco.r
08-02-2006, 21:52
<megacut>
Ovviamente questo è solo il mio personalissimo (e criticabilissimo) pensiero ;)

Ciao

Sostanzialmente d'accordo col discorso di AnonimoVeneziano.
Cosi' come per imparare la fisica non è necessario partire da atomi ed elettroni, non è detto che per imparare a programmare si debba partire dal livello più vicino alla macchina.
Detto questo, il consiglio il consiglio di uno che ha cominciato a programmare con DB-III e le Quattro Pro ( :mbe: :D ) è di provare con Python.
Rispetto al C ti permette di ignorare i dettagli della macchina (gestione memoria, dimensione dei numeri etc.) e di concentrarti sulle cose più importanti (imparare innanzi tutto).
Rispetto ad altri linguaggi di scripting (Ruby, Perl) ha una sintassi più tradizionale e semplice.
Ed infine, un aspetto che secondo me è importante, non ti vincola ad un singolo stile di programmazione, ma ti lascia usare il più adatto allo scopo, sia esso orientato agli oggetti, procedurale, od altro.

Se poi come sembra vorresti usarlo al lavoro sotto windows, si tratta di una scelta ancora migliore, visto che si integra in modo favoloso con il SO di Microsoft. Ad esempio creare un servizio con python è quasi banale, e ancor di più aggiungerlo o toglierlo all'elenco dei servizi da linea di comando.

Nescio
08-02-2006, 21:55
scusate sono un newbie ma mi inserisco nella discussione...
Tempo fa ho provato a imparare il C... non ce la ho fatta per una serie di fattori... innanzitutto la volontà poi il tempo ed altro...

Ma una cosa su tutte mi ha scoraggiato :fagiano: : l'impossibilità (almeno al punto in cui ero arrivato io) di scrivere programmi utili (o sensati) per esercitarsi... non so se mi spiego, insomma, per vedere che si sta imparando qualcosa :fagiano:

Qualche consiglio in proposito? No perchè mi state facendo voglia di riiniziare (conosco già un po' di php) :p

k0nt3
08-02-2006, 22:19
scusate sono un newbie ma mi inserisco nella discussione...
Tempo fa ho provato a imparare il C... non ce la ho fatta per una serie di fattori... innanzitutto la volontà poi il tempo ed altro...

Ma una cosa su tutte mi ha scoraggiato :fagiano: : l'impossibilità (almeno al punto in cui ero arrivato io) di scrivere programmi utili (o sensati) per esercitarsi... non so se mi spiego, insomma, per vedere che si sta imparando qualcosa :fagiano:

Qualche consiglio in proposito? No perchè mi state facendo voglia di riiniziare (conosco già un po' di php) :p
...di letteratura su programmi utili ce n'è! di solito si trova qualche stimolo giochicchiando con la libreria graphics.h :D non so se c'è ancora nei moderni compilatori, ma si può sempre scaricare il pessimo Borland TurboC (l'ho sempre odiato, ci deve essere un'alternativa)!
altrimenti prova a pensare a un problema che vuoi risolvere (tipo le equazioni di secondo grado) e imponiti di risolverlo! o ancora se impari a scrivere su files puoi emulare un piccolo database e scrivere/leggere dati (questo non è semplicissimo ma le struct ti semplificano la vita se scrivi il file in binario)

Rispetto al C ti permette di ignorare i dettagli della macchina (gestione memoria, dimensione dei numeri etc.) e di concentrarti sulle cose più importanti (imparare innanzi tutto).
continuo a pensare che il pascal è il miglior linguaggio per imparare...

PeppinoX
09-02-2006, 00:47
Raga, leggendo tutto il 3d mi è venuto il mal di testa :D da quello che ho capito il C è la base da dove iniziare, dato ke vorrei creare qualche finestrella su win quasi da subito vorrei provare in visual C# (se nn ho capito male è strutturato sulla grafica -tipo VB x intenderci-) e approfondire C.
Riflettendo, i programmatori del futuro quanto tempo impiegheranno per creare una "finestrella" se tra 50 anni si deve iniziare a imparare il GWBASIC e via via tutti gli altri?

AnonimoVeneziano
09-02-2006, 02:03
Mi scuso , credo anche a nome di tutti , per averti creato tutta quella confusione in testa :D

Ciao

mjordan
09-02-2006, 02:33
Io ormai in questo genere di discussioni dico la mia e poi vado via... :p
Per chi dice "allora se fosse come dici tu bisognerebbe iniziare dall'assembly", gli dico di si.
Nei corsi di laurea si studia anche l'assembly. Il programmatore non è quello che conosce un linguaggio e fa la finestrella con le API. Quello è il dilettante senza pretese che studia al momento dell'impulso e poi abbandona perchè non ha volontà/scopre che non gli piace/non gliene frega piu' niente.

Per come la vedo io bisogna iniziare con lo strumento piu' semplice e il C è uno di questi. Se fosse per me consiglierei ancora l'ANSI Pascal, ma visto che apprendere in C quei concetti non è piu' difficile, o per lo meno la maggior difficoltà è giustificabile da molti altri pregi, allora consiglio il C.
Chi vuole iniziare a programmare e vuole ottenere subito risultati del tipo "disegno le GUI" mi dispiace, ma non avrà molti risultati. Una GUI ha senso solo se sai scrivere quello che ci sta dietro, non solo il codice che traccia il disegno sullo schermo. Se si parla di Java, prima di arrivare a scrivere un minimo di programma grafico, ce ne stanno di lenticchie da mangiare... Ancora piu' lenticchie che imparare il C.

Inoltre che non si faccia passare Java come un linguaggio "semplice". Java è un linguaggio molto complesso. E parecchio pure. C'è sempre distinzione fra il fare un programma di poche pretese e una bella applicazioncina come si deve. Il C prima o poi lo si deve imparare ed è la base per leggere e studiare praticamente tutto.

Se dovessi consigliare un approccio OO al primo tentativo, allora continuerei a consigliare C++ al posto di Java, per gli stessi identici motivi per cui ho consigliato C. Almeno si acquisisce un "alfabeto" con il quale ci si può leggere parecchia altra roba.

Queste sono le mie opinioni. Poi è chiaro che ognuno fa come gli pare.

^TiGeRShArK^
09-02-2006, 10:01
scusate sono un newbie ma mi inserisco nella discussione...
Tempo fa ho provato a imparare il C... non ce la ho fatta per una serie di fattori... innanzitutto la volontà poi il tempo ed altro...

Ma una cosa su tutte mi ha scoraggiato :fagiano: : l'impossibilità (almeno al punto in cui ero arrivato io) di scrivere programmi utili (o sensati) per esercitarsi... non so se mi spiego, insomma, per vedere che si sta imparando qualcosa :fagiano:

Qualche consiglio in proposito? No perchè mi state facendo voglia di riiniziare (conosco già un po' di php) :p
appunto... era proprio quello il problema principale del C per cui è secondo me da sconsigliare a ki è completamente a digiuno di programmazione ;)

^TiGeRShArK^
09-02-2006, 10:13
Il C prima o poi lo si deve imparare ed è la base per leggere e studiare praticamente tutto.

Se dovessi consigliare un approccio OO al primo tentativo, allora continuerei a consigliare C++ al posto di Java, per gli stessi identici motivi per cui ho consigliato C. Almeno si acquisisce un "alfabeto" con il quale ci si può leggere parecchia altra roba.

Queste sono le mie opinioni. Poi è chiaro che ognuno fa come gli pare.
ma col C ormai non si fa + niente....
in ambito lavorativo è privilegiata la produttività ormai..
quindi il C si usa solamente quando si tratta di mettere le mani su programmi legacy o per la scrittura di driver e parti di un kernel.....
IMHO per un programmatore moderno è inutile imparare il C o l'assembly...
caso mai è molto piu' utile imparare i concetti base del funzionamento di un calcolatore elettronico (Pipeline, latenza di accesso alla RAM, alla cache...).
IN questo modo è possibile sapere in caso quale scelta è la migliore dal punto di vista prestazionale in alcuni casi...
Ormai l'ottimizzazione manuale serve veramente in poki casi, soprattutto nell'ambito dei gioki dovo sono le prestazioni che contano... e cmq quest'ottimizzazione avviene solo sulle parti critiche di codice che tramite l'uso di un profiler si sono rivelate inefficienti....
Per il discorso della parte grafica sono abbastanza d'accordo..
prima di iniziare a smanettare con le GUI è bene conoscere almeno i concetti fondamentali della programmazione.....
Quindi iniziare da lì non ha senso.....

k0nt3
09-02-2006, 10:28
ma col C ormai non si fa + niente....
in ambito lavorativo è privilegiata la produttività ormai..
peppinoX ha detto che vuole imparare a programmare.. non che vuole lavorare in una software house ;)

mjordan
09-02-2006, 10:40
ma col C ormai non si fa + niente....
in ambito lavorativo è privilegiata la produttività ormai..
quindi il C si usa solamente quando si tratta di mettere le mani su programmi legacy o per la scrittura di driver e parti di un kernel.....
IMHO per un programmatore moderno è inutile imparare il C o l'assembly...
caso mai è molto piu' utile imparare i concetti base del funzionamento di un calcolatore elettronico (Pipeline, latenza di accesso alla RAM, alla cache...).
IN questo modo è possibile sapere in caso quale scelta è la migliore dal punto di vista prestazionale in alcuni casi...
Ormai l'ottimizzazione manuale serve veramente in poki casi, soprattutto nell'ambito dei gioki dovo sono le prestazioni che contano... e cmq quest'ottimizzazione avviene solo sulle parti critiche di codice che tramite l'uso di un profiler si sono rivelate inefficienti....
Per il discorso della parte grafica sono abbastanza d'accordo..
prima di iniziare a smanettare con le GUI è bene conoscere almeno i concetti fondamentali della programmazione.....
Quindi iniziare da lì non ha senso.....

Con il C non si fa piu' niente? :mbe: Ma stai scherzando? :mbe:

mjordan
09-02-2006, 10:43
appunto... era proprio quello il problema principale del C per cui è secondo me da sconsigliare a ki è completamente a digiuno di programmazione ;)

Quello non è un problema del C, fidati. Quello è un problema di chi gli sta davanti.
Tutte le API che trovi direttamente dentro Java esistono anche in C. E tutto ciò che è richiamabile da C lo è in C++ e viceversa.

Se poi uno si crede che scrive codice GUI con la libreria ANSI C è un'altro discorso. Meno male che algoritmi e strutture dati si fa ancora in C in molte facoltà italiane.

k0nt3
09-02-2006, 10:44
Raga, leggendo tutto il 3d mi è venuto il mal di testa :D da quello che ho capito il C è la base da dove iniziare, dato ke vorrei creare qualche finestrella su win quasi da subito vorrei provare in visual C# (se nn ho capito male è strutturato sulla grafica -tipo VB x intenderci-) e approfondire C.
facci sapere come va! comunque non è che C# è strutturato sulla grafica... però ci sono degli ambienti di programmazione (es. VC#.NET e BorlandC#Builder) che contengono un disegnatore di finestre alla VB per intenderci!
Riflettendo, i programmatori del futuro quanto tempo impiegheranno per creare una "finestrella" se tra 50 anni si deve iniziare a imparare il GWBASIC e via via tutti gli altri?
sì! un programmatore che sia del futuro o no deve sempre sapere cosa c'è sotto la finestrella! solo dopo può disegnare le finestre trascinandoci dentro gli oggetti!

^TiGeRShArK^
09-02-2006, 12:29
Con il C non si fa piu' niente? :mbe: Ma stai scherzando? :mbe:
bhè.. rispetto ad una volta la richiesta è MOLTO ridotta e sta andando a scemare sempre +...
la maggior parte delle offerte di lavoro in genere sono per programmatori Java/JSP/.NET/J2ME...
Il C ormai è richiesto solo per sistemi legacy come dicevo prima e per ambiti molto particolari.....

^TiGeRShArK^
09-02-2006, 12:30
Quello non è un problema del C, fidati. Quello è un problema di chi gli sta davanti.
Tutte le API che trovi direttamente dentro Java esistono anche in C. E tutto ciò che è richiamabile da C lo è in C++ e viceversa.

Se poi uno si crede che scrive codice GUI con la libreria ANSI C è un'altro discorso. Meno male che algoritmi e strutture dati si fa ancora in C in molte facoltà italiane.
:mbe:
pure noi lo facevamo in C++...
ma sono assolutamente trasversali al linguaggio questi cooncetti....

k0nt3
09-02-2006, 12:35
:mbe:
pure noi lo facevamo in C++...
ma sono assolutamente trasversali al linguaggio questi cooncetti....
C++ lo puoi usare a oggetto o no... non è colpa sua (ma di chi lo usa :D)! sta di fatto che se usi gli oggetti e i riferimenti (al posto dei puntatori) in C++ non cambia niente col Java!

mjordan
12-02-2006, 16:53
:mbe:
pure noi lo facevamo in C++...
ma sono assolutamente trasversali al linguaggio questi cooncetti....

Saranno pure trasversali al linguaggio come concetti, ma intanto per creare una struttura dati dinamica ti devi imparare a usare bene i puntatori e l'allocazione della memoria.
Per me imparare a programmare le strutture di dati principali è il primo esercizio che si deve fare con un linguaggio... :O E no, non usando il collection framework di Java (nel caso di Java)... :O

mjordan
12-02-2006, 17:00
la maggior parte delle offerte di lavoro in genere sono per programmatori Java/JSP/.NET/J2ME...


Certo, di cui la maggiorparte non sono software house ma aziende legate al mondo dei servizi web ... ;) J2ME non ho capito che c'entra nell'esempio.
Le software house vogliono C++. E' un programmatore C++ è quasi automatico che conosca C. Almeno le software house serie. Ogni giorno poi nascono decine di nuovi progetti totalmente in C. Del resto è ancora difficile vedere una comune applicazione utente scritta in Java, che non sia un ambiente di sviluppo o che non sia Azureus... :sofico:

^TiGeRShArK^
12-02-2006, 18:01
Certo, di cui la maggiorparte non sono software house ma aziende legate al mondo dei servizi web ... ;) J2ME non ho capito che c'entra nell'esempio.
Le software house vogliono C++. E' un programmatore C++ è quasi automatico che conosca C. Almeno le software house serie. Ogni giorno poi nascono decine di nuovi progetti totalmente in C. Del resto è ancora difficile vedere una comune applicazione utente scritta in Java, che non sia un ambiente di sviluppo o che non sia Azureus... :sofico:
ehm....coff..coff...
la thoughtworks non è una software houseseria??? :D
http://www.thoughtworks.com/jobs/All-Job-Openings.html
ormai un pò tutti i guru del settore (martin fowler, kent beck, ron jeffries) stanno dicendo di puntare alla produttività soprattutto cercando si sfruttare le metodologie di sviluppo agili...non per niente junit è nato prima per java e poi è stato portato per altri innumerevoli linguaggi :D

mjordan
12-02-2006, 18:26
ehm....coff..coff...
la thoughtworks non è una software houseseria??? :D
http://www.thoughtworks.com/jobs/All-Job-Openings.html
ormai un pò tutti i guru del settore (martin fowler, kent beck, ron jeffries) stanno dicendo di puntare alla produttività soprattutto cercando si sfruttare le metodologie di sviluppo agili...non per niente junit è nato prima per java e poi è stato portato per altri innumerevoli linguaggi :D

Coff coff... :D
Non è portandomi un caso che dimostri un teorema. In ogni caso Thoughtworks, grande che sia, è una società di custom software, cioè una società di servizi. Mi serve un software personalizzato e tu me lo fai. Qualche società che produce software commerciale tradizionale scritto in Java e .NET? Che non siano ambienti di sviluppo, of course. ;)

E ancora, in ogni caso, siamo offtopic. Stiamo parlando di apprendimento. Scommetto che alla ThoughtWorks non ce ne sia uno che non conosce il C... ;) Non è che vorremmo imparare l'agile developmento per imparare a fare un for() e scrivere una funzione? :stordita:

Fowler et al. appunto parlano di produttività. Non di apprendimento. In genere uno pensa di essere produttivo dopo che ha imparato a programmare, almeno a leggere un prototipo di funzione e una descrizione.

Io vedo molti piu' nuovi progetti scritti in C/C++ che non in Java e .NET sinceramente.
A sentire i fautori dei linguaggi, pure Java sarebbe vecchio.

marco.r
12-02-2006, 20:24
Saranno pure trasversali al linguaggio come concetti, ma intanto per creare una struttura dati dinamica ti devi imparare a usare bene i puntatori e l'allocazione della memoria.

Io non direi... in fondo quando impari la nozione di oggetti (*) omonegei in un area contigua di memoria (l'array), e a stimare l'occupazione di memoria degli oggetti hai quanto basta per imparare le varie strutture dati. L'allocazione di memoria mi sembra un altro paio di maniche, tanto che e' possibile imparare algoritmi e strutture dati anche in linguaggi con gestione totalmente automatica della memoria.
Il vantaggio di farlo con un linguaggio di piu' basso livello e' che storicamente gli algoritmi sono stati scritti con e per linguaggi di tale tipo, e che quindi in alcuni casi possono risultare piu' difficili da implementare o poco utili in altri.


(*) intesi in senso generale, non nel senso della OOP.

^TiGeRShArK^
13-02-2006, 00:07
Qualche società che produce software commerciale tradizionale scritto in Java e .NET? Che non siano ambienti di sviluppo, of course. ;)
boh... dovrei fare delle ricerche su internet x quello ke chiedi...
ti posso solo dire ke a quello ke vedo dove lavoro è ke la tendenza è sempre + di spostarsi verso java e .net..
nn x niente il nostro applicativo lo stiamo sviluppando proprio utilizzando java web start e j2me x la parte sui cellulari ;)
e in diversi altri progetti sono sempre + diffusi questi linguaggi.....

mjordan
13-02-2006, 17:37
Io non direi... in fondo quando impari la nozione di oggetti (*) omonegei in un area contigua di memoria (l'array), e a stimare l'occupazione di memoria degli oggetti hai quanto basta per imparare le varie strutture dati. L'allocazione di memoria mi sembra un altro paio di maniche, tanto che e' possibile imparare algoritmi e strutture dati anche in linguaggi con gestione totalmente automatica della memoria.

(*) intesi in senso generale, non nel senso della OOP.

Le strutture dati dinamiche dove le metti (il 99.99% delle strutture di dati)? Non ho mica capito quello che vuoi dire. Inoltre c'è un modo alternativo, in C, di creare (e usare) un array. Un chunk di memoria allocato con malloc() accendendolo mediante puntatori. Sei sicuro che continua ad essere contiguo? Nelle strutture dati in genere non si usa quasi mai gli array intesi come "servizio del linguaggio". Una tabella hash può essere vista come un array di array, in fondo. Eppure la sua implementazione si discosta di molto da questo concetto. E' chiaro che puoi imparare le strutture di dati con un linguaggio che gestisce la memoria automaticamente, lungi da me dal negare questa cosa. Ho solo detto che programmare una buona struttura di dati in C, con strutture, puntatori void per i dati e puntatori reference per l'accesso, con allocazione / deallocazione manuale della memoria è uno dei migliori esercizi di programmazione che si possono fare dopo aver imparato un linguaggio come C o C++. Questo intendo per imparare a programmare, non scrivere 20 righe di codice preconfezionato e standard per gestire 2 eventi di una finestra usando 4 metodi sempre uguali. Quello è importante pure, ma nella scala delle priorità sta proprio in basso.

mjordan
13-02-2006, 17:39
nn x niente il nostro applicativo lo stiamo sviluppando proprio utilizzando java web start e j2me x la parte sui cellulari ;)


Posso chiederti che applicativo è?
Guarda caso c'entrano i cellulari, dove sei praticamente obbligato ad usare Java.
Tutti i cellulari Symbian sono Java ma non tutti i Java sono Symbian. Il resto è talmente di nicchia che non vale la pena neanche citare. Nel caso che citi, Java è stato un obbligo, non una scelta.

^TiGeRShArK^
13-02-2006, 20:04
Posso chiederti che applicativo è?
Guarda caso c'entrano i cellulari, dove sei praticamente obbligato ad usare Java.
Tutti i cellulari Symbian sono Java ma non tutti i Java sono Symbian. Il resto è talmente di nicchia che non vale la pena neanche citare. Nel caso che citi, Java è stato un obbligo, non una scelta.
java è stato un obbligo ma non x il motivo ke dovevamo programmare su cell...
+ ke altro xkè ci appoggiavamo ad una piattaforma per la gestione di agenti intelligenti fatta in java, anke se, se non sbaglio ora km ora ne è stato fatto un porting x .net...
cmq anke dei miei colleghi su altri progetti stanno usando o java o .net, anke se la presenza di programmatori C/C++ è ancora abbastanza diffusa...

marco.r
13-02-2006, 22:00
Le strutture dati dinamiche dove le metti (il 99.99% delle strutture di dati)?

Direi nell'heap :D :p
Mi sono probabilmente spiegato male. Ho parlato esplicitamente di array perche' quando sai creare due oggetti in aree di memoria arbitrarie non riesci necessariamente a crearne n in un'area contigua. Se invece posso fare riferimento ad uno dall'altro (aspetto che non ho specificato) posso farmi tutte le liste collegate che voglio. In C invece questo ti viene "gratis" perchè grazie alla sua tipizzazione debole ti allochi la memoria di cui hai bisogno e poi la "vedi" come vuoi.

Non ho mica capito quello che vuoi dire. Inoltre c'è un modo alternativo, in C, di creare (e usare) un array. Un chunk di memoria allocato con malloc() accendendolo mediante puntatori. Sei sicuro che continua ad essere contiguo? Nelle strutture dati in genere non si usa quasi mai gli array intesi come "servizio del linguaggio". Una tabella hash può essere vista come un array di array, in fondo.

Altro fraintendimento temo, ho aggiunto il termine array perchè il linguaggio di cui stavamo parlando era il C, dove i due concetti coincidono. Dove non coincidono, prendi per buona la definizione iniziale (oggetti omonegei in un area contigua di memoria). In ogni caso dal punto di vista dell'applicazione la memoria allocata come dici tu mi risulta contigua (intendiamoci, non voglio dire che il blocco di memoria allocato è contiguo agli altri, ma che gli elementi che compongono il blocco sono contigui all'interno dello stesso).


Eppure la sua implementazione si discosta di molto da questo concetto.

Infatti, ma secondo me non è molto corretto chiamarli array. Preferisco chiamarli mappe, di cui gli array sono un particolare tipo. Questione di definizioni :p.


E' chiaro che puoi imparare le strutture di dati con un linguaggio che gestisce la memoria automaticamente, lungi da me dal negare questa cosa. Ho solo detto che programmare una buona struttura di dati in C, con strutture, puntatori void per i dati e puntatori reference per l'accesso, con allocazione / deallocazione manuale della memoria è uno dei migliori esercizi di programmazione che si possono fare dopo aver imparato un linguaggio come C o C++.

Concordo sul fatto che siano esercizi utili, solo che secondo me sono complementari al discorso strutture dati/algoritmi, non parte integrante.

zappy
14-03-2006, 12:05
cosa è esattamente questo soft. development kit?
permette di costruire un programma che gira? o è solo documentazione?
che differenza c'è con visual studio?
graz :)

mjordan
14-03-2006, 16:18
cosa è esattamente questo soft. development kit?


Software Development Kit (SDK) cioè Kit di Sviluppo Software. Per sviluppare software c'è bisogno di diverse cose. Dei compilatori, della documentazione, un debugger, un editor piu' altre cosette. L'SDK ti fornisce appunto, questo. Tranne l'editor :D che in genere è una scelta personale.


permette di costruire un programma che gira? o è solo documentazione?


Mette a disposizione stumenti che permettono di costruire un programma dal codice sorgente (compilatore), scovare e correggere errori (debugger) piu' altre cose. Quindi la risposta è si.


che differenza c'è con visual studio?
graz :)

Visual Studio è un editor, un ambiente visuale che mette a disposizione degli strumenti per la creazione del codice sorgente. Per funzionare, ha bisogno dell'SDK, sotto. Cioè di tutta quella serie di strumenti che costituiscono "l'ambiente di sviluppo". Visual Studio include già di suo l'SDK per .NET
Puoi considerare Visual Studio come l'editor (molto semplicemente) che mancava nell'SDK, che ti dicevo prima. Solo che in questo caso è l'editor che ti fornisce l'SDK :sofico:

zappy
14-03-2006, 17:53
Software Development Kit (SDK) cioè Kit di Sviluppo Software. Per sviluppare software c'è bisogno di diverse cose. Dei compilatori, della documentazione, un debugger, un editor piu' altre cosette. L'SDK ti fornisce appunto, questo. Tranne l'editor :D che in genere è una scelta personale.....
quindi in pratica da solo non serve... cioè a meno che il sorgente non lo scrivi col notepad, giusto? :D
mi pareva strano che ms fornisse gratis un pacchetto completo e funzionante :)

VICIUS
14-03-2006, 18:22
quindi in pratica da solo non serve... cioè a meno che il sorgente non lo scrivi col notepad, giusto? :D
mi pareva strano che ms fornisse gratis un pacchetto completo e funzionante :)
Se devi lavorare con C# "l'editor" di MS è gratuito ed è pure il milgiore. :)

ciao ;)

k0nt3
14-03-2006, 18:39
Se devi lavorare con C# "l'editor" di MS è gratuito ed è pure il milgiore. :)

ciao ;)
io l'anno scorso ho provato il borland C# builder personal edition (che è gratuito per scopi non commerciali).. ha qualcosa da invidiare a quello di MS? http://www.borland.com/downloads/download_csharpbuilder.html

Galileo
14-03-2006, 18:56
perchè l'oggetto è un concetto complesso!

niente affatto è banalmente semplice.


La programmazione orientata agli oggetti non è stata inventata banalmente per risolvere problemi complessi con soluzioni + facili, è stata inventata ma è + giusto dire "mutuata", perchè si avvicina maggiormente al nostro modo di ragionare.

Anzi è la trasposizione esatta di come funziona il nostro cervello, come ragioniamo:
- il mondo è un universo composto da oggetti ( ed è vero, perchè noi siamo circondati da oggetti, dalle particelle + piccole della materia, alle costruzioni come ponti, grattacieli che sono il risultato dell'assemblamento di tanti oggetti)
- gli oggetti, noi compresi, relazionano tra di loro scambiandosi dei messaggi ( nella vita reale usiamo i mezzi e le forme che preferiamo, nella programmazione si utilizza l'invocazione di metodi, ma il concetto è perfettamente identico)

E tutto questo è il frutto di discussioni durate decenni dai problemi che in realtà si sono posti per primi i filosofi greci, le idee, le relazioni che sussistono tra di esse, se alcuni concetti sono innati oppure no, se sono esterni o interni a noi...per certi versi trovo sia affascinante che nella realizzazione di una finestrella con un bottone in realtà si sia passati attraverso queste problematiche e queste fasi della storia dell'uomo :p


non può essere trattato in prima istanza! fai conto che uno che inizia non sa nemmeno cosa sia un for o una variabile..

tanto meglio...meno ne sà e + facilmente può comprendere il paradigma OO


e poi la programmazione OO contiene concetti di programmazione procedurale! è un'estensione che permette di costruire cose più complesse e vederle in maniera più semplice..

dato che l'obiettivo è quello di costruire cose + complicate e + funzionali perchè non partire direttamente dagli strumenti che ti permettono di farlo nel modo + semplice possibile?


ma ci vuole già una base sotto, non si parte con gli oggetti dal nulla! ?

Perchè no?


Secondo me c'è un grosso errore/fraintendimento di fondo e cioè quello di considerare gli aspetti tecnici della OOP prima ancora dei fondamenti e dei ragionamenti che stanno dietro questa filosofia.

L'aspetto + importante e + difficile è proprio quello di capire la metodologia. ( che non ha nulla a che vedere con i cicli for e le varie iterazioni)
Gli aspetti tecnici sono secondari, esistono i datasheet, esistono mille risorse soprattutto al giorno d'oggi nella rete, ma se non si riesce a capire che cosa sta dietro l'utilizzo di una classe, la comunicazione tra i vari oggetti e via discorrendo, tutto il discorso viene a cadere.
Potrò fare magari qlc applicazione che funziona ma non avrò REALMENTE imparato a programmare.


per python non me la sentirei di consigliarlo per iniziare.. ha un comportamento molto diverso dai linguaggi più comuni! e tra l'altro non ha una sintassi così bella da guardare :D quindi ci puoi fare programmi di dimensioni limitate sennò non si capisce più nulla IMHO

La sintassi di Python è secondo me una delle qualità migliori di questo linguaggio: estremamente pulito ed elegante ma assai versatile e potente con la possibilità di utilizzarlo sia come interpretato che compilato ( usando i vari JIT compiler che girano) con prestazioni migliori per es. di un linguaggio analogo come Java.

Non è così diffuso come la creatura della Sun ma lo scopo che si prefigge l'utente che ha chiesto delucidazioni è imparare.
E per farlo è necessario scegliere lo strumento che gli consenta di imparare al meglio ovvero quella di acquisire certe capacità di analisi e di problem solving che sn trasparenti al linguaggio utilizzato ed alla piattaforma utilizzata.
E Python può essere una delle scelte + azzeccate secondo me...

zappy
14-03-2006, 19:20
Se devi lavorare con C# "l'editor" di MS è gratuito ed è pure il milgiore. :)
ciao ;)
ed è compreso nel SDK?

Galileo
14-03-2006, 19:26
il C ha tutto ciò che serve per imparare.. anzi il PASCAL è meglio! purtroppo il PASCAL è meno C-like.. e questo è un punto a sfavore! se sai programmare in C e ti metti a imparare la programmazione a oggetti con java... è tutto come ti aspetti che sia! quello che hai imparato dal C non lo butti via, ma ci aggiungi quello che impari da java!

La programmazione è un pò come il maiale, non si butta via niente :D

Secondo me Pascal non è meglio...dipende sempre da cosa vuoi fare; fosse per me utilizzerei un linguaggio per ciascun tipo di programmazione ( procedurale, a oggetti, funzionale, logica...).
Chiaramente per non generare confusione conviene partire da uno solo e in questo caso scremando scremando io rimarrei con Java o Python ( forse Ruby...forse...un pò giovane però come linguaggio)


eh!? vuoi dire che uno per iniziare oltre a imparare il linguaggio deve anche imparare a usare eclipse? non ci siamo.. si inizia sempre con il blocco note :D


Si inizia con gli strumenti + facili e che ti mettono nelle condizioni di lavorare meglio.
Ovvero non notepad, dato che non ha alcun funzionalità di suggerimento e di highlight syntax.

cmq ci sono tanti editor free da poter utilizzare :)


anche, ma soprattutto il fatto che se non sai programmare a oggetti è troppo inutilmente complicato, e se non sai programmare in maniera procedurale... figurati a oggetti!


è proprio il contrario.

Una persona può non capire un ciclo ( dal pdv del ragionamento), ma sà perfettamente cosa significhi combinare degli oggetti tra di loro, riutilizzarne una parte ecc. ecc.
Lo fanno ogni giorno nella vita quotidiana.


ps. dovresti convincere i professori delle varie università a insegnare Java prima del C :Prrr: :D

non li deve convincere lui, Java in molte università ha sostituito C come linguaggio utilizzato nel corso di programmazione.
Questo per 3 motivi sostanzialmente:
- è un linguaggio didattico ( nasconde certe problematiche tecniche e si concentra + sui paradigmi)
- è un linguaggio naturalmente orientato agli oggetti: il che significa che quando lo studente deve frequentare quel corso e capirne i principi ( anche solo per superare poi l'esame :D) ha a disposizione il bagaglio culturale, l'esperienza acquisiti e la sintassi già imparata con Prog1

C resta di base perchè utilizzato soprattutto nel corso di Sistemi Operativi, ma con un'importanza + marginale e sarà sempre "peggio" in futuro.

k0nt3
14-03-2006, 19:27
niente affatto è banalmente semplice.


La programmazione orientata agli oggetti non è stata inventata banalmente per risolvere problemi complessi con soluzioni + facili, è stata inventata ma è + giusto dire "mutuata", perchè si avvicina maggiormente al nostro modo di ragionare.
:confused: cioè tu credi che la gente normale ragiona a oggetti? comunque è stata inventata banalmente per risolvere problemi complessi in maniera più semplice! ed è vero che si avvicina di più al nostro modo di ragionare, ma non può e non vuole essere il nostro modo di ragionare (un pò più complesso oggettivamente parlando :asd: )

Anzi è la trasposizione esatta di come funziona il nostro cervello, come ragioniamo:
- il mondo è un universo composto da oggetti ( ed è vero, perchè noi siamo circondati da oggetti, dalle particelle + piccole della materia, alle costruzioni come ponti, grattacieli che sono il risultato dell'assemblamento di tanti oggetti)
- gli oggetti, noi compresi, relazionano tra di loro scambiandosi dei messaggi ( nella vita reale usiamo i mezzi e le forme che preferiamo, nella programmazione si utilizza l'invocazione di metodi, ma il concetto è perfettamente identico)
no ;)

E tutto questo è il frutto di discussioni durate decenni dai problemi che in realtà si sono posti per primi i filosofi greci, le idee, le relazioni che sussistono tra di esse, se alcuni concetti sono innati oppure no, se sono esterni o interni a noi...per certi versi trovo sia affascinante che nella realizzazione di una finestrella con un bottone in realtà si sia passati attraverso queste problematiche e queste fasi della storia dell'uomo :p
chissà perchè anche per la filosofia si parte dai greci e non dal '900


tanto meglio...meno ne sà e + facilmente può comprendere il paradigma OO

no perchè il paradigma a oggetti comprende quello strutturale

dato che l'obiettivo è quello di costruire cose + complicate e + funzionali perchè non partire direttamente dagli strumenti che ti permettono di farlo nel modo + semplice possibile?

?

Perchè no?
perchè prima di aver imparato non fai cose complicate e funzionali.. motivo per cui questo viene dopo :)

Secondo me c'è un grosso errore/fraintendimento di fondo e cioè quello di considerare gli aspetti tecnici della OOP prima ancora dei fondamenti e dei ragionamenti che stanno dietro questa filosofia.
la parte filosofica è un'altra cosa.. allora io ti direi che il paradigma logico è il migliore perchè bla bla bla.. ma.. in pratica?

L'aspetto + importante e + difficile è proprio quello di capire la metodologia. ( che non ha nulla a che vedere con i cicli for e le varie iterazioni)
Gli aspetti tecnici sono secondari, esistono i datasheet, esistono mille risorse soprattutto al giorno d'oggi nella rete, ma se non si riesce a capire che cosa sta dietro l'utilizzo di una classe, la comunicazione tra i vari oggetti e via discorrendo, tutto il discorso viene a cadere.
Potrò fare magari qlc applicazione che funziona ma non avrò REALMENTE imparato a programmare.
appunto.. quindi dove vedi semplicità? se vuoi fare cazzatine è semplice, ma capire è tutta un'altra cosa


La sintassi di Python è secondo me una delle qualità migliori di questo linguaggio: estremamente pulito ed elegante ma assai versatile e potente con la possibilità di utilizzarlo sia come interpretato che compilato ( usando i vari JIT compiler che girano) con prestazioni migliori per es. di un linguaggio analogo come Java.
semplicemente java e python non sono pensati per le stesse esigenze.. non sono affatto intercambiabili

Non è così diffuso come la creatura della Sun ma lo scopo che si prefigge l'utente che ha chiesto delucidazioni è imparare.
E per farlo è necessario scegliere lo strumento che gli consenta di imparare al meglio ovvero quella di acquisire certe capacità di analisi e di problem solving che sn trasparenti al linguaggio utilizzato ed alla piattaforma utilizzata.
E Python può essere una delle scelte + azzeccate secondo me...
nulla contro python.. ho solo detto la mia opinione! il modo di gestire le cose in quel linguaggio non è affatto banale però.. può creare problemi all'utente inesperto in certi casi

Galileo
14-03-2006, 19:33
Quello non è un problema del C, fidati. Quello è un problema di chi gli sta davanti.
Tutte le API che trovi direttamente dentro Java esistono anche in C. E tutto ciò che è richiamabile da C lo è in C++ e viceversa.

Se poi uno si crede che scrive codice GUI con la libreria ANSI C è un'altro discorso. Meno male che algoritmi e strutture dati si fa ancora in C in molte facoltà italiane.

Di corsi di algoritmi ce ne sono tanti.

Il corso di Algoritmi e Strutture Dati ( quello per eccellenza, il tradizionale corso dove si imparano le varie strutture dati, gli algoritmi di ordinamento, alberi e via dicendo) non è nè in C, nè in Java, in nessun linguaggio.

O meglio, tutti e nessuno.
Perchè la teoria è trasparente rispetto al linguaggio e poi è l'insegnante che decide ( se sono previsti esercizi al calcolatore) quale sia il linguaggio utilizzato per implementare i vari algoritmi.
Tipicamente sarà il linguaggio imparato nel corso di programmazione1, per facilitare le cose ovviamente ( chiaramente è una scelta fatta a tavolino tra i vari docenti che impostano quel percorso universitario).
Ma la parte principale che è quella dedicata al problem solving e al ragionamento è neutra, tanto è vero che l'esame scritto così come i vari esercizi assegnati dal docente e la spiegazione dei vari algoritmi vengono tutti impostati con l'uso dello pseudocodice ( così come fà il Cormen tanto per citare un libro che conoscono in tanti).
Ed è l'approccio + corretto.

Galileo
14-03-2006, 19:58
:confused: cioè tu credi che la gente normale ragiona a oggetti?

non lo credo io, è così :)

Di sicuro non ragionano a suon di cicli :asd:
;)

comunque è stata inventata banalmente per risolvere problemi complessi in maniera più semplice!

non solo come ti ho detto...per andare nel dettaglio è stata creata per rendere il codice + facile da essere riutilizzato e manutenibile per es...
ed è vero che si avvicina di più al nostro modo di ragionare, ma non può e non vuole essere il nostro modo di ragionare (un pò più complesso oggettivamente parlando :asd: )


no ;)


no...cosa? argomenta o non si capisce il motivo del tuo dissenso :)


chissà perchè anche per la filosofia si parte dai greci e non dal '900


perchè i filosofi del 900 e quelli che li hanno preceduti sono partiti nell'elaborazione delle loro tematiche dalla discussioni di problemi nati e portati alla luce dai filosofi greci.
Così come la storia, la filosofia è un processo sequenziale.


Se mi vuoi fare un parallelo sarcastico per dire che come iniziamo dai greci e non dal 900 così dovremmo iniziare dalla programmazione procedurale per poi passare a quella OO, non ci sei riuscito;)
Perchè è tutta un'altra cosa...


no perchè il paradigma a oggetti comprende quello strutturale

non è esatto...dal pdv del ragionamento è completamente diverso anzi l'OOP rappresenta un superamento della programmazione procedurale.

In realtà l'OOP utilizza di fatto alcuni concetti e caratteristiche che derivano dalla programmazione procedurale come il concetto di classe che è l'evoluzione del TDA di memoria "settantiana" ( anni 70 :D)


perchè prima di aver imparato non fai cose complicate e funzionali.. motivo per cui questo viene dopo :)


il rischio è quello di invece di imparare a fare cose semplici, quello di fossilizzarsi su un metodo di ragionamento e problem solving che non è + quello migliore.
E dover fare tabula rasa purtroppo nel nostro caso non è così semplice, dato che non siamo dei computer :)


la parte filosofica è un'altra cosa.. allora io ti direi che il paradigma logico è il migliore perchè bla bla bla.. ma.. in pratica?


la parte filosofica è tutto...ed è il motivo per cui Tigershark e tutti i programmatori che hanno cominciato con la programmazione procedurale e poi per esigenze varie hanno dovuto abbandonarla ( almeno principalmente) per passare alla metodologia OO, hanno sputato pallini.


appunto.. quindi dove vedi semplicità? se vuoi fare cazzatine è semplice, ma capire è tutta un'altra cosa


Eh beh ma capire è sempre difficile, che razza di annotazione è scusa...

Per me non ha senso imparare e fossilizzarsi su di un metodo per poi disimparare quanto acquisito e dover reiniziare praticamente da 0.
Tanto vale partire col piede giusto.


semplicemente java e python non sono pensati per le stesse esigenze.. non sono affatto intercambiabili

e dov'è che ho scritto che sono intercambiabili?

Ho detto che è analogo perchè ha delle caratteristiche che lo rendono analogo (l'essere interpretato, cross-platform, la possibilità di utilizzare dei JIT-Compiler...poi se vuoi vado avanti :))
Ma non sono sempre uno il sostituto dell'altro...


nulla contro python.. ho solo detto la mia opinione! il modo di gestire le cose in quel linguaggio non è affatto banale però.. può creare problemi all'utente inesperto in certi casi

Può essere...il discorso è quello però di fornire lo strumento migliore possibile per poter apprendere cosa sia la programmazione.

E cosa sia la programmazione non signfica imparare a programmare in Java o in C o in Perl.
Questo sembra scontato ma è un errore che purtroppo molte persone che insegnano ( non necessariamente docenti universitari) commettono...

k0nt3
14-03-2006, 20:49
è troppo lungo risponderti a tutto.. comunque non ragioniamo a oggetti e la dimostrazione è che i ragionamenti umani non sono riproducibili con la programmazione a oggetti. ma devi sapere che capisco cosa intendi.. cioè una volta che uno ha la padronanza della programmazione a oggetti comincia a vedere oggetti ovunque, non il contrario :D
ma se vuoi guardare il nostro modo di ragionare assomiglia di più al paradigma logico, ma neppure quello è il nostro modo di ragionare.
mi spieghi per quale a me ignoto motivo uno dovrebbe ripartire da zero dopo aver imparato il C (o meglio il pascal)? sono pienamente daccordo sul non fossilizzarsi, mai detto il contrario! ritengo controproducente però iniziare dagli oggetti. anche perchè le lacune sul procedurale te le porteresti dietro ;) e poi perchè la trattazione degli oggetti richiederebbe conoscenze abbastanza ampie che uno alle prime armi non ha (sempre che non ti vuoi limitare a fare due bottoncini dentro un form).

ps. mjordan fai questo tutorial sulla programmazione a oggetti in C :ave: :asd:

Franziscko
14-03-2006, 22:51
Ciao ragazzi....questa discussione è INTERESSANTISSIMA...scusate se mi intrometto!!
Prima o poi avrei voluto anch'io aprire un 3ad del genere e vorrei intervenire per chiedervi qualcosa, premesso che non sono niubbo...
Nel lontano 1983 ho avuto il mio mitico ZX SPECTRUM, ed ho iniziato quindi col Basic, quando poi ho avuto il pc, sono passato al Quick Basic, poi ho iniziato col linguaggio più *elegante* (mi consenta il nome!!!) il Pascal, intanto dal Dos si è passati ai vari windows....e buonanotte!!

Secondo me, al nostro amico hanno consigliato il VB perchè, semplicemente, dobbiamo tutti ammettere che il basic è il linguaggio più semplice in assoluto, simile al ragionamento umano, ad alto livello, appunto, solo che ormai il basic è diventato....visuale! Siamo daccordissimo che è il più scadente, ma sicuramente è il più facile da apprendere, perchè anche scrivere For f=0 to 10, è bello sapere cosa fa, cioè, parliamo delle basi, è bello ed anche utile, o no? Ad esempio, chi non ha mai avuto a che fare col Dos, alcune volte con xp si trova in difficoltà.

Il rovescio della medaglia è che personalmente, non ci capisco niente con gli oggetti, ma quando ho iniziato io c'era il c e il pascal 5, oggetti nisba!

VICIUS
15-03-2006, 00:35
ed è compreso nel SDK?
No ma puoi sempre scaricarlo a parte dal sito.

ciao ;)

Galileo
15-03-2006, 00:51
è troppo lungo risponderti a tutto.. comunque non ragioniamo a oggetti e la dimostrazione è che i ragionamenti umani non sono riproducibili con la programmazione a oggetti.

dov'è questa dimostrazione?

Riformulo il mio pensiero: le relazioni tra noi e il mondo esterno così come il comunicare sono un modello ripreso nella programmazione a oggetti, in questo senso è un approccio tipico del nostro modo di ragionare; + che di ragionare avrei dovuto di relazionarsi.


ma devi sapere che capisco cosa intendi..

da quel che hai appena scritto si capisce benissimo che non hai affatto capito...o magari che non vuoi capire ;)


cioè una volta che uno ha la padronanza della programmazione a oggetti comincia a vedere oggetti ovunque, non il contrario :D

sinceramente la tua battuta non mi fà ridere...


mi spieghi per quale a me ignoto motivo uno dovrebbe ripartire da zero dopo aver imparato il C (o meglio il pascal)?

Intanto specifichiamo che ripartire da 0 (così nè nè nessun altro può inciampare e leggere volontariamente o involontariamente quello che non c'è scritto o quello che maggiormente gli fà comodo) significa abbandonare totalmente un approccio alla programmazione ( intesa sia come stesura del codice sia come analisi di un problema e formulazione di una o + soluzioni, quindi la realizzazione di un algoritmo, in parole povere...) per abbracciarne uno nuovo che praticamente nulla ha in comune, sia dal pdv tecnico, ma soprattutto dal pdv del ragionamento e della trattazione di un problema.

Detto questo, te lo dico subito il perchè occorre ripartire da 0 e + in là con gli anni e con l'esperienza si và e + diventa difficile compiere questo passo ( e se leggi qls intervento di programmatori di una certa esperienza possono confermartelo oppure l'hanno fatto a suo tempo, da fek a cdimauro per citarne un paio che di "programmazione" campano): perchè per programmare decentemente ed essere produttivo ( il che vuol dire non buttare via del tempo, molto semplicemente) devi perdere tutte le abitudini, spesso brutte abitudini, che avevi imparato con la programmazione procedurale.

Un pò come quelli che passano dal C al C++ e siccome usano il C++ ( che per altro è un linguaggio ibrido dato che supporta vari tipi di metodologia...e non poteva essere altrimenti, essendo un superset del C) con un pò di incapsulamento, sono convinti di saper programmare ad oggetti.
Questo non è programmare ad oggetti ma soprattutto non è _ragionare_ con l'approccio OO.


sono pienamente daccordo sul non fossilizzarsi, mai detto il contrario! ritengo controproducente però iniziare dagli oggetti. anche perchè le lacune sul procedurale te le porteresti dietro ;) e poi perchè la trattazione degli oggetti richiederebbe conoscenze abbastanza ampie che uno alle prime armi non ha (sempre che non ti vuoi limitare a fare due bottoncini dentro un form).


se fosse per me inizierei da questo paradigma, perchè banalmente è quello + utilizzato ed il migliore nella stragrande maggioranza dei progetti e processi di creazione del SW.
Quindi iniziare subito dalla metodologia giusta sarebbe un grosso passo in avanti.
(e sempre fosse per me, questa è una provocazione, non utilizzerei nessuno dei linguaggi finora citati bensì Nebula, Eiffel o ancor meglio Smalltalk che ha a disposizione discreti strumenti per poter lavorare, un'ottima documentazione ed ancora una buona comunità di sviluppatori; in parole povere utilizzerei un linguaggio ad oggetti puro)

Quanto alle lacune che ci sarebbero nel non partire con la programmazione procedurale, beh sono facilmente colmabili perchè sono concetti abbastanza semplici e che possono essere trattati durante l'insegnamento dell'OOP.

Molto + difficile è insegnare un approccio, far sì che gli studenti imparino ad usare quello per poi dire "bene, quello che avete imparato è ok, ora però mettetelo da parte, pensate come se doveste iniziare da 0 ed impariamo a programmare e a pensare il programma in termini di oggetti".

E' come voler insegnare a giocare a calcio a stando con le mani appoggiate sul campo per poi insegnare a giocare a calcio "normalmente".
Non è un modo diverso di giocare, è proprio un altro sport.

VICIUS
15-03-2006, 00:54
è troppo lungo risponderti a tutto.. comunque non ragioniamo a oggetti e la dimostrazione è che i ragionamenti umani non sono riproducibili con la programmazione a oggetti.
Mio padre ragiona ad oggetti quando vede la sua macchina vede una scatola di ferro che ha alcune caratteristiche come il colore della carrozzeria che possono essere ricondotti ai vari attributi di una classe. Quando vuole cambiare marcia usa frizioe e cambio che simile ad due chiamate ai metodi del oggetto macchina.

ps. mjordan fai questo tutorial sulla programmazione a oggetti in C :ave: :asd:
Sono mesi che ce lo ha promesso e ancora niente. Sono impaziente anche io :)

ciao ;)

Galileo
15-03-2006, 01:03
Ciao ragazzi....questa discussione è INTERESSANTISSIMA...scusate se mi intrometto!!
Prima o poi avrei voluto anch'io aprire un 3ad del genere e vorrei intervenire per chiedervi qualcosa, premesso che non sono niubbo...
Nel lontano 1983 ho avuto il mio mitico ZX SPECTRUM, ed ho iniziato quindi col Basic, quando poi ho avuto il pc, sono passato al Quick Basic, poi ho iniziato col linguaggio più *elegante* (mi consenta il nome!!!) il Pascal, intanto dal Dos si è passati ai vari windows....e buonanotte!!

[QUOTE]
Secondo me, al nostro amico hanno consigliato il VB perchè, semplicemente, dobbiamo tutti ammettere che il basic è il linguaggio più semplice in assoluto,

io non sono affatto d'accordo...e se fosse come dici tu, dove insegnano a programmare, utilizzerebbero il Visual Basic.
Invece in nessuna università lo si fà ma nemmeno negli istituti tecnici o in altri ambienti...ti pongo la domanda: come mai?


simile al ragionamento umano, ad alto livello,

bastasse l'essere ad alto livello, di linguaggi ce ne sarebbero un'infinità da poter essere definiti "facili"...così non è logicamente


appunto, solo che ormai il basic è diventato....visuale!

c'è una differenza abissare tra il Basic e il VB.

Così come esiste tra VB ( l'ultimo cioè il 6) e la versione .NET


"magari" fosse solo l'essere "visuale"...


Siamo daccordissimo che è il più scadente, ma sicuramente è il più facile da apprendere, perchè anche scrivere For f=0 to 10, è bello sapere cosa fa, cioè, parliamo delle basi, è bello ed anche utile, o no?

la programmazione iterativa, per quanto la sintassi possa cambiare, la si impara facilmente.

Per quale motivo quindi uno dovrebbe scegliere un linguaggio che per fare le cose + semplici, complica le cose, assai poco didattico, non portabile e chiuso ad una sola piattaforma con tutti gli svantaggi che ne derivano?


Scusa ma se io devo imparare a guidare, non scelgo una macchina da Formula1 ( che poi il paragone nemmeno regge perchè il VB non è la F1 dei linguaggi, ma cmq...), con 40mila comandi, sensibile, difficile da guidare.
Scelgo un'utilitaria e se poi vorrò da grande fare il pilota, passerò al limite alle macchine da corsa.
Ti pare? ;)

Ad esempio, chi non ha mai avuto a che fare col Dos, alcune volte con xp si trova in difficoltà.

Non si può sempre tornare al passato per poi proseguire col futuro.
Per fortuna esistono strumenti e ambienti in cui poter lavorare e produrre in minor tempo e con + efficienza e risultati di una volta.
XP ed i programmi terzi sono un'ottima palestra in cui potersi esercitare, non c'è alcun bisogno di conoscere DOS o la linea di comando in generale per imparare a programmare.

E per fortuna aggiungo io...


Il rovescio della medaglia è che personalmente, non ci capisco niente con gli oggetti, ma quando ho iniziato io c'era il c e il pascal 5, oggetti nisba!

non ci capisci niente proprio per il discorso che facevo io, imparato un approccio e utilizzato magari per anni, scostarsene di botto e reimparare da 0 o quasi è molto difficile.

Però salvo casi eccezionali, saper costruire delle classi e farle comunicare tra di loro in modo che il programma funzioni è una richiesta minima ormai per coloro che vogliono fare non i programmatori mai semplici coders.

E' così, il mondo và avanti e tocca sempre aggiornarsi...chi resta indietro è perduto ^^

Galileo
15-03-2006, 01:13
comunque, senza divagare troppo, la questione non è partita come scegliere l'approccio giusto per imparare a programmare ( è un aspetto importante e io ho detto la mia).
La domanda iniziale è che linguaggio consigliare.

Io se dovessi consigliare un linguaggio, terrei conto di vari fattori, semplicità sintattica, facilità nel reperire gli strumenti giusti, portabilità o cmq diffusione del linguaggio, facilità di apprendimento, facilità nell'imparare a programmare, propensione alla metodologia ad oggetti.

E tutti questi fattori io li vedo in Java che preferirei a Python solo per un fatto di diffusione.
E' inutile dover insegnare ad uno che non sà NULLA della programmazione aspetti tecnici che complicano la vita e che distolgono il problema dalla testa di chi deve imparare; e cioè che il problema non è di natura tecnico, è meglio se faccio la dichiarazione della variabile subito con l'istanziazione oppure no ecc., quanto l'imparare a risolvere i problemi che ci si pone nel programmare.

E se posso rendere trasparenti parte degli aspetti tecnici e dei problemi che ne derivano, lo preferisco, ecco perchè le università privilegiano Java per esempio, ormai.
Non ci sono puntatori, non c'è la necessità di allocare e deallocare ogni volta le risorse ( ci pensa il Garbage Collector anche se occorre distinguere in alcuni casi), l'ereditarietà e il polimorfismo sn concetti insiti nel linguaggio e non aggiunti successivamente.

E via discorrendo...poi se uno vuole iniziare con C, niente di male, deve sapere però che prima o poi si scontrerà con un modo completamente diverso di approcciare i problemi della programmazione e prima lo farà meglio sarà per lui.


Finito :)


P.S.: cmq discussione interessante e sempre attuale direi :) Thx a tutti i partecipanti

PGI-Bis
15-03-2006, 01:26
Galileo, grazie per aver citato i filosofi greci. Credevo di essere l'unico rimasto a ricordare e approfondire la relazione esistente tra la prospettiva orientata agli oggetti e la filosofia classica.

C'è anche un aneddoto riguardo alla nascita dei linguaggi "orientati agli oggetti". Lo racconto perchè, oltre a sembrarmi divertente, può essere utile a chi deva affrontare un volume sui linguaggi tipo C++, Python, Java, Squeak eccetera.

E' trito e ritrito il fatto che il primo linguaggio di programmazione orientato agli oggetti sia stato Simula. Furono tal Nygaard e un certo Dhal a crearlo e che per questo vinsero un Turing a testa.

Lo scopo era quello di semplificare la vita a chi dovesse eseguire delle simulazioni attraverso un calcolatore (da cui, con grande fantasia, il nome Simula). Per i due Nostri, si trattava si simulazioni riguardanti l'arricchimento di barre di uranio per una centrale nucleare sperimentale o roba del genere.

Sappiamo, dalla voce dei due, che la prima cosa che fecero fu cercare di capire perchè le simulazioni in ALGOL erano "complicate". Stabilirono che ALGOL permetteva di descrivere i fenomeni da un punto di vista che era più vicino a quello del calcolatore che non a quello del uomo che programmava.

Come giustamente afferma Galileo, la soluzione che trovarono per semplificare la scrittura di simulazione fu quella di automatizzare un cambio di prospettiva.

I calcolatori avevano allora e hanno ancora oggi una prospettiva che si basa su valori conservati in registri di memoria e operazioni su quei valori (lo dico basandomi sul libro di Hennessy-Patterson, io non progetto computer).

Loro (Dhal e Nygaard) sapevano della diversità tra questo modo di interpretare per comprendere i fenomeni e quello proprio degli esseri umani.

Ciò che scoprirono fu il modo di rappresentare un fenomeno secondo una prospettiva umana e lasciare che un compilatore si occupasse di tradurre questa rappresentazione secondo la prospettiva che avrebbe potuto usare e poteva comprendere un calcolatore.

Fondarono quindi, con Simula, quella che fu poi definita da Nygaard "prospettiva orientata agli oggetti": un modo umano di scrivere programmi.

Ora viene il passaggio cruciale.

Cosa sapevano Nygaard e Dhal circa il modo in cui l'uomo comprende i fenomeni (reali o immaginari) che osserva? Be', è ragionevole supporre che non ne sapessero più di quanto ne sapevano psicologi e neurologi sul finire degli anni '70.

Tutti i campi del sapere umano hanno, in certo periodo storico, una teoria dominante. La teoria dominante non è "vera": è solo quella più resistente alle critiche.

Capita allora che tra gli anni '60 e gli anni '70 la psicologia cognitiva stabilisse che l'uomo comprendesse il mondo attraverso l'applicazione di concetti le cui relazioni erano definite dalla teoria cosidetta "classica".

"classica" perchè apparentata con le categorie aristoteliche. La teoria classica stabiliva che i concetti usati dall'uomo per comprendere i fenomeni fossero intrecciata da relazioni di tipo gerarchico rapportanti le loro caratteristiche essenziali. Se B è sottoclasse di A allora B ha tutte le caratteristiche essenziali di A più altre caratteristiche definenti. Per ogni concetto esistono delle caratteristiche che lo distinguono in quanto appartenente ad un Tipo e non ad un altro e tali caratteristiche sono essenziali e immancabili. La specie è compatibile con il genere. E via dicendo.

Caspita, ma questa è proprio la programmazione orientata agli oggetti! Siamo a cavallo, scrivo come penso!

E allora perchè a tanti lascia l'amaro in bocca?

Ragazzi, notizia dell'ultima ora: non siamo più nel 1970 :D

Nell'anno del signore 2006, i cognitivisti dibattono accanitamente sulla natura della "prospettiva umana". C'è un solo punto fermo e penso che l'abbiate sulla punta della lingua: di tutte le teorie possibili, quella "classica" è la peggiore immaginabile.

A quanto pare ci si accapiglia su altre tre: teoria dei prototipi, teoria degli esemplari e teoria dei concetti dipendenti dalle teoria.

E' un problema mica da ridere. Apri un libro che abbia qualcosa a che fare con l'orientamento agli oggetti in informatica e la prima frase cade come un pugno sul tavolo "gerarchia, genere a specie, ereditarietà, ereditarietà, ereditarietà!!!".

Probabilmente la teoria classica continua ad appestarci perchè è molto schematica: ha le gambe, una seduta e lo schienale, cascasse il mondo questa è una sedia.

La migliore scienza ed esperienza del nostro momento storico, ci dice che la faccenda è, come rileva k0nt3, più magmatica: ci sono sedie che sono più "sedia" di altre sedie. Caratteri non essenziali che definiscono categorie essenziali secondo il contesto. E oggetti che non hanno nulla in comune, salvo il fatto che sono compresi come in rapporto di genere a specie.

Così programmiamo usando strumenti che ci offrono una visione delle cose che non è nè la nostra nè quella della macchina a cui parliamo.

Ben si comprende perchè qualcuno ancora parli al proprio computer in C: il 50% dei dialoganti comprende quel che si dice :D.

Il mio consiglio a chi si appresti ad imparare è: se scegliete un linguaggio "OO", siate pronti a mettere in discussione le "verità" che vi offre un libro. C'è una sorta di peccato originale nella programmazione orientata agli oggetti di cui non tutti vogliono dar conto. E se qualcosa vi appare strano, c'è caso che lo sia veramente ;)

mjordan
15-03-2006, 07:50
Cavoli, ho risposto a delle questioni su un SDK e si è scatenato l'inferno qui dentro... :D

quindi in pratica da solo non serve... cioè a meno che il sorgente non lo scrivi col notepad, giusto? :D
mi pareva strano che ms fornisse gratis un pacchetto completo e funzionante :)

Microsoft fornisce l'intero Visual Studio gratuitamente in versione Express (che include anche l'SDK per .NET e i compilatori per il codice nativo. Leggi il thread in rilievo a riguardo.
E' proprio vero che i thread in rilievo non li legge mai nessuno :( :muro:


ps. mjordan fai questo tutorial sulla programmazione a oggetti in C :ave: :asd:

Faccio il possibile, questo periodo sono impicciatissimo, mi hanno chiamato pure per un lavoro... :D Comunque sei solo tu interessato a quanto pare.


Sono mesi che ce lo ha promesso e ancora niente. Sono impaziente anche io :)


Mesi, l'ho detto poco tempo fa! :D

Comunque un tutorial del genere non è semplice da scrivere, nel senso che i concetti in genere per chi legge un tutorial come questo sono già noti, quindi bisogna andare subito al sodo. Siccome si tratta di fare OO in C, il sodo significa scrivere del codice di supporto. La parte difficile è mantenere il codice "piccolo" laddove tende a diventare "grande". Soprattutto si tratta di scrivere un piccolo "sdk" per i concetti successivi. Quindi è l'inizio che è molto complicato poi il resto viene da se.

Comunque mi avete dato un incipit.

P.S.: Premetto che non ho letto i discorsi fatti sull'OO dopo la mia risposta sull'SDK. Sono le 7:51 e sto ancora col cervello annebbiato dal sonno.

Franziscko
15-03-2006, 11:25
c'è una differenza abissare tra il Basic e il VB.

Così come esiste tra VB ( l'ultimo cioè il 6) e la versione .NET

"magari" fosse solo l'essere "visuale"...
E' così, il mondo và avanti e tocca sempre aggiornarsi...chi resta indietro è perduto ^^

Confesso la mia ignoranza totale, io credevo che il VB come Delphi fosse solo Basic o Pascal + oggetti, e *visual* perchè è per windows.... :muro: :muro:

cmq se potessi tornare indietro, comincerei col Pascal per buttarmi subito poi col C/C++.

mjordan
15-03-2006, 19:56
Confesso la mia ignoranza totale, io credevo che il VB come Delphi fosse solo Basic o Pascal + oggetti, e *visual* perchè è per windows.... :muro: :muro:

cmq se potessi tornare indietro, comincerei col Pascal per buttarmi subito poi col C/C++.

Il "Visual" credo si riferisca alla possibilità dell'IDE di avere un GUI builder visuale, che ti permette di specificare i widget di interfaccia in modo visuale durante la creazione, gestire / impostare callbacks, definire eventi, settare gli alignment e via dicendo. E' il GUI builder poi che si occupa di generare il codice (generalmente pessimo :D ). Oggi i GUI builder moderni insieme al supporto delle nuove librerie sembra stanno favorendo la descrizione dell'interfaccia grafica mediante un linguaggio XML che poi viene interpretato dalla libreria per la costruzione della GUI a runtime, anzichè generare codice "statico" che poi va compilato tradizionalmente.

k0nt3
15-03-2006, 21:06
dov'è questa dimostrazione?
Riformulo il mio pensiero: le relazioni tra noi e il mondo esterno così come il comunicare sono un modello ripreso nella programmazione a oggetti, in questo senso è un approccio tipico del nostro modo di ragionare; + che di ragionare avrei dovuto di relazionarsi.
se noi ragionassimo a oggetti il nostro pensiero si potrebbe sintetizzare con programmazione a oggetti.. invece guardacaso quando si parla di intelligenza artificiale si va a finire nel paradigma logico. e lo trovo anche abbastanza logico pensandoci. se ti interessa siamo ben lontani dall'aver capito come ragioniamo.. è un settore piuttosto inesplorato (anche se i tentativi ci sono sempre stati). quello che invece va riconosciuto è che la programmazione OO è più facile utilizzare per la nostra mente, e la cosa è ben diversa. e non vuole nemmeno dire che è facile da imparare (senza basi infatti è molto difficile).


da quel che hai appena scritto si capisce benissimo che non hai affatto capito...o magari che non vuoi capire ;)

a me capita spesso di vedere le cose come fossero oggetti! lo faccio perchè ormai ho la padronanza di questo concetto, e inoltre ho fatto bene a usare il condizionale, perchè non sono oggetti in realtà. considerarli oggetti è una semplificazione piuttosto evidente :)


sinceramente la tua battuta non mi fà ridere...

è perchè non voleva essere una battuta

Intanto specifichiamo che ripartire da 0 (così nè nè nessun altro può inciampare e leggere volontariamente o involontariamente quello che non c'è scritto o quello che maggiormente gli fà comodo) significa abbandonare totalmente un approccio alla programmazione ( intesa sia come stesura del codice sia come analisi di un problema e formulazione di una o + soluzioni, quindi la realizzazione di un algoritmo, in parole povere...) per abbracciarne uno nuovo che praticamente nulla ha in comune, sia dal pdv tecnico, ma soprattutto dal pdv del ragionamento e della trattazione di un problema.

questo è falso! non si abbandona un bel niente! si prende quello che si conosce e si costruisce sopra il concetto di oggetto. altrimenti non potrai mai capirne a fondo il senso e ti ridurrai a disegnare quattro bottoncini per tutta la vita. la programmazione OO è un'estensione della programmazione strutturata che tu lo voglia o no.. non è qualcosa di totalmente diverso, ma semplicemente qualcosa che ti permette di usare meglio quello che sai.

Detto questo, te lo dico subito il perchè occorre ripartire da 0 e + in là con gli anni e con l'esperienza si và e + diventa difficile compiere questo passo ( e se leggi qls intervento di programmatori di una certa esperienza possono confermartelo oppure l'hanno fatto a suo tempo, da fek a cdimauro per citarne un paio che di "programmazione" campano): perchè per programmare decentemente ed essere produttivo ( il che vuol dire non buttare via del tempo, molto semplicemente) devi perdere tutte le abitudini, spesso brutte abitudini, che avevi imparato con la programmazione procedurale.

questo succede solo quando ti fossilizzi. i tuoi due esempi non significano nulla.. io dico sempre di aver iniziato a programmare con il pascal.. ma in effetti prima ho giochicchiato con il basic (chi non ha mai sbirciato il codice di gorilla.bas? :D ). comunque il vero inizio è stato pascal. con pascal ho imparato tutto! ho imparato prima i costrutti base, poi come si usano funzioni e procedure, poi ancora ho persino avuto le prime esperienze con il concetto di puntatore (anche se in pascal è decisamente soft) e infine con gli object! certo ho detto oggetti, in pascal! ho capito il concetto di oggetto programmando in pascal! passare alla programmazione a oggetti partendo da quelle basi è stata una passeggiata. l'importante è non fossilizzarsi sulla programmazione strutturata, ma non posso assolutamente per nessun motivo dire che la programmazione strutturata è stata inutile.

Un pò come quelli che passano dal C al C++ e siccome usano il C++ ( che per altro è un linguaggio ibrido dato che supporta vari tipi di metodologia...e non poteva essere altrimenti, essendo un superset del C) con un pò di incapsulamento, sono convinti di saper programmare ad oggetti.
Questo non è programmare ad oggetti ma soprattutto non è _ragionare_ con l'approccio OO.

il C++ offre qualsiasi cosa per lavorare con gli oggetti.. non capisco il problema! come tutti gli strumenti dipende da come lo si usa!

se fosse per me inizierei da questo paradigma, perchè banalmente è quello + utilizzato ed il migliore nella stragrande maggioranza dei progetti e processi di creazione del SW.
Quindi iniziare subito dalla metodologia giusta sarebbe un grosso passo in avanti.
(e sempre fosse per me, questa è una provocazione, non utilizzerei nessuno dei linguaggi finora citati bensì Nebula, Eiffel o ancor meglio Smalltalk che ha a disposizione discreti strumenti per poter lavorare, un'ottima documentazione ed ancora una buona comunità di sviluppatori; in parole povere utilizzerei un linguaggio ad oggetti puro)

qui non stiamo parlando di usare il paradigma migliore per il mondo del lavoro.. non so se hai capito, ma si discuteva sul linguaggio per imparare a programmare! e se vuoi imparare a programmare seriamente non puoi evitare di passare dal C... è un bagaglio tecnico troppo importante per essere ignorato! e passare dagli oggetti alla programmazione strutturata è ben più difficile del contrario! poi il mondo semplificato degli oggetti provoca il radicamento di concetti sbagliati nel livello più basso che è nascosto proprio dagli oggetti... questo si vede molto bene in chi ha sempre usato solo linguaggi OO. non si può dire che siano degli ottimi programmatori..

Quanto alle lacune che ci sarebbero nel non partire con la programmazione procedurale, beh sono facilmente colmabili perchè sono concetti abbastanza semplici e che possono essere trattati durante l'insegnamento dell'OOP.

non è una banalità il solo fatto di capire come funziona un ciclo, una variabile, una funzione o una libreria.. ci vuoi aggiungere pure gli oggetti al minestrone?

Molto + difficile è insegnare un approccio, far sì che gli studenti imparino ad usare quello per poi dire "bene, quello che avete imparato è ok, ora però mettetelo da parte, pensate come se doveste iniziare da 0 ed impariamo a programmare e a pensare il programma in termini di oggetti".

un approccio come quello a oggetti lo si può insegnare solo a chi ha basi solide.. e se le basi sono davvero solide non incontrerà davvero nessuna difficoltà. ti ricordo che la programmazione OO non è affatto banale e richiede conoscenze davvero ampie per risultare produttiva.

E' come voler insegnare a giocare a calcio a stando con le mani appoggiate sul campo per poi insegnare a giocare a calcio "normalmente".
Non è un modo diverso di giocare, è proprio un altro sport.
questa poi.. non ci azzecca un granchè! ti ho già ripetuto che la programmazione strutturata la vedi anche dentro la programmazione a oggetti.. in qualche modo la seconda ingloba la prima.

Galileo
22-03-2006, 23:14
Galileo, grazie per aver citato i filosofi greci. Credevo di essere l'unico rimasto a ricordare e approfondire la relazione esistente tra la prospettiva orientata agli oggetti e la filosofia classica.

:D

sn appassionato di filosofia e storia :)


C'è anche un aneddoto riguardo alla nascita dei linguaggi "orientati agli oggetti". Lo racconto perchè, oltre a sembrarmi divertente, può essere utile a chi deva affrontare un volume sui linguaggi tipo C++, Python, Java, Squeak eccetera.

E' trito e ritrito il fatto che il primo linguaggio di programmazione orientato agli oggetti sia stato Simula. Furono tal Nygaard e un certo Dhal a crearlo e che per questo vinsero un Turing a testa.

Lo scopo era quello di semplificare la vita a chi dovesse eseguire delle simulazioni attraverso un calcolatore (da cui, con grande fantasia, il nome Simula). Per i due Nostri, si trattava si simulazioni riguardanti l'arricchimento di barre di uranio per una centrale nucleare sperimentale o roba del genere.

Sappiamo, dalla voce dei due, che la prima cosa che fecero fu cercare di capire perchè le simulazioni in ALGOL erano "complicate". Stabilirono che ALGOL permetteva di descrivere i fenomeni da un punto di vista che era più vicino a quello del calcolatore che non a quello del uomo che programmava.

Come giustamente afferma Galileo, la soluzione che trovarono per semplificare la scrittura di simulazione fu quella di automatizzare un cambio di prospettiva.

I calcolatori avevano allora e hanno ancora oggi una prospettiva che si basa su valori conservati in registri di memoria e operazioni su quei valori (lo dico basandomi sul libro di Hennessy-Patterson, io non progetto computer).

Loro (Dhal e Nygaard) sapevano della diversità tra questo modo di interpretare per comprendere i fenomeni e quello proprio degli esseri umani.

Ciò che scoprirono fu il modo di rappresentare un fenomeno secondo una prospettiva umana e lasciare che un compilatore si occupasse di tradurre questa rappresentazione secondo la prospettiva che avrebbe potuto usare e poteva comprendere un calcolatore.

Fondarono quindi, con Simula, quella che fu poi definita da Nygaard "prospettiva orientata agli oggetti": un modo umano di scrivere programmi.

Ora viene il passaggio cruciale.

Cosa sapevano Nygaard e Dhal circa il modo in cui l'uomo comprende i fenomeni (reali o immaginari) che osserva? Be', è ragionevole supporre che non ne sapessero più di quanto ne sapevano psicologi e neurologi sul finire degli anni '70.

Tutti i campi del sapere umano hanno, in certo periodo storico, una teoria dominante. La teoria dominante non è "vera": è solo quella più resistente alle critiche.

Capita allora che tra gli anni '60 e gli anni '70 la psicologia cognitiva stabilisse che l'uomo comprendesse il mondo attraverso l'applicazione di concetti le cui relazioni erano definite dalla teoria cosidetta "classica".

"classica" perchè apparentata con le categorie aristoteliche. La teoria classica stabiliva che i concetti usati dall'uomo per comprendere i fenomeni fossero intrecciata da relazioni di tipo gerarchico rapportanti le loro caratteristiche essenziali. Se B è sottoclasse di A allora B ha tutte le caratteristiche essenziali di A più altre caratteristiche definenti. Per ogni concetto esistono delle caratteristiche che lo distinguono in quanto appartenente ad un Tipo e non ad un altro e tali caratteristiche sono essenziali e immancabili. La specie è compatibile con il genere. E via dicendo.

Caspita, ma questa è proprio la programmazione orientata agli oggetti! Siamo a cavallo, scrivo come penso!

E allora perchè a tanti lascia l'amaro in bocca?

Ragazzi, notizia dell'ultima ora: non siamo più nel 1970 :D

Nell'anno del signore 2006, i cognitivisti dibattono accanitamente sulla natura della "prospettiva umana". C'è un solo punto fermo e penso che l'abbiate sulla punta della lingua: di tutte le teorie possibili, quella "classica" è la peggiore immaginabile.

A quanto pare ci si accapiglia su altre tre: teoria dei prototipi, teoria degli esemplari e teoria dei concetti dipendenti dalle teoria.

E' un problema mica da ridere. Apri un libro che abbia qualcosa a che fare con l'orientamento agli oggetti in informatica e la prima frase cade come un pugno sul tavolo "gerarchia, genere a specie, ereditarietà, ereditarietà, ereditarietà!!!".

Probabilmente la teoria classica continua ad appestarci perchè è molto schematica: ha le gambe, una seduta e lo schienale, cascasse il mondo questa è una sedia.

La migliore scienza ed esperienza del nostro momento storico, ci dice che la faccenda è, come rileva k0nt3, più magmatica: ci sono sedie che sono più "sedia" di altre sedie. Caratteri non essenziali che definiscono categorie essenziali secondo il contesto. E oggetti che non hanno nulla in comune, salvo il fatto che sono compresi come in rapporto di genere a specie.

Così programmiamo usando strumenti che ci offrono una visione delle cose che non è nè la nostra nè quella della macchina a cui parliamo.

Ben si comprende perchè qualcuno ancora parli al proprio computer in C: il 50% dei dialoganti comprende quel che si dice :D.

Il mio consiglio a chi si appresti ad imparare è: se scegliete un linguaggio "OO", siate pronti a mettere in discussione le "verità" che vi offre un libro. C'è una sorta di peccato originale nella programmazione orientata agli oggetti di cui non tutti vogliono dar conto. E se qualcosa vi appare strano, c'è caso che lo sia veramente ;)


sn d'accordo su quanto dici riguardo all'ultimo consiglio, banalmente però è quello che dovremmo fare tutti quando qls cosa ci viene insegnata e cioè non prenderla sempre come oro colato ma affrontarla con spirito critico e provare a confutarla, in particolar modo se non "ci scompiffera".

L'approccio OO non và visto come una sorta di assioma e che và sempre e cmq utilizzato perchè è il migliore di tutti; ma è indubbio che se l'informatica dal pdv della realizzazione di un SW è progredita così tanto in questi ultimi 30 anni lo si deve in gran parte ai miglioramenti nel modo di pensare e di realizzare codice che proprio il paradigma OO ha portato; basti pensare solo ai nuovi modelli e alla rivoluzione a cui abbiamo assistito nell'ingegneria del SW o alle stesse tecniche agili e all'XP in questi ultimissimi anni.
E' chiaro che la spinta è pragmatica.
Se non ci fosse stato bisogno, se non ci fosse stata la crescita esponenziale delle transazioni dell'E-Commerce n avremmo avuto la necessità di adottare nuove tecniche di sviluppo e di adattamento del SW e via discorrendo.


Riguardo al discorso sulla psicologia e sulla teoria classica, ci sn dei distinguo da fare.
E' ovvio che la teoria classica per come era stata concepita dai classici non può essere attuale ( il mondo non è piatto per es. :D) , importanti sn gli spunti che sn stati in grado di dare ad altri pensatori anche recenti.
Il fatto solo che alcune problematiche siano state poste all'attenzione dell'uomo + di duemila anni fà e su queste ancora oggi si dibatta è per certi versi stupefacente.
Proprio nella psicologia, gli studi di Freud e di Jung si rifanno a concetti sull'Io e sul rapporto della coscienza e con la persona fisica che erano già stati affrontati da Socrate ma soprattutto nella metafisica platoniana.

La psicologia cognitiva, che mette in luce le varie fasi dell'apprendimento ( con il famoso triangolo segno-oggetto-significato) tocca un nervo scoperto che è stato il motivo di rottura nella filosofia classica e che ha dato inizio ai due filoni mai + ricongiuntisi, tra l'empirismo e il pragmatismo aristotelico e la metafisica di Platone, ovvero, le idee, i concetti così come li impariamo, sono effettivamente esterni a noi alla nostra mente, dal momento in cui nasciamo oppure alcuni li possediamo prima ancora di impararli a comprendere compiutamente? Sono o non sono, parte di essi innati?

Ma chiaramente è solo una branca della psicologia, c'è quella sociale che mette in luce altre tematiche riguardanti l'apprendimento umano ed il funzionamento del cervello...e per avere un quadro completo, occorre sempre cercare di confrontare i vari tipi di approcci e prendere da ognuno di essi "quel che c'è di buono", così come avviene per la programmazione.
Da uno di questi però occorre iniziare, ed io, per la programmazione, preferirei l'approccio OO proprio perchè all'inizio la mente è una tabula rasa sulla quale è + facile scrivere alcune, seppur non sempre facili, nozioni.


Io la vedo così :)

LiFeHaCk
05-04-2006, 14:26
ragazzo mio io ho iniziato cn vb 6.0 ma ti consiglio di partire col c se proprio nn ce la fai prova il vb6.0 ^^
io sn un maniako di visual basic 6.0 ahah ^^

mjordan
06-04-2006, 00:03
ragazzo mio io ho iniziato cn vb 6.0 ma ti consiglio di partire col c se proprio nn ce la fai prova il vb6.0 ^^
io sn un maniako di visual basic 6.0 ahah ^^

Ci hai iniziato ma ci vuoi pure morire? :D Visual Basic 6 ormai è storia. Da un pezzo.

relon
21-04-2008, 14:00
Salve a tutti, sono nuovo nel mondo della programmazione e mi piacerebbe davvero molto iniziare a programmare.Quello che vorrei fare e riuscire a costruire programmini o applicazioni per risolvere le mie necessità.Mi spiego meglio...
Ad esempio oggi mi accorgo che necessito di un applicazione che mi permetta di effettuare una pulizia nel registro di sistema, oppure un applicazione che mi permetta di scegliere quali servizi e programmi far partire all'avvio del S.O.Ecc...
Ovviamente anche la grafica per me conta molto...
Tenete conto che ho qualche base di scripting bash e con visual basic son riuscito a fare un piccolo browser :D (molto codice l'ho copiato lo ammetto:mc: ).
Oltre a consigliarmi un linguaggio vorrei anche sapere come iniziare ad usarlo..Cioè se mi dite di usare C non saprei di quali strumenti necessito, stessa cosa se mi consigliate un altro linguaggio...
Spero di essere stato chiaro nell'esprimermi e di ricevere presto una risposta..
Saluti

Calatinu
23-11-2008, 11:18
Raga se uno non sà l'inglese dubbito che riesca a capire come fare un programma.Corrrrregetemi se sbaglio.
Cmq volevo chiedervi se potevate consigliarmi qualcosa di semplice che non ci sia bisogno di sapere l'inglese.:stordita:

mjordan
23-11-2008, 14:46
Raga se uno non sà l'inglese dubbito che riesca a capire come fare un programma.Corrrrregetemi se sbaglio.
Cmq volevo chiedervi se potevate consigliarmi qualcosa di semplice che non ci sia bisogno di sapere l'inglese.:stordita:

Magari senza sapere l'inglese è ardua ma se non si sa nemmeno l'italiano, questo potrebbe essere davvero un problema...

wizard1993
23-11-2008, 15:06
Magari senza sapere l'inglese è ardua ma se non si sa nemmeno l'italiano, questo potrebbe essere davvero un problema...

mai cosa più giusta fu detta

das
23-11-2008, 17:19
Salve a tutti/e.

Lavoro 18h al giorno con i pc e mi sono stufato di essere un "utente" vorrei iniziare a programmare, mi hanno consigliato per iniziare il Visual Basic 6, dato ke nn conosco nessun linguaggio di programmazione a parte i nomi, vi chiedo un aiuto per trovare qualke guida (naturalmente in ita se possibile) ke spieghi da zero come utilizzare tale linguaggio.

Grazie anticipatamente.

Io ti consiglio Delphi 6 o 7, gira voce che con le ultime versioni l'hanno un po' sciupato.

Comunque io uso spesso delphi 6 e lo trovo veloce e pratico. Le finestre si disegnano graficamente come in VB ma ha tanti pregi in più.
Primo fra tutti che compila eseguibili standalone che non hanno bisogno di installare librerie particolari per funzionare.

E' meno potente del c++, per esempio non ha i puntatori intelligenti ma è molto più intuitivo.

mjordan
23-11-2008, 17:28
Primo fra tutti che compila eseguibili standalone che non hanno bisogno di installare librerie particolari per funzionare.


Bhè la questione degli eseguibili "standalone" si chiama linking statico e si può fare con qualsiasi linguaggio che abbia un compilatore degno di questo nome (che usi un linker degno di questo nome).
Il linking statico / dinamico tra l'altro è una feature del sistema operativo, del file system e del formato binario piuttosto che del linguaggio utilizzato. Giusto per precisare che non è una feature di Delphi.

das
23-11-2008, 18:46
Bhè la questione degli eseguibili "standalone" si chiama linking statico e si può fare con qualsiasi linguaggio che abbia un compilatore degno di questo nome (che usi un linker degno di questo nome).
Il linking statico / dinamico tra l'altro è una feature del sistema operativo, del file system e del formato binario piuttosto che del linguaggio utilizzato. Giusto per precisare che non è una feature di Delphi.

No ho detto che è esclusiva di delphi (anzi), ho solo detto che è una cosa che vb6 non ha e che invece è molto importante.

Calatinu
24-11-2008, 11:47
Raga scusate la mia ignoranza,pensavo che mi potevate consigliare un prog.semplice da usare.
Un prog. per fare qualche piccola animazione per mia figlia.

Emaborsa
06-05-2009, 12:19
Ciao, pure io sono intenzionato a programmare.
Ho iniziato a leggere il 3rd, ho letto fino alla pagina 3; la 4 l'ho guardata....e le altre le ho sorvolate.

Più che consigli per PeppinoX, mi è sembrato una lotta tra Java e C.
Alla fine comunque penso di restare su C, perchè sono del parere che bisogna sapere la base di tutto.

Tommo
06-05-2009, 12:44
Considera che il thread ha quasi 3 anni, ed in 3 anni ne cambiano di cose... per esempio cdimauro ha iniziato la sua crociata a favore di Python :asd:

cmq ti sconsiglio il C, che è obsoleto anche come paradigma... meglio darsi a roba di più alto livello all'inizio.

banryu79
06-05-2009, 13:32
Considera che il thread ha quasi 3 anni, ed in 3 anni ne cambiano di cose... per esempio cdimauro ha iniziato la sua crociata a favore di Python :asd:

cmq ti sconsiglio il C, che è obsoleto anche come paradigma... meglio darsi a roba di più alto livello all'inizio.
Necroposting, eh?

No, scherzi a parte secondo me hai fatto meglio a riesumare questo thread che ad aprirne uno nuovo: thread della serie: "Voglio iniziare a programmare: con che linguaggio potrei cominciare?" spuntano come funghi e ce ne sono a bizzeffe nel forum della sezione.

Se hai un po' di tempo da spendere ti consiglio la lettura di questo articolo (http://www.appuntidigitali.it/2506/quale-linguaggio-per-imparare-a-programmare/) di Appunti Digitali.

Non a caso è il 2° "Top Post" della rivista elettronica.

Emaborsa
06-05-2009, 13:33
meglio darsi a roba di più alto livello all'inizio.

Del tipo?

Emaborsa
06-05-2009, 13:39
Se hai un po' di tempo da spendere ti consiglio la lettura di questo articolo (http://www.appuntidigitali.it/2506/quale-linguaggio-per-imparare-a-programmare/) di Appunti Digitali.

Non a caso è il 2° "Top Post" della rivista elettronica.

Letto. Allora siamo tra C# e Java?
Tu del Pascal che dici?

banryu79
06-05-2009, 14:08
Letto. Allora siamo tra C# e Java?
Tu del Pascal che dici?

Del Pascal? Non dico niente perchè non lo consco, ma qualcuno del forum sì, quindi c'è la possibilità che qualcuno passando e leggendo ti dia il suo parere.

Comunque prova a leggere anche i commenti di quell'articolo (sono tanti, lo so) almeno per farti una prima approssimativa idea delle diverse opinioni e del variegato mondo della programmazione (o meglio, di come i diversi programmatori vedono l'annosa questione del "linguaggio migliore per cominciare").

Per come la vedo io, un linguaggio dovrebbe essere nient'altro che uno strumento, come il martello o la sega per un falegname: in base al risultato da ottenere si sceglie il o i (dipende dal tipo di applicazione che si va sviluppando) linguaggio/i più conveniente.

Il concetto di convenienza può anche essere soggettivo, però in genere si tende a pensare che la stima correttà sia quella basata sul concetto di efficenza: il minimo sforzo per il massimo risultato.

Scegliere invece un linguaggio come il primo linguaggio per iniziare a studiare è diverso: qui valgono le considerazioni fatte in quell'articolo, su cui mi trovo d'accordo. Poi dipende sempre dagli scopi e dalle motivazioni di chi si accinge a
entrare nel mondo della programmazione; ad esempio se il tuo obbiettivo fosse quello di programmare microcontrollori probabilmente iniziare studiando il linguaggio C avrebbe più senso che non inziare, che so, con Ruby.

Emaborsa
06-05-2009, 14:19
Del Pascal? Non dico niente perchè non lo consco, ma qualcuno del forum sì, quindi c'è la possibilità che qualcuno passando e leggendo ti dia il suo parere.


...l'ho chiesto solo perchè ne parlano molto (nei post sopra).

Poi dipende sempre dagli scopi e dalle motivazioni di chi si accinge a
entrare nel mondo della programmazione; ad esempio se il tuo obbiettivo fosse quello di programmare microcontrollori probabilmente iniziare studiando il linguaggio C avrebbe più senso che non inziare, che so, con Ruby.

Mi hanno offerto un lavoro, una società di sviluppo software che lavora sopratutto con WIN (perciò linux non m'interessa) assieme al SQL....
Per questo motivo "IO" pensavo allo C#; prima perö volevo sentire altri pareri.

||ElChE||88
06-05-2009, 14:24
Se sai che lavorerai su Windows allora C# è un ottima scelta.

~FullSyst3m~
06-05-2009, 20:06
...l'ho chiesto solo perchè ne parlano molto (nei post sopra).



Mi hanno offerto un lavoro, una società di sviluppo software che lavora sopratutto con WIN (perciò linux non m'interessa) assieme al SQL....
Per questo motivo "IO" pensavo allo C#; prima perö volevo sentire altri pareri.

Se devi lavorare su win credo che la scelta migliore sia C# o anche Java (che è multipiattaforma e come sintassi non differisce poi cosi tanto). Ma questa azienda non ha chiesto dei requisiti specifici? Che linguaggio vuole usare? Lascia la scelta al programmatore?

Emaborsa
06-05-2009, 21:11
Ma questa azienda non ha chiesto dei requisiti specifici? Che linguaggio vuole usare? Lascia la scelta al programmatore?

Loro mi hanno detto che dovrei sapere programmare in SQL con concetto OOP. Io vorrei partire dalla base...

~FullSyst3m~
06-05-2009, 21:36
Loro mi hanno detto che dovrei sapere programmare in SQL con concetto OOP. Io vorrei partire dalla base...

Ti hanno dato una scadenza?

ekerazha
06-05-2009, 22:49
Loro mi hanno detto che dovrei sapere programmare in SQL con concetto OOP. Io vorrei partire dalla base...

Direi C# o Java

Se vuoi imparare, roba con typing dinamico tipo Python non è didattica.

cdimauro
06-05-2009, 23:15
Al contrario: Python nasce proprio essere didattico, e... ci riesce benissimo:

http://www.python.org/doc/essays/cp4e.html

ekerazha
06-05-2009, 23:37
Deve essere un gran genio chi ha concepito come didattico un linguaggio con typing dinamico... semplice e "didattico" sono due cose ben distinte.

PGI-Bis
06-05-2009, 23:42
Be', c'è stato uno che l'ha fatto e ci ha vinto un premio Turing. Tanto stupido non doveva essere.

P.s.: con questo non voglio confermare o smentire la didatticità di Python.

ekerazha
06-05-2009, 23:44
Un linguaggio che non può istruire in modo rigoroso alla tipizzazione e all'uso consapevole della memoria centrale, di certo non può essere didattico...

... comunque non penso sia il caso di dilungarsi troppo sulla questione perchè l'ho già affrontata altre volte con dei ragazzi-fan di Python ed è inutile tentare di convincere chi difende i propri beneamini a spada tratta.

PGI-Bis
06-05-2009, 23:49
Guarda, sul punto io sarei anche d'accordo perchè una preferenza per la tipazione in compilazione, tuttavia bisogna vedere la questione in termini un po' più generali. IL turing a cui mi riferirivo è Alan Kay. Alcuni non lo sanno ma ci fu proprio uno studio ed un indirizzo specifico alla didattica nello sviluppo della piattaforma Smalltalk che era in principio uno strumento per l'introduzione dello studio dell'informatica nelle scuole elementari. E la scelta della tipazione "debole" fu fatta proprio per eliminare la necessità di tener conto di alcune cose per potersi concentrare su altre.

Le cose da poter tralasciare erano i dettagliumi tecnici, quelle da considerare le interazioni. C'era anche un testo da qualche parte, tipo "le origini di smalltalk" o una cosa così scritta da Kay. Naturalmente non lo trovo più :D.

ekerazha
06-05-2009, 23:53
Guarda, sul punto io sarei anche d'accordo perchè una preferenza per la tipazione in compilazione, tuttavia bisogna vedere la questione in termini un po' più generali. IL turing a cui mi riferirivo è Alan Kay. Alcuni non lo sanno ma ci fu proprio uno studio ed un indirizzo specifico alla didattica nello sviluppo della piattaforma Smalltalk che era in principio uno strumento per l'introduzione dello studio dell'informatica nelle scuole elementari. E la scelta della tipazione "debole" fu fatta proprio per eliminare la necessità di tener conto di alcune cose per potersi concentrare su altre.

Le cose da poter tralasciare erano i dettagliumi tecnici, quelle da considerare le interazioni. C'era anche un testo da qualche parte, tipo "le origini di smalltalk" o una cosa così scritta da Kay. Naturalmente non lo trovo più :D.

Per la didattica alla scuola elementare ci può anche stare ;)

PGI-Bis
06-05-2009, 23:58
Be' via, parliamo di "Voglio imparare a programmare" non di "Se quello che programmo non funziona mi citano per danni".

E' ovvio che la seconda opzione richieda un tantinello di approfondimento anche sul perchè le cose funzionino.

ekerazha
07-05-2009, 00:05
Be' via, parliamo di "Voglio imparare a programmare" non di "Se quello che programmo non funziona mi citano per danni".

E' ovvio che la seconda opzione richieda un tantinello di approfondimento anche sul perchè le cose funzionino.

Certo... il rischio è però quello di allevare una generazione di sviluppatori che non riflettono minimamente sulle consueguenze che il proprio codice può avere sull'occupazione e sulla gestione della memoria.

Mettiamola così... iniziare con roba tipo Python equivale all'avere dei genitori che ti viziano troppo... iniziare con roba tipo C equivale all'essere spedito in un collegio austriaco... iniziare con roba tipo Java equivale all'avere un genitore equilibrato :D

Io ho iniziato col Pascal (poi C) che diciamo è un collegio sul litorale romagnolo :D

_Claudio
07-05-2009, 00:16
Io rimango dell'idea che per iniziare seriamente in modo completo si debba partire dall'avere basi matematiche e logiche non indifferenti, da un buon libro sui sistemi operativi, dalla programmazione Win32 (o l'equivalente su Linux) in C e in C++ per poi passare alla programmazione .net con Visual C++.

Fatti questi passi non esiste charlie appostato su un albero pronto a lanciarvi dardi e scoregge nella foresta che non possa essere risolto dal nostro marines.

A tal proposito vorrei proporre un video di reclutamento e incoraggiamento:
http://www.youtube.com/watch?v=_Dy0ano5A-U

-Slash
07-05-2009, 01:33
Per la didattica alla scuola elementare ci può anche stare ;)
Python viene studiato come primo linguaggio di programmazione al MIT nel corso di laurea in electronics engineering and computer science. Insomma non proprio le elementari

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-00Fall-2007/Syllabus/index.htm

||ElChE||88
07-05-2009, 01:42
Python viene studiato come primo linguaggio di programmazione al MIT nel corso di laurea in electronics engineering and computer science. Insomma non proprio le elementari

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-00Fall-2007/Syllabus/index.htm
Interessante... è bello vedere che pian piano le università si stanno allontanando dal C. :)

mjordan
07-05-2009, 06:03
Interessante... è bello vedere che pian piano le università si stanno allontanando dal C. :)

Se è per questo il C non è mai stato inteso come "primo linguaggio".
Il Python in questo caso è stato scelto come linguaggio per imparare i concetti, allo stesso modo di come nelle università italiane si studiava il Pascal.

Quanto al C, sarebbe utopistico eliminarlo e decisamente non auspicabile. Ovviamente non significa che al MIT non si studi il C, non capisco cosa ti possa minimamente far pensare ciò.

mjordan
07-05-2009, 06:08
Un linguaggio che non può istruire in modo rigoroso alla tipizzazione e all'uso consapevole della memoria centrale, di certo non può essere didattico...


Perchè sbagli a considerare l'aggettivo "didattico". Qui per didattico non si intende gestione della memoria, tipizzazione e altre amenità varie: qui per didattico si intende gente che deve imparare cos'è una variabile, come si assegna un'intero, come si realizza una semplice espressione, che significa costruire un ciclo e come si realizza il concetto di esecuzione condizionale. Ovvero didattica per gente che non ha scritto mai una riga di codice in vita sua.
Tutto il resto è già un passo successivo. I concetti di programmazione, comuni a qualsiasi linguaggio, sono un conto, le idiosincrasie dei linguaggi ne sono un'altro.
La gestione della memoria e la tipizzazione sono cose che sono troppo differenti fra un linguaggio e l'altro e non di certo rientrano nella didattica di base.
Tra l'altro, i corsi introduttivi di programmazione non hanno quasi mai lo scopo di far imparare un linguaggio, piuttosto i concetti base di informatica che ci si ritrova ovunque: servono piu' per instaurare una forma mentis al ragionamento di alcuni semplici algoritmi piuttosto che conoscere il linguaggio in se. E' raro infatti trovare domande specifiche sul linguaggio usato, molto piu' facile trovare invece dei problemi da risolvere, come ad esempio ricorsione, ricerca binaria, semplici algoritmi su array, semplici ordinamenti "grezzi", ecc. ecc. In questi corsi il linguaggio è solo un mezzo e sicuramente Python è piu' adatto di altri, consentendo di focalizzarsi piu' sul problema che non sulle questioni del linguaggio in se, piu' di quanto poteva fare Pascal. Se non è didattico questo.

mjordan
07-05-2009, 06:11
Loro mi hanno detto che dovrei sapere programmare in SQL con concetto OOP. Io vorrei partire dalla base...

La tua situazione è alquanto singolare, comunque...

Emaborsa
07-05-2009, 08:40
comunque non penso sia il caso di dilungarsi troppo sulla questione perchè l'ho già affrontata altre volte con dei ragazzi-fan di Python ed è inutile tentare di convincere chi difende i propri beneamini a spada tratta.

è normale che chi si trova bene con una cosa la difenda, è sempre così. Purtroppo si finisce quasi sempre a litigare per il motivo di mostrar di aver ragione.

Direi C# o Java

Se vuoi imparare, roba con typing dinamico tipo Python non è didattica.

Io mi sono deciso per il C#....leggendo mi sembra di capire che è il più usato.

Ti hanno dato una scadenza?

No, mi hanno detto che appena sono in grade di "scrivere" un pò, mi avrebbero fatto apprendere ciò che serviva a loro tramite dei corsi e mi avrebbero assunto. In poche parole mi serve la base di tutto e devo sapere dove mettere le manise mi danno un codice sorgente.

~FullSyst3m~
07-05-2009, 09:51
Qua stiamo andando fuori dai binari. Non si tratta di difendere i beniamini a spada tratta. Non c'entra proprio nulla. Stiamo parlando che per uno che NON ha mai programmato Python è un'ottima scelta e fa capire i concetti basi della programmazione. Poi si può passare ad un altro linguaggio.

banryu79
07-05-2009, 10:06
Al di là della determinazione del miglior linguaggio con cui pa(r)tire per imparare a programmare in generale: forse per questo utente è più importante capire che linguaggio utilizzerà effettivamente per lavorare e iniziare a studiare quello (almeno gli è stata fornita un'idicazione sul paradigma: OOP).

La cosa un po' strana è la situzione in cui si trova, come diceva poco più sopra mjordan...

Emaborsa
07-05-2009, 10:18
....comunque sia, resto su C#. Che programma/i mi consigliate di usare? Esiste qualche free?

~FullSyst3m~
07-05-2009, 10:27
Al di là della determinazione del miglior linguaggio con cui pa(r)tire per imparare a programmare in generale: forse per questo utente è più importante capire che linguaggio utilizzerà effettivamente per lavorare e iniziare a studiare quello (almeno gli è stata fornita un'idicazione sul paradigma: OOP).

La cosa un po' strana è la situzione in cui si trova, come diceva poco più sopra mjordan...

Infatti, per questo gliel'ho chiesto. Anche a me la situazione in cui si trova sembra un pò strana.

ekerazha
07-05-2009, 11:04
Python viene studiato come primo linguaggio di programmazione al MIT nel corso di laurea in electronics engineering and computer science. Insomma non proprio le elementari

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-00Fall-2007/Syllabus/index.htm

Io al Politecnico ho fatto C, Assembly e Java ;) Certamente non Python, che per il motivo già spiegato non è didattico. Che poi possa essere insegnato lo stesso è un altro conto, ma non è didattico.

ekerazha
07-05-2009, 11:08
Qua stiamo andando fuori dai binari. Non si tratta di difendere i beniamini a spada tratta. Non c'entra proprio nulla. Stiamo parlando che per uno che NON ha mai programmato Python è un'ottima scelta e fa capire i concetti basi della programmazione. Poi si può passare ad un altro linguaggio.

Direi che a questo proposito, la credibilità di chi ha il logo di Python nell'avatar non può essere molto alta ;)

~FullSyst3m~
07-05-2009, 11:18
Io al Politecnico ho fatto C, Assembly e Java ;) Certamente non Python, che per il motivo già spiegato non è didattico. Che poi possa essere insegnato lo stesso è un altro conto, ma non è didattico.

Ma la didattica per te cosa è?

Direi che a questo proposito, la credibilità di chi ha il logo di Python nell'avatar non può essere molto alta

Quindi tu la credibilità di quello che dice un utente la basi sul logo? Siamo messi bene.
Se proprio lo vuoi sapere sto studiando Java e mi piace pure come linguaggio.

ekerazha
07-05-2009, 11:19
Perchè sbagli a considerare l'aggettivo "didattico". Qui per didattico non si intende gestione della memoria, tipizzazione e altre amenità varie: qui per didattico si intende gente che deve imparare cos'è una variabile, come si assegna un'intero, come si realizza una semplice espressione, che significa costruire un ciclo e come si realizza il concetto di esecuzione condizionale. Ovvero didattica per gente che non ha scritto mai una riga di codice in vita sua.
Tutto il resto è già un passo successivo. I concetti di programmazione, comuni a qualsiasi linguaggio, sono un conto, le idiosincrasie dei linguaggi ne sono un'altro.
La gestione della memoria e la tipizzazione sono cose che sono troppo differenti fra un linguaggio e l'altro e non di certo rientrano nella didattica di base.
Tra l'altro, i corsi introduttivi di programmazione non hanno quasi mai lo scopo di far imparare un linguaggio, piuttosto i concetti base di informatica che ci si ritrova ovunque: servono piu' per instaurare una forma mentis al ragionamento di alcuni semplici algoritmi piuttosto che conoscere il linguaggio in se. E' raro infatti trovare domande specifiche sul linguaggio usato, molto piu' facile trovare invece dei problemi da risolvere, come ad esempio ricorsione, ricerca binaria, semplici algoritmi su array, semplici ordinamenti "grezzi", ecc. ecc. In questi corsi il linguaggio è solo un mezzo e sicuramente Python è piu' adatto di altri, consentendo di focalizzarsi piu' sul problema che non sulle questioni del linguaggio in se, piu' di quanto poteva fare Pascal. Se non è didattico questo.

La gente impara ben poco del "cos'è una variabile" se non sa nemmeno quanto spazio occuperà in memoria... l'ho già detto, si rischia di allevare una generazione di sviluppatori superficiali, con le conseguenze già illustrate. La tipizzazione è, nella sostanza, comune a quasi tutti i linguaggi con typing statico (intero a 64 bit, intero a 32 bit, byte ecc.), non ci vedo queste enormi differenze.

Sono poi d'accordo sul fatto che l'obiettivo sia solitamente instaurare una "forma mentis", ma è una forma mentis incompleta se non è stata plasmata per considerare in modo rigoroso determinati aspetti.

Io anche quando programmo in C ad esempio, ordino le condizioni da quella che probabilmente può capitare più spesso a quella che può capitare meno spesso... perchè io dietro al codice C intravedo già codice a più basso livello e quindi so che facendo in questo modo posso risparmiare dei JMP ed avere un codice maggiormente ottimizzato. Pensi che uno sviluppatore allevato a pane e Python possa avere queste stesse attenzioni? Direi di no.

ekerazha
07-05-2009, 11:22
Ma la didattica per te cosa è?
Essere didattico significa essere istruttivo... per i motivi che ho già illustrato, a mio modo di vedere Python non è sufficientemente istruttivo, perchè istruisce in modo troppo superficiale.


Quindi tu la credibilità di quello che dice un utente la basi sul logo? Siamo messi bene.
Se proprio lo vuoi sapere sto studiando Java e mi piace pure come linguaggio.
Diciamo che la dice lunga sui preconcetti che una persona può avere.

~FullSyst3m~
07-05-2009, 11:27
Essere didattico significa essere istruttivo... per i motivi che ho già illustrato, a mio modo di vedere Python non è sufficientemente istruttivo, perchè istruisce in modo troppo superficiale.


Diciamo che la dice lunga sui preconcetti che una persona può avere.

Quindi avere un logo su un linguaggio che si preferisce (e che, aggiungo, è il primo che ho imparato e mi ha avviato alla programmazione) significa avere preconcetti? La tua logica non fa una grinza.

Ma siamo seri per favore.

ekerazha
07-05-2009, 11:30
Quindi avere un logo su un linguaggio che si preferisce (e che, aggiungo, è il primo che ho imparato e mi ha avviato alla programmazione) significa avere preconcetti? La tua logica non fa una grinza.

Ma siamo seri per favore.

Se è il tuo linguaggio preferito è logico supporre che farai di tutto per difenderlo... e torniamo al discorso iniziale ;) Ma sinceramente avviare una discussione su questo punto non mi esalta particolarmente.

cdimauro
07-05-2009, 11:32
Deve essere un gran genio chi ha concepito come didattico un linguaggio con typing dinamico... semplice e "didattico" sono due cose ben distinte.
Concordo: è sicuramente un gran genio.
Un linguaggio che non può istruire in modo rigoroso alla tipizzazione e all'uso consapevole della memoria centrale, di certo non può essere didattico...
Questo su quale base lo affermi?

Più precisamente, mi sapresti dire cosa ci trovi di "didattico" a sapere com'è fatta e come gestire la memoria centrale? Lo trovi "più didattico" di conoscere il concetto di variabile, di dato, e di tipo di dato?
... comunque non penso sia il caso di dilungarsi troppo sulla questione perchè l'ho già affrontata altre volte con dei ragazzi-fan di Python ed è inutile tentare di convincere chi difende i propri beneamini a spada tratta.
Se c'è qualcosa da difendere è il concetto di didattica qui. E ancora devo vedere uno che riesce a giustificarmi il fatto che è "didattico" partire coi concetti di più basso livello (non parliamo dei puntatori, poi) anziché farlo con quelli di variabile, dato, tipo di dato, iterazione, ecc.
Guarda, sul punto io sarei anche d'accordo perchè una preferenza per la tipazione in compilazione, tuttavia bisogna vedere la questione in termini un po' più generali. IL turing a cui mi riferirivo è Alan Kay. Alcuni non lo sanno ma ci fu proprio uno studio ed un indirizzo specifico alla didattica nello sviluppo della piattaforma Smalltalk che era in principio uno strumento per l'introduzione dello studio dell'informatica nelle scuole elementari. E la scelta della tipazione "debole" fu fatta proprio per eliminare la necessità di tener conto di alcune cose per potersi concentrare su altre.

Le cose da poter tralasciare erano i dettagliumi tecnici, quelle da considerare le interazioni. C'era anche un testo da qualche parte, tipo "le origini di smalltalk" o una cosa così scritta da Kay. Naturalmente non lo trovo più :D.
Te lo restituisco: The Early History of Smalltalk (http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html) :D

Per il resto concordo.
Per la didattica alla scuola elementare ci può anche stare ;)
In effetti quelli che lavorano in Google sono tutti tipi da scuola elementare. :asd:

Domani, alla PyCon, glielo riferirò, così ci faremo 4 risate. :rotfl:
Io rimango dell'idea che per iniziare seriamente in modo completo si debba partire dall'avere basi matematiche e logiche non indifferenti, da un buon libro sui sistemi operativi, dalla programmazione Win32 (o l'equivalente su Linux) in C e in C++ per poi passare alla programmazione .net con Visual C++.
Per iniziare "seriamente" bisogna conoscere i concetti di cui ho parlato prima, e si fa moooolto prima con un linguaggio come Python.

Poi, se serve, si passa a qualche linguaggio, visto che Python non nasce per fare da chiave inglese universale (magari da usare al posto del martello).
Perchè sbagli a considerare l'aggettivo "didattico". Qui per didattico non si intende gestione della memoria, tipizzazione e altre amenità varie: qui per didattico si intende gente che deve imparare cos'è una variabile, come si assegna un'intero, come si realizza una semplice espressione, che significa costruire un ciclo e come si realizza il concetto di esecuzione condizionale. Ovvero didattica per gente che non ha scritto mai una riga di codice in vita sua.
Tutto il resto è già un passo successivo. I concetti di programmazione, comuni a qualsiasi linguaggio, sono un conto, le idiosincrasie dei linguaggi ne sono un'altro.
La gestione della memoria e la tipizzazione sono cose che sono troppo differenti fra un linguaggio e l'altro e non di certo rientrano nella didattica di base.
Tra l'altro, i corsi introduttivi di programmazione non hanno quasi mai lo scopo di far imparare un linguaggio, piuttosto i concetti base di informatica che ci si ritrova ovunque: servono piu' per instaurare una forma mentis al ragionamento di alcuni semplici algoritmi piuttosto che conoscere il linguaggio in se. E' raro infatti trovare domande specifiche sul linguaggio usato, molto piu' facile trovare invece dei problemi da risolvere, come ad esempio ricorsione, ricerca binaria, semplici algoritmi su array, semplici ordinamenti "grezzi", ecc. ecc. In questi corsi il linguaggio è solo un mezzo e sicuramente Python è piu' adatto di altri, consentendo di focalizzarsi piu' sul problema che non sulle questioni del linguaggio in se, piu' di quanto poteva fare Pascal. Se non è didattico questo.
Perfettamente d'accordo.
Io al Politecnico ho fatto C, Assembly e Java ;) Certamente non Python, che per il motivo già spiegato non è didattico. Che poi possa essere insegnato lo stesso è un altro conto, ma non è didattico.
Motivazioni alquanto deboli. Si vede che al MIT di Boston sono letteralmente impazziti allora, per proporre Python come linguaggio introduttivo.
Direi che a questo proposito, la credibilità di chi ha il logo di Python nell'avatar non può essere molto alta ;)
Tutto molto logico come ragionamento, non c'è che dire.

Fallacy: Ad Hominem (http://www.linux.it/~della/fallacies/ad-hominem.html)

Descrizione di Ad hominem

Tradotto dal latino all'italiano, "Ad hominem" significa "contro l'uomo" o "contro la persona."

Un Ad hominem è una categoria generale di errori in cui una tesi o un'argomentazione viene rifiutata sulla base di qualche fatto irrilevante sull'autore o sulla persona che presenta la tesi o argomentazione. Tipicamente, questo errore implica due fasi. Prima, viene fatto un attacco contro il carattere, le circostanze o le azioni della persona che fa l'affermazione (o il carattere, le circostanze o le azioni della persona che riporta l'affermazione). Poi, questo attacco viene usato come prova contro l'affermazione che la persona in questione sta facendo (o presentando). Questo tipo di "argomentazione" ha la seguente forma:

La persona A afferma X.
La persona B attacca la persona A.
Quindi l'affermazione di A è falsa.

La ragione per cui un Ad hominem (di qualunque tipo) è un errore è che il carattere, le circostanze o le azioni di una persona (nella maggior parte dei casi) non hanno un legame con la verità o la falsità della tesi che viene espressa (o la qualità dell'argomentazione che viene fatta).
Esempio di Ad hominem

Bill: "Credo che l'aborto sia moralmente sbagliato."
Dave: "Ovviamente lo dici, sei un prete."
Bill: "Cosa mi dici delle argomentazioni che ho dato per sostenere la mia posizione?"
Dave: "Non contano. Come ho detto, sei un prete, quindi devi dire che l'aborto è sbagliato. Inoltre, sei solo un lacchè del Papa, quindi non posso credere a quello che dici."

:rolleyes:

ekerazha
07-05-2009, 11:40
Concordo: è sicuramente un gran genio.

Questo su quale base lo affermi?

Più precisamente, mi sapresti dire cosa ci trovi di "didattico" a sapere com'è fatta e come gestire la memoria centrale? Lo trovi "più didattico" di conoscere il concetto di variabile, di dato, e di tipo di dato?

Se c'è qualcosa da difendere è il concetto di didattica qui. E ancora devo vedere uno che riesce a giustificarmi il fatto che è "didattico" partire coi concetti di più basso livello (non parliamo dei puntatori, poi) anziché farlo con quelli di variabile, dato, tipo di dato, iterazione, ecc.

Te lo restituisco: The Early History of Smalltalk (http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html) :D

Per il resto concordo.

In effetti quelli che lavorano in Google sono tutti tipi da scuola elementare. :asd:

Domani, alla PyCon, glielo riferirò, così ci faremo 4 risate. :rotfl:

Per iniziare "seriamente" bisogna conoscere i concetti di cui ho parlato prima, e si fa moooolto prima con un linguaggio come Python.

Poi, se serve, si passa a qualche linguaggio, visto che Python non nasce per fare da chiave inglese universale (magari da usare al posto del martello).

Perfettamente d'accordo.

Motivazioni alquanto deboli. Si vede che al MIT di Boston sono letteralmente impazziti allora, per proporre Python come linguaggio introduttivo.

Tutto molto logico come ragionamento, non c'è che dire.

Fallacy: Ad Hominem (http://www.linux.it/~della/fallacies/ad-hominem.html)

Descrizione di Ad hominem

Tradotto dal latino all'italiano, "Ad hominem" significa "contro l'uomo" o "contro la persona."

Un Ad hominem è una categoria generale di errori in cui una tesi o un'argomentazione viene rifiutata sulla base di qualche fatto irrilevante sull'autore o sulla persona che presenta la tesi o argomentazione. Tipicamente, questo errore implica due fasi. Prima, viene fatto un attacco contro il carattere, le circostanze o le azioni della persona che fa l'affermazione (o il carattere, le circostanze o le azioni della persona che riporta l'affermazione). Poi, questo attacco viene usato come prova contro l'affermazione che la persona in questione sta facendo (o presentando). Questo tipo di "argomentazione" ha la seguente forma:

La persona A afferma X.
La persona B attacca la persona A.
Quindi l'affermazione di A è falsa.

La ragione per cui un Ad hominem (di qualunque tipo) è un errore è che il carattere, le circostanze o le azioni di una persona (nella maggior parte dei casi) non hanno un legame con la verità o la falsità della tesi che viene espressa (o la qualità dell'argomentazione che viene fatta).
Esempio di Ad hominem

Bill: "Credo che l'aborto sia moralmente sbagliato."
Dave: "Ovviamente lo dici, sei un prete."
Bill: "Cosa mi dici delle argomentazioni che ho dato per sostenere la mia posizione?"
Dave: "Non contano. Come ho detto, sei un prete, quindi devi dire che l'aborto è sbagliato. Inoltre, sei solo un lacchè del Papa, quindi non posso credere a quello che dici."

:rolleyes:

Le mie posizioni le ho già ampiamente illustrate in tutti i messaggi precedenti... e se leggi bene potrai trovarvi risposta a tutti i tuoi quesiti.

Non perderò tempo a discutere con chi, in modo non proprio irrilevante ;), si presenta in partenza parziale e fazioso (la tua firma la dice lunga).


Ciao Quaquaraquà! Questa firma è per ricordati la differenza coi veri uomini, di cui tu ovviamente non fai parte visto che l'unico modo che trovi per sfogare la tua rabbia e il tuo odio represso nei miei confronti è quello del ricorso alle mail anonime... Questo perché le nullità come te confrontandosi con me possono soltanto prendere pali da tutte le parti. Come sempre.
Per iniziare a programmare c'è solo Python con questo libro http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm

:rolleyes:

Emaborsa
07-05-2009, 11:48
Magari quando avete finito di bacchettarvi...mi dite che programma posso usare per C#? :confused:
Grazie

ekerazha
07-05-2009, 11:50
Magari quando avete finito di bacchettarvi...mi dite che programma posso usare per C#? :confused:
Grazie

Su Windows, Visual C# 2008 Express Edition http://www.microsoft.com/express/vcsharp/

Su Linux, MonoDevelop: http://monodevelop.com/

VICIUS
07-05-2009, 11:53
La gente impara ben poco del "cos'è una variabile" se non sa nemmeno quanto spazio occuperà in memoria... l'ho già detto, si rischia di allevare una generazione di sviluppatori superficiali, con le conseguenze già illustrate. La tipizzazione è, nella sostanza, comune a quasi tutti i linguaggi con typing statico (intero a 64 bit, intero a 32 bit, byte ecc.), non ci vedo queste enormi differenze.
È decisamente più importante il concetto di variabile, capire cosa è e come si usa. Sapere che il long in C su una macchina x86 a 32 bit tiene 4 byte nella RAM è una informazione di utilità piuttosto trascurabile. Si tratta di un dettaglio tecnico che può variare a seconda del compilatore o architettura. Il concetto di variabile invece è praticamente universale.

Per questo motivo un linguaggio come Python che ti permette di iniziare concentrandoti su cose fondamentali ignorando i dettagli tecnici è più indicato a chi parte da zero.

Sono poi d'accordo sul fatto che l'obiettivo sia solitamente instaurare una "forma mentis", ma è una forma mentis incompleta se non è stata plasmata per considerare in modo rigoroso determinati aspetti.
Questa è una speculazione. Come fai a sapere che dopo aver finito Python smetterà per sempre di studiare ed approfondire le sue conoscenze?

Io anche quando programmo in C ad esempio, ordino le condizioni da quella che probabilmente può capitare più spesso a quella che può capitare meno spesso... perchè io dietro al codice C intravedo già codice a più basso livello e quindi so che facendo in questo modo posso risparmiare dei JMP ed avere un codice maggiormente ottimizzato. Pensi che uno sviluppatore allevato a pane e Python possa avere queste stesse attenzioni? Direi di no.
Non serve di certo sapere come funziona una cpu x86 per arrivare a questo. Lo si può capire tranquillamente anche con linguaggi come Python. Questo tipo di analisi richiede semplicemente un po' di conoscenza di matematica. Non a caso testi sugli algoritmi come il Cormen riportano esempi tutti in pseudo-codice.

cdimauro
07-05-2009, 11:56
La gente impara ben poco del "cos'è una variabile" se non sa nemmeno quanto spazio occuperà in memoria... l'ho già detto, si rischia di allevare una generazione di sviluppatori superficiali, con le conseguenze già illustrate. La tipizzazione è, nella sostanza, comune a quasi tutti i linguaggi con typing statico (intero a 64 bit, intero a 32 bit, byte ecc.), non ci vedo queste enormi differenze.

Sono poi d'accordo sul fatto che l'obiettivo sia solitamente instaurare una "forma mentis", ma è una forma mentis incompleta se non è stata plasmata per considerare in modo rigoroso determinati aspetti.

Io anche quando programmo in C ad esempio, ordino le condizioni da quella che probabilmente può capitare più spesso a quella che può capitare meno spesso... perchè io dietro al codice C intravedo già codice a più basso livello e quindi so che facendo in questo modo posso risparmiare dei JMP ed avere un codice maggiormente ottimizzato. Pensi che uno sviluppatore allevato a pane e Python possa avere queste stesse attenzioni? Direi di no.
E per fortuna: si ragionava così negli '80, quando si ricorrevano le prestazioni e lo spazio.

Oggi non c'è più quest'esigenza.

Fermo restando che un programmatore professionista che usa Python è anche in grado di sapere quanto occupano i suoi dati, SE gli interessa la cosa.

Non è che si tratta di roba di dominio esclusivo dei programmatori C.

Anzi, se proprio vuoi saperlo, esistono nella libreria standard di Python alcuni moduli che ti permettono di definire in maniera precisa il tipo dei vettori, oppure in che modo dev'essere costituita una struttura (sì, tipo la struct del C).

Come al solito e per tutte le cose, serve conoscenza. Chi parla di Python spesso e volentieri non ne ha, perché è fermo al concetto "è un linguaggio dinamico", ignorando tutto il resto. :read:

cdimauro
07-05-2009, 11:58
Le mie posizioni le ho già ampiamente illustrate in tutti i messaggi precedenti... e se leggi bene potrai trovarvi risposta a tutti i tuoi quesiti.
Che non condivido e ho copiosamente argomentato, se permetti.
Non perderò tempo a discutere con chi, in modo non proprio irrilevante ;), si presenta in partenza parziale e fazioso (la tua firma la dice lunga).

:rolleyes:
Fazioso e parziale è chi preferisce giudicare il monaco dall'abito, e non da quel che dice, come tu stesso hai affermato.

Io le mie valutazioni le faccio ed esprimo le mie idee a prescindere che mi piaccia Python o un altro linguaggio (visto che nella mia lunga carriera ne ho imparati a decine).

Tu rimani pure ancorato alle tue argomentazioni preconcette, ad hominem, appunto.

shinya
07-05-2009, 12:01
Interessante... è bello vedere che pian piano le università si stanno allontanando dal C. :)
Al MIT prima di python, facevano cominciare con Scheme (vedi il secondo link nella mia firma attuale, era il libro di testo del corso).

ekerazha
07-05-2009, 12:03
È decisamente più importante il concetto di variabile, capire cosa è e come si usa. Sapere che il long in C su una macchina x86 a 32 bit tiene 4 byte nella RAM è una informazione di utilità piuttosto trascurabile. Si tratta di un dettaglio tecnico che può variare a seconda del compilatore o architettura. Il concetto di variabile invece è praticamente universale.

Per questo motivo un linguaggio come Python che ti permette di iniziare concentrandoti su cose fondamentali ignorando i dettagli tecnici è più indicato a chi parte da zero.

Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.

Io sono della scuola che prima si impara l'ortografia e poi si iniziano a scrivere i temi.


Questa è una speculazione. Come fai a sapere che dopo aver finito Python smetterà per sempre di studiare ed approfondire le sue conoscenze?

E' una speculazione tanto quanto il ritenere il contrario ;) è un po' come se un bambino alle elementari prima iniziasse a scrivere temi (pieni di errori di orografia) e poi più avanti cominciasse col dizionario a correggere tutti gli errori. Puoi farlo? Sì. Ma ritengo sia molto meno didattico.


Non serve di certo sapere come funziona una cpu x86 per arrivare a questo. Lo si può capire tranquillamente anche con linguaggi come Python. Questo tipo di analisi richiede semplicemente un po' di conoscenza di matematica. Non a caso testi sugli algoritmi come il Cormen riportano esempi tutti in pseudo-codice.
Che c'entra lo pseudo-codice? Serve proprio sapere come si comporta una CPU (JMP in memoria ecc.) per fare consapevolmente dei ragionamenti di questo tipo. Anche perchè potrei avere una architettura nella quale i salti vengono gestiti diversamente a livello di microcodice.

cdimauro
07-05-2009, 12:08
Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.
Bene, adesso fammi vedere dove sta scritto che un long debba occupare necessiamente più memoria di un intero.

Anzi, facciamo una cosa: prendimi lo standard e dimmi in quale punto preciso sta scritto che un int occupa esattamente x byte, mentre un long esattamente y byte, con x < y ovviamente.

Lo dici tu che bisogna conscere queste informazioni, no?
Che c'entra lo pseudo-codice? Serve proprio sapere come si comporta una CPU (JMP in memoria ecc.) per fare consapevolmente dei ragionamenti di questo tipo. Anche perchè potrei avere una architettura nella quale i salti vengono gestiti diversamente a livello di microcodice.
Già, e io quando scrivo codice C ovviamente devo tenere conto di tutte le architetture di questo mondo, con le loro caratteristiche peculiari in tema di salti condizionati, politiche di branch prediction, ecc. ecc.

D'altra parte lo dici tu che bisogna conoscere i dettagli di basso livello per capire come vanno le cose, no?

Non invidio assolutamente un programmatore C che, oltre a programmare, deve anche avere il dono dell'onniscienza. :asd:

ekerazha
07-05-2009, 12:11
Che non condivido e ho copiosamente argomentato, se permetti.

Il fatto che dovrei risponderti ripetendo cose che ho scritto, è indice che tu non abbia letto bene.


Fazioso e parziale è chi preferisce giudicare il monaco dall'abito, e non da quel che dice, come tu stesso hai affermato.

La faziosità e la parzialità di quello che affermi è in piena sintonia con lo spessore intellettuale della tua firma: un monaco vestito da monaco.


Io le mie valutazioni le faccio ed esprimo le mie idee a prescindere che mi piaccia Python o un altro linguaggio (visto che nella mia lunga carriera ne ho imparati a decine).

Idem. La differenza è che io non faccio di alcun linguaggio la mia bandiera, io rimango pacato e obiettivo... non mi mischio con la partigianeria.


Tu rimani pure ancorato alle tue argomentazioni preconcette, ad hominem, appunto.
Tra noi due quello che ha argomentazioni preconcette e lo dimostra anche attraverso la propria firma, sei solo tu ;)

cdimauro
07-05-2009, 12:15
Il fatto che dovrei risponderti ripetendo cose che ho scritto, è indice che tu non abbia letto bene.
Sono stato più preciso nei miei precedenti messaggi.
La faziosità e la parzialità di quello che affermi è in piena sintonia con lo spessore intellettuale della tua firma: un monaco vestito da monaco.
Continui con le tue argomentazioni ad hominem. D'altra parte se non hai altro da dire...
Idem. La differenza è che io non faccio di alcun linguaggio la mia bandiera, io rimango pacato e obiettivo... non mi mischio con la partigianeria.
I fatti che una persona esprime devono essere valutati per quelli che sono. Non per il fatto che uno indossa una kefia o un turbante.
Tra noi due quello che ha argomentazioni preconcette e lo dimostra anche attraverso la propria firma, sei solo tu ;)
ANCHE? Io aspetto ancora che tu prenda una mia qualunque frase sull'argomento in questione e li dimostri realmente questi "preconcetti".

Finora ti sei soltanto limitato a giudicare dall'abito. Perché a quanto pare non ti rimane altro. :read:

ekerazha
07-05-2009, 12:17
Bene, adesso fammi vedere dove sta scritto che un long debba occupare necessiamente più memoria di un intero.

Anzi, facciamo una cosa: prendimi lo standard e dimmi in quale punto preciso sta scritto che un int occupa esattamente x byte, mentre un long esattamente y byte, con x < y ovviamente.

Lo dici tu che bisogna conscere queste informazioni, no?


Poi chiediti perchè non ritengo costruttivo discutere con te, davvero dovrei perdere tempo con chi non conosce nemmeno uno straccio di standard come l'ANSI C? http://flash-gordon.me.uk/ansi.c.txt

:rolleyes:

pierosa
07-05-2009, 12:19
@ekerazha
Secondo me stai cercando di mischiare troppe cose assieme. In un corso di introduzione alla programmazione non puoi pretendere che si impari la gestione della memoria, l'architettura, l'ottimizzazione ecc... io penso che un corso del genere debba essere incentrato in concetti come variabili (ma non me ne frega ancora niente di dove si memorizzano e di quanto spazio occupano), cicli costrutti decisionali, funzioni.
Per tutto quello che c'è a più basso livello ci sono altri corsi. Per esmpio io ho fatto il corso di programmazione in C, ma ho capito veramente cosa erano e come si usavano i puntatori quando ho fatto il corso di Archittettura degli elaboratori, la programmazione di sistema nel corso di sistemi operativi e così via.

cdimauro
07-05-2009, 12:22
Poi chiediti perchè non ritengo costruttivo discutere con te, davvero dovrei perdere tempo con chi non conosce nemmeno uno straccio di standard come l'ANSI C? http://flash-gordon.me.uk/ansi.c.txt

:rolleyes:
Lo conosco benissimo. E ribadisco le domande di prima: quanto occupa IN BYTE un int? E un long? Fammi vedere dove sta scritto nello standard, dai.

Puoi anche riportare l'intero paragrafo in questione, e mi sottolinei ciò che ho chiesto.

Grazie.

ekerazha
07-05-2009, 12:23
@ekerazha
Secondo me stai cercando di mischiare troppe cose assieme. In un corso di introduzione alla programmazione non puoi pretendere che si impari la gestione della memoria, l'architettura, l'ottimizzazione ecc... io penso che un corso del genere debba essere incentrato in concetti come variabili (ma non me ne frega ancora niente di dove si memorizzano e di quanto spazio occupano), cicli costrutti decisionali, funzioni.
Per tutto quello che c'è a più basso livello ci sono altri corsi. Per esmpio io ho fatto il corso di programmazione in C, ma ho capito veramente cosa erano e come si usavano i puntatori quando ho fatto il corso di Archittettura degli elaboratori, la programmazione di sistema nel corso di sistemi operativi e così via.
Quindi tu pensi che tutta la gente sia stupida. Io ho imparato Pascal alle medie (sui 13 anni) ed ero perfettamente consapevole del fatto che un "integer" occupasse più memoria di un "longint"... e mi regolavo di conseguenza.

La gente brama una bistecca e tu le vuoi dare gli omogeneizzati.

ekerazha
07-05-2009, 12:23
Lo conosco benissimo. E ribadisco le domande di prima: quanto occupa IN BYTE un int? E un long? Fammi vedere dove sta scritto nello standard, dai.

Puoi anche riportare l'intero paragrafo in questione, e mi sottolinei ciò che ho chiesto.

Grazie.

Aloha


* minimum value for an object of type int
INT_MIN -32767

* maximum value for an object of type int
INT_MAX +32767

* maximum value for an object of type unsigned int
UINT_MAX 65535

* minimum value for an object of type long int
LONG_MIN -2147483647

* maximum value for an object of type long int
LONG_MAX +2147483647

* maximum value for an object of type unsigned long int
ULONG_MAX 4294967295



Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.

pierosa
07-05-2009, 12:30
Quindi tu pensi che tutta la gente sia stupida. Io ho imparato Pascal alle medie (sui 13 anni) ed ero perfettamente consapevole del fatto che un "integer" occupasse più memoria di un "longint"... e mi regolavo di conseguenza.

La gente brama una bistecca e tu le vuoi dare gli omogeneizzati.

Non capisci.
Quello che intendevo dire è semplicemente che fare C in un corso introduttivo non implica imparare tutte quelle cose di basso livello che di cui tu parli.

ekerazha
07-05-2009, 12:34
Non capisci.
Quello che intendevo dire è semplicemente che fare C in un corso introduttivo non implica imparare tutte quelle cose di basso livello che di cui tu parli.

Sì, uno può anche scrivere codice C utilizzando la tipizzazione a caso... dichiarando un long per memorizzare valori da 1 a 10... qui si differenzia chi le cose le ha capite da chi non le ha capite.

Ovviamente il discorso che ho fatto sui JMP va troppo oltre (era un esempio generale), ma avere almeno uno straccio di consapevolezza della memoria centrale, ritengo sia didatticamente cosa buona e giusta.

pierosa
07-05-2009, 12:37
avere almeno uno straccio di consapevolezza della memoria centrale, ritengo sia didatticamente cosa buona e giusta.

si sono d'accordo, ma secondo me questo non fa parte di un corso introduttivo.

ekerazha
07-05-2009, 12:39
si sono d'accordo, ma secondo me questo non fa parte di un corso introduttivo.

Secondo me sì :) Dovrebbe essere l'ABC

cdimauro
07-05-2009, 12:44
Aloha
Tu avevi scritto questo:
La gente impara ben poco del "cos'è una variabile" se non sa nemmeno quanto spazio occuperà in memoria... l'ho già detto, si rischia di allevare una generazione di sviluppatori superficiali, con le conseguenze già illustrate. La tipizzazione è, nella sostanza, comune a quasi tutti i linguaggi con typing statico (intero a 64 bit, intero a 32 bit, byte ecc.), non ci vedo queste enormi differenze.

Successivamente:
Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.
Al che ho risposto con questo:
Bene, adesso fammi vedere dove sta scritto che un long debba occupare necessiamente più memoria di un intero.

Anzi, facciamo una cosa: prendimi lo standard e dimmi in quale punto preciso sta scritto che un int occupa esattamente x byte, mentre un long esattamente y byte, con x < y ovviamente.

Lo dici tu che bisogna conscere queste informazioni, no?

Già, e io quando scrivo codice C ovviamente devo tenere conto di tutte le architetture di questo mondo, con le loro caratteristiche peculiari in tema di salti condizionati, politiche di branch prediction, ecc. ecc.

D'altra parte lo dici tu che bisogna conoscere i dettagli di basso livello per capire come vanno le cose, no?

Non invidio assolutamente un programmatore C che, oltre a programmare, deve anche avere il dono dell'onniscienza. :asd:
Mentre tu hai risposto con un estratto dello standard in cui NULLA si dice sullo SPAZIO occupato dai tipi in questione.

Spazio che hai tirato in ballo TU, non io, perché hai affermato che un programmatore dovrebbe sapere quanto occupa un'applicazione che ha scritto.

La cosa interessante è notare che soltando dopo hai aggiunto che bisognerebbe avere l'idea. Beh, l'idea da sola non basta, visto che lo standard non dice proprio nulla sullo spazio occupato da un int o da un long.

Non solo: afferma una cosa precisa. Che un int dovrebbe avere un preciso range:
* minimum value for an object of type int
INT_MIN -32767

* maximum value for an object of type int
INT_MAX +32767
Allora la domanda sorge spontanea: cosa succede se faccio questo:
int i = 32768;
e cosa succede se faccio questo:
int i = 32767;
i++;
?

In un mondo di assolute certezze e con uno standard alla mano, come quello in cui sembri vivere tu, non penso che avrai difficoltà a rispondere a tutte le questioni che ho sollevato (in particolare ricordati di quelle relative allo SPAZIO). :read:

Tommo
07-05-2009, 12:46
In finale fanno bella figura i miei prof di Informatica 1, che a quanto pare fanno l'impossibile per voi :asd:

Cioè, parlando delle variabili ad alto livello in Java, hanno spiegato la distribuzione in memoria, i limiti massimi di ciascuna in relazione ai bit che usa, e in pratica ci hanno spiegato i puntatori insistendo evidentemente sul concetto di Reference ed allocazione sull'heap.

In effetti non capisco perchè vi scanniate, le cose che state dicendo si possono studiare tranquillamente entrambe, e sono di una facilità unica :asd:

Tipo: "all'asilo si deve insegnare il corsivo O lo stampatello?" :rolleyes:

Inoltre: tutti a dire quali nozioni non servono... mi sembra una visione davvero triste di quello che facciamo, come ogni persona che fa della scienza e della tecnologia il suo lavoro si dovrebbe sapere tutto di tutto, quantomeno a spanne... non solo la propria stretta specializzazione, quantomeno per interesse personale!

cdimauro
07-05-2009, 12:48
Sì, uno può anche scrivere codice C utilizzando la tipizzazione a caso... dichiarando un long per memorizzare valori da 1 a 10... qui si differenzia chi le cose le ha capite da chi non le ha capite.
Quindi, a tuo dire e standard alla mano, se devo memorizzare un valore a 16 bit userò sempre un int. E sarà sicuro che avrò utilizzato uno spazio adeguato per la variabile, giusto?
Ovviamente il discorso che ho fatto sui JMP va troppo oltre (era un esempio generale), ma avere almeno uno straccio di consapevolezza della memoria centrale, ritengo sia didatticamente cosa buona e giusta.
Certo, perché giustamente se programmo in C avrò piena coscienza se sotto l'architettura è segmentata, paginata, una combinazione delle due, oppure lineare: son tutte cose ben note al tipico programmatore C.

Com'è anche noto che se esegue una malloc di un char, occuperà poco spazio...

ekerazha
07-05-2009, 12:52
Tu avevi scritto questo:

Successivamente:

Al che ho risposto con questo:

Mentre tu hai risposto con un estratto dello standard in cui NULLA si dice sullo SPAZIO occupato dai tipi in questione.

Spazio che hai tirato in ballo TU, non io, perché hai affermato che un programmatore dovrebbe sapere quanto occupa un'applicazione che ha scritto.

La cosa interessante è notare che soltando dopo hai aggiunto che bisognerebbe avere l'idea. Beh, l'idea da sola non basta, visto che lo standard non dice proprio nulla sullo spazio occupato da un int o da un long.

Non solo: afferma una cosa precisa. Che un int dovrebbe avere un preciso range:

Allora la domanda sorge spontanea: cosa succede se faccio questo:
int i = 32768;
e cosa succede se faccio questo:
int i = 32767;
i++;
?

In un mondo di assolute certezze e con uno standard alla mano, come quello in cui sembri vivere tu, non penso che avrai difficoltà a rispondere a tutte le questioni che ho sollevato (in particolare ricordati di quelle relative allo SPAZIO). :read:

Questa è l'ennesima dimostrazione che non leggi bene quello che viene scritto.

Io ho detto precisamente

Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.


Perchè come giustamente ha detto VICIUS, la dimensione effettiva può dipendere dall'architettura.

Quindi è inutile che mi tiri in ballo l'occupazione effettiva in byte quando ho già detto che l'importante è l'avere almeno un'idea dimensionale relativa. Se poi qualcuno conosce la dimensione effettiva su tutte le architettura esistenti... ancora più bravo :)

Te l'ho già detto... non ho intenzione di intavolare con te un duello rusticano, nonostante tu faccia di tutto per farlo attraverso la non corretta lettura di quello che viene scritto. Le sfide dialettiche mi piacciono solo quando l'interlocutore è sul mio livello... e tu hai già dimostrato di essere molte spanne sotto. Sorry.

ekerazha
07-05-2009, 12:53
Ah riguardo a quel codice... solitamente in C si ritorna al valore minimo dato dal tipo, quindi aggiungendo 1 (i++) torni a -32767

pierosa
07-05-2009, 12:55
In finale fanno bella figura i miei prof di Informatica 1, che a quanto pare fanno l'impossibile per voi :asd:

Cioè, parlando delle variabili ad alto livello in Java, hanno spiegato la distribuzione in memoria, i limiti massimi di ciascuna in relazione ai bit che usa, e in pratica ci hanno spiegato i puntatori insistendo evidentemente sul concetto di Reference ed allocazione sull'heap.

In effetti non capisco perchè vi scanniate, le cose che state dicendo si possono studiare tranquillamente entrambe, e sono di una facilità unica :asd:

Tipo: "all'asilo si deve insegnare il corsivo O lo stampatello?" :rolleyes:

Inoltre: tutti a dire quali nozioni non servono... mi sembra una visione davvero triste di quello che facciamo, come ogni persona che fa della scienza e della tecnologia il suo lavoro si dovrebbe sapere tutto di tutto, quantomeno a spanne... non solo la propria stretta specializzazione, quantomeno per interesse personale!

Si ti possono pure parlare dell'allocazione sullo heap, ma poi cosa è di preciso non lo impari comunque, alla fine ti rimane un concetto abbastanza astratto... fino a quando non lo studi in un altro corso

pierosa
07-05-2009, 12:58
Le sfide dialettiche mi piacciono solo quando l'interlocutore è sul mio livello... e tu hai già dimostrato di essere molte spanne sotto. Sorry.

Sei presuntuoso e molto irritante oltre che ottuso.
Ciao

cdimauro
07-05-2009, 12:58
Questa è l'ennesima dimostrazione che non leggi bene quello che viene scritto.

Io ho detto precisamente

Perchè come giustamente ha detto VICIUS, la dimensione effettiva può dipendere dall'architettura.
Questo l'hai detto soltanto DOPO, nel tuo SECONDO messaggio.
Quindi è inutile che mi tiri in ballo l'occupazione effettiva in byte quando ho già detto che l'importante è l'avere almeno un'idea dimensionale relativa.
Ma non hai nemmeno quella, standard alla mano.

Ripeto: dimmi dov'è dallo standard che si possa desumere anche soltanto "un'idea dimensionale relativa", come dici tu.

Anzi: dov'è che si parla di dimensione nello standard?
Se poi qualcuno conosce la dimensione effettiva su tutte le architettura esistenti... ancora più bravo :)
Per caso mi stai dicendo che programmare in C da solo non basta per capire quanto spazio è occupato, anche avendo soltanto "un'idea", come dici tu?
Te l'ho già detto... non ho intenzione di intavolare con te un duello rusticano, nonostante tu faccia di tutto per farlo attraverso la non corretta lettura di quello che viene scritto. Le sfide dialettiche mi piacciono solo quando l'interlocutore è sul mio livello... e tu hai già dimostrato di essere molte spanne sotto. Sorry.
Certo, certo. Io ho posto delle domande precise sulla base delle TUE affermazioni, che ovviamente adesso ti guardi bene dal sostenere, ARGOMENTANDO.

Ma ci sono abituato. ;)

cdimauro
07-05-2009, 13:00
Sei presuntuoso e molto irritante oltre che ottuso.
Ciao
Ha ragione lui. Peccato che non porti uno straccio di dimostrazione a sostegno delle sue "certezze".

Certezze che non arrivano nemmeno con lo standard che ha tirato in ballo lui.

Poi sono gli altri che "non capiscono", "non leggono bene", "sono spanne sotto".

ekerazha
07-05-2009, 13:04
Sei presuntuoso e molto irritante oltre che ottuso.
Ciao

Ti capisco... non so se segui il calcio, è come quando Ibrahimovic irride dall'alto i propri avversari: non lo gradiscono mai.

VICIUS
07-05-2009, 13:07
Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.
Sinceramente non riesco a farmi venire in mente neanche un caso in cui possa servire sapere queste cose ad uno povero studente che sta cominciando.

E' una speculazione tanto quanto il ritenere il contrario ;)
Infatti mi sono ben guardato dall'affermare il contrario. :)

Che c'entra lo pseudo-codice? Serve proprio sapere come si comporta una CPU (JMP in memoria ecc.) per fare consapevolmente dei ragionamenti di questo tipo. Anche perchè potrei avere una architettura nella quale i salti vengono gestiti diversamente a livello di microcodice.
L'ottimizzazione a cui stai facendo riferimento viene chiamata lazy evaluation. Se il linguaggio che usi ha gli operatori di confronto cortocircuitati si può sempre applicare. Come il processore gestisce le jmp ha livello di microcodice non centra.

ekerazha
07-05-2009, 13:08
Questo l'hai detto soltanto DOPO, nel tuo SECONDO messaggio.

Che era comunque PRIMA del tuo intervento, quindi il tuo intervento è stato a sproposito.


Ma non hai nemmeno quella, standard alla mano.

Ripeto: dimmi dov'è dallo standard che si possa desumere anche soltanto "un'idea dimensionale relativa", come dici tu.

E' molto intuitivo... un intervallo più grande occupa più bit a livello binario. Non conosci nemmeno il sistema binario, ora stiamo sfiorando il ridicolo... direi che si può stendere il pietoso velo...

ekerazha
07-05-2009, 13:13
Sinceramente non riesco a farmi venire in mente neanche un caso in cui possa servire sapere queste cose ad uno povero studente che sta cominciando.

Per poter tenere conto dell'occupazione (almeno relativa) in memoria. Secondo te non è importante... secondo me è fondamentale, per i motivi già precedentemente illustrati.


L'ottimizzazione a cui stai facendo riferimento viene chiamata lazy evaluation. Se il linguaggio che usi ha gli operatori di confronto cortocircuitati si può sempre applicare. Come il processore gestisce le jmp ha livello di microcodice non centra.
C'entra eccome... potrei avere una architettura che al JMP non esegue salti in memoria e che li esegue quando non c'è un JMP. Paradossale ma possibile.

cdimauro
07-05-2009, 13:14
Che era comunque PRIMA del tuo intervento, quindi il tuo intervento è stato a sproposito.
Il mio intervento ha ripreso sia quello che hai scritto prima, che quello che hai scritto dopo. Giusto per non lasciarti nessuno spazio d'azione.
E' molto intuitivo... un intervallo più grande occupa più bit a livello binario.
Quindi mi stai dicendo che un int occupa SEMPRE meno spazio di un long? Visto che l'intervallo, è più piccolo e sono richiesti meno bit, come dici tu...
Non conosci nemmeno il sistema binario, ora stiamo sfiorando il ridicolo... direi che si può stendere il pietoso velo...
Su quello non c'è dubbio: è pietoso vedere come stai cercando di sfuggire dopo esserti infilato nei guai. :asd:

Continua pure a rispondere soltanto a quello che ti fa più comodo, non ti preoccupare: tanto la figura del cioccolataio che non conosce non soltanto Python, ma persino il C di cui parla, lo stanno vedendo tutti chi la sta facendo. :rotfl:

cdimauro
07-05-2009, 13:16
Per poter tenere conto dell'occupazione (almeno relativa) in memoria.
Certo. Prima il problema dello spazio era importante. Adesso è diventato "relativo"... :asd:
C'entra eccome... potrei avere una architettura che al JMP non esegue salti in memoria e che li esegue quando non c'è un JMP. Paradossale ma possibile.
Un esempio di una siffatta architettura si potrebbe avere? :fagiano:

ekerazha
07-05-2009, 13:23
Il mio intervento ha ripreso sia quello che hai scritto prima, che quello che hai scritto dopo. Giusto per non lasciarti nessuno spazio d'azione.

Invece hai quotato proprio la mia precisazione successiva: http://www.hwupgrade.it/forum/showpost.php?p=27372178&postcount=161

Hai toppato belloccio...


Quindi mi stai dicendo che un int occupa SEMPRE meno spazio di un long? Visto che l'intervallo, è più piccolo e sono richiesti meno bit, come dici tu...

In generale sì... e sicuramente non occupa meno spazio.


Su quello non c'è dubbio: è pietoso vedere come stai cercando di sfuggire dopo esserti infilato nei guai. :asd:

Continua pure a rispondere soltanto a quello che ti fa più comodo, non ti preoccupare: tanto la figura del cioccolataio che non conosce non soltanto Python, ma persino il C di cui parla, lo stanno vedendo tutti chi la sta facendo. :rotfl:
Risparmiami i tuoi patetici esercizi di dialettica... nell'oceano delle sciocchezze che hai scritto ho risposto alle poche salvabili sbugiardandoti punto su punto e costringendoti a funambolesche manovre di arrampicate sugli specchi. Hai dimostrato di non conoscenere l'ANSI C e hai dimostrato di non conoscere nemmeno il sistema a base binaria... su un punto sono d'accordo con te... tutti possono vedere queste cose ;)

VICIUS
07-05-2009, 13:24
Per poter tenere conto dell'occupazione (almeno relativa) in memoria. Secondo te non è importante... secondo me è fondamentale, per i motivi già precedentemente illustrati.
Certo per un professionista che sta cercando di ottimizzare il proprio codice è una cosa assolutamente necessaria. Ma ad uno che non ha una mezza idea di cosa sia una variabile a cosa gli serve?


C'entra eccome... potrei avere una architettura che al JMP non esegue salti in memoria e che li esegue quando non c'è un JMP. Paradossale ma possibile.
:mbe: A cosa servirebbe una jmp che non permette di saltare? Il processore che salta da solo quando non c'è una istruzione di salto poi mi sembra ridicolo.

cdimauro
07-05-2009, 13:28
Invece hai quotato proprio la mia precisazione successiva: http://www.hwupgrade.it/forum/showpost.php?p=27372178&postcount=161

Hai toppato belloccio...
Cosa non ti è chiaro di questo:

dove sta scritto che un long debba occupare necessiamente più memoria di un intero

?

Ovviamente in risposta a una tua precisa affermazione:

un long occuperà più memoria di un int
In generale sì... e sicuramente non occupa meno spazio.
In generale? Adesso andiamo sul condizionale. E le certezze di prima dove stanno?

Un long occupa SEMPRE più spazio di un int? Sì o no?
Risparmiami i tuoi patetici esercizi di dialettica... nell'oceano delle sciocchezze che hai scritto ho risposto alle poche salvabili sbugiardandoti punto su punto e costringendoti a funambolesche manovre di arrampicate sugli specchi. Hai dimostrato di non conoscenere l'ANSI C e hai dimostrato di non conoscere nemmeno il sistema a base binaria... su un punto sono d'accordo con te... tutti possono vedere queste cose ;)
Certo. E infatti sono messe lì, nero su bianco.
:mbe: A cosa servirebbe una jmp che non permette di saltare? Il processore che salta da solo quando non c'è una istruzione di salto poi mi sembra ridicolo.
Aspettiamo che riporti almeno un esempio di una siffatta CPU. Io sono qui che fremo all'idea... :asd:

ekerazha
07-05-2009, 13:32
Certo per un professionista che sta cercando di ottimizzare il proprio codice è una cosa assolutamente necessaria. Ma ad uno che non ha una mezza idea di cosa sia una variabile a cosa gli serve?

E' un concetto che deve essere inculcato subito per non allevare cattivi sviluppatori. L'educazione si impone fin da piccoli. Non dico alla prima lezione... ma è comunque didattico in una fase iniziale.


:mbe: A cosa servirebbe una jmp che non permette di saltare? Il processore che salta da solo quando non c'è una istruzione di salto poi mi sembra ridicolo.
Ho detto che è paradossale ma è possibile, è stato un esempio per evidenziare la correttezza di quanto avevo detto (tu avevi detto che non c'entrava nulla).

:)

banryu79
07-05-2009, 13:33
Scusate,
non vorrei disturbare, perchè tutto sommato io mi sto anche facendo quattro risate a seguire "la scazzottata" :D ma mi immagino il povero utente che si rivolge ad un Forum come questo speranzoso di potersi avvalere delle circostanziate opinioni di chi, spera lui, ha già passato le esperienze che si accinge ad affrontare per fare un po' di luce sulla sua sitazione e forse quindi si "diverte" un po' meno a vedere la situazione che si è venuta a creare nel topic.

Vista la fiumana di parole prodotte non si potrebbe usarne una parte per metterlo sull'avviso?
Cioè sembra che a questa persona venga ventilata un'assunzione in campo informatico con ruolo di programmazione e gli viene detto che servirà sapere SQL e OOP, ma non gli viene detto che linguaggio/i e che strumento/i userà li da loro e che nel frattempo è libero di autoformarsi...

Va tutto bene?

ekerazha
07-05-2009, 13:36
Cosa non ti è chiaro di questo:

dove sta scritto che un long debba occupare necessiamente più memoria di un intero

?

Ovviamente in risposta a una tua precisa affermazione:

un long occuperà più memoria di un int


A me è tutto chiaro, fin troppo... mentre a te deve essere chiaro ben poco se quoti una affermazione in cui si parla di dimensione relativa

Al contrario... è decisamente importante capire che un long occuperà più memoria di un int, se non la dimensione esatta è importante avere almeno un'idea dimensionale relativa.


e chiedi la dimensione effettiva in byte :nono:


In generale? Adesso andiamo sul condizionale. E le certezze di prima dove stanno?

Un long occupa SEMPRE più spazio di un int? Sì o no?

Nelle architetture che conosco sì... tu conosci architetture in cui questo non si verifica? E magari in cui si ha l'opposto?

La sostanza è che un int sarà più "risparmioso" di memoria rispetto ad un long, ci sono alcuni casi particolari in cui le loro dimensioni a volte possono coincidere, ma quando questo non accade il long occupa più spazio... quindi considerando l'int più "risparmioso" non si sbaglia.


Certo. E infatti sono messe lì, nero su bianco.

E' una grande fortuna... non per te forse...

VICIUS
07-05-2009, 13:47
E' un concetto che deve essere inculcato subito per non allevare cattivi sviluppatori. L'educazione si impone fin da piccoli. Non dico alla prima lezione... ma è comunque didattico in una fase iniziale.
Qui abbiamo sul soggettivo. Nulla di quello che posso dire potrebbe convincerti quindi lascio perdere.

Ho detto che è paradossale ma è possibile, è stato un esempio per evidenziare la correttezza di quanto avevo detto (tu avevi detto che non c'entrava nulla).
La lazy evaluation senza una istruzione di salto non si fa. Conoscere che l'architettura su cui ti trovi ha una jmp che non salta ti dice soltanto che non puoi usarla. Un processore che salta quando gli pare, anche senza jmp, dubito che possa funzionare. Se esistesse non penso che lo chiamerei processore e di certo non scriverei programmi per un sistema simile.

ekerazha
07-05-2009, 13:52
Qui abbiamo sul soggettivo. Nulla di quello che posso dire potrebbe convincerti quindi lascio perdere.

Direi che la cosa sia reciproca.


La lazy evaluation senza una istruzione di salto non si fa. Conoscere che l'architettura su cui ti trovi ha una jmp che non salta ti dice soltanto che non puoi usarla. Un processore che salta quando gli pare, anche senza jmp, dubito che possa funzionare. Se esistesse non penso che lo chiamerei processore e di certo non scriverei programmi per un sistema simile.
Puoi usarla eccome... basta ragionare al contrario... nel caso specifico cercherò di ordinare le condizioni a partire dalla più "rara" in modo che si verifichino spesso JMP e quindi non si verifichino salti in memoria. Sarebbe comunque un processore anche se dal funzionamento paradossale. Come già detto mi servo di questo esempio, paradossale ma fattibile, per avvallare quanto avevo detto.

mjordan
07-05-2009, 13:53
Io al Politecnico ho fatto C, Assembly e Java ;) Certamente non Python, che per il motivo già spiegato non è didattico. Che poi possa essere insegnato lo stesso è un altro conto, ma non è didattico.

Che tu non l'abbia fatto all'università non significa nulla.

ekerazha
07-05-2009, 13:55
Che tu non l'abbia fatto all'università non significa nulla.

Dovresti dirlo a chi per sostenere la mia antitesi ha tirato fuori il discorso "al MIT lo fanno".

||ElChE||88
07-05-2009, 14:15
Quanto al C, sarebbe utopistico eliminarlo e decisamente non auspicabile. Ovviamente non significa che al MIT non si studi il C, non capisco cosa ti possa minimamente far pensare ciò.
Scusa, forse non mi sono spiegato bene, intendevo eliminare il C dai corsi di introduzione alla programmazione (il corso linkato sopra è Introduction to Computer Science and Programming).
Poi in altri corsi non c'è problema se si usa il C (qualcuno ha detto Sistemi Operativi?).
Al MIT prima di python, facevano cominciare con Scheme (vedi il secondo link nella mia firma attuale, era il libro di testo del corso).
Grande Scheme! Purtroppo l'ho studiato solo per un anno, ma prima o poi devo decidermi e approfondire.

RaouL_BennetH
07-05-2009, 14:28
[iscritto] :)

Per l'autore del 3d:

Per C# : visual studio 2008 express, oppure (ma solo se per qualche strana ragione tu non possa utilizzare visual sudio express) sharp develop. Questo se sei in ambiente microsoft.

Per altri ambienti, c'è monodevelop. Generalmente è sempre un pò più indietro rispetto al prodotto nativo microsoft, ma se si considera che è un porting open source direi che come compromesso non c'è nulla da dire.


Poi... per la diatriba in corso .... :D

La mia domanda da newbie è:

un int occupa sempre meno spazio di un long?

Tra discussioni varie et similia mi aspetto una risposta da informatici :

Si / No, True/False, 0/1

:)

RaouL.

VICIUS
07-05-2009, 14:39
Puoi usarla eccome... basta ragionare al contrario... nel caso specifico cercherò di ordinare le condizioni a partire dalla più "rara"
Questa è la lazy evaluation normale.
in modo che si verifichino spesso JMP e quindi non si verifichino salti in memoria.
Qui proprio non ti seguo. Come fai a dire che non ci sarebbero salti in memoria? Come dovrebbe funzionare questa istruzione jmp? Perché le prossime istruzioni a cui saltare di sicuro staranno in memoria.


Sarebbe comunque un processore anche se dal funzionamento paradossale. Come già detto mi servo di questo esempio, paradossale ma fattibile, per avvallare quanto avevo detto.
Pradossale è un coltello senza lama. Un processore simile è pericoloso per il semplice motivo che non puoi controllarlo. Potrebbe darti risultati corretti il 99% delle volte ma sbagliare quel 1% in maniera completamente imprevedibile. Nessuna società userebbe mai una cpu simile.

ekerazha
07-05-2009, 14:44
un int occupa sempre meno spazio di un long?

Tra discussioni varie et similia mi aspetto una risposta da informatici :

Si / No, True/False, 0/1

:)

RaouL.

Per essere rigorosi, bisogna fare una premessa... dipende dall'architettura, o meglio... dipende da come si comporta il compilatore sulla precisa architettura.

Come già detto, ci sono stati casi particolari in cui la lunghezza di int e long coincidevano, anche se comunemente il long occupa più spazio (non a caso sta per long integer).

La sostanza è che un int occupa meno memoria di un long o nel peggiore dei casi esistenti occupano la stessa dimensione.

Come formulazione rigorosa potremmo dire che "un int occupa uno spazio minore o uguale ad un long".

ekerazha
07-05-2009, 14:47
Questa è la lazy evaluation normale.

Qui proprio non ti seguo. Come fai a dire che non ci sarebbero salti in memoria? Come dovrebbe funzionare questa istruzione jmp? Perché le prossime istruzioni a cui saltare di sicuro staranno in memoria.

Pradossale è un coltello senza lama. Un processore simile è pericoloso per il semplice motivo che non puoi controllarlo. Potrebbe darti risultati corretti il 99% delle volte ma sbagliare quel 1% in maniera completamente imprevedibile. Nessuna società userebbe mai una cpu simile.
Non c'entra... non sto dicendo che "salta ad istruzioni a caso" sto dicendo che esegue salti in memoria (seguendo un criterio ben definito).

mjordan
07-05-2009, 14:51
71104 capitolo secondo... :asd:
Ma non è che è un clone? :asd:

ekerazha
07-05-2009, 14:53
71104 capitolo secondo... :asd:
Ma non è che è un clone? :asd:

No... quello è fatto della tua stessa pasta, nulla a che fare con la mia :)

Devo ricordarmi di non entrare più in queste discussioni con chi non ha frequentato corsi di ingegneria informatica e quindi non può essere al mio livello... si finisce sempre in thread inconcludenti e senza fine.

mjordan
07-05-2009, 14:59
No... quello è fatto della tua stessa pasta, nulla a che fare con la mia :)

Devo ricordarmi di non entrare più in queste discussioni con chi non ha frequentato corsi di ingegneria informatica e quindi non può essere al mio livello... si finisce sempre in thread inconcludenti e senza fine.

Ah bhè allora... :asd:

cdimauro
07-05-2009, 15:01
A me è tutto chiaro, fin troppo... mentre a te deve essere chiaro ben poco se quoti una affermazione in cui si parla di dimensione relativa

e chiedi la dimensione effettiva in byte :nono:
Non sono io che ha affermato che un long occupa più spazio di un int. Quindi SEMPRE.

Quanto alla dimensione relativa, relativa a cosa? Serve qualcosa per effettuare il confronto, non trovi? Quindi dimmi pure: in base a cosa puoi ottenere una dimensione "relativa"?
Nelle architetture che conosco sì... tu conosci architetture in cui questo non si verifica?
Sì, sicuramente con l'x86 sotto Windows con compilatori MS, visto che c'ho lavorato fino a qualche giorno fa.

In questo caso int e long hanno ESATTAMENTE la stessa dimensione e lo stesso range di numeri rappresentabili.
E magari in cui si ha l'opposto?
Questo non può succedere, visto che i tipi interi in C hanno una precisa gerarchia.

Domanda inutile, quindi.
La sostanza è che un int sarà più "risparmioso" di memoria rispetto ad un long, ci sono alcuni casi particolari in cui le loro dimensioni a volte possono coincidere, ma quando questo non accade il long occupa più spazio... quindi considerando l'int più "risparmioso" non si sbaglia.
Che è ben diverso da ciò che avevi affermato prima.

Leggendo anche gli altri messaggi vedo che alla fine ti sei ridimensionato, visto che hai compreso che il linguaggio C da solo non dà NESSUNA certezza in termini di spazio et similia, in quanto dipende sempre dall'architettura e dal compilatore.

Quindi è sbagliato affermare che il C (da solo, quindi) ti permette di conoscere meglio "ciò che c'è sotto". Perché il sotto può cambiare, e molto.
E' una grande fortuna... non per te forse...
Lascia che siano gli altri a giudicare.

mjordan
07-05-2009, 15:05
Cesare, ma lui frequenta corsi di Ingegneria Informatica, sta uno step forward al nostro... :asd:

cdimauro
07-05-2009, 15:11
Me ne sono accorto: è troppo avanti. Più avanti anche degli standard. :asd:

marco.r
07-05-2009, 15:12
Inoltre: tutti a dire quali nozioni non servono... mi sembra una visione davvero triste di quello che facciamo, come ogni persona che fa della scienza e della tecnologia il suo lavoro si dovrebbe sapere tutto di tutto, quantomeno a spanne... non solo la propria stretta specializzazione, quantomeno per interesse personale!

E' impossibile imparare tutto, per cui si rende necessario fare una cernita, o perlomeno dare priorita' ad alcune cose rispetto altre.

ekerazha
07-05-2009, 15:25
Non sono io che ha affermato che un long occupa più spazio di un int. Quindi SEMPRE.

Questo è un avverbio di tempo che io non ho mai usato. Guardati... sei arrivato al punto in cui per "avere ragione" decidi tu cosa hanno detto gli altri :asd:


Quanto alla dimensione relativa, relativa a cosa? Serve qualcosa per effettuare il confronto, non trovi? Quindi dimmi pure: in base a cosa puoi ottenere una dimensione "relativa"?

Ottengo che long >= int cosa non ti è chiaro di questo?


Sì, sicuramente con l'x86 sotto Windows con compilatori MS, visto che c'ho lavorato fino a qualche giorno fa.

In questo caso int e long hanno ESATTAMENTE la stessa dimensione e lo stesso range di numeri rappresentabili.

Io ho usato gcc anche su Windows (mingw) e il sizeof(long) è maggiore di sizeof(int).

Ti stai arrampicando :mc: sui cavilli perchè ti rimangono solo quelli, mentre non hai alcuna argomentazione sostanziale. La sostanza è che un int occupa meno memoria di un long e nella peggiore delle ipotesi occupa la stessa, un long (LONG INTEGER) occupa più memoria e nella migliore delle ipotesi occupa la stessa. Quindi se vuoi essere "parsimonioso" dal punto di vista dell'allocazione di memoria, userai in linea generale un int piuttosto che un long. Questa è la sostanza. Non saranno i cavilli del tipo "non è vero che è più grande perchè in alcuni casi può essere uguale" :rolleyes: (e non dico maggiore, ma uguale) ad incrementare lo spessore delle tue affermazioni (anche perchè è una precisazione che ho fatto io autonomamente una volta che ci si è voluti addentrare maggiormente nella questione).


Questo non può succedere, visto che i tipi interi in C hanno una precisa gerarchia.

Domanda inutile, quindi.

Era una domanda retorica... inutile tanto quanto la tua alla quale faceva riferimento.


Che è ben diverso da ciò che avevi affermato prima.

Non è diverso, è semplicemente un complemento.


Leggendo anche gli altri messaggi vedo che alla fine ti sei ridimensionato, visto che hai compreso che il linguaggio C da solo non dà NESSUNA certezza in termini di spazio et similia, in quanto dipende sempre dall'architettura e dal compilatore.

Guardati... sei arrivato al punto in cui per "avere ragione" decidi tu cosa hanno detto gli altri :asd:


Quindi è sbagliato affermare che il C (da solo, quindi) ti permette di conoscere meglio "ciò che c'è sotto". Perché il sotto può cambiare, e molto.

Mi permette di conoscere che un int sia più "parsimonioso" di un long, quantomeno in senso relativo, come già detto numerose volte (o in senso assoluto se si conosce l'occupazione in memoria data dal compilatore sulle singole architetture, come già detto).

Sono già cosa dette e ridette, ti basterebbe leggerle correttamente :)


Lascia che siano gli altri a giudicare.
Lapalissiano

ekerazha
07-05-2009, 15:25
Cesare, ma lui frequenta corsi di Ingegneria Informatica, sta uno step forward al nostro... :asd:

Me ne sono accorto: è troppo avanti. Più avanti anche degli standard. :asd:

Si rosica eh? :asd: Che carini che siete a fare comunella... due persone non istruite che solidarizzano a vicenda e si difendono dal cattivone che li sbugiarda ripetutamente.

marco.r
07-05-2009, 15:34
Come formulazione rigorosa potremmo dire che "un int occupa uno spazio minore o uguale ad un long".

Al di la' che stai dicendo una cosa diversa da prima (meglio, perche' ora e' corretta), stai pure implicando l'importanza di conoscere il C e' perche' cosi' impari i tipi ... del C ?
Ci sono altri linguaggi in cui int e long non esistono, e dove magari i tipi bounded li usi solo quando necessario.

Emaborsa
07-05-2009, 15:38
....visto che ci siamo, che mi dite di Oracle?

pierosa
07-05-2009, 15:41
Al di la' che stai dicendo una cosa diversa da prima (meglio, perche' ora e' corretta), stai pure implicando l'importanza di conoscere il C e' perche' cosi' impari i tipi ... del C ?
Ci sono altri linguaggi in cui int e long non esistono, e dove magari i tipi bounded li usi solo quando necessario.

Stesso discorso per i puntatori. In un corso di C impari la sintassi di questo linguaggio per utilizzare i puntatori, ma da qui a dire che dopo un corso di C sai gestire la memoria ce ne passa

ekerazha
07-05-2009, 15:42
Al di la' che stai dicendo una cosa diversa da prima (meglio, perche' ora e' corretta),

Non è diversa... ho complementato dicendo che volendo essere rigorosi, possiamo dire che long >= int oltre che long > int.

Ho solo aggiunto un caso (quello poco sostanziale dato dall' = ).

Troppa gente a cui si indica la luna, si ferma a guardare il dito.


stai pure implicando l'importanza di conoscere il C e' perche' cosi' impari i tipi ... del C ?
Ci sono altri linguaggi in cui int e long non esistono, e dove magari i tipi bounded li usi solo quando necessario.
No, quello del C è solo un esempio specifico... io avevo parlato inizialmente di "typing dinamico" e "typing statico", il resto sono discorsi alla deriva alla quale mi hanno condotto persone poco competenti che hanno voluto intavolare a tutti i costi un duello rusticano, non avendo nulla di meglio da fare durante la giornata.

marco.r
07-05-2009, 15:42
La sostanza è che un int occupa meno memoria di un long e nella peggiore delle ipotesi occupa la stessa, un long (LONG INTEGER) occupa più memoria e nella migliore delle ipotesi occupa la stessa. Quindi se vuoi essere "parsimonioso" dal punto di vista dell'allocazione di memoria, userai in linea generale un int piuttosto che un long. Questa è la sostanza. Non saranno i cavilli del tipo "non è vero che è più grande perchè in alcuni casi può essere uguale" :rolleyes: (e non dico maggiore, ma uguale) ad incrementare lo spessore delle tue affermazioni (anche perchè è una precisazione che ho fatto io autonomamente una volta che ci si è voluti addentrare maggiormente nella questione).

C'e' una differenza sostanziale tra affermare che sizeof(int) < sizeof(long) piuttosto che sizeof(int) <= sizeof(long), soprattutto quando gli "alcuni casi" comprendono il 90% e passa dei pc in circolazione.


Mi permette di conoscere che un int sia più "parsimonioso" di un long, quantomeno in senso relativo, come già detto numerose volte (o in senso assoluto se si conosce l'occupazione in memoria data dal compilatore sulle singole architetture, come già detto).

Quando nel 99% del tuo mercato la cosa non fa assolutamente alcuna differenza.

cdimauro
07-05-2009, 15:43
Questo è un avverbio di tempo che io non ho mai usato. Guardati... sei arrivato al punto in cui per "avere ragione" decidi tu cosa hanno detto gli altri :asd:
Sono le naturali conclusioni di un'affermazione lapidaria. A meno che non hai intenzione di ridefinire anche la logica.
Ottengo che long >= int cosa non ti è chiaro di questo?
Non è chiaro a te, semmai. Qual è la metrica del confronto? E' questo che ti chiedevo. Per fare un confronto, banalmente serve una metrica, e tu ancora non l'hai esplicitata.
Io ho usato gcc anche su Windows (mingw) e il sizeof(long) è maggiore di sizeof(int).
E io ti ho detto come stanno le cose su piattaforme diverse. Mi sembra che mingw e Visual Studio abbiano ben poche a che sparire, o sbaglio?
Ti stai arrampicando :mc: sui cavilli perchè ti rimangono solo quelli, mentre non hai alcuna argomentazione sostanziale. La sostanza è che un int occupa meno memoria di un long
Falso.
e nella peggiore delle ipotesi occupa la stessa,
Questo è in pieno contrasto con quanto hai affermato prima.
un long (LONG INTEGER) occupa più memoria e nella migliore delle ipotesi occupa la stessa.
Ma anche no. Prima hai detto che un long occupa PIU' spazio di un int, e dalle mie parti quest'affermazione NON implica l'uguaglianza.

Ma si vede che dalle tue, di parti, anche la logica è un'opinione. :asd:
Quindi se vuoi essere "parsimonioso" dal punto di vista dell'allocazione di memoria, userai in linea generale un int piuttosto che un long. Questa è la sostanza.
E di quanto? Non avevi detto che bisognerebbe farsi un'idea delle DIMENSIONI? Di quali dimensioni parli? Potresti essere più chiaro?
Non saranno i cavilli del tipo "non è vero che è più grande perchè in alcuni casi può essere uguale" :rolleyes: (e non dico maggiore, ma uguale) ad incrementare lo spessore delle tue affermazioni (anche perchè è una precisazione che ho fatto io autonomamente una volta che ci si è voluti addentrare maggiormente nella questione).
Dovevi farla prima, perché non è un cavillo, ma la realtà. Quella che PRIMA avevi dipinto in un modo, e sulla quale POI, messo alle strette, non hai che potuto metterci una pezza.
Era una domanda retorica... inutile tanto quanto la tua alla quale faceva riferimento.
La mia aveva un preciso scopo, che è stato raggiunto: dimostrare che hai detto una falsità sui long che occupano PIU' spazio degli int.
Non è diverso, è semplicemente un complemento.
No, prima era un assoluto che NON lasciava spazio a nient'altro.

E' inutile che cerchi di rigirare le carte.
Guardati... sei arrivato al punto in cui per "avere ragione" decidi tu cosa hanno detto gli altri :asd:
Mi sembra che questo:

Per essere rigorosi, bisogna fare una premessa... dipende dall'architettura, o meglio... dipende da come si comporta il compilatore sulla precisa architettura.


l'abbia scritto tu...
Mi permette di conoscere che un int sia più "parsimonioso" di un long, quantomeno in senso relativo, come già detto numerose volte (o in senso assoluto se si conosce l'occupazione in memoria data dal compilatore sulle singole architetture, come già detto).
E' un senso molto relativo, visto che non esiste una metrica di confronto per cui puoi affermare che qualcosa ha una dimensione relativamente superiore / inferiore a un'altra...
Sono già cosa dette e ridette, ti basterebbe leggerle correttamente :)
Son cose che specificato BEN DOPO essere stato messo davanti alla realtà, che è ben diverso.
Si rosica eh? :asd: Che carini che siete a fare comunella... due persone non istruite che solidarizzano a vicenda e si difendono dal cattivone che li sbugiarda ripetutamente.
A giudicare dagli utenti che hanno partecipato alla discussione, sei l'UNICO che ha certe "posizioni".

Uno contro tutti. :asd:

cdimauro
07-05-2009, 15:45
....visto che ci siamo, che mi dite di Oracle?
Ti consiglio FireBird (http://www.firebirdsql.org/).

cdimauro
07-05-2009, 15:47
Non è diversa... ho complementato dicendo che volendo essere rigorosi, possiamo dire che long >= int oltre che long > int.

Ho solo aggiunto un caso (quello poco sostanziale dato dall' = ).

Troppa gente a cui si indica la luna, si ferma a guardare il dito.
Su questo t'ha già risposto marco, col quale sono d'accordo.
No, quello del C è solo un esempio specifico... io avevo parlato inizialmente di "typing dinamico" e "typing statico",
Che non c'entra NULLA con la dimensione dei tipi, mi pare.
il resto sono discorsi alla deriva alla quale mi hanno condotto persone poco competenti
:rotfl:

Ma se non conosci nemmeno lo standard del C. :asd:
che hanno voluto intavolare a tutti i costi un duello rusticano, non avendo nulla di meglio da fare durante la giornata.
Cosa c'è di meglio di questo sollazzo? You made my day! :asd:

ekerazha
07-05-2009, 15:49
C'e' una differenza sostanziale tra affermare che sizeof(int) < sizeof(long) piuttosto che sizeof(int) <= sizeof(long), soprattutto quando gli "alcuni casi" comprendono il 90% e passa dei pc in circolazione.


Quando nel 99% del tuo mercato la cosa non fa assolutamente alcuna differenza.

Non è sostanziale (per il semplice motivo che utilizzando int sono comunque in una botte di ferro, non potendo essere dimensionalmente maggiore di long) e le eccezioni non comprendono ne' il 90% ne il 99% del mercato.

Comunque senza fissarsi solo su int e long possiamo far entrare nel calderone anche tutti gli altri type... saranno mica tutti sempre coincidenti? :asd:

marco.r
07-05-2009, 16:02
Non è diversa... ho complementato dicendo che volendo essere rigorosi, possiamo dire che long >= int oltre che long > int.

Son due cose diverse, non e' questione di pignoleria ! :D
La prima affermazione e' corretta, la seconda no, inoltre e' la seconda che implica la prima, non viceversa !




No, quello del C è solo un esempio specifico... io avevo parlato inizialmente di "typing dinamico" e "typing statico", il resto sono discorsi alla deriva alla quale mi hanno condotto persone poco competenti che hanno voluto intavolare a tutti i costi un duello rusticano, non avendo nulla di meglio da fare durante la giornata.
Son due cose che non sono correlate, e quindi l'esempio direi che non calza. Io posso decidere di usare un intero con dimensione specifica piu' piccola piuttosto che piu' grande anche in un linguaggio con tipizzazione dinamica, o magari fare anche meglio che non in C. In alcuni (e.g. pascal, common lisp) posso definire degli intervalli per i valori (e.g. tra 200 e 300) e il compilatore automaticamente usera' il tipo piu' piccolo sufficiente.

ekerazha
07-05-2009, 16:10
Sono le naturali conclusioni di un'affermazione lapidaria. A meno che non hai intenzione di ridefinire anche la logica.

Hai già dimostrato di non conoscere l'ANSI C ed il sistema binario... risparmiaci almeno le tue "naturali conclusioni", non tentare di spingerti dove non hai le capacità di arrivare, tirando in ballo a sproposito cose che non conosci come la "logica", limitati a quello che viene scritto che sarebbe già un buon traguardo :)


Non è chiaro a te, semmai. Qual è la metrica del confronto? E' questo che ti chiedevo. Per fare un confronto, banalmente serve una metrica, e tu ancora non l'hai esplicitata.

Si chiamano "unità", lo spiegano alle elementari... se ti sforzi ci puoi arrivare.


E io ti ho detto come stanno le cose su piattaforme diverse. Mi sembra che mingw e Visual Studio abbiano ben poche a che sparire, o sbaglio?

Visual Studio lo hai tirato in ballo tu, io ho sempre cercato di parlare a livello generale, per quanto possibile. Sei tu che hai sempre cercato i particolarismi per procurarti qualche cavillo a cui poter aggrappare la tua desolazione nozionistica.


Falso.

Questo è in pieno contrasto con quanto hai affermato prima.

Ma anche no. Prima hai detto che un long occupa PIU' spazio di un int, e dalle mie parti quest'affermazione NON implica l'uguaglianza.

Ma si vede che dalle tue, di parti, anche la logica è un'opinione. :asd:

No... è un caso aggiunto, per giunta poco sostanziale nel contesto corrente.

Per te invece è oro... nel gergo verbale sei riuscito a trovare il cavillo trascurabile che ti tiene in vita.

Io sono qui ad indicare la luna... e tu continui "eh no ma guardate il dito... guardate quel dito!" :asd:


E di quanto? Non avevi detto che bisognerebbe farsi un'idea delle DIMENSIONI? Di quali dimensioni parli? Potresti essere più chiaro?

Dimensione in memoria.


Dovevi farla prima, perché non è un cavillo, ma la realtà. Quella che PRIMA avevi dipinto in un modo, e sulla quale POI, messo alle strette, non hai che potuto metterci una pezza.

Nessuno ha mai detto che non sia una realtà... semplicemente è poco sostanziale.

Comunque chiarito questo punto (long >= int) hai anche altro da dire? Sembrerebbe di no... perchè se ci concentriamo sulla sostanza a te non rimane veramente nulla :)


La mia aveva un preciso scopo, che è stato raggiunto: dimostrare che hai detto una falsità sui long che occupano PIU' spazio degli int.

No, l'unica cosa che hai dimostrato è che non possiedi la capacità intellettuale di discernere la forma dalla sostanza.


No, prima era un assoluto che NON lasciava spazio a nient'altro.

Guardati... sei arrivato al punto in cui per "avere ragione" decidi tu cosa hanno detto gli altri :asd:


E' inutile che cerchi di rigirare le carte.

Mi sembra che questo:

Per essere rigorosi, bisogna fare una premessa... dipende dall'architettura, o meglio... dipende da come si comporta il compilatore sulla precisa architettura.


l'abbia scritto tu...

E' un senso molto relativo, visto che non esiste una metrica di confronto per cui puoi affermare che qualcosa ha una dimensione relativamente superiore / inferiore a un'altra...

L'ho scritto io e lo ribadisco. Riguardati il discorsetto di prima relativo alla scuola elementare.


Son cose che specificato BEN DOPO essere stato messo davanti alla realtà, che è ben diverso.

Sono cose che ho precisato BEN PRIMA di qualsiasi tua affermazione a riguardo.


A giudicare dagli utenti che hanno partecipato alla discussione, sei l'UNICO che ha certe "posizioni".

Uno contro tutti. :asd:
Anche Galileo non era molto popolare... e sicuramente lo scrivere che voi non siete alla mia altezza non mi fa guadagnare molta popolarità :D

ekerazha
07-05-2009, 16:14
Su questo t'ha già risposto marco, col quale sono d'accordo.

Io ho risposto a lui.


Che non c'entra NULLA con la dimensione dei tipi, mi pare.

C'entra eccome... perchè l'uso del typing statico conduce al dover conoscere le differenze tra i vari type.


:rotfl:

Ma se non conosci nemmeno lo standard del C. :asd:

Infatti a te ho dovuto linkare io il documento dello standard ANSI C perchè stavi sbrodolando :rotfl:


Cosa c'è di meglio di questo sollazzo? You made my day! :asd:
Il divertimento è tutto mio nel vederti sguazzare e crogiolare nella tua ignoranza :D

banryu79
07-05-2009, 16:17
ekerazha, sei uno spasso :)

A proposito è la prima volta che ti leggo nella sezione, è perchè è la prima volta che ci scrivi?
Comunque benvenuto ;)

ekerazha
07-05-2009, 16:20
Son due cose diverse, non e' questione di pignoleria ! :D
La prima affermazione e' corretta, la seconda no, inoltre e' la seconda che implica la prima, non viceversa !

Sono differenti ma la differenza in questo contesto è marginale... comunque ripeto... se vuoi prendiamo uno short e un long, va meglio? Pensa alla sostanza non alle briciole!


Son due cose che non sono correlate, e quindi l'esempio direi che non calza. Io posso decidere di usare un intero con dimensione specifica piu' piccola piuttosto che piu' grande anche in un linguaggio con tipizzazione dinamica, o magari fare anche meglio che non in C. In alcuni (e.g. pascal, common lisp) posso definire degli intervalli per i valori (e.g. tra 200 e 300) e il compilatore automaticamente usera' il tipo piu' piccolo sufficiente.
Che il compilatore possa usare automaticamente il più piccolo è una considerazione parziale, dall'altra parte c'è appunto la consapevolezza nella scelta dei valori da parte dell'utente, ti faccio un esempio banale ma che rende semplicemente l'idea.

Avere un contatore da 1 a 10 o un contatore da 1000000 a 1000010 potrebbe non essere proprio la stessa cosa... e che poi il compilatore utilizzi il tipo più piccolo per poter contenere l'intervallo 1000000-1000010 non è più molto rilevante.

ekerazha
07-05-2009, 16:24
ekerazha, sei uno spasso :)

A proposito è la prima volta che ti leggo nella sezione, è perchè è la prima volta che ci scrivi?
Comunque benvenuto ;)

Mi hai scoperto (comunque non è la primissima volta).

Diciamo che in Off Topic ho visto un intervento di cdimauro e ho visto dalla sua firma che era un fanboy di Python... poi spulciando il forum mi sono imbattuto in questo thread e ho colto la palla al balzo sapendo che se avessi citato Python lui sarebbe intervenuto :D Avevo voglia di tirare un paio di legnate a qualche Python-boy, ogni tanto è salutare.

cdimauro
07-05-2009, 16:25
Hai già dimostrato di non conoscere l'ANSI C
Dove? Mi sembra proprio il contrario, invece.
ed il sistema binario...
Idem come sopra.
risparmiaci almeno le tue "naturali conclusioni", non tentare di spingerti dove non hai le capacità di arrivare, tirando in ballo a sproposito cose che non conosci come la "logica", limitati a quello che viene scritto che sarebbe già un buon traguardo :)
Mi limito a quello che hai scritto tu, infatti, che è sbagliato, come ampiamente dimostrato, e non soltanto dame.
Si chiamano "unità", lo spiegano alle elementari... se ti sforzi ci puoi arrivare.
Unità, sì, ma di misura. E quale sarebbe, visto che non ti sei ancora degnato di parlarne?
Visual Studio lo hai tirato in ballo tu, io ho sempre cercato di parlare a livello generale, per quanto possibile. Sei tu che hai sempre cercato i particolarismi per procurarti qualche cavillo a cui poter aggrappare la tua desolazione nozionistica.
A livello generale c'è lo standard, che non dice NULLA a riguardo di long PIU' grande di int, mi sembra.

La pratica, e quindi l'esempio che ho riportato, serve a dimostrare che la tua affermazione è banalmente falsa.
No... è un caso aggiunto, per giunta poco sostanziale nel contesto corrente.
Certo. Peccato che sia il caso PIU' comune... Altro che sostanziale. :asd:
Per te invece è oro... nel gergo verbale sei riuscito a trovare il cavillo trascurabile che ti tiene in vita.

Io sono qui ad indicare la luna... e tu continui "eh no ma guardate il dito... guardate quel dito!" :asd:
Prima puntavi nella direzione sbagliata, e per fortuna che l'hai riconosciuto.
Dimensione in memoria.
Che si misura in...?
Nessuno ha mai detto che non sia una realtà... semplicemente è poco sostanziale.
E' sostanziale che sia il caso più comune, invece.
Comunque chiarito questo punto (long >= int) hai anche altro da dire? Sembrerebbe di no... perchè se ci concentriamo sulla sostanza a te non rimane veramente nulla :)
Rimangono le tue considerazioni sulla NECESSITA' di avere idea delle dimensioni della memoria allocate, che in assenza di dati CERTI... vengono meno.

Perché, e tu stesso l'hai detto POI, tutto dipende dalla particolare architettura (e aggiungo io: anche dal compilatore usato) su cui verrà compilata e girerà l'applicazione scritta in C.
No, l'unica cosa che hai dimostrato è che non possiedi la capacità intellettuale di discernere la forma dalla sostanza.
Questa frase si commenta da sé.

D'altra parte è compresibile: al pubblico ludibrio non si può che rispondere con le offese sul piano personale...
Guardati... sei arrivato al punto in cui per "avere ragione" decidi tu cosa hanno detto gli altri :asd:
Mi sembra di aver quotato quello che hai scritto.

Se vuoi te lo reincollo, non c'è problema.
L'ho scritto io e lo ribadisco. Riguardati il discorsetto di prima relativo alla scuola elementare.
Tu quale avresti frequentato, per NON aver imparato a conoscere il C? :asd:
Sono cose che ho precisato BEN PRIMA di qualsiasi tua affermazione a riguardo.
Quindi non aver potuto rispondere prima è un crimine, a quanto pare.

E debbo anche dedurre che quando scrivi qualcosa, vale sempre l'ULTIMA cosa che hai scritto: tutto ciò che hai detto prima non ha alcun valore. Ciarpame che rinneghi.

Buono a sapersi. Così la prossima volta evito tutti i tuoi messaggi, tranne l'ultimo. :asd:
Anche Galileo non era molto popolare... e sicuramente lo scrivere che voi non siete alla mia altezza non mi fa guadagnare molta popolarità :D
Non fare confronti che non reggono. Galileo almeno la sua materia la conosceva. :asd:

cdimauro
07-05-2009, 16:30
Io ho risposto a lui.
Che ti ha risposto a sua volta.
C'entra eccome... perchè l'uso del typing statico conduce al dover conoscere le differenze tra i vari type.
:rotfl: Ma ti rendi conto di quello che hai detto?

Nemmeno la commento questa, perché mi sto ancora rotolando dalle risate... :asd:
Infatti a te ho dovuto linkare io il documento dello standard ANSI C perchè stavi sbrodolando :rotfl:
Ma tu puoi linkare quello che vuoi, anche il sito del Vaticano.

Se poi quel che riporti non ti dà ragione, è del tutto inutile.
Il divertimento è tutto mio nel vederti sguazzare e crogiolare nella tua ignoranza :D
Non hai che da dimostrarlo. :cool:
Mi hai scoperto (comunque non è la primissima volta).

Diciamo che in Off Topic ho visto un intervento di cdimauro e ho visto dalla sua firma che era un fanboy di Python... poi spulciando il forum mi sono imbattuto in questo thread e ho colto la palla al balzo sapendo che se avessi citato Python lui sarebbe intervenuto :D Avevo voglia di tirare un paio di legnate a qualche Python-boy, ogni tanto è salutare.
E invece hai preso legnate da tutti, anche da chi non ama Python. :asd:

~FullSyst3m~
07-05-2009, 16:47
No... quello è fatto della tua stessa pasta, nulla a che fare con la mia :)

Devo ricordarmi di non entrare più in queste discussioni con chi non ha frequentato corsi di ingegneria informatica e quindi non può essere al mio livello... si finisce sempre in thread inconcludenti e senza fine.

Ma ti credi Dio? Non pensi di essere un pò troppo saputello e spaccone? Come è che sei in questo forum se non siamo al tuo livello? Vai a parlare con Torvalds che conosce le architetture a memoria, sa tutti i valori dei tipi e per giunta ti calcola anche le radici quadrate di questi valori. Ah, dimenticavo, ti dice anche in qualche anno è stata prodotta pure ogni architettura esistente in questo e qualunque altro mondo ed universo.

ekerazha
07-05-2009, 16:52
Dove? Mi sembra proprio il contrario, invece.

Idem come sopra.

Ti sembra male allora... basta rileggere tutti i messaggi precedenti per capire che chi non conosce il C ed il sistema binario sei tu... ho linkato dei tuoi messaggi a compagni di informatica teorica, si stanno facendo delle grandi sganasciate :D


Mi limito a quello che hai scritto tu, infatti, che è sbagliato, come ampiamente dimostrato, e non soltanto dame.

Se ti limitassi a quello che ho scritto io non avresti detto questa sciocchezza... hai già dato ampia prova del fatto che ti piace seminare avverbi di tempo a tuo piacimento nelle affermazioni altrui.


Unità, sì, ma di misura. E quale sarebbe, visto che non ti sei ancora degnato di parlarne?

Che si misura in...?

Non c'è unità di misura, sono numeri. Qual è l'unità di misura di 2? Non c'è, è un numero. L'unità di misura subentra quando la considerazione da relativa diventa effettiva... allora possiamo parlare di "bit".


A livello generale c'è lo standard, che non dice NULLA a riguardo di long PIU' grande di int, mi sembra.

La pratica, e quindi l'esempio che ho riportato, serve a dimostrare che la tua affermazione è banalmente falsa.

No, la pratica e quindi l'esempio che hai riportato servono a dimostrare che non conosci il sistema binario. Se ho un intervallo di valori in base 10 che sono più grandi di altri valori, serviranno più bit per rappresentarli una volta tradotti in sistema binario.


Certo. Peccato che sia il caso PIU' comune... Altro che sostanziale. :asd:

E' sostanziale che sia il caso più comune, invece.

Questa è una tua affermazione del tutto arbitraria.


Prima puntavi nella direzione sbagliata, e per fortuna che l'hai riconosciuto.

No, io ho sempre puntato alla luna splendente... e tu ti sei sempre fermato a guardare solo il dito.



Rimangono le tue considerazioni sulla NECESSITA' di avere idea delle dimensioni della memoria allocate, che in assenza di dati CERTI... vengono meno.

No, la valenza relativa rimane.


Perché, e tu stesso l'hai detto POI, tutto dipende dalla particolare architettura (e aggiungo io: anche dal compilatore usato) su cui verrà compilata e girerà l'applicazione scritta in C.

Aggiungi tu? :rotfl: L'ho già detto io un po' di messaggi fa, devi aver saltato la lettura di più di un mio messaggio (spero per te... perchè l'alternativa è che tu li abbia letti ma non li abbia capiti).


Questa frase si commenta da sé.

D'altra parte è compresibile: al pubblico ludibrio non si può che rispondere con le offese sul piano personale...

Non è una offesa, io penso realmente che tu non abbia un grande spessore intellettuale e culturale, è la mia libera opinione, non è una offesa è semplicemente quello che penso. Se vuoi ti dico che sei bravo bravissimo, ma non sarebbe così.


Mi sembra di aver quotato quello che hai scritto.

Se vuoi te lo reincollo, non c'è problema.

Il problema non è quello che quoti, il problema è quello che inventi.


Tu quale avresti frequentato, per NON aver imparato a conoscere il C? :asd:

Io lo conosco e l'ho provato in sede d'esame. Se mi paghi lautamente posso darti qualche ripasso.


Quindi non aver potuto rispondere prima è un crimine, a quanto pare.

No... è un "crimine" non leggere quello che viene scritto nel frattempo ed esordire a sproposito con messaggi ridondanti, spacciandoli come novità.


E debbo anche dedurre che quando scrivi qualcosa, vale sempre l'ULTIMA cosa che hai scritto: tutto ciò che hai detto prima non ha alcun valore. Ciarpame che rinneghi.

Buono a sapersi. Così la prossima volta evito tutti i tuoi messaggi, tranne l'ultimo. :asd:

No... la PRIMA è sempre valida e l'ULTIMA la complementa adeguatamente. Tu invece vuoi il tuo minuto di gloria :asd: e quindi fai puntualizzazioni inutili su cose che sono già state precisate.


Non fare confronti che non reggono. Galileo almeno la sua materia la conosceva. :asd:

Infatti il confronto calza eccome... perchè io la mia materia la conosco, tu invece sei come uno dei vescovi che, non conoscendo le cose, le reputava inaccettabili :D

ekerazha
07-05-2009, 16:59
Che ti ha risposto a sua volta.
Ed io ho risposto a mia volta.


:rotfl: Ma ti rendi conto di quello che hai detto?

Nemmeno la commento questa, perché mi sto ancora rotolando dalle risate... :asd:

Un aforisma latino afferma che il riso abbondi sulla bocca di una certa categoria di persone. Affermazione azzeccata direi.


Ma tu puoi linkare quello che vuoi, anche il sito del Vaticano.

Se poi quel che riporti non ti dà ragione, è del tutto inutile.

Concordo, infatti sono stato io a linkartelo perchè mi dà ragione eccome, come ampiamente riportato.


Non hai che da dimostrarlo. :cool:

Questo thread ormai trabocca di queste dimostrazioni :fagiano:


E invece hai preso legnate da tutti, anche da chi non ama Python. :asd:
No, le legnate (e pesanti per giunta) le hai prese tu come da copione... ma se preferisci pensare il contrario te lo lascio credere volentieri :asd:

ekerazha
07-05-2009, 17:02
Ma ti credi Dio? Non pensi di essere un pò troppo saputello e spaccone? Come è che sei in questo forum se non siamo al tuo livello? Vai a parlare con Torvalds che conosce le architetture a memoria, sa tutti i valori dei tipi e per giunta ti calcola anche le radici quadrate di questi valori. Ah, dimenticavo, ti dice anche in qualche anno è stata prodotta pure ogni architettura esistente in questo e qualunque altro mondo ed universo.

Non credo in Dio, ma concordo sul fatto di essere saputello e spaccone... quando voglio sono altezzoso, borioso, arrogante, irritante e snervate. La cosa che fa "rosicare" l'interlocutore medio è che nonostante tutto questo, quello che dico rimane valido e lui viene ripetutamente demolito dalla mia ars dialettica.

-Slash
07-05-2009, 17:13
Io al Politecnico ho fatto C, Assembly e Java ;) Certamente non Python, che per il motivo già spiegato non è didattico. Che poi possa essere insegnato lo stesso è un altro conto, ma non è didattico.
Che non è didattico lo dici tu. Se lo insegnano nella migliore facoltà di ingegneria al mondo come primo linguaggio di programmazione un motivo ci sarà

Sappiamo tutti che la didattica italiana è anni indietro a quella americana..

ekerazha
07-05-2009, 17:17
Che non è didattico lo dici tu.

Il motivo per cui non lo considero didattico l'ho già illustrato molti messaggi fa (prima del duello rusticano intavolato dal nostro amico).


Se lo insegnano nella migliore facoltà di ingegneria al mondo come primo linguaggio di programmazione un motivo ci sarà

In base a cosa sarebbe "la migliore al mondo"? :stordita:

71104
07-05-2009, 17:37
ekerazha, sei uno spasso :)

A proposito è la prima volta che ti leggo nella sezione, è perchè è la prima volta che ci scrivi?
Comunque benvenuto ;) non é la prima volta, tempo fa le ha prese di santa ragione perché si ostinava a dire che quando un programma dereferenzia un indirizzo virtuale viene eseguito del codice del sistema operativo che serve a fare la traduzione da indirizzo virtuale ad indirizzo fisico :asd:

abbiate pazienza ragazzi, non ho letto queste nuove perle sull'ANSI C ma sto tizio non sa una mazza.

71104
07-05-2009, 17:39
Non credo in Dio, ma concordo sul fatto di essere saputello e spaccone... quando voglio sono altezzoso, borioso, arrogante, irritante e snervate. La cosa che fa "rosicare" l'interlocutore medio è che nonostante tutto questo, quello che dico rimane valido e lui viene ripetutamente demolito dalla mia ars dialettica. AHAHAHAAHAHAHAHAAHAHAHAHAHA :rotfl:

ekerazha
07-05-2009, 17:45
non é la prima volta, tempo fa le ha prese di santa ragione perché si ostinava a dire che quando un programma dereferenzia un indirizzo virtuale viene eseguito del codice del sistema operativo che serve a fare la traduzione da indirizzo virtuale ad indirizzo fisico :asd:

Eccolo l'ultimo che mancava all'appello :D

Diciamola tutta...

... era un discorso con almeno una 20ina di punti, su 19 è stato ampiamente dimostrato che avevo ragione, su 1 (quello citato) avevo torto in quel caso specifico... ma non in generale perchè su alcune architetture (non la x86 però) è proprio così.

;)

Su 6090 messaggi in questo forum ho sbagliato solo 2 volte e non ho avuto problemi ad ammetterlo... una è stata quella, una è stata un'altra volta (in Off Topic su una cosa di medicina, non di informatica).


abbiate pazienza ragazzi, non ho letto queste nuove perle sull'ANSI C ma sto tizio non sa una mazza.

Quello che ha dimostrato per circa 19 volte di non sapere "una mazza", sei proprio tu mio caro.

71104
07-05-2009, 17:47
scusatemi ragazzi ma non riesco a leggere il topic perché non vedo altro che battute come le seguenti:
ekerazha - *dice una stronzata*
altri - "scusa eh :D ma non ti rendi conto che é una stronzata interstellare e che sei ridicolo? :asd:"
ekerazha - "ve lo lascio credere con piacere, tanto vi ho giá fatto soffrire abbastanza :asd:"

mi sto ammazzando dalle risate :rotfl:

vorreste cortesemente riassumermi quali sono state le perle? :D

71104
07-05-2009, 17:51
71104 capitolo secondo... :asd:
Ma non è che è un clone? :asd: scusami ma se permetti mi stai offendendo V_V


Ah bhè allora... :asd: qui peró riconosco che mi hai steso dalle risate :rotfl:



Devo ricordarmi di non entrare più in queste discussioni con chi non ha frequentato corsi di ingegneria informatica e quindi non può essere al mio livello... si finisce sempre in thread inconcludenti e senza fine. e se ti dicessi che faccio Informatica, e non Ingegneria Informatica? :eek:

mjordan
07-05-2009, 17:52
ekerazha, sei uno spasso :)


Già, un'altro che ha bisogno di farmaci benzodiazepinici... :asd:

ekerazha
07-05-2009, 17:53
e se ti dicessi che faccio Informatica, e non Ingegneria Informatica? :eek:

Ti risponderei che sei una spanna sotto.

ekerazha
07-05-2009, 17:54
scusami ma se permetti mi stai offendendo V_V


Infatti gliel'avevo rispedito al mittente dicendo che quelli della stessa pasta siete tu e lui :D

ekerazha
07-05-2009, 17:55
Già, un'altro che ha bisogno di farmaci benzodiazepinici... :asd:

Tu invece hai bisogno di qualche libro, qualche lezione e molto studio ;)

pierosa
07-05-2009, 17:55
e se ti dicessi che faccio Informatica, e non Ingegneria Informatica? :eek:

Ignorante

VICIUS
07-05-2009, 18:03
Non c'entra... non sto dicendo che "salta ad istruzioni a caso" sto dicendo che esegue salti in memoria (seguendo un criterio ben definito).
Da quello che avevi scritto prima non si capiva assolutamente quello che stavi cercando di dire. Ok allora in questo fantomatico processore si può fare ma conoscere questi criteri non mi serve assolutamente per applicare la lazy evaluation. L'unica cosa che mi potrebbe far pensare è che il progettista che lo ha concepito è un malato di mente.

Visto che ci sei puoi provare a chiarirmi come funziona quella storia della jmp che non salta in memoria. Per come la vedo io una jmp che non salta in memoria non salta da nessuna parte quindi non è altro che una nop. Una macchina senza salti è piuttosto inutile e mi viene pure il dubbio che non sia in grado eseguire codice turing completo. (Sono anni che ho dato quel esame e non ricordo con certezza quindi prendi questa ultima affermazione come i vaneggiamenti di un ubriaco :))

ekerazha
07-05-2009, 18:18
Da quello che avevi scritto prima non si capiva assolutamente quello che stavi cercando di dire. Ok allora in questo fantomatico processore si può fare ma conoscere questi criteri non mi serve assolutamente per applicare la lazy evaluation. L'unica cosa che mi potrebbe far pensare è che il progettista che lo ha concepito è un malato di mente.

A me sembrava di essere stato piuttosto chiaro, comunque l'importante è capirsi. La "lazy evaluation" la applichi ma devi essere consapevole che per ottimizzare il codice devi ragionare quasi "al contrario" rispetto al solito, quindi favorendo dei JMP (=non-salti).


Visto che ci sei puoi provare a chiarirmi come funziona quella storia della jmp che non salta in memoria. Per come la vedo io una jmp che non salta in memoria non salta da nessuna parte quindi non è altro che una nop. Una macchina senza salti è piuttosto inutile e mi viene pure il dubbio che non sia in grado eseguire codice turing completo. (Sono anni che ho dato quel esame e non ricordo con certezza quindi prendi questa ultima affermazione come i vaneggiamenti di un ubriaco :))
Ho ipotizzato l'esistenza di una architettura in cui si processano le istruzioni eseguendo dei salti calcolati ben definiti (anche se non abbiamo JMP, che in questo caso sono non-salti) e dove invece un JMP è in effetti un non-salto, questo per far vedere che in realtà la cosa può dipendere dall'architettura del processore e anche da come sono implementate le istruzioni a livello di microcodice. E' stato un esempio per evidenziare (estremizzandolo) questo fatto... non è che adesso bisogna sviscerare la cosa perchè dobbiamo realizzarla (anche perchè sarebbe una architettura ridicola), quindi non fissartici troppo :D

cdimauro
07-05-2009, 18:23
Ti sembra male allora... basta rileggere tutti i messaggi precedenti per capire che chi non conosce il C ed il sistema binario sei tu... ho linkato dei tuoi messaggi a compagni di informatica teorica, si stanno facendo delle grandi sganasciate
Allora fai partecipare anche loro, che di clown c'è sempre bisogno qui. :asd:
Se ti limitassi a quello che ho scritto io non avresti detto questa sciocchezza... hai già dato ampia prova del fatto che ti piace seminare avverbi di tempo a tuo piacimento nelle affermazioni altrui.
long > int non è certo roba mia, caro.
Non c'è unità di misura, sono numeri. Qual è l'unità di misura di 2? Non c'è, è un numero. L'unità di misura subentra quando la considerazione da relativa diventa effettiva... allora possiamo parlare di "bit".
Ah, ecco. Quindi finché parli di dimensioni "relative" puoi evitare specificare l'unità misura. Questa me la segno. :asd:

http://old.demauroparavia.it/92469

re|la|tì|vo
agg.
AU
1 che ha rapporto, relazione con qcs.: risposta relativa alla domanda | che è attinente a qcs.: discorso r. alla scienza
2 che è in proporzione con altro, definito o condizionato da altro: i risultati sono relativi al lavoro svolto
3 discreto, accettabile anche se non perfetto e sottoposto a limiti: godo di una relativa salute, dà alla figlia una relativa libertà
4 TS fis., di grandezza o proprietà, che viene definita in base a un sistema di riferimento fissato in modo arbitrario e che non è quindi totalmente dipendente dal fenomeno osservato | del valore di una grandezza, che si determina dopo aver fissato come riferimento il valore che essa assume per un corpo o in condizioni particolari

:rotfl:
No, la pratica e quindi l'esempio che hai riportato servono a dimostrare che non conosci il sistema binario. Se ho un intervallo di valori in base 10 che sono più grandi di altri valori, serviranno più bit per rappresentarli una volta tradotti in sistema binario.
Quindi? Un computer lavora astrattamente con numeri, oppure questi sono codificati in qualche forma?
Questa è una tua affermazione del tutto arbitraria.
Dettata dall'esperienza, visto che su Windows è la norma, ed è il sistema più diffuso.
No, io ho sempre puntato alla luna splendente... e tu ti sei sempre fermato a guardare solo il dito.

No, la valenza relativa rimane.
:rotfl: Ma se mancano i dati CERTI. :asd:
Aggiungi tu? :rotfl: L'ho già detto io un po' di messaggi fa, devi aver saltato la lettura di più di un mio messaggio (spero per te... perchè l'alternativa è che tu li abbia letti ma non li abbia capiti).
Ma se hai parlato di compilatori BEN DOPO che ne aveva parlato VICIUS. :rotfl:

A cose ormai fatte, insomma. PRIMA non l'idea non t'aveva nemmeno sfiorato, coi tuoi "assoluti" (ma relativi al TUO universo).
Non è una offesa, io penso realmente che tu non abbia un grande spessore intellettuale e culturale, è la mia libera opinione, non è una offesa è semplicemente quello che penso. Se vuoi ti dico che sei bravo bravissimo, ma non sarebbe così.
I tuoi giudizi sulla mia persona lasciano il tempo che trovano.
Il problema non è quello che quoti, il problema è quello che inventi.
In tal caso puoi sempre quotarmi e riportarmi quello che "invece" avevi scritto tu, no?
Io lo conosco e l'ho provato in sede d'esame. Se mi paghi lautamente posso darti qualche ripasso.
Da una rapa non si può cavar sangue...
No... è un "crimine" non leggere quello che viene scritto nel frattempo ed esordire a sproposito con messaggi ridondanti, spacciandoli come novità.
Leggo sempre tutto, ma rispondo ANCHE a quello che avevi scritto prima.

Ai tuoi "assoluti" sparati così con altrettanto assoluta certezza, che sono poi capitolati inesorabilmente.
No... la PRIMA è sempre valida e l'ULTIMA la complementa adeguatamente. Tu invece vuoi il tuo minuto di gloria e quindi fai puntualizzazioni inutili su cose che sono già state precisate.
Non hai precisato nulla. Nel tuo secondo messaggio hai parlato di long > int, e poi hai chiuso parlando di "dimensioni relative" che, come tu stesso hai detto, non hanno nulla di concreto, visto che "concretizzi" soltanto quando ti riferisci a particolari architetture.

Un modo come un altro per non dire nulla di concreto, insomma.
Infatti il confronto calza eccome... perchè io la mia materia la conosco, tu invece sei come uno dei vescovi che, non conoscendo le cose, le reputava inaccettabili :D
Si vede proprio. Son tutti d'accordo con te. :asd:
Ed io ho risposto a mia volta.

Un aforisma latino afferma che il riso abbondi sulla bocca di una certa categoria di persone. Affermazione azzeccata direi.
Ecco, dedicati pure agli aforismi, perché l'informatica non fa per te. :asd:

Anzi, visto che ci sei, stampati pure la frase che hai detto e appendila all'università, così contribuirai almeno a rallegrare le giornate di altra gente. :rotfl:
Concordo, infatti sono stato io a linkartelo perchè mi dà ragione eccome, come ampiamente riportato.
Mi sembra che non dica nulla sul long > int, come ampiamente riportato appunto, e come tu stesso hai poi ritrattato.

Se questa la chiami "dimostrazione"...
Questo thread ormai trabocca di queste dimostrazioni :fagiano:
Si vede proprio. :asd:
No, le legnate (e pesanti per giunta) le hai prese tu come da copione... ma se preferisci pensare il contrario te lo lascio credere volentieri :asd:
Non è la prima volta che abbiamo avuto discussioni. Vedo che le bastonate hai preso quando abbiamo parlato di Linux, Windows, et similia ti fanno ancora male. :asd:
Non credo in Dio, ma concordo sul fatto di essere saputello e spaccone... quando voglio sono altezzoso, borioso, arrogante, irritante e snervate. La cosa che fa "rosicare" l'interlocutore medio è che nonostante tutto questo, quello che dico rimane valido e lui viene ripetutamente demolito dalla mia ars dialettica.
Anche i pazzi possono avere una "ars dialettica" invidiabile. :asd:
Il motivo per cui non lo considero didattico l'ho già illustrato molti messaggi fa (prima del duello rusticano intavolato dal nostro amico).

In base a cosa sarebbe "la migliore al mondo"? :stordita:
In effetti è ben noto che il MIT sia l'ultima ruota del carro nel campo dell'informatica. :asd:
scusatemi ragazzi ma non riesco a leggere il topic perché non vedo altro che battute come le seguenti:
ekerazha - *dice una stronzata*
altri - "scusa eh :D ma non ti rendi conto che é una stronzata interstellare e che sei ridicolo?
ekerazha - "ve lo lascio credere con piacere, tanto vi ho giá fatto soffrire abbastanza :"

mi sto ammazzando dalle risate

vorreste cortesemente riassumermi quali sono state le perle? :D
Mi spiace, ma devi leggere il thread. Perché vuoi perderti tutto lo spasso?

VICIUS
07-05-2009, 18:24
[...]ogna sviscerare la cosa perchè dobbiamo realizzarla (anche perchè sarebbe una architettura ridicola), quindi non fissartici troppo :D

OK lascio andare questa storia dei salti. Rimango comunque dell'idea che conoscere questi dettagli sia irrilevante se uno vuole capire o applicare ottimizzazioni come quella di cui abbiamo parlato.

ekerazha
07-05-2009, 18:27
OK lascio andare questa storia dei salti. Rimango comunque dell'idea che conoscere questi dettagli sia irrilevante se uno vuole capire o applicare ottimizzazioni come quella di cui abbiamo parlato.

Certo... ammenochè domani non si ritrovi davanti un sistema con quell'architettura paradossale :D

cdimauro
07-05-2009, 18:27
A me sembrava di essere stato piuttosto chiaro, comunque l'importante è capirsi. La "lazy evaluation" la applichi ma devi essere consapevole che per ottimizzare il codice devi ragionare quasi "al contrario" rispetto al solito, quindi favorendo dei JMP (=non-salti).


Ho ipotizzato l'esistenza di una architettura in cui si processano le istruzioni eseguendo dei salti calcolati ben definiti (anche se non abbiamo JMP, che in questo caso sono non-salti) e dove invece un JMP è in effetti un non-salto, questo per far vedere che in realtà la cosa può dipendere dall'architettura del processore e anche da come sono implementate le istruzioni a livello di microcodice. E' stato un esempio per evidenziare (estremizzandolo) questo fatto... non è che adesso bisogna sviscerare la cosa perchè dobbiamo realizzarla (anche perchè sarebbe una architettura ridicola), quindi non fissartici troppo :D
Perché non presenti un modello di architettura che fa quello che dici?

Ovviamente basta un esempio che dimostri come sia possibile eseguire il calcolo della lazy evaluation. :read: