View Full Version : aiuto, basi per iniziare a programmare??
ciao ragazzi e da tempo che volevo cercarmi qualche guida o un libro che mi aiutasse ma non ho trovato nulla
mi interessa programmare per il so symbian applicazioni con estensione jar/sis/sisx
quindo non so da dove partire o di quale linguaggio sono creati
vi chiedo di consigliarmi qualche sito o un libro che vi ha aiutato
grazie
MCviper
vendettaaaaa
05-01-2013, 23:02
Ehm...arrivi un po' tardi a programmare per Symbian. Perchè vuoi fare app proprio per quel SO?
Cmq per Symbian devi imparare il linguaggio C++ e utilizzare il framework Qt (che sta diventando sempre più multipiattaforma, e già permette di scrivere per Android).
grazie vendetta
si hai ragione l'era dei sybmian e gia passata ma intendevo anche symbian anna e belle (sorry, anche questi 2 hanno lo stesso linguaggio del primo)
e le applicazioni su windows phone in quale linguaggio vengono scritti??
in c# utilizzando però visual studio, che è a pagamento ammenoché tu nn sia uno studente la cui università può darti le licenze...
ma comunque ribadisco quello che dico a tutti in questi casi...secondo la mia corrente di pensiero dovresti prima leggerti dei libri sulle BASI o FONDAMENTI della programmazione, per entrare nell'ottica dell'argomento, poi puoi passare a studiare C/C++/Java...la maggior parte dei linguaggi di programmazione oggi hanno sintassi C like...poi potresti passare ad un linguaggio non tipato, tipo Python o ruby, giusto per assaporare qualcosa di alternativo...questa credo sia la prassi base per imparare a programmare
La versione Express è free e si può usare per sviluppare applicazioni commerciali.
http://www.microsoft.com/visualstudio/ita/products/visual-studio-express-for-windows-phone
vendettaaaaa
06-01-2013, 13:59
grazie vendetta
si hai ragione l'era dei sybmian e gia passata ma intendevo anche symbian anna e belle (sorry, anche questi 2 hanno lo stesso linguaggio del primo)
e le applicazioni su windows phone in quale linguaggio vengono scritti??
Sì pure Belle è acqua passata...entro un anno secondo me il Nokia Store sarà quasi morto, se già non lo è ora.
Cmq lascerei perdere l'obiettivo delle app per ora, se non sai ancora scrivere neanche Hello World! nella console...fatti prima le basi, studiando C++.
A mio modo di vedere, C è troppo complicato per cominciare, mentre C++ è dotato di una serie di strumenti più potenti che semplificano la programmazione, mantenendo però un certo livello di dettaglio su come funziona un linguaggio, un compilatore, la gestione della memoria.
Ti consiglio il miglior libro che abbia mai letto: "Programming: Principles and Practice Using C++" di Stroustrup, il creatore di questo linguaggio. Spiega con una chiarezza disarmante...
vendettaaaaa
06-01-2013, 14:42
singolare punto di vista, dato che molto probabilmente il C++ è il linguaggio più rognoso che c'è in giro ed è un superset del C. :Prrr:
Lo sapevo che dovevo mettere l'esempio: gestire stringhe. In C++ è molto più semplice che in C, poichè si fa con una classe e senza dover capire come funzionano gli array (e quindi i puntatori). Diciamo che mi son trovato molto, mooolto facilitato agli inizi nella mia "carriera" da programmatore (orientato al calcolo numerico) perchè avevo a disposizione vector e string. Grazie ad essi ho potuto affrontare i puntatori poco alla volta. Tuttora, che ho capito bene questi concetti, evito i vari strcpy eccetera come la peste...
pabloski
06-01-2013, 15:24
Perchè vuoi iniziare dal mobile? Non sarebbe più logico iniziare a programmare su pc?
Considera inoltre che gli OS mobile che vanno attualmente per la maggiore sono ios e android.
grazie a tutti per le chiare risposte che mi avete dato
pabloski, il mio obbietivo principare e nokia pur sapendo che OS e android, magari in un momento futuro quando avrò appreso il linguaggio c mi verra piu facie sempre passare a questi 2.
Non capisco quindi mi sarebbe più utile iniziare a programmare per i pc??
@vendettaaaaa scusa quel libro che mi hai cosigliato dove lo posso trovare??
vendettaaaaa
06-01-2013, 16:28
grazie a tutti per le chiare risposte che mi avete dato
pabloski, il mio obbietivo principare e nokia pur sapendo che OS e android, magari in un momento futuro quando avrò appreso il linguaggio c mi verra piu facie sempre passare a questi 2.
Non capisco quindi mi sarebbe più utile iniziare a programmare per i pc??
@vendettaaaaa scusa quel libro che mi hai cosigliato dove lo posso trovare??
Il libro è in inglese, ti avviso. Lo trovi facilmente online (Amazon, Hoepli).
Cmq sì, parti dalla programmazione classica (programmi per console, cioè il Prompt dei Comandi di Windows) visto che per fare app oltre al linguaggio C++ (o simili) devi anche studiare uno dei linguaggi per scrivere l'interfaccia grafica (tipo XAML per Windows Phone, o QML se usi Qt con il C++).
In breve...già non è semplice cominciare a programmare, lascia perdere per ora l'idea di fare un programma vero e proprio, ti confonderesti le idee.
vendettaaaaa
06-01-2013, 20:07
ma senza sapere come funzionano array, puntatori e compagnia bella come può pretendere di capire la programmazione? le basi del C sono le migliori, cosa che il C++ non ti può dare...e come libri ti consiglio quelli della minerva italica...li usano per le superiori e sono semplici e pieni di esercizi :)
Ho detto che i concetti come i puntatori li assimili pian piano con il C++ grazie al fatto che vector, string e altri costrutti che facilitano la vita.
In C ci dovresti sbattere la faccia a forza e si rischia la frustrazione di non riuscire nemmeno a scrivere una frase a console. Dopotutto la voglia di apprendere deve essere sostenuta da dei risultati concreti.
Questa è la mia opinione di persona "fresca" del processo di apprendimento.
Poi sono punto di vista...
ma senza sapere come funzionano array, puntatori e compagnia bella come può pretendere di capire la programmazione? le basi del C sono le migliori, cosa che il C++ non ti può dare...e come libri ti consiglio quelli della minerva italica...li usano per le superiori e sono semplici e pieni di esercizi :)
Tant'è che all'MIT hanno introdotto Python come corso base per introdurre alla programmazione.
La programmazione in generale prevede paradigmi e design pattern che spesso sono agnostici allo specifico linguaggio.
Innanzitutto devi scegliere da quale paradigma vuoi partire... se vuoi partire con il capire l'Object Oriented (che poi è il paradigma al momento più in voga) allora forse non conviene partire né da C, e ancor di meno da C++, un ottimo compromesso può essere Java ad esempio.
Se vuoi partire con un linguaggio funzionale, allora anche qui la scelta ricadrebbe su altro.
Il C è importante ed educativo perché ti insegna le cose di basso livello, ma non è mica detto che sapere cosa sia un puntatore faccia di te un bravo programmatore o ti faccia capire cosa sia la programmazione (specie nel 2013).
Anzi probabilmente ti mette anche fuori strada, perché ti fa concentrare di più sullo strumento che sul problema da risolvere, e questo può essere fuorviante.
ma senza sapere come funzionano array, puntatori e compagnia bella come può pretendere di capire la programmazione? le basi del C sono le migliori, cosa che il C++ non ti può dare...e come libri ti consiglio quelli della minerva italica...li usano per le superiori e sono semplici e pieni di esercizi :)
coffe killer grz per la risposta:)
i libri della minerva italica dovrei trovarli in libreria??
Se ho capito bene meglio studiare dai libri in inglese , non sono una frana ma me la cavo abbastanza.
Comunque ho deciso prima di leggere qualche libro della minerva italica, tanto per farmi un idea e dopo leggere
Principles and Practice
Using C++ mi conviene partire cosi??
The_ouroboros
07-01-2013, 16:57
ma per mia esperienza personale, un programmatore che non conosce il C NON E' un programmatore...imparando il C, anche nelle sue problematiche inutili, gli altri linguaggi sono molto + facili da apprendere
che assoluto stringente :D
Vincenzo1968
07-01-2013, 17:06
Comunque la si pensi, secondo me il linguaggio C è bene conoscerlo. Sono d'accordo con quanto scritto da Cionci in questo thread:
http://www.hwupgrade.it/forum/showthread.php?t=1979444
http://www.hwupgrade.it/forum/showpost.php?p=30749097&postcount=4
...
C
Pro: adatto alla programmazione a basso livello e di sistema, linguaggio molto usato a livello accademico e nell'open source, ottime prestazioni
Contro: linguaggio vecchio, produttività bassa, pochissime funzionalità nella libreria standard, necessità di affidarsi a librerie esterne, disponibile su qualsiasi piattaforma hardware/software
Perché va imparato: ha una base di sviluppatori ampia ed è spesso rischiesto in ambito lavorarivo. E' comunque un linguaggio che secondo me deve essere presente nel bagaglio culturale di un buon programmatore. E' d'obbligo se si cercano le massime prestazioni. E' classificabile come un linguaggio di basso livello, cioè è molto vicino al linguaggio macchina, l'unico fra quelli qui consigliati. E' richiestissimo in campi quali la programmazione di microcontrollori o la programmazione di sistema.
Strumenti consigliati: Code::Blocks (con compilatore MinGW gcc su Windows)
...
Ma perché ha messo "disponibile su qualsiasi piattaforma hardware/software" tra i "contro"? Si sarà sbagliato.
:D
Vincenzo1968
07-01-2013, 17:37
Ah, una cosa: non è che tutti quelli che programmano in C non sappiano risolvere i problemi e debbano solo combattere con le complicazioni hardware o con bug misteriosi.
Capitano, si, i bug subdoli, ma con un po' d'attenzione e con strumenti come Valgrind (http://valgrind.org/) li si elimina facilmente.
A titolo di esempio ecco la brillante soluzione della mitica repne scasb nel Contest 3 (http://www.hwupgrade.it/forum/showthread.php?t=1787500&page=4):
http://www.hwupgrade.it/forum/showpost.php?p=23505466&postcount=97
http://www.hwupgrade.it/forum/showpost.php?p=23513343&postcount=115
;)
ma per mia esperienza personale, un programmatore che non conosce il C NON E' un programmatore...imparando il C, anche nelle sue problematiche inutili, gli altri linguaggi sono molto + facili da apprendere
La programmazione in C non ti insegna nulla di come si programma in un moderno linguaggio object oriented, quindi basta già solo questo per smentire la tua affermazione, un po' debole.
In molti linguaggi moderni non esiste né gestione manuale della memoria né dei puntatori, e in molti casi la gestione di alcuni elementi è sostanzialmente diversa. Ad esempio le stringhe potrebbero essere immutabili.
Mi sfugge totalmente perché conoscere il C dovrebbe aiutare qualcuno ad apprendere Python (che è totalmente diverso).
PS: detto da uno che campa programmando in C e C++11.
Vincenzo1968
07-01-2013, 20:07
non vedo dove sia stato scritto quello che hai citato in neretto.
se una cosa si puo' fare in maniera semplice , perche' complicarsi la vita? brillanti soluzioni per i piu' disparati problemi possono essere fornite anche in assembly, ma di certo cio' non implica che l'assembly sia lo strumento piu' adatto per fare qualcosa.
P.S. detto da uno che fa il programmatore embedded, per inciso.
Non mi riferivo a quello che è stato scritto qui. Ma ho messo le mani avanti perché è un argomento che salta fuori spesso quando si parla di questa cosa: e cioè è meglio cominciare con un linguaggio di più alto livello per non complicarsi la vita, etc.
La mia esperienza mi ha indicato il contrario. Ho cominciato col Quick BASIC e poi sono passato al clipper. Mi capitò di leggere, in un libro sulla programmazione clipper, di come sarebbe stato possibile velocizzare(e di molto) le operazioni di lettura di un database DBase III. Il capitolo proseguiva con l'implementazione del codice in C.
"Minchia!", mi dissi, "devo assolutamente imparare il C!".
Ovviamente mi trovai malissimo, abituato com'ero al Quick Basic, coi puntatori.
Se invece avessi cominciato col linguaggio C, in seguito non avrei avuto problemi ad imparare un linguaggio di più alto livello.
Stiamo parlando di imparare a programmare partendo dall'inizio. La produttività dunque non c'entra.
Se lavoro come programmatore e devo sviluppare un'applicazione in poco o pochissimo tempo allora lascio perdere il C e la faccio in Java, C#, Ruby, Python... qualunque linguaggio tranne C e C++.
Se voglio imparare a programmare devo prendermi tutto il tempo che mi serve. Meglio, dunque, secondo me, un approccio bottom-up. Sbatti la testa col C e in seguito impari qualunque altro linguaggio.
Secondo me, eh!
;)
programma per iOS, che tra parentesi è a mio avviso uno dei S.O. + evoluti, senza conoscere le allocazioni di memoria, costruttori e distruttori (si programma in Objective C che altro nn è ke un C esteso con oggetti e librerie apposite per iOS) e poi ne riparliamo...l'objective C è forse il linguaggio + moderno al giorno d'oggi, eppure per iOS non esiste la garbage collection, e tutto deve essere gestito dal programmatore...quindi visto ke le mie basi sarebbero deboli, leggiti un buon libro sulla programmazione iOS e poi ne riparliamo...
Eh no caro mio, C è una cosa, Objective C è un'altra :rolleyes: .
Inoltre per quella piattaforma sei quasi obbligato e la scelta tra i linguaggi di programmazione è molto più limitata (spesso per la natura dei device).
e ribadisco, un buon programmatore non è colui ke programma con il linguaggio "all'ultimo grido", ma colui che di fronte ad OGNI situazione trova una soluzione sottoforma di codice, e per diventare così occorre che il suo bagaglio culturale in termini di programmazione sia il + completo possibile...e queste basi solide, con tutte le problematiche è assurde, te le da solo il C...
Non puoi ribadire una cosa che non hai detto. La tua frase è stata molto chiara, sostanzialmente chi non sa programmare in C per te non sa programmare.
Il che è un insulto alla logica di per se, anche perché C++ è decisamente molto più complesso del C, e le sole basi del C, per quanto possano aiutare all'inizio, non bastano di certo per padroneggiarlo correttamente.
Dopodiché la problematica di gestire correttamente la memoria, non ha nulla a che vedere con il creare un'applicazione che serve a risolvere un problema nel mondo reale (a meno che tu sia scrivendo un garbage collector o un memory allocator).
ho programmato praticamente in ogni linguaggio richiesto dal mercato,tranne il C# che sto imparando per la passione per windows phone, e posso assicurare che quando sono in un vicolo cieco mi affido al C...sembra una ca**ata ma con un paio di scleri ti risolve ogni dilemma, e non ringrazierò mai abbastanza i miei docenti (superiori e università) per avermi + volte aperto il culo quando osavo dire che il C era un linguaggio vecchio e limitato...
Mi fa piacere, resta il fatto che se nel mondo accademico che conta (leggi: MIT), hanno scelto Python per i corsi base, una ragione ci sarà.
cdimauro
07-01-2013, 22:38
Chi non sa programmare in linguaggio macchina per Itanium è soltanto un mentecatto. :O
cdimauro
07-01-2013, 23:26
In effetti al MIT hanno sbagliato completamente. Il corso di base di programmazione dovrebbe essere quello di VHDL, che ti consente di sintetizzare (a un livello MOLTO basso) l'architettura di un processore.
Se riesci a sintetizzare un core, programmarlo poi con qualunque linguaggio sarà una bazzecola. :cool:
killercode
07-01-2013, 23:33
http://imgs.xkcd.com/comics/real_programmers.png
Se non usate anche voi le farfalle non potete definirvi veri programmatori :O
programma per iOS, che tra parentesi è a mio avviso uno dei S.O. + evoluti, senza conoscere le allocazioni di memoria, costruttori e distruttori (si programma in Objective C che altro nn è ke un C esteso con oggetti e librerie apposite per iOS) e poi ne riparliamo...l'objective C è forse il linguaggio + moderno al giorno d'oggi, eppure per iOS non esiste la garbage collection, e tutto deve essere gestito dal programmatore...quindi visto ke le mie basi sarebbero deboli, leggiti un buon libro sulla programmazione iOS e poi ne riparliamo...e ribadisco, un buon programmatore non è colui ke programma con il linguaggio "all'ultimo grido", ma colui che di fronte ad OGNI situazione trova una soluzione sottoforma di codice, e per diventare così occorre che il suo bagaglio culturale in termini di programmazione sia il + completo possibile...e queste basi solide, con tutte le problematiche è assurde, te le da solo il C...ho programmato praticamente in ogni linguaggio richiesto dal mercato,tranne il C# che sto imparando per la passione per windows phone, e posso assicurare che quando sono in un vicolo cieco mi affido al C...sembra una ca**ata ma con un paio di scleri ti risolve ogni dilemma, e non ringrazierò mai abbastanza i miei docenti (superiori e università) per avermi + volte aperto il culo quando osavo dire che il C era un linguaggio vecchio e limitato...
mah.
certe cose non sarebbero neanche da commentare.
inizio con il mio percorso: quickbasic con un 8086, pascal a scuola, visual basic 5/6 per fatti miei, php e mysql per 2 anni seriamente, un esame di java all'università, uno di assembly, anni ormai con C# (prima all'università chiedendo ai prof di usarlo al posto di java, e ora mi paga il mio stipendio)
C o C++ l'ho visto sempre di striscio, ma se mi metti del codice davanti lo capisco e quello che non capisco lo cerco (e questo vale anche quando mi trovo python di fronte)
se tu sei orgoglioso del tuo bagaglio di C (e fai bene ad esserlo) non significa che questo sia indispensabile e/o il mio bagaglio di quickbasic fa cagare, come hanno scritto dopo di te quello che conta è la capacità di analisi e sviluppo di algoritmi (che può essere rifare per l'ennesima volta un bubble sort oppure strutturare per bene classi e metodi)
passiamo ora al punto che mi ha fatto scrivere queste righe:
dire che "objective c forse è il linguaggio più + moderno al giorno d'oggi" è una bestemmia, non dirlo, solo pensarlo.
ho sviluppato una app per iphone, è stato un bagno di sangue. lasciamo perdere xcode e interface builder, ma ti sembra normale che per concatenare due stringhe devo scrivere
NSString * a = @"a";
NSString * b = @"b";
NSString * ab = [NSString stringWithFormat:@"%@%@", a, b];
quando in C# è
string a = "a";
string b = "b";
string ab = a + b;
dove sta la modernità? è per caso quando devo stampare un datetime?
NSDate * now;
NSDateFormatter * dateFormat;
NSString * currentDate;
now = [NSDate date];
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMMM d, yyyy hh:mm:ssa"];
currentDate = [dateFormat stringFromDate:now];
C#
string currentDate = DateTime.Now.ToString("MMMM d, yyyy hh:mm:ssa");
e non ti posto il codice per invocare un webservice, li proprio non c'è confronto.
enorme rispetto per chi programma in objective c, ma bisogna riconoscere che come linguaggio è un palo nel cu*o.
da quando è stato concepito su nextstep quali grandi novità sono state introdotte? vatti a guardare l'evoluzione di C# (e una innovazione tra tutte è LINQ) e poi ne riparliamo.
cdimauro
08-01-2013, 07:45
Infatti. Soltanto chi ha una visione "C-centrica" può affermare che Objective-C sia il miglior linguaggio del mondo. D'altra parte avendo avuto a che fare con un linguaggio povero, sia sintatticamente che a livello di librerie, anche una fogna come Objective-C può sembrare il paradiso...
Imparare a programmare non vuol dire che più ti fai male e meglio è. Questa visione troppo "giapponese" non ha nulla a che vedere con l'acquisizione della mentalità e degli strumenti necessari a quello che è l'obiettivo fondamentale: RISOLVERE PROBLEMI (rispettandone, ovviamente, i requisiti)!
L'unico "comandamento" per un programmatore è proprio questo. Non c'è altro. Ed è un'autentica bestemmia affermare che più un linguaggio è di basso livello, più è facile imparare le "basi" della programmazione (altrimenti, come dicevo, non c'è nulla di meglio per farsi del male del linguaggio macchina di Itanium).
La base è il concetto di algoritmo che è stato formulato secoli fa, quando non c'era il C né l'assembly e nemmeno il calcolatore elettronico ipotizzato da Charles Babbage...
Il C non avvicina alla macchina. Questa è una leggenda metropolitana troppo dura a morire, purtroppo. Chi ha programmato in assembly o linguaggio macchina sa bene quanto il C sia ben distante da questo concetto, visto che anche nella gestione della memoria espone comunque concetti di alto livello. Per essere chiari, non è la presenza dei puntatori che fa del C un linguaggio vicino alla macchina. Prima del C c'erano altri linguaggi che avevano questa caratteristica, ma nessuno s'è mai sognato di affermare che ciò li rendeva vicini alla macchina; il Pascal, ad esempio, è nato prima del C e ha i puntatori...
Ben vengano, quindi, linguaggi di molto più alto livello per poter imparare a programmare, che permettano a chi vi si addentra di concentrarsi nell'immagazzinamento dei concetti realmente basilari: dato, tipo di dato, variabile, condizione, iterazione, ecc. Non è certo un caso che agli albori dell'insegnamento sia stato fatto ampio uso di pseudocodice e diagrammi di flusso, e che un linguaggio come il BASIC (il cui acronimo è tutto un programma) sia stato inventato per avvicinare gli studenti alla programmazione, con una sintassi molto semplice e facile da acquisire.
Oggi fortunatamente ci sono strumenti migliori, visto che esiste una gran quantità di linguaggi, anche di livello molto più alto. Quindi perché ostinarsi a farsi del male? Per farsi male c'è sempre tempo dopo aver imparato, se lo si vuole o se ci sarà l'esigenza di doverlo fare. A meno che l'obiettivo non sia quello di fare una selezione a priori, per la serie: "ne resterà soltanto uno", e allora complichiamogli la vita e facciamogli passare la voglia di programmare. :asd:
P.S. Con iOS 5 è stato introdotto il garbage collector per la gestione automatica della memoria, come avviene in tanti linguaggi di più alto livello. E no, i programmatori non si sono suicidati; anzi! Quelli "duri e puri" possono continuare lo stesso a usare il cilicio e il gatto a nove code. :asd:
IMHO se parti da zero, meglio orientarsi su un linguaggio general pourpose: io molto prima ancora di frequentare l'università, mi stavo diplomando, ero partito dal linguaggio C studiando sul "Kernighan Ritchie - Linguaggio C".
Prima del C avevo imparato diverse forme di basic, che non servono per imparare il C, ma non mi piacevano le basse prestazioni e le limitazioni di tali linguaggi.
Poi è venuto il momento di Java e quello che sapevo del C non mi era servito a nulla.
Ora scrivo progetti in ambiente C++ usando i thread e sono contento di aver dedicato del tempo a questo linguaggio e a distanza di anni, non ho ancora sentito la necessità di cambiarlo con un altro. A breve tornerò su java in quanto mi serve scrivere qualcosa per Android ma tieni presente che con la mentalità che ti crei attraverso il C, IMHO, gli altri linguaggi poi risultano più semplici da imparare: un pò meno, ma solo inizialmente, quelli esageratamente astratti come java, c++ et similia.
Un altro ottimo libro che avevo trovato per imparare il C era della schaum di Sigmund Gottfried linguaggio c, ti insegna la programmazione passo passo.
AllerITA
08-01-2013, 09:30
Ti dico la mia esperienza personale.
Io ho frequentato l'università verso la fine degli anni 80,
Là mi hanno insegnato a programmare facendomi studiare innanzi tutto gli algoritmi (hai tempi si usava il Pascal come linguaggio procedurale e l'assembler dell'8088).
Insegnandomi a capire come funziona un computer, i diagrammi di flusso e le strutture Dati: alberi, liste, Hash table, Grafi ecc.
Poi ho sempre sperimentato per conto mio le nozioni imparate.
Quindi ti consiglio di frequentare Corsi a livello universitario se puoi.
L'università ti aiuta molto a costruirti le basi sulla programmazione.
Almeno io ho avuto questa esperienza.
Ti dico la mia esperienza personale.
Io ho frequentato l'università verso la fine degli anni 80,
Là mi hanno insegnato a programmare facendomi studiare innanzi tutto gli algoritmi (hai tempi si usava il Pascal come linguaggio procedurale e l'assembler dell'8088).
Insegnandomi a capire come funziona un computer, i diagrammi di flusso e le strutture Dati: alberi, liste, Hash table, Grafi ecc.
Poi ho sempre sperimentato per conto mio le nozioni imparate.
Quindi ti consiglio di frequentare Corsi a livello universitario se puoi.
L'università ti aiuta molto a costruirti le basi sulla programmazione.
Almeno io ho avuto questa esperienza.
concordo pienamente
p.s.
quando sai poi che devi studiare per passare un esampe, ti dai da fare, eccome se ti dai da fare :D
Vincenzo1968
08-01-2013, 10:24
rispondo brevemente perchè sono perfettamente consapevole che queste discussioni non giungono mai ad una risposta univoca ed ognuno tende a fare della propria esperienza la regola generale.
secondo me la risposta sta nel "cosa vuol dire programmare?"
trovare una soluzione algoritmica ad una certa classe di problemi, e lasciare che sia poi un calcolatore ad eseguire l'algoritmo perchè il nostro cervello è troppo lento per farlo carta e penna.
per la prima parte è imprescindibile la conoscenza matematica, teorica e astratta, che si traduce nella capacità di analizzare e progettare algoritmi efficienti che manipolano opportune strutture dati. Qui ti possono venire in aiuto testi come il Cormen, o un gioellino come questo (http://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs), o tanti altri capisaldi dell'informatica che non sto qui ad elencare. fin qui il linguaggio non c'entra niente.
ora che sei capace di creare i tuoi algoritmi, devi farli eseguire dal calcolatore, ti serve un linguaggio per parlare con il calcolatore. Usi il linguaggio macchina o l'assembly? perchè no?, studiato questo tutti gli altri linguaggi del mondo ti sembreranno semplicissimi (e qua viene a cadere la frase che ho letto già un paio di volte "studio il C per primo così tutti gli altri poi sono in discesa").
Devi cercare il modo migliore per comunicare con la macchina. il modo migliore (secondo me eh ;) ) per fare ciò è astrarre il più possibile il processo di comunicazione portandolo vicino al tuo linguaggio naturale. Per dire alla macchina di stampare il numero contenuto nella variabile a, cos'è meglio?
print a;
o
printf("%d",a);
e così via. La conoscenza del C poteva essere imprescindibile forse 20 anni fa quando l'imperativo era il paradigma dominante, ma ora, nel 2013, conoscere un linguaggio imperativo di basso livello, in cosa ti aiuta nello studio della programmazione a oggetti? anzi, molte volte studiare subito un linguaggio procedurale rende difficile poi apprendere i concetti del OOP che comportano un livello di astrazione superiore.
l'unico modo per poter controbilanciare l'aumento della complessità è quello di innalzare il livello d'astrazione, ed è un fenomeno che interessa diverse discipline ingegneristiche (e non solamente il software engineering).
detto questo, me ne vo' a cucinare se no stasera non mangio :D
Sono pienamente d'accordo su tutto quanto. Ma ci tenevo a precisare che si possono risolvere i problemi anche in C. Ci vuole più tempo, un po' più di pazienza, ma si può fare. Non è che il programmatore C passa tutto il tempo a pensare come deve allocare la memoria o ad altri dettagli di basso livello.
Il linguaggio C è un linguaggio di alto livello(non cosi alto come Java o C# o altissimo come python e Ruby). Il linguaggio di basso livello è l'assembly.
Dunque il mio consiglio è: comincia col linguaggio che preferisci. Ma il C faresti bene a impararlo. Per i motivi che ha sottolineato Cionci e per tante altre cose. Anche per poter studiare. a titolo di curiosità o a livello professionale, il vastissimo parco software oggi esistente per la programmazione di sistema: sistemi operativi, DBMS, etc.
;)
E non ho mai detto(e mai mi sarei sognato di dirlo) che chi non conosce il C è un mentecatto :rolleyes:
Cominciamo con le battutine fuori luogo... :rolleyes:
Vincenzo1968
08-01-2013, 10:27
Ti dico la mia esperienza personale.
Io ho frequentato l'università verso la fine degli anni 80,
Là mi hanno insegnato a programmare facendomi studiare innanzi tutto gli algoritmi (hai tempi si usava il Pascal come linguaggio procedurale e l'assembler dell'8088).
Insegnandomi a capire come funziona un computer, i diagrammi di flusso e le strutture Dati: alberi, liste, Hash table, Grafi ecc.
Poi ho sempre sperimentato per conto mio le nozioni imparate.
Quindi ti consiglio di frequentare Corsi a livello universitario se puoi.
L'università ti aiuta molto a costruirti le basi sulla programmazione.
Almeno io ho avuto questa esperienza.
E io che non ho mai messo piede all'università? Dove voglio andare col mio diplomino di ragioniere?
http://www.hwupgrade.org/public/style_emoticons/default/okay.png
cdimauro
08-01-2013, 10:43
E non ho mai detto(e mai mi sarei sognato di dirlo) che chi non conosce il C è un mentecatto :rolleyes:
Cominciamo con le battutine fuori luogo... :rolleyes:
Le iperboli non esistono soltanto in matematica... :stordita:
Vincenzo1968
08-01-2013, 11:22
:rolleyes:
Ti consiglio di evitare di citare ogni volta il MIT. Se tra qualche tempo decidono di adottare un altro linguaggio che fai?
E poi non c'è mica solo il MIT. Altre, prestigiose, università adottano altri linguaggi. Alla Stanford, per esempio, usano Java, C e C++ per i loro corsi introduttivi:
http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111
http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e
http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee
:)
Vincenzo1968
08-01-2013, 11:33
Poi com'è che nessuna università adotta C#? Che è, fa schifo come linguaggio di programmazione? Non è adatto ai principianti?
:rolleyes:
cdimauro
08-01-2013, 11:34
:rolleyes:
Non vedo perché continuare a polemizzare. Non ti è chiaro il significato di iperbole (non matematica) o pensi che in questo contesto non sia applicabile (e perché no, allora)?
Ti consiglio di evitare di citare ogni volta il MIT. Se tra qualche tempo decidono di adottare un altro linguaggio che fai?
Non lo cito più. :D
E poi non c'è mica solo il MIT. Altre, prestigiose, università adottano altri linguaggi. Alla Stanford, per esempio, usano Java, C e C++ per i loro corsi introduttivi:
http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111
http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e
http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee
:)
Mai negato questo, mi pare. ;)
Poi com'è che nessuna università adotta C#? Che è, fa schifo come linguaggio di programmazione? Non è adatto ai principianti?
:rolleyes:
Ha tutte le carte in regola per rimpiazzare C, C++ e Java, per lo meno dove li usano didatticamente. Prima o poi qualcuno lo farà.
Per il resto, perché continui a polemizzare?
Vincenzo1968
08-01-2013, 11:51
Non vedo perché continuare a polemizzare.
...
Si, hai ragione. Se fai le battutine sui programmatori mentecatti perché non usano C(cosa che non ho mai detto e mai mi sono sognato di dire o di pensare) un po' mi girano però.
Si si, meglio chiuderla qui con le polemiche.
;)
cdimauro
08-01-2013, 12:28
Ho usato un'iperbole per far comprendere l'assurdità di certe posizioni. Uno strumento retorico che, alla fine, ha carattere educativo.
Di mezzo c'è finito il C, che a te piace molto, ma sarebbe stato lo stesso se fosse stato tirato in ballo un altro linguaggio in condizioni simili (chessò: "per sapere programmare bisogna conoscere l'assembly").
E' una questione di principio, insomma, e dai miei messaggi sarebbe dovuto esser chiaro. Ti pare normale tirare in ballo il VHDL? No. Più chiaro di così quale fosse l'intento.
Per cui mi spiace che te la sia presa personalmente, perché non era una guerra preventiva contro il C (che peraltro uso), sebbene non lo ritenga adatto per introdurre alla programmazione, ma questo l'ho già spiegato ampiamente nel messaggio di stamattina.
Vincenzo1968
08-01-2013, 15:04
Ho usato un'iperbole per far comprendere l'assurdità di certe posizioni. Uno strumento retorico che, alla fine, ha carattere educativo.
Di mezzo c'è finito il C, che a te piace molto, ma sarebbe stato lo stesso se fosse stato tirato in ballo un altro linguaggio in condizioni simili (chessò: "per sapere programmare bisogna conoscere l'assembly").
E' una questione di principio, insomma, e dai miei messaggi sarebbe dovuto esser chiaro. Ti pare normale tirare in ballo il VHDL? No. Più chiaro di così quale fosse l'intento.
Per cui mi spiace che te la sia presa personalmente, perché non era una guerra preventiva contro il C (che peraltro uso), sebbene non lo ritenga adatto per introdurre alla programmazione, ma questo l'ho già spiegato ampiamente nel messaggio di stamattina.
Cesare anche a me dispiace e me ne scuso con te e con tutti quanti.
Chi ha voglia di litigare? Ti ricordi di certi mega litigi di qualche anno fa sui parser(che fra l'altro mi costarono due o tre sospensioni)? :D
Comunque ribadisco la mia opinione:
per riprendere l'esempio di Antonio: Non è meglio se dopo che ho programmato in C passo a Python e mi accorgo che per stampare la variabile a debbo scrivere semplicemente
print a
Non m'arricrio?
Che succede se, al contrario, vengo da Python e, per un motivo o per un altro(il capo dice che dobbiamo riscrivere qualche routine interfacciandoci col linguaggio C perché in certe parti l'applicazione è troppo lenta), debbo passare al C:
printf("%s", a);
Non mi viene un colpo?
Poi come dicevo qualche post prima, non vedo l'esigenza di risparmiare tempo quando si è all'inizio. Non hai problemi di produttività. Oppure oggi non so programmare e entro una settimana mi debbono assumere come programmatore?
All'inizio più tempo ti prendi per imparare e meglio è. E dunque anche il linguaggio C va bene. Ti rompi la testa e in seguito tutto ti è più facile.
E questo non significa che imparare Python ti sarà più facile se già conosci il C. Si sa, sono due linguaggi completamente diversi e con diversissima sintassi.
Dunque il mio consiglio è:
1) imparare il linguaggio C come l'Ave Maria.
2) Imparare uno qualunque del linguaggi object-oriented C-Like: Java, C++, C#.
3) Imparare uno dei linguaggi ad altissimo livello: Python, Ruby, etc.
4) Opzionale(ma da tenere in considerazione): imparare l'assembly.
;)
All'inizio più tempo ti prendi per imparare e meglio è. E dunque anche il linguaggio C va bene. Ti rompi la testa e in seguito tutto ti è più facile.
E questo non significa che imparare Python ti sarà più facile se già conosci il C. Si sa, sono due linguaggi completamente diversi e con diversissima sintassi.
Dunque il mio consiglio è:
1) imparare il linguaggio C come l'Ave Maria.
2) Imparare uno qualunque del linguaggi object-oriented C-Like: Java, C++, C#.
3) Imparare uno dei linguaggi ad altissimo livello: Python, Ruby, etc.
4) Opzionale(ma da tenere in considerazione): imparare l'assembly.
;)
io sta visione masochistica della preparazione che un programmatore deve avere non la condivido. E con questo sto affermando che non sapendo C e menate varie (puntatori, bla bla) mi considero un buon programmatore.
Se vogliamo rimanere nell'ambito di fare programmini per imparare i ragionamenti, come funziona quello e come funziona quell'altro rimanete su C e C++, che vi devo dire.
Poi vi capita una giornata lavorativa da programmatore come la mia oggi in cui:
ho dovuto mettere le mani su un report SSRS (e quindi SQL e T-SQL)
ho dovuto modificare parti di un webservice (RESTful con parte server in C# e con dati in formato JSON e relativo client fatto in php dal committente)
creare un programmino per leggere dei file CSV, controllare dei dati tramite invocazione di un webservice, fare update del sistema CRM e scrivere un file di log
visto che sono duro di comprendorio me lo spiegate a cosa mi serve sapere come si gestiscono gli array in C tramite puntatori? :fagiano:
secondo me qui manca una visione di cosa viene usato all'interno delle aziende che scrivono software.
Se capiti in una azienda che scrive software che si interfaccia a macchinari probabilmente ti trovi C o assembler 68000 (ma ho visto anche cose scritte in VB6 con utilizzo della seriale)
se vai nell'azienda che sviluppa videogiochi ti trovi C++, unity, objectiveC, etc etc
poi vai nel resto e trovi aziende che fanno software che utilizzano concetti relativamente nuovi dell'informatica (rispetto a quando si usava C) come webservices, applicazioni web, analisi di cubi OLAP, etc etc.
In quel caso il tuo bagaglio di smazzamento C/C++ non serve prettamente a una min**ia, se non per la sintassi C-like.
Poi qualcuno mi spieghi che cosa si intende per linguaggi ad altissimo livello e perché Python sarebbe altissimo e Java di alto livello.
Ultima cosa riguardo l'assembly, perché sarebbe da prendere in considerazione? perché fa figo?
Vincenzo1968
08-01-2013, 15:50
io sta visione masochistica della preparazione che un programmatore deve avere non la condivido. E con questo sto affermando che non sapendo C e menate varie (puntatori, bla bla) mi considero un buon programmatore.
...
Mai detto. Mai detto né pensato che chi non conosce il linguaggio C non sia un buon programmatore. Ritengo(mia modestissima opinione) che sia estremamente utile conoscere il C, per i motivi più volte spiegati. Ma puoi essere un buon programmatore anche senza conoscerlo.
io sta visione masochistica della preparazione che un programmatore deve avere non la condivido.
Infatti è una cosa che non ho mai capito. In tutte le discipline si imparano prima le basi, poi si passa ai concetti sempre più complessi. Non capisco perchè l'informatica dovrebbe essere diversa. Solo noi vogliamo imparare prima le cose difficili... così poi tutto il resto è semplice
vendettaaaaa
08-01-2013, 15:54
Il ragionamento di Vincenzo mi convince, ma rimango dell'idea che all'inizio, pur avendo tanto tempo (si ipotizza), è facile rimanere scottati dalla frustrazione che il C potrebbe portare, essendo troppo difficile. Quando cominci a programmare, o ad imparare qualsiasi cosa, vuoi sì imparare la teoria, ma anche fare pratica. Quando cominci con la chitarra, ti fai magari volentieri un culo così sulle scale maggiori e minori, ma vuoi anche suonare una canzone, tipo la parte ritmica di Smoke on the Water, facile ma completa, altrimenti ti rompi i marroni.
Allo stesso modo se cominci a programmare, vuoi essere in grado dopo 2 giorni di creare un programma che ti chiede di inserire il tuo nome e ti saluta, o ti insulta se inserisci il nome dell'amico puzzone. Questo banalissimo compito rischia di diventare troppo complesso, usando il C, e si rischia di rimanere scottati, pericolo che linguaggi più "comodi" (dal C++ in su) scongiurano.
Solo per questo io non consiglierei mai di partire dal C, essendo partito dal C io stesso (al tempo del 1° anno di università).
Vincenzo1968
08-01-2013, 16:06
'sta cosa del masochismo :doh:
Programmare in C equivale a darsi martellate sui maroni?
Oh! io il C lo trovo lo trovo eccitante e gratificante.
Vuoi partire con un linguaggio più semplice? Accomodati. Ma in seguito imparalo il C(e anche l'assembly). E non perché fa più figo :rolleyes:
Può sempre servire per aumentare le prestazioni in certe parti dell'applicazione che dovessero risultare un po' troppo lente.
E non venitemi a dire che al giorno d'oggi con i compilatori Just in Time le prestazioni si equivalgono. Sfido chiunque a produrre gli stessi tempi dei programmi in C in uno qualunque dei contest con un qualunque linguaggio che non sia C/C++.
Vincenzo non è che se programmi in C sei masochista, ci sono sicuramente molte applicazioni in cui è la soluzione migliore, ma se parliamo di imparare a programmare non credo proprio che sia così.
cdimauro
08-01-2013, 17:30
'sta cosa del masochismo :doh:
Programmare in C equivale a darsi martellate sui maroni?
Per chi inizia sicuramente sì. Tu stesso hai avuto problemi allucinanti di recente, che sei riuscito a risolvere usando Valgrind, programma che nemmeno conoscevi peraltro, nonostante anni di programmazione con questo linguaggio.
Oh! io il C lo trovo lo trovo eccitante e gratificante.
Non lo metto in dubbio, e non sei nemmeno l'unico a pensarla così.
Ma per iniziare a programmare devi ammettere che avere a che fare con segmentation fault, memory leak, e double delete non è il massimo della vita.
Vuoi partire con un linguaggio più semplice? Accomodati. Ma in seguito imparalo il C(e anche l'assembly). E non perché fa più figo :rolleyes:
Può sempre servire per aumentare le prestazioni in certe parti dell'applicazione che dovessero risultare un po' troppo lente.
YAGNI. Quando, e SE dovesse servire, si può sempre imparare, no?
E non venitemi a dire che al giorno d'oggi con i compilatori Just in Time le prestazioni si equivalgono. Sfido chiunque a produrre gli stessi tempi dei programmi in C in uno qualunque dei contest con un qualunque linguaggio che non sia C/C++.
Si chiama ansia da prestazione. Il mondo non si misura soltanto con le prestazioni. Ci sono ben altri parametri che normalmente sono più importanti (produttività / time-to-market, manutenibilità, robustezza del codice).
SE le prestazioni di un'applicazione dovessero essere importanti, si analizza la parte di codice incriminata e si cerca una soluzione algoritmica. Altrimenti si considera di riscrivere soltanto quella parte in un linguaggio di più basso livello o con strumenti simili (per Python proverei Cython, ad esempio).
Nella mia lunga carriera di programmatore Python (sono più di 8 anni ormai) non ho mai avuto l'esigenza di ricorrere alla riscrittura di parte del mio codice con uno strumento o linguaggio di più basso livello.
Di recente sto smanettando con Google App Engine. M'interessa ottimizzare fino a un certo punto, cioè sfruttando gli strumenti che questa piattaforma mi mette a disposizione (data storage NoSQL, chiamate asincrone). Fatto questo (ma DOPO che il mio codice sarà funzionante), ci penserà Google a scalare il mio server quanto serve per sopportare i carichi.
cdimauro
08-01-2013, 17:34
Poi qualcuno mi spieghi che cosa si intende per linguaggi ad altissimo livello e perché Python sarebbe altissimo e Java di alto livello.
Perché con Python riesci ad astrarre di più il codice rispetto a Java.
Dai un'occhiata qui (http://benchmarksgame.alioth.debian.org/u32/python.php) ai sorgenti degli esempi di entrambi i linguaggi.
Ultima cosa riguardo l'assembly, perché sarebbe da prendere in considerazione? perché fa figo?
Perché è come il C: sembra che più un linguaggio sia di basso livello, più sia figo, per cui l'assembly è quasi al top della figaggine. :D
Ha senso parlare di micro ottimizzazioni come riscrittura di routine in C al giorno d'oggi? In informatica la risorsa più scarsa e costosa è il tempo e non la potenza di calcolo. Con i soldi che spendo per pagare un buon programmatore C mi posso comprare 100 server su amazon per quel tanto che mi serve. Il costo è uguale ma ottengo un incremento di prestazioni di diversi ordini di grandezza maggiore.
Molto meglio un programma python con codice chiaro, ben fattorizzato e testato di un qualsiasi binario C ultra ottimizzato per la macchina su cui gira.
The_ouroboros
08-01-2013, 18:05
E in ambiti ove l'ansi c e' la sola possibilità?
Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
cdimauro
08-01-2013, 18:15
Se escludi in partenza tutti gli altri linguaggi, la risposta è ovvia...
Vincenzo1968
08-01-2013, 18:47
se qualcuno non fosse convinto della diffusione del C si guardi qui:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
http://img819.imageshack.us/img819/2903/ctiobe.jpg
Ma è ancora sopra Java! È già da un bel po' di tempo che è così.
http://www.hwupgrade.org/public/style_emoticons/default/everything_went_better_than_expected.png
Vincenzo1968
08-01-2013, 18:51
Per chi inizia sicuramente sì. Tu stesso hai avuto problemi allucinanti di recente, che sei riuscito a risolvere usando Valgrind, programma che nemmeno conoscevi peraltro, nonostante anni di programmazione con questo linguaggio.
Non lo metto in dubbio, e non sei nemmeno l'unico a pensarla così.
Ma per iniziare a programmare devi ammettere che avere a che fare con segmentation fault, memory leak, e double delete non è il massimo della vita.
YAGNI. Quando, e SE dovesse servire, si può sempre imparare, no?
Si chiama ansia da prestazione. Il mondo non si misura soltanto con le prestazioni. Ci sono ben altri parametri che normalmente sono più importanti (produttività / time-to-market, manutenibilità, robustezza del codice).
SE le prestazioni di un'applicazione dovessero essere importanti, si analizza la parte di codice incriminata e si cerca una soluzione algoritmica. Altrimenti si considera di riscrivere soltanto quella parte in un linguaggio di più basso livello o con strumenti simili (per Python proverei Cython, ad esempio).
Nella mia lunga carriera di programmatore Python (sono più di 8 anni ormai) non ho mai avuto l'esigenza di ricorrere alla riscrittura di parte del mio codice con uno strumento o linguaggio di più basso livello.
Di recente sto smanettando con Google App Engine. M'interessa ottimizzare fino a un certo punto, cioè sfruttando gli strumenti che questa piattaforma mi mette a disposizione (data storage NoSQL, chiamate asincrone). Fatto questo (ma DOPO che il mio codice sarà funzionante), ci penserà Google a scalare il mio server quanto serve per sopportare i carichi.
Valgrind è disponibile solo su Linux e io programmo su questo sistema soltanto da pochi giorni.
Sarò ansioso(da prestazione) ma io ci tengo alle prestazioni. E non dico che bisogna ottimizzare ad ogni costo; ma quando serve si.
Interessante Google App Engine.
Cython? googlo un attimino.
;)
cdimauro
08-01-2013, 19:29
Esattamente. Non ne ho mai usati, ma so che ci sono.
Comunque io tengo alle prestazioni... quando mi rendo conto che effettivamente mi servono. E procedo come descritto. Finora non sono andato oltre la prima soluzione (algoritmo diverso). :)
Vincenzo1968
08-01-2013, 19:30
Ma io su Windows non ne ho mai avuto bisogno. Ho sempre utilizzato il normale debugger fornito con Visual Studio.
Il problema che ho avuto(e risolto grazie a Valgrind) è stato quello di portare i sorgenti del contest 17 su Linux. Compilando a 64 bit il programma funzionava. A 32 bit c'era un problema dovuto all'utilizzo delle funzioni con numero di argomenti variabili.
E meno male che il problema è stato scovato da Valgrind ché già Cesare aveva dato la colpa a Stallman. Se perdevo un altro poco di tempo se la sarebbe presa con Torvald, Linux, Unix e con l'universo intero :D
Sto scherzando eh!
;)
Su Windows quali strumenti simili a Valgrind esisterebbero? Io ho trovato solo Dr. Memory(grazie alla segnalazione di Marco.r) ma è disponibile solo per programmi compilati a 32 bit.
Vincenzo1968
08-01-2013, 23:23
Ha senso parlare di micro ottimizzazioni come riscrittura di routine in C al giorno d'oggi? In informatica la risorsa più scarsa e costosa è il tempo e non la potenza di calcolo. Con i soldi che spendo per pagare un buon programmatore C mi posso comprare 100 server su amazon per quel tanto che mi serve. Il costo è uguale ma ottengo un incremento di prestazioni di diversi ordini di grandezza maggiore.
Molto meglio un programma python con codice chiaro, ben fattorizzato e testato di un qualsiasi binario C ultra ottimizzato per la macchina su cui gira.
http://www.hwupgrade.org/public/style_emoticons/default/CerealSpitting.png
Ah ma io non parlo di micro ottimizzazioni. Se lavori per una piccola azienda(come me) cosa gli vai a dire al capo? Compriamo 100 server su Amazon? Quello mi da 100 calci nel culo.
Io mi riferisco a guadagni di tempo di un fattore di 5/6 o anche più volte. Per esempio se un programma per l'elaborazione di grossi file ci impiega un'ora e riscrivendolo in C ci mette soltanto 10 minuti?
Ha da passà 'a nuttata(cit) e quando sarà passata, cioè domani, proporrò un contestino che dimostra quello che voglio dire. E poi voglio vedere come ci si riesce ad avvicinare ai tempi di un programma C con un qualsiasi linguaggio che non sia C stesso, C++ o Assembly. Voglio vedere i "rimaneggiamenti algoritmici" a cosa portano.
http://www.hwupgrade.org/public/style_emoticons/default/challenge.png
http://www.hwupgrade.org/public/style_emoticons/default/CerealSpitting.png
Ah ma io non parlo di micro ottimizzazioni. Se lavori per una piccola azienda(come me) cosa gli vai a dire al capo? Compriamo 100 server su Amazon? Quello mi da 100 calci nel culo.
Però al capo non puoi neppure dire che ti servono 2 mesi di sviluppo per cose che sbrigheresti in poche ore in Python o Java.
Giusto per dire, anche io son partito dal C, e ad un certo punto mi son ritrovato capace di scrivere codice in C, ma incapace di programmare. Cosa che succede quando un linguaggio ti obbliga a rimanere troppo concentrato sulla sintassi, rubando risorse al resto.
ehm
e cosi mi confondete avevo deciso di prendere il libro della minerva italica linguaggio c++ tanto come un introduzione in questo mondo,
e questo il passo giusto o mi conviene iniziare da unaltro linguaggio??
Cominci da C++? Spero tu abbia una volontà ferrea nel voler imparare a programmare. :D
la volonta celo e come!!
Ma crede che il libro sarà abbastanza semplificato perche e fatto per le superiori.
quindi non va bene ??
Ah ma io non parlo di micro ottimizzazioni. Se lavori per una piccola azienda(come me) cosa gli vai a dire al capo? Compriamo 100 server su Amazon? Quello mi da 100 calci nel culo.
Portagli un analisi costi/benefici e vedrai che cambia idea. Riscrivere un programma non banale interamente in C spendendo tempo a fare profiling, scegliere i giusti algoritmi e strutture dati per ottimizzarlo quanto tempo ti porta via? 6 mesi 1 anno di lavoro? Quanto ti costa un programmatore da dedicare a quel task? Assumere qualcuno al minimo per 1 anno sono circa 20.000 €. E mentre il programma ancora non è pronto cosa fai? Anche quello è un costo.
Una spot instance micro costa 0.007 euro l'ora, un programmatore 10. C'è una differenza di costo di circa 1500x. Far partire 100 server mi costa molto meno di un programmatore ed ho subito risultati. Poi la versione in C non mi darà di certo un 100x di prestazioni.
Io mi riferisco a guadagni di tempo di un fattore di 5/6 o anche più volte. Per esempio se un programma per l'elaborazione di grossi file ci impiega un'ora e riscrivendolo in C ci mette soltanto 10 minuti?
Se il programma non è completamente cpu bound guadagni del 5/6x sono fuori dal mondo. Quel tipo di valori lo si vede solo in benchmark sintetici che fanno una singola cosa. In programmi reali è già un miracolo arrivare ad un 30/40%. Al minimo cenno di i/o su disco, scambio di messaggi con la rete, query a qualche db, sincronizzazione tra thread, ecc.. quello che guadagni con il C va a farsi benedire.
do piena ragione a vincenzo sull'estrema efficienza del C e compagnia bella...non per niente i sistemi operativi vengono scritti in C/C++...sfido chiunque a scriverlo in python ed ottenere qualcosa che rasenti anche solo per un momento "l'efficienza"...
Sono scritti in quei linguaggi perché un sistema operativo deve accedere direttamente al hardware ed ha bisogno di avere il pieno controllo su quello che succede. In quel caso il C è lo strumento giusto. Non lo mette in discussione nessuno.
..., il bagaglio culturale che ti da il C/C++ è FONDAMENTALE!!!
possiamo stare qui ancora altre 10 pagine di commenti, ma se in tutte le università, dalle + piccole tipo la mia, a quelle + famose, il C si insegna fino al vomito, un motivo ci sarà
Fino a pochi anni fa insegnavano anche il waterfall come metodologia di riferimento per sviluppare software di qualità. Il mondo accademico purtroppo ha idee sue su come andrebbe scritto codice che spesso non rispecchiano la realtà.
Sul fatto che il C vada imparato sono d'accordo anche io. Ma non è di certo il linguaggio da cui partire. Programmare significa risolvere problemi.
9i ragazzi ora sono al punto d'inizio
quindi un inizio migliore quale sarebbe.
Consigliatemi solo un libro che mi che non mi faccia prendere 2 botte in faccia quando entro all'azione, qualcosa che mi introduzca in questo mondo:)
saluti
cdimauro
09-01-2013, 08:52
La risposta ai tuoi problemi la trovi nella mia firma. :cool:
Premesso che concordo con Vicius, rispondo soltanto a questo:
Io mi riferisco a guadagni di tempo di un fattore di 5/6 o anche più volte. Per esempio se un programma per l'elaborazione di grossi file ci impiega un'ora e riscrivendolo in C ci mette soltanto 10 minuti?
Lo lascio lavorare un'ora.
Se ho da elaborare più file, posso PENSARE (leggi: se è effettivamente necessario) far partire un'istanza del programma per ogni core a disposizione.
Se non va, cerco una soluzione algoritmica, come già detto.
Se ci sono ancora problemi, mi rivolgo a PyPy (http://speed.pypy.org/).
Se ci sono ancora problemi, provo con Cython (http://cython.org/), prima dandogli in pasto il sorgente così com'è, poi eventualmente sfruttando le apposite estensioni che generano codice "static typed", e quindi passibile di maggiori ottimizzazioni.
Se ancora non va abbastanza, individuo l'hot spot, lo riscrivo in C, e lo importo col modulo ctypes (http://docs.python.org/2/library/ctypes.html) di Python.
Se anche con questo non ci siamo (cosa abbastanza difficile), riscrivo tutto in C o C++.
Vincenzo1968
09-01-2013, 09:15
Portagli un analisi costi/benefici e vedrai che cambia idea. Riscrivere un programma non banale interamente in C spendendo tempo a fare profiling, scegliere i giusti algoritmi e strutture dati per ottimizzarlo quanto tempo ti porta via? 6 mesi 1 anno di lavoro? Quanto ti costa un programmatore da dedicare a quel task? Assumere qualcuno al minimo per 1 anno sono circa 20.000 €. E mentre il programma ancora non è pronto cosa fai? Anche quello è un costo.
Una spot instance micro costa 0.007 euro l'ora, un programmatore 10. C'è una differenza di costo di circa 1500x. Far partire 100 server mi costa molto meno di un programmatore ed ho subito risultati. Poi la versione in C non mi darà di certo un 100x di prestazioni.
Se il programma non è completamente cpu bound guadagni del 5/6x sono fuori dal mondo. Quel tipo di valori lo si vede solo in benchmark sintetici che fanno una singola cosa. In programmi reali è già un miracolo arrivare ad un 30/40%. Al minimo cenno di i/o su disco, scambio di messaggi con la rete, query a qualche db, sincronizzazione tra thread, ecc.. quello che guadagni con il C va a farsi benedire.
Ma se uno oltre Python conosce C, il capo non ha bisogno di assumere un nuovo programmatore. Ti chiede di riscrivere quella parte dell'applicazione in C magari impacchettandola in una .dll(o .so in Linux) da interfacciare con l'applicazione.
Lo vedi che mi dai ragione? Se conosci anche il linguaggio C sono tutti contenti. Specialmente il capo che risparmia 20.000€ all'anno :D
Vincenzo1968
09-01-2013, 09:16
La risposta ai tuoi problemi la trovi nella mia firma. :cool:
Premesso che concordo con Vicius, rispondo soltanto a questo:
Lo lascio lavorare un'ora.
Se ho da elaborare più file, posso PENSARE (leggi: se è effettivamente necessario) far partire un'istanza del programma per ogni core a disposizione.
Se non va, cerco una soluzione algoritmica, come già detto.
Se ci sono ancora problemi, mi rivolgo a PyPy (http://speed.pypy.org/).
Se ci sono ancora problemi, provo con Cython (http://cython.org/), prima dandogli in pasto il sorgente così com'è, poi eventualmente sfruttando le apposite estensioni che generano codice "static typed", e quindi passibile di maggiori ottimizzazioni.
Se ancora non va abbastanza, individuo l'hot spot, lo riscrivo in C, e lo importo col modulo ctypes (http://docs.python.org/2/library/ctypes.html) di Python.
Se anche con questo non ci siamo (cosa abbastanza difficile), riscrivo tutto in C o C++.
Ecco, appunto. Anche tu mi stai dando ragione. Meglio conoscere anche il iinguaggio C che può sempre servire.
Vincenzo1968
09-01-2013, 09:25
Però al capo non puoi neppure dire che ti servono 2 mesi di sviluppo per cose che sbrigheresti in poche ore in Python o Java.
Giusto per dire, anche io son partito dal C, e ad un certo punto mi son ritrovato capace di scrivere codice in C, ma incapace di programmare. Cosa che succede quando un linguaggio ti obbliga a rimanere troppo concentrato sulla sintassi, rubando risorse al resto.
No, un momento. L'esempio che ho fatto è chiaro: non sei tu che proponi al capo di riscrivere una parte dell'applicazione in C. È il capo che te lo chiede. O meglio, ti chiede di velocizzare quella parte dell'applicazione che risulta un po' troppo lenta. E allora non ti rimane altro da fare se non la trafila proposta da Cesare:
- Soluzione algoritmica
- PyPy
- Cython
- individuo l'hot spot, lo riscrivo in C, e lo importo col modulo ctypes di Python.
- riscrivo tutto in C o C++.
Per quanto riguarda PyPy abbiamo appurato qui(in uno dei contest) che i guadagni non sono poi così consistenti.
Cython non lo conosco e non saprei dire.
Rimane una buona probabilità, secondo me, di dover riscrivere pezzi dell'applicazione in C/C++.
Vedremo nel contestino che sto preparando se Cython risolve il problema.
;)
Ma se uno oltre Python conosce C, il capo non ha bisogno di assumere un nuovo programmatore. Ti chiede di riscrivere quella parte dell'applicazione in C magari impacchettandola in una .dll(o .so in Linux) da interfacciare con l'applicazione.
Lo vedi che mi dai ragione? Se conosci anche il linguaggio C sono tutti contenti. Specialmente il capo che risparmia 20.000€ all'anno :D
Si ma te in quei 6 mesi che passi ad ottimizzare il programma potresti fare altro. Sicuramente di più utile. Il tuo capo sarebbe di sicuro più contento così :P
Non mi sembra che qui nessuno stia mettendo in discussione il C in quanto tale.
Il punto è dare in pasto C/C++ a chi non ha mai programmato fino a questo momento.
Quello che ci si sta chiedendo è: nel 2013 il C è didatticamente valido per uno che non ha mai visto come si programma?
Ora se mi si viene a dire che il C è importante e quindi meglio conoscerlo che non conoscerlo, io sono d'accordo al 100%.
Ma se mi vieni a dire che a digiuno di programmazione, imparando C auto-magicamente sai programmare anche in C++-Java-Python e compagnia bella, io ti dico: un bel paio di zebedei.
cdimauro
09-01-2013, 09:56
@Vincenzo. C'è un dettaglio non trascurabile: in più di 8 anni, oltre all'approccio algoritmico (QUALCHE volta!) non sono andato. :D
Nel mio (ex) lavoro tutto il mio codice era in Python. Finito: funziona? In produzione!
Se avessi dovuto scrivere in C tutto quello che ho fatto, avrei finito quando sarei andato in pensione. :p
Quindi, come ho già detto prima, il C lo si può benissimo imparare, non c'è alcun problema in questo, ma quando uno ha un po' di tempo libero oppure SE se ne dovesse presentare l'esigenza.
Ovviamente DOPO aver imparato a programmare. ;)
EDIT: ho visto gli altri commenti adesso di Vicius e WarDuck. Ovviamente concordo su tutto. :)
EDIT2: riguardo PyPy, ogni anno viene rilasciata almeno una versione nuova che è un miglioramento rispetto al passato. Avevo fornito anche il link al sito in cui c'erano i grafici che lo dimostravano. Quanto provato nel contest, a parte essere vincolato a QUEL tipo di codice, oggi può essere, e probabilmente sarà, molto diverso. ;)
Vincenzo1968
09-01-2013, 10:19
Non mi sembra che qui nessuno stia mettendo in discussione il C in quanto tale.
Il punto è dare in pasto C/C++ a chi non ha mai programmato fino a questo momento.
Quello che ci si sta chiedendo è: nel 2013 il C è didatticamente valido per uno che non ha mai visto come si programma?
Ora se mi si viene a dire che il C è importante e quindi meglio conoscerlo che non conoscerlo, io sono d'accordo al 100%.
Ma se mi vieni a dire che a digiuno di programmazione, imparando C auto-magicamente sai programmare anche in C++-Java-Python e compagnia bella, io ti dico: un bel paio di zebedei.
No no, ho già scritto qualche post fa che puoi benissimo imparare Python(per esempio) senza conoscere affatto il linguaggio C. Sono due linguaggi completamente diversi e dalla diversissima sintassi.
Non ho mai scritto che impari il C e automaticamente sai programmare in un qualunque altro linguaggio.
Siamo dunque d'accordo sull'utilità e sull'importanza del C.
Quello che ho cercato di dire finora è che, dovendo imparare un linguaggio e avendo dunque tutto il tempo a disposizione(non devo fare un programma entro una settimana; non ho problemi di produttività), conviene, secondo me, sbattere subito la testa col C. In seguito, quando passerai a un altro linguaggio, la strada sarà in discesa. E non perché automaticamente conosci già il nuovo linguaggio. Studiare dovrai studiare. Ma passando da C a Python, per esempio, ti sentirai sollevato con la nuova, più semplice, sintassi(print a vs. printf("%s", a);).
Il contrario non è vero. Quando dovrò studiare C, venendo da Python, mi sentirò frustato quando per stampare una variabile dovrò scrivere printf("%s", a).
Tutto qui.
Se poi uno deve essere subito produttivo perché, ad esempio, deve scrivere un programma per fare lo scherzetto all'amico facendo stampare una parolaccia quando l'amico da in input il proprio nome, allora si, s'inizia con un qualunque linguaggio e buona notte.
Vincenzo1968
09-01-2013, 10:21
Si ma te in quei 6 mesi che passi ad ottimizzare il programma potresti fare altro. Sicuramente di più utile. Il tuo capo sarebbe di sicuro più contento così :P
Minchia! Sei mesi! :D
E dove siamo? Nel Congo Belga? (cit. Totò).
:D
Vincenzo1968
09-01-2013, 10:27
@Vincenzo. C'è un dettaglio non trascurabile: in più di 8 anni, oltre all'approccio algoritmico (QUALCHE volta!) non sono andato. :D
Nel mio (ex) lavoro tutto il mio codice era in Python. Finito: funziona? In produzione!
Se avessi dovuto scrivere in C tutto quello che ho fatto, avrei finito quando sarei andato in pensione. :p
Quindi, come ho già detto prima, il C lo si può benissimo imparare, non c'è alcun problema in questo, ma quando uno ha un po' di tempo libero oppure SE se ne dovesse presentare l'esigenza.
Ovviamente DOPO aver imparato a programmare. ;)
EDIT: ho visto gli altri commenti adesso di Vicius e WarDuck. Ovviamente concordo su tutto. :)
EDIT2: riguardo PyPy, ogni anno viene rilasciata almeno una versione nuova che è un miglioramento rispetto al passato. Avevo fornito anche il link al sito in cui c'erano i grafici che lo dimostravano. Quanto provato nel contest, a parte essere vincolato a QUEL tipo di codice, oggi può essere, e probabilmente sarà, molto diverso. ;)
Se a te non è mai capitato non è detto che a qualcun altro, in qualche altra situazione, in altri ambiti e contesti e con problematiche diverse, non possa capitare di dover ottimizzare certe parti dell'applicazione.
Su PyPy sto andando a ripescare i vecchi contest in modo da rifare i benchmark. Appena saranno pronti li pubblicherò(con screenshot). Vediamo se nel frattempo la situazione è migliorata. Me lo auguro.
;)
Vincenzo1968
09-01-2013, 10:45
Da quando, qualche giorno fa, ho acquistato dei libri su Amazon, ho la posta piena di spam. Gente che cerca di vendermi di tutto:auto, polizze assicurative, scarpe, prestiti agevolati, cavoli vari. M'è appena arrivata una mail dal titolo "Sei pieno di debiti?"
http://www.hwupgrade.org/public/style_emoticons/default/rage.png
Vincenzo1968
09-01-2013, 10:59
Intanto, dal Contest 15 (http://www.hwupgrade.it/forum/showthread.php?t=1995326&page=2), Repne Scasb(programmatrice C):
Linguaggio: C
Algoritmo: Non utilizza la forza bruta.
Tempo: Il tempo impiegato e molto minore di 1 millesimo di secondo
http://img803.imageshack.us/img803/2104/contest15repne.jpg
http://www.hwupgrade.org/public/style_emoticons/default/coolface.png
cdimauro
09-01-2013, 11:11
Quello che ho cercato di dire finora è che, dovendo imparare un linguaggio e avendo dunque tutto il tempo a disposizione(non devo fare un programma entro una settimana; non ho problemi di produttività), conviene, secondo me, sbattere subito la testa col C. In seguito, quando passerai a un altro linguaggio, la strada sarà in discesa. E non perché automaticamente conosci già il nuovo linguaggio. Studiare dovrai studiare. Ma passando da C a Python, per esempio, ti sentirai sollevato con la nuova, più semplice, sintassi(print a vs. printf("%s", a);).
Il contrario non è vero. Quando dovrò studiare C, venendo da Python, mi sentirò frustato quando per stampare una variabile dovrò scrivere printf("%s", a).
Tutto qui.
Il contrario, invece, è vero.
Ecco qui (http://docs.python.org/2/library/stdtypes.html#string-formatting) la vecchia e consolidata sintassi per l'interpolazione delle stringhe:
print '%(language)s has %(number)03d quote types.' % \
{"language": "Python", "number": 2}
E qui (http://docs.python.org/2/library/string.html#formatstrings) quella nuova:
print 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
D'altra parte il problema del "templating" è abbastanza comune. ;)
Se poi uno deve essere subito produttivo perché, ad esempio, deve scrivere un programma per fare lo scherzetto all'amico facendo stampare una parolaccia quando l'amico da in input il proprio nome, allora si, s'inizia con un qualunque linguaggio e buona notte.
Ti rivelo un segreto: la produttività è importante sempre, non soltanto per fare uno scherzetto a un amico. Più di 8 anni di lavoro con Python penso siano sufficienti, ma ti faccio un esempio pratico.
Non so se ricordi il mega concorso TIM di 5 anni fa (circa). Quello con la pubblicità di Cristian De Sica che sognava di sguazzare nelle monete d'oro, come zio Paperone. Il backend che gestiva la "business logic" (e anche il db con la base utenti e altro) l'ho realizzato io, in un paio di settimane. La cosa "carina" è che ne ero all'oscuro, perché stavo lavorando ad altro, e a un certo punto in una riunione il mio responsabile mi dice: "Cesare, senti, abbiamo pensato che il backend te lo smazzi tu; tanto con Python lo fai un paio di giorni" (più o meno, eh! Vado a memoria). :D
Al momento mi sono cascate a terra, anche perché la scadenza era fissata e non c'era possibilità di un posticipo, visto che la macchina della pubblicità si era messa in moto e dietro c'era un colosso come TIM. Ma in effetti è finita così: sono arrivato in tempo alla scadenza; le ultime modifiche le feci di notte, poco prima della partenza.
Se avessi dovuto farlo in C sarebbe stato IMPOSSIBILE. E ti assicuro che reggeva tranquillamente il carico (fino a centinaia di SMS al secondo). ;)
Se a te non è mai capitato non è detto che a qualcun altro, in qualche altra situazione, in altri ambiti e contesti e con problematiche diverse, non possa capitare di dover ottimizzare certe parti dell'applicazione.
YAGNI. QUANDO e SE capiterà, se ne prenderà atto, e ci si rimboccherà le maniche.
Su PyPy sto andando a ripescare i vecchi contest in modo da rifare i benchmark. Appena saranno pronti li pubblicherò(con screenshot). Vediamo se nel frattempo la situazione è migliorata. Me lo auguro.
;)
Vai pure, che sono interessato.
EDIT. Per l'interpolazione forse è più affine al C questa sintassi:
print '%s has %03d quote types.' % ("Python", 2)
;)
Intanto, dal Contest 15 (http://www.hwupgrade.it/forum/showthread.php?t=1995326&page=2), Repne Scasb(programmatrice C):
Repne ci umiliava tutti quanti perché aveva una testa tanta e riusciva sempre a trovare l'algoritmo migliore per risolvere il problema. Spesso trovando soluzioni originali. È la prova vivente che per ottenere prestazioni eccellenti non serve C. Avrebbe potuto scrivere il codice in visual basic for application e farlo girare in excel e ci avrebbe comunque massacrato.
Detto questo. Il suo codice era praticamente impossibile da capire se non per lei. Se quello fosse una campione rappresentativo del suo lavoro non la assumerei nemmeno se fosse lei a pagare per lavorare. Il rischio di ritrovarsi con interi programmi o librerie che nessuno è in grado di maneggiare sarebbe troppo alto.
Vincenzo1968
09-01-2013, 12:01
Non parlo di riscrivere l'intera applicazione. Sarebbe follia pura(E dove siamo? Nel Congo Belga? (cit.).
Dico di riscrivere la parte(piccola, altrimenti non ne varrebbe la pena) che dovesse risultare un po' troppo lenta.
Comunque è un lavoraccio andare ad aggiornare i vecchi contest con i nuovi benchmarch. Ci vuole una giornata intera solo per rileggerseli tutti. Ancora non ho trovato quello in cui c'era python e python+PyPy.
E comunque, tanto per gradire, ecco un contest dove quasi tutti(compreso WarDuck) si sono dati a riscrivere il loro codice Python in C per migliorare(e di molto) le prestazioni e/o l'occupazione di memoria:
http://www.hwupgrade.it/forum/showthread.php?t=2217795&page=4
http://www.hwupgrade.it/forum/showpost.php?p=32643678&postcount=76
http://img217.imageshack.us/img217/1253/contestc01.jpg
http://img20.imageshack.us/img20/7332/contestc02.jpg
Vincenzo1968
09-01-2013, 12:13
Repne ci umiliava tutti quanti perché aveva una testa tanta e riusciva sempre a trovare l'algoritmo migliore per risolvere il problema. Spesso trovando soluzioni originali. È la prova vivente che per ottenere prestazioni eccellenti non serve C. Avrebbe potuto scrivere il codice in visual basic for application e farlo girare in excel e ci avrebbe comunque massacrato.
Detto questo. Il suo codice era praticamente impossibile da capire se non per lei. Se quello fosse una campione rappresentativo del suo lavoro non la assumerei nemmeno se fosse lei a pagare per lavorare. Il rischio di ritrovarsi con interi programmi o librerie che nessuno è in grado di maneggiare sarebbe troppo alto.
http://www.hwupgrade.org/public/style_emoticons/default/patpat.gif
Come più volte da lei specificato quel codice era volutamente criptico perché non voleva dare agli altri utenti la possibilità di copiare l'algoritmo. Ed era codice scritto in fretta e furia per postare al più presto la soluzione. E non faceva la programmatrice di professione.
Proprio per queste critiche l'avete fatta scappare...
Cribbio! :mad:
cdimauro
09-01-2013, 12:20
Non parlo di riscrivere l'intera applicazione. Sarebbe follia pura(E dove siamo? Nel Congo Belga? (cit.).
Dico di riscrivere la parte(piccola, altrimenti non ne varrebbe la pena) che dovesse risultare un po' troppo lenta.
Questo è scontato. L'ho già detto diverse volte.
E comunque, tanto per gradire, ecco un contest dove quasi tutti(compreso WarDuck) si sono dati a riscrivere il loro codice Python in C per migliorare le prestazioni:
http://www.hwupgrade.it/forum/showthread.php?t=2217795&page=4
http://www.hwupgrade.it/forum/showpost.php?p=32643678&postcount=76
[...]
Qual è la novità? Nessuna. Intanto grazie a Python hanno avuto la possibilità di arrivare a testare velocemente le loro soluzioni.
POI, visto che le prestazioni non erano adeguate, l'hanno riscritta in C.
Nella vita reale (lavorativa) di un programmatore, quante volte può succedere? :O
vendettaaaaa
09-01-2013, 12:23
http://www.hwupgrade.org/public/style_emoticons/default/patpat.gif
Come più volte da lei specificato quel codice era volutamente criptico perché non voleva dare agli altri utenti la possibilità di copiare l'algoritmo. Ed era codice scritto in fretta e furia per postare al più presto la soluzione. E non faceva la programmatrice di professione.
Proprio per queste critiche l'avete fatta scappare...
E' per quello che ha cancellato tutti i suoi post??
Vincenzo1968
09-01-2013, 12:25
Ehm, Cesare, tu l'hai detto diverse volte ma io stavo rispondendo ad Antonio.
Nella vita reale succede. Magari non troppo spesso ma succede. A te non è mai successo. Ma io conosco gente a cui è successo e succede.
;)
Vincenzo1968
09-01-2013, 12:26
E' per quello che ha cancellato tutti i suoi post??
Credo di si. Non lo so con sicurezza, ma credo di si.
So solo che dopo essere stata subissata di critiche(per il codice criptico!!!) non s'è più vista qui.
http://www.hwupgrade.org/public/style_emoticons/default/rage.png
Vincenzo1968
09-01-2013, 12:36
http://img836.imageshack.us/img836/5952/contestc03.jpg
http://www.hwupgrade.org/public/style_emoticons/default/fyeah.png
cdimauro
09-01-2013, 12:37
Credo di si. Non lo so con sicurezza, ma credo di si.
So solo che dopo essere stata subissata di critiche(per il codice criptico!!!) non s'è più vista qui.
http://www.hwupgrade.org/public/style_emoticons/default/rage.png
Sono due eventi distinti.
Quando cancellò i suoi post fu per una furiosa discussione con fek, se non ricordo male.
La decisione di non scrivere più, invece, è molto più recente. Ma non ricordo se fu dettata dalle critiche al suo stile di programmazione.
In entrambi i casi, non credo che le reazioni siano adeguate alle circostanze. Poi ognuno nella propria vita fa quello che vuole, sia chiaro.
EDIT: se vuoi vedere delle cose veramente carine, dovresti imparare Python. Altro che puntatori. :cool:
Vincenzo1968
09-01-2013, 12:41
http://img825.imageshack.us/img825/6574/contestc04.jpg
:D
Vincenzo1968
09-01-2013, 12:54
Vabbuò,
mi sono stancato a rileggere i vecchi contest. È una faticaccia, come dicevo prima, solo rileggerli tutti. Figuriamoci se debbo ricompilare i sorgenti di tutti i partecipanti e aggiornare i benchmark. Follia pura.
Preparo il nuovo contest così vediamo aggiornamenti e miglioramenti che sono intercorsi da allora ad oggi in PyPy e Cython. Quest'ultimo, soprattutto, sono curioso di vederlo all'opera. Ho letto qualcosina nel link postato da Cesare e sembra davvero interessante.
Si avrà a che fare, ve lo anticipo, con la gestione di uno o più file di testo di grosse dimensioni(circa 1 GiB l'uno).
;)
Hieicker
09-01-2013, 13:00
Seguo il topic con interesse anch'io! Mi sto rimettendo a programmare, ma stavolta in C :) !
Vincenzo1968
09-01-2013, 13:04
Seguo il topic con interesse anch'io! Mi sto rimettendo a programmare, ma stavolta in C :) !
:yeah: :winner: :yeah:
Vincenzo1968
09-01-2013, 13:07
Sono due eventi distinti.
Quando cancellò i suoi post fu per una furiosa discussione con fek, se non ricordo male.
La decisione di non scrivere più, invece, è molto più recente. Ma non ricordo se fu dettata dalle critiche al suo stile di programmazione.
In entrambi i casi, non credo che le reazioni siano adeguate alle circostanze. Poi ognuno nella propria vita fa quello che vuole, sia chiaro.
EDIT: se vuoi vedere delle cose veramente carine, dovresti imparare Python. Altro che puntatori. :cool:
Di Python non digerisco la mancanza di parole chiave/simboli per i blocchi. Non mi piace usare l'indentazione per i blocchi di codice. Mi sto studicchiando, nei ritagli di tempo, Ruby.
;)
P.S.: Non ho detto che non mi piace l'indentazione. Ho detto che non mi piace utilizzarla forzatamente per specificare i blocchi.
cdimauro
09-01-2013, 13:14
Python lo si ama o li odia per questo.
All'inizio, provenendo da Pascal/Delphi, e quindi usando keyword "cicciotte" come begin e end per delimitare i blocchi, mi sono trovato spiazzato. Ma è bastato poco tempo, lavorandoci, ad abituarmi. Tanto l'indentazione la gestisce ormai l'editor da anni, quindi non devo fare proprio niente (a parte un colpo di tab quando inizia un nuovo livello).
Di Ruby non riesco a digerire tre cose. I default, perché se c'è un problema nell'uso di qualche costrutto (oggetto), lo voglio sapere subito, sollevando un'eccezione. I tipi di blocchi diversi, che hanno un funzionamento leggermente diverso, ma che può creare parecchi mal di testa, se sbagli. E infine la sintassi un po' criptica per certe cose, unita all'uso di nomi decisamente bizzarri in alcuni casi (esempio: l'upper e il lower case).
P.S. I contest quasi sempre sono stati orientati alle prestazioni piuttosto che alla risoluzione di problematiche concrete. Per cui non c'è interesse nemmeno nel seguirli.
Vincenzo1968
09-01-2013, 13:47
Python lo si ama o li odia per questo.
All'inizio, provenendo da Pascal/Delphi, e quindi usando keyword "cicciotte" come begin e end per delimitare i blocchi, mi sono trovato spiazzato. Ma è bastato poco tempo, lavorandoci, ad abituarmi. Tanto l'indentazione la gestisce ormai l'editor da anni, quindi non devo fare proprio niente (a parte un colpo di tab quando inizia un nuovo livello).
Di Ruby non riesco a digerire tre cose. I default, perché se c'è un problema nell'uso di qualche costrutto (oggetto), lo voglio sapere subito, sollevando un'eccezione. I tipi di blocchi diversi, che hanno un funzionamento leggermente diverso, ma che può creare parecchi mal di testa, se sbagli. E infine la sintassi un po' criptica per certe cose, unita all'uso di nomi decisamente bizzarri in alcuni casi (esempio: l'upper e il lower case).
Io Python non lo odio. Lo trovo interessante, interessantissimo. Ma questa cosa dell'indentazione per i blocchi di codice proprio non riesco a farmela piacere.
:boh:
P.S. I contest quasi sempre sono stati orientati alle prestazioni piuttosto che alla risoluzione di problematiche concrete. Per cui non c'è interesse nemmeno nel seguirli.
Ah ma questo sarà su una problematica concreta. Sto ipotizzando il caso di un'azienda editoriale che abbia bisogno di elaborare grossi file di testo per sue statistiche interne sulle opere pubblicate.
Non vorrai mica non partecipare? Mo che m'hai incuriosito con Cython?
:mbe:
Vincenzo1968
09-01-2013, 14:02
Anche io nel mio stage avevo qualche problema all'inizio di digestione di questa tecnica di Python, ma ti posso assicurare che quando le righe di codice cominciano a diventare 500-1000-2000 allora l'identazione ti aiuta e non poco ;)
E riguardo al Ruby, ho scoperto che lo si usa per programmare parti dei sistemi bancari :)
Certamente. E io questo ho detto. L'indentazione la trovo utilissima e la uso sempre nel mio codice. Anche per programmi brevi. Anche per programmi brevissimi. Anche per il classico "Hello World". Solo non mi piace essere costretto a usarla per i blocchi di codice. Un blocco senza parole chiave o simboli che lo identifichi, mi confonde. Ma è una cosa mia, è questione di gusti.
Su Ruby sono all'inizio. Ma proprio all'inizio inizio inizio. Mi piacerebbe avere più tempo per studiarmelo meglio.
cdimauro
09-01-2013, 14:15
Io Python non lo odio. Lo trovo interessante, interessantissimo. Ma questa cosa dell'indentazione per i blocchi di codice proprio non riesco a farmela piacere.
:boh:
Lo capisco, è una questione di gusti, e sui gusti non si discute.
Ah ma questo sarà su una problematica concreta. Sto ipotizzando il caso di un'azienda editoriale che abbia bisogno di elaborare grossi file di testo per sue statistiche interne sulle opere pubblicate.
Mi pare difficile pensare che elaborino testi di GB di dimensione. Ho un mio amico che fa il sistemista per "La Sicilia", e posso chiedere a lui.
Anche nella mia esperienza, avendo lavorato con un'azienda che gestiva il traffico SMS di aziende leader del settore di infotainment, i log erano di diversi ordini di grandezza inferiori (per arrivare a qualche MB doveva esserci un'operazione di "infasamento"; estremamente rara).
Non vorrai mica non partecipare? Mo che m'hai incuriosito con Cython?
:mbe:
Generalmente non partecipo, quindi per me è normale.
Vincenzo1968
09-01-2013, 15:22
Eh vabbeh! Se non partecipi è inutile che lo facciamo. Era per verificare la bontà di PyPy e Cython.
A meno che non ci sia qualcun altro che vuole cimentarsi con la cosa. C'è nessuno?
Fatemelo sapere sennò non avvio il contest.
Per i file possiamo utilizzare dimensioni più ridotte, in modo da fare una cosa più realistica. Possiamo, per esempio, scaricare i romanzi in formato txt da liberliber.
Fatemi sapere
;)
Mi pare difficile pensare che elaborino testi di GB di dimensione. Ho un mio amico che fa il sistemista per "La Sicilia", e posso chiedere a lui.
Qua ne utilizziamo un po', come datafile, il più grosso se non erro si aggira sui 15GB. È un sistema attualmente in via di dismissione. :)
Vincenzo1968
09-01-2013, 16:00
Qua ne utilizziamo un po', come datafile, il più grosso se non erro si aggira sui 15GB. È un sistema attualmente in via di dismissione. :)
Explain please!
More info, pliiiisss!
cdimauro
09-01-2013, 16:02
Qua ne utilizziamo un po', come datafile, il più grosso se non erro si aggira sui 15GB. È un sistema attualmente in via di dismissione. :)
Con quale frequenza vengono generati? E che tipo di esigenze avete?
E' per pura curiosità, visto che avendo lavorato come backend-ista negli ultimi anni, con logging et similia c'ho dovuto avere a che fare per forza di cose.
L'esigenza è quella di avere una "staticizzazione" dei dati contenuti su un db.
Un applicativo li estrae dal db, li elabora e li staticizza su file di testo. Un altro applicativo, successivamente, li legge e li trasforma in file "binari" contenenti strutture C, che verranno poi letti dall'applicativo finale (un motore di ricerca custom, scritto in C). Il tutto avviene a frequenza giornaliera.
Però, come dicevo, si tratta di un'architettura pensata ormai dieci anni fa, e che negli ultimi periodi ha dimostrata tutta la sua inadeguatezza, ed è in corso di sostituzione.
(For the lulz, verrà sostituita da Solr + wrapper Python :asd:).
cdimauro
09-01-2013, 16:56
L'esigenza è quella di avere una "staticizzazione" dei dati contenuti su un db.
Un applicativo li estrae dal db, li elabora e li staticizza su file di testo. Un altro applicativo, successivamente, li legge e li trasforma in file "binari" contenenti strutture C, che verranno poi letti dall'applicativo finale (un motore di ricerca custom, scritto in C). Il tutto avviene a frequenza giornaliera.
Però, come dicevo, si tratta di un'architettura pensata ormai dieci anni fa, e che negli ultimi periodi ha dimostrata tutta la sua inadeguatezza, ed è in corso di sostituzione.
(For the lulz, verrà sostituita da Solr + wrapper Python :asd:).
Java + Python. Un'accoppiata micidiale. :asd:
A parte gli scherzi, grazie per l'informazione.
...
Però, come dicevo, si tratta di un'architettura pensata ormai dieci anni fa, e che negli ultimi periodi ha dimostrata tutta la sua inadeguatezza, ed è in corso di sostituzione.
(For the lulz, verrà sostituita da Solr + wrapper Python :asd:).
Lucene spacca c'è poco da fare. Qui a lavoro abbiamo un indice con tutti gli articoli pubblicati negli ultimi anni dai maggiori quotidiani italiani (circa 900 pubblicazioni). 65 GB con circa 120 milioni di articoli. Mai un problema e ricerche che finiscono sempre in pochi decimi di secondo. Se penso che gira su un clusterino minuscolo con 4 processori e 4 gb di ram. :O
Vincenzo1968
09-01-2013, 17:32
Si ma quale versione devo installare? La 3.6 o la 4.2?
http://lucene.apache.org/solr/
E poi: lo volete fare 'sto contest o no?
E poi ancora: solr lo trovo fra i repositotry ufficiali di Ubuntu o me lo scarico dal sito?
ingframin
09-01-2013, 17:45
Si ma quale versione devo installare? La 3.6 o la 4.2?
http://lucene.apache.org/solr/
E poi: lo volete fare 'sto contest o no?
E poi ancora: solr lo trovo fra i repositotry ufficiali di Ubuntu o me lo scarico dal sito?
Ma aprilo il contest, tanto e' gratis!
Vincenzo1968
09-01-2013, 18:05
http://img822.imageshack.us/img822/1949/lucene.jpg
http://www.hwupgrade.org/public/style_emoticons/default/coolface.png
Vincenzo1968
09-01-2013, 18:10
Un contest carino sarebbe: "Noi tutti contro Lucent". Vediamo chi riesce a battere Lucent nei tempi di esecuzione su file di grosse dimensioni.
Che ne dite?
Io intanto me lo installo e me lo studio.
:D
Vincenzo1968
09-01-2013, 18:23
Mo scarico pure il porting in C++(ché, almeno dicono, è più performante):
http://clucene.sourceforge.net/
http://img843.imageshack.us/img843/7637/clucene.jpg
http://www.hwupgrade.org/public/style_emoticons/default/coolface.png
Occhio che sono due cose ben diverse:
- Lucene è una libreria di indicizzazione e ricerca
- Solr è un motore di ricerca costruito partendo da Lucene.
Quindi, Solr è un motore di ricerca completo, invece intorno a Lucene devi scrivere un po' (tanto) codice. :D
(Purtroppo non ho ancora avuto modo di dare un occhio ai sorgenti. :cry: )
Vincenzo1968
09-01-2013, 18:27
Occhio che sono due cose ben diverse:
- Lucene è una libreria di indicizzazione e ricerca
- Solr è un motore di ricerca costruito partendo da Lucene.
Quindi, Solr è un motore di ricerca completo, invece intorno a Lucene devi scriverhttp://clucene.sourceforge.net/e un po' (tanto) codice. :D
(Purtroppo non ho ancora avuto modo di dare un occhio ai sorgenti. :cry: )
Grazie per le dritte! ;)
:D
Vincenzo1968
09-01-2013, 19:37
Mi piace assai 'sto Lucene.
Ho deciso: apro il contest "Noi tutti contro Lucene".
Si tratterà di eseguire query su file di testo di notevoli dimensioni(decine di GiB). Tanto abbiamo visto che nella vita reale non è poi un'ipotesi cosi remota, anzi.
Vincerà chi riuscirà a ottenere tempi d'esecuzione migliori di Lucene.
Chi non ci riesce dovrà indossare il sambenito per un mese intero.
Domani mi studio per benino Lucene e faccio qualche esperimento. Dopodomani: Contest!!!
;)
http://lucene.apache.org/core/4_0_0/index.html
Apache Lucene 4.0.0 Documentation
Lucene is a Java full-text search engine. Lucene is not a complete application, but rather a code library and API that can easily be used to add search capabilities to applications.
This is the official documentation for Apache Lucene 4.0.0. Additional documentation is available in the Wiki.
http://wiki.apache.org/lucene-java/TheBasics
import java.io.IOException;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.RAMDirectory;
public class LuceneTest {
public static void main(String[] args) throws IOException {
RAMDirectory directory = new RAMDirectory();
IndexWriter writer =
new IndexWriter(directory, new SimpleAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
Document doc = new Document();
doc.add(new Field("partnum", "Q36", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("description", "Illidium Space Modulator", Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();
IndexSearcher searcher = new IndexSearcher(directory);
Query query = new TermQuery(new Term("partnum", "Q36"));
TopDocs rs = searcher.search(query, null, 10);
System.out.println(rs.totalHits);
Document firstHit = searcher.doc(rs.scoreDocs[0].doc);
System.out.println(firstHit.getField("partnum").name());
}
}
cdimauro
09-01-2013, 22:02
scusa perchè non partecipi? se sei così sicuro delle tue affermazioni non dovresti pensarci 2 volte :)
Non ho bisogno di provare niente. Chi ha sufficiente esperienza nel campo della programmazione sa come vanno le cose.
Non partecipo perché questi contest finiscono sempre in una direzione: le prestazioni, che nella vita di tutti i giorni non sono l'elemento fondamentale per un programmatore.
In ogni caso, anche avessi tempo, lo dedicherei a cose molto più importanti, visto che ho dei progetti che ho dovuto sospendere per cronica mancanza di tempo.
dai vostri post se ho ben capito
si possono modificare parti di un app. Con un linguaggio diverso da quello con cui e stato scritto??
Ragazzi ho aperto una discussione non una trincea0_o
dai vostri post se ho ben capito
si possono modificare parti di un app. Con un linguaggio diverso da quello con cui e stato scritto??
Ragazzi ho aperto una discussione non una trincea0_o
Dipende dal linguaggio:
- Python ti permette di scrivere parti in C
- Java anche, tramite JNI
- C ti permette di 'embeddare' (usti che brutto) codice assembly.
vendettaaaaa
09-01-2013, 22:18
dai vostri post se ho ben capito
si possono modificare parti di un app. Con un linguaggio diverso da quello con cui e stato scritto??
Ragazzi ho aperto una discussione non una trincea0_o
E' da quando seguo questo forum che TUTTI i thread di questo tipo "che linguaggio scelgo?" "meglio c++ o java?" eccetera, finiscono, sempre indipendentemente dalla volontà di chi li apre, in HOLY WAAAAARS!
Loro non si stancano di riscrivere le stesse cose migliaia di volte, e io non mi stanco di leggere, imparo sempre qualcosa :read:
in tutti i casi, indipendetemente dai gusti ed esperienze personali IMHO è sempre meglio imparare più linguaggi in modo da adattarsi alle varie necessità. Purtroppo trovo ancora oggi programmatori che si fossilizzano su un dato linguaggio per tutta la loro vita lavorativa.
Siate curiosi :D
Vincenzo1968
10-01-2013, 16:22
http://img84.imageshack.us/img84/2801/manutenzioneg.jpg
http://www.hwupgrade.org/public/style_emoticons/default/lnrg.png http://www.hwupgrade.org/public/style_emoticons/default/rage.png
Occhio! Ci sono anche Indri e Zettair:
Indri
http://www.lemurproject.org/
http://lemur.sourceforge.net/indri/
http://www.lemurproject.org/indri.php
Zettair:
http://www.seg.rmit.edu.au/zettair/index.html
http://www.seg.rmit.edu.au/zettair/documentation.html
http://www.seg.rmit.edu.au/zettair/about.html
http://trec.nist.gov/
Benchmark:
wrg.upf.edu/WRG/dctos/Middleton-Baeza.pdf
http://img4.imageshack.us/img4/7521/abenchmark01.jpg
http://img268.imageshack.us/img268/6697/abenchmark02.jpg
http://img688.imageshack.us/img688/5789/benchmark01s.jpg
http://img268.imageshack.us/img268/6697/abenchmark02.jpg
http://img89.imageshack.us/img89/3167/benchmark03r.jpg
http://img811.imageshack.us/img811/6924/benchmark04.jpg
http://img822.imageshack.us/img822/474/benchmark05.jpg
http://imageshack.us/photo/my-images/824/benchmark06.jpg/
http://imageshack.us/photo/my-images/856/benchmark07.jpg/
http://img21.imageshack.us/img21/6841/benchmark08.jpg
http://img688.imageshack.us/img688/1053/benchmark09.jpg
http://img13.imageshack.us/img13/399/benchmark10.jpg
http://img687.imageshack.us/img687/8408/benchmark11.jpg
http://img401.imageshack.us/img401/4619/fineltest.jpg
Altro Benchmark:
http://www.ossblog.it/post/5058/benchmark-motori-di-ricerca-open-source
http://img191.imageshack.us/img191/2028/altrobenchmark01.jpg
http://img441.imageshack.us/img441/8767/altrobenchmark02.jpg
Lemur ha l'interfaccia in Jave e il core in C. Zettair è scritto interamente in C.
Li utilizzeremo tutt'e tre per il contest, e Lucene e Lemur e Zettair; Bisognerà batterli tutti.
http://www.emse.fr/~mbeig/IR/tools.html
Vincenzo1968
10-01-2013, 16:31
EDIT: doppio.
Vincenzo1968
10-01-2013, 16:36
giusto per evitare ogni malinteso...Vincenzo puoi fare una presentazione degna del suo nome al contest?
cioè spiegare per filo e per segno cosa c'è da fare...almeno anche per quelli che non hanno tanto tempo libero come me la cosa viene molto + fattibile :)
Nel post di apertura del thread sarà spiegato per filo e per segno tutto ciò che occorre fare.
Ti posso anticipare che si tratterà di sviluppare un motore di ricerca e indicizzazione su grossissimi file di testo(circa 50 GiB).
La sfida consisterà nel cercare di battere(o perlomeno avvicinarsi) i tempi di quei mostri lì(Lucene, Indri e Zettair) :D
;)
zettair non lo conoscevo. Da quello che vedo però lo sviluppo è praticamente morto da anni.
I bench comparativi andrebbero rifatti perché non rispecchiano di certo lo stato attuale. Lucene 1.9 avrà più di 7 anni.
Vincenzo1968
10-01-2013, 17:20
zettair non lo conoscevo. Da quello che vedo però lo sviluppo è praticamente morto da anni.
I bench comparativi andrebbero rifatti perché non rispecchiano di certo lo stato attuale. Lucene 1.9 avrà più di 7 anni.
E noi che ci stiamo a fare qui?
Rifaremo tutti i benchmark necessari nel contest. Confronteremo il loro e il nostro codice.
;)
Vincenzo1968
10-01-2013, 18:56
Stasera c'è il pedonano da Santoro. Spero che Travaglio non sia confinato nel solito monologo. Finalmente vere domande da parte di un vero giornalista. Sarebbe la prima volta in vent'anni .
Sto preparando un'applicazioncina per la generazione dei file di testo. La dimensione minima di ogni file sarà di 50 GiB. Appena è pronta la metto online e vi do il link per scaricarla.
;)
Vincenzo1968
10-01-2013, 23:26
Non lo so, ancora la devo scrivere l'applicazione. I file li creo facendo un merging di vari files .txt che scarico da liberliber:
http://www.liberliber.it/
Vincenzo1968
11-01-2013, 13:34
Tre vecchie discussioni nelle quali si mostra la netta superiorità(riguardo alle prestazioni) del C nei confronti degli altri linguaggi(compreso il C++; di poco, non così netta in questo caso, ma compreso il C++ ;) ):
http://www.hwupgrade.it/forum/showthread.php?t=1853851
http://www.hwupgrade.it/forum/showthread.php?t=1816511
http://www.hwupgrade.it/forum/showthread.php?t=1779822
E si trattava di file di piccole dimensioni(pochi KB o MB). :D
:Prrr:
cdimauro
11-01-2013, 14:32
Ancora con questa storia? Non ci dormi la notte? Ma hai veramente l'ansia da prestazioni, a questo punto! :doh:
Ti faccio notare, inoltre, che il C++ è sostanzialmente un superset del C, per cui può essere usato almeno come il C, e dunque presentare come minimo le stesse prestazioni, con in più la possibilità di migliorarle sfruttando SAPIENTEMENTE le funzionalità aggiuntive che mette a disposizione.
Quindi C++ >= C prestazionalmente. Sempre. Se è vero il contrario, o è colpa del compilatore, o il programmatore non ha usato appropriatamente i nuovi strumenti. :read:
Vincenzo1968
11-01-2013, 14:38
compreso il C++; di poco, non così netta in questo caso, ma compreso il C++
Un minimo di overhead c'è sempre in C++ rispetto al C. Minimo, ma c'è. Vedremo nel contest. È quasi pronto.
;)
Un minimo di overhead c'è sempre in C++ rispetto al C. Minimo, ma c'è. Vedremo nel contest. È quasi pronto.
;)
Da profano di C/C++ quello che dici mi puzza. Se prendi un programma C e lo compili con uno compilatore C++ dovresti avere lo stesso binario. Non è che ti aggiunge roba mentre non guardi.
Oltretutto mi pare di ricordare che c++ abbia un sistema di tipi migliore di c. Questo dovrebbe aiutare il compilatore ad ottimizzare meglio il codice ed avere prestazioni migliori.
Vincenzo1968
11-01-2013, 14:59
Ehm Vicius,
dai un'occhiata alle vecchie discussioni che ho postato e vedrai.
L'incremento è minimo ma c'è.
Poi può essere che ottimizzando al massimo i sorgenti in C++ le prestazioni risultino uguali o addirittura superiori, non lo so.
cdimauro
11-01-2013, 15:02
compreso il C++; di poco, non così netta in questo caso, ma compreso il C++
Un minimo di overhead c'è sempre in C++ rispetto al C. Minimo, ma c'è. Vedremo nel contest. È quasi pronto.
;)
BALLE!
Vedi la risposta di Vicius, che è assolutamente pertinente. E il mio precedente messaggio. :read:
Da profano di C/C++ quello che dici mi puzza. Se prendi un programma C e lo compili con uno compilatore C++ dovresti avere lo stesso binario. Non è che ti aggiunge roba mentre non guardi.
Oltretutto mi pare di ricordare che c++ abbia un sistema di tipi migliore di c. Questo dovrebbe aiutare il compilatore ad ottimizzare meglio il codice ed avere prestazioni migliori.
Esattamente. E' proprio così.
Ehm Vicius,
dai un'occhiata alle vecchie discussioni che ho postato e vedrai.
L'incremento è minimo ma c'è.
Poi può essere che ottimizzando al massimo i sorgenti in C++ le prestazioni risultino uguali o addirittura superiori, non lo so.
Dipende dal compilatore a questo punto, perché se gli passi lo STESSO codice C, e ne viene fuori un eseguibile che ha prestazioni più scarse, non è certo "colpa" del linguaggio.
E' una cosa ovvia. :read:
Vincenzo1968
11-01-2013, 15:14
Using identical algorithms, two solutions for the initial challenge are presented - they have similar run-time performance, although C++ does have a small edge. Clearly, this small win would not be the reason alone for chosing languages.
I believe that I have demonstrated how C++ constructs (the template) allows for generic re-usable and flexible implementations without run-time performance overhead, and (the constructor/destructor) allows for automatic initialization and cleanup of data structures - making it simpler for the user of generic data structures, such as the hash presented, to write real-world programs that are reliable and do not leak memory.
I also believe that I have proven, that C++ does not force any particular type of design down anyone's throat. For example, the node_t in my code is almost identical to the struct node in the original C code - there simply was no need to change it, and therefore it was left basically the way that it was.
...
small edge. Small, ma c'è. Non vale la pena rinunciare al C++ per "small edge" ma small edge c'è.
Se c'è c'è. Se non ci fosse. Ma c'è.
http://www.hwupgrade.org/public/style_emoticons/default/fyeah.png
http://www.hwupgrade.org/public/style_emoticons/default/patpat.gif
Vincenzo1968
11-01-2013, 15:17
E 'ndirindinghete! coi cicli di clock.
Chi ha mai affermato una cosa del genere? Ritengo che quando certe parti dell'applicazione risultino troppo lente, è il caso di sostituirle con routine(da interfacciare magari tramite .dll/.os) scritte in C.
Vincenzo nel trafiletto che hai riportato c'è scritto che c++ è più veloce di C. :Prrr:
Vincenzo nel trafiletto che hai riportato c'è scritto che c++ è più veloce di C. :Prrr:
:doh:
ma come è che si è passati dal linguaggio per imparare al linguaggio più veloce?
cdimauro
11-01-2013, 15:33
io devo ancora capire in quale ambiente lavorativo vi e' richiesto di contare i cicli di clock del processore piuttosto che finire il lavoro e arrivare sul mercato in quarto del tempo.
cioe' nel mio ambito e' cosi' (:D), ma la stragrande maggioranza di situazioni lavorative vede piccole realta' che devono giungere sul mercato quanto prima, non guadagnare 5 secondi su 50 rispetto ai concorrenti.
Da incorniciare. :)
Vincenzo nel trafiletto che hai riportato c'è scritto che c++ è più veloce di C. :Prrr:
:asd:
:doh:
ma come è che si è passati dal linguaggio per imparare al linguaggio più veloce?
Ansia da prestazione.
Vincenzo1968
11-01-2013, 15:50
Vincenzo nel trafiletto che hai riportato c'è scritto che c++ è più veloce di C. :Prrr:
Allora riporto quest'altro trafiletto(verso la fine dell'articolo):
Of course, the ego-booster could also be implemented in C.
...
could also be implemented ma s'è guardato bene, l'autore, dall'implementarlo e fare le prove. :D
Altri due articolotti interessanti nei quali si spiega perché c'è un minimo(minimo, minimissimo) di overhead:
http://www.eventhelix.com/realtimemantra/basics/comparingcppandcperformance.htm
http://www.eventhelix.com/realtimemantra/basics/ComparingCPPAndCPerformance2.htm
:Prrr:
Nei link sopra si danno consigli su come è possibile minimizzare o eliminare del tutto tale overhead(eliminando o limitando al minimo, per esempio, l'uso di costruttori e distruttori).
come se poi nelle applicazioni reali i programmi facessero solo una singola operazione e basta.
vi faccio l'esempio di un progettino al lavoro, bisogna leggere file di testo da 180MB elaborarli e salvarli su un sistema CRM tramite webservice.
tramite webservice si riescono ad inserire 1000 record ogni 250 secondi, quindi se abbiamo un milione di record dentro quei 180MB ci si mette 250.000 secondi = 69 ore
ora, per leggere quel file di testo in C# ci metto io 1 ora a fare il programma, e il programma ci impiega 3 ore ad elaborare il file.
arriva uno a caso e ci mette 1 ora a fare il programma in C puro e il programma ci mette 1 ora a elaborare il file.
costo totale all'azienda in entrambi i casi: 1 ora di lavoro
totale durata con c# 72 ore
totale durata con C 70 ore
e io dovrei rifare solo il componente che legge il file in C per guadagnare circa il 2% nell'elaborazione? corro a riscriverlo :sofico:
cdimauro
11-01-2013, 16:11
Allora riporto quest'altro trafiletto(verso la fine dell'articolo):
could also be implemented ma s'è guardato bene, l'autore, dall'implementarlo e fare le prove. :D
Altri due articolotti interessanti nei quali si spiega perché c'è un minimo(minimo, minimissimo) di overhead:
http://www.eventhelix.com/realtimemantra/basics/comparingcppandcperformance.htm
http://www.eventhelix.com/realtimemantra/basics/ComparingCPPAndCPerformance2.htm
:Prrr:
Nei link sopra si danno consigli su come è possibile minimizzare o eliminare del tutto tale overhead(eliminando o limitando al minimo, per esempio, l'uso di costruttori e distruttori).
Allora non vuoi proprio capire.
Cosa non ti è chiaro del fatto che se dai un programma C a un compilatore C++, se questi genera un eseguibile meno performante, è colpa del compilatore e non del linguaggio?
Cosa non ti è chiaro del fatto che se un programmatore (non il compilatore: il programmatore questa volta) utilizza dei costrutti che possono avere un costo dal punto di vista prestazionale, e il programma che viene fuori effettivamente è meno performante, il problema ricade nel programmatore e non nel compilatore (che ha fatto il suo dovere)?
Da queste due cose si evince che il C++, come linguaggio, ha sempre prestazioni almeno comparabili a quelle del C. E migliori, nel caso del SAPIENTE uso dei suoi nuovi costrutti.
The_ouroboros
11-01-2013, 16:31
come se poi nelle applicazioni reali i programmi facessero solo una singola operazione e basta.
vi faccio l'esempio di un progettino al lavoro, bisogna leggere file di testo da 180MB elaborarli e salvarli su un sistema CRM tramite webservice.
tramite webservice si riescono ad inserire 1000 record ogni 250 secondi, quindi se abbiamo un milione di record dentro quei 180MB ci si mette 250.000 secondi = 69 ore
ora, per leggere quel file di testo in C# ci metto io 1 ora a fare il programma, e il programma ci impiega 3 ore ad elaborare il file.
arriva uno a caso e ci mette 1 ora a fare il programma in C puro e il programma ci mette 1 ora a elaborare il file.
costo totale all'azienda in entrambi i casi: 1 ora di lavoro
totale durata con c# 72 ore
totale durata con C 70 ore
e io dovrei rifare solo il componente che legge il file in C per guadagnare circa il 2% nell'elaborazione? corro a riscriverlo :sofico:
sicuro i tuoi conti siano giusti? :stordita:
sicuro i tuoi conti siano giusti? :stordita:
uhm, fammi controllare, nella durata totale intendevo di elaborazione (quindi esclusa l'ora di programmazione)
1.000 record ogni 250 secondi
1.000 x 1.000 = 1.000.000 record
250 x 1.000 = 250.000 secondi
250.000 secondi = 4166 minuti = 69 ore
mi sembra giusto, poi magari sto facendo una grande figura di me*da :fagiano:
EDIT: se intendi il 2% di guadagno l'ho calcolato velocemente con una proporzione, ma dovremmo essere su quell'entità
ingframin
11-01-2013, 17:41
Oh se uno vuole il massimo puo' sempre usare Fortran :sofico:
cdimauro
11-01-2013, 17:48
Un po' di sano assembly sarebbe l'ideale... per far passare la voglia di pensare ossessivamente alle prestazioni. :asd:
Vincenzo1968
11-01-2013, 18:09
Ho combattuto con le pipe in Java e sono stanco. Per il contest :boxe: se ne parla, dunque, lunedì e non oggi come annunciato in precedenza.
Addio.
:lamer:
:bsod:
:bimbo:
:cincin:
:hic:
:tie:
:gluglu:
:ubriachi:
Vincenzo1968
12-01-2013, 13:18
Contest 19:
http://img715.imageshack.us/img715/2317/c19gen.jpg
http://www.hwupgrade.org/public/style_emoticons/default/coolface.png
cdimauro
12-01-2013, 14:19
Non era meglio creare un apposito thread, come in passato?
Vabbé che questo è andato a donne di facili costumi. Come sempre. :D
Vincenzo1968
12-01-2013, 15:15
Lunedì sarà creato l'apposito thread, ;)
Qui ho messo un'anteprima del programmino che sto preparando per la creazione del file di output.
Come si vede se viene eseguito senza passargli nessun parametro, il programma stampa a video le istruzioni.
Va utilizzado cosi:
se, per esempio si intende creare un file di output chiamato "myfile.txt" di 8 GiB:
C19Gen myfile.txt -D8Gib
ingframin
12-01-2013, 15:28
Ma quale è lo scopo? eseguire query su un file di testo e creare un report?
Vincenzo1968
12-01-2013, 15:40
Scopo principale, così come per ogni contest che abbiamo svolto finora, è il divertimento e la curiosità.
Poi vediamo anche se siamo capaci di scovare algoritmi in grado di battere le prestazioni dei giganti del settore(Lucene, etc). Mi sembra interessante, no?
E, infine, verifichiamo quanto si guadagna in prestazioni con PyPy e Cython. In un contest precedente l'avevamo già visto ma, come dice Cesare, sono passati quattro/cinque anni e sarebbe il caso di vedere se nel frattempo qualcosina è migliorata.
;)
rеpne scasb
12-01-2013, 21:47
Generalmente non partecipo
E lo credo bene.
cdimauro
12-01-2013, 22:18
Già. Questi contest sono fatti apposta per te e chi ricerca le prestazioni sopra ogni cosa. Non fanno per me. ;)
Vincenzo1968
13-01-2013, 11:00
E lo credo bene.
Reeeeeeeeeeeepneeeeeeeeeeeeeeeee!!!
Ciao! Come stai? :)
Bentornata :flower:
Vincenzo1968
13-01-2013, 12:52
Questi sono i file che sto usando per generare il mega file di output:
http://www.filedropper.com/contest19files
Scaricati da qui:
http://www.liberliber.it/
;)
Vincenzo1968
13-01-2013, 14:05
Il programma per generare il file di output l'ho messo come punto A nel contest:
http://www.hwupgrade.it/forum/showthread.php?p=38853558#post38853558
;)
cdimauro
13-01-2013, 14:06
Reeeeeeeeeeeepneeeeeeeeeeeeeeeee!!!
Ciao! Come stai? :)
Bentornata :flower:
Non è che sia tornata: arriva ogni morte di papa, per fare qualche battutina acida.
Il forum lo usa per questo, oppure per mettersi in mostra e ricevere complimenti.
Discutere o aiutare gli altri utenti non è nella sua natura: vive per se stessa, per la sua esaltazione, e il suo compiacimento...
vendettaaaaa
13-01-2013, 14:30
http://imgur.com/tCp90.gif
http://imgur.com/tCp90.gif
http://www.reactiongifs.com/wp-content/uploads/2011/05/tumblr_ljh0puClWT1qfkt17.gif
rеpne scasb
13-01-2013, 19:32
Già. Questi contest sono fatti apposta per te e chi ricerca le prestazioni sopra ogni cosa. Non fanno per me. ;)
Io non ho mai visto due righe di codice che tu abbia mai scritto in questo forum che suggeriscano un barlume di creatività o originalità. Altro che contest.
Quindi non partecipi perchè non sei capace.
La differenza tra me e te è la stessa che c'è tra uno scultore e un muratore.
rеpne scasb
13-01-2013, 19:37
Non è che sia tornata: arriva ogni morte di papa, per fare qualche battutina acida.
Il forum lo usa per questo, oppure per mettersi in mostra e ricevere complimenti.
Discutere o aiutare gli altri utenti non è nella sua natura: vive per se stessa, per la sua esaltazione, e il suo compiacimento...
Brutta cosa l'invidia.
Vincenzo1968
13-01-2013, 20:09
E comunque i complimenti che riceve Repne sono del tutto meritati e muovono da una straordinaria capacità di risolvere i problemi come dimostrato nei vari contest. Capacità fuori del comune come riconosciuto da molti qui.
Detto questo mi disiscrivo da questo thread e buona notte.
Tanto Repne sono sicuro di rileggerla nei nuovi contest che faremo o, se ne dovessi avere bisogno, posso sempre contattarla via pm.
Adieu e cavoli vostri. (cit.).
:D
cdimauro
13-01-2013, 21:01
Io non ho mai visto due righe di codice che tu abbia mai scritto in questo forum che suggeriscano un barlume di creatività o originalità. Altro che contest.
Quindi non partecipi perchè non sei capace.
Il fatto che tu non abbia visto nulla dipende dalla tua scarsa frequentazione del posto.
Ma è normale, per una che ha una visione così narcisistica e solipsistica.
La differenza tra me e te è la stessa che c'è tra uno scultore e un muratore.
Assolutamente d'accordo. Il tuo codice, generalmente illeggibile, è da autentici mastri d'arma.
Brutta cosa l'invidia.
E' la verità che ti fa male, cara Lyane. Ecco qui (http://www.hwupgrade.it/forum/showpost.php?p=9824557&postcount=17) un esempio del tuo smisurato ego:
Il codice e' assolutamente originale, e non copiato da altre fonti.
E non è un fatto isolato. Ma questo lo sai bene.
Comunque sei sempre libera di cancellare tutti i tuoi messaggi per eliminare ogni traccia, come hai già fatto in precedenza, dopo che Francesco ti diede una bella lezione...
pabloski
13-01-2013, 21:59
Wow 10 pagine di thread :D
Ma comunque il punto è che l'amico voleva imparare a programmare e partendo da Symbian ( onestamente non capisco il perchè ).
Nel mio piccolo ritengo che abbiate ragione un pò tutti. Se da un lato c'è la necessità di creare codice ottimizzato ed estremamente performante ( si, ci sono nicchie in cui è una necessità più che un virtuosismo ), dall'altro c'è il sempre incombente time-to-market.
Personalmente tifo per l'automazione nei processi di ottimizzazione. Purtroppo i tool automatici non sono ancora al livello di un competente programmatore che usa un linguaggio di basso livello, però i miglioramenti sono sotto gli occhi di tutti.
rеpne scasb
13-01-2013, 22:12
Il fatto che tu non abbia visto nulla dipende dalla tua scarsa frequentazione del posto.
Ma è normale, per una che ha una visione così narcisistica e solipsistica.
Assolutamente d'accordo. Il tuo codice, generalmente illeggibile, è da autentici mastri d'arma.
E' la verità che ti fa male, cara Lyane. Ecco qui (http://www.hwupgrade.it/forum/showpost.php?p=9824557&postcount=17) un esempio del tuo smisurato ego:
Il codice e' assolutamente originale, e non copiato da altre fonti.
E non è un fatto isolato. Ma questo lo sai bene.
Comunque sei sempre libera di cancellare tutti i tuoi messaggi per eliminare ogni traccia, come hai già fatto in precedenza, dopo che Francesco ti diede una bella lezione...
Sei la mediocrità fatta persona. Non partecipi ai contenst poichè non hai il coraggio di misurati e ti nascondi dietro inutili chiacchiere. Ti atteggi a conoscitore di immani scempiaggini, recitando la parte di giudice, pubblico ministero e giuria, quando in realtà non sei in grado di tirar giù due righe di codice per dimostrare cosa vali. Di cosa hai paura?
rеpne scasb
13-01-2013, 22:16
dopo che Francesco ti diede una bella lezione...
Chi è questo Francesco?
e gia @pabloski
comunque ho deciso di prendere il libro c++ della minerva italica e stop su questo senno mi confondo
e ho lasciato stare symbian visto che e acqua passata
comunque da poco che son qua e non mi aspettavo un forum competitivo mi piacciono questo forum
hello
cdimauro
13-01-2013, 22:41
Sei la mediocrità fatta persona. Non partecipi ai contenst poichè non hai il coraggio di misurati e ti nascondi dietro inutili chiacchiere. Ti atteggi a conoscitore di immani scempiaggini, recitando la parte di giudice, pubblico ministero e giuria, quando in realtà non sei in grado di tirar giù due righe di codice per dimostrare cosa vali. Di cosa hai paura?
Come ho già detto, se non le vedi tu, non vuol dire che non esistano.
Sei tu che non frequenti abitualmente, e quindi ti sei persa i miei contributi.
Io non ho bisogno di dimostrare niente a una come te: una donna repressa che gode nel sottomettere gli uomini. Finché non trovi qualcuno che ti mette sotto, com'è già capitato, e che ti ha fatto uscire fuori dai gangheri.
Chi è questo Francesco?
Carucci. In arte, fek. Lo dovresti conoscere bene. :D
rеpne scasb
13-01-2013, 23:10
Come ho già detto, se non le vedi tu, non vuol dire che non esistano.
Sei tu che non frequenti abitualmente, e quindi ti sei persa i miei contributi.
Io non ho bisogno di dimostrare niente a una come te: una donna repressa che gode nel sottomettere gli uomini. Finché non trovi qualcuno che ti mette sotto, com'è già capitato, e che ti ha fatto uscire fuori dai gangheri.
Carucci. In arte, fek. Lo dovresti conoscere bene. :D
Ti posso vedere, grassoccio quarantenne con una laurea presa dopo 20 anni d'università. Sarai stato il cocco di mamma e papà.
rеpne scasb
13-01-2013, 23:15
Carucci. In arte, fek. Lo dovresti conoscere bene. :D
Ricordo questo fek come un maleducato.
cdimauro
13-01-2013, 23:32
Ti posso vedere, grassoccio quarantenne con una laurea presa dopo 20 anni d'università. Sarai stato il cocco di mamma e papà.
Eccola lì la "signora" che, non potendo ribattere a quanto scritto finora, adesso rivolge le sue attenzioni alla vita delle persone.
Pensa alla tua, che è stata un fallimento: due matrimoni alle spalle, con gli alimenti da pagare ai tuoi ex, e una figlia ribelle con cui hai un rapporto inesistente o conflittuale, che nella vita non s'interessa a niente, potendo contare sulla rendita a vita avuta dal nonno.
Io ho avuto i miei problemi nel prendermi la laurea dopo tanto tempo, ma tu come moglie e come madre non brilli di certo, e francamente fra le due cose preferisco che mi sia capitata di gran lunga la prima.
Come vedi so essere molto cattivo anch'io, cara Lyane.
Ricordo questo fek come un maleducato.
Almeno lui non si faceva chiudere i thread scomodi da cionci, dove le aveva prese di santa ragione, facendo una figura barbina, e cercando di nascondere il tutto perché poteva ledere la tua preziosa immagine, che da buona narcisista devi proteggere accuratamente.
Peccato che quello non sono riuscito a salvarlo. In compenso cercando con fek e repne scasb vengono fuori tante chicche, che è sempre un piacere rileggere, anche a distanza di tanto tempo.
I tuoi vecchi messaggi li hai cancellati, ma i quote hanno conservato buona parte della roba interessante. :D
pabloski
13-01-2013, 23:52
e gia @pabloski
comunque ho deciso di prendere il libro c++ della minerva italica e stop su questo senno mi confondo
e ho lasciato stare symbian visto che e acqua passata
Non male come idea. Il C++ è tutto sommato la giusta commistione di complessità/difficoltà, tecniche avanzate di programmazione, sufficientemente a basso livello da dare una buona idea di cosa fa la macchina dietro le quinte.
Premesso che tutto ciò non è strettamente necessario per essere un informatico ( alcuni ragionano di algoritmi e nemmeno sanno scrivere del codice ), c'è da dire che ci sono anche altre strade per imparare. Personalmente ho iniziato quando avevo 7 anni col basic, passando poi al pascal e ho scoperto quasi per caso l'esistenza del c. Da lì in poi ho cominciato a capire ed approfondire cosa fa la macchina, ma le basi logiche erano già state gettate con le due precedenti esperienze.
In molti criticano il C/C++ perchè lo ritengono una distrazione dall'obiettivo principale e cioè padroneggiare la logica algoritmica. E' sicuramente un percorso può pesante e duro; può essere inoltre posticipato senza creare troppi traumi.
Realisticamente nemmeno io capisco perchè, ad esempio, le università inizino dal C. Lo trovo estremamente pesante e scoraggiante per studenti che mai hanno scritto una riga di codice in vita loro e non hanno nemmeno chiaro come "parlare" con un calcolatore. Ho visto accoppiare corsi come quello di algoritmi col C++, praticamente uno sforzo immani per i poveri studenti.
Comunque dai una sbirciata a quel libro sul C++, se riesci a seguirlo e a realizzare programmini tuoi, allora puoi almeno concludere che hai gli elementi basilari per ragionare da informatico. Avendo quelli, il linguaggio diventa più che altro un esercizio tecnico e/o di arte della codifica.
Su Symbian avevo espresso dubbi non tanto per il fatto che ormai l'hanno fatto fuori, ma piuttosto perchè l'inizio è bene affrontarlo con la realizzazione di programmi a linea comandi ( shell, prompt o come li si vuole chiamare ). Meno dettagli, meno complicazioni, non necessiti di creare finestre, activity e amenità del genere.
aaah, colpi bassi a tutto tondo :asd:
cdimauro
14-01-2013, 07:45
Se l'è cercata, la "signora". D'altra parte una frustrata per la sua situazione familiare / sociale, che vive soltanto per sentirsi adulata dagli altri (http://www.youtube.com/watch?v=OcgkDnj2IeQ), e non è capace di argomentare, doveva per forza scadere sul piano personale, non avendo altro a cui ricorrere.
E deve ringraziare che cionci chiuse quel thread scomodo, perché vi sareste fatti delle grasse risate leggendo di presunte ricerche di Intel che dimostrerebbero che le donne avrebbero tipo 20 volte la capacità di concentrazione rispetto agli uomini. Roba assurda del genere, ma purtroppo dopo tanti anni non ricordo più i dettagli precisi.
Potete soltanto immaginare cosa successe il quel thread, e perché la "signora" portò cionci a chiuderlo, salvando la sua preziosa immagine. Chi all'epoca partecipò continua ancora a ridere al solo pensiero. :asd:
ciao @pabloski
tu hai iniziato a 7 anni???
Eri un genio o cosa??
Mio fratellino che ha 7 anni fa fatica a fare i compiti di matematica!!
ciao @pabloski
tu hai iniziato a 7 anni???
Eri un genio o cosa??
Mio fratellino che ha 7 anni fa fatica a fare i compiti di matematica!!
In tanti, anche tra i miei colleghi han cominciato in tenera età. :D
Nel mondo dei makers (ne trovo spesso nelle news di Adafruit, per esempio) non sono rari i concorsi per minori di dieci anni, e alcuni di loro tiran fuori cose di tutto rispetto. :)
Contest 19:
cut
Attinenza al topic? Soprattutto da chi ama la programmazione mi aspetterei maggior attenzione al contenuto di ciò che si scrive...
Sei sospeso 3gg. Rendetevi conto che l'OT ha come unico risultato quello di danneggiare l'autore del thread e gli altri che seguono l'argomento principale, i quali saranno invece costretti a leggersi pagine di post a cui non sono assolutamente interessati.
Ti posso vedere, grassoccio quarantenne con una laurea presa dopo 20 anni d'università. Sarai stato il cocco di mamma e papà.
Come ho già detto, se non le vedi tu, non vuol dire che non esistano.
Sei tu che non frequenti abitualmente, e quindi ti sei persa i miei contributi.
Io non ho bisogno di dimostrare niente a una come te: una donna repressa che gode nel sottomettere gli uomini. Finché non trovi qualcuno che ti mette sotto, com'è già capitato, e che ti ha fatto uscire fuori dai gangheri.
Immaginatevi un lettore X che legge "aiuto, basi per iniziare a programmare??" e poi i vostri post: repressione, acidità, sottomissione.
Detta in francese: stica##i, gli fate passare subito la voglia :asd:
Battute a parte, non siete gli ultimi arrivati e sapete bene che qui il rispetto reciproco è fondamentale, attaccarsi personalmente è una delle cose più brutte che si possano vedere su un forum di informatica, a maggior ragione in sezioni come queste dove la collaborazione è alla base di tutto.
A parte il discorso sull'OT fatto a Vincenzo e trasferibile anche a voi.
Siete entrambi sospesi 7gg.
pabloski
14-01-2013, 12:15
ciao @pabloski
tu hai iniziato a 7 anni???
Eri un genio o cosa??
Mio fratellino che ha 7 anni fa fatica a fare i compiti di matematica!!
nah, come ha detto GByte è normale
trovandosi un computer di fronte è naturalissimo, a quell'età, esserne assorbiti
io devo ancora capire in quale ambiente lavorativo vi e' richiesto di contare i cicli di clock del processore piuttosto che finire il lavoro e arrivare sul mercato in quarto del tempo.
cioe' nel mio ambito e' cosi' (:D), ma la stragrande maggioranza di situazioni lavorative vede piccole realta' che devono giungere sul mercato quanto prima, non guadagnare 5 secondi su 50 rispetto ai concorrenti.
nel mio lavoro, lavoro su architetture a microcontrollore, principalmente per lo sviluppo di sistemi di localizzazione realtime a radiofrequenza e
1) spesso i micro hanno una potenza lavorativa ridicola che non basta ad eseguire tutte le operazioni richieste prima del prossimo evento ergo non funziona na cippa se non ottimizzi
2) per misure di distanza il tempo di volo è critico ( 1 ns di ritardo = ~30cm di errore) ergo meno variabilità hai nei tempi di esecuzione del codice migliore è la misura e li si che si contano i cicli di clock di ogni sacrosanta istruzione
:D :D
ciao @pabloski
tu hai iniziato a 7 anni???
Eri un genio o cosa??
Mio fratellino che ha 7 anni fa fatica a fare i compiti di matematica!!
in tanti anni fà hanno iniziato presto ma per necessità, altro che console quando l'unica cosa dove poter giocare era uno spectrum e non un sega XXX o un nintendo YYY si impara per forza (traduzione per i giovincelli: uno spectrum non ha sistema operativo non ha nulla all'accensione se non un bellissimo editor a riga di basic quindi i programmi erano libri da ricopiare per di più con tutte le istruzioni hard coded sui tasti ti assicuro che già poter usare edit su dos per scrivere era già un passo da gigante non indifferente ancora adesso ogni volta che avendo bisogno di un valore assoluto scrivo a-b-s sorrido al pensiero del vecchio (e ancora funzionante) spectrum: caps shitf- symbol shift- G
nel mio lavoro, lavoro su architetture a microcontrollore, principalmente per lo sviluppo di sistemi di localizzazione realtime a radiofrequenza e
1) spesso i micro hanno una potenza lavorativa ridicola che non basta ad eseguire tutte le operazioni richieste prima del prossimo evento ergo non funziona na cippa se non ottimizzi
2) per misure di distanza il tempo di volo è critico ( 1 ns di ritardo = ~30cm di errore) ergo meno variabilità hai nei tempi di esecuzione del codice migliore è la misura e li si che si contano i cicli di clock di ogni sacrosanta istruzione
:D :D
in tanti anni fà hanno iniziato presto ma per necessità, altro che console quando l'unica cosa dove poter giocare era uno spectrum e non un sega XXX o un nintendo YYY si impara per forza
curiosità: cosa vuoi dire con 1 ns di ritardo = ~30cm di errore ?
curiosità: cosa vuoi dire con 1 ns di ritardo = ~30cm di errore ?
1 ns * 3x10^8 m/s (~vel di prop in aria) ;)
tento di spiegarlo facilmente
la maggior parte dei sistemi di localizzazione precisi lavora con il principio del tempo di volo che significa che misuri la distanza misurando il tempo che impiega l'onda elettromagnetica ad arrivare dal punto a al punto b onda che viaggia alla velocità della luce quindi spannometricamente 1 ns di errore nella misura del tempo significa circa 30 cm di errore
appunto, la lavoriamo nello stesso ambito (embedded ad alte prestazioni/compattezza/basso costo :D ) (tra l'altro anch'io ho lavorato su sistemi di radiolocalizzazione ad altissima frequenza, e proprio per avere precisione sufficiente la parte di elaborazione real time la faceva una FPGA, nonostante avessimo a disposizione un OMAP - mi chiedo come facciate a farcela solamente con un micro :D vabbe' non indago oltre :) )
e' un ambito assolutamente di nicchia, almeno in italia.
non solo con un micro, ovviamente non ti posso dare i dettagli (NDA) ma su alcuni sistemi usavamo anche noi una fpga una virtex-6 ma su altri c'era una "quasi comune" radio 2.4 GHz e un micro 8 bit che dire stupido era fargli un complimento ( costo del micro 70 €cent per farti capire altro che arm) :D
cmq vedo che anche da voi pretendono la botte piena e la moglie sbronza, tra prestazioni, dimensioni e costi e consumi aggiungo io XD
eh si, la frase in neretto e' un must. :D Purtroppo/per fortuna era il mio vecchio lavoro (in italia), qui in UK lavoro sul buon vecchio GSM/EDGE. tu hai lavorato in italia su quelle tematiche? non pensavo ci fossero dei competitor italiani... :) che precisioni raggiungevate?
questo purtroppo mi dispiace ma non posso dirtelo comunque abbastanza buona ps comunque il committente non era italiano
... ok :D... ma quindi non e' un prodotto... se fosse un prodotto la precisione sarebbe la prima cosa da divulgare! :)
non finchè il prodotto non è ancora commercializzato :)
@MCviper:
Ho visto che altri ti hanno dato dei """consigli""", e hai deciso di partire col C++.
Nella mia esperienza, per imparare il C++ sono assolutamente un must i due libri dei Deitel:
- "C++ Fondamenti di programmazione"
- "C++ Tecniche avanzate di programmazione"
entrambi venduti in Italia dalla Apogeo. Costicchiano un po' (50 e 40€ circa), però sono libri stra-ottimi, che ti insegnano non solo il C++, ma anche la programmazione a oggetti, spiegando i diagrammi UML etc.
Oltretutto ti insegnano anche algoritmi come quelli di ordinamento, quindi sono oltre che manuali anche dei libri didattici per iniziare da zero. Vedrai che non te ne pentirai se deciderai l'acquisto. ;)
Hieicker
14-01-2013, 17:04
Prendo nota anch'io grazie :). Attualmente sto leggendo un manuale homemade per il C, e tutto sommato non lo trovo male. Ogni tanto mi tocca googleare un po o chiedere qui, però dai ne vengo fuori. Se a qualcuno interessasse potete trovarlo qui. http://blacklight.gotdns.org/#tutorials . Visto che ci siamo (mi scuso con il piccolo off topic) qualcuno conosce già il sito o ci è mai stato?
Grazie :) !
zanardi84
14-01-2013, 17:50
ciao ragazzi e da tempo che volevo cercarmi qualche guida o un libro che mi aiutasse ma non ho trovato nulla
mi interessa programmare per il so symbian applicazioni con estensione jar/sis/sisx
quindo non so da dove partire o di quale linguaggio sono creati
vi chiedo di consigliarmi qualche sito o un libro che vi ha aiutato
grazie
MCviper
Symbian non so che futuro possa avere, ma ritengo che prima di occupartene sia utile imparare o il c/c++ o il java.
Quasi quasi ti direi java perchè ci sarebbe uno sbocco chiamato Android lì dietro l'angolo, in più puoi imparare a programmare a oggetti che ti sarà molto utile.
Una volta appreso questo approccio o paradigma che dir si voglia potrai passare al C++ e concentrarti solo sulla sintassi e sui puntatori che sono il bello del linguaggio (anche java li ha, ma sono ben mascherati e non è detto che tu li debba usare).
Ti consiglio due libri:
1) Pighizzini Ferrari, Dai Fondamenti agli oggetti. E' un libro molto "scolastico" dove l'approccio avviene per gradi partendo da zero. Ti insegnerà prima ad usare gli oggetti sfruttando li materiale contenuto nel cd e poi ti insegnerà a progettarli.
2) Cay Horstmann, Concetti di informatica e fondamenti di Java (aggiornato all'ultima versione, o la 7 o addirittura alla 8 se è uscita un'edizione successiva a quella che ho), libro MOLTO ricco ma che ti vincola un po' a seguire il suo filo perchè gli esempi partono sempre da un problema esposto nei primi capitoli. Direi che per certi versi è complementare al primo libro.
zanardi84
14-01-2013, 17:53
@MCviper:
Ho visto che altri ti hanno dato dei """consigli""", e hai deciso di partire col C++.
Nella mia esperienza, per imparare il C++ sono assolutamente un must i due libri dei Deitel:
- "C++ Fondamenti di programmazione"
- "C++ Tecniche avanzate di programmazione"
entrambi venduti in Italia dalla Apogeo. Costicchiano un po' (50 e 40€ circa), però sono libri stra-ottimi, che ti insegnano non solo il C++, ma anche la programmazione a oggetti, spiegando i diagrammi UML etc.
Oltretutto ti insegnano anche algoritmi come quelli di ordinamento, quindi sono oltre che manuali anche dei libri didattici per iniziare da zero. Vedrai che non te ne pentirai se deciderai l'acquisto. ;)
Belli anche loro ed esistono pure per il Java.
Per il C++ c'è anche il Malik.
1 ns * 3x10^8 m/s (~vel di prop in aria) ;)
la mia domanda era volta a comprendere di che lavoro si trattasse per parlare di misure di quel tipo
ciao
C++ è di diversi ordini di grandezza più complesso di C, onestamente non farei mai iniziare nessuno con un linguaggio del genere (intendo la parte strettamente C++), linguaggio e libreria standard fortemente incoerenti e incentrate non su un paradigma Object Oriented ma pesantemente sui template.
E te lo dice uno che ci programma tutti i giorni.
Molto meglio partire con Java.
la mia domanda era volta a comprendere di che lavoro si trattasse per parlare di misure di quel tipo
ciao
l'ho spiegato meglio nel post #208 se non è chiaro chiedi pure
C++ è di diversi ordini di grandezza più complesso di C, onestamente non farei mai iniziare nessuno con un linguaggio del genere (intendo la parte strettamente C++), linguaggio e libreria standard fortemente incoerenti e incentrate non su un paradigma Object Oriented ma pesantemente sui template.
E te lo dice uno che ci programma tutti i giorni.
Molto meglio partire con Java.
Quoto. O con Python, Lua, ma pure C#...
Sta fissa di partire col linguaggio "migliore" come se ci si dovesse vivere per sempre è del tutto sbagliata.
C++ è un linguaggio avanzato e come tale dovrebbe essere imparato quando uno già riesce a non perdersi in roba banale, altrimenti non se ne esce.
E pure io uso C++ tutti i giorni, perchè credo sia il linguaggio in cui sono più produttivo... dopo 5 anni che lo uso però, e ~20.000 righe di codice scritto in quel periodo pronte all'uso :asd:
l'ho spiegato meglio nel post #208 se non è chiaro chiedi pure
sei stao chiarissimo, nel mio lavoro sono fermo ai ms
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.