PDA

Visualizza la versione completa : [Ruby] E' un linguaggio adatto per imparare a programmare da zero?


DeraWeb
14-01-2013, 21:32
Ciao a tutti,
Programmo da diversi anni e, come molti, ho imparato a programmare seriamente all'Università, in Java.

Recentemente ho avuto occasione di, per così dire, trovarmi dall'altra parte della cattedra.
Nello specifico sto tenendo un corso di programmazione per chi comincia da zero presso un'azienda di formazione privata.

Dovendo scegliere un linguaggio adatto allo scopo didattico, sto guardato con crescente interesse a Ruby (http://www.ruby-lang.org/it/) e in particolar modo al tutorial "Imparare a programmare (http://corsorubyonrails.com/imparare-a-programmare/)" di Chris Pine.

Più ci penso più mi convinco che l'introdurre alla programmazione utilizzando il linguaggio Ruby, pur essendo un approccio poco convenzionale (la maggior parte dei corsi che si possono trovare usano Java o PHP o Python o C++/C#) non ha particolari controindicazioni, anzi.

Infatti la natura del linguaggio Ruby permette di introdurre i concetti principali della programmazione OO senza richiedere l'accettazione di troppi "dogmi iniziali" da parte dello studente (come avviene soprattutto con Java).
Inoltre Ruby, sia dal punto di vista tecnico che delle performance (dalla v.1.9.2 in poi), non ha più nulla da invidiare né a Python né tantomeno al molto più diffuso (soprattutto per i bassi costi di hosting) PHP. Al punto che perfino la NASA, recentemente, sta mostrando interesse per questo linguaggio.

Tuttavia questo mio intervento non vuole essere una pubblicità a Ruby, anzi, vorrei proprio sapere se qualcuno di voi (ovviamente fra quanti conoscono bene Ruby e almeno un altro linguaggio) è in grado di indicarmi delle valide controindicazioni al suo impiego dal punto di vista didattico.

Perché se ne esistono, a me francamente sfuggono.

Grazie

franzauker2.0
15-01-2013, 08:11
L'unica valida controindicazione, per modo di dire poi, che mi viene in mente è la (relativa) scarsa diffusione, il che lo rende uno strumento interessante senza dubbio, ma forse i tuoi studenti non avranno facilmente modo di utilizzarlo in futuro.
Entrando più nello specifico ha delle "magicità" (da esempio nei nomi delle variabili) che non sono esattamente superlineari, ed ha altri comportamenti di default (scope pubblico anzichè privato per default) a loro volta non esattamente in linea con una idea "ortodossa" OO.
Va rilevato però che - a mio parere così siamo tutti contenti - ogni - alè mettiamoci alcuni - linguaggio ha sue "devianze" rispetto alla "purezza" dell'idea.
Per ora non me ne vengono altre

Hard*RTOS
15-01-2013, 13:48
Ruby sicuramente è un'ottima soluzione, tuttavia la scelta del linguaggio dovrebbe tenere conto dello scopo del corso (logica del software engineering, database, web application, amministrazione di sistemi, gestione di reti) oltre che ad altri aspetti definibili 'collaterali' quali la durata del corso, la preparazione base dei partecipanti, le eventuali risorse a disposizione; ovviamente queste risposte puoi darle solo te (e altrettanto ovviamente puoi non rivelarle nel forum).

Ciao :-)

DeraWeb
16-01-2013, 07:30
Originariamente inviato da franzauker2.0
L'unica valida controindicazione, per modo di dire poi, che mi viene in mente è la (relativa) scarsa diffusione, il che lo rende uno strumento interessante senza dubbio, ma forse i tuoi studenti non avranno facilmente modo di utilizzarlo in futuro.


Per quanto riguarda la scarsa diffusione mi permetto di dissentire.
A livello mondiale l'interesse verso Ruby e gli strumenti a esso correlati (i primi che mi vengono in mente sono il framework Rails e la libreria Rspec per il Behavior-Driven Development) è in forte crescita.
Su Google Trends la comparazione di "Ruby, Python, PHP, Java e C#" mostra che Ruby sta sorpassando Python assestandosi in quarta posizione appena dietro a C# (in leggero calo), mentre Java (prima posizione) e PHP (seconda posizione) sono in netto calo.

Stessa cosa succede si vede restringendo il trend all'Italia, con però alcuni picchi mostruosi su "Ruby", risalenti a un paio d'anni fa, per gentile concessione della nipote di mubarack...

Su LinkedIn Skills (http://www.linkedin.com/skills/) invece abbiamo:

Ruby +6%
Python +6%
PHP +2%
C# -3%
Java -6%
C++ -8%

Ruby l'ho messo in prima posizione considerando anche gli skill ad esso correlati fra cui sono degni di nota i framework "Cucumber" e "Sinatra" e la libreria "Rspec" con dei tassi di crescita mostruosi mostruosi (rispettivamente del +49%, +42% e +39%), nettamente superiori a quelli di tutti gli skill correlati agli altri 4 linguaggi presi in considerazione!

Degno di nota è però anche il framework "Django", scritto in Python, con un tasso di crescita del +21%.

Evito di entrare nel merito di cosa sia più o meno ortodosso nel OO e, di conseguenza, se siano meglio i linguaggi tipizzati come JAVA o quelli con "duck typing" come Ruby perché, un po' come tutte le guerre di religione, lo vedo come un baratro senza fondo. :-).
Per onestà intellettuale mi limito ad ammettere che, pur utilizzando Ruby con successo da diversi anni per scrivere applicazioni web, se domani dovessi scrivere un'applicazione di contabilità bancaria, con ogni probabilità sceglierei un linguaggio tipizzato (JAVA o C#). Il perché, da un punto di vista razionale, non riesco nemmeno a metterlo del tutto a fuoco nemmeno io. La religione è soprattutto un atto di fede.
Se invece dovessi scrivere un qualche programma in cui la velocità di esecuzione fosse un requisito fondamentale, mi orienterei ovviamente (e razionalmente) su un linguaggio compilato (come C++) dove non avrei né interprete né JVM in mezzo alle :eek:.

Ne approfitto per rispondere, almeno in parte, anche ad Hard*RTOS: lo scopo è introdurre, da zero, la programmazione OO applicata al web.

Vero è che sul Web PHP la fa ancora da padrone con costi di hosting irrisori, semplicità e applicazioni web del calibro di Facebook(!!!) dalla sua.
A questa lecita obiezione (peraltro auto sollevata) mi sono risposto che tuttavia Ruby ha dalla sua applicazioni web del calibro di Twitter e Groupon, l'architettura OO nativa, il framework Ruby on Rails (solo parzialmente replicato da PHPCake) e, soprattutto, il trend di crescita.
Infine stanno saltando finalmente fuori anche dei servizi di hosting abbordabili (es. heroku.com con la sua facilità di deploy disarmante e che è perfino gratuito entro determinate soglie) e soluzioni per gestire sempre più facilmente dei VPS (es. Capistrano e Chef in combinazione coi "TopServer" di TopHost.it permettono, a costo di qualche complicazione in più, di raggiungere costi di hosting del tutto paragonabili a quelli di PHP).

PS: Spero di non essere stato troppo di parte (ok lo ammetto: Ruby mi sta proprio simpatico) e mi rendo anche conto che Google trends e LinkedIn skills come sono metri di paragone opinabili per n motivi, ma di migliori non me ne sono venuti in mente.

MegaAlchimista
16-01-2013, 11:53
(ok lo ammetto: Ruby mi sta proprio simpatico)
Secondo me questo è importante giá di per se, perchè parlare di un argomento al quale si è appassionati aumenta in modo diretto la qualità della spiegazione, e se poi riesci a farti trasportare, riuscirai a trasmettere la tua passione per l'argomento anche agli alunni (o anche solo ad alcuni di loro).
In fondo per imparare a programmare non conta più di tanto con quale linguaggio si cominci, piuttosto conta riuscire ad imparare un nuovo approccio alla risoluzione dei problemi.

franzauker2.0
16-01-2013, 14:28
Originariamente inviato da DeraWeb
Per quanto riguarda la scarsa diffusione mi permetto di dissentire.
A livello mondiale l'interesse verso Ruby ...
PS: Spero di non essere stato troppo di parte (ok lo ammetto: Ruby mi sta proprio simpatico) e mi rendo anche conto che Google trends e LinkedIn skills come sono metri di paragone opinabili per n motivi, ma di migliori non me ne sono venuti in mente. Mah... i trend non dicono nulla, o pressochè nulla.
Se hai 10 e fai 12 hai un +20%
Se hai 100.000.000 e fai -10%, hai sempre 90 milioni contro 12.
L'interesse è una cosa, la base installata è un'altra e ruby, penso sia un argomento pacifico, è una frazione infinitesima rispetto al "resto del mondo".
Non vedo neppure probabile che in futuro sostituisca altre tecnologie da un lato diverse (java,c) anche come destinazione, e dall'altra oramai inamovibili (php) per ragioni di installato.
Mi pare un ragionamento del tutto razionale ed aderente alla realtà, e in piena contraddizione con la domanda del thread.

Se lo scopo è insegnare qualcosa di (ragionevolmente) facilmente spendibile nel mondo del lavoro, ruby non lo metterei certo al primo posto, ma non mi pare questo l'obiettivo.
Ne approfitto per rispondere, almeno in parte, anche ad Hard*RTOS: lo scopo è introdurre, da zero, la programmazione OO applicata al web.Bhè mi pare (se partono da zero) un vaste programme

Hard*RTOS
16-01-2013, 14:53
Ritengo che - sia l'autore del post che gli interlocutori - abbiano ragione sui vari aspetti enunciati; voglio precisare tuttavia che non esiste una regola generale per la valutazione della qualità e dell'utilità di un linguaggio di programmazione: alcuni linguaggi sono di nicchia ma estremamente puri e 'belli' matematicamente parlando, mentre altri sono mal progettati ma inspiegabilmente diffusi in ambito commerciale (magari non industriale).
Quindi, per alcuni la diffusione si spiega con l'efficacia, la sicurezza e per altre caratteristiche qualitative, per altri linguaggi (o sistemi) sono elementi esterni come il marketing e la forza della software house a determinarne la diffusione.
Non faccio esempi - nemmeno con le rispettive dimostrazioni oggettive - per non scatenare flamewar, ci tengo a sottolinearlo.

franzauker2.0
16-01-2013, 14:56
Vabbè ma quindi alla domanda
[Ruby] E' un linguaggio adatto per imparare a programmare da zero? qual'è la risposta?

Per quanto mi riguarda SI', se (e solo se) poi viene intrapreso un percorso vero strumenti (belli o brutti non mi interessa,mi riferisco agli aspetti oggettivi) notevolmente più diffusi, così a "naso" per diversi ordini di grandezza.

MItaly
16-01-2013, 15:36
Giusto per divagare un momento: il punto che secondo me viene spesso sottovalutato quando viene insegnato il primo linguaggio è che si stanno insegnando contemporaneamente due cose: in primis il linguaggio scelto, ma soprattutto si sta insegnando a programmare.

Questo secondo aspetto non è per nulla scontato, come ho riscoperto di recente vedendo dei miei compagni di corso in difficoltà di fronte a problemi per cui tutta la questione era semplicemente impostare un singolo ciclo for.
Per questo, secondo me, il primo linguaggio non deve né essere un giocattolo inutile e avulso da quelli che sono i linguaggi "veri", ma d'altra parte deve fondato su concetti chiari e senza mille eccezioni strane rispetto al "modello mentale" di base del linguaggio, in modo che le paturnie specifiche del linguaggio che si sta utilizzando non vadano ad intralciare l'apprendimento dei "concetti trasversali" della programmazione (la cosa ideale sarebbe un linguaggio per quanto possibile senza "leaky abstractions (http://www.joelonsoftware.com/articles/LeakyAbstractions.html)").

Infine, c'è il solito discorso della scelta di apprendimento top-down o bottom-up, ovvero parto da un linguaggio di livello relativamente basso (tipicamente il C) o parto da un VHLL (Ruby, Python & co.); entrambe hanno i loro pro e contro, e secondo me il successo di uno o dell'altro metodo dipende fortemente dalla disposizione mentale di chi sta studiando (voglio imparare cosa sta sotto il cofano/voglio divertirmi subito a fare cose) e dall'obiettivo che ci si prefigge (sviluppo embedded e sviluppo web tipicamente prevedono percorsi impostati in maniera diversa).

Qualche articolo che mi aveva colpito che c'entra tangenzialmente con queste questioni:
http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html
http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

Hard*RTOS
16-01-2013, 16:53
Concordo con MItaly con il fatto che le regole 'grammaticali' e/o 'semantiche' (passatemi i termini) di uno specifico linguaggio interferiscano talvolta con l'astrazione mentale e il ragionamento logico-matematico, soprattutto in ambito di linguaggi imperativi. Secondo tale osservazione, occorrerebbe arrivare ad un linguaggio specifico solo dopo aver affrontato alcuni argomenti fondamentali come la matematica di Boole, i tipi di dati, le strutture dati, le ricorsioni, e così via,.

Ovviamente, se lo scopo quello di mettere piede nel mondo embedded, la strada si complica moltissimo, con buona pace di tutti..

Loading