PDA

View Full Version : Basi programmazione


francolol
11-07-2014, 18:52
Salve, sono un ragazzo che sta tentando di imparare un pò di programmazione da autodidatta dal momento che nel mio liceo non si studia.
Ho provato a imparare python seguendo dei video di "dubbia" (per me) validità, ma mi sono reso conto che quel linguaggio non può soddisfare alcune delle mie necessità come la programmazione di applicazioni android. Ho iniziato dunque un libro trovato linkato nel forum (Claudio de Sio, Java 5) per, appunto, la programmazione in Java ma mi rendo conto che mi mancano alcuni concetti chiave senza i quali trovo non-logico (o almeno allo stesso modo di python) il linguaggio. In sostanza quello che chiedo è se conoscete qualche guida per chi come me è ignorante o avevate qualche consiglio. Grazie :D

VICIUS
11-07-2014, 20:28
Visto che sei ancora alla linea di partenza comincia da qui: CS unplugged http://www.csunplugged.org (nella colonna a fianco c'è la versione italiana). È un libro usato alle elementari/medie per insegnare informatica senza usare linguaggi di programmazione o computer. È un buon punto di partenza per cominciare ad entrare nella mentalità giusta.

Le basi le puoi imparare usando un linguaggio qualsiasi ma in genere quali interpretati di alto livello come Python sono i migliori per cominciare. Altri linguaggi come Java o C hanno sintassi complesse che possono confondere oppure ti costringono a conoscere dettagli tecnici del funzionamento dei pc.

Anche se il tuo obbiettivo è Android per ora ti consiglio di lasciar perdere Java e continuare con Python. "Pensare da informatico" http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm è stato consigliato più volte qui sul forum.

Per concludere. Non forti scrupoli a chiedere aiuto qui sul forum se non capisci qualcosa. E non scoraggiarti se all'inizio non capisci una mazza. Partire non è affatto semplice.

Freaxxx
12-07-2014, 00:09
Considerando i tool e gli SDK ufficiali forniti da Google e assumendo che tu voglia creare una applicazione completa con 1 singolo linguaggio, per quanto riguarda android puoi usare:

- Java con l'SDK
- C/C++ con l'NDK

il pregio di C e C++ è che sono altamente portabili, praticamente solo Android e il Kindle usano ancora Java nel mondo consumer ad alta diffusione.

è anche possibile invocare codice Java da C/C++ e viceversa ma questo è un altro topic per quando vorrai imparare più di un linguaggio o avrai motivi per farlo.

nota che moltissime delle API ufficiali Android vengono implementate soltanto in Java e il più delle volte vieni comunque forzato ad usare codice Java anche se usi l'NDK.

Consiglierei Java per iniziare, anche se oltre ad Android non userai Java per molto altro, ma ha il pregio di essere un linguaggio popolare nel mondo dell'educazione e ci sono tantissime risorse per questa tecnologia.

Online trovi qualche guida in italiano, moltissime risorse in inglese, sia libri che altro, tutto dipende da cosa cerchi e in che lingua, questo è un corso facile da seguire e buono per chi inizia http://www.html.it/guide/guida-java/ .

Evita linguaggi di scripting come Python, sono inutili ai fini di quello che ti proponi di fare, inoltre questa famiglia di linguaggi è tipicamente una brutta scelta per illustrare concetti quali la forte tipizzazione, o il meccanismo dei tipi in generale, e tutti i concetti accessori come l'overload e le chiamate a funzioni. A meno che Python non ti serva, della parte teorica che Python ti può dare non te ne fai assolutamente nulla e anzi può essere altamente deviante come la "keyword" self in Python che "keyword" non è .

cdimauro
12-07-2014, 07:36
Salve, sono un ragazzo che sta tentando di imparare un pò di programmazione da autodidatta dal momento che nel mio liceo non si studia.
Ho provato a imparare python seguendo dei video di "dubbia" (per me) validità, ma mi sono reso conto che quel linguaggio non può soddisfare alcune delle mie necessità come la programmazione di applicazioni android. Ho iniziato dunque un libro trovato linkato nel forum (Claudio de Sio, Java 5) per, appunto, la programmazione in Java ma mi rendo conto che mi mancano alcuni concetti chiave senza i quali trovo non-logico (o almeno allo stesso modo di python) il linguaggio. In sostanza quello che chiedo è se conoscete qualche guida per chi come me è ignorante o avevate qualche consiglio. Grazie :D
Utilizza Python, come ti è stato consigliato, e per sviluppare su Android usa Kivy (/kivy.org). Con Kivy hai il vantaggio di esportare la tua applicazione anche su iOS, oltre all'intrinseca facilità di sviluppo.

Ma prima fatti le ossa con Python: impara a programmare.
Visto che sei ancora alla linea di partenza comincia da qui: CS unplugged http://www.csunplugged.org (nella colonna a fianco c'è la versione italiana). È un libro usato alle elementari/medie per insegnare informatica senza usare linguaggi di programmazione o computer. È un buon punto di partenza per cominciare ad entrare nella mentalità giusta.

Le basi le puoi imparare usando un linguaggio qualsiasi ma in genere quali interpretati di alto livello come Python sono i migliori per cominciare. Altri linguaggi come Java o C hanno sintassi complesse che possono confondere oppure ti costringono a conoscere dettagli tecnici del funzionamento dei pc.

Anche se il tuo obbiettivo è Android per ora ti consiglio di lasciar perdere Java e continuare con Python. "Pensare da informatico" http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm è stato consigliato più volte qui sul forum.

Per concludere. Non forti scrupoli a chiedere aiuto qui sul forum se non capisci qualcosa. E non scoraggiarti se all'inizio non capisci una mazza. Partire non è affatto semplice.
Assolutamente d'accordo.
Considerando i tool e gli SDK ufficiali forniti da Google e assumendo che tu voglia creare una applicazione completa con 1 singolo linguaggio, per quanto riguarda android puoi usare:

- Java con l'SDK
- C/C++ con l'NDK

il pregio di C e C++ è che sono altamente portabili, praticamente solo Android e il Kindle usano ancora Java nel mondo consumer ad alta diffusione.

è anche possibile invocare codice Java da C/C++ e viceversa ma questo è un altro topic per quando vorrai imparare più di un linguaggio o avrai motivi per farlo.

nota che moltissime delle API ufficiali Android vengono implementate soltanto in Java e il più delle volte vieni comunque forzato ad usare codice Java anche se usi l'NDK.

Consiglierei Java per iniziare, anche se oltre ad Android non userai Java per molto altro, ma ha il pregio di essere un linguaggio popolare nel mondo dell'educazione e ci sono tantissime risorse per questa tecnologia.

Online trovi qualche guida in italiano, moltissime risorse in inglese, sia libri che altro, tutto dipende da cosa cerchi e in che lingua, questo è un corso facile da seguire e buono per chi inizia http://www.html.it/guide/guida-java/ .
Hai tirato fuori addirittura C++ e NDK. In pratica a chi ha bisogno di una mano hai offerto la corda da mettere al collo. :D
Evita linguaggi di scripting come Python,
Python è un linguaggio. Nato come scripting, ma è abbastanza general purpose ormai.
sono inutili ai fini di quello che ti proponi di fare,
Se guardi sopra ho appena fornito una soluzione ai suoi problemi, proprio basata su Python.
inoltre questa famiglia di linguaggi è tipicamente una brutta scelta per illustrare concetti quali la forte tipizzazione,
"Casualmente" Python è un linguaggio a forte tipizzazione. Sempre che tu conosca il significa di questo concetto, ovviamente...
o il meccanismo dei tipi in generale, e tutti i concetti accessori come l'overload e le chiamate a funzioni.
Quale sarebbero i problemi qui? Esponi pure, perché non è affatto chiaro.
A meno che Python non ti serva, della parte teorica che Python ti può dare non te ne fai assolutamente nulla e anzi può essere altamente deviante come la "keyword" self in Python che "keyword" non è .
Che keyword non è, appunto. A questo punto la domanda sorge spontanea: le tue "conoscenze" di Python le hai apprese su Topolino? :asd:

Impara a parlare delle cose che conosci, perché altrimenti fai danni. Grossi. Specialmente se cerchi di "aiutare" qualcuno, perché altrimenti coi tuoi "consigli" gli stai dando una mano a scavarsi la fossa.

francolol
13-07-2014, 14:58
Visto che sei ancora alla linea di partenza comincia da qui: CS unplugged http://www.csunplugged.org (nella colonna a fianco c'è la versione italiana). È un libro usato alle elementari/medie per insegnare informatica senza usare linguaggi di programmazione o computer. È un buon punto di partenza per cominciare ad entrare nella mentalità giusta.

Le basi le puoi imparare usando un linguaggio qualsiasi ma in genere quali interpretati di alto livello come Python sono i migliori per cominciare. Altri linguaggi come Java o C hanno sintassi complesse che possono confondere oppure ti costringono a conoscere dettagli tecnici del funzionamento dei pc.

Anche se il tuo obbiettivo è Android per ora ti consiglio di lasciar perdere Java e continuare con Python. "Pensare da informatico" http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm è stato consigliato più volte qui sul forum.

Per concludere. Non forti scrupoli a chiedere aiuto qui sul forum se non capisci qualcosa. E non scoraggiarti se all'inizio non capisci una mazza. Partire non è affatto semplice.



Innanzitutto grazie mille per le risposte esaurienti, seguirò il tuo consiglio e mi darò a python ora vedo di leggermi entro oggi il pdf che mi hai postato (che tra l'altro, per lo sguardo a volo che gli ho dato, sono quelle cose proprie base cui, a volte, un neofita manco gli da tanta importanza quindi grazie) e poi ricomincio python credo da 0 in modo da correggere anche eventuali errori appresi dai video. Grazie mille per la disponibilità, se avete guide e qualsiasi cosa possa aiutarmi o ritenete che uno alle prime armi debba conoscere non esitate a postare :D

Hybr1d97
14-07-2014, 21:32
Dipende dalle basi che hai. A quanto mi pare di aver capito, la tua esperienza si basa sul semplice "guarda video e fai quello che dicono", ma copiando funzioni a pappagallo non credo che ti renderai mai conto di ciò che fai.

Perciò, apparte il fatto che prima ancora di lavorare su Android dovresti avere almeno delle sufficienti conoscenze di Java per la programmazione e di XML per il layout (anche se può bastare HTML), prima che tu cominci a programmare con Java devi innanzitutto imparare a programmare.
Generalmente si parte senza nessun linguaggio, cerca un po' di famliarizzare con pseudocodifica, partendo dai problemi più semplici, come ad esempio il fattoriale (il fattoriale di n è il prodotto di tutti i numeri da 1 a n), e scomponendoli con i diagrammi di flusso (ad esempio proprio il fattoriale è utile a capire come si comporta il flusso del programma a livello di loop).
Poi fai un po' di stretching mentale, prova ad esempio a fare lo stesso fattoriale non più con le iterazioni ma con le ricorsioni. Insomma, ci sono davvero tante cose da fare per entrare nella prospettiva della programmazione, devi aprire la mente ad un metodo di ragionamento abbastanza complicato per chi è alle prime armi.

Fatto ciò, quando sarai capace almeno di comprendere ordinamenti come bubble-sort (e non a pappagallo!) puoi provare con un linguaggio di programmazione. E, tralasciando quello che tu hai imparato a quanto pare senza criteri, la scelta del primo linguaggio è molto importante.
Io ti consiglierei di iniziare o con C++ o con Java. Con il primo c'è davvero tanto da studiare, hai sia la programmazione procedurale del C sia quella a oggetti di Java, con aggiunte rispetto al primo come le classi, i template, ecc. e rispetto al secondo come la gestione della memoria. E' molto più complicato di Java, ma sappi che ad una maggiore complessità di gestione equivale una più elevata consapevolezza di ciò che si sta facendo.
Altrimenti parti con Java, in cui "everything is an object". Più semplice per chi è alle prime armi, ti toglie il peso della gestione della memoria e altro, ed è il linguaggio che più di tutti ti serve per Android. A te la scelta. Spero di essere stato esaustivo :D

(Un consiglio: qualunque linguaggio tu scelga, le funzioni basilari, come ad esempio la potenza o la concatenazione di stringhe, prova a riscriverle tu stesso ragionando un pochino. Solo quando ti usciranno potrai allora usare quelle già definite nelle librerie.)

ingframin
14-07-2014, 23:07
Generalmente si parte senza nessun linguaggio, cerca un po' di famliarizzare con pseudocodifica,
Ma perché? Io ho iniziato col BASIC, niente pseudocodice... Partendo senza insegnante è meglio un linguaggio in modo da avere un riscontro diretto della bontà del ragionamento...


... tralasciando quello che tu hai imparato a quanto pare senza criteri, la scelta del primo linguaggio è molto importante.
Io ti consiglierei di iniziare o con C++
Devi imparare a guidare, inizia con una Formula 1... :doh:
Inoltre la scelta del primo linguaggio non la vedo così fondamentale.

o con Java. Con il primo c'è davvero tanto da studiare, hai sia la programmazione procedurale del C sia quella a oggetti di Java, con aggiunte rispetto al primo come le classi, i template, ecc. e rispetto al secondo come la gestione della memoria. E' molto più complicato di Java, ma sappi che ad una maggiore complessità di gestione equivale una più elevata consapevolezza di ciò che si sta facendo.

No, ti dà un sacco di gatte da pelare... il C++ non è fatto per i principianti, è fatto per chi già ha solide basi e sa quello che fa.
Prima di gestirsi la memoria a manina uno dovrebbe capire cosa è la memoria e come funziona...

Altrimenti parti con Java, in cui "everything is an object". Più semplice per chi è alle prime armi, ti toglie il peso della gestione della memoria e altro, ed è il linguaggio che più di tutti ti serve per Android. A te la scelta. Spero di essere stato esaustivo :D
Java non è una cattiva scelta anche se secondo me python è molto meglio, hai meno robaccia che non capisci quando cominci. In ogni caso mi permetto di suggerire l'ottimo "concetti di informatica e fondamenti di Java" di Cay Horstman e Gary Cornell, oppure il libro di Deitel e Deitel "Programmazione Java, Fondamenti"

(Un consiglio: qualunque linguaggio tu scelga, le funzioni basilari, come ad esempio la potenza o la concatenazione di stringhe, prova a riscriverle tu stesso ragionando un pochino. Solo quando ti usciranno potrai allora usare quelle già definite nelle librerie.)

Mah, si e no... non concordo al 100% ma non sono cattivi consigli.

Sono più d'accordo con Cesare riguardo python.
Se ti piace un approccio più "vecchia scuola":
http://www.freebasic.net/
http://www.freepascal.org/
http://www.gigamonkeys.com/book/ => http://www.clisp.org/

Hybr1d97
14-07-2014, 23:22
Se uno vuole imparare a gestire la memoria è ovvio che deve prima studiarsela, infatti c++ lo consiglio proprio perchè spinge a studiarti l'architettura della macchina e da lì capisci parecchie cose. Riguardo il primo linguaggio, nella nostra scuola abbiamo tutti iniziato con C e C++ ed io non ho mai avuto probemi. Ovvio che ci vuole dedizione. Oltretutto sarà pure una formula 1, ma nessuno ti obbliga ad andare a 300. Si parte dalle basi, di semplice comprensione, e per le cose più avanzate ci vuole più studio. Dov'è la novità? È così dappertutto. Non a caso C e C++ li insegnano molto spesso per primi.

Riguardo le funzioni, scrivendoti da solo delle semplici funzioni acquisisci maggiore familiarità col linguaggio e ti alleni anche.

cdimauro
15-07-2014, 05:51
Se uno deve imparare a camminare non gli si dice di allenarsi per battere Hussein Bolt ai 100 metri.

Python è l'ideale per iniziare e farsi per bene le ossa. Per rompersele c'è sempre tutto il tempo, dopo.

francolol
15-07-2014, 09:34
Sono d'accordo sul fatto di imparare le basi dell'informatica prima della programmazione (anche se questa, in effetti, mi da un'idea di cosa e come io stia facendo, ad esempio con python ho avuto modo di avere soddisfazioni già solo con 4/5 istruzioni che seppur poche mi hanno permesso di creare quelle righe che per me cmq sono un passo avanti). Quello che vi chiedi è dirmi appunto cosa devo imparare come basi, io faccio il liceo classico quindi potrete capire che ad informatica sto a 0. Per ora ho letto il pdf sopra postato( numeri binari, compressione, quick sort ed altri spiegati in modo elementare). Se anche non avete materiale a disposizione anche un elenco di roba che pensate io dovrei conoscere mi andrebbe bene, poi vedrò io di recuperare materiale

Hybr1d97
15-07-2014, 15:45
Se uno deve imparare a camminare non gli si dice di allenarsi per battere Hussein Bolt ai 100 metri.

Infatti se noti gli ho detto di passare prima un bel po' di tempo tra pseudocodifica e flowchart :) che senso ha iniziare subito con un linguaggio di programmazione? Devi prima imparare a ragionare, e farlo sin da subito stando dietro alle regole di sintassi non aiuterà certo. Poi eh, ognuno è libero di far ciò che vuole. Comunque, riguardo al linguaggio, non vedo dove stia tutta sta gran difficoltà di C++ nell'imparare le basi, visto che la sintassi in quel caso è pressochè identica a quella di Java. Al contrario di quanto fai capire, nessuno lo obbliga a studiarsi i contenitori prima ancora di saper usare cin e cout ;)

ingframin
16-07-2014, 10:31
Sono d'accordo sul fatto di imparare le basi dell'informatica prima della programmazione (anche se questa, in effetti, mi da un'idea di cosa e come io stia facendo, ad esempio con python ho avuto modo di avere soddisfazioni già solo con 4/5 istruzioni che seppur poche mi hanno permesso di creare quelle righe che per me cmq sono un passo avanti). Quello che vi chiedi è dirmi appunto cosa devo imparare come basi, io faccio il liceo classico quindi potrete capire che ad informatica sto a 0. Per ora ho letto il pdf sopra postato( numeri binari, compressione, quick sort ed altri spiegati in modo elementare). Se anche non avete materiale a disposizione anche un elenco di roba che pensate io dovrei conoscere mi andrebbe bene, poi vedrò io di recuperare materiale

Se vedi la mia risposta ti ho indicato due libri per Java:
http://books.google.be/books/about/Programmazione_Java_Fondamenti.html?id=sye1QuXHGBYC&redir_esc=y

http://books.google.be/books?id=BWkHSQAACAAJ&dq=concetti+di+informatica+e+fondamenti+di+java&hl=it&sa=X&ei=PkLGU9qsNfPN7Aan4YCgAw&ved=0CB8Q6AEwAA

C++:
http://www.amazon.it/Fondamenti-programmazione-Harvey-M-Deitel/dp/8850323867/ref=sr_1_sc_1?ie=UTF8&qid=1405502117&sr=8-1-spell&keywords=c%2B%2B+dietel

Python:
http://www.amazon.it/Imparare-Python-Mark-Lutz/dp/8848125956/ref=sr_1_1?ie=UTF8&qid=1405502162&sr=8-1&keywords=imparare+python
http://www.amazon.it/Programmare-Python-Guida-completa-Marco/dp/8868950243/ref=sr_1_3?ie=UTF8&qid=1405502224&sr=8-3&keywords=python

Comprati uno di questi libri e comincia a studiare.

In generale quello che devi imparare è come esprimere quello che vuoi fare in un linguaggio formale e strutturato, quindi molto meno libero di un linguaggio umano.

Una volta che hai capito come esprimerti in questi linguaggi sei in grado di scrivere programmi -> traduzione in linguaggio formale di algoritmi.
Non è una cosa lunga eh, tipicamente si va di pari passo. Implementare semplici algoritmi è anche una scusa per imparare il linguaggio.
Quello che ti suggeriva Hybr1d97 di scriverti le tue funzioni per stringhe e operazioni matematiche non è una cattiva idea.
Mano mano che vai avanti imparerai gli algoritmi di ordinamento e ricerca e la manipolazione di vettori di dati (Array).
Da li in poi sei esperto abbastanza da addentrarti nei meandri della programmazione senza troppi problemi. Poi cose più avanzate sono l'architettura dei calcolatori, le reti, ecc... ma queste cose richiedono conoscenze accessorie che tipicamente impari all'università.
Se ti interessa la struttura del computer ti posso suggerire due libri:
http://www.amazon.it/Reti-logiche-calcolatore-Fabrizio-Luccio/dp/8833954870/ref=sr_1_13?s=books&ie=UTF8&qid=1405502845&sr=1-13&keywords=reti+logiche

http://www.amazon.it/Architettura-dei-calcolatori-approccio-strutturale/dp/8871929624/ref=sr_1_1?s=books&ie=UTF8&qid=1405502889&sr=1-1&keywords=architettura+dei+calcolatori

Mentre per le reti:
http://www.amazon.it/Reti-di-calcolatori-Andrew-Tanenbaum/dp/8871926404/ref=sr_1_1?s=books&ie=UTF8&qid=1405502923&sr=1-1&keywords=reti+di+calcolatori

Però questi sono argomenti avanzati, aspetta a comprare questi libri di reti e di architettura dei calcolatori.

Se leggi uno di quei libri che ti ho postato arrivi già ad un ottimo livello.
Per qualunque cosa critica posta pure sul forum. Qui si battibecca e si discute animatamente ma è normale, gli informatici/programmatori hanno un caratteraccio in genere :Prrr: :D ;)
L'aiuto a chi è alle prime armi comunque non lo si nega mai.
Ti suggerisco anche di frequentare i newsgroup del gruppo it.comp.*, li impari tante cose.

Hybr1d97
16-07-2014, 12:35
Una volta che hai capito come esprimerti in questi linguaggi sei in grado di scrivere programmi -> traduzione in linguaggio formale di algoritmi.
Non è una cosa lunga eh, tipicamente si va di pari passo. Implementare semplici algoritmi è anche una scusa per imparare il linguaggio.
Quello che dicevo io.

Ovviamente prima di comprare quei libri sulle architetture fatti un giro su internet e cercati dapprima qualche slide sui sistemi operativi e gestione di processi, memoria, file-system ed I/O, poi trovati qualche pdf non troppo dettagliato che li spieghi un po' meglio. Insomma, cerca delle "introduzioni" a questi argomenti, che sono non poco complessi.

Freaxxx
16-07-2014, 13:41
Utilizza Python, come ti è stato consigliato, e per sviluppare su Android usa Kivy (/kivy.org). Con Kivy hai il vantaggio di esportare la tua applicazione anche su iOS, oltre all'intrinseca facilità di sviluppo.

Ma prima fatti le ossa con Python: impara a programmare.

Assolutamente d'accordo.

Hai tirato fuori addirittura C++ e NDK. In pratica a chi ha bisogno di una mano hai offerto la corda da mettere al collo. :D

Python è un linguaggio. Nato come scripting, ma è abbastanza general purpose ormai.

Se guardi sopra ho appena fornito una soluzione ai suoi problemi, proprio basata su Python.

"Casualmente" Python è un linguaggio a forte tipizzazione. Sempre che tu conosca il significa di questo concetto, ovviamente...

Quale sarebbero i problemi qui? Esponi pure, perché non è affatto chiaro.

Che keyword non è, appunto. A questo punto la domanda sorge spontanea: le tue "conoscenze" di Python le hai apprese su Topolino? :asd:

Impara a parlare delle cose che conosci, perché altrimenti fai danni. Grossi. Specialmente se cerchi di "aiutare" qualcuno, perché altrimenti coi tuoi "consigli" gli stai dando una mano a scavarsi la fossa.

confermo quanto detto, la tipizzazione in Python è equivalente a quella che hai in Javascript, è egualmente "forte" .

per il resto, visto che Python è così fortemente tipizzato, mi illustri cosa accade ad una funzione con una interfaccia che accetta il tipo X quando passo il tipo Y ? come in Python posso fare un check a runtime tra 2 istanze o classi di 2 tipi diversi ?

poi vediamo come Python è tipizzato e chi sta aiutando chi.

VICIUS
16-07-2014, 15:19
confermo quanto detto, la tipizzazione in Python è equivalente a quella che hai in Javascript, è egualmente "forte" .
In Python se provi ad accedere ad un attributo che non esiste viene lanciata una eccezione ed il programma crasha. In JavaScript viene semplicemente ritornato undefined e si continua come niente fosse accaduto. Non mi sembra proprio la stessa cosa.

per il resto, visto che Python è così fortemente tipizzato, mi illustri cosa accade ad una funzione con una interfaccia che accetta il tipo X quando passo il tipo Y ?
Viene lanciata una eccezione. Una volta associato un tipo ad una variabile questo non cambia. Se provi a dividere per 2 una stringa questa non si trasforma magicamente in un numero come può accadere in altri linguaggi come JavaScript.

come in Python posso fare un check a runtime tra 2 istanze o classi di 2 tipi diversi ?
Non è roba che si fa spesso ma non è impossibile. Ci sono funzioni come type(), isinstance() ecc.

cdimauro
16-07-2014, 19:19
confermo quanto detto, la tipizzazione in Python è equivalente a quella che hai in Javascript, è egualmente "forte" .

per il resto, visto che Python è così fortemente tipizzato, mi illustri cosa accade ad una funzione con una interfaccia che accetta il tipo X quando passo il tipo Y ? come in Python posso fare un check a runtime tra 2 istanze o classi di 2 tipi diversi ?

poi vediamo come Python è tipizzato e chi sta aiutando chi.
VICIUS ha risposto già a tutto. Per il resto non fai che dimostrare continuamente la tua ignoranza in termini di letteratura informatica e di Python.

T'ho già detto che sarebbe meglio che parlassi di cose che conosci, ma anche a livello di C++ hai dimostrato di essere messo male...

van9
17-07-2014, 13:51
confermo quanto detto, la tipizzazione in Python è equivalente a quella che hai in Javascript, è egualmente "forte" .

per il resto, visto che Python è così fortemente tipizzato, mi illustri cosa accade ad una funzione con una interfaccia che accetta il tipo X quando passo il tipo Y ? come in Python posso fare un check a runtime tra 2 istanze o classi di 2 tipi diversi ?

poi vediamo come Python è tipizzato e chi sta aiutando chi.

Ma conferma de che, mah. Questo è Javascript (dal minuto 1:20) https://www.destroyallsoftware.com/talks/wat . Me lo passarono dicendo fa ridere. A me fa piangere piuttosto.
Dimostra dunque che Python si comporta a quel modo, oppure ritira quanto detto.


Python è un linguaggio unityped, dotato di latent typing, dynamically (run-time) checked.
Il classico esempio di linguaggio dotato (della maggior parte) di queste caratteristiche è Lisp.
La programmazione in Python poi non si basa propriamente ne' sui tipi ne' sui valori ma sugli oggetti, i tags che li caratterizzano e i protocolli tra i diversi tipi di oggetti (built-in o creati dall'utente che siano).

Segue che quello che hai chiesto non ha molto senso, ad esempio:

def f(x): pass

Le chiamate f(1) e f("") ritornano None e non producono errori, per la descrizione di cui sopra e va bene così.

Il modello a cui ti riferisci te è quello dei linguaggi typed dotati di type system in senso classico, dove questo è si una proprietà sintattica (statica) del linguaggio stesso. Programmando per tipi con il supporto di un sistema di manifest type checking (spesso anche in congiunzione con type inference) puoi si specificare cosa una funzione s'aspetta come argomento, e averne la verifica statica (a compile-time o dove altro sia).
La famiglia ML (SML/OCaml/Haskell/<younameit>) è quella di riferimento qui (essendo i vari C++/Java/C#/etc. dotati di type systems castrati quando non rattoppati e decisamente meno espressivi).

Esempio:

fun f x :int = x;

f 1 ritorna 1, f "" ritorna errore di tipo.


In breve, sei partito male mischiando mele con pere e non puoi aspettarti che gli uni si comportino come gli altri (e viceversa). Prima si studiano modelli e linguaggi e li usano estensivamente sul campo, poi (forse) si possono fare confronti sensati.

Sul fatto che sia o meno adatto ad insegnare o "chi sta aiutando chi" (e-che-vor-dì?), informati sul programma d'insegnamento di grande successo più che decennale di Matthias Felleisen (tra i più noti e rispettati esperti di teoria e linguaggi di programmazione al mondo), sulla storia di MIT, Berkeley et similia e chiedi anche ai tanti che come me hanno imparato con un buon linguaggio dotato di latent typing e dynamic checking (Lisp nel mio caso) e non sembrano aver avuto alcun problema, anzi.


p.s. dimenticavo: ricordati che oltre a contattare ISO/ANSI per quel fatto che tu sai, devi pure avvertire questo signore http://www.stroustrup.com/bs_faq2.html#simple-program http://www.stroustrup.com/compilers.html che ha il sito pieno di esempi di programmi (a detta tua) non abbastanza portabili - good luck with that.

p.s.2 [edit - eliminato inutile paternale fuori posto]
L'informatica è una cosa seria.
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html
http://www.cs.utexas.edu/users/EWD/OtherDocs/To%20the%20Budget%20Council%20concerning%20Haskell.pdf


It is not only the violin that shapes the violinist, we are all shaped by the tools we train ourselves to use, and in this respect programming languages have a devious influence: they shape our thinking habits. This circumstance makes the choice of first programming language so important.

cdimauro
17-07-2014, 22:24
Notizia fresca:

Python bumps off Java as top learning language

Eight out of the top 10 universities now use Python to introduce programming (http://www.javaworld.com/article/2452940/learn-java/python-bumps-off-java-as-top-learning-language.html)

Da notare la fonte, non proprio di parte pythonistica. ;)

Tutti pazzi (per Python)? Non credo. :cool:

francolol
21-07-2014, 19:34
Rieccomi alla carica!
Inizio col dire che siete stati utilissimi e che ho appena finito il libro consigliatomi (Pensare da informatico), che ho trovato semplice al punto giusto e soprattutto approfondito. Vi chiedo ora se avete altri testi da propormi per rinforzare le conoscenze acquisite soprattutto nell'aggiornamento alla versione 3.4 visto che nell'utilizzo del libro sono stato costretto ad usufruire della 2.7 ove comunque ho trovato errori di sintassi dovuti alla diversa versione del programma(il libro usa la 2.3).
Inoltre vorrei chiedervi qualche manuale sulla creazione di interfacce grafiche con python. Sinceramente sto iniziando a programmare una mia piccola idea( niente di che una semplice web application da usare tra amici) ma prima di iniziare e poi rimandare per mancanza di conoscenze vorrei prima approfndire quest'ultime :read:
Grazie mille di nuovo a tutti :sofico:

cdimauro
22-07-2014, 06:55
Rieccomi alla carica!
Inizio col dire che siete stati utilissimi e che ho appena finito il libro consigliatomi (Pensare da informatico), che ho trovato semplice al punto giusto e soprattutto approfondito. Vi chiedo ora se avete altri testi da propormi per rinforzare le conoscenze acquisite soprattutto nell'aggiornamento alla versione 3.4 visto che nell'utilizzo del libro sono stato costretto ad usufruire della 2.7 ove comunque ho trovato errori di sintassi dovuti alla diversa versione del programma(il libro usa la 2.3).
Allora è arrivata l'ora di Learning Python di Lutz. :p
Inoltre vorrei chiedervi qualche manuale sulla creazione di interfacce grafiche con python. Sinceramente sto iniziando a programmare una mia piccola idea( niente di che una semplice web application da usare tra amici) ma prima di iniziare e poi rimandare per mancanza di conoscenze vorrei prima approfndire quest'ultime :read:
Grazie mille di nuovo a tutti :sofico:
Puoi provare con kivy (kivy.org), e l'applicazione la puoi esportare anche per iOS e Android.

Se invece vuoi cimentarti soltanto col desktop, puoi usare PySide, che un è un wrapper per le Qt, che è dotato anche di QTDesigner per modellare l'interfaccia grafica.

Se vuoi rimanere esclusivamente in ambito Windows puoi usare IronPython e sfruttare le WPF con XAML per realizzare il tutto, ed è personalmente quello che ho fatto tempo fa.

francolol
22-07-2014, 11:31
Allora è arrivata l'ora di Learning Python di Lutz. :p

Puoi provare con kivy (kivy.org), e l'applicazione la puoi esportare anche per iOS e Android.

Se invece vuoi cimentarti soltanto col desktop, puoi usare PySide, che un è un wrapper per le Qt, che è dotato anche di QTDesigner per modellare l'interfaccia grafica.

Se vuoi rimanere esclusivamente in ambito Windows puoi usare IronPython e sfruttare le WPF con XAML per realizzare il tutto, ed è personalmente quello che ho fatto tempo fa.


Sto cercando da un'ora ormai ma costa 60€ :cry: :cry: :cry:
Alternative più economiche? Comunque se mi dici che ne vale la pena inizierò a risparmiare e lo comprerò verso ottobre :mad:
Per quanto riguarda la mia piccola app avrei pensato di usare PySide per la versione desktop e Kivy per quella "smart" in modo da poter ottimizzare le due versioni al meglio, me lo sconsigli o secondo te è una soluzione valida?
Ultima cosa, dove posso trovare una guida all'uso di kivy per imparare le varie istruzioni?
Grazie ancora :D :help:


EDIT. sto cercando di installare kivy ma non riesco a farlo partire, ho installato python 3.4.1 e con kivy(1.8) ho scaricato la versione 3.3 che pero non presenta l'idle! Ora se cerco di importare kivy naturalmente non funge con la 3.4. Come faccio? Non prendetemi a male parole ^^'
Edit 2: Per ora ho risolto creando il file py con la versione 3.4 e poi "inviandolo a" kivy per farlo partire :)

van9
22-07-2014, 15:55
Rieccomi alla carica!
Inizio col dire che siete stati utilissimi e che ho appena finito il libro consigliatomi (Pensare da informatico), che ho trovato semplice al punto giusto e soprattutto approfondito. Vi chiedo ora se avete altri testi da propormi per rinforzare le conoscenze acquisite soprattutto nell'aggiornamento alla versione 3.4 visto che nell'utilizzo del libro sono stato costretto ad usufruire della 2.7 ove comunque ho trovato errori di sintassi dovuti alla diversa versione del programma(il libro usa la 2.3).
Inoltre vorrei chiedervi qualche manuale sulla creazione di interfacce grafiche con python. Sinceramente sto iniziando a programmare una mia piccola idea( niente di che una semplice web application da usare tra amici) ma prima di iniziare e poi rimandare per mancanza di conoscenze vorrei prima approfndire quest'ultime :read:
Grazie mille di nuovo a tutti :sofico:

La versione originale corrente http://www.greenteapress.com/thinkpython è la migliore prossima mossa secondo me. Al volo noto:

a) aiuterà il tuo inglese (necessario) e sarà meno traumatico che partire in questo con un nuovo testo;
aa) inglese migliorato = acquisto dei libri in lingua, che costano meno di quelli tradotti (spesso male);
b) ha buoni esercizi a fine capitolo;
c) ha dei casi di studio, ad esempio questo http://www.greenteapress.com/thinkpython/html/thinkpython020.html tratta anche di GUI;
d) ha molto più codice interessante da studiare e modificare, es. "Lumpy" e gli altri in http://www.greenteapress.com/thinkpython/swampy e http://www.greenteapress.com/thinkpython/code ;
e) il libro è molto migliorato nel tempo, meno ripetizioni e stile ancora più chiaro e assiomatico (si proprio nel senso matematico) della presentazione, cosa assai utile e rara nei libri d'informatica;
f) una seconda attenta lettura ci vuole sempre, soprattutto quando i libri sono scritti bene come questo. Esempio: http://www.greenteapress.com/thinkpython/html/thinkpython007.html#toc70 e http://www.greenteapress.com/thinkpython/html/thinkpython007.html#toc71
contengono diverse idee importantissime che si rivedranno ancora e ancora.

Per le GUI, la mia idea è che tra il libro, la doc di Python e cose come http://thinkingtkinter.sourceforge.net puoi imparare più velocemente ed avere un prototipo funzionante della tua idea che non mettendoti ad installare e imparare altro di più avanzato/per il momento complicato. Dopo portarlo su altro sarà facile e capirai qt/kivy in una frazione del tempo ovviamente.

francolol
22-07-2014, 16:10
Beh leggermi il libro in inglese sarà un pò piu difficile ma come ogni cosa basta prenderci la mano ( e non sono manco cosi messo male in lingua, quindi si può fare). Oggi ho provato a buttar giù un pò di righe per la mia idea ma non sono affatto pronto, troppa confusione anche con poche classi ed alla fine ho cancellato tutto:sob: (sebbene abbia svolto tutti gli esercizi del libro consigliatomi) quindi mi devo esercitare con qualcosa di "guidato" per il momento.
Mi sa che per il momento debba lasciare da parte il comparto grafico e incentrarmi sul codice semplice. Se avete altri consigli per me sono sempre ben accetti :ave:

cdimauro
22-07-2014, 17:19
Fai bene a seguire il consiglio di van9. L'inglese è molto importante, ed è giocoforza necessario impararlo se vuoi lavorare (ma anche smanettare) in quest'ambiente.

francolol
22-07-2014, 17:30
Fai bene a seguire il consiglio di van9. L'inglese è molto importante, ed è giocoforza necessario impararlo se vuoi lavorare (ma anche smanettare) in quest'ambiente.

Eh l'ho notato cercando alcune istruzioni in internet sul linguaggio, o l'inglese o puoi anche spegnere il computer...

van9
22-07-2014, 20:40
Eh l'ho notato cercando alcune istruzioni in internet sul linguaggio, o l'inglese o puoi anche spegnere il computer...

Praticamente si. Unica alternativa è saper leggere il francese. Con quello potresti leggere d'informatica ai massimi livelli da subito senza (improbabili) traduzioni di mezzo e imparando direttamente da alcuni tra i migliori al mondo. Certo poi l'inglese dovresti comunque studiarlo.

francolol
29-07-2014, 20:46
Continuiamo! Allora, come detto sto sviluppando il mio programma ed ho definito le funzioni base e le classi che questo deve avere. Attualmente sto imparando a creare l'interfaccia grafica attraverso Tkinter(inizialmente volevo usare Kivy ma meglio procedere per piccoli passi).
In pratica ora mi serve conoscere come creare un software multiutente a cui anche i miei amici, attraverso username e password possano accedere esclusivamente al loro utente nel gioco quindi (penso io) creazione di database e webapp. Potete consigliarmi materiale per studiare ed imparare questi due aspetti della programmazione?

Grazie ancora mille a tutti :)

Ps. Per i database ho visto SQL in giro ma onestamente non so da dove dovrei cominciare
PPs.Intanto ho preso il pdf di Learning python di Lutz cosiccé ogni qualvolta ho dubbi mi approfondisco la sezione che mi interessa.

cdimauro
30-07-2014, 06:58
Per le webapp ti basta questo (http://webpy.org/). Da notare la semplicità dell'esempio di webapp. Comunque in quel sito trovi qualunque informazione, e ovviamente molto più complesse.

Per i database non saprei cosa consigliarti. Io sono "cresciuto" con gli splenditi manuali di Interbase della Borland, e sono poi confluito su Firebird (http://firebirdsql.org/)(la versione open source, poi distaccatosi dal progetto Interbase). Qui (http://www.firebirdsql.org/en/reference-manuals/) trovi un sacco di documentazione (fra cui i manuali di InterBase), ma non saprei dirti cosa usare per imparare come funzionano i database.
Comunque qui (http://www.firebirdsql.org/file/documentation/drivers_documentation/python/fdb/index.html) trovi il driver per usare Firebird con Python, e secondo me con QuickStart Guide (http://www.firebirdsql.org/file/documentation/drivers_documentation/python/fdb/getting-started.html#quick-start-guide) te ne esci velocemente per quello che devi farci.

francolol
30-07-2014, 11:24
Grazie, entro stasera cerco di guardarli entrambi. Intanto ho abbandonato tkinter semplicemente perche ho provato PySide ed avendo trovato anche questa guida (http://zetcode.com/gui/pysidetutorial/)
ho deciso di utilizzarlo per il QtCreator(o Designer non ho ben capito) che dovrebbe semplificarmi di gran lunga il lavoro. Puoi indicarmi "la retta via" anche per questo? ^^

cdimauro
30-07-2014, 23:29
Non ho esperienza diretta, ma ho trovato una pagina, qui (http://pythonthusiast.pythonblogs.com/230_pythonthusiast/archive/1358_developing_cross_platform_application_using_qt_pyqt_and_pyside__gui_application_development-part_5_of_5.html), che spiega tutto.