Progetto collaborativo per aspiranti programmatori
Sono ormai parecchi anni che frequento e modero forum di programmazione. Negli anni ho visto una miriade di esercizi dati nei vari corsi universitari. Molti di questi esercizi sono molto lontani dalla realtà del mondo del lavoro e in alcuni casi tendono ad insegnare cattive abitudini. Il principale problema è che viene data troppa attenzione all'implementazione e poca al problema da risolvere. Si insegna ad usare l'ereditarietà, ad esempio, chiedendo allo studente di creare una gerarchia ben definita. Ma non viene effettivamente spiegato quando è bene usare l'ereditarietà e quando altre soluzioni siano preferibili. Viene spesso fornito un metodo per risolvere un particolare problema senza offrire una panoramica delle alternative (spesso migliori da molti punti di vista). Si valutano cose soggettive come lo stile (che viene invece spesso insegnato come parametro oggettivo) ma vengono ignorati altri parametri ben più importanti in ambiente lavorativo. Non viene insegnato a cercare errori nel codice, ad usare il debugger, nonostante sia una delle cose più importanti quando si lavora. Quando si programma professionalmente si passa probabilmente lo stesso a fare il debugging che a scrivere effettivamente il codice. Viene raramente insegnato a lavorare in gruppo, ad usare strumenti come git o mercurial, a gestire progetti più grossi di un singolo file.
È difficile trovare dei singoli esercizi che spiegano tutte queste abilità. Vorrei quindi proporre di dare vita ad uno o più progetti di collaborazione all'interno del forum. L'obiettivo è principalmente quello di imparare a lavorare in un team e ad usare strumenti più avanzati, ma questo non significa che non si possa puntare a creare qualcosa di utile
. Il mio ruolo sarebbe tendenzialmente quello di supervisore/assistente/insegnante. Sarei insomma qui per aiutare e dare suggerimenti/critiche.
Se siete interessati rispondete in questa discussione dicendo i linguaggi che conoscete e vorreste usare, insieme a qualche suggerimento su quale dovrà essere l'obiettivo del progetto. Potete ovviamente anche rispondere dando i vostri commenti o le vostre critiche o suggerimenti.
È difficile trovare dei singoli esercizi che spiegano tutte queste abilità. Vorrei quindi proporre di dare vita ad uno o più progetti di collaborazione all'interno del forum. L'obiettivo è principalmente quello di imparare a lavorare in un team e ad usare strumenti più avanzati, ma questo non significa che non si possa puntare a creare qualcosa di utile

Se siete interessati rispondete in questa discussione dicendo i linguaggi che conoscete e vorreste usare, insieme a qualche suggerimento su quale dovrà essere l'obiettivo del progetto. Potete ovviamente anche rispondere dando i vostri commenti o le vostre critiche o suggerimenti.
Risposte
Ho letto la discussione e la trovo molto interessante, così come le idee che vi sono presentate.
Io mi occupo di coordinare i lavori su FidoCadJ, un programma di disegno open source che è utilizzato anche qui (l'avrete visto nella sezione ingegneria se bazzicate da quelle parti). E' quello che gira sul server di Matematicamente e che permette di fare cose del genere:
[fcd="Esempio FidoCadJ"][FIDOCAD]
FJC A 0.35
LI 15 90 151 90 0
FCJ 2 0 3 1 0 1
TY 143 93 5 4 0 0 0 Helvetica Vd
TY 20 100 5 4 0 0 0 Helvetica
LI 85 95 85 5 0
FCJ 2 0 3 1 0 0
LI 20 15 153 15 0
FCJ 0 0 3 2 1 1
TY 100 5 5 4 0 0 0 Helvetica Ip
TY 25 25 5 4 0 0 0 Helvetica
LI 81 52 89 52 0
TY 68 94 4 3 0 0 0 Helvetica -2Ut
TY 94 94 4 3 0 0 0 Helvetica 2Ut
TY 107 94 4 3 0 0 0 Helvetica 4Ut
TY 50 94 4 3 0 0 0 Helvetica -4Ut
SA 135 20 1
SA 130 20 1
LI 125 20 140 20 1
LI 72 90 98 15 1
FCJ 0 0 3 2 3 0
LI 32 85 27 85 1
LI 58 90 21 90 1
BE 60 90 85 90 85 15 110 15 1
LI 110 15 148 15 1
LI 22 85 27 82 1
LI 17 85 22 85 1
SA 30 20 2
SA 25 20 2
LI 133 84 138 84 2
BE 110 90 85 90 85 15 60 15 2
LI 138 84 143 81 2
LI 60 15 22 15 2
LI 109 90 145 90 2
LI 20 20 35 20 2
LI 98 90 72 15 2
FCJ 0 0 3 2 3 0
LI 148 84 143 84 2
LI 111 9 111 94 13
LI 98 9 98 94 13
LI 54 9 54 94 13
LI 72 8 72 93 13[/fcd]
La mia esperienza mi ha insegnato che praticamente tutti i progetti open source basati su lavoro collaborativo sono in mancanza cronica di sviluppatori, quindi una possibilità è di scegliere qualcosa che vi piace e lavorarci sopra. Potrebbe essere FidoCadJ (mi scuserete un po' di bieca e becera pubblicità), ma ci sono moltissime altre alternative e soprattutto cercate qualcosa che vi piaccia e che utilizzerete voi stessi.
Invece, se volete montare un nuovo progetto da zero (o anche più d'uno), l'ideale sarebbe incominciare con una visione, ovvero un'idea chiara di quello che vorrete ottenere. Poi c'è il lavoro sul codice, ma in un vero progetto che perdura negli anni, il codice è solo una piccola parte del lavoro. Il resto è la documentazione, spulciare i bug report, far conoscere il proprio lavoro, mettere d'accordo un gruppo sviluppatori che hanno una visione non sempre armonica, ascoltare con pazienza gli utenti che non sono sempre molto coerenti, trovare le forze per continuare a credere nel progetto...
Comunque, occhio a scegliere idee troppo ambiziose, le aspettative attuali di un utente rispetto ad un programma possono essere piuttosto alte (ho visto quello che succede per un semplicissimo editor grafico) ed i dettagli richiedono migliaia di ore di lavoro.
Ritornando sui possibili progetti, sono capitato qui grazie ad una risposta di stan:
viewtopic.php?f=38&t=132268
Si parlava di un reader/editor FidoCadJ scritto in Javascript, magari qualcuno potrebbe essere interessato a fare qualcosa.
Io mi occupo di coordinare i lavori su FidoCadJ, un programma di disegno open source che è utilizzato anche qui (l'avrete visto nella sezione ingegneria se bazzicate da quelle parti). E' quello che gira sul server di Matematicamente e che permette di fare cose del genere:
[fcd="Esempio FidoCadJ"][FIDOCAD]
FJC A 0.35
LI 15 90 151 90 0
FCJ 2 0 3 1 0 1
TY 143 93 5 4 0 0 0 Helvetica Vd
TY 20 100 5 4 0 0 0 Helvetica
LI 85 95 85 5 0
FCJ 2 0 3 1 0 0
LI 20 15 153 15 0
FCJ 0 0 3 2 1 1
TY 100 5 5 4 0 0 0 Helvetica Ip
TY 25 25 5 4 0 0 0 Helvetica
LI 81 52 89 52 0
TY 68 94 4 3 0 0 0 Helvetica -2Ut
TY 94 94 4 3 0 0 0 Helvetica 2Ut
TY 107 94 4 3 0 0 0 Helvetica 4Ut
TY 50 94 4 3 0 0 0 Helvetica -4Ut
SA 135 20 1
SA 130 20 1
LI 125 20 140 20 1
LI 72 90 98 15 1
FCJ 0 0 3 2 3 0
LI 32 85 27 85 1
LI 58 90 21 90 1
BE 60 90 85 90 85 15 110 15 1
LI 110 15 148 15 1
LI 22 85 27 82 1
LI 17 85 22 85 1
SA 30 20 2
SA 25 20 2
LI 133 84 138 84 2
BE 110 90 85 90 85 15 60 15 2
LI 138 84 143 81 2
LI 60 15 22 15 2
LI 109 90 145 90 2
LI 20 20 35 20 2
LI 98 90 72 15 2
FCJ 0 0 3 2 3 0
LI 148 84 143 84 2
LI 111 9 111 94 13
LI 98 9 98 94 13
LI 54 9 54 94 13
LI 72 8 72 93 13[/fcd]
La mia esperienza mi ha insegnato che praticamente tutti i progetti open source basati su lavoro collaborativo sono in mancanza cronica di sviluppatori, quindi una possibilità è di scegliere qualcosa che vi piace e lavorarci sopra. Potrebbe essere FidoCadJ (mi scuserete un po' di bieca e becera pubblicità), ma ci sono moltissime altre alternative e soprattutto cercate qualcosa che vi piaccia e che utilizzerete voi stessi.
Invece, se volete montare un nuovo progetto da zero (o anche più d'uno), l'ideale sarebbe incominciare con una visione, ovvero un'idea chiara di quello che vorrete ottenere. Poi c'è il lavoro sul codice, ma in un vero progetto che perdura negli anni, il codice è solo una piccola parte del lavoro. Il resto è la documentazione, spulciare i bug report, far conoscere il proprio lavoro, mettere d'accordo un gruppo sviluppatori che hanno una visione non sempre armonica, ascoltare con pazienza gli utenti che non sono sempre molto coerenti, trovare le forze per continuare a credere nel progetto...
Comunque, occhio a scegliere idee troppo ambiziose, le aspettative attuali di un utente rispetto ad un programma possono essere piuttosto alte (ho visto quello che succede per un semplicissimo editor grafico) ed i dettagli richiedono migliaia di ore di lavoro.
Ritornando sui possibili progetti, sono capitato qui grazie ad una risposta di stan:
viewtopic.php?f=38&t=132268
Si parlava di un reader/editor FidoCadJ scritto in Javascript, magari qualcuno potrebbe essere interessato a fare qualcosa.
Ho visto solo adesso questo messaggio e ti faccio subito i complimenti per questa iniziativa. Volevo aggiungere qualche commento sotto...
Stai mettendo il dito nella solita piaga, ovvero che la scuola non insegna a lavorare.
E' un problema di tutte le scuole e di tutte le materie.
Secondo me ci sono anche dei limiti intrinseci nella scuola, ovvero, gli esercizi servono sopratutto per verificare le conoscenze di base e cominciare a mettere in pratica le conoscenze apprese.
Per forza di cose gli esercizi devono essere brevi, semplici, ripetitivi. In sostanza sono inutili a qualsiasi scopo pratico.
Anche qui non posso che farti ragione.
Un buon programmatore potrebbe anche essere uno che non scrive mai codice, ma che fa bene come scrivere la documentazione, requirements, specifiche, ecc. Uno che progetta l'architettura di un software o che sa come interfacciarsi col cliente.
Di nuovo, secondo me è giusto quello che dici, ma neanche è una colpa della scuola.
Cercare di sviluppare un progetto in team all'interno di un corso universitario di 4 mesi di "basi di dati" ad esempio è pura follia. E tu capisci benissimo il perchè. A questo poi si aggiunge la solita indolenza degli studenti il cui obbiettivo è quello di passare l'esame.
Per quel che riguarda me personalmente, penso di non poter offrire molto supporto. Io lavoro a tempo pieno, porto avanti a tempo parziale il mio corso di laurea triennale in informatica e cerco di avere un minimo di vita privata con la famiglia. Sicuramente seguirò l'evoluzione dell progetto.
Il mio consiglio è di partire con qualcosa di semplice e tranquillo, un progetto di cui si abbia la "vsisibilità" dall'inizio alla fine. Lasciare perdere (purtroppo) progetti ambiziosi come riconoscimento OCR di formule scritte a mano o crittografia perchè c'è la quasi certezza di vedere il progetto abbandonato dopo poco tempo.
Vedo che c'è entusiasmo per le nuovissime tecnologie (software per mobile, app e simili): questo va bene, ma il rischio è che ci sia l'entusiasmo per le nuove mode (l'app da far vedere agli amici, la grafica curata, le icone) e di non imparare nulla del mondo della programmazione. Io terrei insieme un mix di cose "entusiasmanti" ma abbastanza frivole (tipo le "app") e di cose "noiose" ma estremamente utili come la stesura dei requirements.
Dalla mia (poca e scarsa) esperienza di programmazione (soprattutto in ambito microprocessori e automazione industriale) vedo che c'è poca o nessuna attenzione all'architettura di un progetto, che invece andrebbe curata da subito.
Io porrei una grande attenzione a seguire un qualche ciclo di vita del software sullo stile di una certificazione tipo SPICE, di nuovo, senza insistere troppo altrimenti si uccide ogni legittimo entusiasmo.
Metterei subito in chiaro le fasi del progetto, come la stesura dei requirements, delle specifiche, l'archittettura del progetto, la validazione, il testing.
"apatriarca":
Sono ormai parecchi anni che frequento e modero forum di programmazione. Negli anni ho visto una miriade di esercizi dati nei vari corsi universitari. Molti di questi esercizi sono molto lontani dalla realtà del mondo del lavoro e in alcuni casi tendono ad insegnare cattive abitudini. Il principale problema è che viene data troppa attenzione all'implementazione e poca al problema da risolvere.
Stai mettendo il dito nella solita piaga, ovvero che la scuola non insegna a lavorare.
E' un problema di tutte le scuole e di tutte le materie.
Secondo me ci sono anche dei limiti intrinseci nella scuola, ovvero, gli esercizi servono sopratutto per verificare le conoscenze di base e cominciare a mettere in pratica le conoscenze apprese.
Per forza di cose gli esercizi devono essere brevi, semplici, ripetitivi. In sostanza sono inutili a qualsiasi scopo pratico.
Si insegna ad usare l'ereditarietà, ad esempio, chiedendo allo studente di creare una gerarchia ben definita. Ma non viene effettivamente spiegato quando è bene usare l'ereditarietà e quando altre soluzioni siano preferibili. Viene spesso fornito un metodo per risolvere un particolare problema senza offrire una panoramica delle alternative (spesso migliori da molti punti di vista). Si valutano cose soggettive come lo stile (che viene invece spesso insegnato come parametro oggettivo) ma vengono ignorati altri parametri ben più importanti in ambiente lavorativo.
Anche qui non posso che farti ragione.
Un buon programmatore potrebbe anche essere uno che non scrive mai codice, ma che fa bene come scrivere la documentazione, requirements, specifiche, ecc. Uno che progetta l'architettura di un software o che sa come interfacciarsi col cliente.
Non viene insegnato a cercare errori nel codice, ad usare il debugger, nonostante sia una delle cose più importanti quando si lavora. Quando si programma professionalmente si passa probabilmente lo stesso a fare il debugging che a scrivere effettivamente il codice. Viene raramente insegnato a lavorare in gruppo, ad usare strumenti come git o mercurial, a gestire progetti più grossi di un singolo file.
Di nuovo, secondo me è giusto quello che dici, ma neanche è una colpa della scuola.
Cercare di sviluppare un progetto in team all'interno di un corso universitario di 4 mesi di "basi di dati" ad esempio è pura follia. E tu capisci benissimo il perchè. A questo poi si aggiunge la solita indolenza degli studenti il cui obbiettivo è quello di passare l'esame.
È difficile trovare dei singoli esercizi che spiegano tutte queste abilità. Vorrei quindi proporre di dare vita ad uno o più progetti di collaborazione all'interno del forum. L'obiettivo è principalmente quello di imparare a lavorare in un team e ad usare strumenti più avanzati, ma questo non significa che non si possa puntare a creare qualcosa di utile. Il mio ruolo sarebbe tendenzialmente quello di supervisore/assistente/insegnante. Sarei insomma qui per aiutare e dare suggerimenti/critiche.
Se siete interessati rispondete in questa discussione dicendo i linguaggi che conoscete e vorreste usare, insieme a qualche suggerimento su quale dovrà essere l'obiettivo del progetto. Potete ovviamente anche rispondere dando i vostri commenti o le vostre critiche o suggerimenti.
Per quel che riguarda me personalmente, penso di non poter offrire molto supporto. Io lavoro a tempo pieno, porto avanti a tempo parziale il mio corso di laurea triennale in informatica e cerco di avere un minimo di vita privata con la famiglia. Sicuramente seguirò l'evoluzione dell progetto.
Il mio consiglio è di partire con qualcosa di semplice e tranquillo, un progetto di cui si abbia la "vsisibilità" dall'inizio alla fine. Lasciare perdere (purtroppo) progetti ambiziosi come riconoscimento OCR di formule scritte a mano o crittografia perchè c'è la quasi certezza di vedere il progetto abbandonato dopo poco tempo.
Vedo che c'è entusiasmo per le nuovissime tecnologie (software per mobile, app e simili): questo va bene, ma il rischio è che ci sia l'entusiasmo per le nuove mode (l'app da far vedere agli amici, la grafica curata, le icone) e di non imparare nulla del mondo della programmazione. Io terrei insieme un mix di cose "entusiasmanti" ma abbastanza frivole (tipo le "app") e di cose "noiose" ma estremamente utili come la stesura dei requirements.
Dalla mia (poca e scarsa) esperienza di programmazione (soprattutto in ambito microprocessori e automazione industriale) vedo che c'è poca o nessuna attenzione all'architettura di un progetto, che invece andrebbe curata da subito.
Io porrei una grande attenzione a seguire un qualche ciclo di vita del software sullo stile di una certificazione tipo SPICE, di nuovo, senza insistere troppo altrimenti si uccide ogni legittimo entusiasmo.
Metterei subito in chiaro le fasi del progetto, come la stesura dei requirements, delle specifiche, l'archittettura del progetto, la validazione, il testing.
"Quinzio":
Stai mettendo il dito nella solita piaga, ovvero che la scuola non insegna a lavorare.
E' un problema di tutte le scuole e di tutte le materie.
Secondo me ci sono anche dei limiti intrinseci nella scuola, ovvero, gli esercizi servono sopratutto per verificare le conoscenze di base e cominciare a mettere in pratica le conoscenze apprese.
Per forza di cose gli esercizi devono essere brevi, semplici, ripetitivi. In sostanza sono inutili a qualsiasi scopo pratico.
Io sinceramente non penso che l'università debba insegnare a lavorare. Però dovrebbe comunque fornire vere conoscenze trasferibili. In particolare trovo i corsi di programmazione di qualità media molto bassa. Trovo che gli esercizi siano comunque scelti male anche allo scopo di fornire e verificare le conoscenze di base oppure, in qualche modo, non concordo con quello che loro considerano conoscenza di base. In parte forse è legato al fatto che molti professori non si occupano di programmazione (comprensibilmente) e i loro insegnamenti sono ‘antiquati’ perché spesso basati su teorie superate.
Al di là dell'incomprensibile utilizzo di Dev-C++, dove esistono alternative open source migliori, non comprendo il continuare ad ignorare la memoria e il modo in cui funziona quando uno stesso algoritmo può diventare anche 50 volte più veloce semplicemente cambiando il modo o l'ordine in cui i dati sono messi in memoria. E non direi che è un concetto prettamente "pratico".
Un esempio che compare spesso su questo forum è definire una matrice dinamica in C/C++ come
double **matrice; // creazione array di puntatori che conterrà le righe for(int i = 0; i != num_row; ++i) { // creazione righe }L'unico vantaggio che conosco di questo modo di scrivere è che puoi usare la scrittura
matrice[i][j]per accedere all'elemento corretto invece di scritture un po' più complicate[nota]In C++ con una struttura o classe e un overload di operatore rendi questo vantaggio pressoché inesistente seppur al costo di qualche riga di codice in più.[/nota]. A dire il vero non vedo puoi così essenziale neanche insegnare a gestire della memoria dinamica creata da altra memoria dinamica. Specialmente nel momento in cui si ignora completamente il fatto che per via del pre-feching l'utilizzo di memoria contigua e allineata è generalmente preferibile e che quindi spesso non vi siano reali vantaggi a strutture dati eccessivamente complicate (né per il programmatore né per l'utente che utilizza materialmente la libreria).
Manca inoltre un qualsiasi riferimento alla programmazione parallela e concorrente. E non direi che questi aspetti siano da considerarsi né secondari né prettamente professionali.
E questo senza entrare nelle competenze più prettamente professionali citati da apatriarca.
Quinzio. Mi rendo perfettamente conto che le mie critiche non siano nuove, né limitate all'informatica. Mi rendo anche conto delle difficoltà di insegnare qualcosa di così vasto, mutevole e complicato come la programmazione in corsi sempre più corti. Credo tuttavia che la qualità dell'insegnamento della materia sia incredibilmente basso, con dispense ed esercizi che insegnano spesso nozioni sbagliate o imprecise o inutili o antiquate. I corsi che si trovano gratuitamente online sono spesso di maggiore qualità. Io penso che si possa e si DEBBA fare di meglio. Approfitterei di questo post per discutere come dovrebbe essere affrontato, a mio parere, un primo corso di informatica.
Il lavoro del programmatore è spesso legato all'operazione di debugging. Saper trovare errori nel codice è una delle skill principali che un programmatore deve avere. L'insegnamento del debugger permette inoltre di poter effettivamente analizzare meglio i vari costrutti del linguaggio osservandone l'esecuzione passo-passo. Sfortunatamente questa attività viene spesso completamente ignorata, anche nei corsi più avanzati. Insegnerei quindi l'utilizzo del debugger fin dalla prima lezione in laboratorio (in effetti sarebbe l'ideale se TUTTE le lezioni fossero con un computer davanti - ma qui ci si scontra con altre problematiche). Dividerei poi gli esercizi in due gruppi: un gruppo di esercizi di programmazione più tradizionali e un gruppo di esercizi in cui si devono trovare gli errori in un codice usando il debugger. Valuterei anche l'insegnamento di lint e valgrind (o programmi equivalenti a seconda del linguaggio).
La difficoltà di un primo corso di informatica risiede poi nella necessità di insegnare un linguaggio, attività che alla fine finisce per prendere in pratica tutto il corso. Da questo punto di vista, credo possa essere conveniente scegliere un linguaggio in generale più semplice del C o C++. Un diverso linguaggio permetterebbe di soffermarsi maggiormente sulla programmazione vera e propria e un po' meno sul linguaggio usato. Permetterebbe di usare le varie strutture dati invece di scrivere la propria lista. Permetterebbe di usare le stringhe senza doversi preoccupare della differenza tra un array e un puntatore e all'allocazione di memoria. Permetterebbe di dare esercizi più avanzati e meno "scolastici" (con la possibilità di aggiungere funzionalità aggiuntive opzionali).
Per un primo corso non credo sia possibile fare progetti di gruppo, ma ho comunque avuto modo di fare diversi progetti di gruppo (non di informatica) nella mia carriera universitaria e devo dire di aver in generale apprezzato queste esperienze. Sono convinto che un progetto di gruppo sia certamente possibile in corsi più avanzati.
Il lavoro del programmatore è spesso legato all'operazione di debugging. Saper trovare errori nel codice è una delle skill principali che un programmatore deve avere. L'insegnamento del debugger permette inoltre di poter effettivamente analizzare meglio i vari costrutti del linguaggio osservandone l'esecuzione passo-passo. Sfortunatamente questa attività viene spesso completamente ignorata, anche nei corsi più avanzati. Insegnerei quindi l'utilizzo del debugger fin dalla prima lezione in laboratorio (in effetti sarebbe l'ideale se TUTTE le lezioni fossero con un computer davanti - ma qui ci si scontra con altre problematiche). Dividerei poi gli esercizi in due gruppi: un gruppo di esercizi di programmazione più tradizionali e un gruppo di esercizi in cui si devono trovare gli errori in un codice usando il debugger. Valuterei anche l'insegnamento di lint e valgrind (o programmi equivalenti a seconda del linguaggio).
La difficoltà di un primo corso di informatica risiede poi nella necessità di insegnare un linguaggio, attività che alla fine finisce per prendere in pratica tutto il corso. Da questo punto di vista, credo possa essere conveniente scegliere un linguaggio in generale più semplice del C o C++. Un diverso linguaggio permetterebbe di soffermarsi maggiormente sulla programmazione vera e propria e un po' meno sul linguaggio usato. Permetterebbe di usare le varie strutture dati invece di scrivere la propria lista. Permetterebbe di usare le stringhe senza doversi preoccupare della differenza tra un array e un puntatore e all'allocazione di memoria. Permetterebbe di dare esercizi più avanzati e meno "scolastici" (con la possibilità di aggiungere funzionalità aggiuntive opzionali).
Per un primo corso non credo sia possibile fare progetti di gruppo, ma ho comunque avuto modo di fare diversi progetti di gruppo (non di informatica) nella mia carriera universitaria e devo dire di aver in generale apprezzato queste esperienze. Sono convinto che un progetto di gruppo sia certamente possibile in corsi più avanzati.
Secondo me visto che lo scopo principale è capire come si lavora in gruppo e qual'è il ciclo completo di gestazione di un software funzionante bisogna partire da questi presupposti:
- l'idea da sviluppare deve essere molto semplice, anche la creazione di un software semplice contiene in se la maggiorparte di requisiti orgnizzativi di un software di grandezza maggiore, anzi direi che è anche meglio per capire i procedimenti a cui inevitabilmente ci si scontrerà prima
- Il linguaggio da utilizzare deve essere giustamente quello dove più persone dei partecipanti si trovano al loro agio ma, visto che lo scopo non è quello di insegnare un linguaggio ma di come si lavora, secondo me sarebbe da dare priorità a linguaggi semplici (come il python) e meglio se interpretati (semplifica lo sviluppo).
- secondo me un progetto che invece di essere pensato come avente una conclusione sia pensato come una sorta di programma modulare è più azzeccato perché consente di avere più fasi conclusive e intermedie perfettamente funzionanti, consente la divisione del lavoro in modo più logico (a e b sviluppano questo modulo, c e d quell'altro...)
Per i linguaggi, per quanto io non sia troppo competente in questo, mi viene da consigliare il javascript per le sue caratteristiche di portabilità.
- l'idea da sviluppare deve essere molto semplice, anche la creazione di un software semplice contiene in se la maggiorparte di requisiti orgnizzativi di un software di grandezza maggiore, anzi direi che è anche meglio per capire i procedimenti a cui inevitabilmente ci si scontrerà prima
- Il linguaggio da utilizzare deve essere giustamente quello dove più persone dei partecipanti si trovano al loro agio ma, visto che lo scopo non è quello di insegnare un linguaggio ma di come si lavora, secondo me sarebbe da dare priorità a linguaggi semplici (come il python) e meglio se interpretati (semplifica lo sviluppo).
- secondo me un progetto che invece di essere pensato come avente una conclusione sia pensato come una sorta di programma modulare è più azzeccato perché consente di avere più fasi conclusive e intermedie perfettamente funzionanti, consente la divisione del lavoro in modo più logico (a e b sviluppano questo modulo, c e d quell'altro...)
Per i linguaggi, per quanto io non sia troppo competente in questo, mi viene da consigliare il javascript per le sue caratteristiche di portabilità.
Seguo la discussione
"apatriarca":
Viene raramente insegnato a lavorare in gruppo, ad usare strumenti come git o mercurial, a gestire progetti più grossi di un singolo file.
Non è quello che si dovrebbe fare in un corso di ingegneria del software? Ad esempio http://www.math.unipd.it/~tullio/IS-1/2013/Progetto/Capitolati.html
Comunque mi sembra molto interessante come iniziativa!

Ragazzi, io comincerei a stendere un minimo di studi di fattibilità ...
io sono piuttosto interessato a contribuire come sviluppatore. Cercasi idee a questo punto.
Perche' non contribuire ad un progetto gia' esistente?
Ad esempio:
> http://www.gnu.org/software/hurd/commun ... grind.html
Perche' non contribuire ad un progetto gia' esistente?
Ad esempio:
> http://www.gnu.org/software/hurd/commun ... grind.html
Ciao, io sono al secondo anno di ingegneria e concordo in pieno con ciò che hai detto, mi trovo esattamente nella situazione da te descritta, vorrei quindi entrare nel progetto per potermi migliorare, visto che il mio sogno è programmare videogiochi! I linguaggi che mi sono stati insegnati fino ad ora sono il python, C++, C, magari il progetto potrebbe riguardare proprio lo sviluppo di videogiochi
.

"Angelmax":
(..) il mio sogno è programmare videogiochi!
Non so se lo sai ma, a Milano, ci dovrebbe essere una laurea specialistica per realizzare il tuo sogno

http://job24.ilsole24ore.com/news/Articoli/2014/06/Statalevideog-apre-26062014.php
Ragazzi ma non si è evoluta la cosa poi?
Ad esempio realizzare un'APP piccolina? Direi anche in tema col Nostro Forum
quindi in totale? come si e' risolta la cosa?
Secondo me, a più di un anno dall'ultimo messaggio, si è risolta in un "nulla di fatto".