Inizio studio di informatica, consiglio libri ecc
salve a tutti,
in questa estate vorrei iniziare a studiare un poco l'informatica di base (intendo al livello di conoscenza di uno o forse più linguaggi di programmazione, credo che uno sarà più probabile) e mi chiedevo se qualcuno di questo forum mi potrebbe consigliare dei libri che trattino di questa materia, inoltre, secondo voi, da quale linguaggio sarebbe meglio iniziare?
grazie a tutti
in questa estate vorrei iniziare a studiare un poco l'informatica di base (intendo al livello di conoscenza di uno o forse più linguaggi di programmazione, credo che uno sarà più probabile) e mi chiedevo se qualcuno di questo forum mi potrebbe consigliare dei libri che trattino di questa materia, inoltre, secondo voi, da quale linguaggio sarebbe meglio iniziare?
grazie a tutti
Risposte
Ciao. Io ti consiglio di studiare il linguaggio C oppure il C++ (il C++ è, per così dire, una versione aggiornata del C). Essi sono dei linguaggi molto potenti e sono quindi importantissimi da conoscere. Infatti, da questi linguaggi ne derivano altri, tra i quali Java e PHP.
Come inizio ti consiglio di cercare qualche manuale su internet: ne puoi trovare alcuni su www.html.it oppure basta che cerchi sui motori di ricerca tipo Google "Linguaggio C Manuale" oppure "Linguaggio C++ Manuale".
Ma prima di affrontare lo studio di un qualsiasi linguaggio di programmazione devi avere le basi sul funzionamento di un elaboratore elettronico. Ti dò delle parole chiave da approfondire:
1) Grandezza digitale e grandezza analogica
2) Sistema binario ed esadecimale
3) Conversione decimale-binario
4) Logica booleana e porte logiche AND, OR, NOT, XOR, NAND, NOR, XNOR
5) Bistabili (chiamati volgarmente "flip-flop")
6) Macchina di Von Neumann
Un linguaggio di programmazione per il momento basta e avanza... per imparare a scrivere programmi con destrezza con un solo linguaggio ci vogliono anni di studio ed esperienza... puoi imparare i costrutti di molti linguaggi in pochi giorni, ma per imparare a risolvere un problema informatico con un linguaggio di programmazione occorre molto molto tempo. Con questo non voglio scoraggiarti a studiare informatica, anzi, cerco di farti capire che è importante soffermarsi su un solo linguaggio, poi, magari, dopo un anno, puoi cominciare a orientarti verso altri linguaggi.
Come inizio ti consiglio di cercare qualche manuale su internet: ne puoi trovare alcuni su www.html.it oppure basta che cerchi sui motori di ricerca tipo Google "Linguaggio C Manuale" oppure "Linguaggio C++ Manuale".
Ma prima di affrontare lo studio di un qualsiasi linguaggio di programmazione devi avere le basi sul funzionamento di un elaboratore elettronico. Ti dò delle parole chiave da approfondire:
1) Grandezza digitale e grandezza analogica
2) Sistema binario ed esadecimale
3) Conversione decimale-binario
4) Logica booleana e porte logiche AND, OR, NOT, XOR, NAND, NOR, XNOR
5) Bistabili (chiamati volgarmente "flip-flop")
6) Macchina di Von Neumann
"marcus_id1993":
Intendo al livello di conoscenza di uno o forse più linguaggi di programmazione, credo che uno sarà più probabile
Un linguaggio di programmazione per il momento basta e avanza... per imparare a scrivere programmi con destrezza con un solo linguaggio ci vogliono anni di studio ed esperienza... puoi imparare i costrutti di molti linguaggi in pochi giorni, ma per imparare a risolvere un problema informatico con un linguaggio di programmazione occorre molto molto tempo. Con questo non voglio scoraggiarti a studiare informatica, anzi, cerco di farti capire che è importante soffermarsi su un solo linguaggio, poi, magari, dopo un anno, puoi cominciare a orientarti verso altri linguaggi.
"xshell":
Ciao. Io ti consiglio di studiare il linguaggio C oppure il C++ (il C++ è, per così dire, una versione aggiornata del C). Essi sono dei linguaggi molto potenti e sono quindi importantissimi da conoscere. Infatti, da questi linguaggi ne derivano altri, tra i quali Java e PHP.
Come inizio ti consiglio di cercare qualche manuale su internet: ne puoi trovare alcuni su www.html.it oppure basta che cerchi sui motori di ricerca tipo Google "Linguaggio C Manuale" oppure "Linguaggio C++ Manuale".
Ma prima di affrontare lo studio di un qualsiasi linguaggio di programmazione devi avere le basi sul funzionamento di un elaboratore elettronico. Ti dò delle parole chiave da approfondire:
1) Grandezza digitale e grandezza analogica
2) Sistema binario ed esadecimale
3) Conversione decimale-binario
4) Logica booleana e porte logiche AND, OR, NOT, XOR, NAND, NOR, XNOR
5) Bistabili (chiamati volgarmente "flip-flop")
6) Macchina di Von Neumann
[...]
A parte che il C++ non è un aggiornamento del C ma un linguaggio derivato, non c'è nessun vantaggio reale a incominciare un linguaggio invece che un altro. Il primo linguaggio serve ad imparare a programmare e in questo tra C, C++, C#, Java, Haskell, Ada, Pascal, Scheme, Lisp e Python non vi sono differenze (non consiglierei Assembly comunque).
In ogni caso per imparare è meglio che il linguaggio sia molto usato. Per esempio Ada è un buon linguaggio ma trovi difficilmente aiuto e tutorial. Quindi è meglio partire con C, C++, C#, Java o Python. Se sei vicino all'università e sai più o meno dove andrai potresti partire dal linguaggio che viene insegnato lì.
Secondo me i tutorial su internet sono da evitare. Cioè ci sono alcuni buoni manuali come "thinking in c++" ma spesso sono fatti male, quindi secondo me per il primo sarebbe più opportuno comprarsi un manuale qualsiasi sul linguaggio.
Sulle conoscenze preliminari non sono convinto che conoscenze di elettronica digitale siano particolarmente utili per un principiante magari neanche interessato a programmare sistemi embedded. Una base di algoritmi e delle basi di sistemi sono molto più utili.
Tra gli argomenti utili metterei:
1> differenze aritmetica finita/aritmetica elementare. E come sono memorizzati i tipi elementari in memoria.
2> differenze compilato/interpretato, assembly... con una aggiunta di funzionamento base del computer e soprattutto della CPU.
3> sistema binario, esadecimale e operatori logici
4> inglese
A seguire direi prendere un buon libro di algoritmi.
In generale condivido quanto detto da vict85.
Anche io mi sento di sconsigliarti i tutorial che trovi online, opterei invece per un buon testo che ti indroduca alla programmazione appoggiandosi a qualche linguaggio, ad esempio C o Java. Una volta fatto questo puoi muoverti più facilmente verso un linguaggio che ti interessa in particolare, anche qui utilizzando un buon testo e non tutorial, sempre secondo il mio parere.
Nel caso lo studio estivo ti serva da introduzione per l'università, bè ti consiglio di guardare le pagine dei corsi che frequenterai ed orientarti in base a quelle, sia come linguaggi che eventuali testi di riferimento.
Ciao!
Anche io mi sento di sconsigliarti i tutorial che trovi online, opterei invece per un buon testo che ti indroduca alla programmazione appoggiandosi a qualche linguaggio, ad esempio C o Java. Una volta fatto questo puoi muoverti più facilmente verso un linguaggio che ti interessa in particolare, anche qui utilizzando un buon testo e non tutorial, sempre secondo il mio parere.
Nel caso lo studio estivo ti serva da introduzione per l'università, bè ti consiglio di guardare le pagine dei corsi che frequenterai ed orientarti in base a quelle, sia come linguaggi che eventuali testi di riferimento.
Ciao!
Ciao, purtroppo io mi dissocio da tutti affermando che in internet si trova di tutto e di più. Personalmente i manuali (cartacei) li ho sempre detestati e da loro ho imparato poco solamente perché avevano una struttura interna molto particolare e difficilmente comprensibile al primo impatto. A maggior ragione, i libri cosidetti "didattici" (per scuole e università) sono i peggiori in circolazione. A parte un paio di libri "bibbia" sul C e sul Java, il resto lo escluderei. Quello che conta è un'altra cosa: la voglia di imparare da ogni fonte possibile (libri, internet, riviste, fotocopie, ...) purché risolva i nostri dubbi. Per questo mi piace internet dato che ci sono migliaia e migliaia di pagine web disponibili a darmi sempre una risposta.
Premetto che ho *qualche* anno di esperienza e che conosco più linguaggi di programmazione e che ho usato sempre lo stesso approccio per ognuno di essi, con risultati sempre positivi.
Vi spiego il mio approccio. Dopo aver scelto un linguaggio, bisogna essere UMILI e fare un passo alla volta, dimenticandosi delle varie interfaccie grafiche e delle prestazioni di certi programmoni e giochi: un passo alla volta e si arriva dove si vuole.
1) consultare una buona fonte (anche non cartacea) e provare a "giocare" con i comandi base acquisiti
2) aggiungere un altro comando e provare ad usarlo con quello precedente
3) qui fioriscono le prime idee di programmini, quindi bisogna avere pazienza per CERCARSI le cose mancano per realizzarli
4) da qui, scoprire altre cose che si possono fare aggiungendo altri comandi e altre funzionalità al programma.
5) dopo aver realizzato il nostro primo programma... viene naturale pensarne un'altro migliore da realizzare... e il gioco ricomincia.
In fin dei conti è tutto un gioco cioé quello di dire al computer cosa fare e di farlo come vuoi tu. Lui è sempre lì e tu hai tempo da dedicare per comunicargli cosa fare.
Con ordine potresti iniziare con programmini del genere:
- il classico "Hello World"
- il classico "Ciao"
- somma di numeri digitati da tastiera
- altre operazioni matematiche e geometriche
- cicli for / do / while
- calcolo del fattoriale
- esercizi sulle liste con i puntatori, con un algoritmo di ordinamento
- ricerca con il comando if
- esercizi sugli alberi, sempre con i puntatori
- creazione interfaccie utente... e quindi si parte con le cose più serie...
Per iniziare vanno benone i primi corsi reperibili anche su internet (usa "google") oppure le varie guide/manuali dei compilatori relativamente ai singoli comandi. Solo successivamente ti consiglierei di leggere i vari volumi cartacei (magari in biblioteca) per qualche consulto extra.
Ricordati comunque che la vera forza di imparare a programmare è nel VOLER imparare a programmare: se inizi con spirito giocherellone magari ti fermi già dopo due giorni. Un tipico test che mi piace porre a quelli che cominciano è questo:
Perché vuoi programmare?
(a) perché voglio imparare a programmare un computer ("fa figo!"... come di dice)
(b) perché ho in mente una cosa su cui farci un programma e vederlo girare su un computer...
Chi risponde (a) smetterà dopo una settimana... e mi dispiace per loro. Chi risponde (b) ha il vero animo da programmatore: riuscire a realizzare una sua idea (anche semplice) ma che funzioni in un computer. Questo però porta ad ostinarsi sugli errori di programmazione nelle lunghe notti d'estate, quando magari qualcuno andrebbe a bersi una birra al pub. Eh sì, ragazzi, questa è la verità: i veri programmatori rinunciano a certe cose pur di veder girare i propri programmi nel computer. Però è una soddisfazione.
Buona programmazione a tutti!
Nicola "Bryce"
Premetto che ho *qualche* anno di esperienza e che conosco più linguaggi di programmazione e che ho usato sempre lo stesso approccio per ognuno di essi, con risultati sempre positivi.
Vi spiego il mio approccio. Dopo aver scelto un linguaggio, bisogna essere UMILI e fare un passo alla volta, dimenticandosi delle varie interfaccie grafiche e delle prestazioni di certi programmoni e giochi: un passo alla volta e si arriva dove si vuole.
1) consultare una buona fonte (anche non cartacea) e provare a "giocare" con i comandi base acquisiti
2) aggiungere un altro comando e provare ad usarlo con quello precedente
3) qui fioriscono le prime idee di programmini, quindi bisogna avere pazienza per CERCARSI le cose mancano per realizzarli
4) da qui, scoprire altre cose che si possono fare aggiungendo altri comandi e altre funzionalità al programma.
5) dopo aver realizzato il nostro primo programma... viene naturale pensarne un'altro migliore da realizzare... e il gioco ricomincia.
In fin dei conti è tutto un gioco cioé quello di dire al computer cosa fare e di farlo come vuoi tu. Lui è sempre lì e tu hai tempo da dedicare per comunicargli cosa fare.
Con ordine potresti iniziare con programmini del genere:
- il classico "Hello World"
- il classico "Ciao
- somma di numeri digitati da tastiera
- altre operazioni matematiche e geometriche
- cicli for / do / while
- calcolo del fattoriale
- esercizi sulle liste con i puntatori, con un algoritmo di ordinamento
- ricerca con il comando if
- esercizi sugli alberi, sempre con i puntatori
- creazione interfaccie utente... e quindi si parte con le cose più serie...
Per iniziare vanno benone i primi corsi reperibili anche su internet (usa "google") oppure le varie guide/manuali dei compilatori relativamente ai singoli comandi. Solo successivamente ti consiglierei di leggere i vari volumi cartacei (magari in biblioteca) per qualche consulto extra.
Ricordati comunque che la vera forza di imparare a programmare è nel VOLER imparare a programmare: se inizi con spirito giocherellone magari ti fermi già dopo due giorni. Un tipico test che mi piace porre a quelli che cominciano è questo:
Perché vuoi programmare?
(a) perché voglio imparare a programmare un computer ("fa figo!"... come di dice)
(b) perché ho in mente una cosa su cui farci un programma e vederlo girare su un computer...
Chi risponde (a) smetterà dopo una settimana... e mi dispiace per loro. Chi risponde (b) ha il vero animo da programmatore: riuscire a realizzare una sua idea (anche semplice) ma che funzioni in un computer. Questo però porta ad ostinarsi sugli errori di programmazione nelle lunghe notti d'estate, quando magari qualcuno andrebbe a bersi una birra al pub. Eh sì, ragazzi, questa è la verità: i veri programmatori rinunciano a certe cose pur di veder girare i propri programmi nel computer. Però è una soddisfazione.
Buona programmazione a tutti!
Nicola "Bryce"
"Sergio":
Chiedo aiuto ai più giovani per segnalazioni specifiche, in quanto io ho usato l'ottimo (per quei tempi) Algorithms + Data Structures = Programs di Niklaus Wirth e sono poi passato a "testi tosti" come Data Structures and Algorithms di Aho, Hopcroft e Ullman.
Sicuramente è oggi disponibile qualcosa di più "fresco" del primo e di più abbordabile del secondo.
Io ho utilizzato il seguente, per il corso di Algoritmi e Strutture dati:
Introduzione agli algoritmi e strutture dati, di T. Cormen, C. Leiserson, R. Rivest, C. Stein, Edizioni McGraw Hill. Il libro è la traduzione italiana di Introduction to Algorithms, MIT Press.
Ok, ridimensiono i toni perché forse ho esagerato un poco.
Allora, i libri che considero buoni per programmare in C/C++ sono:
- Il linguaggio C di Kernighan & Ritchie (la "Bibbia del C")
- Algorithms + Data Structures = Programs di Niklaus Wirth
Gli altri altri, purtroppo, vengono dopo anche se vanno bene per una consultazione, al pari degli articoli di programmazione nelle riviste e dei siti web.
Con questo però non voglio dire che chi ha una "buona fonte" diventi un bravo programmatore. Bisognerebbe dire che chi è veramente motivato se la sa cavare sempre e magari riesce a comprendere la sintassi di un comando anche solo da un esempio di codice trovato in rete o nell'help in linea del compilatore. Magari è questo comando che ci creava problemi e con l'esempio di applicazione riesce a togliersi i dubbi. Secondo me, chi riesce ad imparare direttamente dai codici sorgente, senza passare dai manuali, diventerà bravo molto presto.
Per "Sergio" che ha risposto (a) alla domanda "Perché vuoi programmare?"... posso dire che è un caso particolare. Onestamente ho conosciuto varie persone che hanno cominciato con l'idea di (a) per poi smettere perché delusi dalla complessità e dall'inutilità della programmazione i semplici e inutili programmini. "Sergio" è riuscito a vedere qualcosa oltre questi programmini, ha tenuto duro e ha cominciato a "desiderare" di riportare le use idee nel computer... e vederle in azione. Complimenti a lui e a quelli come lui.
Nicola "bryce"
Allora, i libri che considero buoni per programmare in C/C++ sono:
- Il linguaggio C di Kernighan & Ritchie (la "Bibbia del C")
- Algorithms + Data Structures = Programs di Niklaus Wirth
Gli altri altri, purtroppo, vengono dopo anche se vanno bene per una consultazione, al pari degli articoli di programmazione nelle riviste e dei siti web.
Con questo però non voglio dire che chi ha una "buona fonte" diventi un bravo programmatore. Bisognerebbe dire che chi è veramente motivato se la sa cavare sempre e magari riesce a comprendere la sintassi di un comando anche solo da un esempio di codice trovato in rete o nell'help in linea del compilatore. Magari è questo comando che ci creava problemi e con l'esempio di applicazione riesce a togliersi i dubbi. Secondo me, chi riesce ad imparare direttamente dai codici sorgente, senza passare dai manuali, diventerà bravo molto presto.
Per "Sergio" che ha risposto (a) alla domanda "Perché vuoi programmare?"... posso dire che è un caso particolare. Onestamente ho conosciuto varie persone che hanno cominciato con l'idea di (a) per poi smettere perché delusi dalla complessità e dall'inutilità della programmazione i semplici e inutili programmini. "Sergio" è riuscito a vedere qualcosa oltre questi programmini, ha tenuto duro e ha cominciato a "desiderare" di riportare le use idee nel computer... e vederle in azione. Complimenti a lui e a quelli come lui.
Nicola "bryce"
Sugli algoritmi ci aggiungerei Sedgewick (il titolo dipende dal linguaggio ma in generale è algoritmi in nome_linguaggio)
Prima di imparare un linguaggio di programmazione (o in parallelo al tuo "primo" linguaggio) è opportuno capire bene la logica della programmazione. Dopo un tale studio, magari accompagnato dal sano Sebesta ""Concepts of programming languages" i vari linguaggi e dialetti ti appariranno nella loro imbarazzante nudità, con pregi e difetti, potenza e inadeguatezze (alcuni molto più di altri, e casualmente sono anche i più celebrati dal mercato
).
Nei corsi interni della nostra Azienda viene usato "Problem solving and programming concepts" di Sprankle (Pearson), ad esempio.
Molto bene per Sedgewick e CLRS, da segnalare anche il manuale di Skiena sugli algoritmi (datato, ma non va certo a male come il latte fresco) e di Bertossi "Algoritmi e strutture dati" (UTET). Per lo stile e la pulizia esistono vari manuali, dal classico di Pescio "C++ guida di stile" a "Programmazione nella pratica" di Kernighan e Pike, ma sono sempre di secondo ordine rispetto alla guida di stile che troverete già pronta nelle grandi Aziende e alle normative, che saranno la vostra unica luce se avrete la capacità e la voglia di lavorare in un settore critico rigidamente normato.
Inoltre è opportuno capire, almeno a grandi linee, cosa è e come è fatto un calcolatore elettronico dei nostri giorni.
In quello che scrivi molte cose non mi convincono (ad esempio, la qualità media del materiale reperibile sul web è semplicemente ignobile, impresentabile). Tanto che ho l'impressione che stiamo parlando di due tipi completamente diversi di "programmazione" con scale incommensurabili di "bravura".
La programmazione è collettivamente un'attività professionale su base scientifica (come i vari tipi di ingegneria) con limitati risvolti individualmente artigianali ed artistici (da cui derivano alcune difficoltà del software engineering nel mass market, rispetto all'edile o al navale o all'industriale): come tutte le discipline scientifiche, lo sviluppo del software s'impara su dei buoni libri e con dei sani laboratori, con impegno, motivazione, metodo e rigore, partendo dalla teoria e arrivando agli aspetti pratici implementativi, ai linguaggi vari, e alle abitudini invalse (qui subentra l'ingegneria vera e propria, con la comunità dei practitioners, le best practices e tutto il resto).
Gli algoritmi esistono da almeno un paio di millenni, e portano l'attuale nome da circa otto o nove secoli (i soliti svarioni degli amanuensi, che chiamarono un libro di algebra "indiana" col nome storpiato del suo autore, l'astronomo persiano Al-Kwarizmi), mentre i linguaggi di programmazione esistono da poche decine d'anni: se si tiene presente questo dato di realtà, tutto il resto è molto più facile.
Francamente, andando a memoria, tra i miei colleghi di studi, amici di BBS e mailing list tematiche, e oggi in mezzo ai circa 2.500 colleghi della Ditta dove lavoro, ho sempre e solo trovato una schiacciante maggioranza di professionisti che hanno imparato a programmare negli anni Ottanta e Novanta con l'idea "a" della tua lista. Forse tu hai in mente qualcos'altro, un altro ambiente ed anche un'altra epoca.

Nei corsi interni della nostra Azienda viene usato "Problem solving and programming concepts" di Sprankle (Pearson), ad esempio.
Molto bene per Sedgewick e CLRS, da segnalare anche il manuale di Skiena sugli algoritmi (datato, ma non va certo a male come il latte fresco) e di Bertossi "Algoritmi e strutture dati" (UTET). Per lo stile e la pulizia esistono vari manuali, dal classico di Pescio "C++ guida di stile" a "Programmazione nella pratica" di Kernighan e Pike, ma sono sempre di secondo ordine rispetto alla guida di stile che troverete già pronta nelle grandi Aziende e alle normative, che saranno la vostra unica luce se avrete la capacità e la voglia di lavorare in un settore critico rigidamente normato.
Inoltre è opportuno capire, almeno a grandi linee, cosa è e come è fatto un calcolatore elettronico dei nostri giorni.
"bryce":
Per "Sergio" che ha risposto (a) alla domanda "Perché vuoi programmare?"... posso dire che è un caso particolare. Onestamente ho conosciuto varie persone che hanno cominciato con l'idea di (a) per poi smettere perché delusi dalla complessità e dall'inutilità della programmazione i semplici e inutili programmini.
In quello che scrivi molte cose non mi convincono (ad esempio, la qualità media del materiale reperibile sul web è semplicemente ignobile, impresentabile). Tanto che ho l'impressione che stiamo parlando di due tipi completamente diversi di "programmazione" con scale incommensurabili di "bravura".
La programmazione è collettivamente un'attività professionale su base scientifica (come i vari tipi di ingegneria) con limitati risvolti individualmente artigianali ed artistici (da cui derivano alcune difficoltà del software engineering nel mass market, rispetto all'edile o al navale o all'industriale): come tutte le discipline scientifiche, lo sviluppo del software s'impara su dei buoni libri e con dei sani laboratori, con impegno, motivazione, metodo e rigore, partendo dalla teoria e arrivando agli aspetti pratici implementativi, ai linguaggi vari, e alle abitudini invalse (qui subentra l'ingegneria vera e propria, con la comunità dei practitioners, le best practices e tutto il resto).
Gli algoritmi esistono da almeno un paio di millenni, e portano l'attuale nome da circa otto o nove secoli (i soliti svarioni degli amanuensi, che chiamarono un libro di algebra "indiana" col nome storpiato del suo autore, l'astronomo persiano Al-Kwarizmi), mentre i linguaggi di programmazione esistono da poche decine d'anni: se si tiene presente questo dato di realtà, tutto il resto è molto più facile.
Francamente, andando a memoria, tra i miei colleghi di studi, amici di BBS e mailing list tematiche, e oggi in mezzo ai circa 2.500 colleghi della Ditta dove lavoro, ho sempre e solo trovato una schiacciante maggioranza di professionisti che hanno imparato a programmare negli anni Ottanta e Novanta con l'idea "a" della tua lista. Forse tu hai in mente qualcos'altro, un altro ambiente ed anche un'altra epoca.
"Sergio":
Sulla stessa linea Allen Holub, "storico" collaboratore del Dr. Dobb's Journal, curatore della splendida rubrica "C Chest" dal 1985 al 1988 (quando venne fatto fuori - sostituito dal noioso Al Stevens - perché aveva messo in evidenza i numerosi bachi del Microsoft C 5.0).
Diceva che per programmare bene conoscere il latino è più importante che conoscere la matematica.
Credo di non aver mai perso un numero di DDJ (ho anche le raccolte su CD) e condivido appieno la tua opinione. Gli anglosassoni spesso ci invidiano l'enorme ricchezza lessicale a le sfumature semantiche che a loro sovente mancano (esempio classico: "glass" significa due dozzine di cose terribilmente diverse tra loro, accomunate unicamente dal fatto di essere costituite di vetro...), e continuano a prendere in prestito latinismi a piene mani.
Riflettendo, si potrebbe dire lo stesso del tedesco: idioma da sempre considerato "LA" lingua per fare filosofia, dotato di declinazioni (come il latino) e di una grammatica ricchissima, sia quella attuale che soprattutto quella pre-riforma.
Ma in realtà, come faceva spesso notare il mio boss ai tempi in cui ero appena arrivato in Azienda, le nostre competenze simboliche sul linguaggio naturale sono un superset di quelle sui linguaggi formali: ed è sufficiente leggere in modo un po' smaliziato Calvino, Carroll, Borges o Musil per rendersene conto. Naturalmente all'inizio pensavo di essere capitato in una gabbia di matti: un corso biennale di formazione aziendale dove il formatore legge paginate di letteratura invece di spiegare i dettagli delle librerie, i trucchi per aggirare i difetti del compilatore, e riempirci la testa di technobabble ?
Poi ho capito: qualche anno dopo. Ho capito quando ho messo le mani sulle specifiche formali e sul codice prodotti da quel Maestro e dai suoi migliori allievi... l'unica cosa che mi sento di aggiungere in proposito, da ex evangelist dell'opensource, è questa parafrasi di Odifreddi: quasi tutti i numeri reali non si possono definire (Cantor), quasi tutte le funzioni di interi non si possono calcolare (Turing), quasi tutti i sistemi formali equipotenti all'aritmetica di Peano hanno dei "bug" logici (Godel), e quasi tutti i migliori sorgenti del mondo (in tutti i sensi correntemente in uso per l'ingegneria) non sono pubblicamente disponibili.

"Sergio":
[quote="vict85"]Sugli algoritmi ci aggiungerei Sedgewick (il titolo dipende dal linguaggio ma in generale è algoritmi in nome_linguaggio)
Concordo. Ho letto a suo tempo il suo Algorithms in C e mi era piaciuto molto, ma se lo consiglia un giovane come te vuol dire che è ancora attuale.
Quasi quasi... aggiungo Jon Louis Bentley, Writing Efficient Programs. Non so se si trova facilmente, ma credo sia ancora un classico.
E però.... non sottovaluterei l'aspetto "strutture di dati". Chi lo affronta, scopre presto mondi nuovi ai quali non avrebbe mai pensato. Mi pare, insomma, un argomento "affascinante" per chi ami l'informatica.[/quote]
Me l'ha consigliato uno su un forum di informatica che frequenta mio fratello. In ogni caso la terza edizione è relativamente nuova (nel senso che quello sul C avrà 10 anni, quello per Java ne ha meno di 5).
In ogni caso lo stiamo sommergendo di libri... Prima di imparare come bilanciare alberi binari dovrebbe almeno compilare un Hello Word...
"Andrea69":
Gli algoritmi esistono da almeno un paio di millenni, e portano l'attuale nome da circa otto o nove secoli (i soliti svarioni degli amanuensi, che chiamarono un libro di algebra "indiana" col nome storpiato del suo autore, l'astronomo persiano Al-Kwarizmi), mentre i linguaggi di programmazione esistono da poche decine d'anni: se si tiene presente questo dato di realtà, tutto il resto è molto più facile.
[Questo messaggio è frutto di una incomprensione e ho quindi deciso di cancellarlo]
Post intenzionalmente "sbiancato" causa incomprensioni.
"Andrea69":
PS: a proposito di precisazioni, "Algoritmi in C" è del 1990, la prima edizione italiana è datata 1993. L'edizione originale in inglese per "Algoritmi in C++" è datata 1992, nel 1993 è uscita l'edizione italiana.
[Parte del messaggio cancellata per le stesse ragioni del messaggio precedente]
P.S: L'ultimo algoritmi in C di Sedgewick in Italia è stato pubblicato nel 2002 basato sulla terza edizione americana (fortemente ampliata) del '97. E se leggi bene vedi che io ho parlato di 3° edizione, non ho mai messo in mezzo la prima...
Post intenzionalmente "sbiancato" causa incomprensioni.
[post eliminato dall'autore causa incomprensioni]
P.S: tutto ok anche per me
P.S: tutto ok anche per me
Per tornare alla discussione iniziale ritengo che molte di queste cose vadano fatte contemporaneamente allo studio del linguaggio. Per esempio le discussioni sulle strutture dati o gli algoritmi sono molto più efficaci se accompagnate con l'implementazione di queste strutture e di questi algoritmi.