Follow my new blog

Samstag, 25. August 2012

Event-Based Components mit Ruby

Zunehmend bin ich begeistert von dem, was so in der Softwarewelt passiert – aber erst spät in der .NET Welt ankommt. .NET ist immer noch cool – aber was mal leading edge war, fühlt sich für mich immer behäbiger an. Microsoft ist ein Flaschenhals (geworden) und schon gar nicht führend in vielen Aspekten der Softwareentwicklung.

Mono bringt manchmal Erleichterung, zum Beispiel beim Thema Infrastruktur in der Cloud oder iOS Programmierung. Doch noch mehr weitet sich der Horizont mit anderen Plattformen. Deshalb habe ich jetzt mal einen Vorstoß in Richtung Ruby gewagt.

  • F# ist interessant, reizvoll, verlockend… aber am Ende doch zu Microsoft. In der weiten, weiten Welt passiert damit zu wenig.
  • Java ist keine Option. Dazu bedarf es kaum einer Erklärung, oder?
  • Python ist mir inzwischen schon zu alt.
  • Scala mag ein würdiger Java-Nachfolger und hochaktuell sein, aber fühlt sich für mich immer noch zu instabil an. Bleeding edge will ich mir nicht antun. Dafür habe ich keine Zeit.
  • Clojure ist mir ebenfalls noch zu blutig.

Was bleibt ist, ist aus meiner Sicht Ruby. Es mag schon einen Hauch in die Jahre gekommen zu sein. Clojure is the new exciting kid on the block. Aber für mich ist Ruby gerade gut abgehangen. Tools und Technologien sind stabil, scheint mir.

Auf meinem Macbook Air ist Ruby schon installiert. Da kann ich auf der Kommandozeile mit einer REPL rumspielen. Zusätzlich habe ich mir RubyMine von JetBrains installiert. Das ist ne solide IDE für meine Zwecke.

Also bin ich jetzt im Lern- und Bastelmodus. Eine neue Welt kennenlernen. In kleinen Schritten. Aber natürlich nicht ohne Flow-Design!

Wenn schon ein Ausflug auf eine neue Plattform, dann muss ich Flow-Design Entwürfe dort leicht umsetzen können. Geht das mit Ruby? Ja, das geht. Hier das Listing der Implementation eines ganz einfachen Flows:

image

Ich habe den Flow bewusst mit Event-Based Components realisiert, um ein Gefühl für den Unterschied zu C# zu bekommen. Ich bin begeistert! Das macht Laune mit Ruby. Es geht ganz einfach, wie Sie sehen.

Nach ein paar Stunden zugebracht mit der Lektüre von Ruby Büchern und Rumspielen mit der IDE ist mein derzeitiges Urteil: Ruby fühlt sich schlank an und bietet manches, was ich lange in C# vermisst habe, z.B. geschachtelte Funktionen.

Wenn das so weitergeht, dann kann es sein, dass Sie hier im Blog ab und an Ruby-Code zu lesen bekommen :-)

Kommentare:

Carsten hat gesagt…

Keine Ahnung ob Du jetzt F# und Clojure nicht magst weil das zu FP ist - aber ich würde mir Haskell angucken.

Letztlich werden wir aber wohl alle bei JS landen :(

(PS: F# ist nicht so arg MS-lastig, ist zwar netterweise in VS dabei und bedient sich des sehr guten Frameworks, aber viel Liebe gibt es von MS nicht. Dafür ist die (engl.) Community sehr aktiv und entwickelt die Sache extrem weiter - sind ja auch viele Deutsche gut dabei)

Andreas Richter hat gesagt…

Ruby ist wirklich eine schöne Sprache. Auch für jahrelange Delphi -Entwickler.
Ich würde mich über mehr Ruby - Code hier im Blog nicht beschweren.

Anonym hat gesagt…

Glückwunsch zu dieser Endeckung Ralf !
Ruby wird Dir noch viel, viel Freude machen, da bin ich mir ganz sicher !

Gruß
Joachim

P.S.
Immer ein Besuch wert, ist der Blog von Peter Cooper. Er fasst die Ereignisse in der lebendigen Community nett und kompetent zusammen.
http://www.rubyinside.com/
P.P.S.
MacRuby für Dein Air
http://macruby.org/

Ralf Westphal - One Man Think Tank hat gesagt…

@Carsten: Ich habe doch ganz klar gesagt, warum ich Clojure und F# gerade nicht wähle. Dass es FP-Sprachen sind, hat damit nichts zu tun.

Bei Haskell jedoch hat es etwas damit zu tun. Haskell ist mir zu puristisch. Darüber hinaus sehe ich da für meinen Geschmack zu wenig Ökosystem drumherum.

Mir geht es ja weniger um die reine Sprache, sondern eher um das Ganze bestehend aus Sprache und Ökosystem. Und da frage ich: Wie stabil, reif, breit ist das Ökosystem und der Support bei neuen Technologien?

Da sehe ich Haskell nicht als Treiber - außer vielleicht in Sprachansätzen, die mir - mit Verlaub - zu akademisch sind. Ob ich mit Haskell die schöneren Monaden oder reineren Typen basteln kann, ist mir grad nicht wichtig.

Aber ob und wann ich für eine Sprache ein Binding bekomme, das interessiert mich. Beispiel iron.io: Da gibt es zuerst Ruby und Python Bindings. .NET/Mono kommt erst viel später. Und Haskell? Nicht zu sehen.

Wenn ich nun Ruby wähle, dann wähle ich halt Ruby. Damit will ich kein Zeichen setzen und niemanden überzeugen. Mir schmeckt grad Ruby mehr als was anderes. Das wollte ich hier sagen.

Wenn das jemanden anregt, auch über den .NET Tellerrand zu schauen, dann gern. Wem etwas anderes schmeckt, der isst halt woanders. Auch gut.

Wie tief ich in Ruby eintauche? Keine Ahnung. Ich werde sicher nicht der große Rails-Meister. Mir geht es um Inspiration. Und vielleicht im einen oder anderen Aspekt um Befreiung.

JavaScript? Vielleicht ein andermal.

Anonym hat gesagt…

Hi Ralf,
hab es auch nicht bereut mir Ruby anzusehen. Erst war ich skeptisch aber mach viel Spaß. Spannend finde ich insbesondere den syntaktischen Zucker bei der Metaprogrammierung. Insbesondere Rake hat auch bei meinen .Net Projekten gute Arbeit geleistet. Und wo wir gerade beim Thema Ruby und JS was zum lachen: destroyallsoftware.com/Talks/Wat.
Gruß
Kai

Carsten hat gesagt…

@Ralf

wow - sorry wenn ich da irgendwie in ein Näpfchen getretten bin, aber für mich war der Grund "zu Microsoft", "zu blutig" und es "passiert" nicht genug. Nicht ganz klar. "Blutig" - k.A. was das heißen soll, aber zu wenig passiert sicher weder mit F# noch mit Haskell und wenn es dannach geht darf man sicher außer C-derivaten und JS nichts wählen.

Sei es drum, wie der Zufall will hat gerde ein Rubyist einen Artikel veröffentlicht, warum es doch sinnvoll seien *könnte* sich mal im Haskell lager umzusehen: http://rubysource.com/comparing-haskell-and-ruby-part-i/

Und übrigens: Haskell und co. auf Monaden (scheiße ist das Wort hässlich) und reine Typen zu beschränken ... ich denke mal wirklich mit der Sprache und der ganzen FP Idee hast Du Dich nicht wirklich beschäftigt (was kein Vorwurf seien soll - mir geht es mit Ruby ähnlich).

Ich habe noch keine einzige produktive Anwendung mit Haskell entwickelt - das stimmt.
Aber was ich mittels Haskell über (funktionale) Programmierung gelernt habe (und auch in anderen Sprachen verwenden kann) hat mich als Entwickler besser gemacht.

Lerne ich eine andere imperative Sprache und deren Frameworks, so macht mich das vielleicht für den Moment *wertvoller* aber dieses Wissen ist letztlich irgendwann obsolet und ein besserer Entwickler bin ich schon lange nicht.

Trotzdem werde ich Deine Ruby-Entwicklung mit Interesse verfolgen - vielleicht ist es ja doch interessant.

Mike Bild hat gesagt…

+++ Wow! +++

Ralf Westphal - One Man Think Tank hat gesagt…

@Carsten: Ne, du bist in kein Näpfchen getreten. Aber ich dachte, ich hätte meine Gründe klar benannt. Hatte ich wohl nicht und so hab ich nochmal nachgelegt. Und tue es nochmal :-)

Mir geht es eben nicht (!) um einen Paradigmenwechsel. Deshalb springe ich auch nicht auf FP an. Weder pur noch hybrid.

Mir geht es um Plattform und Ökosystem.

Und wenn da nicht Ruby viel breiter ist als F#, Clojure, Haskell, dann fress ich nen Besen.

Natürlich sehe ich, dass auch Ruby schon seinen Zenit wahrscheinlich überschritten hat. Hype sind Clojure und Haskell und Scala. Und JS - aber auf andere Weise.

Das ist mir aber gerade recht. Denn damit ist Ruby reif. Das heißt, Ruby bietet mir Usability. Denn ich hab keine Zeit, mir alles mögliche Zeugs durch konstantes Verfolgen irgendwelcher Enthusiastenforen anzueignen. Ruby bietet mir out of the box ganz viel ganz bequem - und dennoch jenseits des MS Tellerrandes.

Wer bleeding edge mit Clojure oder Haskell sein will, soll gern. Go for it! Mich interessiert das heute 2012 nicht. Noch nicht. Weil mein Fokus anders ist.

In 6 Monaten oder 3 Jahren schaue ich dann vielleicht wieder mal, wohin ich meine Fühler ausstrecken kann. Vielleicht finde ich dann Clojure oder Go reif für mich - und alle anderen sind schon wieder weitergezogen :-)

Christian Götz hat gesagt…

Ich kann es Ralf nachempfinden.
Ich bin auch schon über so viele "geile" Sprachen gestolpert, wo ich mich gefragt habe: "Warum sind die nicht Mainstream? Wo ist das Ökosystem?"

Meine heimlichen Favoriten sind ja Nemerle und D.
(Ich sehe gerade, dass vor allem D aktiv weiterentwickelt wird.)

Also Sprachen, die sämtliche Konzepte elegant(!) vereinen.

Aber oft besteht das Problem, dass sie noch nicht ausgereift sind, oder mangels Bekanntheit nicht breit genug unterstützt werden.

Naja, und eine Sprache muss mir auch von der Syntax her zusagen. ^_^

mfg

Christian

Anonym hat gesagt…

Also, die Argumentation, dass C# so weit hinter anderen Sprachen herhinkt, kann ich irgendwie nicht teilen.

Async-await, Roslyn, Linq (wozu es hin und wieder mal unausgereifte Entsprechungen gibt)... ich möchte die Sprache sehen, die mir den gleichen Programmierkomfort in - und jetzt wird wichtig - produktiv nutzbarer Qualität liefert.

Zu Ruby sage ich mal nix. Ich habe vor einem halben Jahr da mal mit herumgespielt, aber ich lasse da gerne jedermann selbst sein Erfahrungen machen.

Für mich heute das Killer-Kriterium einer Programmierplattform ist Parallelisierung. Und da haben es alle OOP-Sprachen schwer, Ruby macht da keine Ausnahme. Deshalb ist die Empfehlung Haskell richtig.

Und wenn es wirklich um eine vibrierende community und um ausgereifte Tools geht, dann kommt man um eine genaue Auseinandersetzung mit JavaScript einfach nicht mehr herum. Vieles, was dort passiert, kommt inzwischen an C# heran, oder stellt es in den Schatten (ich denke da an Rafael oder Knockout). Ich denke, JS wird die Lingua Franca der nächsten Jahrzehnte.

Sven hat gesagt…

zum Thema Ruby kann ich empfehlen:

Why’s (Poignant) Guide to Ruby
http://mislav.uniqpath.com/poignant-guide/book/chapter-1.html

und:
http://railsforzombies.org/

Wieso gibt es solche Dinge zuhauf für Ruby und nur *sehr* selten in anderen Sprachen?
Programmieren macht Spaß und trocken war gestern.