Newsgroup: it.comp.lang.c
Titolo: Una domanda per tutti

Dovendo cominciare da zero lo studio di un linguaggio di
programmazione(con buone nozioni d'informatica, ovvio), ha ancora senso
impararne uno vecchiotto come il C?
Premetto che non si tratta di una domanda provocatoria, ma di una scelta
da fare per me importantissima.
Grazie a chiunque mi risponderà. 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 impararne uno vecchiotto come il C?
I S.O. sono scritti prevalentemente in "C". L'interfaccia che mettono
a disposizione e' una interfaccia "C". Con altri Linguaggi, fino a
quando rimani nel recinto che ti hanno costriuto attorno per farti fare
le DBox con il drag and drop, funziona tutto; ma prova a fare una
ricerca
su i.c.p.win32 su "interfacciare visual basic con una dll"...
Io direi che ha ancora MOLTO senso. Ma tutto dipende da quello
che devi fare.
HTH
C:\>iao Angelo


 impararne uno vecchiotto come il C?
Dipende da cosa vuoi farci con il linguaggio che intendi imparare. Se
vuoi creare applicazioni utente con GUI forse e` piu` consigliato Python
(con un toolkit a piacere); il C e` usato ancora diffusamente, ma non e`
piu` il linguaggio "jolly" che era qualche anno fa.
Se ti avvicini per la prima volta alla programmazione, inoltre, il C non
e` molto consigliato, non e` un liguaggio "didattico".
Luca
-- 
Home: 
http://kronoz.cjb.net
Non capisco tutta questa eccitazione per il Multitasking: 
io sono anni che leggo in bagno.

e` molto consigliato, non e` un liguaggio "didattico".
Il C è stato il  primo vero linguaggio di programmazione che ho imparato ad 
usare.
Lo trovo completo, e di grande utilità, assolutamente "didattico". Forse 
l'unica vera "pecca" è che la programmazione è prevalentemente procedurale, 
e poco ad oggetti...
Per imparare ho usato un manuale edito Apogeo: "programmare in C". Te lo 
consiglio vivamente.
Ciao
fratlaf 

 Grazie a chiunque mi risponderà. 
((Premetto che io ho una visione molto parziale, di fatto hobbistica,
dell'universo della programmazione, quindi magari ascolta
anche qualcuno che lo usa veramente per lavoro e per grossi progetti.))
Dipende molto dall'uso che intendi farne.
Io per esempio lo uso come ausilio del mio lavoro, e per
divertimento e in entrambi casi devo sviluppare programmi
non tanto lunghi, e soprattutto privi di intefaccia grafica.
Programmi tipicamente di natura matematica
(numerica o combinatoria) per i quali il C va benissimo.
Al massimo a volte uso alcune cose del C++, ovvero le STL, se
mi servono delle strutture dati tipo set, map, etc. che
non ho voglia o bisogno di ri-implementare.
Anche quando ho voluto fare un paio di programmini
di carattere ricreativo (li puoi vedere in rete: Verbatron ed Encalc)
ho usato il C++ per gestire le interfacce grafiche, i bottoni, il mouse, etc.
ma di fatto il grosso degli algoritmi era comunque in puro C,
con al piu' un po' di zucchero sintattico rubato al C++,
perche' non ho grande feeling
per la programmazione ad oggetti (sono troppo vecchio ...):
soprattutto non mi piace introdurre classi su classi anche
quando e' totalmente inutile, cosa che ho visto fare
spesso agli entusiasti dell'OO... :-)
Se dovessi fare ancora programmi numerici con molti calcoli
di algebra lineare (come mi e' capitato 10 e piu'
anni fa) probabilmente userei il fortran che e'
ancora piu' vecchietto del C (a parte che le ultime
versioni sono praticamente un altro linguaggio rispetto
al fortran primigenio).
Comunque secondo me la programmazione e' piu' una questione di
attitudine mentale che di linguaggio.
Il primo passo, quello che dal problema passa all'algoritmo
che lo risolve dipende abbastanza poco dallo specifico linguaggio
(a meno di linguaggi molto particolari e che ti sconsiglio vivamente
tipo il Prolog) ed e' la cosa che si impara meno sui libri e di piu'
con l'esperienza, anche se una buona conoscenza delle strutture dati
di base e delle operazioni su di esse aiuta parecchio.
Una volta che hai ben chiaro l'algoritmo che vuoi usare
devi codificarlo nello specifico linguaggio.
Questa operazione ad un certo punto diventa quasi di routine,
a meno di non voler cercare di sfruttare particolari
caratteristiche del linguaggio per ottenere le massime prestazioni
possibili (sempre che per il problema in oggetto ne valga la pena).
Quello che vedo capitare a volte alle persone che non sanno
risolvere un esercizio di programmazione e' che di fatto, oltre
ad una scarsa conoscenza del linguaggio, hanno anche scarsa attitudine
alla sintesi di algoritmi.
Tutta questa tediosissima pappardella per dire che, secondo me,
imparare a programmare in C (e programmarci!) non e'
comunque tempo sprecato anche se poi passi ad un altro linguaggio.
Nella mia esperienza personale, imparare un secondo linguaggio
e' una operazione abbastanza indolore e rapida, se ne sai bene almeno
uno.
Alla fin fine quello che fa perdere abbastanza tempo non e' tanto
il linguaggio in se, quanto imparare a interfacciarsi con il
proprio sistema operativo, fare grafica, etc.etc. tutte cose
che richiedono un certo dispendio di memoria (umana!).
Vabbe' chiudo la "predica",  scusa la prolissita',
ciao,
g.

e poco ad oggetti...
Esiste il C++.

impararne uno vecchiotto come il C?
No, esistono decine di linguaggi moderni tra cui scegliere.

 Esiste il C++.
Il C++ è diverso dal C(informati), Hanno una semantica simile in molti punti 
ma dare una risposta come "Esiste il C++ " è una bestialità. Consiglierei 
vivamente dopo l'ultima affermazione del nostro amico di non postare tanto 
per farlo e di tenere il nostro ng abbastanza lontano dalle inesattezze 
........per quanto è possibile.

 ........per quanto è possibile.
evidentemente la risposta voleva dire che il paradigma ad oggetti non è 
supportato dal c (puoi "emularlo" in un certo senso con le strutture 
incorporando anche le funzioni, ma è un altro discorso).
ciao.

 produrre discrete catastrofi.
Proprio per questi motivi che dici sopra  io considero il C molto
didattico.... (forse per me "didattico" ha una accezione lievemente
diversa)
Da un lato lo puoi usare in modo "ristretto" e iper pulito per fare
programmini scemi e far capire cosa e' un ciclo, un if etc.etc.
insomma lo puoi usare grosso modo come si usava il Pascal (che e' stato
usato per anni come linguaggio didattico, naturalmente dipendeva molto
da chi te lo insegnava...).
Poi, a differenza di altri linguaggi piu' evoluti che nascondono
le cose sporche sotto il tappeto, andando avanti il C
ti costringe a capire bene certe cose di base, come appunto la gestione
dinamica della memoria, le rappresentazioni dei dati, le strutture dati,
pregi e difetti della ricorsione, etc.etc.
una volta che hai capito bene queste cose puoi usare tranquillamente
un linguaggio di piu' alto livello con una certa consapevolezza
di cosa accade dietro le quinte. Consapevolezza che ti aiuta per
esempio a scegliere accuratamente le strutture dati piu' evolute
che magari il nuovo linguaggio ti mette a disposizione e che
se non hai qualche nozione in piu' rischi di usare in modo
scellerato.
Queste sono solo mie umilissime considerazioni che privilegiano
un approccio bottom-up. Forse si puo' anche cominciare con un
linguaggio molto evoluto e poi, se e quando il tuo programma
ci mette 2 anni a girare perche' senza accorgertene hai allocato
10Gb di ram, andare a chiedersi il perche'...
(Ma questa e' probabilmente una mia deformazione dovuta al
fatto che faccio spesso programmini in cui le risorse
di calcolo e di memoria devono essere spremute ben bene).
Comunque quasi sicuramente ha ragione AndreaLF: fatti consigliare da
lui qualche nuovo linguaggio. Possibilmente object oriented, visto
che ormai direi che e' quasi inevitabile.
ciao,
g.


intendi includere le funzioni in strutture in c come in c++?
mi faresti un esempio?
ciao
ivan
ps. io ho iniziato col Turbo Pascal e il Basic

 mi faresti un esempio?
to', una roba un po' brutale :)
#include <stdio.h>
typedef struct S {
    int x;
    void (*f)(struct S *s);
} O;
void g(struct S *s) {
    s->x=123;
}
int main() {
    O o;
    o.f=&g;
    o.f(&o);
    printf("%d\n",o.x);
    return 0;
}
ciao.

 che ormai direi che e' quasi inevitabile.
anche qui è difficile orientarsi. IMHO escluderei in partenza il c++.
ciao.

 Grazie a chiunque mi risponderà. 
Voglio premettere che ho letto prima tutte le risposte, in generale le
condivido, soprattutto chi parlava di attitudine mentale.
Ho iniziato col C all'universita', ottobre scorso, da qualche mese
anche col C++; e' ovvio che in 50 ore non si puo' pretendere di
imparare alla perfezione un nuovo linguaggio, tutto o quasi tutto e'
lasciato alla buona volonta' dello studente.
Dopo aver superato l'esame mi ci sto dedicando e sto approfondendo da
solo e devo dire che senza il *peso* del voto il tutto e' molto ma
molto piu' piacevole.
Non sono d'accordo con chi dice che il C non e' adatto alla didattica,
nel mio corso di laurea *tutto* e' incentrato sul C prima e il C++ poi;
la preoccupazione dell'allocazione della memoria, ad esempio, che in
altri linguaggi non si pone, credo che tutto questo serva a ragionare,
non credete ?
Anch'io sono vecchietto, 32 anni (si mi sono iscritto solo quest'anno
all'universita', beh meglio tardi che mai), e provengo da esperienze
col Perl prima e Python poi, li amo entrambi ed ora mi sto pian piano
innamorando anche di ruby (ruby on rails - framework molto valido),
tralasciando lo shell scripting (korn, bash) mio primo grande amore.
Questo per dire che, *imho*, non bisogna fermarsi ad un unico
linguaggio ma spaziare dove piu' e' possibile, in modo tale da poter
effettivamente valutare quale linguaggio utilizzare ed in che ambito
utilizzarlo.
Non credo, sinceramente, di poter essere in grado di consigliarti un
linguaggio piuttosto che un'altro, ti posso dire la mia esperienza,
questo si.
La mia e' stata fortuna, nel senso che e' come se fosse stato un unico
filo logico, i primi shell script per montare un cdrom ad esempio, da
li' la necessita' di approfondire le regex (espressioni regolari) e
quindi son passato al Perl (sed e awk annessi), poi l'interesse per la
programmazione 00 con python e ruby ... e siamo al giorno d'oggi.
Io mi farei prima un po' d'esperienza e poi partirei col C, ma il C e'
un CULT, soprattutto per gli scoppiati di GNU/Linux, e' impossibile non
appassionarsi.

........per quanto è possibile.
Sentimi bene: chi si deve informare sei tu non io.  Tu non consigli
proprio niente.  Evita di scrivere a vanvera postando stronzate ed
evita di giudicare la competenza di chi non conosci.  Io conosco MOLTO
bene il C e conosco il C++ e ho insegnato a decine di persone oltre te
che esiste una differenza tra i due, a livello generale, nonché tra il
subset C-like di ISO C++ e lo standard ISO C stesso.  Ho risposto
dicendo "esiste il C++", sottintendendo (per menti dotate di un
briciolo di sale, cosa evidentemente non vera nel tuo caso) che esiste
comunque l'alternativa object-oriented e C-like, in un contesto in cui
già proponevo il passaggio ad un altro linguaggio.

incorporando anche le funzioni, ma è un altro discorso).
No, la risposta voleva sottointendere ciò che chi possiede un minimo
di conoscenza dei linguaggi di programmazione sa già: il C ha *già*
subito un'evoluzione, a partire da 3 lustri fa o giù di lì.
L'evoluzione del C è, appunto, il C++, che mette a disposizione un
paradigma object-oriented (oltre al classico strutturato), pur
conservando l'ampia compatibilità col vecchio linguaggio.

diversa)
Appunto, bisogna intendersi su cosa è "didattico".  La programmazione
è un'attività che richiede competenze di molti tipi diversi.

non credete ?
No.  Ragionare significa analizzare e risolvere problemi e per
analizzare e risolvere problemi servono altre conoscenze; conoscenze
la cui acquisizione richiede tempo, che non si può di certo impiegare
nel rincorrere un bug per un un puntatore non inizializzato o il
terminatore nullo mancante in una stringa o lo sforamento inaspettato
di un array.  Poi, sapere come viene allocata la memoria è una
questione prettamente tecnica che per risolvere il 90% dei problemi di
programmazione non ha *alcuna* importanza.

 è una scelta decisamente sbagliata.
Ovvio, il mio voleva essere come spunto per un concetto piu' ampio, che
ho espresso nel mio precedente intervento; di Pietro direbbe non
"c'azzecca" nulla il discorso specifico dei puntatori.

"c'azzecca" nulla il discorso specifico dei puntatori.
Ci azzecca, invece.  E' evidente che non hai colto il mio di "concetto
piů ampio".  Il tuo precedente intervento l'ho letto ed č proprio ad
esso che sto rispondendo: imparare a programmare significa acquisire
dei concetti che variano in uno spazio molto ampio e se "didattico"
significa "che insegna a ragionare", allora il C č molto meno
didattico di altri linguaggi, per il semplice motivo che gran parte
dell'attenzione č incentrata su aspetti meramente tecnici e non su
come arrivare alla soluzione di un determinato problema.

 come arrivare alla soluzione di un determinato problema.
Io la penso diversamente, il sacro graal della programmazione non
esiste, tuttavia considero gli aspetti tecnici fondamentali; nessuno
coglie cio' che l'altro dice, evidentemente.
:) addio

coglie cio' che l'altro dice, evidentemente.
Tu non ti sforzi neanche di capire che cosa l'altro voglia dire.
Non è colpa tua, è evidente che non hai esperienza in programmazione.

 coglie cio' che l'altro dice, evidentemente.
Imparare a programmare non significa imparare la sintassi di un
linguaggio; il primo passo, come ha suggerito Giovanni, potrebbe anche
essere scrivere su carta l'algoritmo che risolve un certo problema: gli
aspetti tecnici sarebbero del tutto collaterali.
Portando il tuo ragionamento all'estremo si potrebbe dire che per saper
programmare bisogna evitare di usare i servizi forniti dall'OS, perche'
nascondono i dettagli tecnici... tu invece usi la fopen ma ignori cosa
fa la libreria C, usi la malloc e non ti preoccupi se la memoria arriva
da un pool preallocato dalla libreria oppure direttamente dall'OS: usi
della astrazioni fornite dal linguaggio; e' ragionevole pensare di usare
un linguaggio che fornisce un'astrazione piu' alta[1]: voglio un oggetto?
Lo dichiaro! E' stato messo nello stack? Nello heap? Non mi interessa,
non mi e' utile per capire come implementare l'algortmo che ho in mente.
Un principiante che si trovi a cimentarsi con il C si trovera' molto
presto a scontrarsi con problemi (stringhe, e puntatori) che nulla hanno
a che fare con le basi della programmazione.
Per fare un paragone matematico: di solito si impara prima la DFT e poi
(eventualmente) si vede la FFT. Entrambe calcolano lo stesso oggetto,
ma partire dalla FFT sarebbe disorientante, perche' farebbe concentrare
su aspetti che non sono rilevanti per cogliere cose' la traformata
discreta di Fourier.
Certo non voglio dire che non valga la pena di studiare il C (non
scriverei qui altrimenti ^^); solo ritengo che sia meglio farlo dopo che
si hanno delle solide basi. Una volta padroneggiata la parte algoritmica
si puo' decidere di vedere "cosa c'e' sotto".
Luca
[1] E per la cronaca la tendenza e' verso linguaggio di piu' alto
livello, non il contrario.
-- 
Home: 
http://kronoz.cjb.net
"Su cio` di cui non si puo` parlare e` bene tacere".
 Ludwig Wittgenstein

già proponevo il passaggio ad un altro linguaggio.
L'unica Risposta che posso darti:
Sei un frustrato( e anche qui se non capisci bene il termine ti "consiglio" 
di vederlo sul Dizionario)
Eviterò di risponderti ad altri post inquanto non parlo con gli "imbecilli" 
perchè gli altri potrebbero non notare la sostanziale differenza che esiste 
tra me e te.
Hai ragione...l'unica cosa che mi puoi insegnare  è che da te non c'è niente 
da imparare.
Se hai "sale in zucca" impara a postare come si deve...


Ci sono poche persone che frequentano i.c.l.c e/o i.c.l.c++ in maniera 
assidua e costante per molti anni di seguito. E che, negli anni, hanno 
dimostrato non solo costanza ma anche competenza (a volte acquisita 
proprio nel NG, altre precedente).
Fra queste Andrea LaForgia, Davide Quack e (sull'altro NG) Nicola 
Musatti sono facilmente riconoscibili per il fatto di non aver cambiato 
il loro alias.
Altre, meno assidue, compaiono e scompaiono. E magari tornano dopo 
qualche anno con un alias differente. Come nel mio caso.
Probabilmente hai ragione nel dire che Andrea è frustrato. Io al suo 
posto lo sarei molto. E' per questo che ogni tanto "lascio" usenet. O 
che resto in lurk. E che, molto ma molto spesso, semplicemente non 
rispondo a certi post.
Ma ti sbagli riguardo al fatto che le persone non notano la differenza. 
Molti lusers probabilmente non la notano perché non la vogliono notare. 
Gli altri, dopo decenni di presenza in rete, sanno distinguere benissimo 
se si tratta di un caso di incapacità a insegnare o di incapacità ad 
imparare.
E distinnguono anche chi sa postare come si deve e chi no.

> ........per quanto è possibile.
Questo è puro flamebait.
E poi "nostro ng" credo che possa dirlo Andrea con molto più diritto di 
te (anche se sono certo che non lo farebbe mai).


Andrea, ti ho difeso in questo stesso thread.
Ma devo farti notare che qualche volta anche tu tendi a lasciarti andare 
a dei flamebait.
E' vero che Luca (a giudicare da quello che scrive) non ha una 
esperienza estremamente solida. Ma se non ti conoscessi e ti giudicassi 
solo dalle tue repliche a questo thread penserei che questo vale anche 
per te.
Lui ha ragione sul fatto che non vi siete capiti. Proprio perché hai più 
esperienza (anche di NG) dovresti però essere un filino più tollerante.
Noto con piacere/dispiacere che nei 3 o 4 anni in cui sono stato "off" 
non sei cambiato ;-)

 appassionarsi.
La religione è un altro discorso ;-)
E la passione è spesso una forma di religione.
Ma per chi ha un pochino di esperienza il mio consiglio è quello che ti 
ho dato:
Non importa in che ordine: almeno un linguaggio procedurale strutturato 
+ almeno un linguaggio funzionale + smalltalk + prolog + C o C++
E poi scegline uno, imparalo benissimo, lavoraci fisso per almeno 6 o 7 
anni. Sviluppa sia sistemi piccoli che sistemi grandi.
Poi ... potrai decidere da te.

 Se hai "sale in zucca" impara a postare come si deve...
Forse è meglio risparmiarsi questo tipo di affermazioni per chi 
veramente se li merita e non per Andrea Laforgia.

 E cosa si merita chi non sa rispondere altro che "Taci, imbecille" :-(
a me pare che Andrea Laforgia in questo thread abbia detto molto più che
"taci imbecille"... magari sempre là va a finire, "taci imbecille", però
non è assolutamente vero che dice solo quello. e poi a me pare proprio che
stavolta l'imbecille del caso sia imbecille per davvero... :D
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it