Newsgroup: it.comp.lang.c
Titolo: Cominciare da zero. K&R?

Ciao a tutti,

fin dall'infanzia ho sempre avuto una grande attrazione per la 

programmazione, che però non sono mai riuscito a concretizzare escludendo 

qualche piccolo esperimento. Ora sono al primo anno di ingegneria chimica 

e sono seriamente intenzionato a colmare le mie lacune nel campo tanto 

per passione quanto per una sicura futura utilità nella mia professione.



Ho parlato con un mio amico che studia informatica e mi ha consigliato il 

"nuovo" approccio alla programmazione: tutorial sul web, prova e impara 

ecc... insomma, il nuovo tipo di apprendimento basato sul web. Io invece 

pensavo ad un approccio diverso, meno superficiale, partendo da qualche 

buon libro.

Vorrei cominciare dal C, mi ha sempre affascinato e mi sembra il 

linguaggio più utile per comprendere il funzionamento dei software, oltre 

che di grande eleganza. Pensavo quindi di acquistare il K&R, ma mi 

sovviene un dubbio: tutti ne parlano come un ottimo libro per imparare 

"il C" ma lo è anche per imparare a programmare? Ci sono dei prerequisiti 

non legati al codice necessari prima di imparare un linguaggio? Vorrei 

evitare di impararmi righe di codice asetticamente senza capire la 

"logica" che c'è dietro la progettazione di un software. Sempre questo 

mio amico dice che la logica non si impara sui libri ma con la pratica, 

cosa che mi ha lasciato un po' perplesso, dite anche voi che è così? 

Per cominciare a programmare basta un libro come il K&R o servono nozioni 

teoriche in più?



L'obiettivo che mi sono posto sarebbe quello di riuscire entro l'estate 

ad avere le competenze necessarie per sviluppare un semplice risolutore 

di problemi di algebra lineare (matrici, rango, determinante, 

diagonalizzazioni...), credete sia un obiettivo praticabile con diciamo 

un paio d'ore di studio a settimana?



Altra cosa, vorrei comprare il libro in inglese, pensate sia una buona 

idea con una conoscenza della lingua da studente italiano medio-buono?



Grazie.



Il K&R se ricordo bene (sono moltissimi anni che non lo prendo in mano) 

non insegna a programmare quindi devi rivolgerti ad altro.

I concetti di programmazione strutturata (alla pascal per intenderci) 

vanno bene anche per il C.

Per un neofita,comunque vedrei di piu un C++ che un C in quanto il C e' 

solo un assembler portabile,non offre molto di piu.

Con C++ puoi iniziare dalla programmazione strutturata classica ma usare 

le sue librerie molto piu comode di quelle del C e poi volendo si puo 

crescere per apprendere la programmazione ad oggetti e quella generica.

Sia per K&R che per C++ esistono molti libri anche in italiano se 

l'inglese fosse un problema o si preferisce la lingua madre.






 



Sempre perché sei a ingegneria, sì. Comincia da subito a leggere solo cose in

inglese: è la lingua internazionale de-facto, e più vai avanti meno cose in

italiano troverai.





Ciao!






Appunto perché il C è più vicino alla macchina mi sembra un linguaggio migliore

per imparare.

Iniziare con il C++ secondo me è un bagno di sangue... Si può fare (a ing.inf.

a Pisa così faceva il mio professore) ma per forza di cose devi iniziare con il

sottoinsieme del C++ che è semplicemente il C... Quindi sarebbe come impare

prima il C e poi il C++ :)

A meno di non volere iniziare il primo esempio con std::cout << "Hello world!";

e dire "guardate, per capire quella roba dovete aspettare la fine del corso

(se va bene)!" :)



Ciao!


 medio-buono?



Secondo me sì. L'inglese non lo si sa mai abbastanza. Ed è uno strumento 

estremamente utile.



EMG



--

http://www.emagsoftware.it


http://www.emagsoftware.it/emgmusic


http://www.emagsoftware.it/spectrum


http://www.emagsoftware.it/tbosg



 solo un assembler portabile,non offre molto di piu.



Beh, insomma... Comunque io sconsiglio assolutamente il C++ per imparare 

a programmare.



 di zero.



Azz, non so neanche che cos'è. Dici che non valgo niente?... :-(



 



Leggendo i tuoi interventi son sicurissimo che ne sai scrivere uno ;)

Depth-first search, ricerca in profondità in italiano.



L'ho preso come esempio perché metà degli algoritmi su grafi operano su qualche

tipo di albero che iteri con DFS, BFS o varianti, modificati a seconda del

problema che bisogna risolvere; cosa che lo rende uno dei blocchetti fondamentali

da cui non si può prescindere, e che non basta solo conoscere a memoria, ma

farlo proprio e saperlo usare con la stessa scioltezza con cui si usa un for o

un sort.

Nessuno si ricorda a memoria come scrivere algoritmi che avrà usato una/due volte

nella vita (e.g. problema del flusso massimo, chi l'ha scritto di recente? :) ),

ma se ricorda il concetto alla base, l'implementazione (ottimizzazioni a parte)

la tira giù in dieci minuti massimo.



Ciao!



Puo darsi,ma tra C e C++ credo sia meglio iniziare con quest' ultimo 

(IMHO naturalmente)

Anche C++ e' vicino alla macchina visto che e' quasi compatibile con il 

C al 100% e supporta la stdlib del C.




 teoriche in più?



IMHO il K&R non e' proprio l'ideale, ma si puo' anche cominciare da li'. 

  Poi per approfondire ci sono altri libri, ma anche i tanti esempi e 

articoli che si trovano in rete.


 Depth-first search, ricerca in profondità in italiano.



Ah, operazioni ricorsive su alberi. Ok, sì, allora capisco il tuo punto 

di vista: bisogna saperlo fare. E non credo che il K&R insegni a farlo 

(oppure non ricordo).



 grosso, quello per cui molti abbandonano.



Sì, condivido: teoria e pratica insieme. Ma non è quello che dice 

"l'amico" (che forse tanto amico non è, visto il consiglio non molto 

valido...). Lui dice: "la logica non si impara sui libri ma con la 

pratica" che è un po' diverso, mi sembra.



Grazie a tutti per le numerose risposte!

Come linguaggio ho deciso di cominciare con il C, è da sempre quello che 

mi ha attratto più di tutti e tra l'altro mi sembra una buona base anche 

per passare ad altri linguaggi in futuro.

Riguardo teoria e pratica sono esattamente della vostra opinione: vanno 

benissimo i tutorial e le guide varie, ma anche secondo me se prima non 

getto solide fondamenta su qualche libro rischio di costruire soltanto un 

bel castello di sabbia. Ricordo che anni fa feci pure dei programmini 

carini in C scopiazzando qua e la... divertimento tanto, utilità zero.



Nonostante non abbia ancora vent'anni anch'io sono un po' "vecchio stile" 

nel metodo di studio, quindi va benissimo studiare a pc acceso per fare 

le varie prove, però i miei appunti cartacei non me li può togliere 

nessuno!



Allora, mi sembra di aver capito che alla fine comprare il K&R per 

imparare il C sia un'idea valida, vi chiedo però se occorrerebbe anche un 

altro libro più in generale sui concetti della programmazione. Ad esempio 

quando F. parlava di DBMS, bare-metal, alberi ecc... non avevo idea di 

che roba fossero. Sono conoscenze necessarie prima di cominciare oppure 

le potrò imparare su altri manuali strada facendo? Inoltre capire "come 

funziona un processore" può essere utile da sapere prima di programmare o 

posso benissimo farlo dopo aver scritto i miei primi codici?



Mi sto davvero appassionando all'idea di imparare a programmare... da 

piccolo avevo una grande passione per l'informatica: a 5 anni già 

smanettavo con l'MS-DOS sul vecchio 486 di famiglia, poi purtroppo verso 

le scuole medie a forza di sentirsi le lagne di tutta la famiglia sul 

"futuro ingegnere informatico" ho sviluppato una sorta di ribellione 

psicologica che mi ha fatto abbandonare totalmente l'informatica... spero 

di essere ancora in tempo per recuperare!



Grazie a tutti, fa davvero piacere trovare qui programmatori 

evidentemente "della vecchia scuola". In altri forum mi avrebbero già 

detto di gettare i libri e impararmi python con i video su youtube e le 

app per cellulare.





Matteo.


 



Probabilmente noi qui siamo un po' fuori dal tempo, purtroppo. :)



Comunque, se il tuo scopo è lavorare subito come schiavetto a Google hanno

ragione quelli del forum. Se invece vuoi fare la differenza non ci sono

scorciatoie, bisogna mettersi sotto con matematica, elettronica e ancora

matematica; e non mi sembra sia possibile smettere mai di vedere qualcosa di

nuovo...





Ciao!


 le app per cellulare.



Purtroppo... :-(



 pratica" che è un po' diverso, mi sembra.



Beh, in un modo o nell'altro, anche solo teoria o solo pratica, dai e 

dai ci si arriva.  Utilizzandole insieme ci si arriva meglio e prima, 

poi quanto usare una e quanto l'altra dipende dalla persona.



Ormai programmo da oltre trent'anni e adesso addirittura mi piace fare 

scorpacciate di roba teorica, ma se penso a quando ho iniziato, ero 

quasi allergico alla teoria, ma la pratica mi ha salvato. :-)


 posso benissimo farlo dopo aver scritto i miei primi codici?



Secondo me e' importante, poi dipende dall'indirizzo che scegli, i 

processori moderni, ma anche l'intera architettura di un PC, sono 

abbastanza complessi, per imparare le cose essenziali meglio scegliere 

qualcosa di semplice, ad esempio oggi ci sono sistemi di sviluppo ARM 

che si programmano in Assembler e C, e costano poco.

Oggi l'Assembler e' poco utilizzato, avendo a disposizione anche il C 

raramente si sente la necessita' di andare a livello piu' basso, pero' 

usare l'Assembler ti aiuta a capire meglio l'architettura del sistema, 

sia per quanto riguarda l'hardware, che il sistema operativo.


"il C" ma lo è anche per imparare a programmare? ...



Per programmare, ti consiglierei "algoritmi + strutture dati =

programmi", del Wirth (isbn 8870812596).



Per il linguaggio, anche se sono nato col C e il K&R, e lo uso da

almeno tre decadi, sarei propenso a consigliarti di iniziare con

Swift: è moderno, elegante e puoi fare cose raffinate.



Un altro consiglio è dare un occhio ai linguaggi funzionali: anche se

sono una nicchia li trovo utilissimi per creare una propria 'forma

mentis' su quello che vuoi fare quando programmi.

-- 

andrea - ri mi cci, name



Ho cercato informazioni su algoritmi e strutture dati e mi si è aperto un 

mondo, penso sia proprio quello che mi serve per gettare una base 

teorica. Ho trovato il libro che consigli usato a poco, credo lo 

prenderò, spero soltanto di riuscire ad affiancare senza problemi questo 

studio a quello universitario, mi sembra di aver capito che il lavoro che 

ho in mente di fare io ha la complessità di due esami di ing. 

informatica...

Non ho trovato al volo lo Swift però, ti ricordi qualche altro 

riferimento? 


 le sue librerie molto piu comode di quelle del C e poi volendo si puo 



linguaggio != librerie eh.

poi dire che le librerie del C++ siano piu' comode...mah.



Ciao Jack


 sia per quanto riguarda l'hardware, che il sistema operativo.



mah mica tanto. L'architettura di un processore e' sempre uguale: Von Neumann, una volta che hai capito come funziona (fetch decode execute), avere pipeline, cache ecc. non cambia nulla.

E' interessante scrivere una volta qualcosa in Assembler per capire come funzionano i loop, i salti condizionali (if), ecc. ma una volta fatto rifarlo e' un po' stupido, a meno di voler scrivere codice ultra ottimizzato che magari fa uso di istruzioni che il compilatore non e' in grado di gestire.



Ciao Jack


Il 21/02/2017 12:17, manalog ha scritto:


ultima cosa: le universita' hanno le BIBLIOTECHE, vai e consulta!



e, se lo fanno ancora, c'e' anche il prestito dei libri



e dopo i wirth (*), ma solo dopo che lo hai digerito, c'e' il knuth ( 

non e' un gioco di parole ma un altro autore )





(*) dei suoi libri c'e' anche qualcosa gratuito in pdf


 mah mica tanto.



ROTFL! Vabbe', ciao.


 



Incredibilmente datato, e non so quanto ancora valido al giorno d'oggi.

Ma Wirth come persona è... beh... un mostro sacro, ad essere cattivi! :) Il suo

libro andrebbe letto solo per quello! :)



Putroppo non sono aggiornato sui libri "da principianti" usciti ultimamente,

visto che non ho più a che fare con quel tipo di cose.



Il Knuth (suggerito nel seguito del thread) lo lascierei da parte: anche quello

*bisogna* leggerlo ma, non so voi, io l'ho letto in anni e dopo aver iniziato a

lavorare; gli esercizi sono molto complicati (alcuni erano/sono problemi teorici

irrisolti) e lo stampo è più enciclopedico che didattico.



Se proprio dovessi dare un consiglio... ci sono online varie guide/tutorial di

strutture dati e algoritmi: prendersi la scaletta, vedere cosa dicono, e per

ciascun punto che interessa approfondire come si può. Del resto, quando

s'impara, si vuole sapere com'è fatto un albero, magari implementare un B*, ma

tra il vedere una struttura con due puntatori dentro, e l'avere la descrizione

teorica e l'implementazione di ogni tipo di albero conosciuto ad oggi, ci sono

molti livelli in mezzo...



M2C,

Ciao!






No, vai tranquillo: per un po' d'operazioni di AL non c'è bisogno di chissà

quali conoscenze... Ancora vale la regola del: se lo so fare a mano, posso farlo

fare tale-quale ad una macchina! ;)



Ciao!




 



Sempre non abbiano tornelli ;)



Ciao!


 Quindi in totale pochissimo.



quanti sistemi embedded pensi ci siano in casa tua? o sulla tua auto?



Ciao Jack


 quanti sistemi embedded pensi ci siano in casa tua? o sulla tua auto?



Vero! Vediamo un po':



- la radio digitale in cucina

- la radio digitale mobile

- la lavatrice

- la sveglia digitale

- il telefono cordless

- il router



Giusto?



Poi non so se si possono considerare embedded anche le console (tipo 

Wii) e i tablet (tipo iPad), forse no.



- il router



Possiamo anche aggiungere la chiave per aprire la macchina, le

chiavette usb, le schede SD :)



 Giusto?



frigorifero, freezer, per chi l'ha stufa e forno elettrici (vetroceramica, induzione,ecc), spazzolino elettrico, citofono, le lampadine a led (che magari cambiano colore), TV, stereo, robot da cucina, telefono wireless, e chi piu' ne ha piu' ne metta.



Fai conto che nelle auto high end ci possono essere fino a 200 "smart actuator", collegati alla centralina da bus di comunicazione (CAN, LIN) che fanno cose: finestrini, specchietti, sedili, sistema ventilazione motorizzati, valvole per il sistema di raffreddamento del motore, ecc.



quindi si, ce ne sono un sacco, che per lo piu' non si vedono, e che praticamente tutti hanno almeno la routine di bootstrap scritta in assembler  (cioe' tutto quello che avviene prima che venga chiamato il main()).



Ciao Jack


 chiavette usb, le schede SD :)



Azz! Siamo circondati, non c'è più speranza! :-D



 stereo,



Non il mio. E' degli anni '70. :-)



Tutto questo però fa venire da pensare che forse ci può essere lavoro in 

quel campo...



 chiavette usb, le schede SD :)



mmh le schede SD non saprei, non e' che hanno una CPU con un programma che gira.

Se le mettiamo nel mazzo allora anche tutte le carte di credito, bancomat, RFID ecc. sono da considerare.



Ciao Jack


 quel campo...



di lavoro ce n'e', ma bisogna sapere un po' anche di elettronica, visto che la cpu si interfaccia direttamente con l'hw.



Ciao Jack


 visto che la cpu si interfaccia direttamente con l'hw.



Chiaro. E quella ce l'avrei, anche se forse un po' arrugginita.



Ma secondo te a chi bisogna rivolgersi? C'è la possibilità di lavorare 

nel campo anche per liberi professionisti?



 nel campo anche per liberi professionisti?



cerca su linkedin: embedded engineer o roba cosi.

come libero professionista c'e' lavoro, ma devi essere pronto a fornire il prodotto completo, o almeno l'elettronica, difficile che si cerchi qualcuno solo per il sw.

Se conosci qualche organizzazione che aiuta startups puo' essere una buona idea presentarsi, spesso ci sono tizi che hanno un'idea, ma poi serve qualcuno che la materializzi.



Se sei pronto a trasferirti in Germania, il lavoro lo trovi sicuramente, anche come Junior, sono alla disperata ricerca di ingegneri.



Ciao Jack


>mmh le schede SD non saprei, non e' che hanno una CPU con un programma che gira.



Si anche loro ce l'hanno, quelle "raffinate" hanno nel firmware

addirittura anche il wear-leveling, vedi le SD dedicate per

l'automotive:

https://www.sandisk.com/oem-design/automotive/sd1




 Se sei pronto a trasferirti in Germania, il lavoro lo trovi sicuramente, anche come Junior, sono alla disperata ricerca di ingegneri.



Purtroppo non sono ingegnere. E in ogni caso no, non sono pronto a 

trasferirmi. Mi sa che non ho speranza...



 quanti sistemi embedded pensi ci siano in casa tua? o sulla tua auto?



Hai preso proprio l'esempio peggiore, perche' in quel campo 

(elettrodomestici a larga diffusione) la gente che ci lavora e' 

pochissima.  Milioni di device, programmatori praticamente zero.



Già, anche questo è vero. E poi immagino che i programmatori necessari 

siano nelle case produttrici.



 quel campo...



Oggi quel campo si e' allargato parecchio ed e' ancora in forte 

espansione, purtroppo pero' i posti migliori sono difficili da 

raggiungere, spesso le aziende che lavorano in questo settore hanno una 

sola persona di esperienza, magari attorniata da tante "scimmiette". :-)



ah ecco. figo, non le conoscevo. sempre usato quelle cesse.

immagino non siano in vendita per i comuni mortali, sarebbero interessanti (se non costano un rene) per le rpi ad esempio.



Ciao Jack


 fare tale-quale ad una macchina! ;)





Insomma...tale quale non so, per dire, trovare un limite

per una funzione f(x) con x->inf che sembra andare a zero

e poi per x->zillioni-di-zillioni ti fa lo scherzetto

potrebbe non essere troppo vero.

Applicando a mano con la teoria magari invece te ne accorgi.

Altrimenti ad Analisi 1 come te le inculano le

calcolatrici scientifiche? :-D




 Ciao a tutti,



Mah io inizierei duro:



C K&R

C++ Stanley Lippman C++ Primer 5th Edition

Design Patterns (GoF)

Tutti i Meyers fino all'ultimo con C++14

Qualche libro sugli algoritmi

Boost

Qt



ecco...e poi mi curerei l'esaurimento. :-D






 idea con una conoscenza della lingua da studente italiano medio-buono?





tl;dr: leggi il K&R ma leggilo tutto, dalla prima all'ultima pagina.



Ciao,

Ho letto il K&R a pezzi durante il primo anno di università e da un 

mesetto mi sono messo a rileggerlo "per bene". 



La mia motivazione è che avendolo letto a pezzi, non avevo un senso di 

"chiusura" riguardo a quel libro e questo mi urtava non poco.



Ebbene, adesso lo sto leggendo pagina per pagina, questa volta però con 

il classico "senno di poi", vale a dire dopo aver letto anche qualcosa di 

algoritmi, di strutture dati e soprattutto del perché queste due cose 

sono importanti.



Ebbene, ti posso dire: il K&R è veramente un gioiello di libro.

Se lo leggi tutto conoscerai non solo il C ad un livello molto più che 

accettabile, ma avrai anche incontrato qualche algoritmo carino (shell 

sort, insertion sort, quicksort) e qualche struttura dati (alberi binari, 

hash-table). Non sono delle spiegazioni esaurienti, ma sono comunque 

utili.



Onestamente, sono contento di essermi messo a rileggerlo e adesso vorrei 

averlo letto per bene prima, quando ero al primo anno di università.



Saluti,

-- 

rzl


 linguaggio più utile per comprendere il funzionamento dei software[...]



Arrivo a darti questa risposta un bel po' in ritardo, ma spero tu la legga ugualmente. 

Lascia perdere il C per iniziare e tantomeno - come qualcuno ha follemente suggerito - il C++.

Oggi ci sono linguaggi migliori per imparare: Rust, Go, Kotlin.



Il K&R tra l'altro non e` l miglior libro per imparare il C. E` scarno e concentrato solo su aspetti essenziali.  La prima versione e` lontana anni luce dagli ultimi standard del C, e la seconda versione ha discrepanze persino con lo standard C89 (come il cast sul valore di ritorno di malloc). Potrebbe andar bene solo se lo corredassi con altro: il Deitel&Deitel, *dicono* sia un ottimo libro, il tutorial sui puntatori di Ted Jensen, e materiali in rete. Evita come la peste i libri di Herbert Schildt.




 



Arrivi per dare dei folli a chi risponde su un gruppo

dedicato al C per un OP che chiede dritte su cosa leggere e

come iniziare a programmare in C dicendo di iniziare

con altri linguaggi.



Continui poi con un elenco di questi altri linguaggi

senza dare alcun riferimento per impararli se non i

loro nomi e nessun argomento e chiarimento all'OP

riguardo a questa sterzata verso altro rispetto a

quello che chiedeva.



Poi passi a dare consigli per sentito dire su testi

papabili per il C.



Insomma...mi sembra un intervento poco utile,

arrogante e quanto a squilibri mi sembra che te la

cavi senz'altro meglio di chiunque altro a cui tu ti

possa riferire.





P.S.

La mia risposta non sara' stata certo un gran che' ed ho

esteso al C++ perche' e' improbabile che imparato il C

si riesca, poi nella pratica, a restare nell'ambito

del solo C, ma almeno ho indicato dei testi largamente

riconosciuti come importanti riferimenti e tecnologie

usate nel mondo del lavoro nell'ambito C/C++.


 esteso al C++ 



Il C++ non e` un linguaggio che NESSUNO oggi adotterebbe per imparare (e direi che a meno di constraint molto specifiche, nessuno userebbe per iniziare progetti enterprise). Si`, consigliare il C++ ad un neofita e` semplicemente FOLLE. Se ti rode il culo per questo, ehhh non posso farci mica niente.


Addi' 21 giu 2017, 4ndre4 scrive:


Premessa: lungi da me voler fare polemiche eh, ma me lo spigate perche'

e come mai:

- a scuola fanno il pascal (sempre meglio del basic d'un tempo!);

- all'uni (mat - ing - informatica) e' /obbligatorio/ il C, mica

il pascal o il fortran o altri;



-- 

bye, Yoda

Elemento distintivo di un Vero Programmatore e' il linguaggio di

programmazione usato. Un Vero Programmatore usa il Fortran, mentre

un Mangiatore di Ciocori' usa il Pascal.

               -- "Il Vero Programmatore non usa il Pascal"






Su questo concordo. Rimane però il fatto che il K&R è un libro che prima o

poi hanno letto tutti. A che punto dello studio infilarlo è, immagino,

questione di gusti.



Ciao!


 il pascal o il fortran o altri;



quale uni?





Non è come dici: dipende dal tipo di corso e dalle preferenze del docente.



Ciao!


 Non è come dici: dipende dal tipo di corso e dalle preferenze del docente.



Boh.. avro' capito male - come non detto.

OK ciao



-- 

bye, Yoda








Io ho fatto C++, amici in altre uni Java, colleghi più anziani Fortran,

ragazzetti che ho incontrato ultimamente Python.

Ma tanto alla fine un linguaggio vale l'altro, visto che alla fine si

dovranno imparare tutti e quattro ;)



Ciao!


 - all'uni (mat - ing - informatica) e' /obbligatorio/ il C



A parte che non e` vero, quel che ti serve dall'universita` non e` la conoscenza di un linguaggio specifico, ma i fondamenti teorici. Io consiglio a tutti coloro che aspirano a diventare programmatori professionisti di laurearsi in matematica.


 poi hanno letto tutti.



Lo hanno letto tutti perche` tutti lo hanno (erroneamente) consigliato come la bibbia del C "che tutti devono assolutamente leggere".



Si va be

Tu hai delle idiosincrasie verso il C++

Ammettilo,ti piace poco e non vorresti consigliarlo.

Ma oggi, per fare sw che richiedono stabilita e performance e' 

insuperabile ed e' usatissimo nell' industria.

Rust a parte non esiste linguaggio migliore per quei tipi di sw.

Rust potrebbe essere il successore di C++,purtroppo rimane (ancora) un 

linguaggio di nicchia.

Ma se vuoi continuare a fare gestionali allora rimani pure in java o C 

sharp (battuta con sorriso)





Ma te cos'hai studiato?






 



Questa e' una cretinata apocalittica, sia che si parli di

didattica sia che si parli del mondo del lavoro.



Non porti elementi a suo suffragio, e a me non interessa

farlo a sua smentita.

Ma tu fallo se hai tempo, magari imparo qualcosa.



Poi cosa vuoi che mi roda?

Modera il linguaggio che cosi' fai proprio brutta figura.


> cosa che mi ha lasciato un po' perplesso, dite anche voi che è così?



Nutro forti dubbi, forse ha detto "logica" intendendo

colloquialmente "piu' o meno con che logica funziona una cosa",

non certo lo studio della logica propriamente detta, altrimenti

si sbaglia.


 sharp (battuta con sorriso)



I sistemi enterprise su cui lavoro io difficilmente potrebbero classificarsi come "gestionali".

Vedi, la differenza tra me e te e` che io parlo di cio` che conosco, tu no. 




 Modera il linguaggio che cosi' fai proprio brutta figura.



Io eh? LOL :)


 Ma te cos'hai studiato?



E a te che te ne frega? Che rilevanza avrebbe?




 Perche` le conoscenze dei professori di informatica delle superiori sono ferme agli anni '70.

E' anche peggio. Nella scuola (istituto tecnico) che ha frequentato mio 

figlio, quando eliminarono la materia "aggiustaggio" (sostanzialmente 

uso della lima), gli insegnanti furono riciclati per insegnare 

informatica. Per quanto tu possa immaginare il peggior risultato 

possibile, e' stato in realta' anche molto peggio.







Gia': a uno che parla di salute che rilevanza avrebbe

chiedergli se ha studiato medicina?






Ma dai, sei il Thorin che fu di it.comp.linux.iniziare,

oppure siete parenti o geneticamente vicini senza saperlo.



Vai in pace.


 oppure siete parenti o geneticamente vicini senza saperlo.



LOL! ma impossibile: Pierluigi da mo' che t'avrebbe gia' calato l'ascia

bipenne e poi non userebbe MAI quel disastro ecologico di G2/1.0 - ciao!





-- 

bye, Yoda




 realta' anche molto peggio.



:-(



EMG



--

http://www.emagsoftware.it


http://www.emagsoftware.it/emgmusic


http://www.emagsoftware.it/spectrum


http://www.emagsoftware.it/tbosg



 ridicola.



Potrebbe essere valida come ginnastica mentale, propedeutica alla 

pratica della programmazione in Cobol. :-P


 Ma dai, sei il Thorin che fu di it.comp.linux.iniziare,



Eh?!


 chiedergli se ha studiato medicina?



Almeno, prima di chiedere alcuna referenza, esci dall'anonimato, senno` ti stai dando la zappa sui piedi. Poi, gli argumenta ad verecundiam non hanno mai aiutato la dialettica di nessuno. Vuoi che ti posti il mio curriculum vitae di sviluppatore software? Non me ne frega una mazza di farlo. Se ti piace quel che dico, bene, senno` ciccia.


 possibile, e' stato in realta' anche molto peggio.



Non stento a crederlo... :-o



ciao

Giacomo


 scommetto che non glie le avrebbero date quelle cattedre ... :-(



Credo anch'io... :-(((



 figlio, quando eliminarono la materia "aggiustaggio"



Ma si`, guarda, si potrebbe discutere per ore del livello di insegnamento informatico nelle scuole (di tutti i livelli, universita` incluse). Anziche` insegnare ai ragazzi a risolvere i problemi nel modo piu` efficiente possibile, gli insegnano il Pascal. Oggi, 2017, il Pascal. 'Tacci loro. Alle medie io smanettavo gia` coi computer e quel coglione di Educazione Tecnica era fissato col regolo calcolatore (
https://it.wikipedia.org/wiki/Regolo_calcolatore
), una roba usata nel 1600, perche` secondo lui "dava le basi". Questa storia delle fantomatiche basi che ti verrebbero date se cominci dal metallo puro e` la piu` grande truffa propalata a chi si avvicini ad una qualunque materia tecnica (come si puo` vedere anche da questo thread) e che ha, come sua piu` ovvia conseguenza, quella di allontanare i neofiti una volta e per sempre. Come si fa, davvero, a consigliare di usare il C, per imparare la programmazione, che non ha nemmeno un tipo built-in per le stringhe? Che se usi due scanf() in sequenza e non svuoti il buffer di tastiera bestemmi in tutte le lingue? Che se per caso vai in buffer overflow ti sputtana una fopen() da un'altra parte del sistema? Poi ti dicono: ah no, ma lo devi saper usare. Un par de palle. Anche una bomba si deve saper usare. A che cosa serve, oggi, 2017, sapere cio` che accade dietro le quinte con l'aritmetica dei puntatori, di quanto avanza un puntatore a int, sulla macchina X con word lunga Y bits, se vi aggiungi 3? A che serve ricordarsi i casi in cui il nome di un array decade in puntatore a primo elemento e agire di conseguenza? E` roba che andava bene negli anni '60/'70/'80. Oggi ci sono altri strumenti e per insegnare e per imparare. Purtroppo molti (professori e manovali della programmazione) ripetono a pappagallo stronzate che fanno "sviluppatore cool": il K&R lo devono leggere tutti, il C e` il miglior linguaggio per imparare, le tastiere vere hanno solo 0 e 1, e altre puttanate varie. Poi, al colloquio di lavoro gli chiedi di scrivere un algoritmo di compressione in C (io chiedo sempre l'huffman) e svengono.


 <snip>



Non capisco. Prima dici che le basi non servono e poi che chiedi l'Huffman

ai colloqui. Qualcosa non quadra, a meno che non pensi che le uniche basi

utili siano quelle che piacciono a te...



Ciao!


 A che cosa serve, oggi, 2017, sapere cio` che accade dietro le quinte con l'aritmetica dei puntatori

Serve. E' propedeutico all'uso di altri linguaggi.

Ad esempio, se programmando in Java ti becchi un NullPointerException, 

non ti viene da pensare ad un cane da caccia, se conosci l'algebra dei 

puntatori.

:-)


 Serve. E' propedeutico all'uso di altri linguaggi.



Ma assolutamente no. Tutto cio` che devi sapere, quando ottieni un NullPointerException e` che c'e` stato un accesso ad un reference che ha un valore null. Non e` affatto legato all'aritmetica dei puntatori, e non serve sapere NULLA sull'aritmetica dei puntatori per capire cos'e` un NPE.





Mi basta anche cosi! :-D



Che c'entra l'anonimato poi...


 Non capisco. Prima dici che le basi non servono e poi che chiedi l'Huffman



Non capisci perche` leggi superficialmente quello che scrivo e ne deduci quel che piace a te. 

Affermare che una certa strada non ti dia le basi non vuol dire che le basi non servano - bisogna ottenerle in un altro modo: migliore. Il riferimento a Huffman era slegato da quello sulle basi. Ho detto una cosa precisa: che le (STESSE) basi, in programmazione, si acquisiscono molto piu` difficilmente in C che in qualunque altro linguaggio; ho POI detto che molti di coloro che cantano le lodi del C crollano di fronte ad un problema minimamente complesso (come l'implementazione dell'algoritmo di Huffman). Sono due cose slegate.



barba incolta, aria scazzata: algritmo di Huffman possibilmente compilabile.

stangona bionda, gonna succinta: il carattere prima di "define"... se lo 

sai, se no lo cerchiamo assieme dopo il caffè.


 Che c'entra l'anonimato poi...



C'entra col fatto che se chiedi a me di supportare quel che dico fornendo referenze, dove ho studiato, ecc.., dovresti almeno dare l'esempio e mostrare le tue. Perche` bisognerebbe accettare i tuoi consigli di "medicina" a scatola chiusa, e invece quando tocca a me io debba presentare il certificato di laurea, e` un mistero tutto da indagare.





ROTFL!! :-D

Hai ragione, forse avrebbe gia' scritto "PLONK" o "> /dev/null"

ma scemo io che non ci ho pensato: con G2/1.0 e' inequivocabile

che i geni siano altri.

Ello avrebbe avuto tin, oppure slrn (scritti in c :-P).



P.S. ricordo che all'epoca mitragliava come un forsennato

      e fui io, dopo le sue risposte nei miei

      rari post, che gli chiesi di procedere al PLONK. :-DDD



Scusate l'OT. Ciao.



Ah! Ok, non sai cosa vuol dire "anonimato".

Le superiori? :-DDD




 uso della lima),



Come sarebbe? Come ti permetti di sminuire cosi' "aggiustaggio"?!?

C'erano i torni, le frese, i contrasti, i fogli di lavorazione con

i disegni da fare in assonometria e in tre dimensioni e con

le varie fasi di lavorazione ben distinte, altro che pizza e fichi!

:-D



Per un attimo pensavo di aver dimenticato la faccina.



Cio' che dicevo era semplicemente ironico, perche' in effetti, dei 

puntatori un programmatore puo' anche non conoscerne l'esistenza, 

proprio perche' ci sono fior di linguaggi senza puntatori. A maggior 

ragione per illustrare l'algoritmo di Huffman, non c'e' bisogno dei 

puntatori, in sostanza, dal punto di vista del calcolo, basta sapere 

cosa sia una media ponderata, che si fa anche in COBOL ANSI71.



Per quanto riguarda il NPE, si trattava di una battuta, te la spiego. Se 

dico "pointer" a mia moglie, o a chiunque altro che non abbia mai avuto 

a che fare coi puntatori, e' piu' facile che capisca che si tratti di 

una razza canina.



E' necessario che ti faccio un disegno?





Continuo a non vedere come possono essere slegate, visto che dici che

Huffman è una base che serve mentre l'aritmetica dei puntatori è una base

che non serve. Comunque, non è questo il punto importante.



Ad oggi vedo un sacco di ragazzini che indicizzano con stringhe invece di

interi, usano hashmaps come se piovesse, ogni array un sort perché visto

mai. Se avessero iniziato studiando il C invece di Python o PHP certe

bestialità se le risparmierebbero.

Ribadisco: se lo scopo è andare a fare il code monkey sottopagato per

un'azienda a caso va anche bene farsi il mesetto di uno di questi

linguaggetti di moda al momento. Se si vuole diventare professionisti

tocca studiare anni di matematica, elettronica e algoritmi, come del resto

abbiamo fatto tutti qui. Almeno spero.





Ciao!


[...]

Il rodimento di culo ti fa evidentemente straparlare e finisci per scrivere idiozie. Sì, anonimato, hai capito bene. Tra l'altro ti sei scelto un nick che ne è l'emblema. Il succo del discorso è chiaro: non si sa chi tu sia, caro anonimo, ma quando parli di medicina bisogna crederti sulla parola. Non sai chi sia il tuo interlocutore ma quando parla di medicina deve mostrare i documenti. Occhio che di 'sto passp finisci per fare la figura dello scemo.



I puntatori devi sapere cosa sono in qualsiasi cosa scrivi. Vedi come

smadonna la gente che inizia nei citati "fior di linguaggi" quando non

capisce la differenza tra passaggi per valore o riferimento, o deve far

tornare più di un valore da una funzione.



Ciao!



Dimentichi le vesciche sulle mani e relativi calli.

Fortunatamente ho avuto a che fare con aggiustaggio solo all'esame 

d'integrazione per passare dal liceo scientifico all'istituto tecnico. 

Era settembre, durante gli esami di riparazione, c'ero solo io e 

l'esaminatore, un'omone dall'aria compassionevole, che si fece vedere 

smacchinare col calibro. Poi mi diede un parallelepipedo con un velo di 

ruggine dicendomi di limarlo finche' le facce non fossero piane e 

parallele. Anch'io lo misurai accuratamente col calibro, sembrava 

perfetto, quindi armeggiai con la lima piu' fine che avevo a 

disposizione e tolsi solo la ruggine. Poi consgnai e mi diede 8.

:-D


 tornare più di un valore da una funzione.

Ma anche no. Ti posso citare una fila di linguaggi dove dei puntatori 

non c'e traccia, conseguentemente non c'e' da preoccuparsi degli 

argomenti by-value o by-reference perche' ci pensa il compilatore.

Alcuni di questi, a solo titolo d'esempio: SmallTalk e Java, ma anche 

procedurali come le prime versioni di BASIC, COBOL e IBM-RPG. Pure 

l'assembly, per quanto ne so io.





Che c'entra l'assembly è un mistero. Comunque...



Non hai capito cosa volevo dire. Faccio un esempio: chi inizia in PHP ha

enormi problemi a capire perché un intero passa per valore, un oggetto per

riferimento e un array per riferimento ma con copy-on-write.

Per noi programmatori C quello che succede è ovvio. Per loro è magia nera

che va accettata, scordata dopo una settimana e chiesta nuovamente per venti

volte.





Ciao!


 :-D



Dove andavo io, un anno di lima e parallelepipedo... :-(



Anni '70, Roma, ITIS E. Fermi.



 l'assembly, per quanto ne so io.



Stai dicendo che in assembly non ci sono i puntatori? Mi sembra strano. 

Devo ammettere che io conosco solo l'assembly Z80, ma lì i puntatori ci 

sono e come. Nel senso che si usano i registri per contenere indirizzi e 

poi le istruzioni adatte che li usano come puntatori. Non posso 

escludere che gli assembly moderni siano completamente diversi ma ne 

dubito. Senza puntatori come faresti ad accedere alla memoria?



 abbiamo fatto tutti qui. Almeno spero.



Abbiamo fatto tutti CHI? Di chi parli? E cosa c'entrano gli anni di matematica, elettronica (?) e algoritmi col C in particolare?


 cosa sia una media ponderata, che si fa anche in COBOL ANSI71.



Esatto!




 tornare più di un valore da una funzione.



Ma de che. A parte che se certa gente "smadonna" su dei concetti cosi` semplici, si tratta di pessimi programmatori - hanno problemi ben piu` gravi del linguaggio che usano - sapere cos'e` un puntatore e` del tutto irrilevante per poter programmare. Un programmatore e` uno che risolve problemi in maniera efficace ed efficiente. Per farlo, ti serve una solida conoscenza di algoritmi e tecnologia. Ma le tecnologie che ci sono oggi ti consentono di risolvere problemi SENZA conoscere i dettagli implementativi di bassissimo livello. E giustamente. 



Considera, poi, che il fatto che un linguaggio ti obblighi ad avere a che fare con roba come null/NULL/nil o con operatori == che confrontano reference anziche` valori, e che ti obblighi in sostanza a sapere cosa sia il passaggio per riferimento e per valore, e` un *DIFETTO* di quel linguaggio.



Il fatto che un determinato oggetto venga passato per valore o per riferimento e` solo un dettaglio implementativo, che non dovrebbe affatto emergere. L'astrazione e` che io passo SEMPRE per valore; sotto l'astrazione c'e` il passaggio per riferimento quando serve. Ma il "quando serve" lo deve decidere l'architettura per conto proprio, senza coinvolgere il programmatore.


 si sbaglia.



Invece la tua incapacita' nel fare semplici operazioni, come ad esempio 

*quotare* e' palese.

-- 

I'm not anti-social;

I'm just not user friendly


 volte.



Ma il problema non e` quel programmatore. Il problema e` il linguaggio implementato a quel modo. Non e` che siccome tu programmatore C sai cos'e` il passaggio per riferimento e per valore, allora quella e` una base che dovrebbero avere tutti. Il punto vero e` che i linguaggi dovrebbero essere progettati per astrarre quei dettagli implementativi. Ti ricordo che i linguaggi di programmazione sono artefatti umani, non roba che casca dal cielo. Siamo noi che abbiamo il dovere di semplificarci la vita.


 l'assembly, per quanto ne so io.



Negli esempi che hai citato l'assenza dei puntatori significa dover 

ricorrere all'indirizzamento diretto, aumentando in modo esponenziale i 

rischi.



 Stai dicendo che in assembly non ci sono i puntatori?



No, perche` in assembly (in generale) non hai variabili di tipo puntatore, e un puntatore e`, per definizione, una variabile che contiene un indirizzo di memoria. Hai registri, stack e operazioni per leggere/scrivere locazioni di memoria.




 rischi.



Eh?! Spiega.