PDA

View Full Version : [Guida Windows] Scrivere e Compilare in C/C++


(r3((h3r
03-07-2013, 01:58
Salve a tutti utenti del forum è non, ho scritto questa piccola guida affinché possiate usufruire di tutte le info in un'unica ricerca.

Scaricate e installate:
- Notepad++ (http://notepad-plus-plus.org/) editor di testo per scrivere i vostri programmi
- MinGW (http://sourceforge.net/projects/mingw/files/MinGW/) compilatore in ambiente Windows del famoso GCC per Unix

Prima di iniziare a programmare:
Start > (tasto destro) Computer > Proprietà > Impostazioni di sistema avanzate > Avanzate > Variabili d'ambiente > Variabili di sistema (scendete fino a "Path" e cliccateci sopra evidenziandolo) > Modifica > Valore variabile (senza cancellare quello che c'è scritto) andate sino in fondo e aggiungete ;C:\MinGw\bin > date OK

NOTA I: ;C:\MinGw\bin sta per il percorso dove dovreste aver salvato la cartella di MinGw durante l'istallazione precedente, se non è lì, il percorso va cambiato con quello giusto).



Iniziamo:

[se C] Una volta scritto il vostro programma salvatelo sul desktop con estensione (.c)
[C++] Una volta scritto il vostro programma salvatelo sul desktop con estensione (.cpp)


Start > digitate cmd (oppure Tutti i programmi > Accessori > Prompt dei comandi) > vi si è aperta la schermata nera del Prompt, scrivete: cd desktop oppure cd c:\users\NomeUtente\desktop ora dovreste trovarvi in riga: C:\Users\NomeUtente\Desktop> (il che sta ad indicare che siete sul desktop) quindi:
[se C] gcc nomefile.c -o nomefile.exe
[C++] g++ nomefile.cpp -o nomefile.exe
fatto questo vi accorgerete che sarà spuntato sul vostro desktop un file eseguibile (.exe) dello stesso nome del vostro programma, vuol dire che lo avrete appena compilato.

NOTA II: Nel punto 1 vi ho detto di salvare il file sul desktop, ma se lo avete salvato da un'altra parte allora il percorso che leggete qui va cambiato con quello corretto).

NOTA III: Se il nome del file viene salvato con uno spazio in mezzo (es. Prova 1.c, Hello World.c), cosa che capita praticamente sempre, il compilatore non compilerà il vostro programma perché non è in grado di riconoscere il nome del file in modo corretto e quindi non trovandolo vi darà errore. Per ovviare a questo problema basta aggiungete le "virgolette" come da esempio sotto:
[se C] gcc "nome file.c" -o "nome file.exe" oppure gcc "nome file".c -o "nome file".exe
[C++] g++ "nome file.cpp" -o "nome file.exe" oppure g++ "nome file".c -o "nome file".exe


Ora, essendo sempre sul prompt con riga C:\Users\NomeUtente\Desktop> digitate il nome del file e date INVIO.
Magicamente il risultato del vostro programma (se scritto correttamente il codice) vi apparirà sempre lì sullo schermo dove ora i vostri occhi stanno guardando speranzosi.




Spero di esservi stato d'aiuto :)

lorenzo001
03-07-2013, 10:23
come ti ho già consigliato nell'altro topic, nel tuo caso è meglio se leggi qualche guida piuttosto che scriverla...

Magicamente ... :D

(r3((h3r
03-07-2013, 11:16
come ti ho già consigliato nell'altro topic, nel tuo caso è meglio se leggi qualche guida piuttosto che scriverla...

Ma infatti ho fatto delle ricerche in rete, anche in lingua inglese, mi sono documentato bene per capire quello che dovevo fare passo passo e ho raggruppato tutto in questo post, per dare la possibilità ad altri di non dover fare troppi giri per un'argomento che magari è semplice. Non penso di aver fatto una cosa sbagliata, gli step sono funzionanti perché appena testati, voglio solo aiutare. :)

pabloski
03-07-2013, 11:51
In effetti hai ragione. Il problema è la fissa che c'hanno le software house nel voler rendere tutto "magico" e "semplice".

Poi ci si ritrova a dover compilare un programma in C e non si capisce perchè il compilatore non funge. Et voilà, si scopre che la shell ( anche sotto windows ) possiede una variabile chiamata PATH, dove vanno messi i percorsi ai file eseguibili che si vuole eseguire scrivendone solo il nome e non il percorso completo.

Da lì è solo questione di scrivere gcc o g++ ecc...

L'alternativa ( ma io sono sempre quello che sconsiglia l'uso di IDE ai novizi, e sono stato cazziato spesso sul forum, per questo motivo ) è di usare Codeblocks. In quel caso è l'IDE che si occupa di sapere dove sta il compilatore e come chiamarlo. Eclipse ovviamente pure lo fa, ma configurare eclipse è più complesso di scrivere il programma da compilare in C.

(r3((h3r
03-07-2013, 13:24
come ho detto, apprezzo l'iniziativa, in quanto si vede che evidentemente non hai mai avuto a che fare con questo tipo di problemi. tuttavia, una guida puo' diventare interessante quando risolve dei problemi... quelli che hai incontrato tu non sono effettivamente problemi, ma semplicemente sono conseguenze del fatto che non conosci come funziona windows in realta' (non e' un accusa bada bene). Per cui il mio consiglio rimane sempre quello, studiare il funzionamento della shell al di la' del fatto che programmerai o meno.

Ok grazie per il consiglio! Mi metto subito a leggere qualcosa al riguardo.

tomminno
04-07-2013, 10:59
L'alternativa ( ma io sono sempre quello che sconsiglia l'uso di IDE ai novizi, e sono stato cazziato spesso sul forum, per questo motivo ) è di usare Codeblocks. In quel caso è l'IDE che si occupa di sapere dove sta il compilatore e come chiamarlo. Eclipse ovviamente pure lo fa, ma configurare eclipse è più complesso di scrivere il programma da compilare in C.

Nessuno si sognerebbe di consigliare ad un novizio di Java di compilare a linea di comando, altrettanto per C#.
Negli altri linguaggi l'utilizzo della linea di comando è qualcosa di avanzato e più legato all'automazione di task.

Perchè per C++ dovrebbe essere diverso??? :confused:

pabloski
04-07-2013, 11:49
Nessuno si sognerebbe di consigliare ad un novizio di Java di compilare a linea di comando, altrettanto per C#.
Negli altri linguaggi l'utilizzo della linea di comando è qualcosa di avanzato e più legato all'automazione di task.

Perchè per C++ dovrebbe essere diverso??? :confused:

Non necessariamente il C++. Però bisogna sporcarsi le mani, prima o poi.

(r3((h3r si è impuntato sulla shell di windows. Ok le icone, la gui, il mouse, ecc... Tuttavia, prima o poi, capiterà di doversi sporcare le mani.

Sul perchè, in genere, certe cose vengano sempre consigliate quando si parla di C o C++, credo dipenda dal fatto che sono percepiti come linguaggi più vicini al "ferro". E' ovviamente solo una questione di percezione.

(r3((h3r
04-07-2013, 12:02
Scusate ragazzi ma non ho capito...
Sto sbagliando nell'imparare a maneggiare la Shell per compilare? Credevo che fosse una cosa positiva "sporcarsi un po' le mani" con queste cose no? Piuttosto che scaricare un IDE che ti fa tutto lui...

pabloski
04-07-2013, 13:26
Scusate ragazzi ma non ho capito...
Sto sbagliando nell'imparare a maneggiare la Shell per compilare? Credevo che fosse una cosa positiva "sporcarsi un po' le mani" con queste cose no? Piuttosto che scaricare un IDE che ti fa tutto lui...

Secondo me è una cosa positiva. Il discorso si pone per chi fa il mestiere di programmatore. Ovviamente non puoi sprecare tempo per scrivere con un normale editor, compilare a mano, rifattorizzare a mano, quando c'hai da scrivere migliaia di righe di codice e il padrone ti picchia in testa con le sue deadline.

Però, per chi sta imparando, è sempre meglio sporcarsi le mani. Alla fin fine è tutta una questione di conoscenza. Più ne hai, meglio è.

(r3((h3r
04-07-2013, 13:33
Secondo me è una cosa positiva. Il discorso si pone per chi fa il mestiere di programmatore. Ovviamente non puoi sprecare tempo per scrivere con un normale editor, compilare a mano, rifattorizzare a mano, quando c'hai da scrivere migliaia di righe di codice e il padrone ti picchia in testa con le sue deadline.

Però, per chi sta imparando, è sempre meglio sporcarsi le mani. Alla fin fine è tutta una questione di conoscenza. Più ne hai, meglio è.

Ah ok, in questo sono perfettamente d'accordo, infatti io sto imparando, sono alle prime armi e penso che sia bello sporcarsi le mani e imparare di tutto e di più :D

Tommo
04-07-2013, 17:05
devi sapere cosa accade sotto quando clicchi su build dentro il tuo ide. altrimenti se hai qualche problema cosa fai, cerchi su google?

Ebbene mi hai scoperto, la gente paga me per lavorare ma in realtà il mio lavoro lo fa google :asd:

Comunque tanto per rientrare nel solito discorso, per come sono fatto io la cosa migliore è partire dal generale per andare al particolare, e quindi iniziare con meno "complicazioni" possibili e concentrarsi su linguaggi e algoritmi.
Come si compila, la shell etc li vedo più come "mali necessari" da provare ad evitare il più possibile...
quindi va da sè che penso che sia meglio partire con un IDE, studiarsi i concetti di alto livello (quindi sarebbe anche meglio evitare C++) e poi man mano "scendere" verso concetti avanzati e robba h4xx0r.

Partire dal basso mette un pò a rischio di concentrarsi troppo sul "come" rispetto al "cosa" e scrivere codice pessimo e non padroneggiare gli algoritmi nemmeno quando poi passi ad un'IDE.
E in generale di metterci il triplo a fare tutto :asd:

Ma comunque è questione di gusti, ed è ovvio che alla fine uno debba approfondire entrambi i lati :D

(r3((h3r
04-07-2013, 23:12
Aggiunta una nota molto importante, andate a dare un'occhiata ;)

(r3((h3r
05-07-2013, 00:41
...è sbagliata.

DEVI STUDIARE INVECE DI FARE LE GUIDE.

Scusa ma in cosa è sbagliata? Dici sempre le cose a mozzichi pure tu, scrivi in cosa è sbagliata così la correggo, a me risulta giusta :P

Tommo
05-07-2013, 01:22
Scusa ma in cosa è sbagliata? Dici sempre le cose a mozzichi pure tu, scrivi in cosa è sbagliata così la correggo, a me risulta giusta :P

Non è il "compilatore che non compila", è solo che legge male il nome.

gcc nome con spazi.cpp ...

ti dà errore perchè non trova il file "nome", che ovviamente non esiste... il 99% dei programmi da riga di comando usano gli spazi per delimitare i parametri.
Invece di rinominare il file, prova con le virgolette, tipo

gcc "nome con spazi.cpp" ...

;)

Comunque quoto Antonio23, questa non è C++, è schiacciare tasti a caso dentro la cmdline di Windows, e la guida che hai scritto suona un pò così,
Come Leggere e Suonare Mozart:
Prima di iniziare, aprire lo spartito a pagina 23 girando le pagine finchè non è quella giusta.
1. aprire il piano (attenzione a non lasciare le ditate prendendo il coperchio da sotto)
2. togliere la copertura NOTA: suggerisco di non appoggiarla sul piano stesso usando un mobile vicino
3. premere dei tasti. Ora dovreste sentire dei suoni!
:asd:

Suggerisco di nuovo un percorso un tantino meno pratico :read:

vendettaaaaa
05-07-2013, 08:52
La tua intenzione, con questa guida, era di scriversi una "note to self", un promemoria che aiutasse a ricordarsi come si fa questa cosa che hai appena imparato. Un po' come fare un riassunto della lezione o riscrivere gli appunti della lezione in bella: scrivere aiuta a memorizzare.
Però, diamine, 2 giorni fa non sapevi neanche dell'esistenza della console di Windows, quindi renditi conto che non sei proprio nella posizione di scrivere guide utili. Scrivila pure, ma tienila per te e non pubblicarla...a te servirà lo stesso scopo.

VeeJ
05-07-2013, 09:40
NOTA III: Se il nome del file viene salvato con uno spazio in mezzo (es. Prova 1.c, Hello World.c), cosa che capita praticamente sempre [...]
Ah si?? :D

(r3((h3r
05-07-2013, 09:44
Non è il "compilatore che non compila", è solo che legge male il nome.

gcc nome con spazi.cpp ...

ti dà errore perchè non trova il file "nome", che ovviamente non esiste... il 99% dei programmi da riga di comando usano gli spazi per delimitare i parametri.
Invece di rinominare il file, prova con le virgolette, tipo

gcc "nome con spazi.cpp" ...

;)

Comunque quoto Antonio23, questa non è C++, è schiacciare tasti a caso dentro la cmdline di Windows, e la guida che hai scritto suona un pò così,

:asd:

Suggerisco di nuovo un percorso un tantino meno pratico :read:


Innanzitutto grazie per la info, poi ci tengo a dire a mia difesa che i giovani programmatori che per la prima volta si approcciano a questi problemi come me e non sanno come risolverli, si mettono a cercare nella rete, nella speranza di trovare info utili tra milioni e milioni di pagine, io gli ho semplificato il lavoro e non credo sia cosa da poco. Poi è vero che devo studiare sennò poi rischio di dare false info, però è pur vero che una guida così non esiste, per voi che le sapete queste cose, sembra una nioso ma magari altri la trovano utile :D

pabloski
05-07-2013, 10:45
Innanzitutto grazie per la info, poi ci tengo a dire a mia difesa che i giovani programmatori che per la prima volta si approcciano a questi problemi come me e non sanno come risolverli, si mettono a cercare nella rete, nella speranza di trovare info utili tra milioni e milioni di pagine, io gli ho semplificato il lavoro e non credo sia cosa da poco. Poi è vero che devo studiare sennò poi rischio di dare false info, però è pur vero che una guida così non esiste, per voi che le sapete queste cose, sembra una nioso ma magari altri la trovano utile :D

Il problema è che per 30 anni si è puntato ad instupidire la massa di utilizzatori di pc. Si sono create metafore assurde per astrarre il funzionamento dei computer. Icone, sfondi, cazzatine varie, tutto per cercare di rendere il pc una sorta di tostapane tuttofare.

Molti diranno che è così che dev'essere, che alla casalinga di Voghera interessa solo andare su facebook, ecc...

Però non posso non sottolineare che, così facendo, la massa perde il controllo sull'operato dei computer. Tra 10 anni ci ritroveremo ad avere computer intelligenti e padroni stupidi, ovvero persone che verranno manipolate dalle multinazionali IT tramite i computer.

Per fortuna sembra che il "punta e clicca" si sia spostato verso il settore mobile e che il pc, a causa di una crisi di vendite, possa ritornare ad essere lo strumento professionale che era un tempo. Io incrocio le dita!

I problemi che stai affrontando sono proprio dovuti a questa filosofia. Poi cominci a programmare e ti accorgi che, dietro le icone, si nasconde un mondo 10 volte più grande, fatto di shell, comandi e variabili d'ambiente.

(r3((h3r
08-07-2013, 16:41
Il problema è che per 30 anni si è puntato ad instupidire la massa di utilizzatori di pc. Si sono create metafore assurde per astrarre il funzionamento dei computer. Icone, sfondi, cazzatine varie, tutto per cercare di rendere il pc una sorta di tostapane tuttofare.

Molti diranno che è così che dev'essere, che alla casalinga di Voghera interessa solo andare su facebook, ecc...

Però non posso non sottolineare che, così facendo, la massa perde il controllo sull'operato dei computer. Tra 10 anni ci ritroveremo ad avere computer intelligenti e padroni stupidi, ovvero persone che verranno manipolate dalle multinazionali IT tramite i computer.

Per fortuna sembra che il "punta e clicca" si sia spostato verso il settore mobile e che il pc, a causa di una crisi di vendite, possa ritornare ad essere lo strumento professionale che era un tempo. Io incrocio le dita!

I problemi che stai affrontando sono proprio dovuti a questa filosofia. Poi cominci a programmare e ti accorgi che, dietro le icone, si nasconde un mondo 10 volte più grande, fatto di shell, comandi e variabili d'ambiente.


Amen fratello! :D
Sono in tutto e per tutto d'accordo con te, dietro alle semplici icone, il cliccare, il navigare, c'è tutto un mondo più ampio e affascinante che va scoperto e studiato, io stesso mi sono dovuto confrontare con la shell di windows 1 settimana fa, però è stato bello perché se avessi usato un IDE qualsiasi forse non avrei capito la vera essenza delle cose, ora invece ho una voglia di scoprire e sapere di tutto e di più :)

WarDuck
08-07-2013, 22:38
Il problema è che per 30 anni si è puntato ad instupidire la massa di utilizzatori di pc. Si sono create metafore assurde per astrarre il funzionamento dei computer. Icone, sfondi, cazzatine varie, tutto per cercare di rendere il pc una sorta di tostapane tuttofare.

Molti diranno che è così che dev'essere, che alla casalinga di Voghera interessa solo andare su facebook, ecc...

Però non posso non sottolineare che, così facendo, la massa perde il controllo sull'operato dei computer. Tra 10 anni ci ritroveremo ad avere computer intelligenti e padroni stupidi, ovvero persone che verranno manipolate dalle multinazionali IT tramite i computer.

Per fortuna sembra che il "punta e clicca" si sia spostato verso il settore mobile e che il pc, a causa di una crisi di vendite, possa ritornare ad essere lo strumento professionale che era un tempo. Io incrocio le dita!

I problemi che stai affrontando sono proprio dovuti a questa filosofia. Poi cominci a programmare e ti accorgi che, dietro le icone, si nasconde un mondo 10 volte più grande, fatto di shell, comandi e variabili d'ambiente.

Non serve aspettare 10 anni... il mondo è talmente pieno di gente stupida che non c'è bisogno di ricorrere all'informatica per giustificarli.

(r3((h3r
11-07-2013, 17:43
Non serve aspettare 10 anni... il mondo è talmente pieno di gente stupida che non c'è bisogno di ricorrere all'informatica per giustificarli.

buahahahah :D già!
Eppure è così bello studiare, apprendere, sapere, conoscere, scoprire e chi più ne ha più ne metta, almeno io la penso così, mi sono informato su una cosa che non sapevo, l'ho letta, l'ho sperimentata, l'ho capita e ci ho pure scritto una piccolissima guida sopra proprio perché non mi sono arreso davanti alla prima difficoltà :)

cdimauro
12-07-2013, 09:07
I giovani programmatori non hanno bisogno di complicarsi la vita, come hai fatto tu, per iniziare a scrivere pezzi di codice.

Se vuoi iniziare con C/C++, cosa che comunque sconsiglio a chiunque, scaricati Visual Studio C++ Express, che è gratuito e ti permette di scrivere fin da subito programmi senza configurare path, usare shell, ecc., che è roba più avanzata o che è indispensabile per chi è rimasto fermo ai tempi della clava informatica.

Anche perché hai scritto una guida per WINDOWS. E su Windows non usare Visual Studio, che è bello lì a disposizione preconfezionato e che ti fa pure il caffé, è una scelta che "grida vendetta al cospetto di dio"...

Ovviamente se hai esigenze particolari (es: sviluppo per dispositivi embedded) per i quali ti servono altri strumenti, il discorso cambia. Ma non mi pare questo il caso.

(r3((h3r
14-07-2013, 18:30
I giovani programmatori non hanno bisogno di complicarsi la vita, come hai fatto tu, per iniziare a scrivere pezzi di codice.

Se vuoi iniziare con C/C++, cosa che comunque sconsiglio a chiunque, scaricati Visual Studio C++ Express, che è gratuito e ti permette di scrivere fin da subito programmi senza configurare path, usare shell, ecc., che è roba più avanzata o che è indispensabile per chi è rimasto fermo ai tempi della clava informatica.



E con che linguaggio di programmazione dovrei iniziare secondo te, e perché?
Quale versione dovrei scaricare? http://www.microsoft.com/visualstudio/ita/products/visual-studio-express-products
Ma compila ed esegue in output il risultato anche?

vendettaaaaa
14-07-2013, 18:55
E con che linguaggio di programmazione dovrei iniziare secondo te, e perché?
Quale versione dovrei scaricare? http://www.microsoft.com/visualstudio/ita/products/visual-studio-express-products
Ma compila ed esegue in output il risultato anche?

Express for Desktop. Perchè è quella classica. La Express for Windows 8 è più incentrata allo sviluppo di app Windows 8 (quelle da tablet), e tu stai solo imparando, lascia perdere.
Ovviamente compila, esegue l'output, analizza il codice, ci fai TUTTO con Visual Studio...è uno dei migliori IDE che ci sia (per me il top del top).

cdimauro
15-07-2013, 08:40
E con che linguaggio di programmazione dovrei iniziare secondo te, e perché?
Leggi la mia firma. Il perché lo troverai nell'introduzione del libro che consiglio, che è sempre in firma.

Per il resto ti ha già risposto vendettaaaaa, col quale sono assolutamente d'accordo.

Tra parentesi, in questi giorni sto sperimentando i Python Tools for Visual Studio; sono in beta, ma... fenomenali per un pythonista. A dimostrazione anche della flessibilità di Visual Studio, che è un IDE spettacolare.

(r3((h3r
15-07-2013, 13:23
Express for Desktop. Perchè è quella classica. La Express for Windows 8 è più incentrata allo sviluppo di app Windows 8 (quelle da tablet), e tu stai solo imparando, lascia perdere.
Ovviamente compila, esegue l'output, analizza il codice, ci fai TUTTO con Visual Studio...è uno dei migliori IDE che ci sia (per me il top del top).

quindi questa http://www.microsoft.com/visualstudio/ita/downloads#d-express-windows-desktop e quella per il web a che servirebbe?

(r3((h3r
15-07-2013, 13:28
Leggi la mia firma. Il perché lo troverai nell'introduzione del libro che consiglio, che è sempre in firma.

Per il resto ti ha già risposto vendettaaaaa, col quale sono assolutamente d'accordo.

Tra parentesi, in questi giorni sto sperimentando i Python Tools for Visual Studio; sono in beta, ma... fenomenali per un pythonista. A dimostrazione anche della flessibilità di Visual Studio, che è un IDE spettacolare.

Sicuro? Quindi per te sarebbe tempo perso imparare C/C++? Oramai mi ero convinto che fossero i linguaggi migliori da cui iniziare a imparare le basi, però mi piace anche sentire come la pensa altra gente :)

!fazz
15-07-2013, 13:44
Sicuro? Quindi per te sarebbe tempo perso imparare C/C++? Oramai mi ero convinto che fossero i linguaggi migliori da cui iniziare a imparare le basi, però mi piace anche sentire come la pensa altra gente :)

non esiste linguaggio migliore o peggiore, esistono linguaggi che ti permettono di risolvere in maniera migliore / più semplice il tuo specifico problema

es. io lavoro tantissimo con il c / c++ che per il mio lavoro sono i linguaggi migliori ma non è detto che siano i migliori per altri ambiti (aka se devo scrivere un applicazone per windows dal c++ ci stò lontano come un appestato)

e per iniziare sconsiglio l'approccio da shell (come tanti altri) mille mila complicazioni inutili che per una persona inesperta danno solo problemi che altro (aka non diventi un buon programmatore solo perchè hai imparato ad usare vim )

vendettaaaaa
15-07-2013, 13:45
Sicuro? Quindi per te sarebbe tempo perso imparare C/C++? Oramai mi ero convinto che fossero i linguaggi migliori da cui iniziare a imparare le basi, però mi piace anche sentire come la pensa altra gente :)
Imparando Python, e altri linguaggi di alto livello (alto livello significa molto astratti, vicini al nostro modo di pensare e quindi lontani dal modo di comunicare dei computer: non ti devi preoccupare di come funziona la memoria, ad esempio), impari a programmare in senso "puro": ti preoccupi solo di esprimere le tue idee in codice, usando un linguaggio molto semplice e pulito, ma cmq potente (ti permette di compiere operazioni complesse in pochi passi).
Imparando C/C++, devi necessariamente sapere anche come vengono rappresentate le informazioni nella memoria del computer e come esse vengano processate (sono linguaggi di livello meno alto, cioè meno astratti: più vicini al linguaggio dei computer e di conseguenza meno affini al nostro modo di pensare).
Un esempio semplice su tutti: hai un vettore, v, fatto di N interi. Per stamparli in C/C++ scrivi:
for (int i = 0; i < N; ++i)
printf("%d", v[i]);
in Python...non lo so, perchè non l'ho studiato :asd:, ma sarà qualcosa tipo:
for all x in v
print x
Come vedi, il C/C++ è più oscuro: devi creare una variabile aggiuntiva (i), stabilire i limiti entro cui essa può spaziare, come modificarla alla fine di ogni passaggio (incrementandola di 1, con ++i), stampare un %d (???) eccetera.
In Python è molto più semplice perchè il linguaggio è più astratto rispetto al funzionamento della macchina, proprio per venire incontro al nostro linguaggio naturale.

airon
15-07-2013, 13:45
Io fossi in te inizierei come dice cdimauro con il python. Ottimo linguaggio, ci fai tutto, lo puoi usare dappertutto, in qualsiasi progetto: GUI, console, web.

(r3((h3r
15-07-2013, 15:50
Capito!
Grazie a tutti per i chiarimenti, ma quale tra questi linguaggi è ottimo per lavorare, per essere preso da qualche azienda? Cioè... quali sono i linguaggi per cui puoi trovare più facilmente lavoro oggi come oggi?

!fazz
15-07-2013, 15:56
Capito!
Grazie a tutti per i chiarimenti, ma quale tra questi linguaggi è ottimo per lavorare, per essere preso da qualche azienda? Cioè... quali sono i linguaggi per cui puoi trovare più facilmente lavoro oggi come oggi?

come sempre tutto dipende da cosa vuoi fare nella vita

(r3((h3r
15-07-2013, 15:58
il programmatore :D

cdimauro
15-07-2013, 16:11
Hai le idee un po' confuse. Intanto iniziare a programmare, che è meglio. ;)
quindi questa http://www.microsoft.com/visualstudio/ita/downloads#d-express-windows-desktop e quella per il web a che servirebbe?
A sviluppare applicazioni web. Al momento usa la versione normale.
Sicuro? Quindi per te sarebbe tempo perso imparare C/C++? Oramai mi ero convinto che fossero i linguaggi migliori da cui iniziare a imparare le basi, però mi piace anche sentire come la pensa altra gente :)
Come ti è stato detto (condivido tutto ciò che è stato scritto dagli altri), non esiste un linguaggio migliore per tutto.

A mio modesto avviso, per chi inizia a programmare non c'è niente di meglio di Python, perché è un linguaggio di alto livello, che ti permette di astrarre senza badare a dettagli di basso livello, in modo da concentrarti sulla risoluzione del problema.
Imparando Python, e altri linguaggi di alto livello (alto livello significa molto astratti, vicini al nostro modo di pensare e quindi lontani dal modo di comunicare dei computer: non ti devi preoccupare di come funziona la memoria, ad esempio), impari a programmare in senso "puro": ti preoccupi solo di esprimere le tue idee in codice, usando un linguaggio molto semplice e pulito, ma cmq potente (ti permette di compiere operazioni complesse in pochi passi).
Imparando C/C++, devi necessariamente sapere anche come vengono rappresentate le informazioni nella memoria del computer e come esse vengano processate (sono linguaggi di livello meno alto, cioè meno astratti: più vicini al linguaggio dei computer e di conseguenza meno affini al nostro modo di pensare).
Un esempio semplice su tutti: hai un vettore, v, fatto di N interi. Per stamparli in C/C++ scrivi:
for (int i = 0; i < N; ++i)
printf("%d", v[i]);
in Python...non lo so, perchè non l'ho studiato :asd:, ma sarà qualcosa tipo:
for all x in v
print x
Come vedi, il C/C++ è più oscuro: devi creare una variabile aggiuntiva (i), stabilire i limiti entro cui essa può spaziare, come modificarla alla fine di ogni passaggio (incrementandola di 1, con ++i), stampare un %d (???) eccetera.
In Python è molto più semplice perchè il linguaggio è più astratto rispetto al funzionamento della macchina, proprio per venire incontro al nostro linguaggio naturale.
Esatto.
for Element in v:
print Element
:)

!fazz
15-07-2013, 16:16
il programmatore :D

programmatore di cosa?
programmatore applicazioni desktop windows, linux osz ? programmatore web? programmatore mobile (windows phone BB android, ios) programmatore idi sistemi embedded? elettronica digitale? sistemi a microcontrollore?

programmatore vuold dire tutto e niente, c'è chi lavora sui supercomputer e chi sulla lavatrice ma sono entrambi programmatori

WarDuck
15-07-2013, 16:41
Premesso che condivido tutto quanto è stato scritto, per dovere di cronaca bisogna dire che in C++11 è stato introdotto finalmente il for..each loop (e la keyword auto che inferisce il tipo a tempo di compilazione).



int vettore[] = {1, 2, 3, 4};

for (auto elem : vettore)
{
std::cout << elem << std::endl;
}

(r3((h3r
15-07-2013, 16:48
programmatore di cosa?
programmatore applicazioni desktop windows, linux osz ? programmatore web? programmatore mobile (windows phone BB android, ios) programmatore idi sistemi embedded? elettronica digitale? sistemi a microcontrollore?

programmatore vuold dire tutto e niente, c'è chi lavora sui supercomputer e chi sulla lavatrice ma sono entrambi programmatori

Sinceramente non saprei bene su che tipo di settore buttarmi, certo non vorrei diventare un programmatore per creare stupidi giochi per cellulari o applicazioni del cavolo, ma fare qualcosina di un po' più seria se vogliamo dire così :)

!fazz
15-07-2013, 16:53
Sinceramente non saprei bene su che tipo di settore buttarmi, certo non vorrei diventare un programmatore per creare stupidi giochi per cellulari o applicazioni del cavolo, ma fare qualcosina di un po' più seria se vogliamo dire così :)

allora è inutile che ti specializzi in un linguaggio, comincia dalle basi un linguaggio vale l'altro nella tua posizione

nico159
15-07-2013, 17:42
Il problema secondo me, non è "Python vs C++", o "X vs Y"

"Imparare le regole degli scacchi è facile, possono bastare anche soli 5 minuti per impararle. E' diventare un campione che ci vuole una vita"

E' esattamente così con l'informatica: si impara un linguaggio come Python anche in un paio di settimane -- è tutto il resto che richiede tempo, esperienza e cervello

http://mitpress.mit.edu/sicp/full-text/book/book.html

Completamente gratuito, è uno di quei libri che non ti insegna un linguaggio, ma a pensare

Di certo è uno studio più difficile che "Per creare una classe scrivi..."
La affronterai il problema alla radice: come elimino la complessità? La soluzione sarà ciò che si può chiamare programmazione ad oggetti, creata da zero da te :)

Come sempre, a te la scelta

Più si prosegue questa discussione, e più sarai sommerso da scelte da seguire
Tanta gente che ti dirà "Fai questo", "Impara prima un linguaggio poi iil resto", "Impara prima il resto, poi un linguaggio", "Datti all'ippica" -- e come in informatica starà a te decidere come affrontare il problema :cool:

Onestamente non so neanche se sto facendo bene a darti questo consiglio -- forse questo è un consiglio al "me del futuro", avrei voluto ricevere questo consiglio, così da non perdere, tanto tempo

Non so neanche se quel libro sia comprensibile senza alcuna esperienza precedente, io credo di sì

Posso assicurarti però, che quello che imparerai è spendibile con un qualsiasi linguaggio che sia Python o C++11

programmatore di cosa?
programmatore applicazioni desktop windows, linux osz ? programmatore web? programmatore mobile (windows phone BB android, ios) programmatore idi sistemi embedded? elettronica digitale? sistemi a microcontrollore?
Non è qualcosa al quale può risponderti ora, io penso

Altro consiglio che ti posso dare è leggerti questo messaggio di van9:
http://www.hwupgrade.it/forum/showpost.php?p=39056427&postcount=23

vendettaaaaa
15-07-2013, 18:33
Premesso che condivido tutto quanto è stato scritto, per dovere di cronaca bisogna dire che in C++11 è stato introdotto finalmente il for..each loop (e la keyword auto che inferisce il tipo a tempo di compilazione).



int vettore[] = {1, 2, 3, 4};

for (auto elem : vettore)
{
std::cout << elem << std::endl;
}


Sì certo, ma non mi pareva il caso di introdurre ulteriore confusione nel giovane padawan.

Cmq mister x (ti chiamo così perchè il tuo nickname è inpronunciabile), se il tempo che hai speso in questo thread l'avessi messo nello studio di qualche linguaggio, sarebbe stato molto meglio! Comincia a programmare, risolvi problemi con l'ausilio di un PC. Il linguaggio è secondario. Just do it!

(r3((h3r
15-07-2013, 22:32
Il problema secondo me, non è "Python vs C++", o "X vs Y"

"Imparare le regole degli scacchi è facile, possono bastare anche soli 5 minuti per impararle. E' diventare un campione che ci vuole una vita"

E' esattamente così con l'informatica: si impara un linguaggio come Python anche in un paio di settimane -- è tutto il resto che richiede tempo, esperienza e cervello

http://mitpress.mit.edu/sicp/full-text/book/book.html

Completamente gratuito, è uno di quei libri che non ti insegna un linguaggio, ma a pensare

Di certo è uno studio più difficile che "Per creare una classe scrivi..."
La affronterai il problema alla radice: come elimino la complessità? La soluzione sarà ciò che si può chiamare programmazione ad oggetti, creata da zero da te :)

Come sempre, a te la scelta

Più si prosegue questa discussione, e più sarai sommerso da scelte da seguire
Tanta gente che ti dirà "Fai questo", "Impara prima un linguaggio poi iil resto", "Impara prima il resto, poi un linguaggio", "Datti all'ippica" -- e come in informatica starà a te decidere come affrontare il problema :cool:

Onestamente non so neanche se sto facendo bene a darti questo consiglio -- forse questo è un consiglio al "me del futuro", avrei voluto ricevere questo consiglio, così da non perdere, tanto tempo

Non so neanche se quel libro sia comprensibile senza alcuna esperienza precedente, io credo di sì

Posso assicurarti però, che quello che imparerai è spendibile con un qualsiasi linguaggio che sia Python o C++11


Non è qualcosa al quale può risponderti ora, io penso

Altro consiglio che ti posso dare è leggerti questo messaggio di van9:
http://www.hwupgrade.it/forum/showpost.php?p=39056427&postcount=23

Grazie per i tuoi preziosi consigli ne farò tesoro, io ero indeciso su che linguaggio iniziare a studiare e facendo delle ricerche ho deciso di partire da C/C++ anche perché sono quelli che ti fanno usare il cervello, quelli da cui partire se vuoi capire la vera essenza della programmazione almeno così ho letto, e io voglio capire tutto della programmazione: come è scritto un programma, come funzionano i sistemi operativi, saper leggere il codice di qualsiasi programma e saperlo modificare, migliorare, da qualche parte dovrò partire come dici tu e penso di aver fatto una scelta che può essere più o meno condivisibile :)

cdimauro
16-07-2013, 08:57
Così hai letto, ma evidentemente chi ha scritto non aveva chiare le idee nemmeno lui...:rolleyes:

!fazz
16-07-2013, 10:09
Grazie per i tuoi preziosi consigli ne farò tesoro, io ero indeciso su che linguaggio iniziare a studiare e facendo delle ricerche ho deciso di partire da C/C++ anche perché sono quelli che ti fanno usare il cervello, quelli da cui partire se vuoi capire la vera essenza della programmazione almeno così ho letto, e io voglio capire tutto della programmazione: come è scritto un programma, come funzionano i sistemi operativi, saper leggere il codice di qualsiasi programma e saperlo modificare, migliorare, da qualche parte dovrò partire come dici tu e penso di aver fatto una scelta che può essere più o meno condivisibile :)

tutte fisime mentali l'unica cosa che ti porta in c++ rispetto agli altri linguaggi di programmazione sono dei gran mal di testa dovuti alla fase di debugging che è a dir poco oscena, inizia ad imparare a programmare con un linguaggio più semplice, trasferire le conoscenze di base da un linguaggio all'altro è una cosa veloce ma se non sai programmare è inutile che ti scorni con un linguaggio oggettivamente più ostico degli altri (e te lo dice uno che con il c++ ci lavora ogni giorno), tutti i linguaggi fanno usare il cervello l'essenza della programmazione è risolvere un problema complesso scomponendolo in problemi sempre più semplici fino a che si riesce a portarli in codice, non per niente all'inizio dei corsi di programmazione si utilizza uno pseudolinguaggio


come ho già detto nei post precendenti io lavoro in c++ perchè non lavoro su pc ma se devo scrivere un programma per uso desktop dal c++ ci stò lontano come un appestato, fai così se ti piace la sintassi del c++ impara il c# la sintassi è simile ma la facilità del linguaggio è su un altro pianeta e puoi usare visual studio che è a dir poco ottimo con il c# (molto meglio degli ide commerciali da svariati k€ che uso io)

mone.java
16-07-2013, 11:01
Io ho iniziato a programmare da relativamente poco cioè 7 anni... Quindi mi ricordo bene che quando inizai avevo voglia di fare... è inutile secondo me che stai a leggerti tanta teoria utile a risolvere problemi che nemmeno ti sei posto... e anche se te li porge il libro stesso difficilmente riuscirai a capirli... quindi il mio consiglio è inizia a scrivere i primi programmi (calcolatrice, equazioni di secondo grado, ecc...) e man mano vedrai che ti servono nuove nozioni per andare avanti (suddividere il progetto in piu files, interazione con l'utente e cosi via) allora inizia a leggere un po di teoria... Ovviamente anche solo per iniziare ti serve un libro un testo un qualcosa... Io tuttora quando devo affrontare un problema Leggo la guida/libro/capitolo/tutorial ecc... applico quello che ho imparato... Poi rileggo la guida/libro ecc... perchè alla prima lettura ti sfugge sempre qualcosa... quel qualcosa che impari sia necessario solo esercitandoti... spero di essere stato chiaro...

ps anche io ti sconsiglio c/c++ ma piuttosto Java, C#, Python....

nico159
16-07-2013, 11:55
tutte fisime mentali l'unica cosa che ti porta in c++ rispetto agli altri linguaggi di programmazione sono dei gran mal di testa dovuti alla fase di debugging che è a dir poco oscena, inizia ad imparare a programmare con un linguaggio più semplice, trasferire le conoscenze di base da un linguaggio all'altro è una cosa veloce ma se non sai programmare è inutile che ti scorni con un linguaggio oggettivamente più ostico degli altri (e te lo dice uno che con il c++ ci lavora ogni giorno), tutti i linguaggi fanno usare il cervello l'essenza della programmazione è risolvere un problema complesso scomponendolo in problemi sempre più semplici fino a che si riesce a portarli in codice, non per niente all'inizio dei corsi di programmazione si utilizza uno pseudolinguaggio


come ho già detto nei post precendenti io lavoro in c++ perchè non lavoro su pc ma se devo scrivere un programma per uso desktop dal c++ ci stò lontano come un appestato, fai così se ti piace la sintassi del c++ impara il c# la sintassi è simile ma la facilità del linguaggio è su un altro pianeta e puoi usare visual studio che è a dir poco ottimo con il c# (molto meglio degli ide commerciali da svariati k€ che uso io)
Posso chiederti che problemi stai avendo con il debug di C++?

Io sono solo un semplice studente, che ha usato in maniera abbastanza seria C# e sta iniziando ad usare C++

Ho trovato gdb di molto superiore al debugger per .Net di VS -- sono stato costretto ad abbandonare il debugger di VS ed usare WinDbg + SOS per C#
Ho trovato dei profiler ottimi e gratuiti, ho trovato un memory checker migliore di quello che viene con .Net (il CLRProfiler)

Mi sono ritrovato con un memory leak in un server complesso scritto in C# (sì, è possibile avere memory leak anche in C# :doh:) e con CLRProfiler trovarlo non è stato affatto facile
L'heap aveva dimensioni di circa 600mb (il server fa un pò di cose, è normale avere heap anche senza alcun leak che superano i 400mb). Per ogni benedetta singola operazione, CLRProfiler andava in freeze per un paio di minuti

Con valgrind trovare un leak in una programma C++, è stato nettamente più semplice

Anche come complessità di linguaggio, onestamente, C# è un linguaggio complesso (dynamic typing, attributi, reflection, partial class, property, anonymous type, extension method, LINQ, async...) sono cose sì utili, ma non so se si può affermare che C# sia un linguaggio più semplice di C++
Parlo solo a livello di linguaggio, e non tutto il resto (STL vs BCL e così via)

Altro esempio di cui posso parlare, sono i problemi di threading
Questo server ad un certo punto andava in livelock, riprodurre il problema in locale non è stato semplice
In C++ esistono vari strumenti per trovare problemi con i threads, io per .Net non trovai assolutamente nulla di quello che fa helgrind (tranne che creare un dump, ed ananlizzarlo con WinDbg + SOS (guarda sopra) cercando di capire da dove nasceva il livelock)

Stessa situazione l'ho trovata con gli IDE
VS non è così avanzato come IDE per .Net senza aiuti come ReSharper
Sempre personalmente, ho trovato IDE come Eclipse tutt'altro pianeta comple completezza -- se poi consideri che Eclipse è gratuito mentre VS + ReSharper non sono certo gratis (ovviamente qua si parla per Java)

So che a te potrà sembreare strano o forse ridicolo, ma tra VS Ultimate e KDevelop, trovo decisamente migliore KDevelop 4.5 + cmake + perf + valgrind, per C++

Sempre parlando per la mia esperienza personale, la vera differenza che sto trovando tra C# e C++ è solo e solamente: la gestione della memoria, e far attenzione alle promozioni dei tipi numerici

Voglio aprire una piccola parentesi sulla gestione della memoria:
E' vero che C# gestisce la memoria per te, ma la memoria è solo una parte delle risorse che un sw complesso si trova ad utilizzare
C# infatti introduce un concetto che in C++ non esiste: i finalizer, e come per magia, ti ritrovi alla stessa situazione di C++
Guardacaso, il leak di cui parlavo prima, era in un finalizer, che veniva sì chiamato, ma il finalizer stesso conteneva un bug (il codice che ti costringe a scrivere il finalizer e l'interfaccia IDisposable, non è proprio magnifico, assolutamente no)

Ah, sto scrivendo molti meno if(parametro == null) { ... } in C++ rispetto C#

A me fa specie di vedere invece tanta gente che sconsiglia C++ --- perchè non capisco, cosa abbia di così mostruoso rispetto a C#

Nota, non ho avuto mai problemi con il GC di .Net

Sono passato a C++ per altri motivi, ciò che tu dici come orrori: strumenti di tutt'altro livello, una chiara visione di cosa fa veramente il codice, possibilità di gestire veramente il layout dei propri tipi, librerie per il multi threading più avanzate (Intel TBB, OpenMP, Concurrency Kit...), possibilità di utilizzare la programmazione generica con i template (i generics sono troppo limitati, e per avere qualcosa di simile ai template, devi usare la reflection, che è troppo lenta per tanti casi) e cost che è utilizzabile in codice reale rispetto al ridicolo readonly di C#
Visto il tipo di applicativo (server) pagare tempo a compile time e non a runtime, è un vantaggio

Ed altra cosa, delle persone che ho visto lamentarsi di C++, molte volte tentavano di usare C++ senza aver conoscenza di quello che facevano, o tentare di usarlo come C#/Java/altro

In poche parole, non trovo nessun linguaggio attuale particolarmente bello, ma non capisco i grandi vantaggi che avrebbe C# su C++
Nel mio caso, ho trovato solo svantaggi, costi e limitazioni

Con QT scrivi nelle stesse righe di codice, ciò che faresti con C# e WPF

Un esempio ancora più incisivo, si può vedere dagli esempi di Windows 8 apps
Per alcuni, lo stesso esempio è scritto sia in C++ che C#, e la differenza è veramente poca cosa

Ecco perchè sono curioso di sapere la tua esperienza con C++

!fazz
16-07-2013, 12:49
non è che ho problemi con il c++ anzi, sicuramente è un enorme passo avanti poterlo usare al posto dell'assembler :D

per casini di debugging intendo che il c++ è dir poco poco comunicativo sulla tipologia dell'errore e pure sulla sua posizione cosa che, per una persona inesperta è solo una complicazione inutile, si rischia di passare le ore per risolvere un banale errore poi tutte le funzionalità di cui parli sono molto più che funzionalità di base, l'utente in questione non ha ancora la minima esperienza di programmazione quindi meglio partire con qualcosa più semplice, tutto il resto imho

parli di qt ecc ecc ma sono molte più complicate del sistema di progettazione visuale di vs con gestione degli eventi integrata (non che siano complicatissime vero ma sicuramente sono più complesse, anche se la mai conoscenza di qt è molto limitata avendole usate solo per un progetto e neanche in versione molto standard visto che erano sotto un middleware proprietario per la gestione di un hmi di veicolo abbastanza incasinata)

poi la mia esperienza del c++ è parecchio diversa dalla tua, io non lavoro su pc :), i rari programmi che scrivo su pc sono principalmente utility per il trattamento dei dati dal campo e non ho il minimo tempo da perdere dietro ad interfaccie varie e cose similari quindi uso c# che mi rende molto più veloce la fase di stesura e debugging lasciando maggior tempo per il core del lavoro

ps guarda che non c'è tanta gente che sconsiglia a priori il c++ c'è tanta gente che lo sconsiglia come primo linguaggio c'è una sottile differenza (aka meglio farsi le ossa con qualcosa che non ti complica la vita e ti vincola più rigidamente per poi se necessario passare a qualcosa di più libero e lasco, ereditarietà multipla inclusa)

pensa che imho uno dei linguaggi migliori per imparare è vba, facile da leggere, subito immediato e cmq moderatamente utile da conoscere

mone.java
16-07-2013, 13:14
Concordo appieno con quello che dice !fazz... Non ho programmato in C++ ma mi sono trovato a compilare programmi già fatti e ho fatto diversi progetti in C... Avendo iniziato con Java era un vero incubo capire dov'è l'errore... e una volta che lo trovi capire perchè...

pabloski
16-07-2013, 15:25
partire da C/C++ anche perché sono quelli che ti fanno usare il cervello,


oddio, magari ti fanno bruciare il cervello :D


quelli da cui partire se vuoi capire la vera essenza della programmazione almeno così ho letto,


e qui dipende da quale essenza si vuole capire

il c e il c++ sono più vicini al bare metal, cioè a come ragiona la macchina....ma imparare a ragionare come una macchina è un bello sforzo

altre linguaggi di alto livello, hanno costrutti più simili al modo di ragionare dell'uomo

imho dovresti partire con i secondi e poi andare dritto sui primi, perchè, piaccia o meno, nessuno porta la pagnotta a casa conoscendo un singolo linguaggio

ti svelo un segreto? ultimamente tutti si strappano i capelli per dirci che dobbiamo programmare in javascript, perchè è figo, è bello, è potente....javascript ha un'infinità di limitazioni che lo rendono imbarazzante in certi contesti

e quindi? quindi c'è un tool adatto ad ogni tipologia di problema e bisogna imparare a padroneggiarne un buon numero


e io voglio capire tutto della programmazione: come è scritto un programma, come funzionano i sistemi operativi, saper leggere il codice di qualsiasi programma e saperlo modificare, migliorare, da qualche parte dovrò partire come dici tu e penso di aver fatto una scelta che può essere più o meno condivisibile :)

ecco, già se partiamo da questi punti, allora forse la scelta di certi linguaggi diventa comprensibile

però bisogna fare dei distinguo importanti....capire come funziona un sistema operativo è una faccenda più teorica che pratica

capire come funziona la shell di windows, è una questione molto pratica, ma ha poco a che fare col c o col c++

capire e modificare i programmi più diffusi, beh, allora il c++ ( in particolare ) è un valido aiuto, perchè molti programmi di grosse dimensioni sono scritti in c++

(r3((h3r
16-07-2013, 15:29
Quindi non ho ben capito, faccio bene o non faccio bene ad imparare linguaggi come C/C++? Oppure è una perdita di tempo perché oramai sono obsoleti ed esistono altri linguaggi tipo il python che ti permettono di fare cose più veloci e a breve sostituiranno quelli che ci sono ora

!fazz
16-07-2013, 15:34
Quindi non ho ben capito, faccio bene o non faccio bene ad imparare linguaggi come C/C++? Oppure è una perdita di tempo perché oramai sono obsoleti ed esistono altri linguaggi tipo il python che ti permettono di fare cose più veloci e a breve sostituiranno quelli che ci sono ora

impara a programmare (che è nettamente diverso da imparare a scrivere in un determinato linguaggio), un linguaggio vale l'altro al tuo livello, parti con qualcosa di facile che ti permetta di imparare le basi della programmazione

non esistono (o quasi) linguaggi obsoleti, ogni linguaggio ha pregi e difetti che devono fittare con i requisiti dell'applicazione

mone.java
16-07-2013, 15:37
Quindi non ho ben capito, faccio bene o non faccio bene ad imparare linguaggi come C/C++? Oppure è una perdita di tempo perché oramai sono obsoleti ed esistono altri linguaggi tipo il python che ti permettono di fare cose più veloci e a breve sostituiranno quelli che ci sono ora

Si fai bene ma solo dopo aver studiato linguaggi ad alto livello... (Java, C#, Python).. cosi per ti concentri sulla programmazione "fine a risolvere il problema che ti sei posto" senza perderti dietro a errori incomprensibili e tecnicismi complessi tipici di C/C++... Io sono estremamente affascinato dal C (anche se l'ho utilizzato solo per progetti universitari...) mi rendo conto che molti limiti dei linguaggi ad alto livello posso essere superati grazie ad esso... ma prima di rendersi conto quali sono i limiti o comunque le necessità che ti spingono ad "avvicinarti" alla macchina ne passa di tempo...

WarDuck
16-07-2013, 22:17
C++ è oggettivamente BRUTTO a vedersi.

Basta guardare i type_traits e cosa diventa il codice usando librerie che abusano pesantemente di quello strumento (vedi le orribili boost che ogni tanto ti ritrovi tra i piedi in progetti anche piccoli).

Illegibile al 100%. Un errore nei template e il compilatore (specie GCC) da un wall of text di cose inutili e che spesso non c'entrano niente con la vera natura dell'errore.

Anzi fortunatamente nelle ultime versioni è migliorato parecchio.

Inoltre non è sempre vero che è meglio perdere tempo in compilazione, perché è tempo perso per il programmatore, che magari aveva fatto una piccola modifica e voleva testarla rapidamente.

Non per dire, ma io programmo tutti i giorni in C++, e non lo faccio di certo perché è un bel linguaggio, ma semplicemente perché nell'ambito in cui lavoro (networking real-time) è comodo avere a che fare con un linguaggio compilato e che offre un paradigma Object Oriented.

E' questione di necessità prima e di gusti poi, non sempre puoi scegliere.

Detto ciò, prima viene il problema e poi il linguaggio, mai il contrario.

vendettaaaaa
16-07-2013, 23:24
C++ è oggettivamente BRUTTO a vedersi.

Basta guardare i type_traits e cosa diventa il codice usando librerie che abusano pesantemente di quello strumento (vedi le orribili boost che ogni tanto ti ritrovi tra i piedi in progetti anche piccoli).

Illegibile al 100%. Un errore nei template e il compilatore (specie GCC) da un wall of text di cose inutili e che spesso non c'entrano niente con la vera natura dell'errore.

Anzi fortunatamente nelle ultime versioni è migliorato parecchio.

Inoltre non è sempre vero che è meglio perdere tempo in compilazione, perché è tempo perso per il programmatore, che magari aveva fatto una piccola modifica e voleva testarla rapidamente.

Non per dire, ma io programmo tutti i giorni in C++, e non lo faccio di certo perché è un bel linguaggio, ma semplicemente perché nell'ambito in cui lavoro (networking real-time) è comodo avere a che fare con un linguaggio compilato e che offre un paradigma Object Oriented.

E' questione di necessità prima e di gusti poi, non sempre puoi scegliere.

Detto ciò, prima viene il problema e poi il linguaggio, mai il contrario.
A me piace da vedere :read:

(r3((h3r
18-07-2013, 22:36
Ragazzi condivido tutto quello che è stato detto, però cmq alla fine da qualche linguaggio uno deve iniziare giusto? Quindi da dove inizi inizi così intanto uno entra nella mentalità della programmazione poi piano piano si farà un idea di quale sia quello che gli serve di più :D

pabloski
18-07-2013, 23:58
Ragazzi condivido tutto quello che è stato detto, però cmq alla fine da qualche linguaggio uno deve iniziare giusto? Quindi da dove inizi inizi così intanto uno entra nella mentalità della programmazione poi piano piano si farà un idea di quale sia quello che gli serve di più :D

Che background hai? E quali sono i tuoi obiettivi?

La logica algoritmica insegnata pedantemente e teoricamente, porta a disastri incredibili. Il modo migliore è cominciare a smanettare con un linguaggio molto espressivo e di alto livello.

Una volta c'era il BASIC, il suo sostituto moderno è sicuramente Python.

Ma questo discorso riguarda la logica. E' chiaro che se vuoi scendere in profondità nei dettagli, allora prendi un bel libro tipo Programming the 8086/8088 di Coffron ( vecchio, riguarda le architetture a 16 bit, ma è mille volte più chiaro di molti libri moderni ) e un'assembler tipo Nasm e ti metti a giochicchiare.

Nel passaggio tra i due estremi, potresti studiarti il C giusto come antipasto :D

vendettaaaaa
19-07-2013, 08:06
Che background hai? E quali sono i tuoi obiettivi?

La logica algoritmica insegnata pedantemente e teoricamente, porta a disastri incredibili. Il modo migliore è cominciare a smanettare con un linguaggio molto espressivo e di alto livello.

Una volta c'era il BASIC, il suo sostituto moderno è sicuramente Python.

Ma questo discorso riguarda la logica. E' chiaro che se vuoi scendere in profondità nei dettagli, allora prendi un bel libro tipo Programming the 8086/8088 di Coffron ( vecchio, riguarda le architetture a 16 bit, ma è mille volte più chiaro di molti libri moderni ) e un'assembler tipo Nasm e ti metti a giochicchiare.

Nel passaggio tra i due estremi, potresti studiarti il C giusto come antipasto :D
Secondo me dobbiamo dirgli tutti quanti in coro lo stesso linguaggio o questo non si decide più :fagiano:
Comincio io: Python!!!

(r3((h3r
19-07-2013, 11:07
Che background hai? E quali sono i tuoi obiettivi?
Ma questo discorso riguarda la logica. E' chiaro che se vuoi scendere in profondità nei dettagli, allora prendi un bel libro tipo Programming the 8086/8088 di Coffron ( vecchio, riguarda le architetture a 16 bit, ma è mille volte più chiaro di molti libri moderni ) e un'assembler tipo Nasm e ti metti a giochicchiare.

Nel passaggio tra i due estremi, potresti studiarti il C giusto come antipasto :D


Si si cmq mi piace accedere nei dettagli in modo da capire il più possibile di come funzionano le cose e quel libro che mi hai dato sembra in tema, poi appena posso lo prendo, grazie ;)

cdimauro
19-07-2013, 13:12
In tal caso è d'obbligo lo studio dei seguenti manuali, in ordine: primo (http://download.intel.com/design/Itanium2/manuals/25110901.pdf), secondo (http://www.intel.com/content/dam/doc/manual/itanium-architecture-vol-1-2-3-4-reference-set-manual.pdf), terzo (http://download.intel.com/design/Itanium2/manuals/25111003.pdf). :O

airon
19-07-2013, 13:20
Vuoi iniziarea a programmare?

Inizia col python.

DanieleC88
20-07-2013, 01:03
Mi unisco al coro, vai con Python! :D

(r3((h3r
20-07-2013, 15:58
Mi unisco al coro, vai con Python! :D

Oramai ho deciso credo, inizierò dal C :Prrr:

DanieleC88
20-07-2013, 16:03
Be', buon divertimento col C. Quando poi vorrai provare Python, apprezzerai la differenza. ;)

(r3((h3r
21-07-2013, 18:00
perchè non si è capito... :asd:

ma guarda... giusto perché credo che non come dicono tutti prima impari le cose semplici come il python e poi ti sporchi le mani, io credo invece che se prima si inizia con il più tosto e ti fai le ossa, poi riuscirai meglio in cose più semplici :D

pabloski
21-07-2013, 18:04
ma guarda... giusto perché credo che non come dicono tutti prima impari le cose semplici come il python e poi ti sporchi le mani, io credo invece che se prima si inizia con il più tosto e ti fai le ossa, poi riuscirai meglio in cose più semplici :D

Il ragionamento generale è esatto, ma non credo sia applicabile all'attuale situazione.

Il punto non è che python è più facile e/o permette di farla facile. Il punto è che il processo di realizzazione di un programma, passa attraverso una formulazione algoritmica. Questa fase è prettamente logica, espressa in termini di logica umana ed è molto distante dalla logica della macchina.

Python ti permette di tradurre le idee che ti vengono in mente molto rapidamente in codice. C, no!

DanieleC88
21-07-2013, 18:14
ma guarda... giusto perché credo che non come dicono tutti prima impari le cose semplici come il python e poi ti sporchi le mani, io credo invece che se prima si inizia con il più tosto e ti fai le ossa, poi riuscirai meglio in cose più semplici :D

"Il più tosto" è una valutazione assoluta, che andrebbe invece contestualizzata più precisamente. In che modo il linguaggio C è "il più tosto"? Al contrario, personalmente direi che come linguaggio è anche vagamente semplice, vista anche la scarsità di "strumenti" che offre (e.g., non ha forme di ereditarietà, non ha chiusure, etc...).

Tu stai cercando di imparare un linguaggio di programmazione: come dice saggiamente anche pabloski, ciò che invece sarebbe prioritario imparare è il modo in cui strutturare un "programma", cioè una lista ben formata di istruzioni che indichino al calcolatore elettronico come eseguire ciò che tu vuoi che esegua (che è la logica applicativa). Con un po' d'astrazione, puoi allenarti a fare ciò anche solo con carta e penna. :p

Insomma, impara prima a programmare: poi ad imparare questo o quel linguaggio ci vorrà ben poco.

DanieleC88
21-07-2013, 18:19
Ah, e mi raccomando: divertiti con l'allocazione/deallocazione di memoria e con la manipolazione di stringhe! :D

(Poi, però, prova Python e capirai il perché te lo consigliavano tutti.)

cdimauro
21-07-2013, 18:53
ma guarda... giusto perché credo che non come dicono tutti prima impari le cose semplici come il python e poi ti sporchi le mani, io credo invece che se prima si inizia con il più tosto e ti fai le ossa, poi riuscirai meglio in cose più semplici :D
In tal caso mi riquoto:
In tal caso è d'obbligo lo studio dei seguenti manuali, in ordine: primo (http://download.intel.com/design/Itanium2/manuals/25110901.pdf), secondo (http://www.intel.com/content/dam/doc/manual/itanium-architecture-vol-1-2-3-4-reference-set-manual.pdf), terzo (http://download.intel.com/design/Itanium2/manuals/25111003.pdf). :O
:O

(r3((h3r
21-07-2013, 18:54
Il ragionamento generale è esatto, ma non credo sia applicabile all'attuale situazione.

Il punto non è che python è più facile e/o permette di farla facile. Il punto è che il processo di realizzazione di un programma, passa attraverso una formulazione algoritmica. Questa fase è prettamente logica, espressa in termini di logica umana ed è molto distante dalla logica della macchina.

Python ti permette di tradurre le idee che ti vengono in mente molto rapidamente in codice. C, no!


si però se fosse come dici tu allora gli altri linguaggi di programmazione sarebbero tutti abbandonati per l'uso spropositato di Python che è il migliore al momento, invece i linguaggi più usati ancora oggi sono C/C++ e Java, questo vorrà dire qualcosa, perché evidentemente a qualcosa serviranno, quindi perché non avere un infarinatura anche di quelli?

pabloski
21-07-2013, 19:14
si però se fosse come dici tu allora gli altri linguaggi di programmazione sarebbero tutti abbandonati per l'uso spropositato di Python che è il migliore al momento, i


no no no, sei caduto nel tipico errore del principiante

nel ramo ingegneristico, la parola migliore è abolita....non esiste il più figo, il miglior in assoluto, Goldrake, ecc...

Python è un linguaggio con un'espressività ineguagliata dagli altri, permette di scrivere software complesso con poche righe di codice, permette di concentrarsi sull'implementazione dell'algoritmo, astraendo completamente i dettagli ( l'allocazione di memoria citata da DanieleC88, ad esempio ).

Ovviamente un programma python non sarà mai veloce quanto un binario compilato prodotto da un compilatore c o c++.

Questo per farti capire che ogni linguaggio ha pro e contro.

Un neofita che sta iniziando il suo percorso informatico, perchè diavolo dovrebbe badare alle performance??

SnakePlissken
21-07-2013, 23:13
Premetto che sono iscritto a questo forum da parecchi anni (anche se sono tornato a frequentarlo solo recentemente dopo un lungo periodo di astinenza) e quindi ricordo bene nomi come cdimauro o DanieleC88.

Premetto anche che probabilmente son prevenuto, perché ho iniziato a programmare imparando il C, peraltro con una certa soddisfazione, e per di più da un libro pressoché sconosciuto, del quale infatti non ricordo nemmeno l'autore (qualcosa come Chedwick... boh!).

Ma non capisco una cosa: per quale motivo per imparare a programmare bisogna scrivere algoritmi? Perché imparare a programmare significa necessariamente inquadrare i problemi e darne una rappresentazione di alto livello?

Ricordo che quando io iniziai a programmare il mio obiettivo principale era capire cosa comporta scrivere un programma. Sarò della "vecchia guardia" (non ho nemmeno 26 anni...), ma secondo me il C è un buon linguaggio per partire. Non perché sia "tosto", anzi: il vantaggio maggiore del C è che è "semplice", nel senso di "piccolo", non complesso né complicato. Ciò consente di concentrarsi su pochi concetti, apprendere i meccanismi e la logica di base, approfondirli e fissarli bene in mente. In qualche modo fornisce delle basi.

Chiaramente studiare il C è ben diverso dallo studiare le tre bibbie dell'Intel.

Secondo me passare a un livello di astrazione maggiore è il passo successivo: è quello che poi si farà programmando nella "vita reale". Peraltro, tutti i linguaggi che ho imparato successivamente li ho appresi a un buon livello con la semplice pratica (tranne il C++), mentre tutti i miei colleghi di Università che invece son partiti da altri linguaggi si sono poi trovati in difficoltà a programmare in C, perché non si son messi a studiarlo per capirne i pochissimi concetti di base.

Ho detto la mia. :)

Ciao,
Antonio

SnakePlissken
21-07-2013, 23:32
Leggi la mia firma. Il perché lo troverai nell'introduzione del libro che consiglio, che è sempre in firma.
Ecco qua:
Sfortunatamente nei corsi introduttivi c'è la tendenza a focalizzare troppo l'attenzione
sull'astrazione matematica e nel caso degli studenti a sentirsi frustrati a causa
di fastidiosi problemi legati a dettagli di basso livello della sintassi, della compi-
lazione e dall'imposizione di regole poco intuitive. Sebbene questa astrazione e
questo formalismo siano importanti per il progettista di software professionale
e per gli studenti che hanno intenzione di proseguire i loro studi di informatica,
questo approccio in un corso introduttivo porta solitamente a rendere l'infor-
matica noiosa. Quando tengo un corso non voglio avere davanti una classe di
studenti annoiati: preferirei piuttosto vederli impegnati a risolvere problemi in-
teressanti esplorando idee diverse, approcci non convenzionali, infrangendo le
regole e imparando dai loro stessi errori.
Posso immaginare che se si ha davanti una classe intera di allievi, magari non tutti realmente interessati, possa essere un problema insegnare il C e dunque si preferisca il Python. Ma come questo stesso passo precisa, se uno studente vuole imparare per davvero a programmare, allora questi dettagli diventano importanti.

Più avanti c'è scritto che si riferisce a "corsi riguardanti la semplice programmazione" con l'obiettivo di consentire "agli studenti di completare progetti concreti". Quando uno impara a programmare, secondo me, l'attenzione non è esclusivamente sugli algoritmi e realizzare progetti interi diventa secondario.

pabloski
21-07-2013, 23:50
Algoritmi in C++ di Sedgewick scommetto :D

Comunque il problema l'hai inquadrato nella seconda parte, cioè riguardo il trovarsi davanti una classe di persone che, per forza di cose, non hanno nè la stessa propensione a maneggiare oggetti logici nè le stesse esperienze a riguardo.

Ad esempio io, cominci col basic del c64. Poi, causa guasto di ben 2 c64 nel giro di 2 anni, abbandonai per altri 2-3 anni. Ricominciai con un pc olivetti con dos 3.3 e turbo pascal!!

Pascal non è al livello del C come astrusità, ma di certo non è nemmeno un linguaggio di alto livello ( se per alto livello intendiamo robe tipo Python, Ruby, Lua, Javascript ).

Filò tutto liscio. Poi studiai l'architettura x86, assembly ( peraltro scrivevo gli eseguibili .com direttamente in binario, usando il libro per tradurre dall'assembly al codice macchina e una sfilza di DATA in basic per contenere il programma da scrivere sul file .com ). Infine approdai al famoso/famigerato C. E così via....

Nessun intoppo da nessuna parte ( tranne un pò di sano tempo perso a sbatterci la testa ogni tanto ). Ma il punto era che l'esperienza col basic mi aveva reso capace di inquadrare immediatamente la soluzione ai problemi, di creare l'algoritmo nella mia testa ( niente diagrammi di flusso o scemenze ausiliarie ).

Arrivai al punto di criticare l'esistenza stessa di strumenti come i diagrammi di flusso, oppure la necessità di mettersi ad abbozzare su carta gli algoritmi.

Ma il punto è che lo faceva implicitamente il mio cervello!! E secondo me, il tuo caso è lo stesso. Tu vedi il problema e immediatamente, nella tua testa, crei l'algoritmo per risolverlo. A quel punto è banale tradurlo in qualsiasi linguaggio ( non banale per progetti di grandi dimensioni ).

Il punto è che chi non riesce nemmeno ad immaginarsi i passi astratti, si ritrovano buttato in un pozzo se gli chiedi pure di immaginarsi tutti i dettagli ( array allocati dinamicamente che svolazzano, puntatori che si perdono per strada, ecc... ).

DanieleC88
22-07-2013, 00:06
Ma non capisco una cosa: per quale motivo per imparare a programmare bisogna scrivere algoritmi? Perché imparare a programmare significa necessariamente inquadrare i problemi e darne una rappresentazione di alto livello?

Perché, fondamentalmente, devi risolvere problemi: lo strumento con cui lo fai è un dettaglio. Per iniziare ad imparare come risolvere problemi, non vuoi (spero!) stare lì a sbatterti con malloc e free e manipolazione di "stringhe" (che in C non sono nemmeno un "first-class citizen", occhio).

Io ho iniziato dal BASIC, per poi passare ad Object Pascal e da lì al C. Avere iniziato con un linguaggio "giocattolo" non mi ha impedito di imparare tutto il resto e proseguire proficuamente con gli studi, anzi: ricordo che con Visual Basic era letteralmente un gioco da ragazzi sviluppare applicazioni grafiche, e non puoi capire la frustrazione di quando ho provato a rifare le stesse cose in C. :)

Posso dire di cavarmela molto bene col C, ma ciò non toglie che lo evito come la peste. Se proprio ho necessità di sviluppare in C, amen, ma altrimenti... :D

Tommo
22-07-2013, 00:27
Comunque la scelta è solo tra quale imparare prima o dopo, se inizia da Python può fare C un'altro giorno... e che è sto fatalismo, per me uno dovrebbe sapere almeno 4 linguaggi :asd:

@SnakePlissken: ti accorgerai del motivo per cui tutti consigliano di partire dagli algoritmi quando li studierai, e odierai tutto lo schifo che hai scritto fino a quel giorno.
Te lo dice uno che c'è passato :asd:

cdimauro
22-07-2013, 07:38
Ecco qua:

Posso immaginare che se si ha davanti una classe intera di allievi, magari non tutti realmente interessati, possa essere un problema insegnare il C e dunque si preferisca il Python. Ma come questo stesso passo precisa, se uno studente vuole imparare per davvero a programmare, allora questi dettagli diventano importanti.

Più avanti c'è scritto che si riferisce a "corsi riguardanti la semplice programmazione" con l'obiettivo di consentire "agli studenti di completare progetti concreti". Quando uno impara a programmare, secondo me, l'attenzione non è esclusivamente sugli algoritmi e realizzare progetti interi diventa secondario.
Mi hai quotato, ma s'è persa la domanda originale, che chiarisce il contesto, per cui la riporto:

"E con che linguaggio di programmazione dovrei iniziare secondo te, e perché?"

Il nocciolo della questione sta tutto qui. Da cui la mia risposta.

Infatti anche nel testo che hai riportato è ben chiara la situazione: l'obiettivo è insegnare a programmare a una classe (ma è soltanto il suo caso, perché è un insegnante: il concetto rimane generale), togliendo di mezzo quanto di noioso o complicato possa essere per uno studente che si sta avvicinando a questo mondo.

Qui nessuno mi sembra abbia detto che non sia importante conoscere gli algoritmi e i dettagli di basso livello. Semplicemente li si affronterà in un secondo momento, quando gli studenti avranno imparato a risolvere i problemi (come, peraltro, è scritto proprio alla fine del passo che hai riportato), se e nel momento in cui ne avranno bisogno.

Per questo motivo cominciare con un linguaggio di altissimo livello come Python, che ti permette di concentrarti soltanto sul problema, è, a mio modesto avviso, la strada da seguire.

Senza dimenticare che anche con Python è possibile conoscere e affrontare problematiche di basso livello.
Ad esempio per un test su Codility che mi ha spedito di recente un'azienda tedesca, ho usato un paio di volte la classe array, che mi consente di specificare il tipo "di basso livello" (intero con o senza segno a 8, 16, ecc.) per risolvere un certo problema. Si è trattato di una scelta che è stata particolarmente apprezzata.
Altro esempio, in un mio progetto ho usato la classe struct per manipolare informazioni "strutturate", tenendo conto anche dell'endianess della macchina.
E così via, perché ci sono altri strumenti che Python mette a disposizione per scendere a un livello molto più basso di quello a cui normalmente si è abituati.

Ma son cose che si possono benissimo studiare dopo avere acquisito la giusta mentalità per risolvere problemi. E, ovviamente, per affrontare anche altri linguaggi di programmazione. ;)

(r3((h3r
22-07-2013, 10:23
Ricordo che quando io iniziai a programmare il mio obiettivo principale era capire cosa comporta scrivere un programma. Sarò della "vecchia guardia" (non ho nemmeno 26 anni...), ma secondo me il C è un buon linguaggio per partire. Non perché sia "tosto", anzi: il vantaggio maggiore del C è che è "semplice", nel senso di "piccolo", non complesso né complicato. Ciò consente di concentrarsi su pochi concetti, apprendere i meccanismi e la logica di base, approfondirli e fissarli bene in mente. In qualche modo fornisce delle basi.

Secondo me passare a un livello di astrazione maggiore è il passo successivo: è quello che poi si farà programmando nella "vita reale". Peraltro, tutti i linguaggi che ho imparato successivamente li ho appresi a un buon livello con la semplice pratica (tranne il C++), mentre tutti i miei colleghi di Università che invece son partiti da altri linguaggi si sono poi trovati in difficoltà a programmare in C, perché non si son messi a studiarlo per capirne i pochissimi concetti di base.

Eccolo la finalmente uno che mi capisce :D

(r3((h3r
22-07-2013, 10:26
Ecco qua:

Posso immaginare che se si ha davanti una classe intera di allievi, magari non tutti realmente interessati, possa essere un problema insegnare il C e dunque si preferisca il Python. Ma come questo stesso passo precisa, se uno studente vuole imparare per davvero a programmare, allora questi dettagli diventano importanti.

Più avanti c'è scritto che si riferisce a "corsi riguardanti la semplice programmazione" con l'obiettivo di consentire "agli studenti di completare progetti concreti". Quando uno impara a programmare, secondo me, l'attenzione non è esclusivamente sugli algoritmi e realizzare progetti interi diventa secondario.

ahhh poesia per le mie orecchie :D

(r3((h3r
22-07-2013, 10:32
Comunque la scelta è solo tra quale imparare prima o dopo, se inizia da Python può fare C un'altro giorno... e che è sto fatalismo, per me uno dovrebbe sapere almeno 4 linguaggi :asd:
Te lo dice uno che c'è passato :asd:

Ma infatti se uno inizia come me in direzione: C >> C++ >> JAVA >> (e a questo punto ci metto anche il Python) non è che sbaglia, alla fine saprà cmq 4 linguaggi, quelli fondamentali, poi se uno vorrà procedere all'inverso ci metterà di più, di meno ad imparare non lo so, però anche quella persona saprà 4 linguaggi... è quello che anche io sto dicendo da sempre :)

vendettaaaaa
22-07-2013, 12:07
Ma infatti se uno inizia come me in direzione: C >> C++ >> JAVA >> (e a questo punto ci metto anche il Python) non è che sbaglia, alla fine saprà cmq 4 linguaggi, quelli fondamentali, poi se uno vorrà procedere all'inverso ci metterà di più, di meno ad imparare non lo so, però anche quella persona saprà 4 linguaggi... è quello che anche io sto dicendo da sempre :)
Notare che 99 persone su 100 in questo thread ti hanno detto di cominciare da Python, ma sei partito convinto di scrivere in C. Allora perchè hai chiesto consiglio più e più volte?

E poi, come va la programmazione? E' ormai qualche tempo che ti ci sei messo, a che punto sei? Già fatti i cicli? E le struct?

DanieleC88
22-07-2013, 12:12
Notare che 99 persone su 100 in questo thread ti hanno detto di cominciare da Python, ma sei partito convinto di scrivere in C. Allora perchè hai chiesto consiglio più e più volte?

Mistero della fede! :D

(r3((h3r
22-07-2013, 12:19
Notare che 99 persone su 100 in questo thread ti hanno detto di cominciare da Python, ma sei partito convinto di scrivere in C. Allora perchè hai chiesto consiglio più e più volte?

E poi, come va la programmazione? E' ormai qualche tempo che ti ci sei messo, a che punto sei? Già fatti i cicli? E le struct?

beh ho chiesto consiglio perché volevo essere sicuro delle cose che avevo letto su siti o altri forum :)

sono partito per 10 giorni di vacanza e sono tornato il 15 luglio non mi ci sono ancora messo del tutto ho letto solo poche pagine, di un libro :P e poi in questi giorni stavo leggendo un po' l'assembly

SnakePlissken
22-07-2013, 13:05
Algoritmi in C++ di Sedgewick scommetto :D
No, non è quello! Il Sedgewick non è affatto sconosciuto! ;)

Comunque il problema l'hai inquadrato nella seconda parte, cioè riguardo il trovarsi davanti una classe di persone che, per forza di cose, non hanno nè la stessa propensione a maneggiare oggetti logici nè le stesse esperienze a riguardo.
Ma qui si parla di studio da autodidatta, si presuppone una buona dose di motivazione.

[...]. Ma il punto era che l'esperienza col basic mi aveva reso capace di inquadrare immediatamente la soluzione ai problemi, di creare l'algoritmo nella mia testa ( niente diagrammi di flusso o scemenze ausiliarie ).

Arrivai al punto di criticare l'esistenza stessa di strumenti come i diagrammi di flusso, oppure la necessità di mettersi ad abbozzare su carta gli algoritmi.

Ma il punto è che lo faceva implicitamente il mio cervello!! E secondo me, il tuo caso è lo stesso. Tu vedi il problema e immediatamente, nella tua testa, crei l'algoritmo per risolverlo. A quel punto è banale tradurlo in qualsiasi linguaggio ( non banale per progetti di grandi dimensioni ).

Il punto è che chi non riesce nemmeno ad immaginarsi i passi astratti, si ritrovano buttato in un pozzo se gli chiedi pure di immaginarsi tutti i dettagli ( array allocati dinamicamente che svolazzano, puntatori che si perdono per strada, ecc... ).
Capisco. Rileggendo questa discussione mi rendo conto che forse non ho colto un aspetto. La semplicità del C per me è eleganza. È un linguaggio che va imparato rispettandolo. Altrimenti non serve a niente e anzi vieni punito con errori difficili da rintracciare. Non è un linguaggio che va studiato tanto per dire di conoscere il C.


Perché, fondamentalmente, devi risolvere problemi: lo strumento con cui lo fai è un dettaglio. Per iniziare ad imparare come risolvere problemi, non vuoi (spero!) stare lì a sbatterti con malloc e free e manipolazione di "stringhe" (che in C non sono nemmeno un "first-class citizen", occhio).

Io ho iniziato dal BASIC, per poi passare ad Object Pascal e da lì al C. Avere iniziato con un linguaggio "giocattolo" non mi ha impedito di imparare tutto il resto e proseguire proficuamente con gli studi, anzi: ricordo che con Visual Basic era letteralmente un gioco da ragazzi sviluppare applicazioni grafiche, e non puoi capire la frustrazione di quando ho provato a rifare le stesse cose in C. :)

Posso dire di cavarmela molto bene col C, ma ciò non toglie che lo evito come la peste. Se proprio ho necessità di sviluppare in C, amen, ma altrimenti... :D
Siamo tutti d'accordo che la produttività consentita dal C è bassissima rispetto ad altri linguaggi, e non lo usi se non devi scrivere un kernel o se non sei l'autore di git. :D Ma non è questo il problema. Se l'obiettivo è scrivere immediatamente un'applicazione che faccia qualcosa, allora dato che stiamo parlando di Windows la mia risposta è secca: C# punto e basta, non c'è alternativa che tenga. Se la metrica è la produttività, anche un linguaggio come Python potrebbe andar bene, con le sue peculiarità tra cui essere interpretato.

Ma ripeto: secondo me l'obiettivo è un altro, è di tipo didattico, anzi autodidattico. Io credo che il C consenta di comprendere cosa è un linguaggio di programmazione, cosa significa scrivere un sorgente, come funziona il colloquio tra uomo e macchina.


Comunque una cosa è chiara: si può continuare a discutere per giorni e giorni, magari anche mettendo in campo ragionamenti interessanti, ma...
(r3((h3: (un nick più umano no, eh! :D) ormai ti sei fatto un'idea delle diverse idee :P quindi prendi il primo libro che ti ritrovi e inizia a studiare, che sia di C o di Python, senza farti troppi problemi. Se ti rendi conto che l'approccio è quello che desideri, bene; altrimenti cambi. ;)

DanieleC88
22-07-2013, 13:23
Siamo tutti d'accordo che la produttività consentita dal C è bassissima rispetto ad altri linguaggi, e non lo usi se non devi scrivere un kernel o se non sei l'autore di git. :D Ma non è questo il problema. Se l'obiettivo è scrivere immediatamente un'applicazione che faccia qualcosa, allora dato che stiamo parlando di Windows la mia risposta è secca: C# punto e basta, non c'è alternativa che tenga. Se la metrica è la produttività, anche un linguaggio come Python potrebbe andar bene, con le sue peculiarità tra cui essere interpretato.

Ma ripeto: secondo me l'obiettivo è un altro, è di tipo didattico, anzi autodidattico. Io credo che il C consenta di comprendere cosa è un linguaggio di programmazione, cosa significa scrivere un sorgente, come funziona il colloquio tra uomo e macchina.

Guarda, da autodidatta, non sono d'accordo: come dicevo nel mio messaggio precedente, io ho iniziato con un linguaggio "giocattolo" per poi imparare altri linguaggi in ben poco tempo. Non mi sento affatto di dire che se non fossi passato per il C non avrei compreso cosa è un linguaggio di programmazione e via dicendo.

Poi, per la produttività o la proficuità di questo o quel linguaggio, ci sarebbe un mondo da aprire: produttività in che contesto? Tanto per dire, con Python hai in mano uno strumento che ti va bene tanto per fare applicazioni desktop, quanto per fare console applications, quanto per fare programmazione server-side in ambito web. Ovviamente potresti fare tutto ciò anche in C, ma ti sfido a fare programmazione server-side in C... sai il divertimento. :D

P.S.: e purtroppo non è vero nemmeno che il C ti fa "capire" come funziona il calcolatore sottostante: è comunque di troppo alto livello per esporti veramente ai dettagli di questa o quella architettura. :)

SnakePlissken
22-07-2013, 15:33
Guarda, da autodidatta, non sono d'accordo: come dicevo nel mio messaggio precedente, io ho iniziato con un linguaggio "giocattolo" per poi imparare altri linguaggi in ben poco tempo. Non mi sento affatto di dire che se non fossi passato per il C non avrei compreso cosa è un linguaggio di programmazione e via dicendo.
Capisco, ma evidentemente dipende dallo spirito con cui uno si avvicina alla programmazione e dalle intenzioni con cui prosegue. Quante "soddisfazioni" (è un termine forte, lo so! :D) ti ha dato il C rispetto al Basic? Io ho dato un'occhiata al Basic dopo aver cominciato col C e mi son reso conto che era un linguaggio evitabilissimo ;). Ho imparato il C per un libro di un autore sconosciuto che mi sono ritrovato in casa, e all'epoca non usavo nemmeno Internet come ora (parlo di almeno una dozzina di anni fa... caspita mi sto facendo vecchio! :D), ma mi son reso conto che effettivamente era quello che volevo sapere.

Poi, per la produttività o la proficuità di questo o quel linguaggio, ci sarebbe un mondo da aprire: produttività in che contesto? Tanto per dire, con Python hai in mano uno strumento che ti va bene tanto per fare applicazioni desktop, quanto per fare console applications, quanto per fare programmazione server-side in ambito web. Ovviamente potresti fare tutto ciò anche in C, ma ti sfido a fare programmazione server-side in C... sai il divertimento. :D
È chiaro, ma nel mio messaggio volevo esser breve ed evitare di aprire questo mondo. :)

P.S.: e purtroppo non è vero nemmeno che il C ti fa "capire" come funziona il calcolatore sottostante: è comunque di troppo alto livello per esporti veramente ai dettagli di questa o quella architettura. :)
Ho cercato di guardarmi dallo scrivere che il C "ti fa capire come funziona il calcolatore", e infatti non l'ho scritto ;), però secondo me rimane sempre un buon compromesso.

DanieleC88
22-07-2013, 15:42
Quante "soddisfazioni" [...] ti ha dato il C rispetto al Basic? Io ho dato un'occhiata al Basic dopo aver cominciato col C e mi son reso conto che era un linguaggio evitabilissimo ;).

Aspe', non facciamo confusione: non volevo dire che il BASIC (coi suoi dialetti, visto che all'epoca principalmente ho usato QBasic e Visual Basic) sia migliore del C. Anzi, ho avuto modo successivamente di inorridire al leggere "Option Base 1" oppure "On Error Resume Next". :p

Ciò nonostante, ho avuto modo di imparare facilmente i concetti comuni a tutti i linguaggi, e poi per passare ad altre cose più "toste" è stato un attimo.

In quanto alle soddisfazioni... poche. :D A parte l'aver scritto un kernel (sì, lo so, ormai la conoscete tutti la storia :asd: ) per gioco, non molto. Sono stato molto più soddisfatto con applicazioni scritte in C++ o Java, e mi sto gustando parecchio JavaScript. Ripeto: a voler lavorare in C, lo faccio senza problemi di sorta, ma è un linguaggio che generalmente evito (proprio perché nato per la programmazione di sistema, e non tanto per essere "general-purpose").

Comunque mi fermo qui, stiamo un po' divagando. :)

(r3((h3r
23-07-2013, 10:08
Comunque una cosa è chiara: si può continuare a discutere per giorni e giorni, magari anche mettendo in campo ragionamenti interessanti, ma...
(r3((h3: (un nick più umano no, eh! :D) ormai ti sei fatto un'idea delle diverse idee :P quindi prendi il primo libro che ti ritrovi e inizia a studiare, che sia di C o di Python, senza farti troppi problemi. Se ti rendi conto che l'approccio è quello che desideri, bene; altrimenti cambi. ;)

si si l'ho fatto, mi studierò il C però sto dando anche un occhiata anche ad Assembly in questi giorni :D

(r3((h3r
23-07-2013, 17:59
ragazzi scusate le domande:
1) Ma quale versione dovrei scaricare di Visual Studio 2013 http://www.microsoft.com/visualstudio/ita/2013-downloads#d-2013-editions per programmare in C ed Assembly?
2) Il software non è a pagamento?
3) Che differenza c'è tra le varie versioni?

pabloski
23-07-2013, 18:19
ragazzi scusate le domande:
1) Ma quale versione dovrei scaricare di Visual Studio 2013 http://www.microsoft.com/visualstudio/ita/2013-downloads#d-2013-editions per programmare in C ed Assembly?
2) Il software non è a pagamento?
3) Che differenza c'è tra le varie versioni?

express è gratuita e fa tutto quello che ti serve

però vorrei fare un appuntino....tu sei partito col C, ti vuoi sporcare le mani, ed è una bella cosa, nel senso che hai voglia d'imparare

perchè usi un ide?

dai post precedenti, ho notato che non hai chiari alcuni concetti sulla differenza tra sorgenti, codice oggetto, file eseguibili, compilazione, assemblaggio, ecc...

il problema è che ti potresti ritrovare con una scatola magica che fa le cose, ma non sapere come le sta facendo

(r3((h3r
23-07-2013, 18:30
express è gratuita e fa tutto quello che ti serve

però vorrei fare un appuntino....tu sei partito col C, ti vuoi sporcare le mani, ed è una bella cosa, nel senso che hai voglia d'imparare

perchè usi un ide?

dai post precedenti, ho notato che non hai chiari alcuni concetti sulla differenza tra sorgenti, codice oggetto, file eseguibili, compilazione, assemblaggio, ecc...

il problema è che ti potresti ritrovare con una scatola magica che fa le cose, ma non sapere come le sta facendo


hai ragione, io mi voglio sporcare le mani, ed è bello, però mi hanno detto che con Visual Studio fa girare anche l'assembly ed è un ottimo debugger quindi volevo provarlo, cmq sia non abbandonerò la voglia di sperimentare :P

p.s. su quelle cose che hai scritto mi sono messo a leggerle e le ho capite :)

pabloski
23-07-2013, 20:10
hai ragione, io mi voglio sporcare le mani, ed è bello, però mi hanno detto che con Visual Studio fa girare anche l'assembly ed è un ottimo debugger quindi volevo provarlo, cmq sia non abbandonerò la voglia di sperimentare :P

Il problema sai qual'è? Troppa automazione può depistarti.

Senza contare che un IDE, ha una sua curva d'apprendimento, non è che legge il pensiero e mette in pratica quello che il programmatore vuole fare.

p.s. riguardo visual studio, non usare mai e poi mai i wizard....finiresti col trovarti con un bottoncino magico che scrive centinaia di righe di codice, che magari non esplorerai nè comprenderai mai

quella dei wizard è la strada degli sparagestionali in vb ed è da evitare nella fase di apprendimento

(r3((h3r
23-07-2013, 22:39
allucinante :eek: ho scaricato l'ultima versione di Visual Studio la 2013 e mi dice che non la posso installare perché richiede un computer con una versione più recente di windows io ho windows 7, dovrei avere l'8, mah cose da pazzi...

(r3((h3r
23-07-2013, 22:40
fa girare anche l'assembly.

quelle cose sei sicuro di averle capite, si?

si si ho capito come funziona un compilatore, un assembler e un debugger, devo solo smanettare un po' con la teoria non si va da nessuna parte :D

pabloski
23-07-2013, 22:42
allucinante :eek: ho scaricato l'ultima versione di Visual Studio la 2013 e mi dice che non la posso installare perché richiede un computer con una versione più recente di windows io ho windows 7, dovrei avere l'8, mah cose da pazzi...

sul serio? non hai la possibilità di scaricarne una precedente?

p.s. non chiedere a me, perchè uso linux e relativi strumenti di programmazione e non ho a che fare con windows da almeno 6 anni

(r3((h3r
23-07-2013, 22:47
sul serio? non hai la possibilità di scaricarne una precedente?

p.s. non chiedere a me, perchè uso linux e relativi strumenti di programmazione e non ho a che fare con windows da almeno 6 anni

guarda sto scaricando la 2012 spero vada bene :confused:

(r3((h3r
26-07-2013, 23:27
ragazzi scusate se riprendo ancora la discussione, però mi sto accorgendo sempre più che oltre alla programmazione o meglio, prima della programmazione, dovrei aver ben chiaro certi concetti:
1) Cosa è la shell
2) come è scritto un OS
3) Cosa è un protocollo di rete
4) Capire se qualcuno si è connesso per caso alla tua rete wireless
5) Capire dove se hai un virus nel pc, dove si è nascosto, cosa sta facendo ora e come eliminarlo
Cioè capire bene windows e cosa c'è intorno ad esso, capire come funzionano e sono scritte certe cose e poi magari studiare i linguaggi per modificarle, voi non credete o sto andando troppo oltre, perché cmq io vorrei capire di tutto e di più di come funziona un pc con annessi e connessi...

p.s. lo so che mi sono ben allontanato dalla discussione e qualora lo ritengano giusto i moderatori possono anche chiudere il post in modo che finisce sotto, tanto quello che volevo sapere l'ho saputo e quello che volevo dire con la guida l'ho detto, poi chi farà ricerche cmq la troverà online e ne usufruirà... Grazie ancora per l'attenzione :)

nico159
27-07-2013, 00:17
Inizia imparando bene C o C++, poi potrai leggere libri come:
http://www.libreriauniversitaria.it/moderni-sistemi-operativi-tanenbaum-andrew/libro/9788825618983
http://www.libreriauniversitaria.it/reti-calcolatori-tanenbaum-andrew-pearson/libro/9788871921822
E così via discorrendo

Ma non dimenticare, che la programmazione non è sola conoscenza

Imparare a programmare e farsi una cultura delle attuali basi dei computer, dovrebbero essere due cose da mandare avanti allo stesso passo

Se ti concentri troppo sul "creare" imparando ad utilizzare i vari protocolli di rete, come funziona X e così via, potrai creare programmi, ma questi programmi saranno pessimi

Al contrario se sei solo capace di scrivere bel codice, ma ignori il mondo esterno da quello da te creato, incapace di interagisce con il mondo esterno, che non tiene conto delle limitazioni del mondo in cui il tuo software dovrà vivere, sarà solo un esercizio di stile

pabloski
27-07-2013, 11:41
ragazzi scusate se riprendo ancora la discussione, però mi sto accorgendo sempre più che oltre alla programmazione o meglio, prima della programmazione, dovrei aver ben chiaro certi concetti:
1) Cosa è la shell
2) come è scritto un OS
3) Cosa è un protocollo di rete
4) Capire se qualcuno si è connesso per caso alla tua rete wireless
5) Capire dove se hai un virus nel pc, dove si è nascosto, cosa sta facendo ora e come eliminarlo
Cioè capire bene windows e cosa c'è intorno ad esso, capire come funzionano e sono scritte certe cose e poi magari studiare i linguaggi per modificarle, voi non credete o sto andando troppo oltre, perché cmq io vorrei capire di tutto e di più di come funziona un pc con annessi e connessi...

p.s. lo so che mi sono ben allontanato dalla discussione e qualora lo ritengano giusto i moderatori possono anche chiudere il post in modo che finisce sotto, tanto quello che volevo sapere l'ho saputo e quello che volevo dire con la guida l'ho detto, poi chi farà ricerche cmq la troverà online e ne usufruirà... Grazie ancora per l'attenzione :)

Mi sa che stai riaffrontando il problema dal verso sbagliato. Capire come funziona windows? Senza nemmeno avere le basi di programmazione? C e C++ devono essere la tua seconda lingua, se vuoi capire come funziona un sistema operativo. Oltre ad un bel pacco di conoscenze teoriche indispensabili.

A parte il primo, direi che gli altri punti sono irrealizzabili allo stato attuale.

(r3((h3r
27-07-2013, 19:10
Mi sa che stai riaffrontando il problema dal verso sbagliato. Capire come funziona windows? Senza nemmeno avere le basi di programmazione? C e C++ devono essere la tua seconda lingua, se vuoi capire come funziona un sistema operativo. Oltre ad un bel pacco di conoscenze teoriche indispensabili.

A parte il primo, direi che gli altri punti sono irrealizzabili allo stato attuale.


1) Esatto è la teoria che mi manca e me ne sono accorto solo ora, quali sono i libri che te la insegnano? Quali mi consigliereste di leggere?
2) Ma windows è scritto il C/C++?

hollywoodundead
27-07-2013, 21:44
madonna antonio23 mi fa scassare dalla risate quando scrive "DEVI ANDARE A STUDIARE INVECE CHE SCRIVERE GUIDE" :D

pabloski
28-07-2013, 11:48
1) Esatto è la teoria che mi manca e me ne sono accorto solo ora, quali sono i libri che te la insegnano? Quali mi consigliereste di leggere?

eh bella domanda

dovresti partire dagli algoritmi, tipo con questo libro

http://www.libreriauniversitaria.it/introduzione-algoritmi-strutture-dati-mcgraw/libro/9788838665158

fino a un libro tipo questo

http://www.libreriauniversitaria.it/moderni-sistemi-operativi-tanenbaum-andrew/libro/9788871925400

passando per questo

http://www.libreriauniversitaria.it/architettura-calcolatori-approccio-strutturale-cd/libro/9788871922713



2) Ma windows è scritto il C/C++?

probabilmente qualche componente in altri linguaggi, ma il grosso è c++

WarDuck
30-07-2013, 14:26
probabilmente qualche componente in altri linguaggi, ma il grosso è c++

Assolutamente no, il grosso delle API è C, altrimenti sarebbe una pacchia programmarlo in object oriented.

C'è da dire che in Windows 8 avendo introdotto WinRT le cose potrebbero cambiare.

pabloski
30-07-2013, 15:56
Assolutamente no, il grosso delle API è C, altrimenti sarebbe una pacchia programmarlo in object oriented.


Il fatto che win32 sia un'API C, non implica che il sistema stesso sia scritto in C.

Non so quanto del sistema sia scritto in C++, ma è un'informazione nota il fatto che windows nt sia realizzato, in buona parte, in C++.

WarDuck
01-08-2013, 22:36
*

http://technet.microsoft.com/library/cc767881.aspx

Most of the source code for Windows NT is written in C or C++. These high-level languages make it relatively easy to port Windows NT to different types of workstations. The same source code can be recompiled to build versions of Windows NT that are specific to each processor's instruction set.

A small amount of the code in Windows NT is written in assembly language. Typically, this is code that either interacts directly with a computer's hardware, or needs to run extremely fast. Because assembly language is specific to a particular instruction set, this code must be rewritten once for each type of processor on which Windows NT will run. To make it easy to locate and maintain, this code is isolated to just a few key places in the operating system:

The kernel is the heart of the Windows NT operating system. It controls which threads are run on the system's processor(s), and provides synchronization mechanisms that allow threads on multiple processors to coordinate their access to operating system data structures. It also dispatches interrupts and exceptions to the appropriate handler routines. To optimize the speed of these system-critical operations, portions of the kernel are written in assembly language.

Operating system code that directly accesses the hardware registers of the peripheral devices is isolated in device drivers. Conveniently, device drivers are written in C for Windows NT so they are portable across different processor types.

Non si può affermare che "il grosso" sia C++.

Sono più che convinto che C++ è stato usato per scrivere le applicazioni e servizi di default, mentre per kernel, drivers e quant'altro sia stato usato C.

Dal mio punto di vista altrimenti non avrebbe avuto senso NON forinire una API C++, che sarebbe calzata a pennello.

Edit:
http://www.kuro5hin.org/story/2004/2/15/71552/7795

pabloski
02-08-2013, 11:01
Dal mio punto di vista altrimenti non avrebbe avuto senso NON forinire una API C++, che sarebbe calzata a pennello.

Però avresti tagliato fuori i programmatori C.


Edit:
http://www.kuro5hin.org/story/2004/2/15/71552/7795

Da lì si capisce solo che abbastanza confusionario. Addirittura c'è un desktop.cpp ( suppongo parte del desktop ) e alcune estensioni della shell sono invece in C. Magari fare il contrario avrebbe avuto senso.

cdimauro
02-08-2013, 12:20
Non vedo il problema: si può pure sviluppare interamente in C++, pur facendo uso di classi, ed esporre all'esterno anche un'interfaccia in C (che rimane, purtroppo, la lingua franca quando c'è da definire API).

eraser
02-08-2013, 14:39
Non si può affermare che "il grosso" sia C++.

Sono più che convinto che C++ è stato usato per scrivere le applicazioni e servizi di default, mentre per kernel, drivers e quant'altro sia stato usato C.

Dal mio punto di vista altrimenti non avrebbe avuto senso NON forinire una API C++, che sarebbe calzata a pennello.

Edit:
http://www.kuro5hin.org/story/2004/2/15/71552/7795

Il kernel (almeno la versione pre-Vista, quindi 2000, XP, 2003) è interamente C e Assembly

E se volete potete pure ricompilarlo da zero :fagiano: 430 files .c, 226 files .h e 65 files .asm :D

Tommo
02-08-2013, 18:38
Dal mio punto di vista altrimenti non avrebbe avuto senso NON forinire una API C++, che sarebbe calzata a pennello.

Edit:
http://www.kuro5hin.org/story/2004/2/15/71552/7795

Il motivo e' che all'epoca della prima release del progetto NT (praticamente il 93) il C++ era ancora molto, molto poco usato.
Inoltre l'interfaccia binaria di C++ e' oscena e questo avrebbe tagliato fuori o almeno reso estremamente difficile usare Win32 da altri linguaggi dell'epoca tra cui tanti supportati da MS come C, BASIC, Fortran, COBOL, Fox pro (qualunque cosa fosse :asd: ) etc...
quindi la scelta di usare C e' molto solida, al loro posto era l'unica cosa sensata per assicurarsi la comodita' degli sviluppatori e la famigerata retrocompatibilita'.

E poi C++ per le UI e' meglio ma manco tanto perche' manca di reflection/message passing etc, infatti tutte le aziende l'hanno cestinato in favore di qualcos'altro (JS/ObjC/Java/C#)... a parte il Cxx di MS che comunque come dice il nome non e' affatto C++.

cdimauro
02-08-2013, 20:50
Ma l'avete letto il messaggio di eraser? :stordita:

(r3((h3r
02-08-2013, 21:45
Il kernel (almeno la versione pre-Vista, quindi 2000, XP, 2003) è interamente C e Assembly

E se volete potete pure ricompilarlo da zero :fagiano: 430 files .c, 226 files .h e 65 files .asm :D

e via allora giù a studiare questi due linguaggi :D anche se forse mi sta balenando in testa l'idea di darmi all'HTML, CSS, Javascript, PHP, SQL e chi più ne ha più ne metta, sono indeciso... ora mi killerete :D però li trovo linguaggi interessanti e poi ci si crea qualcosa di più bello come siti e animazioni grafiche, anche disegni con photoshop con il quale me la cavo anche abbastanza bene :P

GByTe87
02-08-2013, 22:25
e via allora giù a studiare questi due linguaggi :D anche se forse mi sta balenando in testa l'idea di darmi all'HTML, CSS, Javascript, PHP, SQL e chi più ne ha più ne metta, sono indeciso... ora mi killerete :D però li trovo linguaggi interessanti e poi ci si crea qualcosa di più bello come siti e animazioni grafiche, anche disegni con photoshop con il quale me la cavo anche abbastanza bene :P

No beh dai almeno le idee sono chiare :fagiano:

mone.java
03-08-2013, 08:07
5 pagine di consigli gettate all'aria :) HTML, CSS, Javascript, PHP, SQL sicuramente sono utili e interessanti ( a me francamente i primi 4 mi aberrano ma son gusti) il fatto è che iniziando con quelli ti allontani un po dalla programmazione in senso stretto secondo me... almeno all'inizio...

pabloski
03-08-2013, 11:53
5 pagine di consigli gettate all'aria :) HTML, CSS, Javascript, PHP, SQL sicuramente sono utili e interessanti ( a me francamente i primi 4 mi aberrano ma son gusti) il fatto è che iniziando con quelli ti allontani un po dalla programmazione in senso stretto secondo me... almeno all'inizio...

In effetti mi sono cadute le braccia quando ho letto "html, css, php" :asd:

(r3((h3r
04-08-2013, 11:43
avete ragione ragazzi, però i vostri consigli non sono stati inutili perché la programmazione cmq va studiata secondo me, e quindi grazie a voi saprò da dove cominciare e cosa leggere, sto solo pensando che anche il mondo del web è affascinante e magari c'è più opportunità di lavorare, cmq vedrò cosa fare, deciderò a breve, grazie cmq a tutti voi per i preziosi consigli :D

eraser
04-08-2013, 12:45
Ma l'avete letto il messaggio di eraser? :stordita:

Pensavo di aprire un mondo con il comunicare che il source code del kernel di Windows Server 2003 e Windows XP 64 bit è disponibile online (e non parlo di quella minima parte di codice di Windows 2000 rubata qualche anno fa) ed è pure ricompilabile :stordita:

Mi sa che sono l'unico che trovò a suo tempo questa news entusiasmante :D

pabloski
04-08-2013, 13:44
Pensavo di aprire un mondo con il comunicare che il source code del kernel di Windows Server 2003 e Windows XP 64 bit è disponibile online (e non parlo di quella minima parte di codice di Windows 2000 rubata qualche anno fa) ed è pure ricompilabile :stordita:

Mi sa che sono l'unico che trovò a suo tempo questa news entusiasmante :D

Ti riferisci al codice disponibile ai sottoscrittori di MSDN AA o alla diffusione clandestina dei sorgenti di windows server 2003?

eraser
04-08-2013, 17:18
Sì il Windows Research Kernel ;)

eraser
04-08-2013, 17:21
https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=7366&c1=en-us&c2=0

cdimauro
04-08-2013, 21:41
Pensavo di aprire un mondo con il comunicare che il source code del kernel di Windows Server 2003 e Windows XP 64 bit è disponibile online (e non parlo di quella minima parte di codice di Windows 2000 rubata qualche anno fa) ed è pure ricompilabile :stordita:

Mi sa che sono l'unico che trovò a suo tempo questa news entusiasmante :D
Onestamente non l'avevo letta, ma è sicuramente MOLTO interessante.

Il problema forse è un altro: adesso che è noto che i sorgenti del kernel sono disponibili, consultabili liberamente, e persino modificabili (per fare esperimenti) e ricompilabili, perde un sacco di "fascino".

Finché il codice rimaneva chiuso in cassaforte si potevano alimentare le classiche leggende metropolitane: Microsoft che nasconde delle backdoor per impossessarti del tuo computer, e i sorgenti pieni di bug perché scritti coi piedi. :fagiano:

Oggi è un triste giorno per i complottisti e/o fanatici integralisti di open source et similia... :asd:

pabloski
04-08-2013, 23:14
Perchè nascondere backdoor nei sorgenti quando danno accesso diretto ai server di skype e outlook? :asd:

Lo spionaggio ormai è cloud.

eraser
04-08-2013, 23:39
Onestamente non l'avevo letta, ma è sicuramente MOLTO interessante.

Il problema forse è un altro: adesso che è noto che i sorgenti del kernel sono disponibili, consultabili liberamente, e persino modificabili (per fare esperimenti) e ricompilabili, perde un sacco di "fascino".

Finché il codice rimaneva chiuso in cassaforte si potevano alimentare le classiche leggende metropolitane: Microsoft che nasconde delle backdoor per impossessarti del tuo computer, e i sorgenti pieni di bug perché scritti coi piedi. :fagiano:

Oggi è un triste giorno per i complottisti e/o fanatici integralisti di open source et similia... :asd:

hahaha :D Giusta osservazione :D

cdimauro
05-08-2013, 07:12
Perchè nascondere backdoor nei sorgenti quando danno accesso diretto ai server di skype e outlook? :asd:

Lo spionaggio ormai è cloud.
Ormai significa adesso, o da poco tempo. Certamente non ai tempi del rilascio di XP, di cui puoi toccare con mano la presenza o meno di backdoor et similia. :read:

Dunque tutto il complottismo di cui è stata oggetto Microsoft fino a "ieri" va a farsi benedire. :O

Ciò precisato, è vero che puoi fornire l'accesso ai server di Outlook e Skype, ma è anche vero che ne puoi fare a meno. L'offerta in ambito mailing, VOIP, et similia, è molto vasta. Io sto usando GMail / GTalk, e non mi sento certo meglio di uno che usa Outlook o Skype (che uso anch'io, peraltro, e non me ne preoccupo di certo).

Alla fine se hai paura che l'NSA scopra che ti piace il porno (il segreto di Pulcinella :asd:) andando a leggere le tue mail o le chat con gli amici, puoi sempre prendere provvedimenti.

Ai tempi delle BBS (quindi ti parlo di più di una ventina d'anni fa) si codificavano i messaggi privati con PGP e chiave RSA da 2048 o anche 4096 bit. Oggi magari sarebbe meglio passare a un algoritmo che non si basi sulla fattorizzazione dei numeri primi. Il principio, in ogni caso, credo sia chiaro.

Per VOIP et similia non sono informato, ma è chiaramente applicabile lo stesso principio. Al limite qualche buon coder potrà tirare fuori una soluzione ad hoc e farsi una barca di soldi sfruttando il caso PRISM con una mirata campagna di marketing ("l'unico sistema che resiste persino a PRISM!", ecc. I salesman sono abilissimi nel venderti il fumo come vogliono :asd:).

Problemi risolvibili, insomma. E ben diversi da backdoor infilate nel kernel di un s.o.... ;)

mone.java
05-08-2013, 07:44
Non voglio dire che i complottisti abbiano ragione, ma il fatto che abbiano rilasciato un pezzo del loro codice sorgente non implica che le backdoor siano per forza in quel pezzo e nemmeno che il pezzo rilasciato sia lo stesso da loro usato... Questo per dire che il sorgente rilasciato non è una prova schiacciante del fatto che allora siano dei santi... D'altro canto vero è che se uno ci tiene cosi tanto alla sicurezza che smetta di usare Microsoft-Google oppure si cripti le email ecc.. A me francamente non mi importa che google si legga le mie email... anzi meglio... le sue pubblicità mirate mi hanno fatto scoprire prodotti come JRebel - Vaadin - Zing....

cdimauro
05-08-2013, 08:38
Infatti non hai nessuna garanzia, perché la backdoor potrebbero infilarla in qualche altro componente.

Ma intanto si diceva che il fatto che il kernel fosse chiuso e, dunque, passibile di contenere backdoor, mentre sappiamo che questo non è vero.

Poi il kernel è il componente più importante del s.o.. Se puoi modificarlo come ti pare, puoi tenere traccia di qualunque cosa. E, dunque, scoprire eventuali backdoor presenti a livelli di privilegio inferiori.

pabloski
05-08-2013, 10:17
Ormai significa adesso, o da poco tempo. Certamente non ai tempi del rilascio di XP, di cui puoi toccare con mano la presenza o meno di backdoor et similia. :read:

oddio, a me il codice non lo danno ( non sono un accademico )

e poi è proprio tutto tutto? non c'è nessun modulo di cui non pubblicano i sorgenti?

su questo punto l'open è comunque meglio, in quanto hai la certezza matematica che tutto quello che gira sul tuo pc è disponibile sotto forma di sorgenti


Dunque tutto il complottismo di cui è stata oggetto Microsoft fino a "ieri" va a farsi benedire. :O

ma anche no, visto che word effettivamente "chiamava casa"



Ciò precisato, è vero che puoi fornire l'accesso ai server di Outlook e Skype, ma è anche vero che ne puoi fare a meno. L'offerta in ambito mailing, VOIP, et similia, è molto vasta. Io sto usando GMail / GTalk, e non mi sento certo meglio di uno che usa Outlook o Skype (che uso anch'io, peraltro, e non me ne preoccupo di certo).

io invece sto pensando di portarmi in casa pure il server di posta :D

perchè dovrei accettare che i 'mmerricani leggano le mie email?


Alla fine se hai paura che l'NSA scopra che ti piace il porno (il segreto di Pulcinella :asd:) andando a leggere le tue mail o le chat con gli amici, puoi sempre prendere provvedimenti.

il problema non è il porno ma le mail in cui si discute di lavoro

già anni fa, un'inchiesta UE, dimostrò che Echelon veniva usata anche per rubare segreti industriali


Ai tempi delle BBS (quindi ti parlo di più di una ventina d'anni fa) si codificavano i messaggi privati con PGP e chiave RSA da 2048 o anche 4096 bit. Oggi magari sarebbe meglio passare a un algoritmo che non si basi sulla fattorizzazione dei numeri primi. Il principio, in ogni caso, credo sia chiaro.


e secondo me i paranoici dell'epoca avevano ragione su tutta la linea

non fidarsi è sempre meglio

eraser
05-08-2013, 10:47
io invece sto pensando di portarmi in casa pure il server di posta :D

perchè dovrei accettare che i 'mmerricani leggano le mie email?


in bocca al lupo :stordita:

cdimauro
05-08-2013, 19:01
oddio, a me il codice non lo danno ( non sono un accademico )
Hai provato a leggere la pagina e/o il link alla licenza?
e poi è proprio tutto tutto? non c'è nessun modulo di cui non pubblicano i sorgenti?
Da quel che si legge dovrebbe essere il kernel completo.
su questo punto l'open è comunque meglio, in quanto hai la certezza matematica che tutto quello che gira sul tuo pc è disponibile sotto forma di sorgenti
Diciamo che ti agevola, ma non è indispensabile (http://www.appuntidigitali.it/13446/studio-fix-e-modifiche-al-codice-anche-per-quello-chiuso/).
ma anche no, visto che word effettivamente "chiamava casa"
Hai qualche link? E per fare cosa poi, s'è scoperto?

Ma chi Word non l'aveva, allora era a posto. :p

E comunque finora le critiche che ho sentito è di Windows, non Word/Office, che mandava dati a Microsoft. Word è la prima volta che lo sento. Sarà perché, caduto il mito di Windows "brutto, cattivo e spione", bisogna rivolgere le proprie attenzioni a un altro prodotto Microsoft. "A pensar male ci si azzecca" - cit. :O
io invece sto pensando di portarmi in casa pure il server di posta :D

perchè dovrei accettare che i 'mmerricani leggano le mie email?
Perché è per il tuo bene. :fiufiu: :D
il problema non è il porno ma le mail in cui si discute di lavoro

già anni fa, un'inchiesta UE, dimostrò che Echelon veniva usata anche per rubare segreti industriali

e secondo me i paranoici dell'epoca avevano ragione su tutta la linea

non fidarsi è sempre meglio
Secondo me l'ironia la si dovrebbe capire al volo, specie se accompagnata da faccine ben esplicative. :read: :Prrr:

eraser
05-08-2013, 21:04
Da quel che si legge dovrebbe essere il kernel completo.

Giusto per una correttezza formale:

The Windows Research Kernel v1.2 contains the sources for the core of
the Windows (NTOS) kernel and a build environment for a kernel that will run on
x86 (Windows Server 2003 Service Pack 1) and
amd64 (Windows XP x64 Professional)
A future version may also support booting WRK kernels on Windows XP x86 systems,
but the current kernels will fail to boot due to differences in some shared
structures.

The NTOS kernel implements the basic OS functions
for processes, threads, virtual memory and cache managers, I/O management,
the registry, executive functions such as the kernel heap and synchronization,
the object manager, the local procedure call mechanism, the security reference
monitor, low-level CPU management (thread scheduling, Asynchronous and Deferred
Procedure calls, interrupt/trap handling, exceptions), etc.

The NT Hardware Abstraction Layer, file systems, network stacks, and device
drivers are implemented separately from NTOS and loaded into kernel mode
as dynamic libraries. Sources for these dynamic components are not included
in the WRK, but some are available in various development kits published
by Microsoft, such as the Installable File System (IFS) Kit and the
Windows Driver Development Kit (DDK).

WRK v1.2 includes most of the NTOS kernel sources from the latest released
version of Windows, which supports the AMD64 architecture on the Desktop.
The kernel sources excluded from the kit are primarily in the areas of
plug-and-play, power management, the device verifier, kernel debugger
interface, and virtual dos machine. The primary modifications to WRK
from the released kernel are related to cleanup and removal of server
support, such as code related to the Intel IA64.

Per il resto concordo in pieno :D

pabloski
06-08-2013, 08:04
Hai provato a leggere la pagina e/o il link alla licenza?

si, ho provato a scaricarlo e dice che devi accreditarti come accademico



Diciamo che ti agevola, ma non è indispensabile (http://www.appuntidigitali.it/13446/studio-fix-e-modifiche-al-codice-anche-per-quello-chiuso/).


e mica è poco

non è un caso che pure i ricercatori di sicurezza, preferiscono i programmi coi sorgenti :D


Hai qualche link? E per fare cosa poi, s'è scoperto?


è roba di anni fa e si disse ( almeno a quanto lessi ) che venivano inviate informazioni sul proprietario dei documenti


E comunque finora le critiche che ho sentito è di Windows, non Word/Office, che mandava dati a Microsoft. Word è la prima volta che lo sento. Sarà perché, caduto il mito di Windows "brutto, cattivo e spione", bisogna rivolgere le proprie attenzioni a un altro prodotto Microsoft. "A pensar male ci si azzecca" - cit. :O

è il genere di cose che non sapremo mai...in fondo come si fa a distinguere una vulnerabilità messa lì ad arte, da una capitataci per errore? dopo tutto i programmi contengono MOLTI bug


Perché è per il tuo bene. :fiufiu: :D


boh, lo dicevano pure nel '45 mentre bombardavano la casa dei miei nonni :D


Secondo me l'ironia la si dovrebbe capire al volo, specie se accompagnata da faccine ben esplicative. :read: :Prrr:

l'avevo capito, ma questa storia di PRISM mi ha tolto la voglia di ironizzare

cdimauro
08-08-2013, 06:38
Giusto per una correttezza formale:

Per il resto concordo in pieno :D
Grazie per la precisazione. :)

Dunque è il core del kernel, che rimane in ogni caso la parte più importante.
si, ho provato a scaricarlo e dice che devi accreditarti come accademico
A me ha scritto solo questo: "You are not authorized to view this file."
e mica è poco

non è un caso che pure i ricercatori di sicurezza, preferiscono i programmi coi sorgenti :D
Mi sembra scontato, ma se i ricercatori di sicurezza dovessero stare nella speranza di averli sempre a portata di mano, avrebbero cambiato mestiere da un pezzo. ;)
è roba di anni fa e si disse ( almeno a quanto lessi ) che venivano inviate informazioni sul proprietario dei documenti
Intanto mi è nuova questa cosa, come dicevo. Ma poi bisognerebbe verificare se il "si disse" corrisponde a verità.
è il genere di cose che non sapremo mai...in fondo come si fa a distinguere una vulnerabilità messa lì ad arte, da una capitataci per errore? dopo tutto i programmi contengono MOLTI bug
Le backdoor non hanno la stessa conformazione di una vulnerabilità: sono due cose completamente diverse.
boh, lo dicevano pure nel '45 mentre bombardavano la casa dei miei nonni :D
Quello fu un brutto periodo per altri motivi, e una notte di quei bombardamenti si portò via cinque membri della mia famiglia materna, compresi i loro beni.

Per il caso di cui parliamo la questione è diversa. Mi spiego sotto.
l'avevo capito, ma questa storia di PRISM mi ha tolto la voglia di ironizzare
Perché hai scoperto che le spie... spiano?

Inutile indignarci per delle ovvietà. Lo si dovrebbe fare, invece, perché queste problematiche si potevano risolvere a monte e non è stato fatto (http://www.appuntidigitali.it/18320/il-caso-prism-debolezze-del-protocollo-rsa/).

WarDuck
08-08-2013, 09:56
C'è da dire che il problema non è solo nello specifico algoritmo usato, ma anche nei protocolli di comunicazione stessa.

La maggior parte dei siti usa ancora versioni di SSL e TLS vulnerabili ad attacchi, a prescindere dallo schema crittografico utilizzato.

http://en.wikipedia.org/wiki/Transport_Layer_Security#Security.

eraser
08-08-2013, 11:47
C'è da dire che il problema non è solo nello specifico algoritmo usato, ma anche nei protocolli di comunicazione stessa.

La maggior parte dei siti usa ancora versioni di SSL e TLS vulnerabili ad attacchi, a prescindere dallo schema crittografico utilizzato.

http://en.wikipedia.org/wiki/Transport_Layer_Security#Security.

Vero, ma non è tanto quello il punto quanto piuttosto il fatto che rimane presente la debolezza principale: anche fixando tutte le falle possibili ed immaginabili nei protocolli di comunicazione, tanto basterebbe comunque riuscire ad ottenere una copia della chiave privata del certificato SSL per poter comunque riuscire a decodificare il traffico intercettato.

Come scritto nell'articolo, ammesso e non concesso che non ci sia un accesso secondario ai database delle società, l'unica vera debolezza di design nelle comunicazioni attuali è, a tutt'oggi, il continuare ad utilizzare un algoritmo per lo scambio delle chiavi che non permetta la Perfect Forward Secrecy.

Ed è una roba non da poco purtroppo, perché basta ottenere tale chiave privata per vedersi aprire, automaticamente, tutte le comunicazioni crittografate in un batter d'occhio

!fazz
08-08-2013, 12:46
Grazie per la precisazione. :)

Dunque è il core del kernel, che rimane in ogni caso la parte più importante.

A me ha scritto solo questo: "You are not authorized to view this file."

Mi sembra scontato, ma se i ricercatori di sicurezza dovessero stare nella speranza di averli sempre a portata di mano, avrebbero cambiato mestiere da un pezzo. ;)

Intanto mi è nuova questa cosa, come dicevo. Ma poi bisognerebbe verificare se il "si disse" corrisponde a verità.

Le backdoor non hanno la stessa conformazione di una vulnerabilità: sono due cose completamente diverse.

Quello fu un brutto periodo per altri motivi, e una notte di quei bombardamenti si portò via cinque membri della mia famiglia materna, compresi i loro beni.

Per il caso di cui parliamo la questione è diversa. Mi spiego sotto.

Perché hai scoperto che le spie... spiano?

Inutile indignarci per delle ovvietà. Lo si dovrebbe fare, invece, perché queste problematiche si potevano risolvere a monte e non è stato fatto (http://www.appuntidigitali.it/18320/il-caso-prism-debolezze-del-protocollo-rsa/).

ma appunto sono anni et anni che si sa che rsa non è sicuro 7-8 sicuri probabilmente anche di più

eraser
08-08-2013, 12:54
ma appunto sono anni et anni che si sa che rsa non è sicuro 7-8 sicuri probabilmente anche di più

Dire che RSA non è sicuro credo sia un po azzardata come affermazione :)

In questo caso stiamo parlando di una specifica applicazione dell'RSA, cioè l'RSA applicato ad uno specifico campo (key exchange), che è debole e sconsigliata come scelta.

Ma che, in generale, l'RSA non sia sicuro è abbastanza forte come definizione.

L'RSA ad oggi è un algoritmo ritenuto forte, "inviolabile" se le chiavi non vengono trafugate. Forzare chiavi RSA a 2048 bit è considerato impossibile in tempi utili (con le tecnologie attuali), tanto più con le chiavi a 4096 bit.

!fazz
08-08-2013, 13:03
Dire che RSA non è sicuro credo sia un po azzardata come affermazione :)

In questo caso stiamo parlando di una specifica applicazione dell'RSA, cioè l'RSA applicato ad uno specifico campo (key exchange).

Ma che, in generale, l'RSA non sia sicuro è abbastanza forte come definizione.

L'RSA ad oggi è un algoritmo ritenuto forte, "inviolabile" se le chiavi non vengono trafugate. Forzare chiavi RSA a 2048 bit è considerato impossibile in tempi utili (con le tecnologie attuali), tanto più con le chiavi a 4096 bit.

forse era una vecchia implementazione ora i dettagli non me li ricordo, sono passati veramente troppi anni, ma aveva un problema algoritmico che abbassava di molto il tempo necessario per la forzatura, dovrei ricercare i vecchi appunti

eraser
08-08-2013, 13:09
forse era una vecchia implementazione ora i dettagli non me li ricordo, sono passati veramente troppi anni, ma aveva un problema algoritmico che abbassava di molto il tempo necessario per la forzatura, dovrei ricercare i vecchi appunti

Che ci possa essere stata una implementazione sbagliata dell'algoritmo RSA da parte di qualcuno in passato, quello è molto probabile :)

Ma il concetto alla base dell'RSA, il problema della fattorizzazione, è un vecchissimo concetto alla base della teoria dei numeri. Con le tecnologie attuali è impossibile riuscire a fattorizzare una chiave RSA 2048 bit in tempi utili (Per la 1024 ci siamo vicini).

L'unico punto debole è, per l'appunto, il fatto che faccia affidamento sulla segretezza della chiave privata, che può essere un problema nel key exchange perché, recuperata la chiave privata, hai automaticamente accesso alle chiavi di sessione

cdimauro
08-08-2013, 14:36
L'RSA è debole perché la fattorizzazione dei numeri primi è uno dei (pochi) compiti che un computer quantistico riesce a risolvere quasi istantaneamente (non ricordo adesso se il tempo diventa lineare; è passato troppo tempo da quando ho letto un paper in proposito).

Ovviamente computer del genere sono assolutamente fuori dalla portata di gente comune. Ma potrebbero non esserlo per un'agenzia che si occupa di sicurezza nazionale.

Certo, ci sarebbe di che discutere in che modo e se vale la pena interessarsi dell'enorme mole di dati che si cambiano miliardi di persone. PRISM ha dimostrato che... vale la pena. Infatti l'NSA fagocita i dati di tutti.

Per sentirsi tranquilli bisognerebbe utilizzare algoritmi diversi e che non siano così facilmente attaccabili perfino da un computer quantistico. Non sono un esperto di sicurezza, e dunque non ho conoscenze del genere.

Ricordo soltanto che per l'AES un computer quantistico riesce a crackarlo "soltanto" in un tempo che è la radice quadrata di quello necessario per un computer tradizionale. Quindi per un chiave a 128 bit, impiegherebbe un tempo nell'ordine di 2^64 (cioè (2^128)^1/2).
AES, però è ben diverso dall'RSA. Ne parlo esclusivamente per fornire un esempio di algoritmo "difficile" anche per un computer quantistico.
Ed è difficile perché, nonostante un computer quantistico riesca a ridurre di un fattore radice quadrata (che è un enorme passo avanti), è sufficiente raddoppiare la lunghezza della chiave per far diventare il problema "impossibile" da risolvere, al pari di un computer tradizionale.
Quindi per algoritmi come questi, se con chiavi di n bit sono difficili per un computer tradizionale, con chiavi di 2 * n bit lo saranno anche per quelli quantistici.

P.S. Scusate la digressione.

eraser
08-08-2013, 14:49
Si, certamente, se parliamo di computer quantistici la cosa cambia radicalmente ovviamente. È che ho dubbi sulla disponibilità a militari ed enti governativi di tali tecnologie al momento.

Però ecco, definire oggi l'RSA debole è azzardato a mio modo di vedere. Dire che è attaccabile con future tecnologie, sì, questo è assolutamente vero

shinya
09-08-2013, 08:37
Però ecco, definire oggi l'RSA debole è azzardato a mio modo di vedere. Dire che è attaccabile con future tecnologie, sì, questo è assolutamente vero
RSA è debole nel senso che nessuno lo implementa correttamente. Ed è attaccabile con la attuali tecnologie perché le implementazioni sono spesso sbagliate. Vedi le recenti news su cryptocat, ad esempio: http://tobtu.com/decryptocat.php
Dire RSA poi non vuol dire quasi niente, in sostanza, perché bisogna valutare il protocollo specifico: https://www.ietf.org/rfc/rfc3447.txt (paragrafo Encryption Schemes, ad esempio).

Come tutta la crittografia, è tricky. E difficile.

C'è anche da dire che la sensazione comune tra i crittografi è che uno schema basato sul principio che usa RSA non sarà più sostenibile da qui a 10 anni al massimo, e molti consigliano di spostarsi su ECC.
nacl, ad esempio, è una libreria nuova scritta da Bernstein e implementa solo una forma di crittografia a curva ellittica e non RSA.
http://nacl.cr.yp.to/valid.html
http://sockpuppet.org/blog/2013/07/22/applied-practical-cryptography/ (questo post parla di Cryptography Engineering, il libro, e fa anche alcune considerazioni su RSA ed ECC)

eraser
09-08-2013, 14:46
RSA è debole nel senso che nessuno lo implementa correttamente. Ed è attaccabile con la attuali tecnologie perché le implementazioni sono spesso sbagliate. Vedi le recenti news su cryptocat, ad esempio: http://tobtu.com/decryptocat.php


Non è scritto da alcuna parte che nessuno fa un'implementazione corretta di RSA. Il fatto che ci siano persone che decidono di implementare da sé i protocolli di crittografia e poi fanno errori logici nel codice non significa che l'RSA sia debole.

La frase "RSA è debole nel senso che nessuno lo implementa correttamente" è formulata in maniera errata.


Dire RSA poi non vuol dire quasi niente, in sostanza, perché bisogna valutare il protocollo specifico: https://www.ietf.org/rfc/rfc3447.txt (paragrafo Encryption Schemes, ad esempio).


Dire RSA significa parlare di un algoritmo di crittografia asimmetrica ben definito, che poi possa essere applicato insieme ad altre cose è un altro concetto. Ma se si dice RSA, significa RSA.

Si sta parlando dell'applicazione dell'RSA alla fase di key-exchange in linea puramente teorica


C'è anche da dire che la sensazione comune tra i crittografi è che uno schema basato sul principio che usa RSA non sarà più sostenibile da qui a 10 anni al massimo, e molti consigliano di spostarsi su ECC.


Sicuramente, questo è scritto nell'articolo linkato pochi post sopra. Ma avere sensazioni non significa che il principio dell'RSA sia ad oggi debole ed insicuro.

shinya
09-08-2013, 17:09
Non è scritto da alcuna parte che nessuno fa un'implementazione corretta di RSA. Il fatto che ci siano persone che decidono di implementare da sé i protocolli di crittografia e poi fanno errori logici nel codice non significa che l'RSA sia debole.

La frase "RSA è debole nel senso che nessuno lo implementa correttamente" è formulata in maniera errata.

Non mi sono spiegato bene. Non parlo di uno che si riscrive da zero una sua libreria che implementa tutto l'algoritmo. Parlo di uno che prende una libreria già fatta e fa delle scelte sbagliate. Ci sono diversi parametri che vanno scelti: esponenti, padding, ecc... Non è che chi attacca un sistema sta ad aspettare che il problema della fattorizzazione dei numeri primi venga risolto dal punto di vista matematico.
Il mio punto era: la crittografia è subdola, RSA è particolarmente subdolo.


Dire RSA significa parlare di un algoritmo di crittografia asimmetrica ben definito, che poi possa essere applicato insieme ad altre cose è un altro concetto. Ma se si dice RSA, significa RSA.

Si sta parlando dell'applicazione dell'RSA alla fase di key-exchange in linea puramente teorica

Faccio un esempio con AES perché RSA lo conosco poco.
Se uno mi dice "AES" non mi dice niente. Se uno mi dice "AES con chiave a 256 bit in modalità CBC e IV random", allora capisco già di più. AES è sempre AES, l'applicazione cambia. Per alcune applicazioni sono disponibili certi attacchi, per altre no. Se mi dici "AES" è sicuro, non mi dici niente.
Stesso discorso per RSA. RSA è sicuro? Dipende!


Sicuramente, questo è scritto nell'articolo linkato pochi post sopra. Ma avere sensazioni non significa che il principio dell'RSA sia ad oggi debole ed insicuro.
Sì oggi sì, se usi tutte le accortezze del caso. Ma se uno è chiamato a progettare un sistema che richieda crittografia lo fa pensando ai prossimi 20 anni, di solito.

Comunque va beh, non volevo dire niente di originale, è che ho visto che parlavate di computer quantistici e volevo solo dire che non c'è bisogno di computer quantistici perché la teoria è bella e forte ma la pratica è fatta spesso col culo.
C'è chi usa RSA per criptare i messaggi direttamente ad esempio, o usa le password così come sono come chiavi simmetriche senza passarle per una key derivation function... ne ho viste di ogni.

eraser
09-08-2013, 20:47
Non mi sono spiegato bene. Non parlo di uno che si riscrive da zero una sua libreria che implementa tutto l'algoritmo. Parlo di uno che prende una libreria già fatta e fa delle scelte sbagliate. Ci sono diversi parametri che vanno scelti: esponenti, padding, ecc... Non è che chi attacca un sistema sta ad aspettare che il problema della fattorizzazione dei numeri primi venga risolto dal punto di vista matematico.
Il mio punto era: la crittografia è subdola, RSA è particolarmente subdolo.


Faccio un esempio con AES perché RSA lo conosco poco.
Se uno mi dice "AES" non mi dice niente. Se uno mi dice "AES con chiave a 256 bit in modalità CBC e IV random", allora capisco già di più. AES è sempre AES, l'applicazione cambia. Per alcune applicazioni sono disponibili certi attacchi, per altre no. Se mi dici "AES" è sicuro, non mi dici niente.
Stesso discorso per RSA. RSA è sicuro? Dipende!


Credo effettivamente che ci sia un errore di comprensione, probabilmente causato da me che ho dato un passaggio per scontato e sottointeso.

Mi sembrava ovvio che quando dico che parlo di teoria dell'RSA intendo dire che stiamo parlando di un'implementazione corretta e, di conseguenza, della configurazione al momento più solida e tecnicamente corretta dell'RSA.

Se poi c'è chi si re-implementa i protocolli oppure li configura in maniera da renderli più vulnerabili, quello è un altro discorso che però è totalmente fuori dagli scopi di quello che intendevo dire io.

Lo stesso discorso vale per AES: se parlo di forza dell'algoritmo AES è ovvio - o almeno io do per scontato - che si parli dell'implementazione e configurazione corretta e solida dell'algoritmo AES.

L'UnicoVeroArcangelo
13-08-2013, 01:05
Ciao a tutti.. :) scusate avrei alcune domande riguardo Windows Research Kernel v1.2:
1. In che modo bisogna dimostrare di essere un accademico? Dovrò inviare una scannerizzazione del mio libretto universitario o basterà solo dichiararlo in fase di registrazione tramite un banale menu a tendina?
Vi pongo questa domanda perché non penso facciano scaricare con molta leggerezza della documentazione cosi importante (anche se incompleta)..

La domanda che segue nasce dal mio animo paranoico, quindi non leggetela a meno che non siate anche voi paranoici.. :asd:
2. Una volta scaricato inizierà una serie di eventi contro di me? :D :Prrr:
..Magari potrebbero decidere di tenere particolarmente controllato il mio pc; non si sa mai visto che le leggende metropolitane hanno sempre un velo di verità.. ;)


Grazie di tutto.. :)