Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 45
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    Perchè insegnare il C/C++ all' università

    Nelle facoltà di ingengeria informatica e informatica veco che in molti corsi insegnano da zero linguaggi come C o C++.
    Mi chiedo perchè ancora puntare su linguaggi così vecchi.
    Il C++ forse è una buona opzione ma sento spesso dire da chi programma che non è adatto come primo linguaggio da insegnare perchè ha una sintassi pesante.
    Ma io mi chiedo perchè si punti ancora sul C, perchè non partire da Python ad esempio?
    Si aspetta sempre che una cosa stagiona, proprio come quei calciatori che un anno ti segnano 30 goal in una stagione e non vengono convocati in nazionale, poi quando hanno già la fama collaudata da un pezzo, invecchiano e vengono convocati in nazionale che oramai sono calati a 15 goal all' anno
    Ma perchè aspettare che una cosa è stra-collaudata? L' informatica punta soprattutto sull' innovazione, sul sapere le cose che sul momento sono utili.
    Voi che ne pensate, dite che è una sceltà basata sul fatto che chi conosce il C o il C++ imparerà meglio altri linguaggi, oppure è un' eccessiva prudenza? Quasi come a dire "non vogliamo rischiare" ? Oppure qualcos' altro?
    Io questo proprio non lo capisco

  2. #2
    Non so come funzioni all'università adesso. Però fosse per me insegnerei senza dubbio il C++ perchè è ancora oggi un linguaggio vivo. Ed è "propedeutico".

    Ma senza ogni ombra di dubbio, insegnerei anche altri linguaggi e altri ambienti più nuovi.
    Non so se lo si insegna, ma corsi di programmazione per App Android, iOS e Facebook dovrebbero essere come minimo opzionali.
    «Nella mia carriera ho sbagliato più di novemila tiri. Ho perso quasi trecento partite. Ventisei volte i miei compagni mi hanno affidato il tiro decisivo e l'ho sbagliato. Nella vita ho fallito molte volte. Ed è per questo che alla fine ho vinto tutto» - Michael Jordan

    «Prima ti ignorano, poi ti deridono, poi ti combattono. Poi vinci.» - Gandhi

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230

    Re: Perchè insegnare il C/C++ all' università

    Originariamente inviato da ramy89
    ...
    stavo quasi per scrivere una risposta seria, ma ho come la vaga sensazione che tu stia scherzando

  4. #4
    È l'annoso problema del processo di apprendimento bottom-up o top-down.

    Lasciamo da parte le considerazioni di prestazioni, che in buona parte dei problemi sono irrilevanti, e consideriamo il valore propedeutico.

    L'obiettivo è scrivere programmi per risolvere immediatamente problemi, lavorando con concetti astratti, fregandotene di cosa ci sta sotto? Python & co.

    L'obiettivo è lavorare "vicini alla macchina", con lo scopo di mostrare come funziona, come si implementano le strutture dati fondamentali, quali sono i loro punti forti e deboli? C ed eventualmente poi C++ (concordo che imparare C++ come primo linguaggio è demenziale, è troppo complicato e ha troppe astrazioni "leaky").

    Puoi leggerti sul manuale di Python che accodare/rimuovere roba ad una lista è "veloce" mentre aggiungerla/toglierla in mezzo è "lento", che cercare per chiave in un dictionary è "veloce", mentre farlo in una lista di tuple chiave/valore è "lento", ma tendono a restare concetti astratti.
    Dopo che però ti sei dovuto implementare a mano il codice per lo shifting di tutti gli elementi di un vettore, dopo che hai toccato con mano come funziona una lista concatenata, dopo che hai scritto il codice di una hashtable, dopo che hai perso tempo a scovare memory leak e debuggare segfault in una applicazione C e hai visto da vicino cosa sta sotto a un sacco di cose che in Python dai per scontate, hai sicuramente una comprensione molto più profonda dei problemi della programmazione, del perché linguaggi di alto livello funzionano in una certa maniera, ed è più facile che tu sappia scegliere "a colpo" strutture dati/algoritmi/... più adatti alla situazione, proprio perché sai cosa ci sta sotto.

    Esempio cretino che mi è stato raccontato l'altro giorno: una certa routine in cui (tra le altre cose) si esaminavano elementi di un vettore, svuotandolo man mano, risultava estremamente lenta; andando a controllare, si è visto che l'autore del codice, in perfetta buona fede, svuotava l'std::vector levando ad ogni iterazione il primo elemento. Nella sua testa, non pensando a cosa ci fosse sotto, era una cosa perfettamente logica, e l'algoritmo era O(N); chi è andato a controllare, sapendo "cosa sta sotto il cofano", ha visto a colpo che questa stupidaggine faceva passare l'algoritmo dal supposto O(N) a O(N!).

    In ogni caso, ci sono varie scuole di pensiero in proposito, c'è chi ritiene che un approccio di tipo bottom-up rigoroso sia fondamentale, c'è chi pensa che invece sia bene potersi focalizzare fin da subito su concetti più astratti. A mio avviso, come già detto, un approccio bottom-up dà senz'altro una comprensione ben più profonda, ma può essere inutile e anzi fuorviante per chi ha come obiettivo esclusivo risolvere rapidamente dei problemi non troppo complessi. Per questo credo che l'idea che si ha qui a Fisica di insegnare il C++ come strumento per l'analisi dati sia demenziale: troppo complicato, troppo ingessato, troppa roba estranea al problema che ti interessa di cui ti devi occupare senza nessun vantaggio sostanziale a soluzioni più di alto livello (Python & co.). Al contrario, se si parla di una facoltà di informatica, dove il focus è anche sulla comprensione profonda del funzionamento della macchina, secondo me è meglio partire dal C per poi passare a linguaggi di alto livello.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Da me si è programmato in C, come anche in C++ e devo dire che il corso di Algoritmi e Strutture Dati in C++ non lo sostituirei con nulla al mondo. Molto interessante è stato anche il corso di Metodi Avanzati di Programmazione del terzo anno in cui si programmava in Java, tant'è che con la medesima professoressa ho richiesto la tesi (e quindi mi ritrovo di nuovo a programmare in java + mysql).

    Che dire io non la trovo una cosa malvagia programmare in C++ per determinati corsi, è anche vero che sarebbe buono lasciare i corsi base, teorici e introduttivi ai primi due anni e dare una bella svecchiata ai corsi del terzo anno. Ora le persone spesso e volentieri dopo la triennale vanno a lavorare e qualcosa di un pochettino più rivendibile non dispiacerebbe.

    Da me si è affrontato anche la programmazione di applicazioni per smartphone, da noi purtroppo si è visto una vecchia versione di windows mobile, ma in altre università hanno lavorato su Android.

    Io comunque se proprio dovessi dare priorità a qualcosa piuttosto che aggiungere l'ennesimo linguaggio ci butterei su un proseguii di ingegneria del software. Un argomento abbastanza vasto ed importante a cui mi sembra poco dedicarci un solo esame.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da Neptune
    Da me si è programmato in C, come anche in C++ e devo dire che il corso di Algoritmi e Strutture Dati in C++ non lo sostituirei con nulla al mondo. Molto interessante è stato anche il corso di Metodi Avanzati di Programmazione del terzo anno in cui si programmava in Java, tant'è che con la medesima professoressa ho richiesto la tesi (e quindi mi ritrovo di nuovo a programmare in java + mysql).

    Che dire io non la trovo una cosa malvagia programmare in C++ per determinati corsi, è anche vero che sarebbe buono lasciare i corsi base, teorici e introduttivi ai primi due anni e dare una bella svecchiata ai corsi del terzo anno. Ora le persone spesso e volentieri dopo la triennale vanno a lavorare e qualcosa di un pochettino più rivendibile non dispiacerebbe.

    Da me si è affrontato anche la programmazione di applicazioni per smartphone, da noi purtroppo si è visto una vecchia versione di windows mobile, ma in altre università hanno lavorato su Android.

    Io comunque se proprio dovessi dare priorità a qualcosa piuttosto che aggiungere l'ennesimo linguaggio ci butterei su un proseguii di ingegneria del software. Un argomento abbastanza vasto ed importante a cui mi sembra poco dedicarci un solo esame.
    Ma per strutture dati come pile, alberi e compagnia bella, vi facevano creare delle classi o si usavano classi già pronte come quelle di std o boost?
    Perchè il più grande difetto del mio corso di algoritmi è stato che magari uno la pila se la sapeva implementare, però doveva fare mille versioni per ogni tipo di dato contenuto.
    Allora alla fine ne ho fatta una con i puntatori a void, generica;Ma è stato comunque complicato, con i template sarebbe stato facile e uno non avrebbe perso tempo a fare sempre le stesse cose (cioè le mille versioni).
    Non sarebbe stato male se si fosse affrontato in C++, anche non usando classi già pronte è facile implementare una struttura dati generica.
    Col risultato che io insieme a molti, abbiamo virtualmente appeso al chiodo il compilatore,e ci siamo messi a programmare con carta e penna.Col professore che all' esame chiedeva codice C puro e puntualmente dava zero punti a chi faceva un errore non concettuale che un qualsiasi compilatore avrebbe potuto rilevare.E' stato veramente pesante e si è imparato poco
    Avessi dovuto scegliere io come organizzare il corso, l' avrei fatto in python.
    Avrei diviso il corso in una parte teorica e una pratica.
    Un esempio di algoritmo da sapere poteva essere quello dei cammini minimi di Dijkstra usando una libreria come tinytree.
    Un esempio di domanda teorica, chiedere che complessità aveva un algoritmo scritto in pseudocodice.Per me un corso del genere si che sarebbe stato utile.
    Nella parte teorica si può studiare il funzionamento della varie strutture dati, a livello teorico e non di codice.

  7. #7
    per la stessa ragione per cui al liceo si insegna il latino, immagino. Ginnastica per la mente
    Davide
    Povere ostrichette

  8. #8
    io ho fatto 3 anni di superiori a "studiare" il pascal e gli ultimi 2 mesi di 5^ a fare l'access ... che schifo
    però devo dire che, poi quando da autodidatta ho imparato gli altri linguaggi (soprattutto web) non ho avuto molti problemi
    credo che il problema maggiore della programmazione sia il ragionamento
    quindi non so se, in fase di apprendimento generale, serva realmente imparare un linguaggio o la tecnica
    è ovvio che quando si va nello specifico devi imparare anche ad usare il linguaggio..ma hai delle buone basi per poterlo fare

  9. #9
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    non ho fatto l'uni anche se bene o male almeno l'elenco degli esami di un corso di informatica grosso modo lo conosco. Il C l'ho utilizzato per 3 anni all'itis in un programma didattico che sostanzialmente è quello che all'uni si fa in algoritmi e strutture dati. Sviluppando in .NET oggi mi rendo conto che sebbene molti aspetti relativi alla programmazione in C sono "nascosti" dagli ambienti managed messi a disposizione dai vari framework, l'esperienza passata mi è ancora utilissima per comprendere cosa e come funzionano le cose dietro le quinte e questo in molte situazioni puo fare la differenza.

    A scopo didattico e per "farsi le ossa" credo che iniziare con il C ne valga la pena.
    Ovvio che poi ogni corso dovrebbe usare il linguaggio giusto: avere a che fare con Ingegneria del software, e passare un ora a scovare dove hai sbagliato a dichiarare un puntatore la trovo solo una perdita di tempo, in quei casi Java (o una controparte come .NET ecc) sarebbe molto meglio.

    Per quanto riguarda python io non lo prenderei nemmeno in considerazione in ambito didattico (anche se putroppo sta cosa l'ho letta piu di una volta). Python nasce come linguaggio di scripting per situazioni in cui serve velocità e praticità nel risolvere programmaticamente problemi su larga scala. In realtà lavorative vaste per DBA e sistemisti python e co. sono diventati uno strumento essenziale. Un informatico con un backgraund da sviluppatore puo benissimo utilizzare python dopo aver letto un manualetto, ma pensare di insegnare la programmazione con python lo trovo sbagliato (imho)

  10. #10
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549
    la mia azienda cerca programmatori Cobol

    e come te, io 6 mesi fa ho aperto un thread su come si potesse ancora prorammare in Cobol nel 2010

    eppure
    sono rischiesti da banche, assicurazioni..
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.