|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2014
Messaggi: 142
|
Basi programmazione
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 ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
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/...l-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. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
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 è . Ultima modifica di Freaxxx : 12-07-2014 alle 00:12. |
![]() |
![]() |
![]() |
#4 | ||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Ma prima fatti le ossa con Python: impara a programmare. Quote:
Quote:
![]() Quote:
Quote:
Quote:
Quote:
Quote:
![]() 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.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||||
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Feb 2014
Messaggi: 142
|
Quote:
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 ![]() |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2014
Messaggi: 63
|
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 ![]() (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.) Ultima modifica di Hybr1d97 : 14-07-2014 alle 21:35. |
![]() |
![]() |
![]() |
#7 | |||||
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Quote:
Quote:
![]() Inoltre la scelta del primo linguaggio non la vedo così fondamentale. Quote:
Prima di gestirsi la memoria a manina uno dovrebbe capire cosa è la memoria e come funziona... Quote:
Quote:
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/
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
|||||
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: May 2014
Messaggi: 63
|
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. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
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.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Feb 2014
Messaggi: 142
|
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
__________________
Carbide 300r, Asrock H87 Pro4, I5-4670 + Hyper 212 evo, R9-290 Tri-x, Corsair VengeanceLP
Schermo: LG 23MA53D Mouse & Tastiera: G402 + G910 Mercatino: Feedback positivi: Simpsons |
![]() |
![]() |
![]() |
#11 | |
Member
Iscritto dal: May 2014
Messaggi: 63
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Quote:
http://books.google.be/books/about/P...YC&redir_esc=y http://books.google.be/books?id=BWkH...ed=0CB8Q6AEwAA C++: http://www.amazon.it/Fondamenti-prog...c%2B%2B+dietel Python: http://www.amazon.it/Imparare-Python...mparare+python http://www.amazon.it/Programmare-Pyt...eywords=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-ca...s=reti+logiche http://www.amazon.it/Architettura-de...ei+calcolatori Mentre per le reti: http://www.amazon.it/Reti-di-calcola...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 ![]() ![]() ![]() 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.
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
|
![]() |
![]() |
![]() |
#13 | |
Member
Iscritto dal: May 2014
Messaggi: 63
|
Quote:
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. |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
Quote:
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. |
|
![]() |
![]() |
![]() |
#15 | ||
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Quote:
Non è roba che si fa spesso ma non è impossibile. Ci sono funzioni come type(), isinstance() ecc. |
||
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
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...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#17 | ||
Member
Iscritto dal: Nov 2012
Messaggi: 126
|
Quote:
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/...x/EWD1036.html http://www.cs.utexas.edu/users/EWD/O...%20Haskell.pdf Quote:
Ultima modifica di van9 : 17-07-2014 alle 14:21. |
||
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Notizia fresca:
Python bumps off Java as top learning languageDa notare la fonte, non proprio di parte pythonistica. ![]() Tutti pazzi (per Python)? Non credo. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Feb 2014
Messaggi: 142
|
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 ![]() Grazie mille di nuovo a tutti ![]() |
![]() |
![]() |
![]() |
#20 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
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.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:11.