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
Ciao apatriarca, ottima idea che hai avuto.
Io e' da un po che penso di lanciarmi nello sviluppo Android e cercavo un incipit con magari altro persone.
Cosa ne pensi?
Ovviamente io lavorerei principalmente la sera e i we, essendo il mio lavoro non proprio ottimale per programmare di giorno (Service Engineer in produzione non permette molto dev durante le businness hours).
Cmq do la mia disponibilita' in ogni caso.
Io e' da un po che penso di lanciarmi nello sviluppo Android e cercavo un incipit con magari altro persone.
Cosa ne pensi?
Ovviamente io lavorerei principalmente la sera e i we, essendo il mio lavoro non proprio ottimale per programmare di giorno (Service Engineer in produzione non permette molto dev durante le businness hours).
Cmq do la mia disponibilita' in ogni caso.
Pieno appoggio all'iniziativa anche da parte mia. 
Magari si potrebbe organizzare qualcosa sul tipo del The Odin Project, ma sulla programmazione in generale e in italiano?

Magari si potrebbe organizzare qualcosa sul tipo del The Odin Project, ma sulla programmazione in generale e in italiano?
Sito interessante, come il suggerimento.
Anni fa c'era un progetto simile su un altro forum (non penso sia un problema citarlo qui, anche perché quel progetto ormai è bello che morto e sepolto).
È un'idea molto interessante, io parteciperei volentieri.
Sicuramente sarebbe meglio lavorare su un progetto non fine a se stesso, e non eccessivamente lungo, altrimenti la motivazione potrebbe calare dopo l'entusiasmo iniziale. Magari nell'ambito della matematica, ma non necessariamente.
Quanta autonomia vogliamo dare ai partecipanti? Gestirebbero il progetto per conto loro, e noi daremmo solo commenti? Noi gestiremmo un repository centrale, definendo i task necessari, accettando o rifiutando i vari merge request? Una via di mezzo?
Il linguaggio probabilmente è meglio sceglierlo dopo aver inquadrato il problema. Io starei comunque su linguaggi abbastanza moderni ed espressivi, ma se ne può discutere.
Altri argomenti che sarebbe utile trattare:
- unit test
- coding convention
- build tools (make, ant, rake, cabal, scons... a seconda del linguaggio)
È un'idea molto interessante, io parteciperei volentieri.
Sicuramente sarebbe meglio lavorare su un progetto non fine a se stesso, e non eccessivamente lungo, altrimenti la motivazione potrebbe calare dopo l'entusiasmo iniziale. Magari nell'ambito della matematica, ma non necessariamente.
Quanta autonomia vogliamo dare ai partecipanti? Gestirebbero il progetto per conto loro, e noi daremmo solo commenti? Noi gestiremmo un repository centrale, definendo i task necessari, accettando o rifiutando i vari merge request? Una via di mezzo?
Il linguaggio probabilmente è meglio sceglierlo dopo aver inquadrato il problema. Io starei comunque su linguaggi abbastanza moderni ed espressivi, ma se ne può discutere.
Altri argomenti che sarebbe utile trattare:
- unit test
- coding convention
- build tools (make, ant, rake, cabal, scons... a seconda del linguaggio)
App Android per Matematicamente?
E' una bella idea, sia quella del progetto in generale che quella di Luc@s sull'app android.
Con gli impegni all'università non so se avrei il tempo di contribuire attivamente ma di sicuro seguirei volentieri le discussioni.
Con gli impegni all'università non so se avrei il tempo di contribuire attivamente ma di sicuro seguirei volentieri le discussioni.

A quanto pare finora l'idea ha attratto più esperti che principianti..
Per quanto riguarda il linguaggio di programmazione da usare, ho dato libertà perché non penso abbia senso imporlo. Ma una volta scelto il progetto, ha ovviamente senso rimanere legati ad un particolare linguaggio. C++ e Java sono probabilmente i linguaggi più insegnati nei primi corsi di informatica e quindi quelli che penso siano più probabili come scelte. Per semplificare la creazione di documentazione per iniziare a lavorare al progetto, anche gli strumenti di sviluppo dovranno essere scelti e in qualche modo imposti.
Sono perfettamente d'accordo sulla necessità di scegliere un progetto non troppo lungo e non fine a se stesso. Ci sono cose che si possono imparare solo su progetti di grandi dimensioni, ma sarebbe probabilmente più semplice lavorare ad un progetto open source esistente a questo punto.
Una volta iniziato il progetto pensavo di creare un repository centrale su github o bitbucket e di gestire i merge "centralmente". La versione nel repository centrale sarà quella stabile e quindi ogni aggiunta dovrà prima essere stata valutata accuratamente. Ogni partecipante avrà poi un suo repository in cui ha piena libertà. Riguardo alla scelta delle task direi di dare invece abbastanza libertà (con un minimo di organizzazione per impedire che più persone lavorino alla stessa cosa).

Sono perfettamente d'accordo sulla necessità di scegliere un progetto non troppo lungo e non fine a se stesso. Ci sono cose che si possono imparare solo su progetti di grandi dimensioni, ma sarebbe probabilmente più semplice lavorare ad un progetto open source esistente a questo punto.
Una volta iniziato il progetto pensavo di creare un repository centrale su github o bitbucket e di gestire i merge "centralmente". La versione nel repository centrale sarà quella stabile e quindi ogni aggiunta dovrà prima essere stata valutata accuratamente. Ogni partecipante avrà poi un suo repository in cui ha piena libertà. Riguardo alla scelta delle task direi di dare invece abbastanza libertà (con un minimo di organizzazione per impedire che più persone lavorino alla stessa cosa).
My two cents on Java + Eclipse per lo sviluppo di un'app Android.
Altrimenti un'idea che mi viene ora (quindi non molto ponderata) è quella di dedicarci quasi "amatorialmente" alla crittografia: numeri primi, chiavi pubbliche e private (tipo RSA), cifrature varie, tentativi di crittanalisi, ecc.
Dai nomi sembrano probabilmente cose più complicate di quanto non siano in realtà (almeno inizialmente): dopotutto è solo tanta matematica! Però ripeto: è un'idea molto "buttata lì così"...
Altrimenti un'idea che mi viene ora (quindi non molto ponderata) è quella di dedicarci quasi "amatorialmente" alla crittografia: numeri primi, chiavi pubbliche e private (tipo RSA), cifrature varie, tentativi di crittanalisi, ecc.
Dai nomi sembrano probabilmente cose più complicate di quanto non siano in realtà (almeno inizialmente): dopotutto è solo tanta matematica! Però ripeto: è un'idea molto "buttata lì così"...
Sulla crittografia e sicurezza metterei una specie di veto. Per quanto possa essere interessante, non sono argomenti per principianti e una libreria crittografica scritta male fa potenzialmente più danni di non usare alcuna protezione. Credo che progetti meno "seri" come l'app Android siano in generale preferibili.
"apatriarca":
A quanto pare finora l'idea ha attratto più esperti che principianti..
Io da buon principiante sarei interessato

Purtroppo le competenze sono ridotte, conosco un pochino di C a livello universitario ( per capirci a livello di APA), ho imparato qualcosina di Java da autodidatta per un progetto con un amico ma direi che sono meno che principiante ed il Perl a livello base.
"apatriarca":
Sulla crittografia e sicurezza metterei una specie di veto. Per quanto possa essere interessante, non sono argomenti per principianti e una libreria crittografica scritta male fa potenzialmente più danni di non usare alcuna protezione.
Certo, come volete. Comunque chiarisco che non pensavo a nulla di immediatamente utilizzabile. Con una libreria scritta da me non mi fiderei a proteggere nemmeno la mia spazzatura...

Era solo un modo per tentare un primo approccio a un campo, quello della crittografia, che diventa sempre più importante e sul quale è bene investire tempo e sforzi per evitare spiacevoli "incidenti" (vedere heartbleed).
La crittografia è senza dubbio un settore molto importante e che richiede grande attenzione ed esperienza. Proprio per questo non credo che sia però un progetto adatto a quello che sto cercando di portare avanti. Per prima cosa, implementare un algoritmo crittografico non è semplice sia dal punto di vista implementativo sia da quello teorico. Di certo non è adatto ad un primo approccio alla "programmazione seria". Inoltre sarebbe per certi versi un esercizio abbastanza scolastico. Si tratta infatti principalmente di studiare bene un algoritmo e di implementarlo.
Il progetto che ho in mente dovrebbe al contrario essere tecnicamente non troppo complicato (in modo da permettere a persone poco esperte di portarlo avanti), ma in cui è necessario prendere delle decisioni non sempre ovvie. Nel mondo lavorativo non capita infatti praticamente mai di dover implementare un qualche algoritmo. Viene normalmente richiesto di risolvere un problema e il programmatore deve trovare un modo per risolverlo. Diventare un programmatore significa anche imparare a trovare queste soluzioni. Sfortunatamente non è sempre facile e sono principalmente esperienza e tempistiche a guidare molte scelte.
Direi che l'app per Android andrebbe bene. Non ho mai sviluppato nulla su Android, ma sarebbe un buona occasione per imparare qualcosa..
Ma a parte il girare su Android.. cosa dovrebbe fare?
Il progetto che ho in mente dovrebbe al contrario essere tecnicamente non troppo complicato (in modo da permettere a persone poco esperte di portarlo avanti), ma in cui è necessario prendere delle decisioni non sempre ovvie. Nel mondo lavorativo non capita infatti praticamente mai di dover implementare un qualche algoritmo. Viene normalmente richiesto di risolvere un problema e il programmatore deve trovare un modo per risolverlo. Diventare un programmatore significa anche imparare a trovare queste soluzioni. Sfortunatamente non è sempre facile e sono principalmente esperienza e tempistiche a guidare molte scelte.
Direi che l'app per Android andrebbe bene. Non ho mai sviluppato nulla su Android, ma sarebbe un buona occasione per imparare qualcosa..

Su questo ti dò ragione: sviluppare un nuovo algoritmo sarebbe troppo impegnativo (e non adatto a un primo progetto) e studiarne/implementarne uno esistente sarebbe troppo "scolastico".
Per quanto riguarda l'app android, direi che dovrebbe interfacciarsi (parola che può voler dire tutto e niente) con il forum e permettere la visualizzazione delle discussioni, la creazione di nuovi post, ecc. Questo se scegliamo di limitarci momentaneamente allo sviluppo di un'app per il forum di Matematicamente.
Se invece puntiamo direttamente su Matematicamente tutto intero allora dobbiamo organizzare l'app in sezioni (notizie, lezioni, esercizi svolti, forum, ecc.), ognuna delle quali si occuperà di fare da "ponte" con una parte del sito.
Almeno questo secondo me.
Per quanto riguarda un possibile punto di partenza... direi la documentazione ufficiale Android per le Web Apps.
Quello che però mi chiedo è: per non limitarci a prendere quello che vediamo normalmente da un browser e metterlo in un'app (cioè fare quasi una copia del browser), l'app deve avere una certa comunicazione con il server di Matematicamente, o sbaglio? Nel senso che deve essere in grado di richiedere contenuti e visualizzarli nel modo che decidiamo noi (una sorta di GET per ottenere le informazioni, seguita da una formattazione a nostra scelta), e non semplicemente prendere del codice html e metterlo in una WebView.
Oppure sto pensando inutilmente a cose troppo complesse?
Per quanto riguarda l'app android, direi che dovrebbe interfacciarsi (parola che può voler dire tutto e niente) con il forum e permettere la visualizzazione delle discussioni, la creazione di nuovi post, ecc. Questo se scegliamo di limitarci momentaneamente allo sviluppo di un'app per il forum di Matematicamente.
Se invece puntiamo direttamente su Matematicamente tutto intero allora dobbiamo organizzare l'app in sezioni (notizie, lezioni, esercizi svolti, forum, ecc.), ognuna delle quali si occuperà di fare da "ponte" con una parte del sito.
Almeno questo secondo me.
Per quanto riguarda un possibile punto di partenza... direi la documentazione ufficiale Android per le Web Apps.
Quello che però mi chiedo è: per non limitarci a prendere quello che vediamo normalmente da un browser e metterlo in un'app (cioè fare quasi una copia del browser), l'app deve avere una certa comunicazione con il server di Matematicamente, o sbaglio? Nel senso che deve essere in grado di richiedere contenuti e visualizzarli nel modo che decidiamo noi (una sorta di GET per ottenere le informazioni, seguita da una formattazione a nostra scelta), e non semplicemente prendere del codice html e metterlo in una WebView.
Oppure sto pensando inutilmente a cose troppo complesse?

Anche io sarei interessato, se accettate autodidatti.
Come linguaggi conosco ad un livello decente solo il c++, anche se in passato ho smanettato un po' con linguaggi come D, Java, Scala, Haskell(quello che mi è piaciuto di più) e riprenderli non dovrebbe comportare molta fatica; android invece non l'ho mai usato quindi sarei escluso a priori da qualsiasi progetto che lo usa.
Come progetto mi verrebbe in mente un emulatore di qualche vecchia piattaforma come un C=64 o Game Boy(qualcosa di cui si trovino le specifiche online), oppure dato che ci troviamo su un forum di matematica sarebbe interessante un computer algebra system(si trova molto materiale su archive), anche se sembrano cose troppo scontate/ambiziose.
Come linguaggi conosco ad un livello decente solo il c++, anche se in passato ho smanettato un po' con linguaggi come D, Java, Scala, Haskell(quello che mi è piaciuto di più) e riprenderli non dovrebbe comportare molta fatica; android invece non l'ho mai usato quindi sarei escluso a priori da qualsiasi progetto che lo usa.
Come progetto mi verrebbe in mente un emulatore di qualche vecchia piattaforma come un C=64 o Game Boy(qualcosa di cui si trovino le specifiche online), oppure dato che ci troviamo su un forum di matematica sarebbe interessante un computer algebra system(si trova molto materiale su archive), anche se sembrano cose troppo scontate/ambiziose.
Io consiglierei il C++11. Certo non si puo' proporre un Python o Go o Scala...
NON CONTATE SU DI ME CHE STO MESSO MALE AL MOMENTO....
(Però seguirò con interesse tutto!!!!!!)
NON CONTATE SU DI ME CHE STO MESSO MALE AL MOMENTO....
(Però seguirò con interesse tutto!!!!!!)
Io rilanciarei con Ruby se andiamo down this road.. C++ per novizi non è ideale
È possibile usare il C++ (e non solo) per sviluppare applicazioni Android.. Nelle ultime versioni sembra ad esempio che Qt permetta di scrivere più o meno lo stesso codice sia per Desktop sia per piattaforme mobile. Per cui realizzare qualcosa per Android non significa necessariamente usare Java. C++ è il linguaggio che conosco meglio, per cui non avrei problemi se la maggioranza lo scegliesse. Ruby non l'ho mai usato.
Personalmente non sono un fan delle app che propongono un sito in versione ridotta.. Preferisco a quel punto andare direttamente sul sito..
@hyoukarou: accettiamo chiunque abbia voglia di partecipare. Non importa se ha imparato da autodidatta o all'università o scuola superiore o altro.
Personalmente non sono un fan delle app che propongono un sito in versione ridotta.. Preferisco a quel punto andare direttamente sul sito..
@hyoukarou: accettiamo chiunque abbia voglia di partecipare. Non importa se ha imparato da autodidatta o all'università o scuola superiore o altro.
Ruby mi ha fatto ritornare la passione del programmare e non del perdersi in dettagli futili.
È veramente una gran bella cosa.
C++ d'altro canto, a saperlo usare bene ci vuole molto.
Il tutto imho
È veramente una gran bella cosa.
C++ d'altro canto, a saperlo usare bene ci vuole molto.
Il tutto imho
Credo che si potreppe pensare all'app come un bonus del sito.
Magari un modo di navigare il sito e il forum con qualche generatore/compositore di formule e ottimizzato per smartphone/tablet.
Una marea di volte avrei voluto non dover caricare il forum/sito in versione desktop.
In alternativa una webapp rails con il medesimo scopo (e Ruby sarebbe anche meglio dato il suo approccio unit testing intrinseco)
Magari un modo di navigare il sito e il forum con qualche generatore/compositore di formule e ottimizzato per smartphone/tablet.
Una marea di volte avrei voluto non dover caricare il forum/sito in versione desktop.
In alternativa una webapp rails con il medesimo scopo (e Ruby sarebbe anche meglio dato il suo approccio unit testing intrinseco)
Non sono molto convinto. L'esperienza del forum su uno smartphone non è perfetta, ma avremmo probabilmente bisogno di accedere al database del forum e alla fine sarebbe come costruire un secondo forum sullo stesso database.. Io punterei a qualcosa di diverso. Per esempio una app per fare grafici o che svolta dei calcoli simbolici o che ti riconosca una formula da una foto e ti scrive la formula latex o .. Sempre se si vuole rimanere legati alla matematica. Se no ci sono giochi o emulatori o compilatori o qualsiasi altra cosa.