View Full Version : Imparare a programmare - Consigli pratici per evitare il volo dalla finestra
Salve gente :)
Probabilmente questa domanda sarà stata fatta milioni di volte e con molte risposte. Ho vagato in giro per il web ma non ho trovato nulla che mi potesse interessare però.
Avrei una domanda molto semplice per tutti quelli che sanno programma (non importa assolutamente in che linguaggio).
La questione è facile: come si impara a programmare?
Voi come avete imparato?
Mi spiego. Posso prendere un testo che mi insegni la programmazione in Java, C++ o altro, posso seguire un corso etc, eppure, nonostante questo io trovo difficoltà nel capire come si possa imparare sul serio a fare un programma (se pur molto semplice). Entro ancora meglio nel dettaglio, almeno per quanto riguarda la mia persona.
Ho sempre voluto imparare a programmare, più che altro per passione niente di particolare, ma non ho mai avuto quella dedizione negli anni passati di mettermi lì e provare e riprovare. Negli ultimi tempi ho deciso di riprendere un po' questo discorso e mi sono avvicinato prima a Python e poi a Java. Python mi è stato molto d'aiuto nel capire i concetti basi (ha una sintassi chiarissima) poi però sono passato a Java grazie al quale, stranamente, mi sono sentito a mio agio a vagare per le classi (sarà stato grazie a Platone :stordita: ?). Ho provato diversi testi e alla fine ho utilizzato quello di Claudio De Sio che mi è semprato quello più adatto a me. Ebbene, ora entra in gioco il mio problema. Posso anche imparare tutto il libro, ma per me resta sempre teoria :( Vedo solo concetti, posso anche risolvere gli esercizi proposti, ma per me resta solo teoria che sul serio non riesco a capire come possa essere messa in pratica. E sottolineo che non è colpa del testo, perché ne ho provati altri, ho provato anche Pensare Informatico (che almeno è stato utilissimooo nel farmi entrare nell'ottica della programmazione). E' chiaro che un testo come un corso non potrà mai affrontare tutto quello che c'è da sapere. Il mio dilemma è quindi: come si fa a rendere pratico i concetti appresi? Avevo pensato di realizzare semplici giochi come la tombola o la scopa (forse quest'ultimo è un po' più complesso) ma ho serie difficoltà a comprendere il meccanismo, ecco perché ero in cerca di consigli pratici prima di abbandonare definitivamente questa esperienza che ho già messo da parte da alcuni mesi.
Spero di essere stato chiaro (cosa che dubito fortemente :D )
tecno789
21-02-2012, 14:18
Il mio dilemma è quindi: come si fa a rendere pratico i concetti appresi? Avevo pensato di realizzare semplici giochi come la tombola o la scopa (forse quest'ultimo è un po' più complesso) ma ho serie difficoltà a comprendere il meccanismo, ecco perché ero in cerca di consigli pratici prima di abbandonare definitivamente questa esperienza che ho già messo da parte da alcuni mesi.
Spero di essere stato chiaro (cosa che dubito fortemente :D )
programmare è tutt'altro che una cosa semplice. Io ti parlo proprio da studente che deve sbattersi per imparare da zero un linguaggio di programmazione mai usato prima. Infatti, come hai detto tu, il libro ti insegna molto la teoria, ma per imparare bene a programmare bisogna mettersi sul calcolatore e implementare dei propri algoritmi, fare dei programmi, giorno per giorno, senza mai stancarsi. Bisogna entrare molto nella logica, cosa non tanto semplice da fare, ma per farlo bisogna fare moltissima pratica. Ti consiglio dopo averti studiato un linguaggio di programmazione da te scelto, di metterti su pc a fare dei programmi inventati da te, oppure esercizi stessi presi dal libro. Ovviamente aspetta altre risposte di programmatori più avanzati di me :)
pabloski
21-02-2012, 14:18
Personalmente ho cominciato a programmare in basic col c64. Poi mi sono "evoluto" col pascal ( funzioni, procedure, oggetti, tutta roba che il basic del c64 non supportava ).
Da lì sono passato allo studio dell'architettura x86, tutto assembly e tante ore a provare e riprovare, sbagliare e correggere.
Poi vabbè, l'università e tutto il resto, con un pò di elettronica che mi ha aiutato a capire ulteriormente il perchè un pezzo di silicio sia in grado di ragionare.
Ma imho il tuo problema è la logica algoritmica, cioè quella parte simil-matematica che trova una soluzione per un problema.
In questo senso potrebbe venirti incontro un libro tipo il Cormen, che è 90% teoria, ma fa vedere pure in pseudocodice come mettere in pratica la teoria.
Però ti consiglio di fare qualche esempio più sostanzioso. Ad esempio cos'è della tombola che proprio non ti va giù? Perchè vedi questa netta separazione tra teoria e pratica? In fondo un algoritmo ti dice quali passi seguire per risolvere il problema tramite piccoli elementari passi. Il codice è una traduzione dell'algoritmo in un linguaggio ben determinato, ma non è che si discosta così tanto.
Oddio, ci sono libri che sembrano trattati di geometria più che libri d'informatica. Ne ho visti parecchi in vita mia e alcuni sono veramente sconclusionati ed incapaci di insegnare alcunchè.
Però penso che l'approccio ultrapratico sia il migliore. Cioè tu parti con un libro tipo questo http://web.econ.unito.it/terna/infsimeco/howtothink_ita.pdf che ti dà molto sul fronte pratico e ti fa vedere come implementa determinati algoritmi.
Dovrebbe a quel punto esserti chiaro come passare dalla teoria alla pratica.
Credo che tu abbia centrato il mio problema, credo sia proprio la logica algoritmica che mi manca o con la quale ho difficoltà.
Stavo realizzando questa estate (dopo aver letto il libro da te proprosto, Pensare Informatico) il gioco della tombola in Python. Il problema principale non è come realizzare un ciclo for (che in Python mi pare sia solo For in) o una lista o altro, il problema che avevo era proprio quello di realizzare il pensiero sotto forma di codice. Ho chiesto aiuto su un forum e vedevo che le risposte e i suggerimenti che mi venivano dati erano molto semplici, tant'è vero che qualcosa avevo fatto ma poi ho abbandonato. Credo che il mio problema principale è che penso troppo difficilmente. Per farti capire: se devo realizzare 4, anziché pensare al classico 2 + 2, penso a 1 + 1 + 1 + 1 o a 72 - 68. Credo che da lì nasca il mio principale errore. Perché per realizzare l'estrazione dei numeri ho dovuto cercare su internet un codice che mi permetteva di generare numeri casuali (e questo era anche nel libro) ma dovevo togliere anche quelli che già erano stati estratti (cosa che nel testo non era presente).
In Java ad esempio non c'ho proprio provato :D, anche se avevo "studiato" solo metà testo
Scrivi un roguelike.
ps. non ti spiego cos'è nè come devi fare per cominciare perché il punto è proprio questo: hai di fronte un problema di cui non conosci la soluzione e devi risolverlo improvvisando. Quindi cominci a cercare su internet cos'è un roguelike, ne scarichi uno magari, vedi come funziona, scegli un linguaggio e provi a fare lo stesso, ricercando ogni volta qual'è lo stato dell'arte per risolvere un determinato problema e arrivando a dei compromessi quando è troppo complicato.
Il ciclo è più o meno questo:
1) OMG cazzofigata la cosa X! La voglio rifare!
2) Ti documenti.
2a) Se puoi, rubi il codice fatto da altri.
3) Metti a punto il tutto secondo le tue esigenze.
4 .. Infinito) Risolvi i bug.
In ambito professionale funziona allo stesso modo, ma il punto 1 non lo decidi tu.
Perfetto!
Un'altra curiosità per quanto riguarda lo studio del/dei testo/i:
dite che è meglio sempre leggerlo/studiarlo tutto o imparare le basi e poi iniziare a sperimentare e in caso di necessità consultarlo?
ingframin
22-02-2012, 11:27
Metti mano al calcolatore da subito!
Non puoi imparare a suonare la chitarra leggendo un libro e poi comprando la chitarra, devi prenderla in mano e cominciare a fare le note.
Idem per il pc. hai python installato? Bene, tieni il libro a portata di mano e comincia a giocare.
Parti con programmi semplici (che ne so, una calcolatrice, un programma che cerca parole in un testo, ecc...) e aumenta la difficolta'.
Il miglior modo per imparare a ragionare e' ragionare!
Quindi sbattiti sui problemi!
Cerca di dimostrare il teorema di pitagora o risolvi un esercizio sul lancio del proiettile e magari poi traduci la soluzione in python.
Insomma... sveglia il tuo cervello che sta dormendo! :D
Insomma... sveglia il tuo cervello che sta dormendo! :D
:D :D :D
Prima stavo rivedendo tutta la roba che avevo studiato di java che nel dettaglio era: Classi ed oggetti, i metodi, le variabili, i costruttori, gli identificatori, i tipi di dati, gli array, gli operatori, i costrutti, l'incapsulamento, l'ereditarietà, il poliformismo, l'overload e l'override, il super, le classi innestate, poi stavo per imparare l'eccezioni e le asserzioni e ho mollato.
Forse se avessi fatto meno teoria e più pratica da subito non mi ritroverei in questa situazione :stordita:
tecno789
22-02-2012, 13:21
:D :D :D
Prima stavo rivedendo tutta la roba che avevo studiato di java che nel dettaglio era: Classi ed oggetti, i metodi, le variabili, i costruttori, gli identificatori, i tipi di dati, gli array, gli operatori, i costrutti, l'incapsulamento, l'ereditarietà, il poliformismo, l'overload e l'override, il super, le classi innestate, poi stavo per imparare l'eccezioni e le asserzioni e ho mollato.
Forse se avessi fatto meno teoria e più pratica da subito non mi ritroverei in questa situazione :stordita:
hai studiato troppo :D
devi fare esercizi su esercizi man mano che vai avanti, non puoi studiarti un linguaggio in modo completo senza aver fatto nulla e "solo" studiando tutto un libro.
come lo sapevo che stavo sbagliando :doh:
Domani riprendo gli appunti sperando che devo fare solo un ripasso e poi passare alla parte pratica :D
mmx[ngg]
22-02-2012, 14:57
Io ho imparato (ho imparato ?) partendo con la classica calcolatrice, che vedendola troppo complicata (avevo 11 anni), è diventata un semplice :
Danni A, Danni B, C = A*B, Fine del programma (e la prima volta è anche andato in errore..:rolleyes:)
Man mano ho incrementato la difficolatà e l'unico medo per farlo è, come ha detto shinya, porsi un problema e risolverlo. Personalmente non ho mai aperto un libro / manuale dalla prima pagina per arrivare all'ultima, semplicemente lo sfogliavo per capire come affrontare il problema che avevo davanti. E' normale che le prime volte programmi da schifo, sfruttando il 5% del linguaggio e il 200% del tuo cervello visto che non puoi utilizzare qualcosa di cui non ne conosci neanche l'esistenza ma francamente metodo migliori non ne ho visti ed è inutile riempirsi la testa di nozioni senza un fine. Al lavoro ne ho visti tanti che sembravano la Treccani ma all'atto pratico facevano pena (e parlo al passato perchè durano poco). Non sei un programmatore se conosci un linguaggio (quello è solo lo strumento per raggiungere un fine), lo diventi quando raggiungi il fine...e se possibile nel modo migliore.
Un consiglio : Java non è proprio per chi parte totalmente da 0. E' meglio utilizzare un linguaggio con meno direttive / possibilità anche perchè non devi imparare un linguaggio ma la logica che sta dietro la programmazione. Il C (quello classico) può andar bene o meglio ancora il Pascal (roba senza classi, oggetti ecc. ecc) e non pretendere di creare da subito programmi ma semplicemente algoritmi senza un contesto particolare. Prova a ordinare un'insieme di dati, a leggere un file di testo e scriverlo al contrario o ha visualizzarlo a video parola per parola ecc. ecc.
tecno789
22-02-2012, 15:02
;36970231']Il C (quello classico) può andar bene o meglio ancora il Pascal (roba senza classi, oggetti ecc. ecc) e non pretendere di creare da subito programmi ma semplicemente algoritmi senza un contesto particolare. Prova a ordinare un'insieme di dati, a leggere un file di testo e scriverlo al contrario o ha visualizzarlo a video parola per parola ecc. ecc.
il brutto del C secondo me è che si possono fare solo programmi algoritmici-matematici che invogliano poco lo studente ad applicarsi. o sbaglio? almeno io lo trovo pesante :stordita:
banryu79
22-02-2012, 15:20
il brutto del C secondo me è che si possono fare solo programmi algoritmici-matematici che invogliano poco lo studente ad applicarsi. o sbaglio? almeno io lo trovo pesante :stordita:
Il C è un linguaggio Turing-completo (come la maggior parte se non tutti i linguaggi main-stream), ci puoi fare di tutto... chiaro, poi ci sono linguaggi che sono più adatti a fare certe cose o ad operare in certi contesti che in altri.
Se per cominicare/imparare a programmare hai bisogno di lavorare/smanettare/risolvere robe ad alto livello di astrazione per sentirti stimolato allora forse è il caso di utilizzare un linguaggio più moderno ed espressivo, ad alto livello di astrazione... prova con brainfuck :D
mmx[ngg]
22-02-2012, 15:21
In C (e in qualsiasi altro linguaggio) puoi fare qualsiasi cosa, tutto dipende quanto vuoi sbatterti. Puoi utilizzare il VB per disegnarti una finestrella a video e non sai neanchè come e perchè avviene o puoi fartelo in C richiamando direttamente il GDI. Credi che il browser che stai utilizzando sia scritto in Java o in C++ ?
Volendo esistono anche RAD in grado di crearti applicazioni senza scrivere una sola riga di codice ma finchè utilizzi quella roba non impari a programmare. C'è da sbattersi e quindi aver voglia. Lui, e in generale chiunque sia ai primi passi con la programmazione, deve imparare la logica e non c'è modo migliore che partire con linguaggi di quel tipo che offrono ben poco.
cdimauro
22-02-2012, 15:27
Programmare significa risolvere problemi (lo so: è il massimo dell'ovvietà).
Il che NON ha nulla a che vedere coi dettagli di basso livello.
mmx[ngg]
22-02-2012, 15:37
Che intendi con "dettagli di basso livello" ?
cdimauro
22-02-2012, 16:00
Quelli che ti costringe a imparare un linguaggio come il C, visto che non ha costrutti sintattici di livello molto elevato.
Oppure, per fare un altro esempio e visto che le hai citate, lavorare con le GDI anziché con un framework di più alto livello.
Un RAD è uno strumento comodo, nato apposta per semplificare la vita allo sviluppatore, consentendogli di raggiungere gli obiettivi prefissi in meno tempo.
Allo stesso modo sono nati linguaggi di livello più elevato, che consentono di essere più produttivi rispetto a linguaggi come il C.
Secondo me si deve prima sapere cos'è un algoritmo, prima di scrivere un programma bisogna sapere con che metodo risolvere il problema.
Ho capito davvero cos'è un algoritmo quando a scuola ci diedero da fare, come esercizio, tutti i passaggi per risolvere un equazione di secondo grado.
Senza scrivere programmi o altre cose, si doveva illustrare passo per passo tutte le operazioni che si dovevano eseguire.
Prima si fa l'algoritmo, che sarebbe la strategia risolutiva, e poi si passa a linguaggio :)
mmx[ngg]
22-02-2012, 16:22
Bhe in realtà non gli ho certo consigliato di interfacciarsi alle librerie di Windows (smette prima di iniziare), era la risposta a tecno789 per fargli capire che in C puoi far tutto.
Occhio che il C non è un linguaggio di basso livello eh, per essere precisi è un linguaggio di 3° generazione. Tutti quelli con costruttori, ereditarietà, ambienti RAD ecc. ecc. sono di 4° livello e hanno sicuramente i loro vantaggi ma anche delle problematiche in più che possono pesare su chi fa i primi passi e poi siamo sinceri...che vantaggio ha uno che non sa far nulla dai costruttori ? Diventa fuffa che confonde le idee.
Ben vengano i RAD (utilizzai il primo C++ Builder della Borland ed era una figata) ma se non sai programmare non impari certo da li.
cdimauro
22-02-2012, 18:32
Secondo me si deve prima sapere cos'è un algoritmo, prima di scrivere un programma bisogna sapere con che metodo risolvere il problema.
Ho capito davvero cos'è un algoritmo quando a scuola ci diedero da fare, come esercizio, tutti i passaggi per risolvere un equazione di secondo grado.
Senza scrivere programmi o altre cose, si doveva illustrare passo per passo tutte le operazioni che si dovevano eseguire.
Prima si fa l'algoritmo, che sarebbe la strategia risolutiva, e poi si passa a linguaggio :)
Infatti la definizione di algoritmo è il comandamento di ogni programmatore.
;36970791']Bhe in realtà non gli ho certo consigliato di interfacciarsi alle librerie di Windows (smette prima di iniziare), era la risposta a tecno789 per fargli capire che in C puoi far tutto.
Puoi far tutto anche in linguaggio macchina, ma è l'ultima cosa che consiglierei anche al mio peggior nemico.
Occhio che il C non è un linguaggio di basso livello eh, per essere precisi è un linguaggio di 3° generazione. Tutti quelli con costruttori, ereditarietà, ambienti RAD ecc. ecc. sono di 4° livello
In tutta onestà è la prima volta che leggo di una classificazione dei linguaggi in "livelli".
e hanno sicuramente i loro vantaggi ma anche delle problematiche in più che possono pesare su chi fa i primi passi
Se i RAD nascono per semplificare la vita ai programmatori, a maggior ragione lo faranno per chi deve iniziare.
Giusto per essere chiari: il classico editor di testo + compilatore + linker + tu-che-devi-lanciare-l'eseguibile è di gran lunga una soluzione peggiore di un RAD che una volta lanciato ti presenta già un progetto nuovo (oppure ti basta qualche click per File / Nuovo progetto / OK per crearne uno), con l'editor pronto ad accogliere il codice, e col tasto Play per lanciare tutto...
e poi siamo sinceri...che vantaggio ha uno che non sa far nulla dai costruttori ? Diventa fuffa che confonde le idee.
Non ho capito.
Ben vengano i RAD (utilizzai il primo C++ Builder della Borland ed era una figata) ma se non sai programmare non impari certo da li.
Cerchiamo di far chiarezza. Tu cosa intendi per "saper programmare"? Cosa dovrebbe fare uno che è bianco come il lenzuolo lavato con Dash?
mmx[ngg]
22-02-2012, 21:20
L'assembly ha senso su algoritmi time critical ed è anche parecchio utilizzato ma scriversi un'interno programma ne ha poco (tra l'altro la sua portabilità è zero).
Poi...chiariamo un concetto semplice. Creare un programma non significa necessariamente saper programmare.
Detto questo, un RAD ti semplifica la vita finchè hai un'approccio lineare che rispecchia il suo contesto. Per chiarirci, finchè ti sviluppi il tuo programmino gestionale che apre finestre, le chiude, fai 4 cretinate con i bottoni e leggi / scrivi su un database allora il RAD è perfetto (fa tutto lui, te devi solo scrivere le query) ma nel momento in cui devi fare qualcosa che non è in grado di gestire la sua utilità è zero. Così puoi anche scrivere un programma ma essenzialmente hai fatto copia e incolla e qualche assegnazione...niente più. A volte basta, altre no e per esperienza ti posso garantire che in ambito lavorativo è quasi sempre no o sarebbero tutti programmatori e io farei la fame :D
L'hai scritto tu prima, programmare è principalmente la capacità di problem solving e personalmente prima di utilizzare un RAD devi acquisire quella capacità e in questo i linguaggi di ultima generazione non solo non ti sono di alcun aiuto (non possono certo coprire il 100% delle problematiche) ma ti riempiono la testa di nozioni che all'inizio non ti servono a nulla e che non hai la minima capacità di gestire.
Classi, costruttori, ereditarietà sono delle feature che andrebbero imparate e utilizzate solo nel momento in cui sai già programmare un minimo, all'inizio è fuffa che non usi, utilizzi male o che non sai proprio usare.
Poco sopra (o sotto) questo post c'è chi chiede come implementare qualche effetto / componente più carino per migliorare il layout dell'applicazione. In questo caso esci fuori dal contesto dell'ambiente RAD e devi inziare a sudare e lo sanno fare in pochi. Sarà un caso ma non sà da dove partire....ma qualcosa mi dice che il 90% delle persone che usano un RAD sarebbero nella stessa situazione (e forse son stato stretto). In sostanza, se parti con un RAD ragioni poco perchè hai la pappa pronta e alla prima difficoltà non sai che pesci pigliare.
C, Pascal e qualsiasi altra cosa vecchio stampo sono linguaggi senza fronzoli (non c'è tantissimo da imparare, sicuramente meno di un RAD) ma che ti danno l'infarinatura adatta alla programmazione. Da li ben vengano i RAD che diventano lo strumento adatto per sveltire il lavoro.
cdimauro
23-02-2012, 07:04
;36972632']L'assembly ha senso su algoritmi time critical ed è anche parecchio utilizzato ma scriversi un'interno programma ne ha poco (tra l'altro la sua portabilità è zero).
Si potrebbe dire lo stesso del C.
Poi...chiariamo un concetto semplice. Creare un programma non significa necessariamente saper programmare.
Mi pare difficile pensare che uno possa mettersi alla tastiera, digitare caratteri ad muzzum, e ritrovarsi con un programma che addirittura funzioni.
A meno che non si tratti di una scimmia di Eddington. :p
Detto questo, un RAD ti semplifica la vita finchè hai un'approccio lineare che rispecchia il suo contesto. Per chiarirci, finchè ti sviluppi il tuo programmino gestionale che apre finestre, le chiude, fai 4 cretinate con i bottoni e leggi / scrivi su un database allora il RAD è perfetto (fa tutto lui, te devi solo scrivere le query) ma nel momento in cui devi fare qualcosa che non è in grado di gestire la sua utilità è zero. Così puoi anche scrivere un programma ma essenzialmente hai fatto copia e incolla e qualche assegnazione...niente più. A volte basta, altre no e per esperienza ti posso garantire che in ambito lavorativo è quasi sempre no o sarebbero tutti programmatori e io farei la fame :D
Un RAD, come già detto, ti semplifica la vita, ma non può certo sostituire un programmatore.
E' il programmatore che deve sapere lavorare col linguaggio che supporta il RAD, e metterci del suo.
Per cui uno che ha imparato a lavorare con un RAD, e ci sviluppa applicazioni, non è né un robota che esegue copia & incolla né una scimmia di Eddington. E' un programmatore.
L'hai scritto tu prima, programmare è principalmente la capacità di problem solving e personalmente prima di utilizzare un RAD devi acquisire quella capacità e in questo i linguaggi di ultima generazione non solo non ti sono di alcun aiuto (non possono certo coprire il 100% delle problematiche) ma ti riempiono la testa di nozioni che all'inizio non ti servono a nulla e che non hai la minima capacità di gestire.
Classi, costruttori, ereditarietà sono delle feature che andrebbero imparate e utilizzate solo nel momento in cui sai già programmare un minimo, all'inizio è fuffa che non usi, utilizzi male o che non sai proprio usare.
Invece uno che DEVE avere a che fare coi puntatori e l'allocazione / rilascio della memoria, perché il linguaggio è talmente povero sintatticamente che non puoi fare altro, pensi si trovi meglio che con un linguaggio più moderno col quale queste problematiche non le vede nemmeno di striscio?
Poco sopra (o sotto) questo post c'è chi chiede come implementare qualche effetto / componente più carino per migliorare il layout dell'applicazione. In questo caso esci fuori dal contesto dell'ambiente RAD e devi inziare a sudare e lo sanno fare in pochi. Sarà un caso ma non sà da dove partire....ma qualcosa mi dice che il 90% delle persone che usano un RAD sarebbero nella stessa situazione (e forse son stato stretto). In sostanza, se parti con un RAD ragioni poco perchè hai la pappa pronta e alla prima difficoltà non sai che pesci pigliare.
Questo capiterebbe a prescindere. E' normale che se hai un nuovo problema da risolvere che va oltre il know-how che hai acquisito, devi studiarti qualcos'altro per risolverlo.
RAD o non RAD. Perché il RAD, come già detto, non sostituisce il programmatore.
C, Pascal e qualsiasi altra cosa vecchio stampo sono linguaggi senza fronzoli (non c'è tantissimo da imparare, sicuramente meno di un RAD) ma che ti danno l'infarinatura adatta alla programmazione.
Non ho ancora capito quale sarebbe questa "infarinatura adatta alla programmazione". Potresti dirmi cos'è e cosa non è "adatto" alla programmazione? Insomma i requisiti che deve soddisfare un linguaggio per potersi fregiare di questo titolo nobiliare.
Da li ben vengano i RAD che diventano lo strumento adatto per sveltire il lavoro.
Al Pascal mi sono avvicinato nel lontano '86 proprio con un precursore di questi ambienti di sviluppo, il Turbo Pascal 3.0, che integrava editor, compilatore, e linker un comodissimo (all'epoca) ambiente di sviluppo.
Ma senza conoscere il linguaggio sarei rimasto a digitare a caso sulla tastiera... ;)
mmx[ngg]
23-02-2012, 09:55
Mah, abbiamo punti di vista differenti :)
Si potrebbe dire lo stesso del C.
Perchè il C è adatto ad algoritmi time critical ? No, è semplicemente un linguaggio come tutti gli altri che generano codice nativo per la piattaforma e anche se i nuovi compilatori fanno miracoli rispetto al passato l'umano al confronto rimane Dio. Può essere un pelo più veloce, lui come tutti i linguaggi di 3° generazione, perchè non ha a che fare con le classi che, per renderla spicciola, altro non sono che una gestione a stack di puntatori.
Non parliamo di linguaggi che generano codice pcode...quelli li sopprimerei tutti perchè sono di una lentezza esasperante.
Mi pare difficile pensare che uno possa mettersi alla tastiera, digitare caratteri ad muzzum, e ritrovarsi con un programma che addirittura funzioni.
A meno che non si tratti di una scimmia di Eddington. :p
Eh ma te l'ho detto prima, ci son ambienti dove puoi anche non scrivere una riga di codice o dove ne scrivi ben poche e ti limiti realmente a qualche assegnazione e poco più. Li le tue capacità son limitate e strettamente legate all'ambiente. Un programmatore è tale quando le sue capacità son trasversali dal linguaggio utilizzato.
Invece uno che DEVE avere a che fare coi puntatori e l'allocazione / rilascio della memoria, perché il linguaggio è talmente povero sintatticamente che non puoi fare altro, pensi si trovi meglio che con un linguaggio più moderno col quale queste problematiche non le vede nemmeno di striscio?
Io utilizzo i puntatori anche nei RAD, senza sarei spacciato e l'unica volta che son stato costretto a utilizzare VB me li son dovuti emulare o certe opzioni non le implementavo! Un puntatore non è un limite ma una possibilità che ti permette di creare qualsiasi struttura dati.
Non ho ancora capito quale sarebbe questa "infarinatura adatta alla programmazione". Potresti dirmi cos'è e cosa non è "adatto" alla programmazione? Insomma i requisiti che deve soddisfare un linguaggio per potersi fregiare di questo titolo nobiliare.
In realtà i requisiti non dovrebbero essere del lingauggio ma di chi lo utilizza. Il linguaggio dovrebbe avere solo un requisito, non limitare le capacità del programmatore.
Al Pascal mi sono avvicinato nel lontano '86 proprio con un precursore di questi ambienti di sviluppo, il Turbo Pascal 3.0, che integrava editor, compilatore, e linker un comodissimo (all'epoca) ambiente di sviluppo.
Ma senza conoscere il linguaggio sarei rimasto a digitare a caso sulla tastiera... ;)
Vedi che anche tu sei partito con il Pascal! :D
Detto questo mi sta venendo un dubbio. Ma cosa intendiamo per "un programma" ? Io lo vedo come un macro insieme di algoritmi atti a svolgere un determinato compito...non è che considerate un programma qualsiasi cosa che vi mostri a video qualcosa ? Quello è solo uno scheletro, un involucro e poco più.
Comunque siamo parecchio off topic, io ho provato a consigliargli qualcosa che inizialmente lo alleni nel problem solving che dovrebbe essere la base di chiunque si voglia fregiare del titolo nobiliare di programmatore :D
ma quindi alla fine dovrei optare per il lancio dalla finestra? :D
ma quindi alla fine dovrei optare per il lancio dalla finestra? :D
Se stai ad ascoltare la gente dei forum, sì. Di solito domande come le tue finiscono in questo tipo di discussioni stereotipate:
Tu:"Raga, mi vorrei avvicinare alla frutta, che prima non mangiavo se non da piccolo perché mi costringevano le suore all'asilo, ma poi niente... che frutto mi consigliate?"
Mr.X:"DEVI cominciare con le mele! Tutti i pro mangiano le mele!"
Mr.Y:"Le mele non sono più di stagione, e poi sono da hipster. Se cominci con le mele farai fatica ad apprezzare altri frutti. Comincia con gli avocado... che non si è mai capito se sono frutta o verdura, sono un po' tutti e due e ti danno un'infarinatura generale che poi serve sempre se poi decidi di fare il fruttivendolo..."
... e così via...
Il succo è: trova un progetto. Cerca di portarlo a termine. Quando sei bloccato da un problema, chiedi.
Il resto sono stronzate di 3° o 4° livello, a seconda... :read:
Quoto in tutto e per tutto shinya, la programmazione la impari sul campo (a patto di avere un minimo di conoscenze)
sto rotolando a terra per le risate :D :D :D
oddio, ho le lacrime :D
banryu79
23-02-2012, 12:19
Non capisco ...
Penso si riferisse alla verità condita da alto tasso ironico espressa nel post di shinya :asd:
Se stai ad ascoltare la gente dei forum, sì. Di solito domande come le tue finiscono in questo tipo di discussioni stereotipate:
Tu:"Raga, mi vorrei avvicinare alla frutta, che prima non mangiavo se non da piccolo perché mi costringevano le suore all'asilo, ma poi niente... che frutto mi consigliate?"
Mr.X:"DEVI cominciare con le mele! Tutti i pro mangiano le mele!"
Mr.Y:"Le mele non sono più di stagione, e poi sono da hipster. Se cominci con le mele farai fatica ad apprezzare altri frutti. Comincia con gli avocado... che non si è mai capito se sono frutta o verdura, sono un po' tutti e due e ti danno un'infarinatura generale che poi serve sempre se poi decidi di fare il fruttivendolo..."
... e così via...
Il succo è: trova un progetto. Cerca di portarlo a termine. Quando sei bloccato da un problema, chiedi.
Il resto sono stronzate di 3° o 4° livello, a seconda... :read:
Devono decidersi ad aggiungere il tasto "Like" o "+1" anche sul forum ... ^_^
Penso si riferisse alla verità condita da alto tasso ironico espressa nel post di shinya :asd:
sì, infatti :)
abbiamo postato contemporaneamente quindi il mio commento è finito sotto al tuo :stordita:
cdimauro
23-02-2012, 13:15
Velocemente, visto che il thread è degenerato.
;36974513']Mah, abbiamo punti di vista differenti :)
Questo è evidente. :D
Perchè il C è adatto ad algoritmi time critical ?
Viene spesso consigliato per questo motivo.
No, è semplicemente un linguaggio come tutti gli altri che generano codice nativo per la piattaforma e anche se i nuovi compilatori fanno miracoli rispetto al passato l'umano al confronto rimane Dio. Può essere un pelo più veloce, lui come tutti i linguaggi di 3° generazione, perchè non ha a che fare con le classi che, per renderla spicciola, altro non sono che una gestione a stack di puntatori.
E' la prima volta che sento una definizione del genere per le classi.
Comunque ti consiglio di studiarti in che modo vengono implementate le classi a basso livello: scoprirai che non sono così lente come credi.
Non parliamo di linguaggi che generano codice pcode...quelli li sopprimerei tutti perchè sono di una lentezza esasperante.
Su questo preferisco non esprimermi, altrimenti scoppia la terza guerra mondiale. :stordita:
Siamo già andati abbastanza OT.
Eh ma te l'ho detto prima, ci son ambienti dove puoi anche non scrivere una riga di codice o dove ne scrivi ben poche e ti limiti realmente a qualche assegnazione e poco più. Li le tue capacità son limitate e strettamente legate all'ambiente. Un programmatore è tale quando le sue capacità son trasversali dal linguaggio utilizzato.
Questa è una tua personalissima definizione.
Rimane il fatto che, RAD o meno, il codice lo devi scrivere a prescindere.
Io utilizzo i puntatori anche nei RAD, senza sarei spacciato e l'unica volta che son stato costretto a utilizzare VB me li son dovuti emulare o certe opzioni non le implementavo! Un puntatore non è un limite ma una possibilità che ti permette di creare qualsiasi struttura dati.
Idem come sopra. La maggior parte dei linguaggi che ho usato nei miei quasi 30 anni di esperienza nel campo dell'informatica non sa cosa siano i puntatori. Eppure ho sviluppato lo stesso applicazioni anche complesse.
In realtà i requisiti non dovrebbero essere del lingauggio ma di chi lo utilizza.
Buono a sapersi. Comunque prima però ne avevi fatto una questione di linguaggio.
Il linguaggio dovrebbe avere solo un requisito, non limitare le capacità del programmatore.
Niente di meglio del linguaggio macchina allora. :cool:
Vedi che anche tu sei partito con il Pascal! :D
No, il Pascal l'ho imparato nell'86, ma 4 anni prima ho iniziato col BASIC e, soprattutto, linguaggio macchina (MOS 6502). E il BASIC... NON aveva in puntatori. :D
Detto questo mi sta venendo un dubbio. Ma cosa intendiamo per "un programma" ? Io lo vedo come un macro insieme di algoritmi atti a svolgere un determinato compito...non è che considerate un programma qualsiasi cosa che vi mostri a video qualcosa ? Quello è solo uno scheletro, un involucro e poco più.
100 CLI
101 JMP SHORT 100
Anche questo è un programma, da eseguire rigorosamente su Windows <= '98 da DEBUG.COM. :asd:
Comunque siamo parecchio off topic, io ho provato a consigliargli qualcosa che inizialmente lo alleni nel problem solving che dovrebbe essere la base di chiunque si voglia fregiare del titolo nobiliare di programmatore :D
Ringraziamo Turing & company allora. :p
ma quindi alla fine dovrei optare per il lancio dalla finestra? :D
Sì, Windows è particolarmente indicato per lanciare gli ambienti di sviluppo. :cool:
mmx[ngg]
23-02-2012, 15:47
Comunque ti consiglio di studiarti in che modo vengono implementate le classi a basso livello: scoprirai che non sono così lente come credi.
Ehmm...ok :rolleyes: ..pero tu prendi un debugger che ti permetta di andare a basso livello (in assembly tipo ollydbg), crei il classico "Hello World" con una classe e tramite l'ereditarietà gli aggiungi "Ciao Mamma" e lo esegui con il debugger. Dici che la gestione delle chiamate è tramite puntatori in stack o simili ? Io dico di si. Se hai poca dimestichezza con l'assembly puoi prendere GCC o Lazarus (che sto guardando in sti giorni ed è un vero linguaggio ad oggetti) entrambi full source code, li spulci un po e scopri la stessa cosa che ho detto sopra (potresti farlo con qualsiasi linguaggio ma non ne conosco altri di questo tipo che mettono a disposizione tutto il codice). E ti dirò di più, gli eventi sono spesso esportati (nell'eseguibile) per nome e nome classe e la loro esecuzione comporta la ricerca per stringa prima di trovare il puntatore. Le classi son comode ma non sono più veloci di un'implementazione lineare. Giusto per chiarire che non sparo cose a caso...se non so...passo oltre.
banryu79
23-02-2012, 16:08
Beccati questa, cdimauro noob! :asd:
;36977228']Se hai poca dimestichezza con l'assembly puoi prendere GCC
LOL... questa mi fa ridere. :D Tu mi vuoi dire che ti sei guardato il codice di gcc e hai scoperto... cosa di preciso?
Mi dai i riferimenti? File e numero di riga?
cdimauro
23-02-2012, 16:35
;36977228']Ehmm...ok :rolleyes: ..pero tu prendi un debugger che ti permetta di andare a basso livello (in assembly tipo ollydbg), crei il classico "Hello World" con una classe e tramite l'ereditarietà gli aggiungi "Ciao Mamma" e lo esegui con il debugger.
Se devo usare la OOP in questo modo, preferisco rinunciare alle classi e ritornare alla programmazione strutturata. :p
Per essere chiari: non sta scritto da nessuna parte che devi usare le classi per qualunque cosa soltanto perché il linguaggio le supporta.
Dici che la gestione delle chiamate è tramite puntatori in stack o simili ? Io dico di si.
Vorrei capire cosa intendi con la parte che ho evidenziato.
Se stai affermando che viene usato lo stack per passare parametri... sì, è possibile, ma dipende dall'ABI (se sai cos'è).
Se hai poca dimestichezza con l'assembly
In questo periodo ho più dimestichezza col linguaggio macchina (non sto scherzando :D).
puoi prendere GCC o Lazarus (che sto guardando in sti giorni ed è un vero linguaggio ad oggetti) entrambi full source code, li spulci un po e scopri la stessa cosa che ho detto sopra (potresti farlo con qualsiasi linguaggio ma non ne conosco altri di questo tipo che mettono a disposizione tutto il codice).
Li conosco a malapena. :ciapet:
E ti dirò di più, gli eventi
Cosa intendi per eventi? Roba tipo OnButtonClick?
sono spesso esportati (nell'eseguibile) per nome e nome classe e la loro esecuzione comporta la ricerca per stringa prima di trovare il puntatore.
Ti stai confondendo con le DLL. E in ogni caso il binding a runtime alle funzioni esportate nelle DLL avviene una sola volta, al caricamento del file PE.
La chiamata alla funzione avviene poi tramite la classica
CALL [Tabella delle esportazioni + offset all'entry della funzione]
Le classi son comode ma non sono più veloci di un'implementazione lineare.
Cosa intendi per implementazione lineare?
Giusto per chiarire che non sparo cose a caso...se non so...passo oltre.
Veramente hai proprio bisogno di chiarire, perché certi termini che usi non li ho mai sentiti.
Comunque puoi dare un'occhiata qui (http://www.blackhat.com/presentations/bh-dc-07/Sabanal_Yason/Paper/bh-dc-07-Sabanal_Yason-WP.pdf) per il C++ e qui (http://edn.embarcadero.com/article/images/20803/TP_55_OOP_Guide.pdf) invece trovi il manuale del Turbo Pascal 5.5, che è stato il primo compilatore (IDE in realtà) "mainstream" a supportare la OOP.
Nel primo link trovi esempi di codice C++ disassemblato (x86), mentre il secondo alle pag. 38 e 50 spiega come viene implementato a basso livello il meccanismo dei costruttori e dei metodi. Da pag.50 riporto:
"Every call to a virtual methodmust pass through the VMT, while static methods are called directly. Though the VMT lookup is very efficient, calling a method that is static is still a little faster than calling a virtual one."
Da cui apprendiamo un paio di cose. La prima è che non tutti i metodi sono lenti. La seconda è che quelli più lenti non sono poi così lenti.
Beccati questa, cdimauro noob! :asd:
Mi ha preso in castagna. Sono uno sbarbatello. :D
mmx[ngg]
23-02-2012, 16:43
No, non faccio cose inutili. Mi son dovuto seguire in debug un pezzo di codice per capire un'access violation e l'ho fatto in assembly visto che il problema accadeva su una DLL che è scritta esclusivamente in assembly. E il sistema è quello ma visto che insisti...
Scaricati il FPC, file ObjPas.Inc dalla riga 377 in poi (e ti ho facilitato il compito perchè quello è già il punto di orgine in cui cerca la classa per nome).
Ho signore...ho visto ora l'altra risposta...
No non mi sto confondendo con le DLL, quella è l'import / export table ed è un'altra roba. Niente...ci rinuncio.
insane74
23-02-2012, 16:45
Beccati questa, cdimauro noob! :asd:
...
Mi ha preso in castagna. Sono uno sbarbatello. :D
mi metto comodo:
http://images.zaazu.com/img/male29-male-theater-cinema-smiley-emoticon-000071-large.gif
:asd: :asd:
cdimauro
23-02-2012, 17:43
;36977622']No, non faccio cose inutili. Mi son dovuto seguire in debug un pezzo di codice per capire un'access violation e l'ho fatto in assembly visto che il problema accadeva su una DLL che è scritta esclusivamente in assembly. E il sistema è quello ma visto che insisti...
Scaricati il FPC, file ObjPas.Inc dalla riga 377 in poi (e ti ho facilitato il compito perchè quello è già il punto di orgine in cui cerca la classa per nome).
Ho preso l'ultima versione di FreePascal, la 2.4.4, ma non credo che coincidano. Alla riga 377 ritrovo:
fieldaddress:=nil;
Che è l'ultima riga di TObject.FieldAddress.
Ho signore...ho visto ora l'altra risposta...
No non mi sto confondendo con le DLL, quella è l'import / export table ed è un'altra roba. Niente...ci rinuncio.
Con questo spirito rinuncerebbe chiunque. Purtroppo hai difficoltà a esprimerti, e utilizzi termini alieni alla letteratura informatica. Da qui le mie legittime richieste di chiarimento.
Bando agli scherzi, l'esperienza non mi manca di certo, ma non posso tirare a indovinare quello che cerchi di affermare malamente.
Sii chiaro, e vediamo di sbrogliare questa matassa.
mmx[ngg]
23-02-2012, 18:12
Hai ragione, la versione non l'ho scritta. Non ti fidi eh ? E dire che nel documento sul C++ che hai linkato (e non hai letto) c'è anche scritto che è salvato il nome della classe nell'eseguibile e nel documento della Borland è specificato che sono più lente (e la loro lentezza dipende dal grado di ereditarietà...questo l'aggiungo io...vuoi controllare o ti fidi ?)
...FPC 2.6.1 ma lo puoi anche cercare nella versione che hai scaricato tanto c'è di sicuro e probabilmente è poco sopra.
type
tmethodnamerec = packed record
name : pshortstring;
addr : pointer;
end;
tmethodnametable = packed record
count : dword;
entries : packed array[0..0] of tmethodnamerec;
end;
pmethodnametable = ^tmethodnametable;
class function TObject.MethodAddress(const name : shortstring) : pointer;
var
methodtable : pmethodnametable;
i : dword;
ovmt : PVmt;
begin
ovmt:=PVmt(self);
while assigned(ovmt) do
begin
methodtable:=pmethodnametable(ovmt^.vMethodTable);
if assigned(methodtable) then
begin
for i:=0 to methodtable^.count-1 do
if ShortCompareText(methodtable^.entries[i].name^, name)=0 then
begin
MethodAddress:=methodtable^.entries[i].addr;
exit;
end;
end;
ovmt := ovmt^.vParent;
end;
MethodAddress:=nil;
end;
VMT dovrebbe dirti qualcosa...
- Evento non è un termine alieno se di mestiere fai il programmatore e non il letterato...cmq si Onclick ecc. ecc.
- Un'implementazione lineare...Google è tuo amico, ti ha tirato fuori il sistema di call OOP quindi saprà anche questo ;)
Abbandono la discussione che tanto...certo che se evitate di parlare su cose che non sapete o dove avete le idee confuse è meglio o confondete anche gli altri.
Velocemente, visto che il thread è degenerato
Appunto, appena incontrerà i threads: finestra :D
cdimauro
23-02-2012, 18:43
Poco ma sicuro. :D
;36978223']Hai ragione, la versione non l'ho scritta. Non ti fidi eh ?
Dopo quello che hai detto, direi proprio di no. :fagiano:
E dire che nel documento sul C++ che hai linkato (e non hai letto) c'è anche scritto che è salvato il nome della classe nell'eseguibile
Sì, e il motivo sarebbe? Questo l'hai letto oppure hai tralasciato il resto?
e nel documento della Borland è specificato che sono più lente (e la loro lentezza dipende dal grado di ereditarietà...questo l'aggiungo io...vuoi controllare o ti fidi ?)
No, perché dipende dall'implementazione. Quella più veloce (ed usuale) richiede un solo lookup nella VMT per recuperare l'indirizzo del metodo. Quella che fa uso di VMT "compresse" (con la keyword dynamic per Delphi & co.) può richiederne di più, a seconda della super classe che si vuole utilizzare.
...FPC 2.6.1 ma lo puoi anche cercare nella versione che hai scaricato tanto c'è di sicuro e probabilmente è poco sopra.
type
tmethodnamerec = packed record
name : pshortstring;
addr : pointer;
end;
tmethodnametable = packed record
count : dword;
entries : packed array[0..0] of tmethodnamerec;
end;
pmethodnametable = ^tmethodnametable;
class function TObject.MethodAddress(const name : shortstring) : pointer;
var
methodtable : pmethodnametable;
i : dword;
ovmt : PVmt;
begin
ovmt:=PVmt(self);
while assigned(ovmt) do
begin
methodtable:=pmethodnametable(ovmt^.vMethodTable);
if assigned(methodtable) then
begin
for i:=0 to methodtable^.count-1 do
if ShortCompareText(methodtable^.entries[i].name^, name)=0 then
begin
MethodAddress:=methodtable^.entries[i].addr;
exit;
end;
end;
ovmt := ovmt^.vParent;
end;
MethodAddress:=nil;
end;
VMT dovrebbe dirti qualcosa...
Sì. E anche il nome del metodo: si chiama MethodAddress. Mentre tu avevi scritto:
"quello è già il punto di orgine in cui cerca la classa per nome"
- Evento non è un termine alieno se di mestiere fai il programmatore e non il letterato...cmq si Onclick ecc. ecc.
Nel contesto in cui l'hai citato non mi pare fosse il termine più appropriato.
Nello specifico, vengono esportati i nomi degli identificatori. Quindi non soltanto quelli degli eventi.
- Un'implementazione lineare...Google è tuo amico, ti ha tirato fuori il sistema di call OOP quindi saprà anche questo ;)
L'onere della prova sta a te che hai tirato fuori questo termine.
Ti anticipo che in questo caso Google NON ti sarà amico. :asd:
Abbandono la discussione che tanto...certo che se evitate di parlare su cose che non sapete o dove avete le idee confuse è meglio o confondete anche gli altri.
Certo certo. Vai pure. Lasciaci sguazzare nella nostra ignoranza. :asd:
Ah, per inciso: la ricerca di classi, metodi, campi, ecc. per nome NON avviene sempre, perché altrimenti avresti ragione tu, e la OOP sarebbe lentissima.
Avviene soltanto nel caso in cui serve la reflection, come ad esempio quando si carica un form (da un file, da un risorsa, ecc.).
Normalmente l'invocazione è diretta per gli elementi statici, o indiretta (un lookup, considerando l'implementazione usuale, cioè quella veloce della VMT) per quelli virtuali. Quindi estremamente veloce, come diceva, appunto, la documentazione Borland.
mmx[ngg]
23-02-2012, 19:43
Ricapitolando :
- La Borland afferma che richiamare un metodo in una classe è più lento di uno esterno a una classe. Un po più lento, molto più lento, dipende...è più lento. E' come avevo detto io ? Sembra di si.
- Non mi ero confuso con la DLL sull'esportazione del nome metodo / classe perchè nel documento è scritto e avviene, come ho specificato prima, in molti casi e non in tutti. E' di nuovo come ho detto io ? Humm...si.
- MethodAddress ritorna un puntatore da un nome quindi cerca la classa per nome...vogliamo sindacare sugli errori di battitura o ci sforziamo a capire la logica ? Quel metodo esiste e fa esattamente quello che ho scritto fin ora...altro che DLL.
- Io ho fatto riferimento agli eventi, in realtà esporta tutti i published (così eviti di cercare altra documentazione o se proprio ci tieni focalizzati sulle RTTI così non perti tempo in letteratura inutile)
Non dico che siete ignoranti, non mi permetterei mai ma da un mio "le classi son più lente" hai scritto "studia" e sostanzialmente mi hai dato dell'ignorante su una materia che, a quanto pare, conosco meglio di te...anzi no, ora la conosci anche tu visto che hai cercato....e dire che te lo potevi evitare e bastava chiedere il perchè. Non son pagato per scrivere sul forum e quando lo faccio (poco a quanto pare visti i post in 10 anni) cerco di dare un contributo e non fare un semplice +1 (capisco l'abitudine ai tanti cazzari ma partire prevenuti...).
chiedo scusa, ma tutta questa diatriba che ha a che fare con la mia richiesta? :D perché sono totalmente confuso ormai :(
mmx[ngg]
23-02-2012, 19:55
No...nulla :D
Queste cose probabilmente non le vedrai mai nella tua vita. Te devi seguire il consiglio più semplice del mondo che già qualcuno ti ha scritto : prendere un'idea e realizzarla. Parti da un RAD, Java, C quello che vuoi ma se non parti non impari nulla.
cdimauro
23-02-2012, 20:09
;36978746']Ricapitolando :
- La Borland afferma che richiamare un metodo in una classe è più lento di uno esterno a una classe. Un po più lento, molto più lento, dipende...è più lento. E' come avevo detto io ? Sembra di si.
Si tratta di metodi statici o virtuali: almeno chiamali col loro nome corretto, perché ENTRAMBI sono "interni" alla classe (nel senso che vi appartengono a pieno titolo).
- Non mi ero confuso con la DLL sull'esportazione del nome metodo / classe perchè nel documento è scritto e avviene, come ho specificato prima, in molti casi e non in tutti. E' di nuovo come ho detto io ? Humm...si.
No. Quelle sono informazioni RTTI, che vengono usate come ti ho già detto io.
Ripeto: nella NORMALE ESECUZIONE se richiami un metodo, sia esso statico che virtuale, NON vai a caccia del metodo partendo dal nome come vorresti far credere tu.
A meno che non parliamo di linguaggi dinamici come Python (che comunque la ricerca la eseguono più velocemente del codice usato in FreePascal, perché fanno uso di un hash che ha mediamente tempo tempo di ricerca O(1)), ma NON era questo il caso.
- MethodAddress ritorna un puntatore da un nome quindi cerca la classa per nome...vogliamo sindacare sugli errori di battitura
Che continui a commettere: si chiama classe e NON classa.
o ci sforziamo a capire la logica ? Quel metodo esiste e fa esattamente quello che ho scritto fin ora...altro che DLL.
Assolutamente no, visto che cerca il puntatore a un METODO e non a una CLASSE. Altro che errore di battitura: c'è una differenza abissale fra le due cose.
In ogni caso, me dicevo, si tratta di informazioni RTTI che vengono usate per la reflection, NON per la normale esecuzione.
Per maggior informazioni, vatti a vedere il link sul C++ che ho postato prima: fa vedere chiaro e tondo il codice generato dal compilatore quando vengono richiamati i metodi statici o virtuali di una classe. Ovviamente NON c'è nessuna ricerca di mezzo.
- Io ho fatto riferimento agli eventi, in realtà esporta tutti i published (così eviti di cercare altra documentazione o se proprio ci tieni focalizzati sulle RTTI così non perti tempo in letteratura inutile)
Ah, te ne sei accorto. Bene.
Non dico che siete ignoranti, non mi permetterei mai ma da un mio "le classi son più lente" hai scritto "studia" e sostanzialmente mi hai dato dell'ignorante su una materia che, a quanto pare, conosco meglio di te...
Si vede proprio, sai. :D
Comunque non te l'avevo scritto in senso offensivo, ma nell'accezione classica del termine. Detto in altri termini: "vatti a vedere come funziona realmente l'implementazione delle classi, così scoprirai che non è come dici tu".
Così va meglio? Tanto il concetto che volevo esprimere è esattamente lo stesso.
anzi no, ora la conosci anche tu visto che hai cercato....
Lo conoscevo già da parecchi. Non è un caso che t'abbia recuperato quel documento della Borland sul Turbo Pascal 5.5: un prodotto rilasciato nell'89 e che mi sono rivoltato come un calzino, tant'è che ricordavo ancora che parlava dell'implementazione di basso livello dei metodi e dei costruttori.
Non ho bisogno di fare ricerche per parlare di cose che conosco da anni come le mie tasche.
e dire che te lo potevi evitare e bastava chiedere il perchè.
Ho chiesto parecchie volte, e le tue risposte o sono mancate o non si capivano o continuavano (e continuano ancora) a non essere corrette.
Non son pagato per scrivere sul forum e quando lo faccio (poco a quanto pare visti i post in 10 anni) cerco di dare un contributo e non fare un semplice +1 (capisco l'abitudine ai tanti cazzari ma partire prevenuti...).
Nemmeno io sono pagato, ma quando vedo fare disinformazione, intervengo.
chiedo scusa, ma tutta questa diatriba che ha a che fare con la mia richiesta? :D perché sono totalmente confuso ormai :(
Ovviamente non c'entra nulla. :D
Il thread andrebbe separato. Vediamo se interviene qualche moderatore a fare un po' di pulizia.
pabloski
23-02-2012, 21:05
chiedo scusa, ma tutta questa diatriba che ha a che fare con la mia richiesta? :D perché sono totalmente confuso ormai :(
hehehe, si vede che sei alle prime armi :D
tutta questa diatriba ti serve per capire che l'informatica fa male al cervello, per cui non è bello lamentarsi di non averci capito nulla ( com'è successo a te ) :D
credimi, se ti risultano difficili queste cose, vuol dire che hai ancora un cervello funzionante :sofico:
ingframin
24-02-2012, 08:37
Sergei, mentre gli altri battibeccano su chi sa sbattersi meglio a cercare come funzionano le chiamate a metodi/classi/fidanzate/pagine gialle hai gia' messo mano al codice?
Che qui come al solito si parte da "come comincio ad andare in bici?" e si finisce a parlare di come distribuire l'allenamento per scalare in scioltezza il Mortirolo...
Scaricati python se gia' non ce l'hai oppure usa java se gia' lo hai e comincia a cercare di capire come fare che ne so... a trovare le parole in una matrice di caratteri oppure a cercare un numero in un array.
Guardati gli algoritmi di ordinamento e ricerca, cercati appunti e dispense dell'uni ma soprattutto scrivi codice!
Per quanto riguarda RAD/non RAD. Ognuno ha la sua esperienza e la sua propensione mentale, io ho trovato il mio "nirvana" informatico con python e C combinati, la mia ragazza preferisce Java e C++, mio padre ancora mi stressa col fortran (lui fu forgiato dall'IBM 7090 con le schede perforate).
Tutto questo sproloquio sulla velocita' e' inutile, fuori luogo, confonde le idee a chi ha postato la domanda originaria e alla fine a cosa porta?
Tanto non c'e' niente da fare, nei sistemi che devono essere realmente veloci e affidabili si fa quasi tutto in hardware perche' TUTTO il software e' lento. Per quel poco di software che serve lo standard di programmazione (bello o brutto, veloce o lento che sia) e' costituito da un mix di assembler, C e in alcuni sistemi ADA95.
Tutte le altre menate servono in contesti che di time critical hanno solo il nome.
E' chiaro che non puoi fare un sito web in ada (almeno se sei sano di mente, altrimenti http://libre.adacore.com/libre/tools/aws/) o i videogame in hardware (http://www.fpgaarcade.com/games.htm :fiufiu: ) ma ogni cosa ha il suo ambito di utilizzo ed e' giusto che sia cosi'.
Poi possiamo stare pure a discutere di come mandare le navicelle in orbita ma non facciamo altro che allontanarci dalla domanda originaria che fu: "come comincio?".
cdimauro
24-02-2012, 08:48
Visto che deve smanettare del codice, dopo Python è meglio che scarichi pure DreamPie (http://www.appuntidigitali.it/9835/dreampie-la-shell-python-che-hai-sempre-sognato/).
Non c'è niente di meglio di una stupenda shell interattiva quando si sperimenta con pezzi di codice. ;)
Allora riprendo prima con Python. Devo trovare gli appunti che mi ero salvato da qualche parte sul computer. Poi magari se prendo la mano posso usare anche Java in seguito :)
cdimauro
24-02-2012, 10:00
Una volta passato al lato oscuro della forza, ti sarà molto difficile uscirne.
http://www.theforce.net/kids/coruscant/probe_droid/palpatine.jpg
uhahuahahaha immagine esemplare :D
Ricapitolando:
- imparare le basi (cicli, metodi, variabili etc...)
- mettere subito mano al codice e sperimentare quanto imparato
- iniziare a pensare a qualcosa e cercare di realizzarlo. in caso di difficoltà cercare su internet il necessario (magari un metodo che non si conosce o altro...) o sul testo di riferimento.
Corretto?
Il problema è però sul ragionamento per risolvere il problema. Ora, tenendo presente che non credo esista un unico modo per risolvere qualcosa, sarebbe impossibile avere un metodo universale, però potrebbe esserci qualche testo che mi potrebbe aiutare?
rootshooter
26-02-2012, 18:12
Il problema è però sul ragionamento per risolvere il problema. Ora, tenendo presente che non credo esista un unico modo per risolvere qualcosa, sarebbe impossibile avere un metodo universale, però potrebbe esserci qualche testo che mi potrebbe aiutare?
Hai provato questo?
http://www.python.it/doc/AGauld/index.html
non so se conviene continuare qui o creare un nuovo topic...
volevo chiedervi...
praticamente stavo riprendendo Java e volevo mettere (e che cacchio, almeno stavolta dopo aver chiesto consiglio :D) in pratica quello che dalla teoria ho appreso.
Ecco, allora la domanda è:
cosa posso creare? Ora, siccome mi viene da pensare a tutto, mi riduco con l'avere zero idee. Chiaramente volevo fare qualcosa di estremamente semplice e poi in seguito qualcosa di un po' più complesso così da imparare qualcosa di nuovo. Però mi dovete dare di nuovo una mano. Mi sapreste indicare alcuni progetti/programmi che potrei fare?
M'è venuto in mente solo:
- Calcolatrice
- Riproduttore mp3 (che sia troppo complesso?)
- un roguelike (consigliato da shinya
e poi basta... non mi viene incredibilmente in mente niente :mbe:
pabloski
12-03-2012, 19:10
- download manager
- blocco note
- programma di backup
- file manager
- risolutore grafico di sudoku :D
boh, c'è talmente tanta roba, basta guardarsi intorno
- La Borland afferma che richiamare un metodo in una classe è più lento di uno esterno a una classe. Un po più lento, molto più lento, dipende...è più lento. E' come avevo detto io ? Sembra di si.
Attenzione, chiamare un metodo virtual di una classe ;)
Compilatori come ICC risolvono le chiamate virtual a compile time
http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/cpp/lin/copts/ccpp_options/option_opt-class-analysis.htm
e poi basta... non mi viene incredibilmente in mente niente
Un bel software per prendere nota delle cose che imparerai :D
ingframin
13-03-2012, 07:49
non so se conviene continuare qui o creare un nuovo topic...
volevo chiedervi...
praticamente stavo riprendendo Java e volevo mettere (e che cacchio, almeno stavolta dopo aver chiesto consiglio :D) in pratica quello che dalla teoria ho appreso.
Ecco, allora la domanda è:
cosa posso creare? Ora, siccome mi viene da pensare a tutto, mi riduco con l'avere zero idee. Chiaramente volevo fare qualcosa di estremamente semplice e poi in seguito qualcosa di un po' più complesso così da imparare qualcosa di nuovo. Però mi dovete dare di nuovo una mano. Mi sapreste indicare alcuni progetti/programmi che potrei fare?
M'è venuto in mente solo:
- Calcolatrice
- Riproduttore mp3 (che sia troppo complesso?)
- un roguelike (consigliato da shinya
e poi basta... non mi viene incredibilmente in mente niente :mbe:
http://www.dis.uniroma1.it/~fi/wikka.php?wakka=EserciziCorso
Fatti le esercitazioni, partono dal semplice/banale fino ad arrivare al discretamente complesso.
Gia' fare un roguelike non e' banale se sei alle prime armi, idem per il lettore mp3 che devi usare il java media framework.
Meglio avere un po'di pazienza e partire dalle basi che strafare all'inizio per poi piantarsi a meta' salita!
ah, grande!
Avevo cercato degli eserciziari ma non avevo trovato granché, questo sito mai visto. prendo subito il materiale. grazie mille :)
Ventresca
14-03-2012, 22:11
esiste una discussione con i migliori testi per imparare a programmare (ovviamente uno per ogni linguaggio)?
sono totalmente nuovo al mondo della programmazione, ma vista la tendenza del mercato e la mia passione verso il mondo della tecnologia avrei intenzione di provare ad imparare, mediante corsi e con lo studio su appositi testi, un linguaggio di programmazione per provare a dare vita ad un mio progetto.
Essendo mia intenzione di dare vita ad un browser game sulla scia di farmville, mafia wars, bubble saga etc., da quale linguaggio mi consigliate di iniziare per poter realizzare il mio progetto? Mi è parso di capire che flash è una tecnologia che a breve diventerà obsoleta, vista la sua pesantezza e la politica di Apple di non implementarla sui suoi dispositivi portatili, e che html5 dovrebbe essere il linguaggio più "sicuro" sul quale investire le proprie risorse proprio per la sua compatibilità con tutti i dispositivi portatili di nuova generazione, nonché per le possibilità che offre rispetto a Flash e Java. La situazione che ho descritto è verosimile o mi conviene investire il mio tempo per imparare ad utilizzare Flash o Java?
uhahuahahaha immagine esemplare :D
Il problema è però sul ragionamento per risolvere il problema. Ora, tenendo presente che non credo esista un unico modo per risolvere qualcosa, sarebbe impossibile avere un metodo universale, però potrebbe esserci qualche testo che mi potrebbe aiutare?
Esiste piu di un modo per risolvere un problema. Tuttavia alcuni sono migliori di altri. E lo sono in termini di tempo e risorse.
Scegli un linguaggio ed imparane le basi. Se non ti trovi a tuo agio, cambia. E' importante lavorare con un linguaggio con cui c'è feeling.
Dopodiche prova ad implementare quegli algoritmi nel linguaggio scelto. Ovviamente troverai miriadi di algoritmi gia implementati per quel linguaggio, ma il punto è cercare di capirli ed implementarli.
Ti aiuta sicuramente anche qualcosa di ingegneria del software, cosi da imparare come pianificare un progetto (ok, se fai un programmino che calcola l'aria del triangolo forse non ti serve). Generalmente, se durante la codifica ti ritrovi in un vicolo cieco e devi far cambi importanti, le fasi precedenti son state un disastro.
Qualunque linguaggio tu scelga, documentati sulle librerie che ti offre. Spesso la gente perde giornate per far qualcosa che era gia fornito con linguaggio.
E non aver paura di usare un debugger quando hai errori semantici nel codice (il codice è grammaticalmente corretto, ma non ha senso e o si impalla o continua all'infinito).
Un altro consiglio su come imparare è cercare di correggere il codice altrui. Guarda i vari forum di programmazione, trovi spesso gente meno esperta di te che chiede aiuto e posta il proprio codice. Copialo e lancialo e cerca di trovare gli errori.
Dopodiche prova ad implementare quegli algoritmi nel linguaggio scelto. Ovviamente troverai miriadi di algoritmi gia implementati per quel linguaggio, ma il punto è cercare di capirli ed implementarli.
perdona tanto la mia ignoranza, ma quando parli di implementare algoritmi, intendi parti di codici già fatte per una determinata cosa?
Un altro consiglio su come imparare è cercare di correggere il codice altrui. Guarda i vari forum di programmazione, trovi spesso gente meno esperta di te che chiede aiuto e posta il proprio codice. Copialo e lancialo e cerca di trovare gli errori.
questa mi sembra un'ottima cosa... non c'avevo mai pensato :)
Esistono tutta una serie di algoritmi di base che sono generalmente insegnati nella triennale di informatica. Generalmente ti viene insegnato come calcolare la complessita di un algoritmo. Le differenti strutture dati. Vengono inoltre presentati algoritmi di ricerca, di ordinamento, ...
Questi algoritmi li trovi in qualsiasi linguaggio di programmazione gia belli e pronti. Ma nei libri di testo, e nelle slides che trovi gratis nei siti dei CdL di Informatica, sono presentati senza usar alcun linguaggio specifico.
L'idea è quella di guardarli. Capire perche uno è meglio dell'altro. E cercare di scriverli nel linguaggio (o nei linguaggi) da te scelto.
pabloski
15-03-2012, 11:53
sono totalmente nuovo al mondo della programmazione
in questo caso, se fossi in te, spenderei un pò di tempo nel capire i meccanismi del problem solving
il linguaggio è uno strumento, ma se non hai la forma mentis adatta, sarà dura creare pure il più banale hello world :D
Essendo mia intenzione di dare vita ad un browser game sulla scia di farmville, mafia wars, bubble saga etc., da quale linguaggio mi consigliate di iniziare per poter realizzare il mio progetto?
i vari browser games hanno varie componenti
una in-browser, solitamente fatta con flash ( al 99% è così ) oppure html5/javascript
ma c'è un'enorme componente server-side ( che tu non vedi ma c'è e gestisce il sistema dietro le quinte ) che può essere scritta in qualsiasi linguaggio
Mi è parso di capire che flash è una tecnologia che a breve diventerà obsoleta
veramente solo apple la pensa così :D
il resto del mondo continua a studiare, lavorare, produrre e vendere software fatto in flash
oggettivamente flash camperà almeno altri 15 anni, altro che morire a breve
soprattutto se parliamo di giochi non ci sono alternative pratiche, cross-platform, altrettanto funzionali e diffuse come flash....lo so, lo so, adesso arriva il bacchettone di turno e dirà che sono fanboy perchè non ho citato silverlight
ma silverlight ha uno share ridicolo rispetto a flash, è poco usato nell'ambiente, non tutti i browser e i sistemi operativi lo supportano a dovere
vista la sua pesantezza e la politica di Apple di non implementarla sui suoi dispositivi portatili
ecco appunto, è apple che ce l'ha con adobe non si sa per quale motivo e dice che flash non va bene
riguardo la pesantezza, faccio notare che, allo stato attuale, html5 è molto più pesante di flash
che html5 dovrebbe essere il linguaggio più "sicuro" sul quale investire le proprie risorse proprio per la sua compatibilità con tutti i dispositivi portatili di nuova generazione
certo, ma tra quanto sarà usabile, standardizzato e privo di bug per essere veramente un'alternativa per i videogames?
occhio che html5 attualmente lo usano per i siti di videostreaming, ma gli mancano parecchi pezzi per essere veramente utile per lo sviluppo di videogames
nonché per le possibilità che offre rispetto a Flash e Java
rispetto a flash offre di meno, rispetto a java, non sono nemmeno lontanamente paragonabili
java è un linguaggio "vero", non una bacheca piena di marcatori
La situazione che ho descritto è verosimile o mi conviene investire il mio tempo per imparare ad utilizzare Flash o Java?
flash ti servirà al 110% per fare giochi
il problema saranno i dispositivi come gli iphone, ipad, ishit, ecc... :D
la soluzione che ho vista implementata attualmente, è di creare app native su ios, quindi objective-c e cocoa-touch a manetta
non puoi, purtroppo, limitarti a conoscere una sola tecnologia....devi per forza di cose conoscerne almeno 3-4
hai citato java e java spesso è usato per sviluppare i famosi back-end server-side di cui parlavo sopra
ma non è l'unico e nemmeno il più usato in quella funzione....c'è python che si piazza praticamente in ogni nicchia e fa bei numeri
ci sono c#, addirittura c++ ( lo so è folle, ma c'è chi lo usa per i web services ), l'arcinoto ruby e tanti altri
comunque sia flash è basilare per quello che vuoi fare tu....inoltre adobe sta investendo moltissimo nel rendere flash interoperabile e infatti è possibile convertire app flash in html5 tramite i loro software
per cui non credo proprio che flash morirà a breve, non adesso che ha il 99% del mercato e milioni di programmatori flash sparsi per il mondo
Esistono tutta una serie di algoritmi di base che sono generalmente insegnati nella triennale di informatica. Generalmente ti viene insegnato come calcolare la complessita di un algoritmo. Le differenti strutture dati. Vengono inoltre presentati algoritmi di ricerca, di ordinamento, ...
Questi algoritmi li trovi in qualsiasi linguaggio di programmazione gia belli e pronti. Ma nei libri di testo, e nelle slides che trovi gratis nei siti dei CdL di Informatica, sono presentati senza usar alcun linguaggio specifico.
L'idea è quella di guardarli. Capire perche uno è meglio dell'altro. E cercare di scriverli nel linguaggio (o nei linguaggi) da te scelto.
ahhh, capito. mi metto subito alla ricerca :)
banryu79
15-03-2012, 13:05
ahhh, capito. mi metto subito alla ricerca :)
A questo punto potrebbe interessarti questo:
http://www.hwupgrade.it/forum/showthread.php?t=2454252
cdimauro
15-03-2012, 15:57
soprattutto se parliamo di giochi non ci sono alternative pratiche, cross-platform, altrettanto funzionali e diffuse come flash....lo so, lo so, adesso arriva il bacchettone di turno e dirà che sono fanboy perchè non ho citato silverlight
Non capisco perché tu debba offendere chi la pensa diversamente da te.
Silverlight può essere una soluzione nella misura in cui rientri i requisiti dell'applicazione. Che poi è l'unica cosa che un programmatore che si rispetti dovrebbe stare a guardare.
Un'altra soluzione su cui sto smanettando in questo periodo è Pyjamas (http://pyjs.org/): sviluppo web senza avere a che fare con HTML, CSS, Javascript, scrivendo il tutto in puro Python. :sbav:
E' presente un compilatore che provvede poi a generare i vari HTML5, CSS, e Javascript, con versioni personalizzate a seconda dei vari browser.
La cosa interessante è che in questo modo è possibile generare indifferentemente applicazioni desktop e web. Per il web, generando quei file è possibile copiarli su qualunque sito di host (niente ricerca del tipo: questo host supporta solo PHP, quest'altro anche Ruby, ecc.).
Nella sezione esempi (http://pyjs.org/examples/) c'è una caterva di dimostrativi, fra cui anche qualche giochino. Se qualcosa non funziona è perché il codice di Pyjamas generato è molto vecchio; ho già contattato l'autore del sito, che provvederà quando possibile alla ricompilazione & upload del codice (circa 200MB).
pabloski
15-03-2012, 16:54
Non capisco perché tu debba offendere chi la pensa diversamente da te.
immaginavo ti saresti fiondato :D
comunque non ho detto che silverlight fa schifo, semplicemente che tra una tecnologia che ha il 90% e oltre del mercato e un'altra che arranca ( ed è pure stata semiabbandonata dallo stesso produttore in favore di html5 ), io consiglio la prima
Silverlight può essere una soluzione nella misura in cui rientri i requisiti dell'applicazione. Che poi è l'unica cosa che un programmatore che si rispetti dovrebbe stare a guardare.
certo, ma siccome silverlight non fa niente che flash non possa fare ed inoltre crea pure problemi perchè non tutti c'hanno il plugin già bello ed installato e non tutti c'hanno windows, allora ( da programmatore che si rispetta ) consiglio flash
Un'altra soluzione su cui sto smanettando in questo periodo è Pyjamas (http://pyjs.org/): sviluppo web senza avere a che fare con HTML, CSS, Javascript, scrivendo il tutto in puro Python. :sbav:
E' presente un compilatore che provvede poi a generare i vari HTML5, CSS, e Javascript, con versioni personalizzate a seconda dei vari browser.
ecco, questa è una soluzione che si potrebbe consigliare al posto di flash, visto che ha evidenti vantaggi rispetto a quest'ultimo
Nella sezione esempi (http://pyjs.org/examples/) c'è una caterva di dimostrativi, fra cui anche qualche giochino. Se qualcosa non funziona è perché il codice di Pyjamas generato è molto vecchio; ho già contattato l'autore del sito, che provvederà quando possibile alla ricompilazione & upload del codice (circa 200MB).
eh, ok, ma a che punto è html5? ho letto in giro cose non bellissime
ok per i video, ma per i giochi sembra che html5 sia mancante in alcuni punti, a partire dalle performance non brillanti
se oggi uno sviluppatore decidesse di abbandonare flash per fiondarsi su html5, non è che poi nel giro di qualche settimana se ne potrebbe pentire?
cdimauro
15-03-2012, 17:02
immaginavo ti saresti fiondato :D
Hai toccato il tasto giusto. :huh:
comunque non ho detto che silverlight fa schifo, semplicemente che tra una tecnologia che ha il 90% e oltre del mercato e un'altra che arranca ( ed è pure stata semiabbandonata dallo stesso produttore in favore di html5 ), io consiglio la prima
E' una tecnologia che ha i suoi pro e i suoi contro, come per tutte le cose. Scartarlq a priori non ha senso: lo si può fare con in mano i requisiti.
certo, ma siccome silverlight non fa niente che flash non possa fare ed inoltre crea pure problemi perchè non tutti c'hanno il plugin già bello ed installato e non tutti c'hanno windows, allora ( da programmatore che si rispetta ) consiglio flash
Come sopra: se il dominio applicativo è compatibile con Silverlight, non vedo perché escluderlo. Se quanto hai scritto fa parte dei requisiti, allora ha senso escludere SL, altrimenti è papabile al pari delle altre tecnologie.
ecco, questa è una soluzione che si potrebbe consigliare al posto di flash, visto che ha evidenti vantaggi rispetto a quest'ultimo
eh, ok, ma a che punto è html5? ho letto in giro cose non bellissime
Idem. Infatti Pyjamas non sfrutta funzionalità che non sono presenti su tutti i browser più quotati.
Il vantaggio comunque rimane notevole, perché si smazza lui tutti i problemi di incompatibilità o trucchetti vari. Finora dalle prove che ho fatto sembra funzioni allo stesso modo con tutti i browser (IE9, Opera, Safari, e FireFox 3.x; soltanto Chrome non ho provato).
ok per i video, ma per i giochi sembra che html5 sia mancante in alcuni punti, a partire dalle performance non brillanti
E' così, ma dipende anche da quello che ci vuoi fare.
se oggi uno sviluppatore decidesse di abbandonare flash per fiondarsi su html5, non è che poi nel giro di qualche settimana se ne potrebbe pentire?
Se vuole realizzare Doom4 sì. Sul resto, bisogna vedere caso per caso.
vendettaaaaa
15-03-2012, 17:30
Se vuole realizzare Doom4 sì. Sul resto, bisogna vedere caso per caso.
Cioè...flash di Adobe è usato nello sviluppo di giochi seri? :eek:
cdimauro
15-03-2012, 17:48
Ma no, che io sappia proprio no. Era soltanto una battuta. :D
vendettaaaaa
15-03-2012, 18:12
:doh: mi pareva strano...ma anche io che faccio certe domande! :D
pabloski
15-03-2012, 18:28
però ho visto che in moltissimi titoli tripla A lo usano per lo scripting, per la riproduzione video e altre cosine
quindi non è proprio una tecnologia da buttare, magari è vecchia, magari se ne abusa tantissimo
il punto è che difficilmente flash morirà a breve e bisogna conviverci per forza
Ventresca
15-03-2012, 19:46
in questo caso, se fossi in te, spenderei un pò di tempo nel capire i meccanismi del problem solving
il linguaggio è uno strumento, ma se non hai la forma mentis adatta, sarà dura creare pure il più banale hello world :D
ok, da dove posso iniziare?
i vari browser games hanno varie componenti
una in-browser, solitamente fatta con flash ( al 99% è così ) oppure html5/javascript
ma c'è un'enorme componente server-side ( che tu non vedi ma c'è e gestisce il sistema dietro le quinte ) che può essere scritta in qualsiasi linguaggio
javascript e java sono la stessa cosa? (parlo da completo ignorante)
veramente solo apple la pensa così :D
il resto del mondo continua a studiare, lavorare, produrre e vendere software fatto in flash
oggettivamente flash camperà almeno altri 15 anni, altro che morire a breve
soprattutto se parliamo di giochi non ci sono alternative pratiche, cross-platform, altrettanto funzionali e diffuse come flash....lo so, lo so, adesso arriva il bacchettone di turno e dirà che sono fanboy perchè non ho citato silverlight
ma silverlight ha uno share ridicolo rispetto a flash, è poco usato nell'ambiente, non tutti i browser e i sistemi operativi lo supportano a dovere
lo so che purtroppo è solo apple che ha abbandonato flash (sono passato ad android proprio per questo), ma è pur vero che la stessa adobe ha annunciato che a breve non supporterà più flash mobile, e questo, a fronte del fatto che ormai tutto il mercato si sta spostando gradualmente sul mobile, non è secondo me una cosa di poco conto.
certo, ma tra quanto sarà usabile, standardizzato e privo di bug per essere veramente un'alternativa per i videogames?
occhio che html5 attualmente lo usano per i siti di videostreaming, ma gli mancano parecchi pezzi per essere veramente utile per lo sviluppo di videogames
rispetto a flash offre di meno, rispetto a java, non sono nemmeno lontanamente paragonabili
java è un linguaggio "vero", non una bacheca piena di marcatori
ecco, ma java può essere usato per il mio fine?
flash ti servirà al 110% per fare giochi
il problema saranno i dispositivi come gli iphone, ipad, ishit, ecc... :D
la soluzione che ho vista implementata attualmente, è di creare app native su ios, quindi objective-c e cocoa-touch a manetta
non puoi, purtroppo, limitarti a conoscere una sola tecnologia....devi per forza di cose conoscerne almeno 3-4
hai citato java e java spesso è usato per sviluppare i famosi back-end server-side di cui parlavo sopra
ma non è l'unico e nemmeno il più usato in quella funzione....c'è python che si piazza praticamente in ogni nicchia e fa bei numeri
ci sono c#, addirittura c++ ( lo so è folle, ma c'è chi lo usa per i web services ), l'arcinoto ruby e tanti altri
sempre da ignorante: quanto diverge objective-c da C? una volta imparato a padroneggiare il C sono necessari molti sforzi per passare all'objective C?
Python viene spesso citato qui su hwu, ma ha gli stessi ambiti di utilizzo di java o è più limitato?
comunque sia flash è basilare per quello che vuoi fare tu....inoltre adobe sta investendo moltissimo nel rendere flash interoperabile e infatti è possibile convertire app flash in html5 tramite i loro software
per cui non credo proprio che flash morirà a breve, non adesso che ha il 99% del mercato e milioni di programmatori flash sparsi per il mondo
una domanda: quale linguaggio utilizzano i seguenti giochi?
- Farmville
- QuakeLive (quello che si gioca tramite browser)
- N.O.V.A. Near Orbit Vanguard Alliance: Elite
pabloski
15-03-2012, 21:01
ok, da dove posso iniziare?
segui il link nella firma di Cesare
è un ottimo e-book, usa python come linguaggio, ma è focalizzato nell'insegnare a "pensare da informatico" ( beh lo dice pure il titolo )
javascript e java sono la stessa cosa? (parlo da completo ignorante)
no, giusto la sintassi si somiglia :D
javascript è un linguaggio di scripting, java è un linguaggio per cose "più serie"
anche se ultimamente javascript impazza e si sono viste cose incredibili, tipo node.js che è un framework javascript con cui si sono realizzati pure dei web server
lo so che purtroppo è solo apple che ha abbandonato flash (sono passato ad android proprio per questo), ma è pur vero che la stessa adobe ha annunciato che a breve non supporterà più flash mobile, e questo, a fronte del fatto che ormai tutto il mercato si sta spostando gradualmente sul mobile, non è secondo me una cosa di poco conto.
si, adobe sembra intenzionata a non sostenere più gli sforzi per sviluppare e mantenere flash
d'altronde flash è ormai a specifiche aperte, per cui è possibile che altri si prendano carico di svilupparlo, qualora adobe dovesse tirarsi indietro
il punto è che là fuori ci sono milioni di programmatori flash, non gli si può dire che hanno perso tempo e denaro....infatti adobe sta mantenendo tutti i tool di sviluppo soliti, ma li sta dotando della possibilità di esportare in html5 e javascript
ecco, ma java può essere usato per il mio fine?
come linguaggio server-side si, ma i browser non supportano più java....ovvero esistono i cosidetti applet java, ma onestamente non vedo più in giro da almeno 8 anni
java è adatto a sviluppare la parte server del tuo gioco, ma poi la parte più mondana ( grafica, suoni, scemenze varie ) vanno implementati lato client, cioè sul pc del giocatore ovvero nel browser
sempre da ignorante: quanto diverge objective-c da C? una volta imparato a padroneggiare il C sono necessari molti sforzi per passare all'objective C?
objective-c è un superset del c, cioè un'estensione di quest'ultimo
è un linguaggio con una sintassi strana, per chi viene dal mondo c++, java, ecc.... però non è impossibile da apprendere
è praticamente come apprendere il c++
Python viene spesso citato qui su hwu, ma ha gli stessi ambiti di utilizzo di java o è più limitato?
python può essere usato per qualsiasi cosa e ha l'enorme vantaggio di un'elevata espressività, cioè con poche istruzioni puoi fare una marea di cose
chi conosce il basic noterà questa cosa in comune tra i due linguaggi
inoltre negli ultimi anni sono stati ideati vari metodi per rendere i programmi python molto più veloci, per cui si è finito di usarlo solo per prototipazione o "programmini" fatti per gioco
una domanda: quale linguaggio utilizzano i seguenti giochi?
- Farmville
- QuakeLive (quello che si gioca tramite browser)
- N.O.V.A. Near Orbit Vanguard Alliance: Elite
[/quote]
proprio quelli che ho detto, cioè flash per la parte client-side e vari linguaggi ( lo sanno solo loro quali esattamente ) per la parte server-side
alla fin fine il problema è come far girare qualcosa nel browser e le scelte possibili sono 3: flash, silverlight, html5/javascript
la prima è quella usata da decenni e ancora oggi la preferita
la seconda ha avuto un timido boom alcuni anni fa, ma non si è arrivati al market share che microsoft voleva e anzi la stessa azienda sembra intenzionata a metterlo in secondo piano rispetto a html5
la terza è la tecnologia del futuro, ma è immatura per chi vuole programmare giochi senza troppi sbattimenti...poi c'è il problema di quali parti di html5 implementano i browser....attualmente google chrome è quello che implementa più elementi di html5, gli altri ne implementano qualcuna in meno, e complessivamente non puoi fare affidamento sul livello di supporto dei vari browser
- Farmville
La parte web è in flash, la parte server in php
Ventresca
16-03-2012, 16:00
segui il link nella firma di Cesare
è un ottimo e-book, usa python come linguaggio, ma è focalizzato nell'insegnare a "pensare da informatico" ( beh lo dice pure il titolo )
objective-c è un superset del c, cioè un'estensione di quest'ultimo
è un linguaggio con una sintassi strana, per chi viene dal mondo c++, java, ecc.... però non è impossibile da apprendere
è praticamente come apprendere il c++
python può essere usato per qualsiasi cosa e ha l'enorme vantaggio di un'elevata espressività, cioè con poche istruzioni puoi fare una marea di cose
chi conosce il basic noterà questa cosa in comune tra i due linguaggi
inoltre negli ultimi anni sono stati ideati vari metodi per rendere i programmi python molto più veloci, per cui si è finito di usarlo solo per prototipazione o "programmini" fatti per gioco
dunque anche se volessi rinunciare al web game e spostarmi su sviluppo per iOS e quindi su objective-C, mi consigli comunque di partire con python e quell'ebook in firma a cdimauro oppure di iniziare direttamente prima con C e poi objective-C, saltando python e la pubblicazione della firma di cdimauro?
pabloski
16-03-2012, 16:16
dunque anche se volessi rinunciare al web game e spostarmi su sviluppo per iOS e quindi su objective-C, mi consigli comunque di partire con python e quell'ebook in firma a cdimauro oppure di iniziare direttamente prima con C e poi objective-C, saltando python e la pubblicazione della firma di cdimauro?
quel libro t'insegna a pensare come un informatico e a risolvere problemi
se non hai la mentalità giusta, è inutile studiare questo o quel linguaggio....chiaramente per insegnare a pensare da informatico bisogna fare degli esempi e vanno fatti in un qualche linguaggio....l'autore di quel libro ha scelto python perchè è privo di fronzoli e dettagli che possono distrarre
chiaramente una volta acquisita la giusta mentalità, potrai studiare tutti i linguaggi che ti pare, tanto alla fin fine hanno tutti una sintassi simile ( la stragrande maggioranza copia la sintassi del C ) e si differenziano solo per alcuni costrutti e le librerie standard che offrono
ribadisco che, leggendo quel libro, non stai imparando python ma stai imparando a programmare
ad esempio, io ho imparato col basic sul c64, poi ho studiato e usato pascal quando comprai il primo pc con msdos 3.3 ( che tempi :D )....stanco del programmare ad alto livello, senza sapere cosa faceva la macchina dietro le quinte, comprai un libro in inglese ( di un certo Walter Coffron ) sull'assembly x86 e approfondii tutti i dettagli del perchè e del come i computer agiscono
poi sono venuti c, c++, java, python, php, javascript, scala, un pò ( molto poco ) di perl, l'immancabile e abominevole bash scripting ( eh beh lo conto come linguaggio :D ), objective-c, uno spuntino di D ( peccato, è un ottimo linguaggio, ma è poco diffuso ) e, infine, google go
se ti può essere di conforto non posso non quotare pabloski.
io anni fa avevo provato col c++ e mi stavo per sparare in bocca (non tanto per il linguaggio ma per i principi in generale), poi l'estate scorsa ho sentito parlare di python e di Pensare Informatico e mi ha aperto molto la mente anche, come lo dimostra questo topic, ho ancora molte difficoltà nel pensare correttamente, ma quel libro ti assicuro è essenziale e scritto in modo chiaro (anche se verso la fine, mio modestissimo parare, si perde un po' con la creazione del gioco bridge, ma ripeto, è una mia osservazione molto probabilmente dovuta alla manca di qualche rotella :stordita: ).
Io te lo consiglio insomma :D
Ventresca
16-03-2012, 18:17
ok. metto allora da subito le mani avanti: una volta finito quel libro, quale mi consigliate come successivo per il C e poi per l'objective C?
domattina vado a stampare Pensare Informatico. Ma è legale?
pabloski
16-03-2012, 19:52
ok. metto allora da subito le mani avanti: una volta finito quel libro, quale mi consigliate come successivo per il C e poi per l'objective C?
beh, dopo il libro, meglio fare un pò di pratica :D
poi semmai guardati il c e poi l'objective-c, altrimenti non capirai nulla del secondo
domattina vado a stampare Pensare Informatico. Ma è legale?
direi di si, è distribuito ovunque e non certo su thepiratebay :D
Ventresca
31-08-2013, 16:11
scusate per la resurrezione del thread, ma ho finito il libro. ora?
pabloski
31-08-2013, 16:18
scusate per la resurrezione del thread, ma ho finito il libro. ora?
Scrivi quanti più programmi puoi. Devi allenarti, vedrai che sorgeranno tanti dubbi mentre realizzi programmi pratici.
scusate per la resurrezione del thread, ma ho finito il libro. ora?
In solo un anno e 5 mesi? :D
Ventresca
31-08-2013, 22:44
ho dovuto interrompere per motivi di lavoro e di salute :)
Ventresca
31-08-2013, 22:47
Scrivi quanti più programmi puoi. Devi allenarti, vedrai che sorgeranno tanti dubbi mentre realizzi programmi pratici.
qualche sito con esercizi o programmi dai quali prendere spunto?
pabloski
31-08-2013, 22:51
qualche sito con esercizi o programmi dai quali prendere spunto?
Che io sappia non ce ne sono. Però puoi andare su berlios o sourceforge e dare una sfogliata ai progetti che ci sono. Alcuni sono ovviamente complessi e quindi da evitare, ma altri possono fungere da ottimo spunto.
cdimauro
01-09-2013, 06:29
scusate per la resurrezione del thread, ma ho finito il libro. ora?
Leggiti per bene il tutorial della versione 2.7 di Python (http://docs.python.org/2/tutorial/index.html), così sei allineato alle modifiche che ha avuto il linguaggio negli ultimi.
Dai un'occhiata generale anche alla libreria standard (http://docs.python.org/2/library/index.html) per capire almeno quali "mattoncini" belli e pronti Python ti mette a disposizione, così quando ne avrai bisogno saprai dove andare a cercare. Al momento ti serve soltanto sapere all'incirca quali moduli e le classi più importanti sono presenti, e non il loro esatto contenuto.
Finito col ramo 2.x (2.7 è e sarà l'ultima versione di questo ramo), potresti dare un'occhiata al tutorial (http://docs.python.org/3/tutorial/index.html) e alla libreria standard (http://docs.python.org/3/library/index.html) della versione 3.3, visto che il ramo 3.x rappresenta il futuro del linguaggio.
Non ti serve studiare tutto a fondo, ma semplicemente consolidare ciò che hai acquisito e migliorare il tuo bagaglio culturale.
In questo modo dovresti ottenere una buona conoscenza del linguaggio e degli strumenti, sia sintattici che di libreria, che mette a disposizione. Dopo l'acquisita capacità di risoluzione dei problemi, è il passo in più che ti consente di essere molto più produttivo.
Finito questo, non ti resta che decidere su cosa buttarti. Pensa a una cosa che ti può essere utile o ti piace, e lavoraci.
P.S. Spero che tu abbia acquisito anche una buona conoscenza dell'inglese, almeno tecnico, perché è fondamentale per andare avanti in questo campo.
Ventresca
01-09-2013, 16:23
Leggiti per bene il tutorial della versione 2.7 di Python (http://docs.python.org/2/tutorial/index.html), così sei allineato alle modifiche che ha avuto il linguaggio negli ultimi.
Dai un'occhiata generale anche alla libreria standard (http://docs.python.org/2/library/index.html) per capire almeno quali "mattoncini" belli e pronti Python ti mette a disposizione, così quando ne avrai bisogno saprai dove andare a cercare. Al momento ti serve soltanto sapere all'incirca quali moduli e le classi più importanti sono presenti, e non il loro esatto contenuto.
Finito col ramo 2.x (2.7 è e sarà l'ultima versione di questo ramo), potresti dare un'occhiata al tutorial (http://docs.python.org/3/tutorial/index.html) e alla libreria standard (http://docs.python.org/3/library/index.html) della versione 3.3, visto che il ramo 3.x rappresenta il futuro del linguaggio.
Non ti serve studiare tutto a fondo, ma semplicemente consolidare ciò che hai acquisito e migliorare il tuo bagaglio culturale.
In questo modo dovresti ottenere una buona conoscenza del linguaggio e degli strumenti, sia sintattici che di libreria, che mette a disposizione. Dopo l'acquisita capacità di risoluzione dei problemi, è il passo in più che ti consente di essere molto più produttivo.
Finito questo, non ti resta che decidere su cosa buttarti. Pensa a una cosa che ti può essere utile o ti piace, e lavoraci.
P.S. Spero che tu abbia acquisito anche una buona conoscenza dell'inglese, almeno tecnico, perché è fondamentale per andare avanti in questo campo.
Grazie mille!
Per quanto riguarda su cosa buttarmi, avevo pensato al C una volta finito con python, per poi passare all'objective C (l'intenzione è sviluppare app per iphone/ipad).
Fatta questa premessa, una domanda: ma mi conviene concentrarmi così tanto su Python per poi passare comunque al C? Considerando che comunque il mio obiettivo finale è il C, non mi conviene approfondire quello, invece che Python che comunque sul testo viene usato come un'"infarinatura" generale su come funzionala programmazione?
Sia chiaro che lo chiedo per curiosità, non per criticare quanto mi è stato consigliato.
Per quanto riguarda l'inglese, per fortuna, non dovrei avere problemi.
[Kendall]
02-09-2013, 09:28
Grazie mille!
Per quanto riguarda su cosa buttarmi, avevo pensato al C una volta finito con python, per poi passare all'objective C (l'intenzione è sviluppare app per iphone/ipad).
Fatta questa premessa, una domanda: ma mi conviene concentrarmi così tanto su Python per poi passare comunque al C? Considerando che comunque il mio obiettivo finale è il C, non mi conviene approfondire quello, invece che Python che comunque sul testo viene usato come un'"infarinatura" generale su come funzionala programmazione?
Sia chiaro che lo chiedo per curiosità, non per criticare quanto mi è stato consigliato.
Per quanto riguarda l'inglese, per fortuna, non dovrei avere problemi.
Se il tuo scopo è quello di programmare per dispositivi della mela perderti troppo sul Python secondo me non è una buona mossa (come hai giustamente, dal mio punto di vista, fatto notare pure tu).
Io sinceramente non mi perderei neppure eccessivamente sul C puro ma cercherei un libro con le cosiddette palle per Objective-C (che se fatto bene incorpora diversi concetti e principi del C, ma li mette nell'ottica corretta per insegnarti l'Objective-C).
cdimauro
03-09-2013, 06:23
Non posso che concordare, visto l'obiettivo.
Ciao,
ti consiglio di dare uno sguardo a questo minicorso, che offre molti spunti realizzativi, di "difficoltà" man mano crescente:
http://parliamodi-ubuntu.blogspot.it/p/lindice-di-mission-python.html
Su questo blog trovi una miriade di ottimi post legati alla programmazione pratica:
http://okpanico.wordpress.com/
:)
Ventresca
03-09-2013, 15:12
;39904465']Se il tuo scopo è quello di programmare per dispositivi della mela perderti troppo sul Python secondo me non è una buona mossa (come hai giustamente, dal mio punto di vista, fatto notare pure tu).
Io sinceramente non mi perderei neppure eccessivamente sul C puro ma cercherei un libro con le cosiddette palle per Objective-C (che se fatto bene incorpora diversi concetti e principi del C, ma li mette nell'ottica corretta per insegnarti l'Objective-C).
Non posso che concordare, visto l'obiettivo.
ok, consigli per il libro in questione?
p.s.:
Se l'objective-C è praticamente ad appannaggio dello sviluppo per prodotti Apple, con il "semplice" C quali sono invece i potenziali utilizzi?
[Kendall]
03-09-2013, 15:47
ok, consigli per il libro in questione?
p.s.:
Se l'objective-C è praticamente ad appannaggio dello sviluppo per prodotti Apple, con il "semplice" C quali sono invece i potenziali utilizzi?
Il C a differenza dell'objective C (e del C++) non è un linguaggio di programmazione ad oggetti.
Ciò lo rende inadatto a molti campi di impiego (in quanto non è molto modulare e difficilmente si riesce a fare manutenzione, estensioni od altro su quel tipo di codice). Per farla in maniera semplice, nella programmazione ad oggetti si creano tanti "mattoni" indipendenti da assemblare insieme, cosa che nel c è difficilmente realizzabile, di certo non con la versatilità dei linguaggi ad oggetti.
Io non sono un gran utilizzatore di C, ma questo solitamente viene impiegato nelle operazioni a basso livello, per esempio la scrittura di driver, di parti dei sistemi operativi o di api di basso livello. Un pò tutte quelle cose dove c'è necessità di avere elevate performance e accesso alle risorse "crude".
Magari chi ne fa uso intensivo può farti altri esempi di impiego.
Secondo me, a meno che tu non voglia indirizzarti su simili cose, eviterei di prendere eccessiva confidenza con il C, è un linguaggio che ti lascia il segno e tende ad allontanarti dai principi della programmazione ad oggetti che userai invece per la scrittura di software per sistemi mobile o desktop.
cdimauro
03-09-2013, 18:39
ok, consigli per il libro in questione?
p.s.:
Se l'objective-C è praticamente ad appannaggio dello sviluppo per prodotti Apple, con il "semplice" C quali sono invece i potenziali utilizzi?
Il C lascialo perdere: non ci faresti niente con iOS. Per quest'ultimo usare Objective-C, come ti è già stato consigliato.
Poi ci sarebbe pure Xamarin come soluzione, ma non voglio confonderti le idee...
Il C lascialo perdere: non ci faresti niente con iOS.
Nsomma. Tutte le librerie Core* sono in C puro e in C si fa un mucchio di roba a parte le interfacce, su iPhone... si fa anche della roba che in ObjC non fai, tipo OpenGL.
Dipende molto da che tipo di applicazione devi fare. Ad esempio, e' molto raro scrivere videogiochi in ObjC dato che non ti interessa usare UIKit e di solito basta una classe "colla" in ObjC e tutto il resto e' C/C++ puro :D
cdimauro
04-09-2013, 05:34
Sì, ma non si scappa: da ObjectiveC/C++ devi passare per forza. Che peraltro è un superset del C/C++.
Voglio dire: col C/C++ nudo e crudo non puoi sviluppare nulla per iOS. Ti serve per forza ObjectiveC/C++, non foss'altro per fare da collante col sistema, appunto.
Sì, ma non si scappa: da ObjectiveC/C++ devi passare per forza. Che peraltro è un superset del C/C++.
Voglio dire: col C/C++ nudo e crudo non puoi sviluppare nulla per iOS. Ti serve per forza ObjectiveC/C++, non foss'altro per fare da collante col sistema, appunto.
Vero, ma se sono 350 righe su 50.000 non si puo' certo dire che il gioco e' scritto in Objective C :D
Inoltre e' tutto boilerplate che si copincolla alla grande, personalmente la prima volta che l'ho fatto avevo 0 idea di come funzionasse Objective C in se :asd:
PS: c'e' anche un mare di librerie per fare giochi e app su iOS senza ObjC.
[Kendall]
04-09-2013, 08:49
C'è da dire che la programmazione di giochi e il mettere mano in generale alle opengl è un topic un pò avanzato se il ragazzo è alle prime armi.
Facile che come primo step voglia impararsi per bene le tecniche per sviluppare normali applicativi per iDevices (per normali intendo applicativi con UI standard, niente 3D e cose così).
Ventresca
04-09-2013, 19:27
;39914049']C'è da dire che la programmazione di giochi e il mettere mano in generale alle opengl è un topic un pò avanzato se il ragazzo è alle prime armi.
Facile che come primo step voglia impararsi per bene le tecniche per sviluppare normali applicativi per iDevices (per normali intendo applicativi con UI standard, niente 3D e cose così).
Ovviamente andrò per gradi.
cdimauro
05-09-2013, 06:38
Vero, ma se sono 350 righe su 50.000 non si puo' certo dire che il gioco e' scritto in Objective C :D
Inoltre e' tutto boilerplate che si copincolla alla grande, personalmente la prima volta che l'ho fatto avevo 0 idea di come funzionasse Objective C in se :asd:
PS: c'e' anche un mare di librerie per fare giochi e app su iOS senza ObjC.
Lo so. Infatti potrebbe sfruttare quello che ha imparato con Python usando Kivy (http://kivy.org/#home), ad esempio, sfruttando anche OpenGL. Visto che sta iniziando, potrebbe essere un buon compromesso.
Comunque se vuole realizzare app iOS native, credo sia meglio che si rivolga a Objective-C, eventualmente spostando la business logic su codice C/C++ (quindi potenzialmente riciclabile anche per altre piattaforme).
Comunque se vuole realizzare app iOS native, credo sia meglio che si rivolga a Objective-C,
Senza dubbio, proponevo solo una possibile eccezione molto comune, dato che i giochi sono piu' del 70% delle applicazioni :D
Ma se l'app e' il classico "rich client" con un'interfaccia che parla con qualche servizio web tipo facebook/instagram/twitter/appdellabanca o un tool/utility, Cocoa e' l'unica via:read:
Ventresca
05-09-2013, 17:19
ok, qualche titolo per il libro "con le palle" di objective-c?
Ventresca
09-09-2013, 11:04
up
Salve gente :)
Probabilmente questa domanda sarà stata fatta milioni di volte e con molte risposte. Ho vagato in giro per il web ma non ho trovato nulla che mi potesse interessare però.
Avrei una domanda molto semplice per tutti quelli che sanno programma (non importa assolutamente in che linguaggio).
La questione è facile: come si impara a programmare?
Voi come avete imparato?
Mi spiego. Posso prendere un testo che mi insegni la programmazione in Java, C++ o altro, posso seguire un corso etc, eppure, nonostante questo io trovo difficoltà nel capire come si possa imparare sul serio a fare un programma (se pur molto semplice). Entro ancora meglio nel dettaglio, almeno per quanto riguarda la mia persona.
Ho sempre voluto imparare a programmare, più che altro per passione niente di particolare, ma non ho mai avuto quella dedizione negli anni passati di mettermi lì e provare e riprovare. Negli ultimi tempi ho deciso di riprendere un po' questo discorso e mi sono avvicinato prima a Python e poi a Java. Python mi è stato molto d'aiuto nel capire i concetti basi (ha una sintassi chiarissima) poi però sono passato a Java grazie al quale, stranamente, mi sono sentito a mio agio a vagare per le classi (sarà stato grazie a Platone :stordita: ?). Ho provato diversi testi e alla fine ho utilizzato quello di Claudio De Sio che mi è semprato quello più adatto a me. Ebbene, ora entra in gioco il mio problema. Posso anche imparare tutto il libro, ma per me resta sempre teoria :( Vedo solo concetti, posso anche risolvere gli esercizi proposti, ma per me resta solo teoria che sul serio non riesco a capire come possa essere messa in pratica. E sottolineo che non è colpa del testo, perché ne ho provati altri, ho provato anche Pensare Informatico (che almeno è stato utilissimooo nel farmi entrare nell'ottica della programmazione). E' chiaro che un testo come un corso non potrà mai affrontare tutto quello che c'è da sapere. Il mio dilemma è quindi: come si fa a rendere pratico i concetti appresi? Avevo pensato di realizzare semplici giochi come la tombola o la scopa (forse quest'ultimo è un po' più complesso) ma ho serie difficoltà a comprendere il meccanismo, ecco perché ero in cerca di consigli pratici prima di abbandonare definitivamente questa esperienza che ho già messo da parte da alcuni mesi.
Spero di essere stato chiaro (cosa che dubito fortemente :D )
per imparare a programmare l'unica è sbatterci la testa contro. e senza un professore o qualcuno che ti insiegni è durissima
ovviamente la parte tosta è imparare a trovare gli algoritmi giusti perchè poi il resto è mero studio della sintassi di un programma..
Ventresca
10-09-2013, 17:51
ehm... si, ma a me serviva il nome di un buon libro per objective-c ...
vendettaaaaa
10-09-2013, 18:03
ehm... si, ma a me serviva il nome di un buon libro per objective-c ...
I migliori modi per scegliere un libro sono:
- comprare il libro di uno dei creatori/maggiori esponenti del linguaggio (o framework) che vuoi utilizzare (io ad esempio coi libri di Stroustrup sul C++ sono andato a colpo sicuro)
- leggere tante recensioni di quelle con senso critico su Amazon.com, perchè è il sito con più recensioni rispetto ai suoi cugini .co.uk e .it, e farti un'idea.
pabloski
10-09-2013, 18:09
ehm... si, ma a me serviva il nome di un buon libro per objective-c ...
Ti consiglio Programming in Objective-C di Kochan.
Però ci sono pure tanti tutorial. Imho non è strettamente necessario un libro.
The_ouroboros
10-09-2013, 18:10
Io comincerei da un po di buona "vecchia" logica booleana e logica in generale (porte logiche, ...).
Poi passerei a capire il tipo di problemi che voglio risolvere.
In base a quello sceglierei il linguaggio e comincerei a leggere codice altrui e magari studiare su un libro.
Just sain' my 2 cents, folks :stordita:
Ventresca
11-09-2013, 11:51
I migliori modi per scegliere un libro sono:
- comprare il libro di uno dei creatori/maggiori esponenti del linguaggio (o framework) che vuoi utilizzare (io ad esempio coi libri di Stroustrup sul C++ sono andato a colpo sicuro)
- leggere tante recensioni di quelle con senso critico su Amazon.com, perchè è il sito con più recensioni rispetto ai suoi cugini .co.uk e .it, e farti un'idea.
Ti consiglio Programming in Objective-C di Kochan.
Però ci sono pure tanti tutorial. Imho non è strettamente necessario un libro.
Grazie mille.
Ho trovato il libro e letto le recensioni: a quanto pare sembra veramente ben fatto, l'unico neo è che è tutto in inglese. Premesso che non ho problemi con la lingua, però non vorrei trovarmi a fare inutilmente uno sforzo eccessivo dovendo imparare un argomento nuovo e per di più in un'altra lingua..
Non esiste una versione tradotta?
The_ouroboros
11-09-2013, 11:53
Grazie mille.
Ho trovato il libro e letto le recensioni: a quanto pare sembra veramente ben fatto, l'unico neo è che è tutto in inglese. Premesso che non ho problemi con la lingua, però non vorrei trovarmi a fare inutilmente uno sforzo eccessivo dovendo imparare un argomento nuovo e per di più in un'altra lingua..
Non esiste una versione tradotta?
Inglese tecnico è meglio dell'italica lingua.
Più conciso e diretto al punto.
(se poi devi studiare dopo 8 ore di lavoro, allora forse in italiano ci starebbe)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.