View Full Version : python o c, scelta "ardua"
Yuno gasai
19-01-2016, 10:55
Salve ragazzi è da circa 1 settimana che ho acquistato un libro direi scolastico (so che è usato nelle varie scuole) chiamato "Linguaggio C e C++" di Piero Gallo e Fabio Salerno. Avendolo preso usato l'ho pagato poco più di 10 euro :asd: Da quanto ho visto tratta dei più svariati argomenti fino ad arrivare ai vari costruttori, distruttori, malloc ecc... Ora il problema qual è? Bene o male ho imparato le varie strutture di if, while, for, come creare variabili ecc... Però ho ancora un pò di difficoltà. Leggendo un pò su internet, le persone di solito consigliano ai principianti di iniziare con python per farsi un pò le "ossa". Voi cosa mi consigliate? Ho visto ieri sera un pò di python e devo dire che rispetto al C è ben altra cosa :asd: Le variabili non vanno dichiarate, non c'è l'obbligo di inserire le direttive, non c'è l'obbligo di mettere un ";" alla fine di ogni istruzione ecc..
Sinceramente sono combattuto onestamente, io programmerei un pò per hobby e perchè no, magari per farne una professione (si lo so, starete ridendo :stordita: ). Il mio sogno per ora è riuscire a creare un emulatore del chip-8 e del game boy. Da quanto ho visto in giro è possibile crearli anche con python nonostante esso sia un linguaggio ad alto livello e meno efficiente in termini di "prestazioni". Boh, un consiglio vostro... Una volta preso la mano con python, il C risulterà meno ostico?
hot_blaster
19-01-2016, 11:11
Io posso darti la mia esperienza universitaria.
Il linguaggio C è abbastanza complesso perché di basso livello, e nella mia università è cosiderato un must, tant'è che viene insegnato al primo corso di informatica (mentre python non viene quasi nemmeno mai accennato).
Personalmente penso che C debba essere la base di qualsiasi programmatore, in quanto la conoscenza del C (es. la logica dei puntatori) sono preerequisiti per molti linguaggi ad oggetti ad alto livello.
Piccola nota, C è un linguaggio imperativo, mentre python è ad oggetti, due linguaggi con paradigmi di programmazione completamente diversi, che con un po' di sforzo potresti imperare entrambi.
>>The Red<<
19-01-2016, 16:18
Personalmebte consiglierei un approccio di tipo top-down. Il C è un linhuaggio a basso livello e se non hai una base di programmazione può. Rimanere difficile. Detto ciò ti consiglio di partire con un linguaggio ad alto livello per capire i fondamenti della programmazione , e poi inizi a studiare il C. Saluti :)
hot_blaster
19-01-2016, 16:21
Personalmebte consiglierei un approccio di tipo top-down. Il C è un linhuaggio a basso livello e se non hai una base di programmazione può. Rimanere difficile. Detto ciò ti consiglio di partire con un linguaggio ad alto livello per capire i fondamenti della programmazione , e poi inizi a studiare il C. Saluti :)
Io invece sarei per l'esatto opposto, cominciare subito a programmare con gli oggetti, senza avere le basi della logica dei puntatori secondo me può essere dannoso.
>>The Red<<
19-01-2016, 17:12
Io invece sarei per l'esatto opposto, cominciare subito a programmare con gli oggetti, senza avere le basi della logica dei puntatori secondo me può essere dannoso.
Allora potresti cominciare direttamente con l assembly:D scherzo, sono punti di vista, secondo me è più semplice iniziare capendo come funzionano gli oggetti, i cicli e i vari costrutti; prova a fare un ciclo for col c e magari scansionando una matrice..molto più semplice con qualcosa ad alto livello.
cdimauro
19-01-2016, 17:35
Salve ragazzi è da circa 1 settimana che ho acquistato un libro direi scolastico (so che è usato nelle varie scuole) chiamato "Linguaggio C e C++" di Piero Gallo e Fabio Salerno. Avendolo preso usato l'ho pagato poco più di 10 euro :asd: Da quanto ho visto tratta dei più svariati argomenti fino ad arrivare ai vari costruttori, distruttori, malloc ecc... Ora il problema qual è? Bene o male ho imparato le varie strutture di if, while, for, come creare variabili ecc... Però ho ancora un pò di difficoltà. Leggendo un pò su internet, le persone di solito consigliano ai principianti di iniziare con python per farsi un pò le "ossa". Voi cosa mi consigliate? Ho visto ieri sera un pò di python e devo dire che rispetto al C è ben altra cosa :asd: Le variabili non vanno dichiarate, non c'è l'obbligo di inserire le direttive, non c'è l'obbligo di mettere un ";" alla fine di ogni istruzione ecc..
Sinceramente sono combattuto onestamente, io programmerei un pò per hobby e perchè no, magari per farne una professione (si lo so, starete ridendo :stordita: ). Il mio sogno per ora è riuscire a creare un emulatore del chip-8 e del game boy. Da quanto ho visto in giro è possibile crearli anche con python nonostante esso sia un linguaggio ad alto livello e meno efficiente in termini di "prestazioni". Boh, un consiglio vostro... Una volta preso la mano con python, il C risulterà meno ostico?
Sì, perché partiresti con una mentalità da programmatore: saper risolvere problemi, e quella la si acquisisce più velocemente con un linguaggio più ad alto livello, come Python per l'appunto (vedi mia firma).
Io posso darti la mia esperienza universitaria.
Il linguaggio C è abbastanza complesso perché di basso livello, e nella mia università è cosiderato un must, tant'è che viene insegnato al primo corso di informatica (mentre python non viene quasi nemmeno mai accennato).
Fortunatamente tanti atenei stanno cominciando a usare Python, che per introdurre alla programmazione è di gran lunga migliore.
Personalmente penso che C debba essere la base di qualsiasi programmatore, in quanto la conoscenza del C (es. la logica dei puntatori) sono preerequisiti per molti linguaggi ad oggetti ad alto livello.
Non sono affatto d'accordo. I puntatori sono un'esigenza per il C, perché un linguaggio povero e ti mette a disposizione soltanto quello strumento per manipolare memoria allocata dinamicamente (o comunque per fare certe operazioni).
Java è un linguaggio a oggetti fin da quando è stato concepito, eppure non c'è traccia di puntatori: come farà?
Piccola nota, C è un linguaggio imperativo, mentre python è ad oggetti, due linguaggi con paradigmi di programmazione completamente diversi, che con un po' di sforzo potresti imperare entrambi.
In realtà Python è un linguaggio multiparadigma: puoi scrivere codice imperativo, a oggetti, e funzionale.
Personalmebte consiglierei un approccio di tipo top-down. Il C è un linhuaggio a basso livello e se non hai una base di programmazione può. Rimanere difficile. Detto ciò ti consiglio di partire con un linguaggio ad alto livello per capire i fondamenti della programmazione , e poi inizi a studiare il C. Saluti :)
Concordo.
Io invece sarei per l'esatto opposto, cominciare subito a programmare con gli oggetti, senza avere le basi della logica dei puntatori secondo me può essere dannoso.
La logica dei puntatori E' fra le cose più dannose.
Ci sono altri linguaggi che mettono a disposizione il concetto di puntatore, anche da prima che nascesse il C, e non sono arrivati a quel livello di perversione.
Allora potresti cominciare direttamente con l assembly:D scherzo,
Io no. Se l'assunto è quello esposto finora, allora si potrebbe cominciare direttamente col linguaggio. Magari dell'architettura Itanium. ;)
sono punti di vista, secondo me è più semplice iniziare capendo come funzionano gli oggetti, i cicli e i vari costrutti; prova a fare un ciclo for col c e magari scansionando una matrice..molto più semplice con qualcosa ad alto livello.
Assolutamente.
hot_blaster
19-01-2016, 20:27
Per esperienza personale (e quella di amici e colleghi) posso affermare che la logica ad oggetti non è affatto immediata.
Anzi spesso causa molta confusione in coloro che si approcciano per la prima volta alla programmazione (peggio ancora se senza il supporto di docenti).
Per quanto riguarda la logica dei puntatori, io l'ho trovata fondamentale per comprendere bene le logiche di passaggio di parametri nei linguaggi ad oggetti, in particolare la differenza tra indirizzamento per riferimento/valore e il passaggio di paramentri per riferimento/valore.
cdimauro
19-01-2016, 20:50
Per esperienza personale (e quella di amici e colleghi) posso affermare che la logica ad oggetti non è affatto immediata.
Anzi spesso causa molta confusione in coloro che si approcciano per la prima volta alla programmazione (peggio ancora se senza il supporto di docenti).
Dipende da come ci si approccia alla OOP. Ricordo ancora con piacere il manualetto della Borland che era allegato a quelli del Turbo Pascal 5.5, col quale fu introdotto questo paradigma in un IDE consumer.
Spiegava la OOP in maniera così semplice e intuitiva, che per parecchio tempo è stato preso come riferimento per impararla.
Per quanto riguarda la logica dei puntatori, io l'ho trovata fondamentale per comprendere bene le logiche di passaggio di parametri nei linguaggi ad oggetti, in particolare la differenza tra indirizzamento per riferimento/valore e il passaggio di paramentri per riferimento/valore.
In Pascal puoi fare lo stesso senza dover ricorrere ai puntatori, tramite la keyword VAR da usare nei parametri (in buona sostanza è ciò che è stato introdotto in C++ con l'operatore & nei parametri o nelle dichiarazioni).
In C servono i puntatori perché, come già detto, è un linguaggio povero, e ne deve obbligatoriamente far uso per sbrogliare problematiche che in altri linguaggi vengono, invece, risolti in maniera più semplice, elegante, comprensibile, e sicura.
hot_blaster
19-01-2016, 21:40
Dipende da come ci si approccia alla OOP. Ricordo ancora con piacere il manualetto della Borland che era allegato a quelli del Turbo Pascal 5.5, col quale fu introdotto questo paradigma in un IDE consumer.
Spiegava la OOP in maniera così semplice e intuitiva, che per parecchio tempo è stato preso come riferimento per impararla.
Io invece ho il ricordo orribile del mio professore delle superiori (un incapace) che cercò di spiegarmi la logica ad oggetti. Tutt'oggi mi chiedo come fossi capace di scrivere anche solo una riga di Java.
Mentre ho il felicissimo ricordo del mio docente universitario, che con una semplicità inaudita mi fece comprendere praticamente tutto.
In Pascal puoi fare lo stesso senza dover ricorrere ai puntatori, tramite la keyword VAR da usare nei parametri (in buona sostanza è ciò che è stato introdotto in C++ con l'operatore & nei parametri o nelle dichiarazioni).
In C servono i puntatori perché, come già detto, è un linguaggio povero, e ne deve obbligatoriamente far uso per sbrogliare problematiche che in altri linguaggi vengono, invece, risolti in maniera più semplice, elegante, comprensibile, e sicura.
Sul semplice, elegante e sicura concordo, ma sul comprensibile ho i miei dubbi.
In particolare trovo particolarmente dannoso il fatto che certe cose (come i puntatori) nei linguaggi ad oggetti siano "nascoste", portando conseguentemente all'errore di ignorarle.
cdimauro
19-01-2016, 21:49
Non sono nascosti in tutti i linguaggi. Ad esempio proprio in Turbo Pascal puoi avere oggetti (come strutture allocate staticamente), ma anche puntatori a oggetti, e quindi l'uso di puntatori è esplicitato. Dipende tutto dal linguaggio, insomma.
Per me non è un problema che queste informazioni siano nascoste, perché si tratta di un dettaglio implementativo. Ad esempio in un'architettura che fa uso di segmenti, un oggetto potrebbe benissimo essere un indice (di un segmento), mentre i suoi campi sarebbero accessibili come offset (accoppiati al segmento).
Per essere più chiari, sarebbe sufficiente memorizzare l'indice del segmento da qualche parte, anziché la coppia segmento + offset (che forma, invece, un puntatore in memoria), risparmiando pure spazio in memoria.
In tutta onestà, non capisco perché nascondere questo dettaglio implementativo possa arrecar danni.
hot_blaster
19-01-2016, 22:06
Il "danno" a cui mi riferisco è dovuto alla semplice pigrizzia.
Io credo (o forse temo) che una persona, che si approccia per la prima volta alla programmazione, decide di iniziare con linguaggi ad alto livello, possa poi ignorare certi dettaglio (IMHO) molto importati.
Visto che la domanda iniziale del topic era, "da dove cominciare", io consiglieri di sbattere un po' la testa sul libro e imparare il C.
cdimauro
19-01-2016, 22:17
Dipende tutto da cosa farà in seguito. Se la programmazione gli piace, espanderà le sue conoscenze e, quindi, arriverà a trattare dettagli di più basso livello.
Ma intanto deve sviluppare la mentalità del programmatore, e per far questo un approccio di più alto livello è di gran lunga preferibile.
Il programmatore deve prima di tutto imparare a risolvere problemi. Per i dettagli, se necessario, ci sarà sempre tempo. ;)
Yuno gasai
21-01-2016, 16:43
Eccomi qua, scusate il ritardo nella risposta ma ho avuto da fare :asd: Comunque ho letto le varie risposte, c'è chi dice di iniziare con il C, altri con il python ecc... Informandomi un pò in giro ho visto che il python viene addirittura insegnato alle elementari :asd: In inglese ci sono svariati libri per bambini, in italiano ho trovato questo
http://linuxdidattica.org/polito/manuale-python-V2.pdf
Fino alla 2a settimana di febbraio temo di non avere tempo per cominciare, in sti giorni comunque valuto bene cosa voglio fare e poi decido su quale partire. Anche perchè ho visto che su internet la community di python è assai inferiore a quella del C o C++, basta vedere nelle varie sezioni di programmazione sui forum di hwupgrade o tom's hardware che di python se ne parla poco.
hot_blaster
21-01-2016, 18:06
Sono finalmente riuscito a recuperare questa immagine
http://i.imgur.com/YoU6M4a.jpg
Che il professore di Java mostra ogni anno e motiva le scelte dell'ateneo sull'insegnare C e Java come linguaggi di base.
cdimauro
21-01-2016, 20:52
Eccomi qua, scusate il ritardo nella risposta ma ho avuto da fare :asd: Comunque ho letto le varie risposte, c'è chi dice di iniziare con il C, altri con il python ecc... Informandomi un pò in giro ho visto che il python viene addirittura insegnato alle elementari :asd: In inglese ci sono svariati libri per bambini, in italiano ho trovato questo
http://linuxdidattica.org/polito/manuale-python-V2.pdf
Sembra persino più semplice del libro che ho in firma. Firma aggiornata. :D
Fino alla 2a settimana di febbraio temo di non avere tempo per cominciare, in sti giorni comunque valuto bene cosa voglio fare e poi decido su quale partire. Anche perchè ho visto che su internet la community di python è assai inferiore a quella del C o C++, basta vedere nelle varie sezioni di programmazione sui forum di hwupgrade o tom's hardware che di python se ne parla poco.
E' chiaro che il C, essendo più diffuso, abbia più siti di Python. Ciò non toglie che troveresti ugualmente un buon supporto della comunità, che è particolarmente attiva. :cool:
Arrivo tardi, ma vorrei dire anch'io la mia.
Fermo restando il fatto che adoro il C, per imparare le basi della programmazione è decisamente meglio il Python, che, comunque, io uso anche per "testare" un algoritmo, visto anche che è molto simile agli "pseudo-linguaggi" che trovi su alcuni manuali, tipo il librone su cui ho studiato io.
Nel C bisogna tener conto di tante magagne implementative (che nulla hanno a che vedere con la pura risoluzione del problema), e, soprattutto, è necessario prestare attenzione (ma sul serio) se si inizia a lavorare con i puntatori (quindi, in pratica, quando i programmi diventano più complessi di un "Hello world").
Il problema di quel linguaggio è che ti permette di scrivere cose aberranti (potresti anche arrivare a non capire un programma che hai scritto tu stesso, se non stai attento a come scrivi), oltre di far danni già solo se non inserisci il carattere terminatore in una stringa. Dunque, se sei già a tuo agio con algoritmi, strutture dati, e cose così, puoi anche sbattere la testa con il C (che è molto "semplice", quindi è TUTTO nelle mani del programmatore), altrimenti meglio puntare su Python, come ho già detto.
Ricordo ancora il sangue versato per implementare gli algoritmi che gestiscono RB-alberi.
Yuno gasai
27-01-2016, 19:39
Infine dopo aver valutato bene e giocato un pò con python ho visto che è un pò più semplice di C ma questa è solo apparenza... Il fatto di avere troppe libertà sintattiche fa si che il linguaggio di python mi risulti piu' ostico del C stesso :asd: So che è un controsenso ma preferisco regole piu' rigide che il C ha. Poi mi mancano gli incrementori ++ e -- che in python non ci sono, l'istruzione switch e altre cose. Quindi in definitiva continuo con il C. :bimbo:
cdimauro
27-01-2016, 20:53
De gustibus, ma proprio Python non ha libertà sintattiche. Tutt'altro:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Yuno gasai
28-01-2016, 15:37
De gustibus, ma proprio Python non ha libertà sintattiche. Tutt'altro:
Si quello è vero. In effetti non ho letto bene :asd: Comunque il python continuerò a seguirlo, per chi vuole su questo sito
https://www.codecademy.com/learn
E' possibile imparare il python (e altri linguaggi come java, ruby ecc...) in modo interattivo :sisi: E' molto utile, e ha anche una community:sofico:
Si quello è vero. In effetti non ho letto bene :asd: Comunque il python continuerò a seguirlo, per chi vuole su questo sito
https://www.codecademy.com/learn
E' possibile imparare il python (e altri linguaggi come java, ruby ecc...) in modo interattivo :sisi: E' molto utile, e ha anche una community:sofico:
imho se vuoi qualcosa che sembri c ma che non sia c (un controsenso :D :D ) valuta anche c# hai un ottimo ide gratis enormi potenzialità del framework, una sintassi c like e un ottimo builder di interfacce che ti permette di creare qualche programmino di prova senza sbattersi troppo (poi io adoro la gestione ad eventi di .net )
cdimauro
28-01-2016, 17:29
E hai pure i puntatori... :stordita:
E hai pure i puntatori... :stordita:
Ma sono "Smart Pointer". :O
Vuoi mettere la bellezza di decine di asterischi sparsi? :D
Servono entrambi.
Un qualsiasi programmatore che si definisca tale dovrebbe conoscere sia i dettagli di basso livello che quelli di alto livello.
Dopodiché si può iniziare da dove si vuole in base alla propria curiosità.
L'errore più grave che si può commettere è focalizzarsi su uno dei due aspetti e basta.
Tant'è che potrei raccontarvi di come nella nostra università abbiano sostituito C/C++ a Fondamenti con Jython e come questo sta comportando gravi problemi per i corsi a venire, con il docente e l'esercitatore di Sistemi Operativi che devono anche impartire lezioni di C...
Poi sicuramente c'è una grossa responsabilità da parte di chi insegna Fondamenti nel cercare il più possibile di insegnare appunto i "fondamenti" in maniera corretta (ad esempio il concetto di tipo di dato).
Dopodiché è mia personale opinione che la programmazione, specie all'inizio, è anche e soprattutto disciplina e richiede molta attenzione.
Motivo per cui sono per un approccio "misto", ad esempio ritengo ancora Java un buon linguaggio per insegnare Fondamenti, non tanto per il linguaggio in se, quanto perché è un linguaggio fortemente tipato e comunque non si perde troppo nei dettagli di gestione della memoria che all'inizio può essere tediosa.
Servono entrambi.
Un qualsiasi programmatore che si definisca tale dovrebbe conoscere sia i dettagli di basso livello che quelli di alto livello.
Dopodiché si può iniziare da dove si vuole in base alla propria curiosità.
L'errore più grave che si può commettere è focalizzarsi su uno dei due aspetti e basta.
Tant'è che potrei raccontarvi di come nella nostra università abbiano sostituito C/C++ a Fondamenti con Jython e come questo sta comportando gravi problemi per i corsi a venire, con il docente e l'esercitatore di Sistemi Operativi che devono anche impartire lezioni di C...
Poi sicuramente c'è una grossa responsabilità da parte di chi insegna Fondamenti nel cercare il più possibile di insegnare appunto i "fondamenti" in maniera corretta (ad esempio il concetto di tipo di dato).
Dopodiché è mia personale opinione che la programmazione, specie all'inizio, è anche e soprattutto disciplina e richiede molta attenzione.
Motivo per cui sono per un approccio "misto", ad esempio ritengo ancora Java un buon linguaggio per insegnare Fondamenti, non tanto per il linguaggio in se, quanto perché è un linguaggio fortemente tipato e comunque non si perde troppo nei dettagli di gestione della memoria che all'inizio può essere tediosa.
Che servano sono d'accordo con te, così come serve insegnare bene tipi, strutture dati, algoritmi (in linea teorica), gestione delle risorse, ecc ecc. Un buon programmatore DEVE essere in grado di gestire l'hardware sottostante.
Sul fatto, però, che il C vada bene come PRIMO linguaggio rimango scettico. E te lo dice uno che ha iniziato con quello; però ricordo bene quando ci spiegarono gli algoritmi di ordinamento, o quelli riguardanti gli alberi, il "sudore" necessario per passare dallo pseudo-linguaggio usato nel nostro libro, ad un qualcosa di utilizzabile. Certo, oggi non ho più problemi con i puntatori, e mi "piacciono" pure, ma agli inizi...
E il mio secondo linguaggio, all'Università, è stato Assembly, x86. Per poi fare un semestre pure su quello dei microcontrollori della Atmel, quindi di cose a basso livello ne ho viste. Secondo me, però, il Python è molto meglio per iniziare, proprio perché, secondo me, all'inizio non bisogna concentrarsi sullo scrivere codice, ma sull'imparare a programmare, cosa ben diversa.
Comunque, nelle Università c'è una situazione un po' particolare, e lo sappiamo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.