View Full Version : C'è differenza tra C e C# ?
Albitexm
03-08-2008, 03:33
Io sto cercando d'imparare a programmare in C# , seguendo un libro : "Programmare in C" . Scritto da Peter Aitken e Bradley L.Jones. Edizione Apogeo. Questo libro mi è stato consigliato da uno studente universitario. Lui afferma che a ingenieria, gli insegnano il C con questo testo. Ebbene , quando io cerco di scrivere il codice d'esempio, presente al primo capitolo , ottengo errori con il compilatore Visual C# Express .
Il codice è:
#include <stdio.h>
main()
[
printf("Ciao a tutti\n");
return 0;
]
ps. la parentesi quadra in realtà è una graffa .
Quando scrivo questo codice , ottengo il seguente errore, riferito ad include :
"Errore 1 È prevista la direttiva per il preprocessore".
Ovviamente , tutti gli altri codici presenti nel libro , mi generano una sequenza d'errori. E' forse il libro datato e non più aggiornato ai compilatori odierni ? O perchè c'è differenza tra C e C# ? :help:
Inoltre : come faccio a scrivere la parentesi graffa? Ora quando scrivo nell'editor del compilatore uso il copia/incolla. Come faccio abbinare il simbolo a un tasto della tastiera?
variabilepippo
03-08-2008, 08:33
Se escludi la C in comune sono 2 linguaggi completamente diversi. Non puoi usare Visual C# per compilare codice C e viceversa, non è possibile compilare codice C# con un compilatore C.
||ElChE||88
03-08-2008, 08:48
Sono due linguaggi completamente diversi... butta via il libro sul C e prendi qualcosa sul C#...
Inoltre : come faccio a scrivere la parentesi graffa? Ora quando scrivo nell'editor del compilatore uso il copia/incolla. Come faccio abbinare il simbolo a un tasto della tastiera?
Shift + Alt Gr + è
Shift + Alt Gr + +
Il C ed il C# son totalmente diversi.. al massimo si potrebbe paragonare il C# a java anche se non sono proprio uguali, ma si assomigliano per certi punti.
Il libro sul C puoi pure buttarlo, non ti servirà a niente... comprati un buon libro sul C# ^^
ByeBye
demonbl@ck
03-08-2008, 09:13
C è olderrimo... :stordita:
Ziosilvio
03-08-2008, 10:05
Io sto cercando d'imparare a programmare in C# , seguendo un libro : "Programmare in C" . Scritto da Peter Aitken e Bradley L.Jones. Edizione Apogeo. Questo libro mi è stato consigliato da uno studente universitario. Lui afferma che a ingenieria, gli insegnano il C con questo testo.
Spero che questo studente non venga mai iscritto all'albo degli ingegneri.
Avevo sentito degli aneddoti sulla presunzione degli studenti di ingegneria di conoscere ogni ramo dello scibile, ma questo supera ogni limite.
Ma come si può suggerire di imparare un linguaggio adoperando un manuale di un linguaggio diverso?
E come fa uno studente di ingegneria a non sapere che C e C# sono due linguaggi diversi?
Bah...
Leggendo la pagina di Wikipedia su C# (http://en.wikipedia.org/wiki/C_Sharp_(programming_language)) ho trovato un link alla guida alla programmazione in C# su Microsoft Developers Network:
http://msdn.microsoft.com/en-us/library/67ef8sbd(VS.80).aspx
Forse puoi partire da lì, e probabilmente esiste una versione in italiano.
Se vuoi dei manuali su carta, cerca qualcosa di specifico sul C#.
Spero che questo studente non venga mai iscritto all'albo degli ingegneri.
Avevo sentito degli aneddoti sulla presunzione degli studenti di ingegneria di conoscere ogni ramo dello scibile, ma questo supera ogni limite.
Ma come si può suggerire di imparare un linguaggio adoperando un manuale di un linguaggio diverso?
E come fa uno studente di ingegneria a non sapere che C e C# sono due linguaggi diversi?
Bah...
Non ho ben capito se questo studente gli ha consigliato di imparare C# usando un manuale di C. Da quanto leggo, Albitexm ha deciso da solo di imparare C# con un libro di C :confused:, quindi se è così lo studente di Ingegneria non ha colpe. ;)
Sono due linguaggi completamente diversi... butta via il libro sul C e prendi qualcosa sul C#...
Shift + Alt Gr + è
Shift + Alt Gr + +
oppure ascii:
alt 123: {
alt 125: }
Albitexm
03-08-2008, 22:04
Non ho ben capito se questo studente gli ha consigliato di imparare C# usando un manuale di C. Da quanto leggo, Albitexm ha deciso da solo di imparare C# con un libro di C :confused:, quindi se è così lo studente di Ingegneria non ha colpe. ;)
In effetti , il mio collega , non sapeva quale compilatore usavo. E quando gli
ho parlato del visual C# , lui non conosceva ed è rimasto perplesso . Lui usava
il "turbo C" o turbo qualcosa, ora non ricordo bene. Ma vorrei fare sapere a tutti voi , quello che ho letto all'inizio del libro in questione . Riporto il testo letteralmente. A pagina 6 del libro , paragrafo 1.2 -Perchè utilizzare il C?- , è scritto :
"Molti si chiederanno quale sia la differenza tra C e C++ e se non sarebbe meglio imparare subito il C++ invece del C. In realtà non vi è nulla di cui preoccuparsi. Il C++ è un'estensione del C, il che significa che il primo contiene tutte le istruzioni del secondo e presenta nuove aggiunte mirate alla programmazione orientata agli oggetti. Chi ha intenzione d'imparare il C++ utilizzerà praticamente tutto quanto appreso in questo corso di C. Perciò, studiando il C non s'impara solo uno dei più potenti e diffusi linguaggi di programmazione, ma ci si prepara alla programmazione orientata agli ogetti. Un'altro linguaggio che ha ricevuto parecchie attenzioni in quest'ultimo periodo è Java, che come il C++ si basa sul C. Chi deciderà in seguito d'imparare il linguaggio Java, scoprirà che può mettere in pratica quasi tutto quanto appreso grazie a questo libro."
Ora capite , che dopo avere letto questa premessa , io ho scelto di usare questo libro e sono stato sorpreso dalle diffocoltà che ho elencato. Evidentemente gli autori non si sono spiegati bene , o in modo chiaro .
E' un classico dei libri tecnici , non esporre in modo chiaro le premesse ai principianti .
Albitexm
03-08-2008, 22:06
Sono due linguaggi completamente diversi... butta via il libro sul C e prendi qualcosa sul C#...
Shift + Alt Gr + è
Shift + Alt Gr + +
Grazie per i tasti
Albitexm
03-08-2008, 22:08
oppure ascii:
alt 123: {
alt 125: }[/QUOTE]
Thanks .
Albitexm
03-08-2008, 22:23
Spero che questo studente non venga mai iscritto all'albo degli ingegneri.
Avevo sentito degli aneddoti sulla presunzione degli studenti di ingegneria di conoscere ogni ramo dello scibile, ma questo supera ogni limite.
Ma come si può suggerire di imparare un linguaggio adoperando un manuale di un linguaggio diverso?
E come fa uno studente di ingegneria a non sapere che C e C# sono due linguaggi diversi?
Bah...
Leggendo la pagina di Wikipedia su C# (http://en.wikipedia.org/wiki/C_Sharp_(programming_language)) ho trovato un link alla guida alla programmazione in C# su Microsoft Developers Network:
http://msdn.microsoft.com/en-us/library/67ef8sbd(VS.80).aspx
Forse puoi partire da lì, e probabilmente esiste una versione in italiano.
Se vuoi dei manuali su carta, cerca qualcosa di specifico sul C#.
Grazie per i link . In effetti di presunzione d'ingenieri ne so qualcosa anchio.
Sul lavoro mi sono scontrato spesso con essa . Alcuni miei colleghi si pavoneggiavano di formule e teorie , salvo fare poi delle tampe colossali nella realizzazione pratica dei loro progetti. Tipo quello che aveva ideato un'apparecchiatura per risolvere un problema... Peccato che l'induttanza (bobina) di questa scheda , se realizzata in realtà , sarebbe pesata decine di chili e avrebbe occupato più di un metro cubo di volume. (ma lui se ne accorto dopo...). Comunque in questo caso , il mio collega non ha tutte le colpe. Leggi la mia risposta ad Unrue . Riporto quello che è scritto nel libro , riguardo al C e C++ . :read:
Ti segnalo un'altro link per imparare il C# segnalatomi sul forum microsoft: http://www.charlespetzold.com/dotnet/DotNetBookZero11.pdf
la parte finale dell'indirizzo è : dotnet/DotNetBookZero11.pdf
variabilepippo
03-08-2008, 22:27
E quando gli
ho parlato del visual C# , lui non conosceva ed è rimasto perplesso . Lui usava
il "turbo C"
Ottimi motivi per evitare i suoi consigli...;)
Come già detto C e C# sono linguaggi diversi, usati in contesti diversi, con finalità diverse, con strumenti diversi e con curve di apprendimento diverse.
Come mai stai studiando il linguaggio di programmazione (hai un obiettivo? Un esame da superare? Un settore che ti interessa particolarmente?)?
Albitexm
03-08-2008, 22:50
[/QUOTE]Originariamente inviato da Variabilepippo: Come già detto C e C# sono linguaggi diversi, usati in contesti diversi, con finalità diverse, con strumenti diversi e con curve di apprendimento diverse.
Come mai stai studiando il linguaggio di programmazione (hai un obiettivo? Un esame da superare? Un settore che ti interessa particolarmente?) [/QUOTE]
Per lavoro e per hobby .
Per lavoro , per personalizzare e migliorare i database che usiamo .
Ma a questo scopo ho visto che andrebbe benissimo anche Visual Basic.
Poi io sono appassionato di scacchi . La mia idea è quella di velocizzare i chess engines , usando CUDA sulle GPU NVidia . Ora CUDA è codice in C .
Inoltre tutti gli engines di scacchi opensource sono srcitti in C++ o C .
Ho visto che Python è abbastanza semplice ed è presente una buona documentazione in italiano. Il problema è che viene sconsigliato l'uso per i chess engines . Nei forum dedicati , ho letto che siccome non è compilato ma viene "tradotto" al momento dell'esecuzione, (quindi più lento nell'esecuzione) riduce del 20/30% le potenzialità del motore scacchistico eventualmente realizzato con esso .
Ziosilvio
04-08-2008, 00:23
il mio collega , non sapeva quale compilatore usavo
e va beh, nessuno sa tutto
E quando gli
ho parlato del visual C# , lui non conosceva ed è rimasto perplesso . Lui usava
il "turbo C" o turbo qualcosa, ora non ricordo bene.
:eek: :eek: :eek:
Un prof che in pieno 2008 fa usare un compilatore C per il DOS???
Ma dove insegna questo qui, all'Università di Rocca Cannuccia di Sotto?
Che lo si voglia o no, lo standard de facto dei compilatori C non commerciali è il GCC, che nella sua forma originale gira sotto *NIX/Linux/*BSD e nel sistema Cygwin per Windows.
Se si ha Windows e non si vuole usare Cygwin coi suoi bachi, si può installare MinGW (Minimalist GCC for Windows) e adoperare Eclipse come ambiente di sviluppo integrato; oppure adoperare Notepad++ come editor di testo e compilare da riga di comando; oppure installare Dev-C++, se si è molto pigri.
Ma insegnare a programmare in C su qualcosa di diverso, è corruzione della gioventù, e andrebbe perseguita penalmente.
Ma vorrei fare sapere a tutti voi , quello che ho letto all'inizio del libro in questione . Riporto il testo letteralmente. A pagina 6 del libro , paragrafo 1.2 -Perchè utilizzare il C?- , è scritto :
"Molti si chiederanno quale sia la differenza tra C e C++ e se non sarebbe meglio imparare subito il C++ invece del C. In realtà non vi è nulla di cui preoccuparsi. Il C++ è un'estensione del C, il che significa che il primo contiene tutte le istruzioni del secondo e presenta nuove aggiunte mirate alla programmazione orientata agli oggetti. Chi ha intenzione d'imparare il C++ utilizzerà praticamente tutto quanto appreso in questo corso di C. Perciò, studiando il C non s'impara solo uno dei più potenti e diffusi linguaggi di programmazione, ma ci si prepara alla programmazione orientata agli ogetti. Un'altro linguaggio che ha ricevuto parecchie attenzioni in quest'ultimo periodo è Java, che come il C++ si basa sul C. Chi deciderà in seguito d'imparare il linguaggio Java, scoprirà che può mettere in pratica quasi tutto quanto appreso grazie a questo libro."
Ora capite , che dopo avere letto questa premessa , io ho scelto di usare questo libro e sono stato sorpreso dalle diffocoltà che ho elencato. Evidentemente gli autori non si sono spiegati bene , o in modo chiaro .
E' un classico dei libri tecnici , non esporre in modo chiaro le premesse ai principianti .
Uhm... a me, non è che mi convinca gran che: OK che C e C++ sono simili a livello sintattico e che C++ è nato come "C con le classi", ma la filosofia di un grosso programma C++ è profondamente diversa da quella di un grosso programma C...
... tra l'altro, sono stato anche sul sito della Association of C and C++ Users (http://accu.org/)... e se il libro è quello che penso io (http://accu.org/index.php/book_reviews?url=view.xqy?review=t002215&term=aitkin+jones), la recensione era tutt'altro che lusinghiera...
[...] si può installare MinGW (Minimalist GCC for Windows) e adoperare Eclipse come ambiente di sviluppo integrato; argh :muro:
oppure adoperare Notepad++ come editor di testo e compilare da riga di comando; aargh :muro:
oppure installare Dev-C++ AAAAAAARRRRRGGGGGGHHHHH :mc: :mc: :mc:
ma Code::Blocks no eh?
cdimauro
04-08-2008, 07:40
Poi io sono appassionato di scacchi . La mia idea è quella di velocizzare i chess engines , usando CUDA sulle GPU NVidia . Ora CUDA è codice in C .
Inoltre tutti gli engines di scacchi opensource sono srcitti in C++ o C .
Ho visto che Python è abbastanza semplice ed è presente una buona documentazione in italiano. Il problema è che viene sconsigliato l'uso per i chess engines . Nei forum dedicati , ho letto che siccome non è compilato ma viene "tradotto" al momento dell'esecuzione, (quindi più lento nell'esecuzione) riduce del 20/30% le potenzialità del motore scacchistico eventualmente realizzato con esso .
Sì, prestazionalmente non credo che arriverà mai ai livelli di C e C++ in termini di pura velocità di esecuzione.
Puoi provare questo: http://psyco.sourceforge.net/ che dovrebbe già offrirti un ottimo boost.
Personalmente utilizzerai Python per modellare velocemente l'engine, e successivamente riscriverei in C o C++ soltanto la parte critica per le prestazioni. In questo modo mi concentrei più sullo studio dell'engine, e soltanto quando servirebbero le prestazioni per il modello finale passerei la mano al profiler per individuare i colli di bottiglia da ottimizzare. :cool:
e va beh, nessuno sa tutto
:eek: :eek: :eek:
Un prof che in pieno 2008 fa usare un compilatore C per il DOS???
Ma dove insegna questo qui, all'Università di Rocca Cannuccia di Sotto?
Non credo sia l'unico: l'università è piena di gente incapace. :muro:
Che lo si voglia o no, lo standard de facto dei compilatori C non commericali è il GCC, che nella sua forma originale gira sotto *NIX/Linux/*BSD e nel sistema Cygwin per Windows.
Se si ha Windows e non si vuole usare Cygwin coi suoi bachi, si può installare MinGW (Minimalist GCC for Windows) e adoperare Eclipse come ambiente di sviluppo integrato; oppure adoperare Notepad++ come editor di testo e compilare da riga di comando; oppure installare Dev-C++, se si è molto pigri.
Ma insegnare a programmare in C su qualcosa di diverso, è corruzione della gioventù, e andrebbe perseguita penalmente.
Ehm... vale anche per Visual C Express Edition? :fiufiu:
Per chi ha Vista c'è anche un'altra possibilità: installare il nuovo subsystem POSIX-compliant, e successivamente installare il relativo SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=93FF2201-325E-487F-A398-EFDE5758C47F&displaylang=en) (e utilità varie) se proprio non si vuol fare a meno di lavorare con GCC et similia. :p
Nei forum dedicati , ho letto che siccome non è compilato ma viene "tradotto" al momento dell'esecuzione, (quindi più lento nell'esecuzione) riduce del 20/30% le potenzialità del motore scacchistico eventualmente realizzato con esso .
sarei molto curioso di conoscere da dove hanno preso quel "20-30%", perché ho idea che l'abbiamo sparato decisamente, come si dice, "a culo". tra l'altro c'è una bella differenza tra 20% e 30%.
Ziosilvio
04-08-2008, 22:51
ma Code::Blocks no eh?
In effetti, forse è il meno peggio...
Ehm... vale anche per Visual C Express Edition? :fiufiu:
Un po' no, perché si parlava di "standard de facto dei compilatori C non commerciali", cosa che M$ non è.
Un po' sì, perché insegnare Programmazione 1 su un sistema proprietario dovrebbe contare comunque come corruzione della gioventù.
DanieleC88
05-08-2008, 00:21
e se il libro è quello che penso io (http://accu.org/index.php/book_reviews?url=view.xqy?review=t002215&term=aitkin+jones), la recensione era tutt'altro che lusinghiera...
Tutt'altro che lusinghiera? Io direi proprio che lo stroncano! LOL, se il libro è davvero tutto come descrivono io corro a comprarlo, dev'essere un capolavoro di comicità. :asd:
Albitexm
05-08-2008, 01:36
Un prof che in pieno 2008 fa usare un compilatore C per il DOS???
Ma dove insegna questo qui, all'Università di Rocca Cannuccia di Sotto?
..
No , insegna al politecnico di Torino, facoltà di ingenieria elettronica .
Vorrei tra l'altro farti presente , che sono andato in una libreria scientifica ,
per cercare un libro sul C# come consigliato da voi. Non ho trovato niente d'interessante , ma ho trovato la versione aggiornata del testo dell'Apogeo .
E la libraia mi ha detto che in effetti, quel testo insieme ad un'altro è stato segnalato a loro , come testo utilizzato all'università. Tra l'altro ho trovato
questo libro anche alla Rizzoli e alla Mondadori . Questo la dice lunga sullo stato delle nostre università, o del commercio dei libri a esse collegato.
Albitexm
05-08-2008, 01:54
Sì, prestazionalmente non credo che arriverà mai ai livelli di C e C++ in termini di pura velocità di esecuzione.
Puoi provare questo: http://psyco.sourceforge.net/ che dovrebbe già offrirti un ottimo boost.
Personalmente utilizzerai Python per modellare velocemente l'engine, e successivamente riscriverei in C o C++ soltanto la parte critica per le prestazioni. In questo modo mi concentrei più sullo studio dell'engine, e soltanto quando servirebbero le prestazioni per il modello finale passerei la mano al profiler per individuare i colli di bottiglia da ottimizzare.
:p
Grazie per il link. Il tuo consiglio sul modo d'impostare il lavoro, è probabilmente una giusta strada. Io posseggo una versione di Blender, ottimizzata per i quadcore , realizzata esattamente così. Infatti al momento dell'installazione, ho dovuto "caricare" Python + C++ per farla funzionare (è così che ho conosciuto Python).
^TiGeRShArK^
05-08-2008, 02:13
No , insegna al politecnico di Torino, facoltà di ingenieria elettronica .
Vorrei tra l'altro farti presente , che sono andato in una libreria scientifica ,
per cercare un libro sul C# come consigliato da voi. Non ho trovato niente d'interessante , ma ho trovato la versione aggiornata del testo dell'Apogeo .
E la libraia mi ha detto che in effetti, quel testo insieme ad un'altro è stato segnalato a loro , come testo utilizzato all'università. Tra l'altro ho trovato
questo libro anche alla Rizzoli e alla Mondadori . Questo la dice lunga sullo stato delle nostre università, o del commercio dei libri a esse collegato.
Libreria scientifica con testi della Apogeo IN ITALIANO a Torino???? :eek: :eek: :eek:
...e pensavo di essere io nel terzo mondo... :stordita:
per fortuna che c'è internet :O
cdimauro
05-08-2008, 07:51
Un po' no, perché si parlava di "standard de facto dei compilatori C non commerciali", cosa che M$ non è.
Ehm... sbaglio o la storia dei compilatori non commerciali l'hai tirata fuori soltanto tu? :fiufiu:
Un po' sì, perché insegnare Programmazione 1 su un sistema proprietario dovrebbe contare comunque come corruzione della gioventù.
:eek: :eek: :eek:
Ti ordino, Stallman,
nemico della salvezza dell'utente:
riconosci la giustizia e la bontà di Gates
che con giusto giudizio ha condannato
la tua superbia e la tua invidia.
Esci da Ziosilvio, servo di Gates,
che Ballmer ha creato a sua immagine,
ha arricchito dei suoi applicativi,
ha adottato come figlio
della sua strategia (http://en.wikipedia.org/wiki/Embrace%2C_extend_and_extinguish).
Ti ordino, Stallman,
principe dell'open source:
riconosci il potere invincibile di MicroSoft:
egli ti ha sconfitto nel mercato,
ha trionfato su di te nei media,
ti ha disarmato con Visual Studio
e, risorgendo dall'antitrust,
ha portato i suoi programmi
nel regno del software.
Vattene da questa creatura, da Ziosilvio:
che il Programmatore, nascendo tra noi,
ha reso suo dipendente
e regalando Visual Studio ha intrappolato
con il suo codice.
Ti ordino, Stallman,
seduttore dei fanboy:
riconosci il Sistema Operativo di solidità e di sicurezza,
il Windows che respinge le tue trollate
e smaschera i tuoi bug.
Esci da questa creatura, Ziosilvio,
che Gates ha segnato con il suo sigillo (http://upload.wikimedia.org/wikipedia/en/6/69/Microsoft_logo_slogan.png).
Abbandona quest'utente:
Gates l'ha reso suo fedele consumatore
con l'attivazione del suo Windows.
Vattene, dunque, Stallman: vattene
nel nome di Gates di Ballmer e di Windows.
Allontanati per la fede e la preghiera nella Multinazionale.
Fuggi per il segno del santo Visual Studio di MicroSoft,
Sistema Operativo nostro.
Egli boota e gira nei cicli dei cicli.
Amen.
:ave: :ave: :ave:
Grazie per il link. Il tuo consiglio sul modo d'impostare il lavoro, è probabilmente una giusta strada. Io posseggo una versione di Blender, ottimizzata per i quadcore , realizzata esattamente così. Infatti al momento dell'installazione, ho dovuto "caricare" Python + C++ per farla funzionare (è così che ho conosciuto Python).
Sì, Blender usa Python come suo linguaggio di scripting. :)
L'approccio che ti ho consigliato deriva dall'esperienza: ciò che manca al programmatore è il tempo per modellare le soluzioni ai problemi che gli si presentano. Il tempo manca sempre.
Linguaggi come Python permettono di ridurre anche di un ordine di grandezza i tempi di sviluppo di un'applicazione, e permettono quindi di concentrarsi esclusivamente sulla soluzione lasciando perdere i dettagli.
Se, poi, dovesse presentarsi un problema di carattere prestazionale, c'è sempre spazio e tempo per cercare una soluzione algoritmica, adoperare un JIT (come Psyko, che ti ho segnalato prima) oppure riscrivere la parte critica in un linguaggio di più basso livello (cosa che spero non ti debba mai capitare :D). ;)
Ziosilvio
05-08-2008, 10:02
insegna al politecnico di Torino, facoltà di ingenieria elettronica
:cry:
sono andato in una libreria scientifica ,
per cercare un libro sul C# come consigliato da voi. Non ho trovato niente d'interessante , ma ho trovato la versione aggiornata del testo dell'Apogeo .
E la libraia mi ha detto che in effetti, quel testo insieme ad un'altro è stato segnalato a loro , come testo utilizzato all'università. Tra l'altro ho trovato
questo libro anche alla Rizzoli e alla Mondadori . Questo la dice lunga sullo stato delle nostre università, o del commercio dei libri a esse collegato.
Per ragioni indubbiamente commerciali, le librerie universitarie non prendono tutti i libri del mondo, ma si concentrano su quelli usati nelle università vicine.
Per fortuna ci sono i negozi via internet che ti spediscono i libri a casa, e soprattutto un sacco di gente che pubblica le proprie guide sul Web.
sbaglio o la storia dei compilatori non commerciali l'hai tirata fuori soltanto tu? :fiufiu:
Non sbagli: io ho parlato da sùbito di "compilatori non commerciali".
Ti ordino, Stallman,
nemico della salvezza dell'utente:
riconosci la giustizia e la bontà di Gates
che con giusto giudizio ha condannato
la tua superbia e la tua invidia.
Esci da Ziosilvio, servo di Gates,
che Ballmer ha creato a sua immagine,
ha arricchito dei suoi applicativi,
ha adottato come figlio
della sua strategia (http://en.wikipedia.org/wiki/Embrace%2C_extend_and_extinguish).
Ti ordino, Stallman,
principe dell'open source:
riconosci il potere invincibile di MicroSoft:
egli ti ha sconfitto nel mercato,
ha trionfato su di te nei media,
ti ha disarmato con Visual Studio
e, risorgendo dall'antitrust,
ha portato i suoi programmi
nel regno del software.
Vattene da questa creatura, da Ziosilvio:
che il Programmatore, nascendo tra noi,
ha reso suo dipendente
e regalando Visual Studio ha intrappolato
con il suo codice.
Ti ordino, Stallman,
seduttore dei fanboy:
riconosci il Sistema Operativo di solidità e di sicurezza,
il Windows che respinge le tue trollate
e smaschera i tuoi bug.
Esci da questa creatura, Ziosilvio,
che Gates ha segnato con il suo sigillo (http://upload.wikimedia.org/wikipedia/en/6/69/Microsoft_logo_slogan.png).
Abbandona quest'utente:
Gates l'ha reso suo fedele consumatore
con l'attivazione del suo Windows.
Vattene, dunque, Stallman: vattene
nel nome di Gates di Ballmer e di Windows.
Allontanati per la fede e la preghiera nella Multinazionale.
Fuggi per il segno del santo Visual Studio di MicroSoft,
Sistema Operativo nostro.
Egli boota e gira nei cicli dei cicli.
Amen.
MA :rotfl:
variabilepippo
05-08-2008, 10:46
Per fortuna ci sono i negozi via internet che ti spediscono i libri a casa, e soprattutto un sacco di gente che pubblica le proprie guide sul Web.
Fortuna?! Io userei il termine "iattura"... ;)
manu@2986
05-08-2008, 11:17
Spero che questo studente non venga mai iscritto all'albo degli ingegneri.
Avevo sentito degli aneddoti sulla presunzione degli studenti di ingegneria di conoscere ogni ramo dello scibile, ma questo supera ogni limite.
Ma come si può suggerire di imparare un linguaggio adoperando un manuale di un linguaggio diverso?
E come fa uno studente di ingegneria a non sapere che C e C# sono due linguaggi diversi?
Bah...
Leggendo la pagina di Wikipedia su C# (http://en.wikipedia.org/wiki/C_Sharp_(programming_language)) ho trovato un link alla guida alla programmazione in C# su Microsoft Developers Network:
http://msdn.microsoft.com/en-us/library/67ef8sbd(VS.80).aspx
Forse puoi partire da lì, e probabilmente esiste una versione in italiano.
Se vuoi dei manuali su carta, cerca qualcosa di specifico sul C#.
Beh considera che ci sono molti, molti, molti studenti di informatica che non sanno cos'è il c#:rolleyes: .....direi che siam tutti messi male....(ah io studio informatica):)
Ti ordino, Stallman,
nemico della salvezza dell'utente:
[***]
Fuggi per il segno del santo Visual Studio di MicroSoft,
Sistema Operativo nostro.
Egli boota e gira nei cicli dei cicli.
Amen.
:ave: :ave: :ave:
Complimenti :rotfl: :rotfl:
Questa è la cosa più nerd che io abbia mai letto. :sofico:
E il fatto che io abbia compreso appieno tutti i doppi sensi mi fa capire che debbo gettare il pc dalla finestra al più presto :mc:
Albitexm
05-08-2008, 21:40
sarei molto curioso di conoscere da dove hanno preso quel "20-30%", perché ho idea che l'abbiamo sparato decisamente, come si dice, "a culo". tra l'altro c'è una bella differenza tra 20% e 30%.
Nel post , era scritto che questi dati, sono stati pubblicati in un sito di
computer chess , dove un programmatore aveva fatto giocare diverse partite a una versione di un engine, scritto in C++ e sviluppato in Python da lui e da un'engine nativo Python, riscritto in C++. Partite contro altri programmi, sia opensource che commerciali. Il risultato era stato questa diminuzione di prestazioni con Python. L'ampio range di differenza (20-30%) dei risultati , non è cosa rara nel mondo dei chess engines. Questo perchè le prestazioni di un motore scacchistico dipendono da molte variabili : se è un programma "tattico" o "posizionale", se è "multivariante o no", se legge le endgames tablebase o no, il tempo delle partite (lampo,semilampo o lungo),il libro d'aperture utilizzato e le impostazioni di lettura di esso e in questo specifico caso anche come è stato "tradotto" (compilato) da un linguaggio all'altro. Ma anche non considerando tutte queste variabili, tu devi sapere, che uno stesso engine, su lo stesso PC , fornisce spesso analisi diverse a parità di tempo. Ecco cosa mi rispose Vasik Rajlich (l'autore di Rybka, attuale campione del mondo) quando io scrissi un topic sul suo forum , perchè ero preoccupato , a causa del fatto che Rybka e gli altri miei engines,
giocando online a volte facevano delle mosse e analizzando successivamente offline, seguivano altre strade. Io avevo paura che qualche hacker avesse preso il controllo del mio PC :
"I don't think your computer was hacked
It's quite normal for search to behave differently from one case to another. The technical word for it is 'search inconstency'. A search which never had any search inconsistency would be really weak.
Vas "
Ti espongo di seguito , un post di Vasik Rajlich , (che vorrei segnalarti, oltre a essere l'autore di Rybka ha anche studiato al MIT di Boston, ed è maestro internazionale di scacchi) riguardo l'uso di Java per i chess engines:
"I doubt that Java is good for a chess engine, especially a bitboard chess engine. In a bitboard engine, you do all sorts of really weird 64-bit arithmetic, and want absolute control at a bit level. It's really a perfect fit with C++.
Plus, there is the problem of protecting your algorithms from decoding.
Where Java is great is in rapid development, not worrying about deallocating stuff, etc. This really doesn't matter for a chess engine.
Vas "
Questo invece , è un post di un'utente del forum, riguardo l'uso di Python per
compilare i chess engines :
"May be? I'd be surprised if you got a pure Python chess engine within a factor 10 of the equivalent engine (ie. same evaluation and search) in C.
/* Steinar */ "
Albitexm
05-08-2008, 21:58
Libreria scientifica con testi della Apogeo IN ITALIANO a Torino???? :eek: :eek: :eek:
...e pensavo di essere io nel terzo mondo... :stordita:
per fortuna che c'è internet :O
Bah, andrò al più presto alla libreria sita davanti al politecnico stesso. Voglio propio vedere cosa hanno :rolleyes:
Beh considera che ci sono molti, molti, molti studenti di informatica che non sanno cos'è il c#:rolleyes: .....direi che siam tutti messi male....(ah io studio informatica):)
Si comunque non è che non conoscere cosa sia il C# implichi che lo studente non sappia nulla di informatica. Non è così famoso come C, C++ o Java, solo in questi ultimi anni è venuto fuori.
Contando poi che non è mai praticamente usato per scopi didattici, può benissimo capitare che uno studente di informatica non ne abbia mai sentito parlare.
Il sapere dell'informatico non è nel conoscere i nomi di tutti i linguaggi che vi sono in giro, che sono numerosissimi.
Grazie per i link . In effetti di presunzione d'ingenieri ne so qualcosa anchio.
Non facciamo di tutta l'erba un fascio. Come in tutte le facoltà, c'è chi si atteggia e non sa nulla, chi si atteggia e conosce le cose, chi non si atteggia e non conosce nulla e chi non si atteggia e conosce tutto( i migliori secondo me). ;)
Se escludi la C in comune sono 2 linguaggi completamente diversi. Non puoi usare Visual C# per compilare codice C e viceversa, non è possibile compilare codice C# con un compilatore C.
falso, sono diversi ma non completamente diversi. hanno in comune la sintassi, tutto ciò che riguarda la programmazione strutturata e anche i puntatori
C è olderrimo... :stordita:
eh si, praticamente inutile...da buttare via :fagiano: :D
manu@2986
07-08-2008, 02:14
Si comunque non è che non conoscere cosa sia il C# implichi che lo studente non sappia nulla di informatica. Non è così famoso come C, C++ o Java, solo in questi ultimi anni è venuto fuori.
Contando poi che non è mai praticamente usato per scopi didattici, può benissimo capitare che uno studente di informatica non ne abbia mai sentito parlare.
Il sapere dell'informatico non è nel conoscere i nomi di tutti i linguaggi che vi sono in giro, che sono numerosissimi.
Hai ragione anche tu, solo che per come la vedo io, se non si ha una minima passione e/o interesse per quello che si fa non si va da nessuna parte...
...non so se mi son spiegato bene ed hai capito ciò che intendo...
^TiGeRShArK^
07-08-2008, 05:29
Il sapere dell'informatico non è nel conoscere i nomi di tutti i linguaggi che vi sono in giro, che sono numerosissimi.
i nomi??!?!
io ho studiato *almeno* la sintassi di praticamente tutti i linguaggi che nomino...
...a parte il Common LISP che non nomino praticamente mai... :mbe:
cazz..
Non sapere cosa sia il C# x me è MOLTO diverso rispetto a non sapere cosa sia il brainfuck...:stordita:
sarò io che sbaglio...
però nel 2008 mi pare davvero un eresia non conoscere uno dei due linguaggi + richiesti dalle aziende europee (non mi spingo a dire "di tutto il mondo" perchè sinceramente in india e in USA non so quali sono i linguaggi + richiesti..) :fagiano:
cdimauro
07-08-2008, 07:22
falso, sono diversi ma non completamente diversi. hanno in comune la sintassi, tutto ciò che riguarda la programmazione strutturata e anche i puntatori
BOOOM! La sintassi in comune non vuol dire nulla. Basta prendere JavaScript, ad esempio. :D
eh si, praticamente inutile...da buttare via :fagiano: :D
Parole sante. :ave:
tomminno
07-08-2008, 07:37
Hai ragione anche tu, solo che per come la vedo io, se non si ha una minima passione e/o interesse per quello che si fa non si va da nessuna parte...
...non so se mi son spiegato bene ed hai capito ciò che intendo...
Guarda che Ingegnere != Programmatore
Uno che fa ingegneria non ha come scopo quello di andare a fare il programmatore, anzi spererebbe di fare altro.
tomminno
07-08-2008, 07:40
però nel 2008 mi pare davvero un eresia non conoscere uno dei due linguaggi + richiesti dalle aziende europee (non mi spingo a dire "di tutto il mondo" perchè sinceramente in india e in USA non so quali sono i linguaggi + richiesti..) :fagiano:
Richiesto per la qualifica di Programmatore!
Un Ingegnere fa (in teoria) un lavoro diverso dal Programmatore.
Da un Ingegnere meccanico ti aspetti che sappia cambiare la cinghia di distribuzione delle auto?
No, ti aspetti che sappia progettare un motore, non che sappia prendere in mano chiave inglese e chiave dinamometrica per smontare un motore o usare il tornio per modificare i pistoni. Per quello c'è il meccanico.
cdimauro
07-08-2008, 07:49
Eppure ormai basta essere iscritti all'ordine degli ingegneri per poter firmare progetti di informatica. :muro:
variabilepippo
07-08-2008, 08:22
falso, sono diversi ma non completamente diversi. hanno in comune la sintassi, tutto ciò che riguarda la programmazione strutturata e anche i puntatori
Hanno in comune la sintassi? Quindi basta che due linguaggi siano vagamente C-like per non essere completamente diversi?! Dunque Javascript e C non sono 2 linguaggi diversi (così come C e C#, così come C e Java, etc), pensati per utilizzi diversi, con un livello di astrazione diverso, con in dotazione un framework di base assolutamente diverso, con un livello di portabilità del tutto non comparabile? La sintassi "comune" non li rende meno diversi. Ti dirò di più: anche C e C++ sono linguaggi completamente diversi. Anche se c'è chi pensa che entrambi abbiano in comune la sintassi, tutto ciò che riguarda la programmazione strutturata e anche i puntatori (con tutte le limitazioni del caso).
E teniamo comunque presente che affermare "non sono completamente diversi" crea non poca confusione in programmatori alle prime armi, chi ha aperto il thread ha esordito con "Io sto cercando d'imparare a programmare in C# , seguendo un libro : Programmare in C". Secondo me è bene fargli capire che si tratta di una cosa impossibile, mentre è male affermare "falso, non sono completamente diversi".
tomminno
07-08-2008, 08:28
Eppure ormai basta essere iscritti all'ordine degli ingegneri per poter firmare progetti di informatica. :muro:
Perchè c'è qualcuno che firma progetti informatici strettamente legati alla programmazione?
C'è bisogno della firma per 3 fregnacce in UML sicuramente sbagliate?
Io ho visto firme solo su progetti di sistemi informatici che niente hanno a che vedere con la programmazione.
cdimauro
07-08-2008, 08:42
Spero di no, ma sulla carta QUALUNQUE ingegnere può firmare progetti di informatica. :muro:
BOOOM! La sintassi in comune non vuol dire nulla. Basta prendere JavaScript, ad esempio. :D
Hanno in comune la sintassi? Quindi basta che due linguaggi siano vagamente C-like per non essere completamente diversi?! Dunque Javascript e C non sono 2 linguaggi diversi (così come C e C#, così come C e Java, etc), pensati per utilizzi diversi, con un livello di astrazione diverso, con in dotazione un framework di base assolutamente diverso, con un livello di portabilità del tutto non comparabile? La sintassi "comune" non li rende meno diversi. Ti dirò di più: anche C e C++ sono linguaggi completamente diversi. Anche se c'è chi pensa che entrambi abbiano in comune la sintassi, tutto ciò che riguarda la programmazione strutturata e anche i puntatori (con tutte le limitazioni del caso).
la sintassi fa parte del linguaggio e fino a prova contraria C# si è ispirato a C.
E teniamo comunque presente che affermare "non sono completamente diversi" crea non poca confusione in programmatori alle prime armi, chi ha aperto il thread ha esordito con "Io sto cercando d'imparare a programmare in C# , seguendo un libro : Programmare in C". Secondo me è bene fargli capire che si tratta di una cosa impossibile, mentre è male affermare "falso, non sono completamente diversi".
ma anche no!
sempre fino a prova contraria hanno in comune la sintassi, tutto ciò che riguarda la programmazione strutturata e i puntatori, quindi può benissimo imparare C e poi dedicarsi alla programmazione a oggetti in C# come è già stato ampiamente argomentato in un'altro thread
variabilepippo
07-08-2008, 10:07
la sintassi fa parte del linguaggio e fino a prova contraria C# si è ispirato a C.
Nessuno mette in dubbio che il C# sia un linguaggio C-like, il punto è un altro: qualche somiglianza a livello di sintassi non può accomunare 2 linguaggi completamente diversi come C e C#.
Come sai bene:
1) Si usano in contesti diversi. Perché?
2) Uno è orientato agli oggetti l'altro no
3) Hanno una libreria standard del tutto diversa
4) Molti costrutti presenti nel C# non sono presenti nel C e viceversa
5) L'uso dei puntatori in C# presenta molte limitazioni
6) Uno è managed l'altro no
7) Uno è molto più portabile dell'altro
E' un po' come confrontare mele e banane, entrambe sono classificabili come frutta ma per il resto (sapore, colore, forma, ...) non hanno nulla in comune. E se impari a sbucciare una mela, poi dovrai iniziare da capo quando deciderai di passare a gustarti le banane. :oink: :D
ma anche no!
sempre fino a prova contraria hanno in comune la sintassi,
Non hanno in comune la sintassi, hanno in comune qualche caratteristica della sintassi. Prova a scrivere l'Hello World più semplice che ti venga in mente in C# e poi compilalo con un compilatore C... Vedi cosa ne pensa il compilatore di questa tua affermazione sulla sintassi "in comune". :cool:
Lo stesso C++, che per molti versi è più vicino al C di quanto lo sia il C#, presenta molte "incompatibilità" a livello di sintassi con il C.
tutto ciò che riguarda la programmazione strutturata e i puntatori,
Quindi tutto ciò che puoi fare con i puntatori in C puoi farlo anche in C# e viceversa? :rolleyes:
quindi può benissimo imparare C e poi dedicarsi alla programmazione a oggetti in C# come è già stato ampiamente argomentato in un'altro thread
A che pro!?! Perché studiare il C quando poi si vuole imparare il C# e viceversa?! Uno è un Assembly ad alto livello, l'altro un linguaggio di programmazione ad oggetti basato su un framework che da solo richiede anni di studio per essere usato al meglio.
la sintassi fa parte del linguaggio e fino a prova contraria C# si è ispirato a C. aaaaah ecco svelato il mistero, infatti mi ero sempre chiesto da dove venissero fuori in C# certe keywords come class, operator, delegate... :fagiano:
Nessuno mette in dubbio che il C# sia un linguaggio C-like, il punto è un altro: qualche somiglianza a livello di sintassi non può accomunare 2 linguaggi completamente diversi come C e C#.
Come sai bene:
1) Si usano in contesti diversi. Perché?
2) Uno è orientato agli oggetti l'altro no
3) Hanno una libreria standard del tutto diversa
4) Molti costrutti presenti nel C# non sono presenti nel C e viceversa
5) L'uso dei puntatori in C# presenta molte limitazioni
6) Uno è managed l'altro no
7) Uno è molto più portabile dell'altro
E' un po' come confrontare mele e banane, entrambe sono classificabili come frutta ma per il resto (sapore, colore, forma, ...) non hanno nulla in comune. E se impari a sbucciare una mela, poi dovrai iniziare da capo quando deciderai di passare a gustarti le banane. :oink: :D
Non hanno in comune la sintassi, hanno in comune qualche caratteristica della sintassi. Prova a scrivere l'Hello World più semplice che ti venga in mente in C# e poi compilalo con un compilatore C... Vedi cosa ne pensa il compilatore di questa tua affermazione sulla sintassi "in comune". :cool:
Lo stesso C++, che per molti versi è più vicino al C di quanto lo sia il C#, presenta molte "incompatibilità" a livello di sintassi con il C.
Quindi tutto ciò che puoi fare con i puntatori in C puoi farlo anche in C# e viceversa? :rolleyes:
A che pro!?! Perché studiare il C quando poi si vuole imparare il C# e viceversa?! Uno è un Assembly ad alto livello, l'altro un linguaggio di programmazione ad oggetti basato su un framework che da solo richiede anni di studio per essere usato al meglio.
ne abbiamo già parlato l'altra volta e nessuno è riuscito a dimostrare che imparare il C è inutile (vedi programmazione strutturata, puntatori e familiarizzazione con la sintassi C-like)
ps. perchè i puntatori in C# sono limitati? :mbe: l'unica cosa che li differenzia dal C (che io sappia) è che bisogna metterli in un blocco unsafe
aaaaah ecco svelato il mistero, infatti mi ero sempre chiesto da dove venissero fuori in C# certe keywords come class, operator, delegate... :fagiano:
se vuoi ti svelo un'altro mistero:
sintassi C-like significa sintassi ispirata al C
cdimauro
07-08-2008, 10:53
ne abbiamo già parlato l'altra volta e nessuno è riuscito a dimostrare che imparare il C è inutile (vedi programmazione strutturata, puntatori e familiarizzazione con la sintassi C-like)
L'abbiamo dimostrato, ma hai la memoria corta.
Se vuoi rispolvero i thread, li riuppo, ma poi mi devi dimostrare la tua affermazione e non si finirà fino a quando non si metterà la parola fine sulla questione. OK?
se vuoi ti svelo un'altro mistero:
sintassi C-like significa sintassi ispirata al C
Il che ha poco a che vedere con la sostanza, quindi non mi pare che l'affermazione di variabilepippo che hai contestato con quel "falso" fosse... falsa.
Ha detto che in comune C e C# hanno la "C": verissimo, visto che sono entrambi C-like, ma per il resto sono diversi.
Non si capisce, quindi, il motivo della tua contestazione, visto che adesso hai indietreggiato e hai ripiegato soltanto sul "sono entrambi C-like". :rolleyes:
sintassi C-like significa sintassi ispirata al C assolutamente no: il C avrà si e no la metà della sintassi e delle keywords che ha il C++, eppure il C++ ha una sintassi C-like :fagiano:
sintassi C-like significa sintassi lontanamente ispirata al C: significa che ha le parentesi graffe e poco altro.
L'abbiamo dimostrato, ma hai la memoria corta.
Se vuoi rispolvero i thread, li riuppo, ma poi mi devi dimostrare la tua affermazione e non si finirà fino a quando non si metterà la parola fine sulla questione. OK?
rispolvera pure, ma non serve.
ti basterebbe dimostrare che in C# non vi è traccia della programmazione strutturata e dei puntatori (ma mi soffermerei sulla prima che è più importante).
Il che ha poco a che vedere con la sostanza, quindi non mi pare che l'affermazione di variabilepippo che hai contestato con quel "falso" fosse... falsa.
Ha detto che in comune C e C# hanno la "C": verissimo, visto che sono entrambi C-like, ma per il resto sono diversi.
Non si capisce, quindi, il motivo della tua contestazione, visto che adesso hai indietreggiato e hai ripiegato soltanto sul "sono entrambi C-like". :rolleyes:
e invece non è vero e il perchè è scritto nel mio primo post in questa discussione, ma forse hai fatto finta di non leggerlo e ti sei soffermato sulla sintassi.
in ogni caso io non ho indietreggiato un bel niente, C# ha una sintassi C-like e quindi se uno conosce il C non deve nemmeno fare lo sforzo iniziale di imparare quei 4 simboli che usano tutti i linguaggi C-like.
o forse credi che pensavo che si potesse compilare codice C con un compilatore C#?
il caso vuole che ci ho fatto la tesi con C#
(ma mi soffermerei sulla prima che è più importante). più che altro ti soffermeresti sulla prima per evitare rogne col codice unmanaged, di' la verità.
assolutamente no: il C avrà si e no la metà della sintassi e delle keywords che ha il C++, eppure il C++ ha una sintassi C-like :fagiano:
sintassi C-like significa sintassi lontanamente ispirata al C: significa che ha le parentesi graffe e poco altro.
mbè? io intendevo appunto questo, saranno anche la metà delle keyword ma intanto le conosci già.
passare da C a C# è senza dubbio più facile che passare da pascal a C# tanto per fare un paragone.
come è più facile passare da pascal a delphi rispetto a C->delphi.
variabilepippo
07-08-2008, 11:22
perchè i puntatori in C# sono limitati?
Perché in C# un puntatore può puntare soltanto ad un indirizzo di memoria che contenga un tipo base (http://msdn.microsoft.com/en-us/library/y31yhkeb(VS.80).aspx) o un array, dunque niente reference type (classi), né strutture contenenti reference type né tipi managed. Per esempio in C# non puoi usare i puntatori a funzione, per implementare un meccanismo simile devi usare i delegate.
sintassi C-like significa sintassi ispirata al C
Così come Java, Javascript ed una pletora di altri linguaggi sono ispirati al C, ma da qui ad affermare che non sono linguaggi completamente diversi ce ne passa! :rolleyes:
mbè? io intendevo appunto questo, saranno anche la metà delle keyword ma intanto le conosci già.
passare da C a C# è senza dubbio più facile che passare da pascal a C# tanto per fare un paragone.
come è più facile passare da pascal a delphi rispetto a C->delphi.
ah, k0nt3 e le sue visioni d'insieme: paragonerebbe un missile ad una patata :asd:
più che altro ti soffermeresti sulla prima per evitare rogne col codice unmanaged, di' la verità.
no, solo perchè lo ritengo più importante :Prrr:
comunque è codice unsafe non unmanaged
variabilepippo
07-08-2008, 11:25
passare da C a C# è senza dubbio più facile che passare da pascal a C# tanto per fare un paragone.
come è più facile passare da pascal a delphi rispetto a C->delphi.
Su questo ci sono pochi dubbi, ma io continuo a chiedermi perché un programmatore alle prime armi debba passare dal C al C# invece di partire direttamente dal C# (e studiarsi il C quando e se ne avrà bisogno).
Se qualcuno vuole imparare l'italiano non deve partire dal francese perché entrambe sono lingue neolatine... Studi direttamente l'italiano, poi, se ne avrai bisogno imparerai anche il francese.
paragonerebbe un missile ad una patata
Entrambe si possono lanciare... :D
Perché in C# un puntatore può puntare soltanto ad un indirizzo di memoria che contenga un tipo base (http://msdn.microsoft.com/en-us/library/y31yhkeb(VS.80).aspx) o un array, dunque niente reference type (classi), né strutture contenenti reference type né tipi managed. Per esempio in C# non puoi usare i puntatori a funzione, per implementare un meccanismo simile devi usare i delegate.
si beh ma nemmeno in C puoi puntare a tipi reference :Prrr:
per i puntatori a funzione hai ragione, ma in questo caso non c'è stata la necessità di introdurli perchè ci sono i delegate.
quello che intendo dire è che C# ha tutta l'aritmetica dei puntatori esattamente come il C
Così come Java, Javascript ed una pletora di altri linguaggi sono ispirati al C, ma da qui ad affermare che non sono linguaggi completamente diversi ce ne passa! :rolleyes:
con calma... è ovvio che sono diversi, supportano pure paradigmi di programmazione diversi. ho solo detto che non sono completamente diversi perchè hanno in comune la programmazione strutturata, i puntatori e la sintassi C-like.
Su questo ci sono pochi dubbi, ma io continuo a chiedermi perché un programmatore alle prime armi debba passare dal C al C# invece di partire direttamente dal C# (e studiarsi il C quando e se ne avrà bisogno).
non lo so, non sto mica dicendo da cosa è meglio partire.
probabilmente perchè C# è un linguaggio molto complesso, a questo punto magari è meglio java
Se qualcuno vuole imparare l'italiano non deve partire dal francese perché entrambe sono lingue neolatine... Studi direttamente l'italiano, poi, se ne avrai bisogno imparerai anche il francese.
sempre riguardo "missili vs. patate" :asd:
sinceramente non so cos'hanno in comune l'italiano e il francese, della seconda mi ricordo solo che è un'eccezione trovare una "non eccezione"
manu@2986
07-08-2008, 11:39
Guarda che Ingegnere != Programmatore
Uno che fa ingegneria non ha come scopo quello di andare a fare il programmatore, anzi spererebbe di fare altro.
Perchè, l'unico scopo di chi fa informatica è andare a fare il programmatore??
In ogni caso, il mio discorso era appunto rivolto a molta gente che conosco che fa "informatica"...
no, solo perchè lo ritengo più importante :Prrr: non badare a quel post, ero io che non avevo capito un cacchio :fagiano:
hai scritto "ti basterebbe dimostrare ...", ho letto "mi basterebbe dimostrare" :fagiano:
mi ritiro con umiltà... :ops2:
ho solo detto che non sono completamente diversi perchè hanno in comune la programmazione strutturata, i puntatori e la sintassi C-like. ma certo, adesso JavaScript ha i puntatori :rolleyes:
(a meno che non ho capito un cavolo pure stavolta :fagiano: )
variabilepippo
07-08-2008, 11:42
ho solo detto che non sono completamente diversi perchè hanno in comune la programmazione strutturata, i puntatori e la sintassi C-like.
Quando due linguaggi sono "completamente diversi"? A me basta che:
- Abbiano una sintassi diversa, non è sufficiente che sia vagamente simile, IMHO C e C++ sono linguaggi diversi in quanto un compilatore C++ compilerà buona parte del codice C, C e Java/Javascript/C# sono linguaggi completamente diversi perché usati in ambiti, con strumenti, con finalità completamente differenti.
- Operino ad un livello di astrazione diversa: molto low-level il C, abbastanza high-level il C#.
- Si basino su paradigmi diversi, come nel caso di C e C#
Se a te bastano i puntatori (molti linguaggi li supportano, Pascal compreso), la programmazione strutturata (vedi parentesi precedente) e la sintassi C-like (adottata da una marea di linguaggi) allora si può fare un bel minestrone ed affermare che tutti i linguaggi, in fondo in fondo, sono simili.
Per l'utente che ha aperto il thread: C e C# sono linguaggi diversi, non puoi usare un libro sul C per imparare il C# e viceversa e non puoi usare un compilatore C per compilare codice C# e viceversa. Buona parte delle cose che imparerai sul C non sono valide in C#, le poche (cicli, condizionamenti, ...) che ti servono anche in C# vengono spiegate da qualsiasi libro sul C#.
non badare a quel post, ero io che non avevo capito un cacchio :fagiano:
hai scritto "ti basterebbe dimostrare ...", ho letto "mi basterebbe dimostrare" :fagiano:
mi ritiro con umiltà... :ops2:
Liberté, Égalité, Umilté :O :p
ma certo, adesso JavaScript ha i puntatori :rolleyes:
(a meno che non ho capito un cavolo pure stavolta :fagiano: )
beh per i puntatori mi riferisco solo a C# :fagiano:
[...] allora si può fare un bel minestrone ed affermare che tutti i linguaggi, in fondo in fondo, sono simili. il concetto di missile e patata.
comunque vorrei far notare una cosa: in Java non ci sono puntatori :fagiano:
ci sono i riferimenti, non i puntatori. so bene che esiste una NullPointerException, ma secondo me è un nome sbagliato.
variabilepippo
07-08-2008, 11:47
sinceramente non so cos'hanno in comune l'italiano e il francese
Hanno in comune molto più di quanto abbiano in comune C e C#, entrambe sono lingue neolatine (per tornare al tuo concetto di C-like molto estensivo), in entrambe puoi strutturare le frasi in maniera molto simile (mentre C e C# adottano paradigmi diversi), il livello di astrazione non è differente (la stessa cosa non si può dire se si parla di C e C#).
Se il francese ti sembra troppo diverso dall'italiano (strano per uno che vede C e C# come 2 linguaggi non completamente diversi) da non riuscire a capire il paragone, sostituisci il francese con lo spagnolo, così ritroverai anche tante keyword identiche... :D
Quando due linguaggi sono "completamente diversi"? A me basta che:
- Abbiano una sintassi diversa, non è sufficiente che sia vagamente simile, IMHO C e C++ sono linguaggi diversi in quanto un compilatore C++ compilerà buona parte del codice C, C e Java/Javascript/C# sono linguaggi completamente diversi perché usati in ambiti, con strumenti, con finalità completamente differenti.
- Operino ad un livello di astrazione diversa: molto low-level il C, abbastanza high-level il C#.
- Si basino su paradigmi diversi, come nel caso di C e C#
Se a te bastano i puntatori (molti linguaggi li supportano, Pascal compreso), la programmazione strutturata (vedi parentesi precedente) e la sintassi C-like (adottata da una marea di linguaggi) allora si può fare un bel minestrone ed affermare che tutti i linguaggi, in fondo in fondo, sono simili.
per me due linguaggi completamente diversi sono prolog e ada per esempio. in questo caso si che imparare uno dei due non ti aiuta in nessuna maniera a imparare l'altro
Per l'utente che ha aperto il thread: C e C# sono linguaggi diversi, non puoi usare un libro sul C per imparare il C# e viceversa e non puoi usare un compilatore C per compilare codice C# e viceversa. Buona parte delle cose che imparerai sul C non sono valide in C#, le poche (cicli, condizionamenti, ...) che ti servono anche in C# vengono spiegate da qualsiasi libro sul C#.
sono quasi daccordo, tranne sul fatto che buona parte delle cose che impari in C non servono più a niente in C#.
alla fine quello che c'è da imparare nel C è essenzialmente programmazione strutturata + puntatori e già non è banale (anche se il linguaggio fosse C#).
quando si vuole imparare C# invece bisogna studiare la programmazione a oggetti e ragionare in un'ottica di più alto livello, ma questo non si fa mai all'inizio nemmeno se si parte con C#. non ho mai visto un corso di programmazione che inizia con il polimorfismo :sofico:
Ziosilvio
07-08-2008, 11:57
la sintassi fa parte del linguaggio
ma anche la semantica ne fa parte, e quella del C# è abbastanza diversa da quella del C...
Ah, dimenticavo: My hovercraft is full of eels.
Hanno in comune molto più di quanto abbiano in comune C e C#, entrambe sono lingue neolatine (per tornare al tuo concetto di C-like molto estensivo), in entrambe puoi strutturare le frasi in maniera molto simile (mentre C e C# adottano paradigmi diversi), il livello di astrazione non è differente (la stessa cosa non si può dire se si parla di C e C#).
Se il francese ti sembra troppo diverso dall'italiano (strano per uno che vede C e C# come 2 linguaggi non completamente diversi) da non riuscire a capire il paragone, sostituisci il francese con lo spagnolo, così ritroverai anche tante keyword identiche... :D
beh si a questo punto il paragone si può anche fare. trovo che sia più semplice imparare lo spagnolo o il francese per un che sa già l'italiano piuttosto che il cinese o l'arabo :Prrr: quelle si che non ci azzeccano niente
Ziosilvio
07-08-2008, 12:01
trovo che sia più semplice imparare lo spagnolo o il francese per un che sa già l'italiano
Ma se uno non sa l'italiano e deve imparare il francese, vale la pena di fargli imparare per forza l'italiano?
variabilepippo
07-08-2008, 12:05
per me due linguaggi completamente diversi sono prolog e ada per esempio. in questo caso si che imparare uno dei due non ti aiuta in nessuna maniera a imparare l'altro
Quindi anche C e Pascal non sono poi così diversi... Ai tempi del DOS, a parte qualche differenza sintattica tutto ciò che sviluppavi in C potevi svilupparlo pari pari anche in Pascal. :rolleyes: I puntatori c'erano in entrambi, la programmazione strutturata pure, livello di astrazione non era diverso, il paradigma neanche bisognava solo adattarsi ad usare i begin/end al posto delle parentesi graffe. :rolleyes:
non ho mai visto un corso di programmazione che inizia con il polimorfismo
Esistono molti libri&corsi che partono direttamente dall'approccio object-oriented alla programmazione/progettazione. SE uno vuole imparare l'OOP non ha senso partire da un paradigma diverso, si rischia di perdere la visione d'insieme.
tomminno
07-08-2008, 12:07
il concetto di missile e patata.
comunque vorrei far notare una cosa: in Java non ci sono puntatori :fagiano:
ci sono i riferimenti, non i puntatori. so bene che esiste una NullPointerException, ma secondo me è un nome sbagliato.
In Java no ma in C# si :D
grigor91
07-08-2008, 12:19
SE uno vuole imparare l'OOP non ha senso partire da un paradigma diverso, si rischia di perdere la visione d'insieme.
Ci sarà anche chi dice che non ha senso imparare la programmazione procedurale perchè si rischia di perdere la visione del dettaglio.
Secondo me non c'è un pensiero completamente esatto, ognuno dovrebbe scegliere quello che più gli aggrada; questo vale naturalmente per un autodidatta, per chi va a scuola purtoppo è obbligato a iniziare dalla programmazione procedurale.
ma anche la semantica ne fa parte, e quella del C# è abbastanza diversa da quella del C...
il prato è verde quindi il mare non può essere blu
Ma se uno non sa l'italiano e deve imparare il francese, vale la pena di fargli imparare per forza l'italiano?
no, infatti non ho mai detto che bisogna per forza imparare prima C
Quindi anche C e Pascal non sono poi così diversi... Ai tempi del DOS, a parte qualche differenza sintattica tutto ciò che sviluppavi in C potevi svilupparlo pari pari anche in Pascal. :rolleyes: I puntatori c'erano in entrambi, la programmazione strutturata pure, livello di astrazione non era diverso, il paradigma neanche bisognava solo adattarsi ad usare i begin/end al posto delle parentesi graffe. :rolleyes:
esattamente :cool: io imparato prima pascal e poi C e ti posso assicurare che l'unica difficoltà è tradurre i simboli che si usavano in pascal in simboli che si usano in C.
Esistono molti libri&corsi che partono direttamente dall'approccio object-oriented alla programmazione/progettazione. SE uno vuole imparare l'OOP non ha senso partire da un paradigma diverso, si rischia di perdere la visione d'insieme.
io ho visto corsi che partono da linguaggi OO, ma prima di arrivare a definire un qualche concetto di programmazione OO (cioè ereditarietà, polimorfismo, incapsulamento ecc...) passano un pò di lezioni.
sarebbe interessante se ci fossero corsi che prima spiegano la teoria della programmazione OO così uno parte direttamente a scrivere programmi OO in un linguaggio OO
tomminno
07-08-2008, 12:46
Spero di no, ma sulla carta QUALUNQUE ingegnere può firmare progetti di informatica. :muro:
Se pensi che il babbo di un mio compagno di università è ingegnere meccanico con la ditta di informatica...
Non c'è separazione tra gli albi quindi tutti gli ingegneri sono praticamente uguali.
Io ad esempio potrei firmare il progetto di un motore di un missile perchè nel mio piano di studi ho fatto sistemi energetici.
Ma non posso firmare il progetto di una diga perchè non ho fatto scienza delle costruzioni.
In informatica purtroppo non succede niente di così catastrofico come il crollo di una diga o la caduta di un missile se a capo di un progetto c'è un emerito incompetente.
tomminno
07-08-2008, 12:49
Perchè, l'unico scopo di chi fa informatica è andare a fare il programmatore??
Nel caso dell'ingegnere non è proprio il tuo lavoro, tanto che nel piano di studi la programmazione non viene insegnata, te la devi imparare da solo se ti va altrimenti vai avanti lo stesso.
In informatica purtroppo non succede niente di così catastrofico come il crollo di una diga o la caduta di un missile se a capo di un progetto c'è un emerito incompetente.
beh oddio.. dipende :stordita:
LONDON AMBULANCE SERVICE
Era stato creato un sistema automatizzato per gestire il servizio delle ambulanze che derivava
dall'unificazione di 3 servizi diversi; doveva esserci l'ottimizzazione dei percorsi, la guida vocale degli
autisti, la gestione delle chiamate, i backup, la localizzazione in tempo reale delle ambulanze, lo stato
dei pazienti e molto altro.
Il software purtroppo era progettato male, con errori, senza sistemi di controllo in caso di errori, con
l'impossibilità di fare i backup, la mancata preparazione del personale, la mancata conoscenza (da parte
dei progettisti) del problema; ed è costato, non solo vite umane, ma anche 11 milioni di euro; l'ultima
versione è stata abbandonata dopo soli 3 giorni. Si può dire che questo è uno dei disastri più "eclatanti"
cdimauro
07-08-2008, 13:01
rispolvera pure, ma non serve.
ti basterebbe dimostrare che in C# non vi è traccia della programmazione strutturata e dei puntatori (ma mi soffermerei sulla prima che è più importante).
Eh no, caro mio: non è che lanci la pietra e poi ritiri la mano. Se dobbiamo riprendere la discussione sarà esclusivamente sulla base di questo:
nessuno è riuscito a dimostrare che imparare il C è inutile (vedi programmazione strutturata, puntatori e familiarizzazione con la sintassi C-like)
senza restrizioni e deviazioni varie.
Se te la senti rispolvero i bookmark e riprendiamo, ma non ho alcuna intenzione di perderci tempo se vuoi modificare il contesto e la finalità della discussione.
Sul resto ovviamente concordo con gli altri. ;)
non ho mai visto un corso di programmazione che inizia con il polimorfismo :sofico:
Perché non conosci una pietra miliare come questa: http://en.wikipedia.org/wiki/Object-Oriented_Software_Construction :cool:
Se pensi che il babbo di un mio compagno di università è ingegnere meccanico con la ditta di informatica...
Non c'è separazione tra gli albi quindi tutti gli ingegneri sono praticamente uguali.
Io ad esempio potrei firmare il progetto di un motore di un missile perchè nel mio piano di studi ho fatto sistemi energetici.
Ma non posso firmare il progetto di una diga perchè non ho fatto scienza delle costruzioni.
In informatica purtroppo non succede niente di così catastrofico come il crollo di una diga o la caduta di un missile se a capo di un progetto c'è un emerito incompetente.
Perché non hai considerato il programma di controllo del nocciolo di una centrale nucleare, o quello di una pacemaker ad esempio, o ancora proprio quello del controllo di un missile. ;)
tomminno
07-08-2008, 13:04
beh oddio.. dipende :stordita:
Che dire ho lavorato per 2 anni praticamente sulla stessa cosa, che è bellamente disusata in 2 province toscane, pagata dalla regione e mai utilizzato perchè... "Ma chè vedono a quanto vado?"
In ogni caso è come dire che se il navigatore ti dice di andare diritto ad una curva e te ci vai, non puoi dare tutte le colpe al sistema.
E perchè il caso del razzo Arianne V che cascò al primo lancio perchè era stato lasciato un modulo di controllo dei giroscopi del razzo Arianne IV che calcolava in miglia invece che nel SI?
Oltretutto si accorsero poi che quel modulo non serviva più a niente...
variabilepippo
07-08-2008, 13:20
In informatica purtroppo non succede niente di così catastrofico come il crollo di una diga o la caduta di un missile se a capo di un progetto c'è un emerito incompetente.
Se sviluppi un gestionale difficilmente riuscirai a fare vittime... Ma in molti casi bug nel software possono risultare letali: controllo di centrali nucleari, dispositivi biomedicali, applicazioni militari, settore automotive, etc.
Nell'EULA di vecchi sistemi operativi Microsoft si può leggere:
"The software product may contain support for programs written in Java. Java technology is not fault tolerant and is not designed, manufactured, or intended for use or resale as on-line control equipment in hazardous environments requiring fail-safe performance, such as in the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, direct life support machines , or weapon systems, in which the failure of Java technology could lead directly to death, personal injury, or severe physical or environmental damage".
Ziosilvio
07-08-2008, 13:22
In informatica purtroppo non succede niente di così catastrofico come il crollo di una diga o la caduta di un missile se a capo di un progetto c'è un emerito incompetente.
Il missile vettore Ariane V è esploso al primo volo perché avevano riciclato un modulo che adoperava numeri a 16 bit anziché 32 (mi pare) e gestiva le eccezioni in un modo che risultava corretto sul vecchio Ariane IV, ma inadatto al nuovo missile più veloce.
Un incrociatore lanciamissili americano classe Ticonderoga è rimasto diverse ore fermo in mezzo all'oceano perché l'ufficialetto aveva inserito uno 0 come divisore in una divisione, e l'eccezione era stata gestita talmente male da risultare in un blocco del sistema.
Pare che il sistema operativo fosse Windows NT.
All'aeroporto di (mi pare) Detroit il sistema di smistamento bagagli i bagagli li faceva a pezzi.
cdimauro
07-08-2008, 13:30
Il missile vettore Ariane V è esploso al primo volo perché avevano riciclato un modulo che adoperava numeri a 16 bit anziché 32 (mi pare) e gestiva le eccezioni in un modo che risultava corretto sul vecchio Ariane IV, ma inadatto al nuovo missile più veloce.
Sì, ricordo questa storia. Mi pare il problema fosse relativo a un cast da virgola mobile a intero a 16 bit, ma il risultato andava fuori dal range di quest'ultimo. :D
Un incrociatore lanciamissili americano classe Ticonderoga è rimasto diverse ore fermo in mezzo all'oceano perché l'ufficialetto aveva inserito uno 0 come divisore in una divisione, e l'eccezione era stata gestita talmente male da risultare in un blocco del sistema.
Pare che il sistema operativo fosse Windows NT.
Penso che il s.o. in questo caso c'entrasse poco. :p
All'aeroporto di (mi pare) Detroit il sistema di smistamento bagagli i bagagli li faceva a pezzi.
:rotfl: Non oso immaginare che fine abbiano fatto gli animaletti che viaggiavano assieme ai bagagli. :asd:
:rotfl: Non oso immaginare che fine abbiano fatto gli animaletti che viaggiavano assieme ai bagagli. :asd: oh mio Dio, Ctrl+D subito, questo thread si sta riempiendo di perle :D :D :D
ambulanze che non trovano la strada e i pazienti muoiono, lanci spaziali falliti, navi ferme in mezzo al mare... e poi lo sfracellamento dei bagagli è fantastico :rotfl:
a proposito, dubito che il software che ha ammazzato i pazienti morenti nelle ambulanze costasse 11 milioni di euro: da quanto leggo la cosa si è svolta a Londra.
manu@2986
07-08-2008, 14:06
Un incrociatore lanciamissili americano classe Ticonderoga è rimasto diverse ore fermo in mezzo all'oceano perché l'ufficialetto aveva inserito uno 0 come divisore in una divisione, e l'eccezione era stata gestita talmente male da risultare in un blocco del sistema.
Pare che il sistema operativo fosse Windows NT.
All'aeroporto di (mi pare) Detroit il sistema di smistamento bagagli i bagagli li faceva a pezzi.
Cioè..complimenti ai programmatori e all'ufficiale che divide per 0:doh: :D
Quella dei bagagli è una perla!!:asd:
Eh no, caro mio: non è che lanci la pietra e poi ritiri la mano. Se dobbiamo riprendere la discussione sarà esclusivamente sulla base di questo:
nessuno è riuscito a dimostrare che imparare il C è inutile (vedi programmazione strutturata, puntatori e familiarizzazione con la sintassi C-like)
senza restrizioni e deviazioni varie.
Se te la senti rispolvero i bookmark e riprendiamo, ma non ho alcuna intenzione di perderci tempo se vuoi modificare il contesto e la finalità della discussione.
:mbe: per dimostrare che quello che ho scritto non è vero ti basterebbe appunto dimostrare che in C# non vi è traccia della programmazione strutturata e dei puntatori (ma mi soffermerei sulla prima che è più importante).
non c'è bisogno di tirare in ballo pietre e mani
cdimauro
07-08-2008, 19:50
Ma guarda che così l'hai dimostrato da solo che il C è inutile. Se esiste un linguaggio che:
- permette la programmazione strutturata;
- ha i puntatori;
- ha la sintassi C-like;
- consente di fare più cose del C;
mi spieghi che senso ha imparare il C?
A maggior ragione se, oltre a permettere di fare più cose, è pure un SUPERSET del C.
Se poi dici di soffermarci sulla prima parte (quindi escludendo la sintassi C-Like, che già di per sé non rappresenta NESSUN "valore aggiunto" per un linguaggio), allora non c'è propria storia: di linguaggi che permettono di fare le stesse cose in maniera decisamente meno oscura e contorta ne esistono un bel po'...
deve essere per questo che da quando hanno inventato i motorini la bicicletta è diventata inutile :fagiano:
comunque io ho detto che non è vero che tutto quello che si apprende con il C va dimenticato e non serve a niente. è semplicemente falso e l'ho spiegato il perchè.
se poi volete continuare a parlare dei vostri gusti personali per me è ok
cdimauro
07-08-2008, 20:23
deve essere per questo che da quando hanno inventato i motorini la bicicletta è diventata inutile :fagiano:
Esempio che non c'entra nulla.
comunque io ho detto che non è vero che tutto quello che si apprende con il C va dimenticato e non serve a niente. è semplicemente falso e l'ho spiegato il perchè.
Idem, e te lo ripeto: non c'è proprio NESSUN motivo per cui valga la pena imparare il C.
se poi volete continuare a parlare dei vostri gusti personali per me è ok
Non è questione di gusti, ma di fatti OGGETTIVI. Dammi un qualunque VALORE AGGIUNTO del C rispetto a tutti gli altri linguaggi di programmazione esistenti.
deve essere per questo che da quando hanno inventato i motorini la bicicletta è diventata inutile :fagiano: la mia bicicletta, se permetti, mi è molto più utile di un motorino, quindi l'esempio non calza minimamente.
Idem, e te lo ripeto: non c'è proprio NESSUN motivo per cui valga la pena imparare il C. esistono piattaforme dove il compilatore C++ non esiste proprio, e allora sei costretto ad usare il C.
io non ho MAI programmato in ambienti embedded e parlo per sentito dire, ma un esempio concreto te lo so fare: i Lego Mindstorm :D
non è possibile programmare in C++ sui Lego Mindstorm, la Lego si è inventata una sottoforma di C e devi usare per forza quello.
e poi comunque ti faccio presente che imparando il C impari sempre una parte del C++.
Dammi un qualunque VALORE AGGIUNTO del C rispetto a tutti gli altri linguaggi di programmazione esistenti. scherzi? il C fa un sacco di cose che SQL non fa minimamente :sofico:
Io sto cercando d'imparare a programmare in C# , seguendo un libro : "Programmare in C" . Scritto da Peter Aitken e Bradley L.Jones. Edizione Apogeo. Questo libro mi è stato consigliato da uno studente universitario. Lui afferma che a ingenieria, gli insegnano il C con questo testo. Ebbene , quando io cerco di scrivere il codice d'esempio, presente al primo capitolo , ottengo errori con il compilatore Visual C# Express .
Il codice è:
#include <stdio.h>
main()
[
printf("Ciao a tutti\n");
return 0;
]
ps. la parentesi quadra in realtà è una graffa .
Quando scrivo questo codice , ottengo il seguente errore, riferito ad include :
"Errore 1 È prevista la direttiva per il preprocessore".
Ovviamente , tutti gli altri codici presenti nel libro , mi generano una sequenza d'errori. E' forse il libro datato e non più aggiornato ai compilatori odierni ? O perchè c'è differenza tra C e C# ? :help:
Inoltre : come faccio a scrivere la parentesi graffa? Ora quando scrivo nell'editor del compilatore uso il copia/incolla. Come faccio abbinare il simbolo a un tasto della tastiera?
prima devi imparare il C con questo libro:
http://www.cs.oberlin.edu/~kuperman/csci241-f07/images/c_prog_lang.jpg
quindi quando avrai capito come si programma in C potrai pasasre a Java o C#
Ciao!
^TiGeRShArK^
07-08-2008, 21:35
prima devi imparare il C con questo libro:
http://www.cs.oberlin.edu/~kuperman/csci241-f07/images/c_prog_lang.jpg
quindi quando avrai capito come si programma in C potrai pasasre a Java o C#
Ciao!
:rotfl:
Se vuoi imparare l'inglese, prima devi imparare il tedesco dato che è anch'esso una lingua Germanica :O
Dopo che avrai imparato il tedesco potrai passare all'inglese:O
:rotfl:
:rotfl::rotfl:
:rotfl::rotfl::rotfl::rotfl:
:rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl:
cdimauro
07-08-2008, 21:38
esistono piattaforme dove il compilatore C++ non esiste proprio, e allora sei costretto ad usare il C.
io non ho MAI programmato in ambienti embedded e parlo per sentito dire, ma un esempio concreto te lo so fare: i Lego Mindstorm :D
non è possibile programmare in C++ sui Lego Mindstorm, la Lego si è inventata una sottoforma di C e devi usare per forza quello.
Indubbiamente se c'è solo il C il problema della scelta non si pone. Ma non mi ponevo in queste condizioni "drastiche". :D
e poi comunque ti faccio presente che imparando il C impari sempre una parte del C++.
Certo, ma... meglio partire dal C++ e direttamente con la programmazione a oggetti, se proprio debbo per forza di cose imparare un linguaggio "C-compliant".
scherzi? il C fa un sacco di cose che SQL non fa minimamente :sofico:
:asd:
:rotfl:
Se vuoi imparare l'inglese, prima devi imparare il tedesco dato che è anch'esso una lingua Germanica :O
Dopo che avrai imparato il tedesco potrai passare all'inglese:O
:rotfl:
:rotfl::rotfl:
:rotfl::rotfl::rotfl::rotfl:
:rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl:
c'è poco da scherzare, quella è la bibbia dell'informatica.
no ma poi bellissimo il marchio ANSI C, manco C99 :rotfl:
c'è poco da scherzare, quella è la bibbia dell'informatica. oggesù sono piegato in due :rotfl:
sarà il peso della bibbia informatica :D
no ma poi bellissimo il marchio ANSI C, manco C99 :rotfl:
nn vedo cosa serva imparare il C del 99.
bisogna imparare il C con cui hanno scritto Unix, poi si può passare a java.
^TiGeRShArK^
07-08-2008, 21:44
nn vedo cosa serva imparare il C del 99.
bisogna imparare il C con cui hanno scritto Unix, poi si può passare a java.
Infatti, non vedo perchè imparare subito l'inglese, bisogna imparare prima il tedesco :)
Infatti, non vedo perchè imparare subito l'inglese, bisogna imparare prima il tedesco :) no, perdonami, il paragone non calza: imparare il tedesco ha senso, il paragone corretto sarebbe: bisogna prima imparare l'inglese arcaico usato da Shakespeare, poi si può imparare quello moderno :sofico:
:asd:
Infatti, non vedo perchè imparare subito l'inglese, bisogna imparare prima il tedesco :)
insomma, a te piace l'approccio alla Accenture Technology Solution, pigli gente che nn ha mai visto un PC, gli spieghi Java in 2 settimane, e li rivendi come consulenti informatici alle multinazionali :)
nn vedo cosa serva imparare il C del 99.
bisogna imparare il C con cui hanno scritto Unix, poi si può passare a java. questo mi sa che ci crede veramente eh, cioè non sta scherzando :rotfl:
insomma, a te piace l'approccio alla Accenture Technology Solution, pigli gente che nn ha mai visto un PC, gli spieghi Java in 2 settimane, e li rivendi come consulenti informatici alle multinazionali :) no, no, no, no, no; no. :D
chi ha detto, perdonami, che quelli a cui insegni Java non devono mai aver visto un computer? chi ha detto che Java glielo insegni in due settimane? in due settimane non impari neanche la metà di Java, se permetti :)
||ElChE||88
07-08-2008, 21:53
insomma, a te piace l'approccio alla Accenture Technology Solution, pigli gente che nn ha mai visto un PC, gli spieghi Java in 2 settimane, e li rivendi come consulenti informatici alle multinazionali :)
Scusa eh, ma che azz c'azzecca il C con Java?
Perché imparare a programmare col C se poi deve cambiare paradigma?
:muro: :muro: :muro:
DanieleC88
07-08-2008, 21:56
no ma poi bellissimo il marchio ANSI C, manco C99 :rotfl:
È normale. Per capire il C99 devi partire dal C K&R, sennò non cogli i motivi della sua evoluzione. E poi al C# come ci passi altrimenti? :asd:
Scusa eh, ma che azz c'azzecca il C con Java?
Perché imparare a programmare col C se poi deve cambiare paradigma?
:muro: :muro: :muro:
già che ci siamo facciamoli partire con il PHP, così diventeranno di sicuro buoni programmatori. :muro:
cdimauro
07-08-2008, 22:06
c'è poco da scherzare, quella è la bibbia dell'informatica.
Non diciamo eresie. La "bibbia" dell'informatica è universalmente considerata questa: http://en.wikipedia.org/wiki/The_art_of_computer_programming :read:
nn vedo cosa serva imparare il C del 99.
bisogna imparare il C con cui hanno scritto Unix, poi si può passare a java.
Quindi bisogna imparare il K&R: ancora più arcaico, grezzo e più prono a commettere errori dell'ANSI C.
E per fortuna che stiamo parlando di "imparare"... :asd:
già che ci siamo facciamoli partire con il PHP, così diventeranno di sicuro buoni programmatori. :muro:
A questo ho posto rimedio io: http://www.hwupgrade.it/forum/showpost.php?p=23621292&postcount=5
Il genere umano è salvo. :asd:
EDIT: santo subito! :asd: :asd: :asd:
||ElChE||88
07-08-2008, 22:15
già che ci siamo facciamoli partire con il PHP, così diventeranno di sicuro buoni programmatori. :muro:
Ma che vuoi?
Si stava parlando di Java e soprattutto C#.
Non vedo perché hai messo in mezzo quella schifezza di PHP (mancanza di argomenti?).
Ma che vuoi?
Si stava parlando di Java e soprattutto C#.
Non vedo perché hai messo in mezzo quella schifezza di PHP (mancanza di argomenti?).
Ho messo di mezzo il PHP perchè è il classico linguaggio facile da imparare dove è tutto più o meno consentito e che ti porta a fare porcate immani.
Bisogna partire con il Kerningan Ritchie perchè in poco più di 200 pagine spiega al programmatore in modo chiaro cosa vuol dire programmare.
prima di passare alla programmazione a oggetti, bisogna sapere almeno padroneggiare il C, altrimenti si faranno un mucchio di schifezze.
||ElChE||88
07-08-2008, 23:00
prima di passare alla programmazione a oggetti, bisogna sapere almeno padroneggiare il C, altrimenti si faranno un mucchio di schifezze.
Mi auguro che tu possa insegnare sta roba a meno gente possibile.
Sembri uno di quei professori universitari con le ragnatele addosso.
Mi auguro che tu possa insegnare sta roba a meno gente possibile.
Sembri uno di quei professori universitari con le ragnatele addosso.
ormai le nuove leve arrivano già viziate con il loro bel visual studio, eclipse o altro.. una volta sì, che si imparava bene, con il borland turbo c.
||ElChE||88
07-08-2008, 23:08
ormai le nuove leve arrivano già viziate con il loro bel visual studio, eclipse o altro.. una volta sì, che si imparava bene, con il borland turbo c.
Ripeto l'esempio di prima.
Tu per imparare l'inglese impari prima l'inglese che parlavano ai tempi di Shakespeare? :)
Fortuna che la gente sta iniziando a capire, così almeno ci si sposta dal C al C++.
non penso che la questione era sul linguaggio più adatto per iniziare a programmare.. c'è già abbastanza spazz ehm letteratura sull'argomento :fagiano:
||ElChE||88
07-08-2008, 23:12
non penso che la questione era sul linguaggio più adatto per iniziare a programmare.. c'è già abbastanza spazz ehm letteratura sull'argomento :fagiano:
:
prima devi imparare il C con questo libro:
http://www.cs.oberlin.edu/~kuperman/csci241-f07/images/c_prog_lang.jpg
quindi quando avrai capito come si programma in C potrai pasasre a Java o C#
Ciao!
:rotfl:
Ho notato ora il devi
:rotfl:
Questa spazzatura?:
mi riferivo a qualsiasi cosa che inizia con:
"il linguaggio migliore per imparare a programmare è"
i nomi??!?!
io ho studiato *almeno* la sintassi di praticamente tutti i linguaggi che nomino...
...a parte il Common LISP che non nomino praticamente mai... :mbe:
cazz..
Beh, buon per te. No mi dirai che li usi tutti però :D
i
però nel 2008 mi pare davvero un eresia non conoscere uno dei due linguaggi + richiesti dalle aziende europee (non mi spingo a dire "di tutto il mondo" perchè sinceramente in india e in USA non so quali sono i linguaggi + richiesti..) :fagiano:
Mah. Se uno consce benissimo Java e C++ ad esempio e non sa minimamente cosa sia C# secondo te è un cialtrone? Boh, secondo me no. Certo, magari essendo del settore può essere strano che non ne abbia mai sentito parlare.
cdimauro
07-08-2008, 23:15
Ho messo di mezzo il PHP perchè è il classico linguaggio facile da imparare dove è tutto più o meno consentito e che ti porta a fare porcate immani.
Bisogna partire con il Kerningan Ritchie perchè in poco più di 200 pagine spiega al programmatore in modo chiaro cosa vuol dire programmare.
prima di passare alla programmazione a oggetti, bisogna sapere almeno padroneggiare il C, altrimenti si faranno un mucchio di schifezze.
ormai le nuove leve arrivano già viziate con il loro bel visual studio, eclipse o altro.. una volta sì, che si imparava bene, con il borland turbo c.
Vero: nel protozoico s'imparava il C col Turbo C.
Adesso che è passato una milionata buona di anni ci sono altri strumenti per imparare a programmare come si deve senza commettere la caterva di orrori tipica che si porta dietro un linguaggio come il C.
Per inciso: nella mia firma trovi un eccellente strumento che fa proprio allo scopo. Abbandona la clava: ci siamo evoluti da un pezzo.
mi riferivo a qualsiasi cosa che inizia con:
"il linguaggio migliore per imparare a programmare è"
E' quello che ho in firma. E quando vuoi possiamo fare una sessione di test per dimostrare chi fra Python e C è "il linguaggio migliore per imparare a programmare". :cool:
Il programmatore C sa cose di più basso livello rispetto al programmatore Java o C#. Questo è innegabile in quanto contro puntatori, SigFault e via dicendo prima o poi si imbatte per forza. Ora qualcuno dirà: non serve sapere nozioni di basso livello per saper programmare.
Ok, ma qualcuno dovrà saperle no? O si butta via tutto, così nessun programmatore saprà cosa è un segmento di memoria? Mah. :stordita:
DanieleC88
07-08-2008, 23:36
No, semplicemente non tutti i programmatori hanno voglia/bisogno di sapere come gestire dei segmenti di memoria e far fronte ai segmentation fault. :p
In alcuni casi può essere utile saperlo e aver modo di gestire la "robaccia" a mano, in altri ambiti è inutile. Ti faccio un piccolo esempio: in questi giorni mi sono riscritto make nel tempo libero: l'ho fatto in C, e mi è riuscito in "poco" tempo. Funziona, ma ho il sentore che un po' di memoria mi sia sfuggita di mano, e ho dovuto risolvere almeno 3 casi di crash che non mi aspettavo. Se l'avessi fatto in Python avrei impiegato metà del tempo, e senza nessun crash di alcun tipo.
In fondo make deve: 1) leggere un file, 2) farne il parsing, 3) espandere variabili, 4) lanciare comandi, o poco più di questo. Non mi sembra che per questo tipo di operazioni la nozione di "segmento di memoria" mi sia utile. Semmai, mi è d'impiccio.
No, semplicemente non tutti i programmatori hanno voglia/bisogno di sapere come gestire dei segmenti di memoria e far fronte ai segmentation fault. :p
Beh, è quello che ho detto io.
In alcuni casi può essere utile saperlo e aver modo di gestire la "robaccia" a mano, in altri ambiti è inutile.
Idem. Quindi non ho capito il tuo intervento :D
In fondo make deve: 1) leggere un file, 2) farne il parsing, 3) espandere variabili, 4) lanciare comandi, o poco più di questo. Non mi sembra che per questo tipo di operazioni la nozione di "segmento di memoria" mi sia utile. Semmai, mi è d'impiccio.
Eh grazie, hai messo insieme due cose, segmento di memoria e makefile che non hanno nulla a che vedere tra di loro.
DanieleC88
08-08-2008, 00:03
Semplice: il mio post serve a ribadire che se proprio hai bisogno di sporcarti le mani, c'è sempre il C, il resto si può fare anche senza scendere "in basso".
Di solito si cerca sempre di fare astrazione dal funzionamento particolare della macchina e risolvere solo il "problema" al livello logico (è ciò che un programmatore teoricamente fa). Se poi uno ne ha bisogno, si studia anche il funzionamento della macchina e ci si appoggia ad un linguaggio di più basso livello per fare ciò che si deve fare. Ma uno che sta iniziando a programmare non vuole impelagarsi in questa robaccia, sono cose che studierà a tempo debito: con il C puoi imparare a programmare, ma non è necessario partire dal C. Soprattutto, se vuoi imparare il C#, è praticamente inutile imparare il C, stai buttando il tuo tempo. :)
Albitexm
08-08-2008, 00:12
prima devi imparare il C con questo libro:
http://www.cs.oberlin.edu/~kuperman/csci241-f07/images/c_prog_lang.jpg
quindi quando avrai capito come si programma in C potrai pasasre a Java o C#
Ciao!
Grazie . In effetti la mia urgenza è propio imparare il C . Questo perchè sono interessato a Cuda e Cuda è scritto in C .
Vorrei inoltre segnalare un tutorial , che ho trovato molto interessante è pratico. Esso è riferito al Python , ma contiene richiami alla programmazione in generale. Intuitivo per noi principianti . Ha spesso dei riferimenti a più linguaggi (un codice d'esempio è scritto spesso sia in Python che basic e C).
Imparare a programmare
di Alan Gauld
Traduzione di Luca Fini
Ho scaricato il tutorial dal sito ufficiale italiano di Python
Albitexm
08-08-2008, 00:33
ormai le nuove leve arrivano già viziate con il loro bel visual studio, eclipse o altro.. una volta sì, che si imparava bene, con il borland turbo c.
Ecco , è questo il compilatore che il mio collega ha detto che gli fanno usare all'università. Io non mi ricordavo esattamente il nome (lui ora è in vacanza).
Albitexm
08-08-2008, 00:52
no, perdonami, il paragone non calza: imparare il tedesco ha senso, il paragone corretto sarebbe: bisogna prima imparare l'inglese arcaico usato da Shakespeare, poi si può imparare quello moderno :sofico:
:asd:
Vorrei solamente farti presente , che nel tutorial sul visual C# , segnalatomi nel forum microsot , l'autore consiglia al''utente di scivere i codici d'esempio, dalla linea di comando MS-DOS . Questo per apprendere meglio la struttura del linguaggio , per non farsi confondere dai vari tools di scrittura presenti in visual studio. Strumenti molto utili a un programmatore esperto, per veloccizzare il suo lavoro, ma che possono rendere più difficile l'apprendimento dei principi base a un novizio.
Vorrei anche farti presente , che un mio collega , con sulle spalle 30 anni di lavoro nell'elettronica, ha portato in laboratorio libri d'elettronica degli anni 20/30.
Per spiegarmi un principio di funzionamento delle radio (visto che io mi sono occupato sempre di digitale), ha usato un testo degli anni 60. Anche se si tiene aggiornato con internet , sulle ultime tecnologie, i suoi punti di riferimento sono testi del passato (che devo ammettere erano fatti decisamente meglio di quelli di adesso, come quasi tutto d'altronde:vedi musica). :ciapet:
Ziosilvio
08-08-2008, 00:52
Grazie . In effetti la mia urgenza è propio imparare il C . Questo perchè sono interessato a Cuda e Cuda è scritto in C .
Auguri... il K&R è un capolavoro, ma è molto difficile, ed è indirizzato più a chi sa già programmare e vuole imparare il C, che a chi parte da zero...
Vorrei inoltre segnalare un tutorial , che ho trovato molto interessante è pratico. Esso è riferito al Python , ma contiene richiami alla programmazione in generale. Intuitivo per noi principianti . Ha spesso dei riferimenti a più linguaggi (un codice d'esempio è scritto spesso sia in Python che basic e C).
Imparare a programmare
di Alan Gauld
Traduzione di Luca Fini
Mi sembra di averlo visto e di averne ricavato una buone impressione.
Però, forse, ti conviene abituarti a usare i testi in lingua inglese, visto che in informatica la stragrande magioranza della documentazione è scritta in quella lingua e probabilmente non verrà mai tradotta.
cdimauro
08-08-2008, 07:36
Il programmatore C sa cose di più basso livello rispetto al programmatore Java o C#. Questo è innegabile in quanto contro puntatori, SigFault e via dicendo prima o poi si imbatte per forza.
Appunto, e se li conosci... li eviti. :D
Ora qualcuno dirà: non serve sapere nozioni di basso livello per saper programmare.
Ovviamente. :cool: Ma posso sempre ricredermi se qualcuno mi DIMOSTRERA' il contrario. :O
Ok, ma qualcuno dovrà saperle no?
Certamente: basterà impararle QUANDO SERVIRANNO. ;)
Se non ci conosco da subito nessuno muore. Anzi, non ci si fanno delle inutili seghe mentali. :D
O si butta via tutto, così nessun programmatore saprà cosa è un segmento di memoria? Mah. :stordita:
Eccolo lì: pescato in fallo. :D Il segmento di memoria non lo conosci nemmeno se studi il C, a meno che non fai uso di un compilatore per DOS. Il modello di memoria dei compilatori C a 32 bit è "piatto" da una dozzina d'anni (e più) a questa parte.
L'unico modo per sapere cos'è un segmento è sporcarsi le mani con assembly e linguaggio macchina (della famiglia x86, per inciso; anche se esistono altre vecchie architetture che hanno un concetto simile), cosa che NON AUGURO A NESSUNO.
Com'è vero che l'unico modo per saper realizzare un emulatore / simulatore è sporcarsi le mani col linguaggio macchina (nemmeno l'assembly è utile).
Come vedi ci sono concetti di basso livello che il C semplicemente si sogna. Allora, a tuo modo di vedere, sarebbe necessario imparare assembly e linguaggio macchina semplicemente perché "qualcuno dovrà saperle".
Io non la penso affatto così. Le mani me le sporcherò (ci mancherebbe che non lo facessi!) SE E SOLO SE ne avrò REALMENTE BISOGNO.
Nel frattempo permetti di godere le gioie della programmazione facendo a meno di segmentation fault, bug intermittenti, doppie deallocazioni, ecc.: io campo benissimo senza. Anzi, ci metterei la firma per farne sempre a meno. :p
In alcuni casi può essere utile saperlo e aver modo di gestire la "robaccia" a mano, in altri ambiti è inutile. Ti faccio un piccolo esempio: in questi giorni mi sono riscritto make nel tempo libero: l'ho fatto in C, e mi è riuscito in "poco" tempo. Funziona, ma ho il sentore che un po' di memoria mi sia sfuggita di mano, e ho dovuto risolvere almeno 3 casi di crash che non mi aspettavo. Se l'avessi fatto in Python avrei impiegato metà del tempo, e senza nessun crash di alcun tipo.
In fondo make deve: 1) leggere un file, 2) farne il parsing, 3) espandere variabili, 4) lanciare comandi, o poco più di questo. Non mi sembra che per questo tipo di operazioni la nozione di "segmento di memoria" mi sia utile. Semmai, mi è d'impiccio.
Azz. Soltanto la metà del tempo?!? Mah. Avrei pensato che avresti impiegato un decimo... :sob:
Grazie . In effetti la mia urgenza è propio imparare il C . Questo perchè sono interessato a Cuda e Cuda è scritto in C .
Vorrei inoltre segnalare un tutorial , che ho trovato molto interessante è pratico. Esso è riferito al Python , ma contiene richiami alla programmazione in generale. Intuitivo per noi principianti . Ha spesso dei riferimenti a più linguaggi (un codice d'esempio è scritto spesso sia in Python che basic e C).
Imparare a programmare
di Alan Gauld
Traduzione di Luca Fini
Ho scaricato il tutorial dal sito ufficiale italiano di Python
Grazie per il consiglio. Segnato (peccato che non ci sia spazio nella mia firma).
Vorrei solamente farti presente , che nel tutorial sul visual C# , segnalatomi nel forum microsot , l'autore consiglia al''utente di scivere i codici d'esempio, dalla linea di comando MS-DOS . Questo per apprendere meglio la struttura del linguaggio , per non farsi confondere dai vari tools di scrittura presenti in visual studio. Strumenti molto utili a un programmatore esperto, per veloccizzare il suo lavoro, ma che possono rendere più difficile l'apprendimento dei principi base a un novizio.
Guarda, la riga di comando la uso principalmente perché ho lanciato l'interprete Python e posso provare velocemente dei pezzi codice. In questo modo la mia produttività aumenta in maniera notevole.
Ho un dubbio? Vado di riga di comando e provo.
Voglio provare velocemente un pezzo di codice? Lo edito direttamente (se piccolo) o lo incollo, e lo provo subito.
Non hai idea di quanto tempo faccia risparmiare questo procedimento. Veramente. E' una manna dal cielo avere un interprete sempre a disposizione con cui sperimentare.
khelidan1980
08-08-2008, 09:02
Bisogna partire con il Kerningan Ritchie perchè in poco più di 200 pagine spiega al programmatore in modo chiaro cosa vuol dire programmare.
prima di passare alla programmazione a oggetti, bisogna sapere almeno padroneggiare il C, altrimenti si faranno un mucchio di schifezze.
hai mai programmato in vita tua?Da queste ultime due frasi qualche dubbio mi viene
Mi auguro che tu possa insegnare sta roba a meno gente possibile.
Sembri uno di quei professori universitari con le ragnatele addosso.
per inciso ormai nella maggioranza se non nella totalità delle università nel corso di programmazione 1 si inizia con Java,e senza dar per scontato precedenti esperienze con linguaggi procedurali
ormai le nuove leve arrivano già viziate con il loro bel visual studio, eclipse o altro.. una volta sì, che si imparava bene, con il borland turbo c.
Di grazia,cosa darebbe,parlando sempre di C ovviamente,in più il fatto di di usare eclipse con il cdt?
qui si parla di didattica,è fuori discussione che un approccio con un linguaggio ad oggetti sia la cosa migliore al giorno d'oggi anche in ottica professionale,ripeto anche tutte le università si son adattate passando da pascal a java,poi come dice cdimauro,se il C ti serve,te lo impari,io l'ho imparato in quanto volevo studiarmi un po di programmazione di sistema su linux,ma questo è un altro discorso
DanieleC88
08-08-2008, 11:40
Azz. Soltanto la metà del tempo?!? Mah. Avrei pensato che avresti impiegato un decimo... :sob:
Sì, ma solo perché con Python non c'ho ancora "fatto il callo"... :D
^TiGeRShArK^
08-08-2008, 12:18
insomma, a te piace l'approccio alla Accenture Technology Solution, pigli gente che nn ha mai visto un PC, gli spieghi Java in 2 settimane, e li rivendi come consulenti informatici alle multinazionali :)
:rotfl::rotfl:
E' proprio perchè ABORRO quell'approccio che non faccio certo iniziare uno che non capisce nulla di programmazione col C :asd:
Evidentemente a te piace quell'approccio dato che credi che sia possibile imparare a programmare nel 2008 studiando un linguaggio procedurale :asd:
^TiGeRShArK^
08-08-2008, 12:25
Beh, buon per te. No mi dirai che li usi tutti però :D
Li ho usati tutti...
Per ora al lavoro sto usando C# e Java, ma ogni tanto scrivo qualcosina in python o ruby.
Gli altri linguaggi è da un bel pò che non li tocco :p
Mah. Se uno consce benissimo Java e C++ ad esempio e non sa minimamente cosa sia C# secondo te è un cialtrone? Boh, secondo me no. Certo, magari essendo del settore può essere strano che non ne abbia mai sentito parlare.
Si, è un cialtrone perchè il nostro è un campo in cui bisogna essere costantemente aggiornati.
Uno che non conosce il C# vuol dire che si è perso l'evoluzione dell'informatica degli ultimi 7 anni....
Li ho usati tutti...
Si, è un cialtrone perchè il nostro è un campo in cui bisogna essere costantemente aggiornati.
Uno che non conosce il C# vuol dire che si è perso l'evoluzione dell'informatica degli ultimi 7 anni....
Con conoscere intendi dire che si e' studiato il linguaggio per programmarci o semplicemente ne conosce le caratteristiche ?
Nel primo caso la trovo una affermazione azzardata, visto che praticamente tutte le "novita'" introdotte da C# esistono in altri linguaggi da parecchi anni.
insomma, a te piace l'approccio alla Accenture Technology Solution, pigli gente che nn ha mai visto un PC, gli spieghi Java in 2 settimane, e li rivendi come consulenti informatici alle multinazionali :)
Purtroppo questa è una pratica usata anche nelle università con i vari corsi... 3 mesi (che poi sono 2 mesi e calcola che vai 3 volte a settimana quindi si riduce ulteriormente il numero di lezioni) per imparare delle nozioni in modo più o meno corretto... tant'è che la mia facoltà dal prossimo anno tornerà ai "semestri" unificando diversi corsi (tra virgolette perché saranno 4 mesi praticamente).
Comunque non credo che saper programmare sia uguale a "sapere tutte le specifiche/comandi del linguaggio a memoria", per quelle c'è la documentazione.
Le basi te le insegnano nei vari corsi di fondamenti (da noi c++, in altre facoltà già usano java) /laboratorio/architetture dei calcolatori (assembler)...
Ovvio che se vuoi imparare a programmare a livello professionale e all'esterno di vari corsi universitari devi seguire un programma passo passo che ti possa guidare nell'apprendimento...
^TiGeRShArK^
08-08-2008, 14:41
Con conoscere intendi dire che si e' studiato il linguaggio per programmarci o semplicemente ne conosce le caratteristiche ?
Nel primo caso la trovo una affermazione azzardata, visto che praticamente tutte le "novita'" introdotte da C# esistono in altri linguaggi da parecchi anni.
Intendo che uno che non sappia la differenza tra C e C#, confondendo i due linguaggi, nel 2008 è di sicuro una persona che non si aggiorna ed è rimasta all'età della pietra dell'informatica.
Io pure non ho mai programmato in haskell (a parte un hello world con hugs :fagiano: ) ma quanto meno so che non c'entra una mazza col C... :mbe:
Per me è assolutamente sbagliato non aggiornarsi nel panorama informatico dato che col tempo che passa si aggiungono sempre strumenti migliori da conoscere.
Ah ok, allora concordo pienamente :p, "conoscere" e' un termine con una miriade di sfumature.
^TiGeRShArK^
08-08-2008, 14:46
Ah ok, allora concordo pienamente :p, "conoscere" e' un termine con una miriade di sfumature.
è l'italiano che è ambiguo :p
pensa se l'avessi inteso in senso biblico :asd:
Allora, a tuo modo di vedere, sarebbe necessario imparare assembly e linguaggio macchina semplicemente perché "qualcuno dovrà saperle".
Non ci siamo capiti.. A sentire molti di voi, nessun programmatore è tenuto a sapere i concetti di base della macchina. Sembra che quelli che devono programmare più a basso livello siano pezzenti o sfigati...
Non sto dicendo che se uno a lavoro deve programmare in Java, debba conoscere anche l'Assembly. Questo è chiaro.
Nel frattempo permetti di godere le gioie della programmazione facendo a meno di segmentation fault, bug intermittenti, doppie deallocazioni, ecc.: io campo benissimo senza. Anzi, ci metterei la firma per farne sempre a meno. :p
Non è che io adoro beccare un SIGFAULT nel codice.. il punto è un altro:
secondo me è sbagliato diffondere il concetto che, siccome un linguaggio gestisce le cose per noi, noi si debba essere all'oscuro di tutto quello che succede dietro. A me non piace questo modello. A me piace sapere cosa succede dietro le quinte, non si sa mai, e mi fa sentire più sicuro quando programmo.
Forse dico questo perché una volta sentii un mio amico programamtore Java che disse: ma che li impari a fare gli algoritmi di ordinamento? Tanto si usano le librerie. Eh, grazie al tram, questo perché c'è qualche stronzo che le ha scritte imparandosi gli algoritmi di ordinamento. Se quello stesso stronzo faceva lo stesso ragionamento, oggi non avremmo quella libreria.
PS: come sei pignolo riguardo i segmenti di memoria. Era il primo esempio venuto in mente di un concetto di basso livello che nessuno si sogna di sapere programmando con linguaggi di alto livello :D
cdimauro
08-08-2008, 23:02
Non ci siamo capiti.. A sentire molti di voi, nessun programmatore è tenuto a sapere i concetti di base della macchina. Sembra che quelli che devono programmare più a basso livello siano pezzenti o sfigati...
Il nocciolo della questione è proprio questo, invece: normalmente nessun programmatore è tenuto a conoscere i dettagli di basso livello che sono più vicini al funzionamento della macchina.
Dico normalmente perché se ciò fa parte dei REQUISITI del problema, allora è ovvio che bisognerà conoscerli.
Non sto dicendo che se uno a lavoro deve programmare in Java, debba conoscere anche l'Assembly. Questo è chiaro.
Benissimo.
Non è che io adoro beccare un SIGFAULT nel codice.. il punto è un altro:
secondo me è sbagliato diffondere il concetto che, siccome un linguaggio gestisce le cose per noi, noi si debba essere all'oscuro di tutto quello che succede dietro.
Non è che si debba rimanere all'oscuro: semplicemente se ne può fare benissimo a meno, visto che non è necessario alla risoluzione dei problemi (fermo restando il "normalmente" di cui sopra).
A me non piace questo modello. A me piace sapere cosa succede dietro le quinte, non si sa mai, e mi fa sentire più sicuro quando programmo.
OK, ma è una tua idea: per risolvere problemi normalmente non è necessario sapere cosa succede "dietro le quinte".
Forse dico questo perché una volta sentii un mio amico programamtore Java che disse: ma che li impari a fare gli algoritmi di ordinamento? Tanto si usano le librerie. Eh, grazie al tram, questo perché c'è qualche stronzo che le ha scritte imparandosi gli algoritmi di ordinamento. Se quello stesso stronzo faceva lo stesso ragionamento, oggi non avremmo quella libreria.
Qui la questione è diversa: stiamo parlando di ALGORITMI. E' vero che con Java, Python, ecc. abbiamo la pappa pronta, ma lo studio degli algoritmi ci consente di affinare le nostre capacità di analisi e risoluzione dei problemi, e prender conscienza del "peso" di certe operazioni.
Ma rimaniamo sempre ben lontani dai dettagli di basso di livello.
PS: come sei pignolo riguardo i segmenti di memoria. Era il primo esempio venuto in mente di un concetto di basso livello che nessuno si sogna di sapere programmando con linguaggi di alto livello :D
Non è questione di pignoleria: volevo far vedere che spesso si tende a confondere i concetti di basso livello coi dettagli dell'architettura. Questo non è sempre vero, appunto. ;)
Li ho usati tutti...
Per ora al lavoro sto usando C# e Java, ma ogni tanto scrivo qualcosina in python o ruby.
Gli altri linguaggi è da un bel pò che non li tocco :p
Si, è un cialtrone perchè il nostro è un campo in cui bisogna essere costantemente aggiornati.
Uno che non conosce il C# vuol dire che si è perso l'evoluzione dell'informatica degli ultimi 7 anni....
Se uno lavora in un azienda dove il C# non si usa, perché dovrebbe conoscerlo? Ha bisogno di sapere cosa sia? No, perché non gli serve! E se questa azienda gli richiede di sapere C++, che magari conosce benissimo, non va bene?
Dipende dalle situazioni, mica tutto il mondo va avanti con C#!:D
Ci sono un sacco di programmtori fenomenali che conoscono un solo linguaggio. Ma se gli serve solo quello, perché impararseli altri?
Non ho ancora capito se per conoscere il C# intendi sapere cosa sia, o ci sappia programamre. Perchè anche il solo sapere cosa sia non è che cambi molto la situazione. Non si è aggiornnati comunque, Magari bastasse sapere solo i nomi delle nuove tecnologie per tenersi aggiornati.
Qui la questione è diversa: stiamo parlando di ALGORITMI. E' vero che con Java, Python, ecc. abbiamo la pappa pronta, ma lo studio degli algoritmi ci consente di affinare le nostre capacità di analisi e risoluzione dei problemi, e prender conscienza del "peso" di certe operazioni.
Il concetto è identico: non impari una nozione di basso livello perché non ti serve, o meglio, non sei costretto a manipolarla direttamente, e non impari un algoritmo di ordinamento perché già implementato.
cdimauro
08-08-2008, 23:23
Il concetto è identico: non impari una nozione di basso livello perché non ti serve, o meglio, non sei costretto a manipolarla direttamente, e non impari un algoritmo di ordinamento perché già implementato.
Non concordo: l'algoritmo di ordinamento lo impari perché ti fa vedere come si risolve un determinato problema, per cui va ad arricchire le tue capacità di analisi e risoluzione.
Inoltre, come dicevo, ti permette di dare una stima della complessità dell'operazione che stai effettuando.
Cosa c'è di utile, invece, nel sapere quando manipolo un oggetto in Python sto giocando con un puntatore? Nulla.
A parte ciò, prima hai scritto questo:
Ci sono un sacco di programmtori fenomenali che conoscono un solo linguaggio. Ma se gli serve solo quello, perché impararseli altri?
Se il linguaggio in questione è di alto livello e non conoscono dettagli di basso livello, perché dovrebbero imparare questi concetti? ;)
Non concordo: l'algoritmo di ordinamento lo impari perché ti fa vedere come si risolve un determinato problema, per cui va ad arricchire le tue capacità di analisi e risoluzione.
Quante persone si vanno a leggere come funziona un algoritmo di ordinamento prima di usarlo? Ben pochi direi, usano la libreria e via.
Sono d'accordissimo sul fatto che conoscerlo accresce le capacità di analisi, ma non si tende a fare, proprio perchè.. è già implementato dal linguaggio! E' questo che sto cercando di dire: i linguaggi moderni tendono a non far approfondire le cose perché fanno tutto ( o quasi ) loro :)
Se il linguaggio in questione è di alto livello e non conoscono dettagli di basso livello, perché dovrebbero imparare questi concetti? ;)
Parlavo di C#.. un conto è approfondire il funzionamento del linguaggio che usi in azienda, un altro conto è impararsi un linguaggio di programmazione non richiesto.
Non penso che se approfindisci delle cose sul linguaggio che la tua azienda ti fa usare, gli dispiaccia :)
cdimauro
09-08-2008, 06:39
Quante persone si vanno a leggere come funziona un algoritmo di ordinamento prima di usarlo? Ben pochi direi, usano la libreria e via.
Nemmeno io lo faccio ormai, ma prima li ho studiati e... applicati. Idem per gli Hash, i B-Tree, gli alberi Rosso-Nero (che brutta parola), ecc.
Son tutte cose che hanno contribuito ad "aprirmi la mente".
Sono d'accordissimo sul fatto che conoscerlo accresce le capacità di analisi, ma non si tende a fare, proprio perchè.. è già implementato dal linguaggio! E' questo che sto cercando di dire: i linguaggi moderni tendono a non far approfondire le cose perché fanno tutto ( o quasi ) loro :)
Su questo concordo, ma non vedo nulla di male in ciò. L'importante è che all'università nei vari corsi di algoritmi vengano studiati e approfonditi per far esercitare la materia grigia. ;)
Parlavo di C#.. un conto è approfondire il funzionamento del linguaggio che usi in azienda, un altro conto è impararsi un linguaggio di programmazione non richiesto.
Non penso che se approfindisci delle cose sul linguaggio che la tua azienda ti fa usare, gli dispiaccia :)
No no, e su questo concordo.
Però, come diceva "Tiger", un informatico generalmente si tiene aggiornato. Ho studiato C# per i fatti miei perché era una novità e m'interessava vedere com'era fatto e quali erano le sue potenzialità.
Poi non c'ho mai lavorato concretamente, per cui non posso assolutamente definirmi un programmatore C#.
E' una cosa che faccio io quando ho tempo (merce rara ormai), ma potrei benissimo farne a meno, sia chiaro. ;)
prima devi imparare il C con questo libro:
http://www.cs.oberlin.edu/~kuperman/csci241-f07/images/c_prog_lang.jpg
quindi quando avrai capito come si programma in C potrai pasasre a Java o C#
Ciao!
c'è poco da scherzare, quella è la bibbia dell'informatica.
ma che diavolo dici :)
Le Bibbie sono The Art of Programming, Refactoring, i libri di Tanenbaum, Introduction to Algorithms e qualcosa sull'OODesign, i libri imprescindibili per qualsiasi informatico e bada bene che NESSUNO è focalizzato su un particolare linguaggio, com'è giusto che sia, ma sono agnostici alle tecnologie perché spiegano le metodologie o forniscono le competenze necessarie a risolvere qualsiasi tipo di problema.
Quando al mondo verranno epurati, per osmosi e perché l'Università avrà rimosso i dinosauri dal comparto insegnanti, i concetti per cui per cominciare a programmare si debba partire da C e dalla prog procedurale, il mondo sarà un mondo migliore.
Poi chiaramente nasceranno sempre persone come k0nt3 che continueranno a dire "nessuno ha dimostrato niente ecc. ecc." quando è stato detto loro in tutte le salse, confutato e provato che un segmentation fault, C e compagnia sono inutili a formare la mente di uno sviluppatore, che invece è così anzi è utile, ma saranno sempre le eccezioni che non vogliono vedere o preferiscono vedere quello che più piace loro.
Ma sono eccezioni, lo sono adesso e lo saranno sempre di più.
E per fortuna.
khelidan1980
09-08-2008, 12:43
Quante persone si vanno a leggere come funziona un algoritmo di ordinamento prima di usarlo? Ben pochi direi, usano la libreria e via.
Sono d'accordissimo sul fatto che conoscerlo accresce le capacità di analisi, ma non si tende a fare, proprio perchè.. è già implementato dal linguaggio! E' questo che sto cercando di dire: i linguaggi moderni tendono a non far approfondire le cose perché fanno tutto ( o quasi ) loro :)
a parte io fatto che lo studio degli algoritmi è qualcosa di piu che sapere come partiziona l'array il quicksort,il problema è proprio che la gente non ha la minima idea della teoria degli algoritmi,infatti poi si vedono in giro porcherie mai viste
^TiGeRShArK^
09-08-2008, 13:22
Se uno lavora in un azienda dove il C# non si usa, perché dovrebbe conoscerlo? Ha bisogno di sapere cosa sia? No, perché non gli serve! E se questa azienda gli richiede di sapere C++, che magari conosce benissimo, non va bene?
Un programmatore "decente" dovrebbe essere aggiornato sugli strumenti migliore a disposizione.
Perchè i linguaggi diversi non sono altro che questo: strumenti.
Conoscendo i pregi e i difetti dei vari linguaggi e possibile scegliere lo strumento migliore.
Ma se non ci si aggiorna mai si rimane sempre a lavorare per una vita con lo stesso linguaggio, e ciò imho non è mai un bene.
Un informatico dal mio punto di vista non può assolutamente essere conservatore ma deve aprire continuamente la mente a nuovi concetti che lo potrebbero aiutare a lavoro.
Dipende dalle situazioni, mica tutto il mondo va avanti con C#!:D
Ci sono un sacco di programmtori fenomenali che conoscono un solo linguaggio. Ma se gli serve solo quello, perché impararseli altri?
:mbe:
Forse perchè se si fissano su un solo strumento e non si informano potrebbero continuare ad utilizzare lo stesso strumento nonostante la presenza di linguaggi + produttivi? :mbe:
Non ho ancora capito se per conoscere il C# intendi sapere cosa sia, o ci sappia programamre. Perchè anche il solo sapere cosa sia non è che cambi molto la situazione. Non si è aggiornnati comunque, Magari bastasse sapere solo i nomi delle nuove tecnologie per tenersi aggiornati.
Conoscere le caratteristiche e quantomeno i principali pregi e difetti di tale linguaggio.
Ovviamente l'optimum sarebbe conoscere tutti i linguaggi possibili e immaginabili, ma mi pare un pò arduo :p
Da parte mia al ritorno delle vacanze ho in cima alla lista dei linguaggi da imparare l'Objective-C 2.0.
Il concetto è identico: non impari una nozione di basso livello perché non ti serve, o meglio, non sei costretto a manipolarla direttamente, e non impari un algoritmo di ordinamento perché già implementato.
Bravo, Questo mi sembra un buon esempio dei motivi per i quali è meglio partire con il C.
Un programmatore "decente" dovrebbe essere aggiornato sugli strumenti migliore a disposizione.
Perchè i linguaggi diversi non sono altro che questo: strumenti.
Conoscendo i pregi e i difetti dei vari linguaggi e possibile scegliere lo strumento migliore.
Ma se non ci si aggiorna mai si rimane sempre a lavorare per una vita con lo stesso linguaggio, e ciò imho non è mai un bene.
Un informatico dal mio punto di vista non può assolutamente essere conservatore ma deve aprire continuamente la mente a nuovi concetti che lo potrebbero aiutare a lavoro.
Siamo sempre lì, dipende dal contesto: se dove lavori non è richiesto il C#, è inutile impararselo. Ma sono punti di vista, quindi c'è poco da fare :D
Se nel posto di lavoro utilizzo C++, è meglio che approfondisca quello, aggiornandomi sule novità o mi studi un linguaggio che non c'entra nulla come C#? Non è questione di tenersi aggiornato o meno, è questione di conciliare il proprio tempo libero con l'impararsi cose che effettivamente serviranno.
:mbe:
Forse perchè se si fissano su un solo strumento e non si informano potrebbero continuare ad utilizzare lo stesso strumento nonostante la presenza di linguaggi + produttivi? :mbe:
Che ne sai se il linguaggio che stanno usando è produttivo o meno? Magari è il migliore che ci sia in quel campo...
Da parte mia al ritorno delle vacanze ho in cima alla lista dei linguaggi da imparare l'Objective-C 2.0.
Beato tu che hai tutto questo tempo e voglia :fagiano:
Non si deve confondere la voglia di sapere personale, con le effettive richieste del proprio posto di lavoro. Uno nel tempo libero può studiarsi qualsiasi cosa, anche trattati di medicina, ma poi si deve vedere se realmente gli servono.
Mi è venuto in mente un esempio
In Hibernate ci sono i Criteria, con i Criteria puoi fare interrogazioni a DB in modo completamente object oriented, senza neppure scrivere qualcosa di lontanamente simile a SQL (come invece avviene per HQL o JPQL..o mi pare LINQ in ambito .net)
List cats = sess.createCriteria(Cat.class)
.add( Property.forName("name").like("F%") )
.addOrder( Property.forName("name").asc() )
.addOrder( Property.forName("age").desc() )
.setMaxResults(50)
.list();
Secondo il vostro ragionameno, allora non bisognerebbe imparare SQL, visto che tanto esistono i Criteria che sono object oriented e (secondo voi) imparare SQL sarebbe solo un'inutile complicazione :rolleyes:
^TiGeRShArK^
09-08-2008, 15:23
Mi è venuto in mente un esempio
In Hibernate ci sono i Criteria, con i Criteria puoi fare interrogazioni a DB in modo completamente object oriented, senza neppure scrivere qualcosa di lontanamente simile a SQL (come invece avviene per HQL o JPQL..o mi pare LINQ in ambito .net)
List cats = sess.createCriteria(Cat.class)
.add( Property.forName("name").like("F%") )
.addOrder( Property.forName("name").asc() )
.addOrder( Property.forName("age").desc() )
.setMaxResults(50)
.list();
Secondo il vostro ragionameno, allora non bisognerebbe imparare SQL, visto che tanto esistono i Criteria che sono object oriented e (secondo voi) imparare SQL sarebbe solo un'inutile complicazione :rolleyes:
..a parte che sti Criteria così ad occhio mi fanno schifo.. :Puke:
SQL è pensato proprio per lavorare sui DB tant'è vero che ha una potenza espressiva inferiore a quasi tutti gli altri linguaggi.
Per me, tornando all'esempio di cui sopra, sarebbe MOLTO + chiaro scrivere:
var result = (from c in categories
where c.name.StartsWith("F")
orderby c.name, c.age descending
select c).Take(50);
manu@2986
09-08-2008, 15:54
Siamo sempre lì, dipende dal contesto: se dove lavori non è richiesto il C#, è inutile impararselo. Ma sono punti di vista, quindi c'è poco da fare :D
Se nel posto di lavoro utilizzo C++, è meglio che approfondisca quello, aggiornandomi sule novità o mi studi un linguaggio che non c'entra nulla come C#? Non è questione di tenersi aggiornato o meno, è questione di conciliare il proprio tempo libero con l'impararsi cose che effettivamente serviranno.
Che ne sai se il linguaggio che stanno usando è produttivo o meno? Magari è il migliore che ci sia in quel campo...
Beato tu che hai tutto questo tempo e voglia :fagiano:
Non si deve confondere la voglia di sapere personale, con le effettive richieste del proprio posto di lavoro. Uno nel tempo libero può studiarsi qualsiasi cosa, anche trattati di medicina, ma poi si deve vedere se realmente gli servono.
Non capisco.....puoi anche aver ragione dicendo che se il C# non mi serve è inutile impararlo, ma secondo me, uno che ha a che fare col campo IT, DEVE conoscerlo, non ci sono scuse, perchè è un linguaggio che piano piano sta prendendo sempre più piede, e comunque, in ogni caso, fa parte del "mondo"...discorso diverso è se non me ne frega una beneamata cippa dell'IT, in questo caso imparo e studio JAVA o C o quello che mi insegnano a lezione perchè ci sono costretto.....ed io dico che molti appartengono a quest'ultima categoria..
Non capisco.....puoi anche aver ragione dicendo che se il C# non mi serve è inutile impararlo, ma secondo me, uno che ha a che fare col campo IT, DEVE conoscerlo, non ci sono scuse, perchè è un linguaggio che piano piano sta prendendo sempre più piede, e comunque, in ogni caso, fa parte del "mondo".
Ma perché devo perdere tempo ad impararmi un linguaggio, che non è mai cosa semplice, se sono sicuro di non doverlo mai usare?:confused: Che senso ha? Nel mio lavoro uso C, C++ ed occasionalmente Java. Mettiamo che mi imparo il C#. Ok, e poi che ci faccio, qualche programmetto a casa così quando non so cosa fare?
Mi ritenete non aggiornato perché ho fatto il grave errore di non aggiornarmi su un linguaggio a me assolutamente inutile? Mah..
Se un giorno mi chiedessero di impararmelo, allora me lo studierei. Ma il discorso in questo caso è diverso, ci sarebbe uno scopo.
Ci sono tantissime cose che fanno parte dell'IT, dovremmo impararsele tutte? Allora dobbiamo impararci anche Python, PHP? Ma mettiamoci anche il quantum computing và, così anticipiamo i tempi :fagiano:
State confondendo la passione per la programmazione con l'utilità pratica delle cose. Per passione si può studiare qualsiasi linguaggio è ovvio, ma non è detto che mi servano tutti.
manu@2986
09-08-2008, 17:18
Ma perché devo perdere tempo ad impararmi un linguaggio, che non è mai cosa semplice, se sono sicuro di non doverlo mai usare?:confused: Che senso ha? Nel mio lavoro uso C, C++ ed occasionalmente Java. Mettiamo che mi imparo il C#. Ok, e poi che ci faccio, qualche programmetto a casa così quando non so cosa fare?
Mi ritenete non aggiornato perché ho fatto il grave errore di non aggiornarmi su un linguaggio a me assolutamente inutile? Mah..
Se un giorno mi chiedessero di impararmelo, allora me lo studierei. Ma il discorso in questo caso è diverso, ci sarebbe uno scopo.
Ci sono tantissime cose che fanno parte dell'IT, dovremmo impararsele tutte? Allora dobbiamo impararci anche Python, PHP? Ma mettiamoci anche il quantum computing và, così anticipiamo i tempi :fagiano:
State confondendo la passione per la programmazione con l'utilità pratica delle cose. Per passione si può studiare qualsiasi linguaggio è ovvio, ma non è detto che mi servano tutti.
Io non ho detto che devi saper padroneggiare il linguaggio, ma che almeno devi sapere che esiste....e comunque, non essere appassionati a ciò che si fà è uno svantaggio....IMHO
Io non ho detto che devi saper padroneggiare il linguaggio, ma che almeno devi sapere che esiste....e comunque, non essere appassionati a ciò che si fà è uno svantaggio....IMHO
Ed il solo sapere cosa è che differenza fa? :fagiano: E' un'informazione che si può reperire in due nanosecondi.
manu@2986
09-08-2008, 18:22
Ed il solo sapere cosa è che differenza fa? :fagiano: E' un'informazione che si può reperire in due nanosecondi.
Quindi mi stai dando ragione:D ...se è un'informazione che si può reperire in due nanosecondi bisogna essere proprio "babbi" per non averla reperita...:stordita:
Io non ho detto che devi saper padroneggiare il linguaggio, ma che almeno devi sapere che esiste....e comunque, non essere appassionati a ciò che si fà è uno svantaggio....IMHO
Non tutti hanno la fortuna di fare un lavoro che sia anche il loro "hobby".
Per quanto mi riguarda programmare è uno dei tanti ambiti dell'informatica, ma non il solo, fortunatamente.
Quindi mi stai dando ragione:D ...se è un'informazione che si può reperire in due nanosecondi bisogna essere proprio "babbi" per non averla reperita...:stordita:
Non ha senso ciò che dici... concordo che un informatico dovrebbe essere almeno a conoscenza dell'esistenza di un linguaggio di programmazione C# (almeno per sentito dire da qualcuno), e concordo anche che si dovrebbe quantomeno informare, ma addirittura essere considerati babbi lol...
Cmq se uno fa il programmatore di professione hanno ragione entrambi sia tigershark che unrue, uno deve essere al corrente degli strumenti a disposizione, e allo stesso tempo ovviamente se sta lavorando per una azienda attenersi a quello che è il linguaggio in uso (volendo anche illustrando ai capi le motivazioni per cui si può usare un linguaggio migliore di quello che stanno attualmente usando).
Penso che chiunqua esca da un corso di informatica o di ingegneria informatica comunque abbia le conoscenze necessarie di basso livello per poter realizzare dei programmi coscientemente... discorso diverso se si seguono corsi esterni alle università, dove magari gli obiettivi sono altri.
Comunque uno dei motivi dell'adozione dell'object-oriented è proprio questo scostarsi dall'implementazione da "come è fatto il programma" per concentrarsi di più sul dominio applicativo. Per cui non credo che un programmatore OO debba necessariamente conoscere i dettagli di basso livello seppure possano servire come "bagaglio culturale".
PS: l'informatica non è uno strumento solo fine a se stesso.
ma che diavolo dici :)
Le Bibbie sono The Art of Programming, Refactoring, i libri di Tanenbaum, Introduction to Algorithms e qualcosa sull'OODesign, i libri imprescindibili per qualsiasi informatico e bada bene che NESSUNO è focalizzato su un particolare linguaggio, com'è giusto che sia, ma sono agnostici alle tecnologie perché spiegano le metodologie o forniscono le competenze necessarie a risolvere qualsiasi tipo di problema.
sono totalmente daccordo
Quando al mondo verranno epurati, per osmosi e perché l'Università avrà rimosso i dinosauri dal comparto insegnanti, i concetti per cui per cominciare a programmare si debba partire da C e dalla prog procedurale, il mondo sarà un mondo migliore.
Poi chiaramente nasceranno sempre persone come k0nt3 che continueranno a dire "nessuno ha dimostrato niente ecc. ecc." quando è stato detto loro in tutte le salse, confutato e provato che un segmentation fault, C e compagnia sono inutili a formare la mente di uno sviluppatore, che invece è così anzi è utile, ma saranno sempre le eccezioni che non vogliono vedere o preferiscono vedere quello che più piace loro.
Ma sono eccezioni, lo sono adesso e lo saranno sempre di più.
E per fortuna.
non sono per niente daccordo. devi capire che non sono tutti come te, c'è a chi piace conoscere i dettagli di basso livello, e non è mica detto che diventeranno pessimi programmatori.
è sbagliato dire che un programmatore deve risolvere problemi, questa definizione comprende solo una parte dell'obiettivo di un programmatore.
infatti programmare significa risolvere problemi usando gli strumenti informatici a disposizione, e questo implica la conoscenza degli strumenti che si usano.
certamente è anche possibile ignorare totalmente tutto questo e programmare senza avere la minima consapevolezza di quello che accade realmente, ma dubito fortemente che questo sia un motivo per programmare "meglio".
semplicemente la programmazione di cui parlate voi e quella di cui ho parlato poche righe sopra sono due cose diverse e complementari (si posso imparare in momenti diversi e senza particolari problemi se non nella mente del soggetto). un programmatore DEVE sapere a che livello porsi, non esiste nessun approccio che è meglio sempre.
se parliamo di imparare a programmare invece sto dicendo che si può imparare a programmare sia in Java che in C che in Python, non vedo quale sia il problema, dipende dalle attitudini del soggetto.
certo è che se uno viene sul forum a chiedere ogni minima cassata (dolce tipico siciliano) significa che non andrà molto lontano. e questo sia che sta usando python che C.
per il resto ho già ampiamente argomentato il fatto che tutto quello che si apprende con il C serve anche quando si programma in altri linguaggi. addirittura l'uso dei puntatori è presente in C#, ma anche quando si parla di reference in un qualsiasi linguaggio moderno può tornare d'aiuto il concetto di puntatore per capire come mai Java non ha il passaggio per riferimento (ci sono volute una ventina di pagine in un thread di questo forum per convincere certi programmatori), come mai in Java quando copio un oggetto non viene eseguita una deep copy ecc...
quando si programma seriamente questi sono problemi che vanno affrontati, non basta ragionare in termini astratti e saper risolvere problemi, bisogna anche conoscere gli strumenti informatici che vanno usati, il resto è pura fantasia.
cdimauro
10-08-2008, 15:43
E noi abbiamo stra-argomentato sul perché partire col C è perfettamente inutile, oltre che deleterio.
Tu stesso nel tuo precedente messaggio hai posto le basi per eliminare il C sia sul piano meramente didattico, che non.
Quanto alla consapevolezza di sapere ciò che c'è sotto, è roba inutile. Al programmatore è necessario sapere come risolvere i problemi, certamente non roba come questa:
>>> import dis
>>> def f(a, x, y, z):
... if a >= 0:
... return y, z, x
... else:
... return x, y, z
...
>>> dis.dis(f)
2 0 LOAD_FAST 0 (a)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 5 (>=)
9 JUMP_IF_FALSE 17 (to 29)
12 POP_TOP
3 13 LOAD_FAST 2 (y)
16 LOAD_FAST 3 (z)
19 LOAD_FAST 1 (x)
22 BUILD_TUPLE 3
25 RETURN_VALUE
26 JUMP_FORWARD 14 (to 43)
>> 29 POP_TOP
5 30 LOAD_FAST 1 (x)
33 LOAD_FAST 2 (y)
36 LOAD_FAST 3 (z)
39 BUILD_TUPLE 3
42 RETURN_VALUE
>> 43 LOAD_CONST 0 (None)
46 RETURN_VALUE
Questa è roba che interessa me perché mi sono messo in testa di smanettare con la virtual machine di Python. :asd:
grigor91
10-08-2008, 16:32
E noi abbiamo stra-argomentato sul perché partire col C è perfettamente inutile, oltre che deleterio.
Tu stesso nel tuo precedente messaggio hai posto le basi per eliminare il C sia sul piano meramente didattico, che non.
Io mi chiedo com'è possibile visto che il C è inutile non si riesca a non utilizzarlo? perchè i sostituti non hanno così successo da mandarlo in pensione?
Perchè programmatori di alcune nicchie importanti devono utilizzarlo controvoglia?
E noi abbiamo stra-argomentato sul perché partire col C è perfettamente inutile, oltre che deleterio.
se è vero che tutto quello che si apprende con il C non va assolutamente buttato via come ho ampiamente argomentato nei post precedenti, allora non è nemmeno vero che è inutile.
di deleterio c'è solo la mente di chi programma male, non il linguaggio
Io mi chiedo com'è possibile visto che il C è inutile non si riesca a non utilizzarlo? perchè i sostituti non hanno così successo da mandarlo in pensione? tra qualche anno succederà: C# è il futuro per i sistemi operativi (vedi Singularity (http://en.wikipedia.org/wiki/Singularity_(operating_system))).
cdimauro
10-08-2008, 18:03
Io mi chiedo com'è possibile visto che il C è inutile non si riesca a non utilizzarlo? perchè i sostituti non hanno così successo da mandarlo in pensione?
Perchè programmatori di alcune nicchie importanti devono utilizzarlo controvoglia?
Legacy: la chiave di tutto sta qui. C'è troppo codice che lo utilizza e che... dev'essere anche mantenuto.
Inoltre ci sono s.o. come Unix che si sono legati mani e piedi a C: programmare su sistemi Unix-like è praticamente equivalente a lavorare in C.
C'è molta difficoltà, e anche un giusto timore in alcuni casi, a "svecchiare" gli strumenti.
se è vero che tutto quello che si apprende con il C non va assolutamente buttato via come ho ampiamente argomentato nei post precedenti, allora non è nemmeno vero che è inutile.
di deleterio c'è solo la mente di chi programma male, non il linguaggio
No, c'è anche il linguaggio:
#include <stdio.h>
int main(void) {
int n;
while (scanf("%d", n) == 1)
printf ("%d\n", n);
return 0;
}
Prova a fare la stessa cosa in Pascal, che è un linguaggio tanto procedurale quanto il C, e per giunta pure più vecchio.
E questo è solo un esempio.
tra qualche anno succederà: C# è il futuro per i sistemi operativi Microsoft (vedi Singularity (http://en.wikipedia.org/wiki/Singularity_(operating_system))).
Sistemato :O :p
Inoltre ci sono s.o. come Unix che si sono legati mani e piedi a C: programmare su sistemi Unix-like è praticamente equivalente a lavorare in C.
Ma anche no. Se guardi un sistema operativo unix appena installato una notevole quantita' del software di base e' in script vari tra shell, python, perl etc.
La quantita' di codice C/C++ e' probabilmente analoga a quella che si trova in un sistema Windows.
Se guardi poi gli ambienti grafici c'e' una certa quantita' accessori/tool scritti in linguaggi di piu' alto livello. Anzi, quando si va oltre i linguaggi mainstream (c++,vb,.net,java) c'e' piu' disponibilita' sotto unix che sotto windows.
grigor91
10-08-2008, 19:13
tra qualche anno succederà: C# è il futuro per i sistemi operativi (vedi Singularity (http://en.wikipedia.org/wiki/Singularity_(operating_system))).
a dire la verità già si sta muovendo qualcosa con seven visto che si sta sviluppando utilizzando largamente .net
Ho letto anche che Midori è derivato appunto da Singularity.
cdimauro
10-08-2008, 19:49
Ma anche no. Se guardi un sistema operativo unix appena installato una notevole quantita' del software di base e' in script vari tra shell, python, perl etc.
La quantita' di codice C/C++ e' probabilmente analoga a quella che si trova in un sistema Windows.
Se guardi poi gli ambienti grafici c'e' una certa quantita' accessori/tool scritti in linguaggi di piu' alto livello. Anzi, quando si va oltre i linguaggi mainstream (c++,vb,.net,java) c'e' piu' disponibilita' sotto unix che sotto windows.
Sì, so che esistono tante applicazioni scritte in linguaggi di più alto livello (anche Python è abbastanza diffuso), ma vedo ancora troppo utilizzo di C & co.
a dire la verità già si sta muovendo qualcosa con seven visto che si sta sviluppando utilizzando largamente .net non ho idea di come stiano realizzando Windows 7, ma non credo che ci sia del C# nel kernel: credo che sia ancora un kernel NT. ipotizzo che la rivoluzione la faranno introducendo Singularity come una nuova versione di Windows, cosa che avverrà forse già dopo Windows 7 contando che la vita media dei sistemi Windows col passare del tempo si allunga; almeno, questa è la mia impressione.
Sistemato :O :p il Windows del futuro è scritto in C# (o meglio, in Sing# stando a Wikipedia, una derivazione del C#), e Linux invece? continuerà idiotamente a mantenere la tradizione del classico kernel C POSIX-compliant, continuerà ancora più idiotamente a vantarsi di entrare su un floppy (quando già adesso iniziano ad esserci computers senza lettore floppy)?
Singularity non è l'unico tentativo di scrivere un sistema operativo in C#; vedi sulla pagina di Wikipedia che ho linkato. quando Singularity sarà una realtà quotidiana, Linux scritto in C non potrà più essere considerato un sistema operativo, non uno degno di questo nome.
Albitexm
11-08-2008, 01:12
Ma se non ci si aggiorna mai si rimane sempre a lavorare per una vita con lo stesso linguaggio, e ciò imho non è mai un bene.
Un informatico dal mio punto di vista non può assolutamente essere conservatore ma deve aprire continuamente la mente a nuovi concetti che lo potrebbero aiutare a lavoro.
Questa tua affermazione è vera e non vera . Dal punto di vista generale credo
sia indubbiamente vero che bisogna "aprire continuamente la mente a nuovi concetti" , questo in tutti i campi della vita. Per quanto riguarda il lavoro , personalmente credo sia utile essere sempre aggiornati , ma non esagerare nel cercare "per forza" nuove soluzioni per risolvere dei problemi. Questo potrebbe essere controproducente.
Per quanto riguarda la situazione reale nelle aziende, l'innovazione in Italia purtroppo , non è vista molto bene . Anzi, spesso è chiaramente osteggiata . Il mondo del lavoro italiano è tradizionalista , conservatore , rigido e parentale. Il nostro è il paese in europa con il più alto numero di "consulenti" pensionati all'interno delle aziende. L'Italia ha un'età media dei lavoratori più alta del mondo (e anche dei " non lavoratori", che sono la maggioranza).
Dalla mia esperienza , introdurre un nuovo metodo di lavoro, una nuova tecnologia in azienda è spesso controproducente. E comunque possibile , solo dopo avere ottenuto il tacito consenso dei "mammasantissima aziendali". E' quasi una missione impossibile . Non per niente tutte le innovazioni tecnologiche arrivano dagli States , ed ultimamente dai paesi emergenti :
(India,Pakistan,Cina ed Est europeo). L'Italia è ormai un paese di pensionati , adatto a passare la villeggiatura e a visitare i musei e comprare vestiti alla moda (che tanto fanno in Cina, ma l'illusione del capo firmato conta) .
RaouL_BennetH
11-08-2008, 09:01
Mi intrometto in questa bella discussione :)
Mi sembra chiaro che le idee che ciascuno espone, siano dettate dall'ambito e dalle circostanze in cui si trova. Per esempio, l'ottimo TigerShark in qualità di "studente" e in qualità di insaziabile curioso informatico (nel senso migliore del termine beninteso!) dà un giusto suggerimento per quanto riguarda il tenersi aggiornati, quantomeno di sapere quali nuovi strumenti esistano sul mercato etc..
Da un punto di vista però meramente lavorativo, in genere (e aggiungo purtroppo), non funziona proprio così. Molto difficilmente in un'azienda sarà lasciata al programmatore la facoltà di scegliere gli strumenti giusti per risolvere dei problemi, ma si utilizzeranno gli strumenti che l'azienda ha a disposizione, anche quando sono insufficienti o inadeguati per risolvere quel determinato problema. E questo spiegherebbe anche la quantità notevole di software scritto alla meno peggio e non sempre per colpa del/dei programmatore/i.
Vorrei sottolineare che io NON sono un programmatore, ma lavorando fianco a fianco con un ottimo programmatore che frequentava questo forum, mi sono potuto fare un'idea di come funzionano le cose.
Diverso è il discorso dove un'azienda che non ha un settore it interno, si rivolge all'esterno per farsi realizzare un programma ad hoc, e, in questo caso, torna utile il modo di vedere di TigerShark e degli altri come lui che è fondamentale tenersi aggiornati.
Mi è capitato invece di assistere personalmente a questa cosa:
Un'azienda del sud, molto grande, ha richiesto all'azienda del mio amico di cui sopra di realizzare un determinato software. Quest'azienda ha al suo interno un settore it. Bene, il settore it come pre-requisiti necessari, ha chiesto e ordinato che il software venisse sviluppato in VB6 e Access 97 come base dati. Alla richiesta di motivazioni, è stata fornita la spiegazione che siccome il personale interno che gestisce l'it dell'azienda, come know-how acquisito ha soltanto quello relativo ai suddetti strumenti. Non c'è stato verso di fargli cambiare opinione visto che poi, successivamente al rilascio, dovrà essere il personale interno ad occuparsi di manutenere il software.
Per quanto possa sembrare strano, ci sono molte aziende che ragionano in questo modo, lasciando uno scenario informatico italiano a livelli alquanto scadenti.
Singularity non è l'unico tentativo di scrivere un sistema operativo in C#; vedi sulla pagina di Wikipedia che ho linkato. quando Singularity sarà una realtà quotidiana, Linux scritto in C non potrà più essere considerato un sistema operativo, non uno degno di questo nome.
non metto in dubbio che ciò accada, ma sviando il discorso in questo senso sembra che questo implica che C diventerà (per qualcuno "è") un linguaggio "inutile".
questo non accadrà mai, al massimo si potrà dire che sarà un linguaggio poco usato e magari per questo non verrà nemmeno insegnato nelle scuole (siamo molto lontani da questo scenario tuttavia).
sarebbe inutile se quello che si impara usando C fosse da buttare via una volta passati a un altro linguaggio, ma questo non è vero come ho già avuto modo di spiegare senza che nessuno riuscisse a portare argomentazioni diverse da: "no perchè no"
ps. riguardo a linux penso che quando ci sarà la reale necessità di qualcosa di diverso, si evolverà in qualche maniera o verrà sostituito da un altro kernel (sicuramente non GNU HURD), in ogni caso non è affatto legato mani e piedi a C, ad esempio dove c'è stata la necessità si sono creati moduli come FUSE che permettono di usare un linguaggio qualsiasi per interfacciarsi alle funzionalità del kernel.
Legacy: la chiave di tutto sta qui. C'è troppo codice che lo utilizza e che... dev'essere anche mantenuto.
Inoltre ci sono s.o. come Unix che si sono legati mani e piedi a C: programmare su sistemi Unix-like è praticamente equivalente a lavorare in C.
C'è molta difficoltà, e anche un giusto timore in alcuni casi, a "svecchiare" gli strumenti.
No, c'è anche il linguaggio:
#include <stdio.h>
int main(void) {
int n;
while (scanf("%d", n) == 1)
printf ("%d\n", n);
return 0;
}
Prova a fare la stessa cosa in Pascal, che è un linguaggio tanto procedurale quanto il C, e per giunta pure più vecchio.
E questo è solo un esempio.
non ci vedo niente di "inutile" nel codice che hai postato :fagiano:
per il resto sono daccordo che per sviluppare un progetto al giorno d'oggi C deve essere considerata l'ultima spiaggia, non vorrei che crediate che io programmi in C nel tempo libero :asd:
Posso buttare qualche differenza tra C++ e C#.
Poi quelle tra C e C++ per chiudere il cerchio le lascio a qualcun altro, dato che praticamente non ho mai programmato in C per motivi commerciali.
Tenete anche conto che ho smesso di usare il C++ per fini commerciali prima dell'inserimento delle standard library. Non so neppure se sono uno standard o meno.
E' quindi probabile che alcune delle differenze siano meno marcate di quanto pensi.
Ho diviso i punti in Pro e Contro, come puro sentore personale. Alcune cose che sono dei Pro potrebbero essere contro per qualcuno e viceversa.
Se non vi piace questa classificazione, mettete tutto insieme e consideratele differenze e basta.
Pro:
1. Garbage collection e non necessita' dell'uso di puntatori e di distruttori
2. Reflection, per conoscere a Runtime le proprieta'/metodi degli oggetti ed eventualmente richiamarli
3. No file di Header, nessun problema relativo ad obblighi di dichiarazioni di classi prima di altre. Nessun problema di dipendenze circolari.
4. Pure object oriented: tutto deriva da un singolo oggetto.
5. Un solo modo di allocazione memoria mediante la keyword new.
6. Supporto nativo al Multithread e alla sincronizzazione
7. Interfacce: Se un oggetto utente implementa un interfaccia potra' essere passato ad una funzione anche di terze parti che richiede quell'interfaccia come input.
8. Classi annidate con diverse visibilita'
9. No funzioni globali o costanti. Tutto e' fortemente orientato agli oggetti e appartiene ad una classe.
10. Array e stringhe posseggono nativamente proprieta' come Length e hanno nativamente i controlli di boundary checking
11. L'operatore . (punto) viene usato dappertutto. Eliminata la necessita' di distinguere tra . -> :: per accedere a membri di classe.
12. null e bool sono keyword
13. Tutti i valori sono forzatamente inizializzati prima dell'uso
14. Un valore intero non governa gli if. Gli if sono governati solo da booleani.
15. il costrutto try puo' avere un finally
16. La compilazione risulta in un file indipendente dalla macchina. E' sufficiente avere una virtual machine sul SO e il file, gia' compilato, funzionera' anche solo copiandolo semplicemente da SO a SO.
17. Supporto alla creazione di Template (Generics) fortemente tipizzati
18. Lambda expression, lambda function e programmazione Funzionale
19. Supporto nativo al parallelismo.
20. Eventuale supporto nativo al parallelismo senza necessita' di governare esplicitamente i thread.
21. Supporto ai database uniformato.
22. Supporto nativo di trasformazione di un database relazionale ad un database ad oggetti. Il database puo' essere visto come una collezione di array interdipendenti. (LINQ to SQL, simile a NIbernate)
23. Un solo tipo di string.
24. Alcune ottimizzazioni vengono risolte a RunTime. La macchina virtuale impara durante l'esecuzione del programma. P.Es. alcune funzioni vengono trasformate a funzioni inline al volo.
25. Esistenza dei delegate, che realizzano un type-safe nella dichiarazione dei puntatori a funzione del C++.
26. Lazy evaluation. Mediante la programmazione funzionale e' possibile far valutare espressioni solo se veramente necessario
27. Mediante le Lambda Function e' possibile passare pezzi di codice come parametro, scritti in modo conciso e strong-typed.
28. Il costrutto switch non permette il fall-trought tra i case, sovente sorgente di errori.
29. Supporto nativo alle Properties, con piu' facile incapsulamento e controllo delle variabili
30. Aggiunta di attributi e metadati al codice, leggibili e usabili anche a Runtime
31. Integrazione completa con la documentazione, per la scrittura automatica di documenti e per il supporto all'intellisense.
32. Dispone gia' da standard di Enumeratori e Collezioni fortemente tipizzati.
33. Libreria (Framework .net) con utility per quasi tutte le esigenze.
34. Estensore di classi. E' possibile estendere una classe, costruita da qualcun altro, con nuovi metodi. (Si deve pero' fare uso di sole proprieta'/metodi pubblici, logico per preservare il paradigma object oriented)
35. Una funzione (raramente usate) che accetta un parametro di tipo out, per modificarlo, e' obbligata a farlo.
36. Si possono governare progetti complessi, con l'integrazione Project Server e Visual Soursafe, tutto dall'unico ambiente di sviluppo Visual Studio.
37. Direttamente da Visual Studio esistono estensioni e template Standard per la creazione di progetti di svariati tipi, come i Web Services, architetture SOA, WF (Windows Workflow), WPF (Windows Presentation Foundation), WCF (Windows Communication Foundation), ASP.net (website), ASP.net+AJAX.net, ...
38. Se Il C# non dovesse piacere per qualche componente, e' possibile utilizzare VB.net o C++.net e usare tutto da una stessa soluzione.
39. E' possibile richiamare in modo molto semplice pezzi di codice C++, purche' non facciano uso di parametri di tipo particolare. Per parametri piu' complessi la situazione non e' cosi' agevole. E' comunque possibile mediante Marshaling.
40. Se non si sa qualcosa il piu' delle volte e' sufficiente premere F1, senza dover navigare troppo sul Web. La maggior parte della documentazione e' tutta concentrata nella risorsa MSDN.
Contro:
1. E' generalemente piu' lento. Il motivo principale e' che gli array in ambienti managed vengono acceduti mediante CALL invece che con un paio di accessi diretti a zone di memoria
2. La virtual machine completa c'e' solo per ambiente Windows. Per ambiente Linux e' piu' indietro (e probabilmente sara' sempre un passo indietro rispetto alla Windows). Per altri ambienti non esiste.
3. Non e' fattibile un controllore fortemente sincrono per ambienti RealTime. Anche il C++ non e' la soluzione migliore.
4. Mancanza di derivazione multipla (voluta).
5. Impossibilita' di utilizzare operatori matematici all'interno di Generics, che deriva dalla impossibilita' di forzare un operatore mediante interfaccia
6. E' progettato, mantenuto ed espanso da una compagnia privata, la Microsoft. La community e' pero' aperta e l'atmosfera che vi si respira non e' dissimile dalle community open-source. Se la Microsoft dovesse lasciarci le penne e' probabile che il C# fara' la stessa fine.
7. Il C# e' giovane, non si sa cosa succedera'
cdimauro
11-08-2008, 20:21
non metto in dubbio che ciò accada, ma sviando il discorso in questo senso sembra che questo implica che C diventerà (per qualcuno "è") un linguaggio "inutile".
Come linguaggio lo è, infatti: ubi maior minor cessat dicevano gli antichi latini...
Se sai cosa vuol dire, saprai anche cosa intendo per maior. :O
questo non accadrà mai, al massimo si potrà dire che sarà un linguaggio poco usato e magari per questo non verrà nemmeno insegnato nelle scuole (siamo molto lontani da questo scenario tuttavia).
Il solo fatto di non insegnarlo sarebbe già una gran cosa. :D
sarebbe inutile se quello che si impara usando C fosse da buttare via una volta passati a un altro linguaggio,
Questo è proprio banalissimo da smentire: dal C passa a SmallTalk e vedi se continuerai a programmare allo stesso modo.
ma questo non è vero come ho già avuto modo di spiegare senza che nessuno riuscisse a portare argomentazioni diverse da: "no perchè no"
Ne abbiamo già discusso e non ci siamo limitati soltanto ai "perché no", ma abbiamo AMPIAMENTE ARGOMENTATO, e continuare a riportare la solita litania non ti darà automaticamente ragione.
Tra l'altro ti avevo anche riproposto di riuppare i vecchi thread e di continuare la discussione, ma ti sei tirato indietro.
Io sono disponibile a riprendere la discussione SE E SOLO SE ti deciderai a portarla a termine, perché non voglio più tornarci. Quindi fino a quando alla domanda: "è utile insegnare/imparare il C?" non si darà una risposta secca; un bel SI' oppure NO.
Così mi segno il thread e te lo rispiattello senza commenti alla prossima occasione che tirerai fuori nuovamente l'argomento.
ps. riguardo a linux penso che quando ci sarà la reale necessità di qualcosa di diverso, si evolverà in qualche maniera o verrà sostituito da un altro kernel (sicuramente non GNU HURD), in ogni caso non è affatto legato mani e piedi a C, ad esempio dove c'è stata la necessità si sono creati moduli come FUSE che permettono di usare un linguaggio qualsiasi per interfacciarsi alle funzionalità del kernel.
Poca roba rispetto a tutto il resto.
non ci vedo niente di "inutile" nel codice che hai postato :fagiano:
Più che di codice inutile si tratta di codice errato.
per il resto sono daccordo che per sviluppare un progetto al giorno d'oggi C deve essere considerata l'ultima spiaggia, non vorrei che crediate che io programmi in C nel tempo libero :asd:
Ma come? Il C non era utile come linguaggio? Perché non lo usi? :read: :Prrr:
..a parte che sti Criteria così ad occhio mi fanno schifo.. :Puke:
SQL è pensato proprio per lavorare sui DB tant'è vero che ha una potenza espressiva inferiore a quasi tutti gli altri linguaggi.
Per me, tornando all'esempio di cui sopra, sarebbe MOLTO + chiaro scrivere:
var result = (from c in categories
where c.name.StartsWith("F")
orderby c.name, c.age descending
select c).Take(50);
Quello che hai scritto tu in Java si fa con JPA QL (o HQL in hibernate)
con i criteria puoi in modo elegante e object oriented costruire interrogazioni al DB in modo dinamico.
se certi condizioni sono verificate, aggiungi una restriction al tuo criteria, oppure effettui una join e applichi una restriction alla join ecc.
in ogni caso se conosci i criteria, ciò non vuol dire che te ne puoi fregare di JDBC o SQL nativo.
allo stesso modo per comprendere C# o Java è utile avere studiato C su un libro didattico come il K&R, altrimenti finiresti con usare funzioni già belle pronte, ad esempio il sort suggerito da Unrue, senza allenare la mente a certi ragionamenti logici.
cdimauro
11-08-2008, 20:52
allo stesso modo per comprendere C# o Java è utile avere studiato C
Assolutamente in disaccordo, visto che con C# si tende a programmare a oggetti, con un po' di programmazione funzionale, e il C è quanto di più lontano da tutto ciò.
su un libro didattico come il K&R,
Ti è stato già detto che il K&R NON è un libro didattico.
altrimenti finiresti con usare funzioni già belle pronte, ad esempio il sort suggerito da Unrue, senza allenare la mente a certi ragionamenti logici.
Sono due cose che non c'entrano niente. Gli algoritmi prescindono dal linguaggio e servono per allenare la mente.
Col C, invece, dopo aver allenato la mente a risolvere problemi con una certa mentalità poi impiegheresti altro tempo per disimparare lavorando con linguaggi come C#, Java, Python, ma anche il C++ stesso.
Assolutamente in disaccordo, visto che con C# si tende a programmare a oggetti, con un po' di programmazione funzionale, e il C è quanto di più lontano da tutto ciò.
Ma lo capirete prima o poi che quando si programma in Java o in C# sia usa sia programmazione strutturata, sia programmazione funzionale, sia programmazione a oggetti?!?!
gugoXX, ti faccio qualche precisazione sul C++:
7. Interfacce: Se un oggetto utente implementa un interfaccia potra' essere passato ad una funzione anche di terze parti che richiede quell'interfaccia come input. embè...? anche in C++ :wtf:
per essere pignoli in C++ non esistono interfacce, ma non esistono solo perché non ce n'è bisogno: basta dichiarare una classe contenente solo metodi astratti.
8. Classi annidate con diverse visibilita' si possono fare anche in C++ da quanto mi risulta
12. null e bool sono keyword bool, true e false sono keywords anche in C++.
15. il costrutto try puo' avere un finally anche in C++ perdindirindina! :D
17. Supporto alla creazione di Template (Generics) fortemente tipizzati purtroppo non so bene cosa voglia dire "fortemente tipizzati", comunque i template ci sono anche in C++ e sono molto potenti.
23. Un solo tipo di string. e perché, in C++ quanti ce ne sono scusa? :mbe:
se intendi dire che in C++ oltre a std::string c'è anche char* allora ti rispondo che gli array di caratteri li puoi fare anche in C#.
26. Lazy evaluation. Mediante la programmazione funzionale e' possibile far valutare espressioni solo se veramente necessario non ne sono certo a causa del fatto che lo standard del C++ non è gratis, ma credo che la lazy evaluation non sia un'ottimizzazione dei compilatori C++, ma che faccia proprio parte dello standard.
28. Il costrutto switch non permette il fall-trought tra i case, sovente sorgente di errori. ma in questo modo non permette neanche di reagire allo stesso modo in più casi.
29. Supporto nativo alle Properties, con piu' facile incapsulamento e controllo delle variabili le STL includono una classe map; non conoscendo bene Properties non so se è paragonabile.
32. Dispone gia' da standard di Enumeratori e Collezioni fortemente tipizzati. anche il C++; si potrebbe obiettare che in certi casi quelli del C++ fanno un po' schifo (non scherzo).
40. Se non si sa qualcosa il piu' delle volte e' sufficiente premere F1, senza dover navigare troppo sul Web. La maggior parte della documentazione e' tutta concentrata nella risorsa MSDN. la documentazione sul C++ d'altra parte è tutt'altro che difficilmente reperibile: esistono ottimi siti come www.cplusplus.com e www.cppreference.com, ed inoltre esiste una versione della documentazione anche su MSDN stessa.
grigor91
11-08-2008, 21:09
Col C, invece, dopo aver allenato la mente a risolvere problemi con una certa mentalità poi impiegheresti altro tempo per disimparare lavorando con linguaggi come C#, Java, Python, ma anche il C++ stesso.
Mi sembra strano che per imparare un nuovo linguaggio bisogna disimpararne un'altro; al massimo si accantona.
allo stesso modo per comprendere C# o Java è utile avere studiato C su un libro didattico come il K&R,
Se per didattico intendi che insegna a programmare mi trovi in disaccordo. Lo scopo del k&r è quello di spiegare le caratteristiche del linguaggio C e una panoramica della sua libreria standard e niente più. Per imparare le basi i sono altri testi.
altrimenti finiresti con usare funzioni già belle pronte, ad esempio il sort suggerito da Unrue, senza allenare la mente a certi ragionamenti logici.
Il fatto che C# o altri linguaggi forniscano già una enormità di funzioni già pronte non significa che il programmatore non imparerà mai a scrivere un algoritmo. Se seguissimo alla lettera questo ragionamento anche il C non andrebbe bene perché fornisce funzioni già pronte per ordinamento e ricerca molto generali non avrebbe senso scriverle ogni volta.
Io trovo che se si vuole studiare per bene un argomento come gli algoritmi sia più facile usare un linguaggio come python/ruby in cui puoi evitare di pensare a tantissimi problemi di basso livello e concentrarti su quello che vuoi realmente imparare.
Assolutamente in disaccordo, visto che con C# si tende a programmare a oggetti, con un po' di programmazione funzionale, e il C è quanto di più lontano da tutto ciò.
Ti è stato già detto che il K&R NON è un libro didattico.
Sono due cose che non c'entrano niente. Gli algoritmi prescindono dal linguaggio e servono per allenare la mente.
Col C, invece, dopo aver allenato la mente a risolvere problemi con una certa mentalità poi impiegheresti altro tempo per disimparare lavorando con linguaggi come C#, Java, Python, ma anche il C++ stesso.
dai un po' un occhiata al repository del tuo amato Python...
http://svn.python.org/view/python/trunk/Parser/
(file) node.c 64114 2 months gregory.p.smith Merge in release25-maint r60793: Added checks for integer overflows, contribut...
(file) parser.c 61953 4 months christian.heimes Patch #2477: Added from __future__ import unicode_literals The new PyParser_*Ex...
(file) parser.h
Sti infedeli programmano in C.
Mi sembra strano che per imparare un nuovo linguaggio bisogna disimpararne un'altro; al massimo si accantona.
Non il linguaggio come i puntatori, struct ed enum ma il modo di pensare e risolvere i problemi. C è procedurale e porta a trovare soluzioni in modo completamente diverso da linguaggi ad oggetti.
cdimauro
11-08-2008, 21:20
Ma lo capirete prima o poi che quando si programma in Java o in C# sia usa sia programmazione strutturata, sia programmazione funzionale, sia programmazione a oggetti?!?!
Certo: proprio il modo giusto per lavorare con quei linguaggi... :rolleyes:
Mi sembra strano che per imparare un nuovo linguaggio bisogna disimpararne un'altro; al massimo si accantona.
E' questione di mentalità: i problemi li si affronta in maniera molto diversa.
Spesso passando da C a un linguaggio a oggetti si continua a sviluppare il codice in maniera strutturata.
dai un po' un occhiata al repository del tuo amato Python...
http://svn.python.org/view/python/trunk/Parser/
(file) node.c 64114 2 months gregory.p.smith Merge in release25-maint r60793: Added checks for integer overflows, contribut...
(file) parser.c 61953 4 months christian.heimes Patch #2477: Added from __future__ import unicode_literals The new PyParser_*Ex...
(file) parser.h
Sti infedeli programmano in C.
Ho i sorgenti di CPython 2.6b2 aperti proprio qui davanti a me in questo momento, e so benissimo cosa significa.
Sei tu che non ti sei preso la briga di controllare un'altra utile paginetta. Questa: http://www.python.org/dev/implementations/
Da notare le ALTRE implementazioni di Python che... non sono scritte in C. Chissà perché: spiegamelo tu, dai, visto che ti sei preso la briga di googlare e riportare quelle 3 informazioni di cui sopra.
Provo a replicare su qualche punto.
Alla fine aggiustero' la lista, per evitare futuri errori.
12. null e bool sono keyword
bool, true e false sono keywords anche in C++.
Una volta non lo erano.
Neppure byte lo era, ora che mi ricordo. E non avevo mai capito il perche', dato che gia' dal C il linguaggio si fregiava di essere abbastanza a basso livello.
Non dico WORD o keyword simili, effettivamente platform dependent.
Ma almeno byte e bool (o bit). Bit c'era addirittura in Pascal se non erro...
_________________________________
Quote:
15. il costrutto try puo' avere un finally
anche in C++ perdindirindina!
Anche questo non c'era nel C++ fino al 2000 almeno.
Sei sicuro che ci sia oggi nel C++ standard? Ho sentito parlare della sua mancanza non piu' di 2 anni fa.
Ma magari la persona che me ne ha parlato non era effettivamente aggiornata.
__________________________________________
17. Supporto alla creazione di Template (Generics) fortemente tipizzati
purtroppo non so bene cosa voglia dire "fortemente tipizzati", comunque i template ci sono anche in C++ e sono molto potenti.
Lo so che ci sono anche in C++. La differenza sta nell'istante di creazione del template/generic. Riporto qui un pezzo esplicativo
The big difference between C# generics and C++ templates shows up in when the type checking occurs and how the instantiation occurs. First of all, C# does the instantiation at runtime. C++ does it at compile time, or perhaps at link time. But regardless, the instantiation happens in C++ before the program runs. That's difference number one. Difference number two is C# does strong type checking when you compile the generic type. For an unconstrained type parameter, like List<T>, the only methods available on values of type T are those that are found on type Object, because those are the only methods we can generally guarantee will exist. So in C# generics, we guarantee that any operation you do on a type parameter will succeed.
C++ is the opposite. In C++, you can do anything you damn well please on a variable of a type parameter type. But then once you instantiate it, it may not work, and you'll get some cryptic error messages. For example, if you have a type parameter T, and variables x and y of type T, and you say x + y, well you had better have an operator+ defined for + of two Ts, or you'll get some cryptic error message. So in a sense, C++ templates are actually untyped, or loosely typed. Whereas C# generics are strongly typed.
______________________________________
23. Un solo tipo di string.
e perché, in C++ quanti ce ne sono scusa?
se intendi dire che in C++ oltre a std::string c'è anche char* allora ti rispondo che gli array di caratteri li puoi fare anche in C#.
Intendevo anche le BSTR, le WCHAR*, le TCHAR*, le OLECHAR*
elementi con cui devi fare conoscenza se vuoi costruire un programma internazionale.
A meno che le cose siano cambiate anche in questa direzione...
Per non parlare poi delle varianti, come TUCHAR, LPSTR, LPCSTR, PWSTR, LPCWSTR, OLECHAR FAR* (!!!!! mavaff)
_______________________________________
Quote:
26. Lazy evaluation. Mediante la programmazione funzionale e' possibile far valutare espressioni solo se veramente necessario
non ne sono certo a causa del fatto che lo standard del C++ non è gratis, ma credo che la lazy evaluation non sia un'ottimizzazione dei compilatori C++, ma che faccia proprio parte dello standard.
Intendevo un pezzo di codice come questo
int pippo(int test, int val)
{
if (test>100) return val;
return 0;
}
....
int valore=pippo(5, metodolento(a,b,c) );
...
Dove metodolento e' un metodo lento... che ritorna un intero.
In C++ metodolento e' eseguito anche se non servira' dato che test varra' 5.
In C#, in programmazione funzionale, il metodolento non verra' eseguito affatto.
________________________________________
28. Il costrutto switch non permette il fall-trought tra i case, sovente sorgente di errori.
ma in questo modo non permette neanche di reagire allo stesso modo in più casi.
In C# il fall-trought e' permesso tra casi equivalenti, a patto di non mettere codice tra di essi.
Es:
switch(parametro)
{
case 0:
case 1:
case 2:
qualcosa
break
case 3:
case 4:
altro
break;
default:
....
}
Cosa che non si puo' fare e' mettere codice tra un case e l'altro, senza usare un break. Il break, se si e' scritto del codice, e' obbligatorio.
_______________________________
29. Supporto nativo alle Properties, con piu' facile incapsulamento e controllo delle variabili
le STL includono una classe map; non conoscendo bene Properties non so se è paragonabile.
Non so neppure io, come dicevo le STL non le ho usate in ambito commerciale.
Le properties sono la possiblita' di trasformare una variabile in 2 metodi, uno per il SET e uno per il GET, con codice eseguito ogni volta che si legge o si scrive tale variabile.
Vengono chiamate proprieta' per distinguerle dalle variabili normali, e sono un metodo di controllo di flusso davvero utile, sopratutto per trasformare in modo indolore un codice contenente quella che era una variabile, alla quale si e' dovuto associare in seguito un pezzo di codice da eseguire ogni volta quella variabile e' stata usata.
private int i_pippo;
public int pippo{
get
{
return ModificoIlValoreDi(i_pippo);
}
set
{
Log.Write("Valore pippo settato a %d",value);
i_pippo=value;
}
...
pippo = 75;
int y=pippo-15;
pippo viene usato esternamente come variabile, ma ogni volta che si legge o si scrive si fa uso indirettamente di un pezzo di codice.
_____________________________________
32. Dispone gia' da standard di Enumeratori e Collezioni fortemente tipizzati.
anche il C++; si potrebbe obiettare che in certi casi quelli del C++ fanno un po' schifo (non scherzo).
Eh, non lo so, come detto non conosco le STL. (Non so neppure se fanno parte dello standard)
________________________________________
40. Se non si sa qualcosa il piu' delle volte e' sufficiente premere F1, senza dover navigare troppo sul Web. La maggior parte della documentazione e' tutta concentrata nella risorsa MSDN.
la documentazione sul C++ d'altra parte è tutt'altro che difficilmente reperibile: esistono ottimi siti come www.cplusplus.com e www.cppreference.com, ed inoltre esiste una versione della documentazione anche su MSDN stessa.
P.es. se voglio far suonare in modo asincrono un po' di musica techno in backgorund durante l'esecuzione di un mio programma, posso piazzare questo pezzo di codice qui:
WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();
wmp.URL = "mms://wstream5a.di.fm/harddance";
A parte il numero di classi, di righe di codice, di ore di scrittura e di test necessarie per fare la stessa cosa in C++, anche utilizzando componenti gia' fatti come le librerie VLC o simili.
Per sapere come funziona un compontente come WindowsMediaPlayer, da dentro l'ambiente di programmazione schiaccio F1 sulla parola WindowsMediaPlayer si apre la guida e leggo.
Certo, mi potresti dire che il componente WindowsMediaPlayer e' in realta' una libreria scritta a sua volta in C++, circondata da chiamate managed per poter essere integrata a sua volta in C#.
E io rispondo che sono tanto felice di poter sfuttare a mia volta l'esperienza e la fatica di qualcuno,senza neppure virtualmente sapere come RTP, RSTP o MMS sono fatti (anche se in realta' RTP e RSTP li ho dovuti conoscere).
Anche chi usa il C++ o il C a sua volta sfrutta la fatica e l'esperienza di qualcuno, se non altro di chi ha scritto il compilatore o di chi ha scritto le librerie che si sono utilizzate.
cdimauro
11-08-2008, 23:08
Provo a replicare su qualche punto.
Alla fine aggiustero' la lista, per evitare futuri errori.
Una volta non lo erano.
Neppure byte lo era, ora che mi ricordo. E non avevo mai capito il perche', dato che gia' dal C il linguaggio si fregiava di essere abbastanza a basso livello.
Non dico WORD o keyword simili, effettivamente platform dependent.
Ma almeno byte e bool (o bit). Bit c'era addirittura in Pascal se non erro...
No, non c'era. In Pascal c'erano i set, che sono qualcosa di simile (ma più flessibile). :cool:
In C# il fall-trought e' permesso tra casi equivalenti, a patto di non mettere codice tra di essi.
Es:
switch(parametro)
{
case 0:
case 1:
case 2:
qualcosa
break
case 3:
case 4:
altro
break;
default:
....
}
Cosa che non si puo' fare e' mettere codice tra un case e l'altro, senza usare un break. Il break, se si e' scritto del codice, e' obbligatorio.
Se è così aggiungere il break è inutile: avrebbero dovuto rimuoverlo. ;)
E io rispondo che sono tanto felice di poter sfuttare a mia volta l'esperienza e la fatica di qualcuno,senza neppure virtualmente sapere come RTP, RSTP o MMS sono fatti (anche se in realta' RTP e RSTP li ho dovuti conoscere).
Anche chi usa il C++ o il C a sua volta sfrutta la fatica e l'esperienza di qualcuno, se non altro di chi ha scritto il compilatore o di chi ha scritto le librerie che si sono utilizzate.
Concordo. :)
Vincenzo1968
12-08-2008, 02:27
...
Il solo fatto di non insegnarlo sarebbe già una gran cosa. :D
...
Ma come? Il C non era utile come linguaggio? Perché non lo usi? :read: :Prrr:
...
Se un programmatore scarso come me è riuscito a risolvere i due quesiti del contest sul DNA, ottenendo tempi di un quinto di secondo per entrambi, penso a cosa potrebbe ottenere un programmatore medio o uno bravo(penso, per esempio, a repne ;) ).
Secondo me fanno benissimo a insegnarlo.
:)
Se un programmatore scarso come me è riuscito a risolvere i due quesiti del contest sul DNA, ottenendo tempi di un quinto di secondo per entrambi, penso a cosa potrebbe ottenere un programmatore medio o uno bravo(penso, per esempio, a repne ;) ).
Secondo me fanno benissimo a insegnarlo.
:)
E mia esperienza che in ambito commerciale, in azienda e nei gruppi di sviluppatori il target non e' quello.
Il target principale non e' la velocita'. Anche quella, ma non il principale.
Tra i target io metto la leggibilita', le velocita' di stesura del codice, lo sforzo che un altra persona deve compiere per metterci mano, la riusabilita'.
Quando e dove (ma solo dove) serve la velocita', ci si puo' concentrare sul punto specifico, costruire la classica black-box nel modo che piace di piu', e usarla nel contesto generale.
A parte la riusabilita', sulla quale ci sarebbe comunque da discutere, secondo me il C e' rimasto parecchio lontano da questi target. Non per niente nel tempo si e' cercato qualcosa di piu'.
E, sempre secondo me, anche l'informatica sta seguendo purtroppo le stesse impronte delle altre scienze.
Una scienza nuova attira menti fresche. Lo stesso e' accaduto all'informatica una ventina d'anni fa. Tutti i miei professori di campo erano giovanissimi, freschissimi, nessuno con piu' di 35 anni.
Tutti spingevano e si lanciavano su nuove tecnologie.
Se guardo oggi le materie, vedo sempre gli stessi argomenti, e vedo sempre le stesse persone.
Nel 2000 a Ingegneria Civile, ad un mio amico richiedevano ancora per parecchi esami la stesura di "papiri" A0 disegnati sul tecnigrafo, con penne a china di vari colori. Ore, giorni, settimane per ciascun elaborato.
Richiesto da professori barbogi che non sapevano neppure dell'esistenza di Autocad. Forse non sapevano neppure muovere il mouse.
Secondo me il C e' il tecnigrafo.
Nel 2000 a Ingegneria Civile, ad un mio amico richiedevano ancora per parecchi esami la stesura di "papiri" A0 disegnati sul tecnigrafo, con penne a china di vari colori. Ore, giorni, settimane per ciascun elaborato.
Richiesto da professori barbogi che non sapevano neppure dell'esistenza di Autocad. Forse non sapevano neppure muovere il mouse.
Secondo me il C e' il tecnigrafo.
Giustissimo.
Prima impari con il tecnigrafo, quando sai che se fai un errore, non puoi fare "undo", poi quando ti sei fatto il culo con il tecnigrafo, allora passerai a usare a Autocad.
Giustissimo.
Prima impari con il tecnigrafo, quando sai che se fai un errore, non puoi fare "undo", poi quando ti sei fatto il culo con il tecnigrafo, allora passerai a usare a Autocad.
E perche' giustissimo?
Le soluzioni tirate fuori con il tecnigrafo sono migliori di quelle tirate fuori con Autocad?
L'impossibilita' di cancellare rende migliore il risultato?
Forse che durante la stesura di un progetto non puo' venire voglia di cambiare qualcosa, riflettendo ed entrando piu' nel problema, ponendosi a riflettere su un determinato particolare, e che magari il dover cambiare qualcosa e magari ridisegnare tutto daccapo ti fa desistere?
O forse gli ingegneri civili sono talmente perfetti e supponenti da dire che ancora prima di iniziare a tirare la prima riga sono perfettamente consci di ciascun minimo particolare di quella che sara' la soluzione finale?
E perche' giustissimo?
Le soluzioni tirate fuori con il tecnigrafo sono migliori di quelle tirate fuori con Autocad?
L'impossibilita' di cancellare rende migliore il risultato?
Forse che durante la stesura di un progetto non puo' venire voglia di cambiare qualcosa, riflettendo ed entrando piu' nel problema, ponendosi a riflettere su un determinato particolare, e che magari il dover cambiare qualcosa e magari ridisegnare tutto daccapo ti fa desistere?
O forse gli ingegneri civili sono talmente perfetti e supponenti da dire che ancora prima di iniziare a tirare la prima riga sono perfettamente consci di ciascun minimo particolare di quella che sara' la soluzione finale?
Se non vuoi buttare tempo e soldi in "disegni" sbagliati, devi prima costruire il progetto nella tua mente, devi imparare ad astrarre, devi fare piccoli schizzi su carta per capire quello che vuoi fare. Insomma devi far lavorare di più il tuo cervello.
A ingegneria non si impara a fare cose pratiche (anche se purtroppo ormai il nuovo ordinamento ha reso ingegneria una scuola di praticoni).
Credi che studiare fisica generale 1, fisica generale 2, fisica tecnica serva a qualcosa di pratico per la maggior parte degli ingegneri?
Serve a darti un modo di ragionare, per imparare ad usare gli strumenti c'è il mondo del lavoro, l'università deve servire ad altro, altrimenti tanto vale andare direttamente a lavorare dopo le superiori così almeno ti pagano.
E ovviamente non userei mai C (a meno di casi molto specifici) per qualcosa in ambito lavorativo, ma come primo linguaggio da imparare è indiscutibilmente il migliore dal punto di vista didattico.
Se non vuoi buttare tempo e soldi in "disegni" sbagliati, devi prima costruire il progetto nella tua mente, devi imparare ad astrarre, devi fare piccoli schizzi su carta per capire quello che vuoi fare. Insomma devi far lavorare di più il tuo cervello.
A ingegneria non si impara a fare cose pratiche (anche se purtroppo ormai il nuovo ordinamento ha reso ingegneria una scuola di praticoni).
Credi che studiare fisica generale 1, fisica generale 2, fisica tecnica serva a qualcosa di pratico per la maggior parte degli ingegneri?
Serve a darti un modo di ragionare, per imparare ad usare gli strumenti c'è il mondo del lavoro,
E' la stessa cosa che mi dicevano alle superiori per il Greco e il Latino.
Ma quante C... di cose si suppone che io debba imparare prima di poter usare la mia mente?
Secondo me questa e' una scusa. Una scusa che sotto sotto ha anche (non solo) l'utilita' di impegare stormi di professori che altrimenti sarebbero disoccupati. Quanti professori di Latino abbiamo in Italia? Cos'altro possono fare? Perche' continuiamo a sfornarne cosi' tanti?
Specifico, io penso veramente che Fisica I, II, etc. siano veramente utili ad un Ingegnere, per lo meno un ingegnere informatico.
Cosi' come lo penso del C e del Goto.
Ma non non userei il C nel corso di algoritmi e strutture dati, cosa che a me e' purtroppo capitata. Non mi avevano neppure spiegato bene le hashtable, tanto e' brutto, scomodo e scoraggiante usarle in C.
Come linguaggio lo è, infatti: ubi maior minor cessat dicevano gli antichi latini...
Se sai cosa vuol dire, saprai anche cosa intendo per maior. :O
non è trascurabile invece. a parte il fatto che volenti o nolenti è ancora un linguaggio molto utilizzato, bisogna anche considerare che quello che si impara programmando in C non va dimenticato.
Questo è proprio banalissimo da smentire: dal C passa a SmallTalk e vedi se continuerai a programmare allo stesso modo.
questa frase è proprio sbagliata in senso logico, stai prendendo un caso specifico a dimostrazione di un fatto generale.
ad esempio se al posto di SmallTalk metti C#, Java o qualsiasi altro linguaggio che usa il paradigma strutturato (la maggiorparte) la dimostrazione cade
Ne abbiamo già discusso e non ci siamo limitati soltanto ai "perché no", ma abbiamo AMPIAMENTE ARGOMENTATO, e continuare a riportare la solita litania non ti darà automaticamente ragione.
non vedo dove avete dimostrato che il paradigma strutturato che si impara in C non è più valido in altri linguaggi, non vedo dove avete dimostrato che sapere come funzionano i puntatori è inutile, quindi non vedo argomentazioni.
Tra l'altro ti avevo anche riproposto di riuppare i vecchi thread e di continuare la discussione, ma ti sei tirato indietro.
uahahahahah :rotfl:
Io sono disponibile a riprendere la discussione SE E SOLO SE ti deciderai a portarla a termine, perché non voglio più tornarci. Quindi fino a quando alla domanda: "è utile insegnare/imparare il C?" non si darà una risposta secca; un bel SI' oppure NO.
Così mi segno il thread e te lo rispiattello senza commenti alla prossima occasione che tirerai fuori nuovamente l'argomento.
mi dispiace ma per me la risposta è sempre SI e finche non ti deciderai a portare argomentazioni serie (intendo argomentazioni non da fanboy) rimarrà tale
Poca roba rispetto a tutto il resto.
sarà poca roba per te, ma per me dimostra che non si è affatto legati a un linguaggio in particolare.
Più che di codice inutile si tratta di codice errato.
il fatto che si possa scrivere codice sbagliato mi sembra del tutto naturale. per scrivere il codice nella maniera corretta bisogna sapere cosa sono i puntatori. e sapere cosa sono i puntatori è utile anche quando si programma in C# o in Java (per capire meglio i reference)
Ma come? Il C non era utile come linguaggio? Perché non lo usi? :read: :Prrr:
non lo uso perchè attualmente non ne ho bisogno e quindi programmo in linguaggi di più alto livello.
sottolineo però che quello che ho imparato con il C non l'ho buttato via
Non il linguaggio come i puntatori, struct ed enum ma il modo di pensare e risolvere i problemi. C è procedurale e porta a trovare soluzioni in modo completamente diverso da linguaggi ad oggetti.
ad esempio il C è adatto a imparare il paradigma strutturato che poi si ritrova in tutti i linguaggi che non sono funzionali o logici. e non mi sembra che ciò sia da dimenticare.
questo non toglie che TUTTI i programmatori degni di questo nome dovrebbero conoscere altri paradigmi (soprattutto OOP)
Una volta non lo erano.
Neppure byte lo era, ora che mi ricordo. E non avevo mai capito il perche', dato che gia' dal C il linguaggio si fregiava di essere abbastanza a basso livello. ma veramente byte non lo è nemmeno adesso: non esiste nessun tipo byte, perché non esiste la necessità di fare la differenza tra byte e char; in C++ char rappresenta un carattere ASCII, e siccome i caratteri ASCII occupano un solo byte, char viene usato anche per memorizzare numeri da un solo byte. ecco, questo poteva essere un contro :D
Non dico WORD o keyword simili WORD non solo non è una parola chiave ma non è nemmeno una typedef del C++: è una typedef di Microsoft.
Anche questo non c'era nel C++ fino al 2000 almeno.
Sei sicuro che ci sia oggi nel C++ standard? Ho sentito parlare della sua mancanza non piu' di 2 anni fa.
Ma magari la persona che me ne ha parlato non era effettivamente aggiornata. ARGH, mi ero confuso con lo Structured Exception Handling :muro:
caspita, il C++ non ha il blocco finally... questa finisce dritta dritta su YourLanguageSucks :D
Lo so che ci sono anche in C++. La differenza sta nell'istante di creazione del template/generic. [...] ho letto tutto ma... me pare tanto na str****ta :mbe:
gira e rigira va a finire sempre nella cripticità del messaggio d'errore risultante, ma non è mica un problema di C++: se il compilatore ti dice una cosa incomprensibile è colpa del compilatore. d'altra parte invece istanziare i templates a runtime penso richieda del lavoro in più e quindi degradi, seppure in minima parte, la performance del programma.
Intendevo anche le BSTR, le WCHAR*, le TCHAR*, le OLECHAR*
elementi con cui devi fare conoscenza se vuoi costruire un programma internazionale. non fanno assolutamente parte del C++. per il fatto di doverci avere a che fare, quel punto si potrebbe trasformare in: "C# supporta nativamente stringhe Unicode", perché il problema del C++ è che supporta solo stringhe ASCII.
A meno che le cose siano cambiate anche in questa direzione... Microsoft ha introdotto std::wstring; ma c'è ancora una pecca: non ho visto nessuna std::tstring. comunque se vuoi lavorare esclusivamente con le STL Microsoft devi usare solo due tipi di stringhe, string e wstring, ma più spesso ne userai uno solo (string se devi fare un programma portabile a discapito dell'internazionalizzazione, wstring altrimenti).
Per non parlare poi delle varianti, come TUCHAR, LPSTR, LPCSTR, PWSTR, LPCWSTR, OLECHAR FAR* (!!!!! mavaff) non vorrei dire ma...
1) LPSTR corrisponde a CHAR*
2) LPCSTR corrisponde a CONST CHAR*
3) PWSTR corrisponde a WCHAR*
4) LPCWSTR corrisponde a CONST WCHAR*
5) FAR nei sistemi attuali non ha alcun significato, quindi OLECHAR FAR* corrisponde a OLECHAR*
in pratica li avevi già detti tutti sopra :Prrr:
e comunque ribadisco che non sono problemi di C++; il problema di C++ e che a 'sti livelli non ci arriva neanche :asd:
per quanto riguarda invece TUCHAR, lì il problema è (ed è effettivamente un problema del C++) il fatto che non s'è mai capito se char è signed o unsigned. avere le specifiche magari aiuterebbe anche.
Intendevo un pezzo di codice come questo
int pippo(int test, int val)
{
if (test>100) return val;
return 0;
}
....
int valore=pippo(5, metodolento(a,b,c) );
...
[...] ah cioè tu intendevi molto lazy :|
mi ritiro umilmente :ops2:
In C# il fall-trought e' permesso tra casi equivalenti, a patto di non mettere codice tra di essi.[...] capito. per quanto riguarda il break, quoto cdimauro; anche se comprendo bene le ragioni di aiuto verso l'enorme quantità di programmatori provenienti da C, C++ e Java.
Non so neppure io, come dicevo le STL non le ho usate in ambito commerciale.
Le properties sono la possiblita' di trasformare una variabile in 2 metodi, uno per il SET e uno per il GET, con codice eseguito ogni volta che si legge o si scrive tale variabile. ehmmm.... lascia perdere, avevo AMPIAMENTE frainteso :D
avevi scritto Properties con la maiuscola e quindi pensavo "la classe di nome Properties" :asd:
conosco le properties, ma non ne ho mai colto l'utilità: alla fine scrivere un campo privato, un getter e un setter mi pare esattamente la stessa cosa. serve solo come "ufficializzazione sintattica" di una semantica usata molto frequentemente.
P.es. se voglio far suonare in modo asincrono un po' di musica techno in backgorund durante l'esecuzione di un mio programma, posso piazzare questo pezzo di codice qui: [...]
Certo, mi potresti dire che il componente WindowsMediaPlayer e' in realta' una libreria scritta a sua volta in C++, circondata da chiamate managed per poter essere integrata a sua volta in C#. più che altro mi chiedo cosa c'entri col C#...
E' la stessa cosa che mi dicevano alle superiori per il Greco e il Latino.
Ma quante C... di cose si suppone che io debba imparare prima di poter usare la mia mente?
Secondo me questa e' una scusa. Una scusa che sotto sotto ha anche (non solo) l'utilita' di impegare stormi di professori che altrimenti sarebbero disoccupati. Quanti professori di Latino abbiamo in Italia? Cos'altro possono fare? Perche' continuiamo a sfornarne cosi' tanti? oddio gugo, io ti amo :asd:
Ma non non userei il C nel corso di algoritmi e strutture dati, cosa che a me e' purtroppo capitata. Non mi avevano neppure spiegato bene le hashtable, tanto e' brutto, scomodo e scoraggiante usarle in C. idem
ed è anche giusto secondo me. fare una versione non vuol dire soltanto tradurre quattro frasi di una lingua morta, significa organizzare le proprie idee e il proprio pensiero per trovare una soluzione ad un problema...secondo me, ti aprono davvero la mente. potevi anche evitare di rompere l'idillio che s'era creato tra me e gugo con queste stupide banalità. anche perché le sappiamo già a memoria: sono le stesse ca**ate che ci dicevano giustappunto al liceo.
non vedo dove avete dimostrato che il paradigma strutturato che si impara in C non è più valido in altri linguaggi, non vedo dove avete dimostrato che sapere come funzionano i puntatori è inutile, quindi non vedo argomentazioni.
Ci sono diverse cose che in C si devono fare in un determinato modo e che e' meglio fare in modo diverso in altri linguaggi. Un classico esempio e' l'iterazione su di un array, visto che tipicamente e' molto meglio usare iteratori o meglio ancora funzioni di mappatura che permettono garanzie di non sforamento e anche migliori ottimizzazioni. Il fatto che sia possibile fare la stesa cosa in altri linguaggi non e' un fatto positivo anzi, perche' spesso porta la gente a scegliere una soluzione non ottimale. Anche per lo stesso paradigma linguaggi diversi portano ad idiomi diversi per cui anche quello che dovrebbe essere "cross-language" all'atto pratico non lo e' (ad esempio perche' diversa gestione della memoria porta ad un uso diverso delle strutture dati).
Resta poi da capire quale vantaggio porti il C rispetto ad altri linguaggi. Secondo me non il discorso dei puntatori che, per quel che serve in altri linguaggi, si puo' imparare con un po' di teoria senza dover sbattercisi contro. Motivi per imparare il C ce ne sono (il fatto che e' diffuso e che quindi prima o poi lo si incontra ad esempio) ma secondo me non ne giustificano l'insegnamento come primo linguaggio.
non lo uso perchè attualmente non ne ho bisogno e quindi programmo in linguaggi di più alto livello.
sottolineo però che quello che ho imparato con il C non l'ho buttato via
ad esempio il C è adatto a imparare il paradigma strutturato che poi si ritrova in tutti i linguaggi che non sono funzionali o logici. e non mi sembra che ciò sia da dimenticare.
questo non toglie che TUTTI i programmatori degni di questo nome dovrebbero conoscere altri paradigmi (soprattutto OOP)
La programmazione strutturata non è assolutamente da dimenticare ma se le cose che il C insegna su questo argomento si ritrovano poi anche in altri linguaggi allora non è più logico usarne uno più semplice come ruby ed imparare più velocemente? In questo modo ottieni gli stessi risultati con uno sforzo minore.
Secondo me il C è fondamentale da conoscere se si vuole lavorare ma di certo non è il linguaggio da cui cominciare.
cdimauro
12-08-2008, 13:15
Se un programmatore scarso come me è riuscito a risolvere i due quesiti del contest sul DNA, ottenendo tempi di un quinto di secondo per entrambi, penso a cosa potrebbe ottenere un programmatore medio o uno bravo(penso, per esempio, a repne ;) ).
Secondo me fanno benissimo a insegnarlo.
:)
La penso come "gugo", per cui risparmio di ripetere le stesse cose.
x k0nt3: al momento non ho tempo, ma ti rispondo fra qualche giorno, appena torno dalle ferie, visto che sono senza connessione (mia moglie e i miei figli ringraziano :D).
Resta poi da capire quale vantaggio porti il C rispetto ad altri linguaggi. Secondo me non il discorso dei puntatori che, per quel che serve in altri linguaggi, si puo' imparare con un po' di teoria senza dover sbattercisi contro. Motivi per imparare il C ce ne sono (il fatto che e' diffuso e che quindi prima o poi lo si incontra ad esempio) ma secondo me non ne giustificano l'insegnamento come primo linguaggio.
La programmazione strutturata non è assolutamente da dimenticare ma se le cose che il C insegna su questo argomento si ritrovano poi anche in altri linguaggi allora non è più logico usarne uno più semplice come ruby ed imparare più velocemente? In questo modo ottieni gli stessi risultati con uno sforzo minore.
Secondo me il C è fondamentale da conoscere se si vuole lavorare ma di certo non è il linguaggio da cui cominciare.
io non ho parlato di vantaggi che il C ha rispetto ad altri linguaggi o del fatto che C è il linguaggio migliore per imparare a programmare.
ho semplicemente detto che, nonostante sia un linguaggio vecchio, impararlo non è affatto una perdita di tempo, al contrario di cdimauro che ad esempio sostiene che lo sia.
DanieleC88
12-08-2008, 14:01
io non ho parlato di vantaggi che il C ha rispetto ad altri linguaggi o del fatto che C è il linguaggio migliore per imparare a programmare.
ho semplicemente detto che, nonostante sia un linguaggio vecchio, impararlo non è affatto una perdita di tempo, al contrario di cdimauro che ad esempio sostiene che lo sia.
E invece no, si sta dicendo proprio il contrario, e cioè che è inutile partire col C per iniziare a programmare. Magari in certi ambiti lavorativi il C è un must e linguaggi managed sono proibitivi, ma non ti aiuta certo ad iniziare nella programmazione. :)
E invece no, si sta dicendo proprio il contrario, e cioè che è inutile partire col C per iniziare a programmare. Magari in certi ambiti lavorativi il C è un must e linguaggi managed sono proibitivi, ma non ti aiuta certo ad iniziare nella programmazione. :)
mah per me se un linguaggio è utile lo è indipendentemente dal fatto che è il primo linguaggio che si impara o il secondo. insegna sempre qualcosa.
io nella discussione sul miglior linguaggio da cui partire non mi ci metto nemmeno, sono fortemente convinto che non esista per una serie di fattori che non possiamo prevedere (di cui probabilmente quello principale è il soggetto).
DanieleC88
12-08-2008, 15:01
Ma infatti è probabilissimo che uno il C prima o poi se lo debba imparare comunque; io l'ho imparato e non mi pento della cosa. Sta di fatto che riconosco nel C un linguaggio con una curva d'apprendimento più ripida di altri linguaggi: un giovane (che potrebbe in futuro essere un eccellente programmatore, chi lo sa?) potrebbe scoraggiarsi incontrando tutti gli "ostacoli" che il C naturalmente offre. Magari può iniziare con le cose semplici, Python o Ruby, e poi allargare le proprie conoscenze partendo da basi già solide, tutto qui.
ciao ;)
Vincenzo1968
12-08-2008, 16:23
...
Il target principale non e' la velocita'. Anche quella, ma non il principale.
Tra i target io metto la leggibilita', le velocita' di stesura del codice, lo sforzo che un altra persona deve compiere per metterci mano, la riusabilita'.
Quando e dove (ma solo dove) serve la velocita', ci si puo' concentrare sul punto specifico, costruire la classica black-box nel modo che piace di piu', e usarla nel contesto generale.
...
Questa storia che l'efficienza(dal punto di vista della velocità di esecuzione) non è tutto, l'ho gia sentita altre volte e in altri forum.
Mi chiedo perché tanti libri su algoritmi e strutture dati si occupino, una pagina si e l'altra pure, della ricerca del migliore(sempre dal punto di vista della velocità) algoritmo, con tanto di dimostrazioni matematiche sulla complessità computazionale.
Sono d'accordissimo sul fatto che un programma debba essere leggibile e manutenibile, ma io metterei l'efficienza al primo posto.
Vincenzo1968
12-08-2008, 16:24
a scusa, ho rotto l'idillio sul C#. Me tapino.:rolleyes:
:D
E' la stessa cosa che mi dicevano alle superiori per il Greco e il Latino.
Ma quante C... di cose si suppone che io debba imparare prima di poter usare la mia mente?
Secondo me questa e' una scusa. Una scusa che sotto sotto ha anche (non solo) l'utilita' di impegare stormi di professori che altrimenti sarebbero disoccupati. Quanti professori di Latino abbiamo in Italia? Cos'altro possono fare? Perche' continuiamo a sfornarne cosi' tanti?
:ave: :ave: :ave:
E' esattamente quello che pensavo anche io... d'altra parte è evidente che le conoscenze acquisite in latino NON sono trasferibili in qualsiasi altra lingua; non fosse altro perchè le frasi ti uscirebbero così arcaiche da essere ridicole.
Se fosse vero che il latino "apre la mente", la stessa proposizione potrebbe valere che so, per il collezionismo di insetti, per il teatro, per gli scacchi, per Sim City, per fare la Settimana Enigmistica... ma non mi risulta che queste ultime si insegnino a scuola :sofico:
Io più che col C (che ancora non è del tutto lingua morta) ci vedo somiglianze con l'insegnamento dell'ASM su processori vecchi e strasorpassati, vero e proprio aramaico... la scusa è quella di insegnarti come funziona un pc, ma i pc moderni sono distantissimi da quel modello ormai...
Se programmi un Core2 come un 386, è come guidare un BMW come una 500. Di quelle del 60. :doh:
potevi anche evitare di rompere l'idillio che s'era creato tra me e gugo con queste stupide banalità. anche perché le sappiamo già a memoria: sono le stesse ca**ate che ci dicevano giustappunto al liceo.
Cerchiamo di mantenere la calma :O
Questa storia che l'efficienza(dal punto di vista della velocità di esecuzione) non è tutto, l'ho gia sentita altre volte e in altri forum.
Mi chiedo perché tanti libri su algoritmi e strutture dati si occupino, una pagina si e l'altra pure, della ricerca del migliore(sempre dal punto di vista della velocità) algoritmo, con tanto di dimostrazioni matematiche sulla complessità computazionale.
Sono d'accordissimo sul fatto che un programma debba essere leggibile e manutenibile, ma io metterei l'efficienza al primo posto.
Secondo me quando si scrive codice ci si deve concentrare sulla struttura e renderla chiara e ben fattorizzata e non farsi condizionare dalla smania di velocità. Se una volta finito il codice questo non è abbastanza veloce si può sempre usare un profiler per individuare i punti critici e riscriverli.
Chiudo con una citazione di un grande:
Premature optimization is the root of all evil.
-- Orsetto Knuth
Vincenzo1968
12-08-2008, 16:59
Secondo me quando si scrive codice ci si deve concentrare sulla struttura e renderla chiara e ben fattorizzata e non farsi condizionare dalla smania di velocità. Se una volta finito il codice questo non è abbastanza veloce si può sempre usare un profiler per individuare i punti critici e riscriverli.
Chiudo con una citazione di un grande:
Premature optimization is the root of all evil.
-- Orsetto Knuth
Grandissimo Knuth,
ho i suoi tre volumi (http://www-cs-faculty.stanford.edu/~knuth/taocp.html) e non vedo l'ora che escano anche gli altri due(forse, si legge nel suo sito (http://www-cs-faculty.stanford.edu/~knuth/), nel 2010).
Ma lo capirete prima o poi che quando si programma in Java o in C# sia usa sia programmazione strutturata, sia programmazione funzionale, sia programmazione a oggetti?!?!
eccola qui l'altra boiata. Programmazione funzionale in Java.
Questa me la segno, dopo il K&R bibbia dell'Informatica :asd:
Bravo, Questo mi sembra un buon esempio dei motivi per i quali è meglio partire con il C.
Stupidaggini.
E poi che significa "un algoritmo è già implementato"? E' una delle strutture semantiche built-in nel linguaggio?
Se non lo è non è implementato, se lo troviamo nelle librerie, allora vale per qualsiasi linguaggio discretamente diffuso.
Oltre a questo, è una scemenza, perché il funzionamento di un algoritmo lo si può desumere qualunque sia lo strumento utilizzato per scriverlo, il che significa anche pseudocodice.
Lo vogliamo implementare? Possiamo farlo con C, Java, C#, Python, Ruby, PHP ecc. ecc.
Con una differenza: nei linguaggi ad alto livello ce ne freghiamo dei dettagli (puntatori per esempio) e andiamo alla sostanza, ovvero cosa fa un algoritmo e cosa funziona.
Se anche i dinosauri universitari lo capissero sarebbe tutto più semplice
eccola qui l'altra boiata. Programmazione funzionale in Java.
bisogna aspettare Java 7 con ogni probabilità
Stupidaggini.
E poi che significa "un algoritmo è già implementato"? E' una delle strutture semantiche built-in nel linguaggio?
significa che è implementato nelle librerie standard
il Windows del futuro è scritto in C#
Sarebbe bello quantificare questo "futuro" :D
Sarebbe bello quantificare questo "futuro" :D boh? 20 anni?
bisogna aspettare Java 7 con ogni probabilità
Con ogni probabilità non c'è scritto da nessuna parte. Si sta parlando delle modifiche che saranno apportate con Dolphin e ad oggi le più fondate sembrano le closures, il tentativo di rendere Java multilinguaggio, superpackage, una non ben precisata modularità e JavaFX.
Tutte novità per inciso, presenti da anni in altre tecnologie, a dimostrazione di quanto Java, da anni, non stia innovando, bensì rincorrendo i concorrenti.
E in ogni caso non era questo il punto, il che rende la tua risposta superflua.
La baggianata è che si possa usare il paradigma funzionale con Java; ad oggi non è possibile salvo tramite una particolare libreria, homebrew, che risulta più un accrocchio e non una funzionalità messa a disposizione del linguaggio.
significa che è implementato nelle librerie standard
Il che dovrebbe escludere quindi anche C, per esempio, dal linguaggio scelto per imparare il funzionamento degli algoritmi di ordinamento visto che sono già implementati nella libreria standard.
Ovvero la contraddizione del ragionamento di dupa, che comunque non funzionava a priori, perché non è l'essere presente o meno in una libreria che facilita o rende più difficile l'operazione.
Il che dovrebbe escludere quindi anche C, per esempio, dal linguaggio scelto per imparare il funzionamento degli algoritmi di ordinamento visto che sono già implementati nella libreria standard. uno solo è già implementato
edit - pardon, due
Ovvero la contraddizione del ragionamento di dupa, che comunque non funzionava a priori, perché non è l'essere presente o meno in una libreria che facilita o rende più difficile l'operazione. veramente non so a te, ma a me facilita molto...
non sono per niente daccordo.
Fin troppo ovvio
devi capire che non sono tutti come te, c'è a chi piace conoscere i dettagli di basso livello, e non è mica detto che diventeranno pessimi programmatori.
Partiamo dal presupposto che non stiamo parlando di cose che piacciono o non piacciono ma di una formazione che possa tornare utile poi nel mondo del lavoro e non nelle cantine dove, a volte, si sviluppa del buon software Open Source.
Quindi questo inizio di ragionamento seghiamolo a priori, perché non stiamo dissertando sui piatti di una cucina.
è sbagliato dire che un programmatore deve risolvere problemi, questa definizione comprende solo una parte dell'obiettivo di un programmatore.
Se è sbagliato per te la cosa è irrilevante, nella definizione comune, uno sviluppatore (che è ben diverso e un sovrainsieme dei programmatori) deve risolvere un problema e implementare la soluzione in un determinato contesto e insieme di tecnologie (in realtà è molto più complesso, secondo il modello introdotto da Fowler).
infatti programmare significa risolvere problemi usando gli strumenti informatici a disposizione, e questo implica la conoscenza degli strumenti che si usano.
Ti faccio presente che quel che dici può essere interpretato in due modi; uno è ovvio e cioè che se io sviluppo in un X linguaggio mi sarà richiesto conoscere almeno un ambiente di sviluppo, con funzionalità che aumentino la mia produttività e mi diano modo di testare il mio codice.
Banale, il che rende la tua annotazione superflua.
Io non uso né C né C++ come strumento didattico o di lavoro e quindi dell'implicazione semplicemente me ne frego.
Se poi invece, e arriviamo al secondo nodo, per te è fondamentale perché rientra nella cerchia di strumenti da conoscere, allora posso ribaltarti la questione e dirti che ci sono un'altra ventina di linguaggi che, in teoria, un informatico, dovrebbe conoscere a priori perché utilizzati.
E quindi come la mettiamo? Includiamo anche questi in un corso di studio?
certamente è anche possibile ignorare totalmente tutto questo e programmare senza avere la minima consapevolezza di quello che accade realmente, ma dubito fortemente che questo sia un motivo per programmare "meglio".
Il tuo dubitare buttato lì non costituisce argomentazione sufficiente.
semplicemente la programmazione di cui parlate voi e quella di cui ho parlato poche righe sopra sono due cose diverse e complementari (si posso imparare in momenti diversi e senza particolari problemi se non nella mente del soggetto). un programmatore DEVE sapere a che livello porsi, non esiste nessun approccio che è meglio sempre.
Il livello a cui si deve porre è quello del problem solving, il resto sono seghe mentali di gente che vuole difendere a tutti i costi una tecnologia morente, che però è l'unica che conosce e tramite la quale prende lo stipendio.
Ed è quello che accade nella mafia delle università italiane (lo scrivo col minuscolo volutamente, perché in questo situazioni la capital letter non se la meritano neanche di striscio).
Punto e stop.
Se e quando capita ad uno studente neolaureato di trovarsi nella situazione di programmare macchine a calcolo numerico, PLC, dispositivi embedded vari, ALLORA si sposterà ad un livello logico più basso e cercherà di calarsi nel nuovo contesto, avendo comunque alle spalle solide nozioni di algoritmica e problem solving, che sono agnostiche rispetto alle tecnologie utilizzate.
se parliamo di imparare a programmare invece sto dicendo che si può imparare a programmare sia in Java che in C che in Python, non vedo quale sia il problema, dipende dalle attitudini del soggetto.
certo è che se uno viene sul forum a chiedere ogni minima cassata (dolce tipico siciliano) significa che non andrà molto lontano. e questo sia che sta usando python che C.
Francamente con questa nenia del "si può imparare cominciando con C, Java, Python allo stesso modo" hai scocciato credo 3/4 della sezione, perché ad ogni argomentazione o confutazione evidente e banale di gente che lavora almeno da una decina d'anni nel settore e sa perfettamente quali siano le difficoltà di cambiare paradigma cambiando lo strumento utilizzato (tipicamente da C/C++ a C# o Java) riesci ad arrampicarti sugli specchi ed inventarti qualche altra annotazione.
Quella che i segmentation fault servissero per la formazione di un programmatore è stata davvero comica (ma sicuramente mi sarò perso qualche altra chicca in questi mesi :asd: ).
per il resto ho già ampiamente argomentato il fatto che tutto quello che si apprende con il C serve anche quando si programma in altri linguaggi.
Le basi della programmazione strutturata si ritrovano in qualsiasi altro linguaggio ad alto livello, il che rende, per l'appunto, l'utilizzo didattico di C perfettamente inutile.
addirittura l'uso dei puntatori è presente in C#, ma anche quando si parla di reference in un qualsiasi linguaggio moderno può tornare d'aiuto il concetto di puntatore per capire come mai Java non ha il passaggio per riferimento (ci sono volute una ventina di pagine in un thread di questo forum per convincere certi programmatori), come mai in Java quando copio un oggetto non viene eseguita una deep copy ecc...
I puntatori in C# esistono ma sono deprecati perché costringono il lo sviluppatore a scrivere codice unsafe, ovvero codice che non è possibile controllare con il CLR.
In sostanza sono perfettamente inutili, creati per facilitare il passaggio degli sviluppatori C/C++ a C#; da quando esiste .NET non ho mai scritto mezza riga di codice unsafe.
quando si programma seriamente questi sono problemi che vanno affrontati,
No.
Questi sono i problemi, le stupidaggini su cui i programmatori che non hanno ben chiara la metodologia utilizzata in un'azienda (e che probabilmente non hanno mai lavorato seriamente in un team) perdono tempo fossilizzandosi su dettagli di nulla importanza, ignorando invece le questioni serie ovvero come progettare il design di un'application enterprise, rendendola modulare e dividendo logicamente i layer della stessa.
non basta ragionare in termini astratti e saper risolvere problemi, bisogna anche conoscere gli strumenti informatici che vanno usati, il resto è pura fantasia.
Infatti. "Apprendo" una forma mentis che abbia ben chiaro il concetto di OODesign, sviluppo in un qualsiasi linguaggio discretamente moderno utilizzando tool adeguati e me ne frego altissimamente del resto (C/C++ compresi), perché altrimenti come ho scritto qualche riga sopra, seguendo il tuo ragionamento dovrei allora estenderlo ad un'altra ventina di linguaggi, ognuno utile a modo suo per una ipotetica futura carriera di sviluppatore/informatico.
veramente non so a te, ma a me facilita molto...
si parlava dal punto di vista didattico.
Il fatto che sia incluso o meno nella libreria standard o in altre è ininfluente perché poi andrai ad implementarlo a mano, seguendo lo pseudocodice.
Se però non ti devi concentrare su puntatori&co. puoi pensare direttamente al cosa fa l'algoritmo, qual'è la complessità e se è corretto, che poi è il succo del discorso del perché sia meglio utilizzare strumenti che rendono trasparenti dettagli implementativi concentrandosi sull'algoritmo necessario a risolvere X problema.
si parlava dal punto di vista didattico. ah ho capito, siamo sul pippa mentis :)
senti Galileo, chissà perché sto nome poi... :asd: dicevo senti Galileo, siamo ad Agosto inoltrato e fino a qualche giorno fa faceva un caldo boia, ma non hai altro da fare alle 15:20 che scrivere il post #215? :asd:
oddio, 15:20 per modo di dire: per scrivere tutta quella roba minimo un'ora eh... :)
ecco, prendi me per esempio: sono appena tornato da una bella nuotata in pisciuìna e di risponderti non mi va proprio, quindi scusami ma il post #216 non lo leggo neanche :D
ciao :Prrr:
Con ogni probabilità non c'è scritto da nessuna parte. Si sta parlando delle modifiche che saranno apportate con Dolphin e ad oggi le più fondate sembrano le closures, il tentativo di rendere Java multilinguaggio, superpackage, una non ben precisata modularità e JavaFX.
Tutte novità per inciso, presenti da anni in altre tecnologie, a dimostrazione di quanto Java, da anni, non stia innovando, bensì rincorrendo i concorrenti.
E in ogni caso non era questo il punto, il che rende la tua risposta superflua.
La baggianata è che si possa usare il paradigma funzionale con Java; ad oggi non è possibile salvo tramite una particolare libreria, homebrew, che risulta più un accrocchio e non una funzionalità messa a disposizione del linguaggio.
Il che dovrebbe escludere quindi anche C, per esempio, dal linguaggio scelto per imparare il funzionamento degli algoritmi di ordinamento visto che sono già implementati nella libreria standard.
Ovvero la contraddizione del ragionamento di dupa, che comunque non funzionava a priori, perché non è l'essere presente o meno in una libreria che facilita o rende più difficile l'operazione.
vedo che hai capito quello che ho scritto, non capisco però perchè sostieni che sia in contraddizione con quello che hai detto te.
quando ho detto che con ogni probabilità bisognerà aspettare java7 era sottointeso che _adesso_ java non supporta nessun costrutto del paradigma funzionale.
per il fatto delle librerie standard non mi sembra di aver detto che le librerie del C non implementano l'ordinamento (infatto implementano quick sort), ho solo detto cosa significava quella frase visto che secondo me era possibile interpretarla solo in quella maniera.
Partiamo dal presupposto che non stiamo parlando di cose che piacciono o non piacciono ma di una formazione che possa tornare utile poi nel mondo del lavoro e non nelle cantine dove, a volte, si sviluppa del buon software Open Source.
Quindi questo inizio di ragionamento seghiamolo a priori, perché non stiamo dissertando sui piatti di una cucina.
e chi l'ha stabilito che non stiamo parlando di gusti personali? te?
e io dovrei pure rispondere a uno che crede di essere dio? :mbe:
tanto per rimanere in tema ti faccio presente che C è utile nel mondo del lavoro "che ti piaccia o no"
ho un conoscente che lavora alla Nokia Siemens e usa C tutti i santi giorni. non chiedermi perchè, ma sta di fatto che lo usano.
Se è sbagliato per te la cosa è irrilevante, nella definizione comune, uno sviluppatore (che è ben diverso e un sovrainsieme dei programmatori) deve risolvere un problema e implementare la soluzione in un determinato contesto e insieme di tecnologie (in realtà è molto più complesso, secondo il modello introdotto da Fowler).
per risolvere problemi in maniera astratta non c'è bisogno di un programmatore.
per la cronaca la definizione comunemente accettata di "programmatore" è: "persona che scrive software", e non "persona che risolve problemi"
può sembrare una banalità, ma la seconda definizione non tiene conto del fatto che il programmatore ha a che fare con dei limiti imposti dagli strumenti che usa e che per forza di cose deve conoscere.
Ti faccio presente che quel che dici può essere interpretato in due modi; uno è ovvio e cioè che se io sviluppo in un X linguaggio mi sarà richiesto conoscere almeno un ambiente di sviluppo, con funzionalità che aumentino la mia produttività e mi diano modo di testare il mio codice.
Banale, il che rende la tua annotazione superflua.
Io non uso né C né C++ come strumento didattico o di lavoro e quindi dell'implicazione semplicemente me ne frego.
Se poi invece, e arriviamo al secondo nodo, per te è fondamentale perché rientra nella cerchia di strumenti da conoscere, allora posso ribaltarti la questione e dirti che ci sono un'altra ventina di linguaggi che, in teoria, un informatico, dovrebbe conoscere a priori perché utilizzati.
E quindi come la mettiamo? Includiamo anche questi in un corso di studio?
vedo che non hai capito nulla. la risposta esatta era la terza interpretazione che poi è anche l'unica possibile.
con strumenti non intendo linguaggi, altrimenti avrei detto linguaggi.
non solo i linguaggi, ma anche il paradigma di programmazione è uno strumento, il software che uso per sviluppare sono strumenti, il computer stesso è uno strumento.
ora siccome non ha senso imparare 2 milioni di linguaggi quando poi se ne useranno 2 o 3 in pratica.. è molto meglio insegnare i diversi paradigmi di programmazione usando qualche linguaggio rappresentativo per fare un pò di pratica. in tutto questo ci può stare benissimo C, Java, python e qualunque cosa che abbia un paradigma di programmazione. hanno tutti qualcosa da insegnare
Il tuo dubitare buttato lì non costituisce argomentazione sufficiente.
quindi pensi che non sapere come funziona un computer sia un motivo per programmare meglio?
per me è fondamentale sapere come funziona il computer come per un meccanico è fondamentale sapere come funziona il motore di una macchina.
poi è ancora più importante sapere quando usare queste conoscenze e quando invece porsi a un livello di astrazione più elevato
Il livello a cui si deve porre è quello del problem solving, il resto sono seghe mentali di gente che vuole difendere a tutti i costi una tecnologia morente, che però è l'unica che conosce e tramite la quale prende lo stipendio.
Ed è quello che accade nella mafia delle università italiane (lo scrivo col minuscolo volutamente, perché in questo situazioni la capital letter non se la meritano neanche di striscio).
Punto e stop.
nel livello "problem solving" non vi è traccia del problema del passaggio dei parametri o della copia degli oggetti a cui ho fatto riferimento più sotto.
è evidente che non stiamo a quel livello quindi
altrimenti continueremo a sfornare gente che non ha capito il nulla più assoluto tipo questo http://mail.python.org/pipermail/python-list/2003-November/234135.html
e pure le risposte non sono tanto chiare, bastava dire: esiste solo il passaggio dei parametri per valore, non mi sembra complicato
Se e quando capita ad uno studente neolaureato di trovarsi nella situazione di programmare macchine a calcolo numerico, PLC, dispositivi embedded vari, ALLORA si sposterà ad un livello logico più basso e cercherà di calarsi nel nuovo contesto, avendo comunque alle spalle solide nozioni di algoritmica e problem solving, che sono agnostiche rispetto alle tecnologie utilizzate.
sono il primo a dire che bisogna essere agnostici rispetto alle tecnologie utilizzate, per questo bisogna insegnare più di un paradigma di programmazione. non capisco per quale motivo il C sia da escludere a priori, è pur sempre un rappresentante di un paradigma di programmazione (anche se abbiamo capito che non ti piace).
Francamente con questa nenia del "si può imparare cominciando con C, Java, Python allo stesso modo" hai scocciato credo 3/4 della sezione, perché ad ogni argomentazione o confutazione evidente e banale di gente che lavora almeno da una decina d'anni nel settore e sa perfettamente quali siano le difficoltà di cambiare paradigma cambiando lo strumento utilizzato (tipicamente da C/C++ a C# o Java) riesci ad arrampicarti sugli specchi ed inventarti qualche altra annotazione.
Quella che i segmentation fault servissero per la formazione di un programmatore è stata davvero comica (ma sicuramente mi sarò perso qualche altra chicca in questi mesi :asd: ).
ma finiscila.
se c'è una cosa che ha scassato i maroni a tutta la sezione è chi sostiene python è il miglior linguaggio del mondo e probabilmente anche di saturno
visto che io mi arrampico sugli specchi potresti sempre dimostrare che ho torto invece di arrampicarti sugli specchi a tua volta
Le basi della programmazione strutturata si ritrovano in qualsiasi altro linguaggio ad alto livello, il che rende, per l'appunto, l'utilizzo didattico di C perfettamente inutile.
ma anche no. se uno impara la programmazione strutturata in C non c'è bisogno che la impara di nuovo in C# per esempio, quindi non è vero che è inutile. si può fare in modo diverso, ma questo è diverso da dire che è inutile
I puntatori in C# esistono ma sono deprecati perché costringono il lo sviluppatore a scrivere codice unsafe, ovvero codice che non è possibile controllare con il CLR.
In sostanza sono perfettamente inutili, creati per facilitare il passaggio degli sviluppatori C/C++ a C#; da quando esiste .NET non ho mai scritto mezza riga di codice unsafe.
deprecati? spero che scherzi.
il codice unsafe è stato introdotto per rendere C# adeguato alla programmazione di sistema, non per facilitare il passaggio degli sviluppatori C/C++ come erroneamente credi.
se non hai mai scritto mezza riga di codice unsafe significa che non ne hai avuto bisogno, non che è inutile.
No.
Questi sono i problemi, le stupidaggini su cui i programmatori che non hanno ben chiara la metodologia utilizzata in un'azienda (e che probabilmente non hanno mai lavorato seriamente in un team) perdono tempo fossilizzandosi su dettagli di nulla importanza, ignorando invece le questioni serie ovvero come progettare il design di un'application enterprise, rendendola modulare e dividendo logicamente i layer della stessa.
una cosa non esclude l'altra, non vedo perchè quello che hai scritto te è in contrasto con quello che ho scritto io considerando che sono cose totalmente scorrelate
Infatti. "Apprendo" una forma mentis che abbia ben chiaro il concetto di OODesign, sviluppo in un qualsiasi linguaggio discretamente moderno utilizzando tool adeguati e me ne frego altissimamente del resto (C/C++ compresi), perché altrimenti come ho scritto qualche riga sopra, seguendo il tuo ragionamento dovrei allora estenderlo ad un'altra ventina di linguaggi, ognuno utile a modo suo per una ipotetica futura carriera di sviluppatore/informatico.
non è importante conoscere i linguaggi, ma i paradigmi di programmazione, in questa maniera si ha sempre una visione d'insieme e si evita di fossilizzarsi.
ecco è chiaro che tutti quelli che odiano così tanto il C è perchè devono essersi fossilizzati in qualche modo e ora lo maledicono. purtroppo però non può essere colpa del linguaggio, fatevene una ragione
DanieleC88
14-08-2008, 22:05
ho un conoscente che lavora alla Nokia Siemens e usa C tutti i santi giorni.
Allo Nokia o alla Siemens? :asd:
deprecati? spero che scherzi.
il codice unsafe è stato introdotto per rendere C# adeguato alla programmazione di sistema, non per facilitare il passaggio degli sviluppatori C/C++ come erroneamente credi.
se non hai mai scritto mezza riga di codice unsafe significa che non ne hai avuto bisogno, non che è inutile.
Sconsigliato è sconsigliato, ma in certe occasioni è utile/necessario:
http://msdn.microsoft.com/en-us/library/aa664769(VS.71).aspx
http://msdn.microsoft.com/en-us/library/aa288474(VS.71).aspx
The use of pointers is rarely required in C#, but there are some situations that require them. As examples, using an unsafe context to allow pointers is warranted by the following cases:
* Dealing with existing structures on disk
* Advanced COM or Platform Invoke scenarios that involve structures with pointers in them
* Performance-critical code
The use of unsafe context in other situations is discouraged.
una cosa non esclude l'altra, non vedo perchè quello che hai scritto te è in contrasto con quello che ho scritto io considerando che sono cose totalmente scorrelate
non è importante conoscere i linguaggi, ma i paradigmi di programmazione, in questa maniera si ha sempre una visione d'insieme e si evita di fossilizzarsi.
ecco è chiaro che tutti quelli che odiano così tanto il C è perchè devono essersi fossilizzati in qualche modo e ora lo maledicono. purtroppo però non può essere colpa del linguaggio, fatevene una ragione[/QUOTE]
guarda lo sa anche wikipedia http://it.wikipedia.org/wiki/Nokia_Siemens_Networks
;)
cdimauro
14-08-2008, 22:23
Se non vuoi buttare tempo e soldi in "disegni" sbagliati, devi prima costruire il progetto nella tua mente, devi imparare ad astrarre, devi fare piccoli schizzi su carta per capire quello che vuoi fare. Insomma devi far lavorare di più il tuo cervello.
A ingegneria non si impara a fare cose pratiche (anche se purtroppo ormai il nuovo ordinamento ha reso ingegneria una scuola di praticoni).
Credi che studiare fisica generale 1, fisica generale 2, fisica tecnica serva a qualcosa di pratico per la maggior parte degli ingegneri?
Serve a darti un modo di ragionare, per imparare ad usare gli strumenti c'è il mondo del lavoro, l'università deve servire ad altro, altrimenti tanto vale andare direttamente a lavorare dopo le superiori così almeno ti pagano.
E ovviamente non userei mai C (a meno di casi molto specifici) per qualcosa in ambito lavorativo, ma come primo linguaggio da imparare è indiscutibilmente il migliore dal punto di vista didattico.
A parte che sono d'accordo con gugo e quanto scritto dagli altri (tranne k0nt3 ovviamente :D), facciamo finta che sia d'accordo con te.
A questo punto usiamo pure il "tecnigrafo" e soltanto quando siamo "rodati" passeremo ad "AutoCAD". Usiamo il C "NUDO E CRUDO", quindi soltanto il linguaggio facendo a meno di TUTTA la libreria standard.
Devo visualizzare qualcosa a video? La printf me la sviluppo io! Vuoi mettere il piacere di scriversi da zero qualunque cosa serva? E' così che s'impara, no? :D
Tra l'altro ti faccio notare una cosa: http://en.wikipedia.org/wiki/Qsort_(C_Standard_Library)
In the C standard library, qsort is a function used to sort elements in an array.
Vaglielo a dire al K & R che NON bisogna fornire una routine di ordinamento di valori, perché fornendo la pappa pronta gli studenti verranno traviati e non capiranno come funziona un algoritmo di ordinamento. :asd:
non è trascurabile invece. a parte il fatto che volenti o nolenti è ancora un linguaggio molto utilizzato, bisogna anche considerare che quello che si impara programmando in C non va dimenticato.
Su questo io e altri t'abbiamo già risposto.
questa frase è proprio sbagliata in senso logico, stai prendendo un caso specifico a dimostrazione di un fatto generale.
ad esempio se al posto di SmallTalk metti C#, Java o qualsiasi altro linguaggio che usa il paradigma strutturato (la maggiorparte) la dimostrazione cade
Non avevi posto questi vincoli, per cui la dimostrazione era valida.
Anche con questi vincoli rimane un problema di fondo: perché si dovrebbe imparare il C, quando esistono altri linguaggi che permettono di utilizzare la programmazione strutturata e che sono decisamente "migliori" del C?
non vedo dove avete dimostrato che il paradigma strutturato che si impara in C non è più valido in altri linguaggi, non vedo dove avete dimostrato che sapere come funzionano i puntatori è inutile, quindi non vedo argomentazioni.
Su questo concordo con marco, e aggiungo che col C sei costretto fin da subito a usare i puntatori, mentre con altri linguaggi (che permettono di utilizzare la programmazione strutturata) spesso ne puoi fare tranquillamente a meno.
uahahahahah :rotfl:
http://www.hwupgrade.it/forum/showpost.php?p=23614734&postcount=50
Se vuoi li riuppo davvero, per me non c'è problema.
mi dispiace ma per me la risposta è sempre SI e finche non ti deciderai a portare argomentazioni serie (intendo argomentazioni non da fanboy) rimarrà tale
Semplicissimo: perché non c'è NESSUN vantaggio nell'utilizzare il C.
sarà poca roba per te, ma per me dimostra che non si è affatto legati a un linguaggio in particolare.
In generale sì, ma il C continua a essere IL linguaggio d'elezione negli ambienti Unix-like.
il fatto che si possa scrivere codice sbagliato mi sembra del tutto naturale. per scrivere il codice nella maniera corretta bisogna sapere cosa sono i puntatori. e sapere cosa sono i puntatori è utile anche quando si programma in C# o in Java (per capire meglio i reference)
No, è che il C, come dicevo prima, ti costringe a ricorrere fin da subito ai puntatori, mentre in altri linguaggi che permettono di utilizzare i reference se ne può fare benissimo a meno anche per stronzate come l'input di un numero.
In C++ ci sono i reference, tanto per tirare in ballo uno dei SUPERSET più noti del C.
In Pascal esistono i VAR da prima ancora che il C fosse concepito.
Tutta roba che AIUTA A EVITARE BAG ROGNOSI come quello che ho riportato, e che è fra i più diffusi.
Infine il fatto che i puntatori aiutino a imparare i reference è vero, ma NON è condizione necessaria: infatti in linguaggi come Java, Python, ma anche lo stesso C#... se ne fa benissimo a meno.
non lo uso perchè attualmente non ne ho bisogno e quindi programmo in linguaggi di più alto livello.
sottolineo però che quello che ho imparato con il C non l'ho buttato via
Anche quando programmi a oggetti? Debbo credere che il C non t'abbia mai influenzato nello sviluppo di codice a oggetti?
ad esempio il C è adatto a imparare il paradigma strutturato che poi si ritrova in tutti i linguaggi che non sono funzionali o logici. e non mi sembra che ciò sia da dimenticare.
Per imparare la programmazione strutturata esistono linguaggi decisamente migliori del C.
Il fatto, poi, è che tu tendi a mischiare le due cose. Più precisamente, tendi a confondere queste cose:
- la programmazione strutturata;
- imparare a programmare;
- il linguaggio C.
Anzi, penso che subdolamente cerchi di far passare il messaggio che siccome il C esprime un paradigma strutturato, allora è un buon linguaggio e non vada buttato.
Le tre cose di cui sopra, però, fanno caso a sé.
Che la programmazione strutturata sia l'ideale per iniziare a programmare è AMPIAMENTE OPINABILE.
Che il C sia un buon linguaggio di programmazione per la programmazione strutturata lo è ancor di più.
Difatti non hai ancora portato UN solo vantaggio nell'usare il C per la programmazione strutturata.
E quanto al primo punto, che per un essere umano sia più naturale la programmazione a oggetti è cosa ovvia. Com'è ovvio che quella strutturata sia più naturale per un calcolatore.
questo non toglie che TUTTI i programmatori degni di questo nome dovrebbero conoscere altri paradigmi (soprattutto OOP)
Ma non si capisce perché non si dovrebbe partire con la programmazione a oggetti, visto che è il paradigma che più si avvicina al NOSTRO modo di modellare la realtà che ci circonda.
Questa storia che l'efficienza(dal punto di vista della velocità di esecuzione) non è tutto, l'ho gia sentita altre volte e in altri forum.
Mi chiedo perché tanti libri su algoritmi e strutture dati si occupino, una pagina si e l'altra pure, della ricerca del migliore(sempre dal punto di vista della velocità) algoritmo, con tanto di dimostrazioni matematiche sulla complessità computazionale.
Sono d'accordissimo sul fatto che un programma debba essere leggibile e manutenibile, ma io metterei l'efficienza al primo posto.
Allora chiediti come mai l'algoritmo di ordinamento più usato è il quicksort, anche in tante librerie standard.
E chiedi pure come mai nelle implementazioni "classiche" del calcolo del minimo albero di copertura di un grafo con l'algoritmo di Prim venga fatto uso di uno heap, anziché dell'heap di Fibonacci per ridurre la complessità computazionale. ;)
Visto che i toni della discussione sono degenerati, mi vedo costretto a chiudere la discussione. Non voglio aspettare che vi cominciate ad offendere.
Ricordatevi una buona volta che c'è modo di discutere senza darsi addosso l'un l'altro.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.