ASP.NET Vs Ruby On Rails
Je crois déjà l’avoir dit ici-même un jour, mais j’ai été programmeur .NET (ASP) pendant 4 ans. J’ai toujours pensé que c’était la meilleure technologie de tous les temps (on en dit des niaiseries parfois). Loin d’être une mauvaise plate-forme, .NET est à mon avis visiblement inférieur à son opposant d’aujourd’hui : Le léger et porteur de liberté : Ruby On Rails.
.NET est strict
Que vous cuisiniez votre .NET avec VB ou C#, il s’agit de deux langages stricts où tout doit être défini avant d’être utilisé, où toute classe/méthode devient intouchable dès sa déclaration. Cette philosophie domine encore aujourd’hui et je trouve ça dommage. Arrêtons de vouloir tout protéger en essayant de se convaincre que cette rigueur est essentielle dans tout langage “sérieux”. Ruby est un langage ultra-ouvert, où tout peut être modifié et remodifié à n’importe quel moment par le développeur. Est-ce que le chaos s’est installé dans toutes les applications développées avec Ruby? Non…
.NET est propriétaire
Et oui, .NET est la propriété exclusive et secrète de Microsoft. C’est agaçant. Pourquoi? Parce que seuls les développeurs Microsoft savent comment l’application est développée. Les membres de la communauté qui utilisent la plateforme ne sont que des clients. Ils ne peuvent qu’imaginer la façon dont les choses fonctionnent et prier que le meilleur arrive dans la future version. Avec Ruby On Rails, les membres de la communauté sont des partenaires. Vous voulez voir le code source de Ruby On Rails? http://svn.rubyonrails.org/rails/. Amusez-vous…
.NET n’est pas MVC
MVC = Model View Controller. C’est une architecture plutôt vieille que l’on a oublié pendant plusieurs années et qui a refait surface depuis peu. La façon de développer MVC s’est avérée un franc succès dans le monde du Web. C’est pourquoi des frameworks comme Ruby On Rails, Django, cakePHP et Symfony en ont fait leur fondation. Avec ASP.NET, il faut travailler fort pour arriver à faire du MVC… ou encore il faut utiliser une extension comme TROIKA.ASP (pour .NET 3.0 seulement à ce que j’ai compris). Bref, quand ASP.NET sort de sa boîte, il n’est pas MVC. Certains me diront “Et après?”. J’ignore si vous l’avez déjà essayée, mais sans être parfaite, l’architecture MVC est géniale. Pourquoi s’en passer si c’est pour nous rendre 10 fois plus efficace?
Si vous croyez encore que .NET est la meilleure invention depuis le pain tranché, vous êtes peut-être en train de laisser filer un joyau qui pourrait changer définitivement votre façon d’aborder le développement Web.
Bonjour,
Il faut faire attention ici. Tu compares .NET et Ruby On Rail qui sont 2 choses bien différente. Ruby On Rail est un framework basé sur le language Ruby. Bien que je sois d’avis que Ruby On Rail est très bon, Ruby n’est pas MVC. Spring.NET Framework est un framework MVC qui fonctionne sous .NET
Je me permets de te faire mention de mon Billet qui parle de ASP.NET, PHP et Ruby et qui explique un peu ma réflexion sur le sujet.
Je viens de découvrir votre blog, je vais le suivre à partir de maintenant, il semble très intéressant!
Salut Martin,
Content de voir que tu aimes le blog!
En fait, je crois que l’on peut très bien comparer ASP.NET avec Ruby On Rails, il s’agit de 2 outils permettant de développer des applications Web. Tu as raison de dire que Ruby n’est pas un framework MVC, c’est un langage. Je parlais du framework Ruby On Rails… qui comme on le sait repose sur le langage Ruby.
Au fait, si jamais tu t’intéresses à Ruby et/ou à Rails, tu pourrais être intéressé par Ruby Fleebie, mon blog sur le sujet.
PS : Le look d’enfer de Ruby Fleebie est une gracieuseté d’Alex Dumas!
Salut!
Intéressant ton article, mais je dois dire que je suis plutôt en désaccord:
Strict: Je ne connais pas ROR, mais C# n’est pas plus strict que Java ou C++. Et même beaucoup moins que des trucs comme smalltalk. Puis, un peu de rigueur évite parfois bien du spaghetti!
Propriétaire: Pas avec Mono, qui est l’implémentation open source de .Net pour fonctionner sur linux.
http://www.mono-project.com/Main_Page
Pas MVC: Le MVC, c’est une manière de développer. On pourrait faire du MVC avec Javascript et même avec Cobol (mais ça remonte à loin ça!). Pour .Net par exemple, le modèle pourrait être la BD, la vue, la page .ASPX et le controlleur, le code derrière, le .CS. Tout simplement!
Ceci dit, je ne suis pas vendu définitivement à .Net pour autant. Je l’utilise parce qu’il fait tout ce que je veux faire. Mais on me parle beaucoup de ROR. Quand j’aurai 2 minutes, je regarderai ça.
@Stéphane,
Je crois que Java, C++ et C# sont tous des langages stricts. C# est peut-être le moins pire du lot, mais quand même… il demeure dans la lignée des langages “sérieux” et “traditionnels” où tout est typé et protégé à fond.
Je me sens tellement libéré dans l’univers des langages dynamiques que je ne m’imagine pas revenir en arrière.
Tu m’apprends quelque chose avec Mono. Je n’étais pas au courant de ce projet. C’est bien!
A propos du MVC : Oui, tu as raison de dire que c’est seulement une manière de développer. Mais le problème c’est que s’il faut le développer “à la main”, ça perd de son charme. Encore là on pourrait penser à faire son propre framework et y inclure tous les concepts de cette architecture… mais faire ça c’est ouvrir les portes du mal. Dan l’exprime bien ici.
Bonne décision de jeter un coup d’oeil à RoR. Si tu n’aimes pas la syntaxe du ruby (mon Dieu… est-ce possible?), tu pourrais également jeter un coup d’oeil à Django qui est écrit en Python. J’ai entendu des belles choses sur ce framework.
Le framework MonoRail (http://www.castleproject.org/monorail/index.html) est un framework MVC inspiré de Rails mais fait pour .NET. Un excellent projet open source qui allège un peu le fardeau de ceux qui doivent obligatoirement, sous pression, a la pointe d’un fusil et sous peine de mort, travaillier avec .NET.
Mais je suis d’acord, comparer Rails et .NET c’est comme comparer les librairies standard de ruby à Django. Mais probablement que tu parlais des WebForms *vomit*
Je ne crois pas que dotNet puisse vraiment être considéré comme propriétaire (sauf si on peut considérer un blue print comme propriétaire). C’est sûr qu’ils sont basés sur des certaines librairies compilées mais la structure des dll, le fonctionnement du compileur / décompileur, tout est défini à l’ECMA.
http://www.ecma-international.org/publications/standards/Ecma-335.htm
Voici de l’information sur 2 implémentations tiers:
Mono: http://fr.wikipedia.org/wiki/Mono_%28informatique%29
et DotGNU: http://www.gnu.org/software/dotgnu/
Aussi, quand au fait que .NET est un langage strict, c’est aussi faux. C# peut être considéré strict, VB, avec toutes les options à on, peut être considéré strict, VB avec tout à off peut être manquer de flexibilité en comparaison à JScript (mais ne peut pas être considéré strict). De plus, des implémentation .NET de
Python (IronPython): http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
Ruby (IronRuby (En développement)): http://en.wikipedia.org/wiki/IronRuby
JScript (Managed JScript (Aussi en développement)): http://blogs.msdn.com/jscript/
VB dynamique (VBx (Pas beaucoup d’information sur le sujet pour tout de suite): http://en.wikipedia.org/wiki/Visual_Basic_.NET
ont été ou seront faites dans un environnement que l’on appelle le DLR (Dynamic Language Runtime). Le DLR a principalement été développé pour Silverlight mais devrait être utilisable en dehors de ce contexte. Certain vont dire que MS est en retard… Je dirais soit en retard soit prudent. Il est dangereux pour une grosse compagnie de se lancer dans tous les hypes (pensons juste à Corel qui se sont planté une quantité innombrable de fois en essayant de profiter de vagues qui s’éteignaient au bout de quelques mois).
Et finalement, comme certains l’ont mentionné, .NET est loin d’être un simple langage de programmation de sites web. C’est plutôt un ensemble complexe et plutôt complet de features permettant de faire tout ce que tu veux. Je ne connais toutefois pas beaucoup Ruby et je ne voudrais pas faire la gaffe de parler à travers mon casse mais par exemple, est-il possible de créer des images sur le fly en Ruby? D’avoir des traitement multi-thread? Ruby offre-t-il un système tout intégré de gestion de sécurité? Chose certaine, n’en déplaise à certain, le monde du client lourd est encore très en demande et une des raisons d’être première de .NET était (et je crois demeure) d’être un langage permettant de facilement passer du client web, au client léger au client lourd sans trop de modification de code. Ruby n’est pas du tout conçu dans cet optique et par conséquent, d’essayer de le comparer c’Est un peu comme de comparer un Miata avec un amphibie militaire: les 2 roulent, la Miata est plus agile mais l’ambhibi est solide et va partout. Chacun ses forces et ses faiblesses mais oublier un pour l’autre… ce serait se mettre un doigt dans l’oeil à mon avis…
@BK,
Je savais que j’aurais droit à la foudre des programmeurs .NET un jour ou l’autre.
Ma plus grosse erreur dans mon article a été d’avoir parlé de .NET au lieu d’avoir parlé de “C# et VB”…mais bon ce qui est fait est fait.
Malgré ce que tu me dis, C# et VB demeurent pour moi des langages stricts. Si tu n’aimes pas le terme “strict”, tu peux remplacer ça par “déclaratif”.
Bon ok, tu me parles de VBx qui semble être une implémentation (ou plutot un projet d’implantation…) dynamique du VB. Tant mieux si ça arrive.
En ce qui concerne toutes les autres implémentations qui roulent sur le DLR que tu as mentionné (Python, Ruby, JScript), je remarque que C# et VB ne font pas parti de cette liste…
Si VBx voit le jour et qu’on fini par inventer un C# dynamique, je changerai peut-être ma perception par rapport à ça. Pour le moment, ça demeure des langages que je trouve lourds, stricts et ennuyants.
Créer des images sur le fly en Ruby? Je ne l’ai jamais essayé mais je crois bien que ça se fait. A moins que je me trompe, la librairie RMagick permet de faire ça.
Encore une fois, je suis contre le fait de dire qu’on ne peut pas comparer .NET avec RoR. Je les compare sur le front suivant : Développement d’applications Web (le reste je m’en fou complètement). Si les 2 outils peuvent me permettre de développer la même application Web, qu’est-ce qui m’empêche de les comparer?
La foudre! lol Disons plutôt un éclaircissement ou au pire un spark de statique! héhé
Mais t’en fait pas, même si t’avais juste mentionnée C# ou VB, j’aurais réagis quand même parce que j’ai un peux de misère avec les emportements qui manquent de données objectives et/ou références officielles.
Pour ce qui est du déclaratif, bien que jusqu’à un certain point VB et C# puissent être considérés comme déclaratifs sur cetains plans, ce ne sont pas à proprement parler des langage déclaratifs. Un langage déclaratif en est un qui “défini un problème plutôt que de définir une solution (ref: http://en.wikipedia.org/wiki/Declarative_programming_language et http://en.wikipedia.org/wiki/Declarative_programming). Mais je crois que tu voulais plutôt parler du fait que l’on doivent déclarer ses variables, les types et autres trucs du genre. Comme je disais, en VB, avec tout à off ce n’Est pas nécessaire. Par exemple,
Option Strict Off
Option Explicit Off
Public Class Class1
Sub test()
a = 3 + 5
For i = 3 To 25
myObj = New Object
Next
End Sub
End Class
est totalement valide en VB. Aussi, en VB9 (celui qui vient avec Orca), on a maintenant accès à tes types anonymes (objects on the fly), des fonctions lambda (Fonctions on the fly), LINQ (Language INtegrated Query qui permet de faire des “requête SQL” sur des objects du code) et d’autres petits trucs qui rendent ça encore plus dynamique.
VBx n’est pas un nouveau langage, simplement les premiers balbutiements de VB 10 (VB X) donc il verra nécessairement le jour mais est-ce qu’il tiendra ses promesses, ça on verra…
Pour ce qui est de RMagic, on est pas tout à faite dans la même lignée que ce que .NET propose (ou ASP.NET considérant la façon dont on traite ici le sujet). En faite, ce serait un peu comme dire que le vieux ASP2 peut faire de la génération d’image… à condition que l’on installe GflSDK sur le serveur. DotNET offre tout ça dans une même boîte avec tous les avantages que cela implique (dont entre autre le gain de performance sur l’instanciation).
Pour ce qui est de la comparaison, si tu tiens à comparer quelque chose, compare ASP.NET (et non .NET) à RoR. Déjà ça va être plus proche. Cela permet aussi de rapidement voir un des avantages de ASP.NET: tu peux utiliser plusieurs langage dépendemment de tes habiletés ainsi que des pour/contre de chaque langage. Probablement que tu pourras construire les mêmes applications web avec les deux. Mais si cela implique de devoir rajouter 45 librairies autour de RoR pour arriver au même résultat que ASP.NET (avec le reste de .NET) seul, compare-t-on encore RoR à ASP.NET? Et si on se sacre complètement de tout le reste de .NET, on commence à dénaturer la comparaison… Une ferrari, c’est ben mieux qu’un tank! Tu peux faire Québec-Montréal en moins d’une heure contre le tank qui le fais en 5! OK, mais moi je dis que le tank est royalement mieux que la Ferrari! Tu peux aller sur un champ de mine avec des artilleurs partout et passer en retant en vie contrairement à la Ferrari qui ferai pas 5 mètres. Qui a raison, qui a tort? On ne peut pas comparer quelque chose d’aussi gros, complet et puissant que .NET à quelque chose d’aussi spécialisé que RoR sans contexte et en faisant abstraction de tout ce qui ne fait pas notre faire. Un collègue à moi qui a fait de la stat te dirait que l’on fait bien dire ce que l’on veut à des chiffres si on garde juste ce que l’on veut en enlevant tou ce qui fait pas notre affaire…
Question d’améliorer ce que je voulais montrer dans l’exemple:
Option Strict Off
Option Explicit Off
Public Class Class1
Sub test()
‘Crée une variable qui sera à l’interne de type Object enrobant un int
a = 3 + 5
For i = 3 To 25
‘a contiendra maintenant un objet de type object
a = New Object
Next
End Sub
End Class
Évidemment, cette approche est moins performante que celle avec les variables et les types explicitements déclarés car tout est optimisé à la compilation et c’est encore une fois une des force de ASP.NET du moins vs ASP2 qui n’était pas du tout compilé mais bien interprété chaque coup tout comme RoR qui selon cette page est aussi interprété. (Ref: http://rubyhacker.com/ruby37.html)
Question d’améliorer ce que je voulais montrer dans l’exemple:
Option Strict Off
Option Explicit Off
Public Class Class1
Sub test()
‘Crée une variable qui sera à l’interne de type Object enrobant un int
a = 3 + 5
For i = 3 To 25
‘a contiendra maintenant un objet de type object
a = New Object
Next
End Sub
End Class
Évidemment, cette approche est moins performante que celle avec les variables et les types explicitements déclarés car tout est optimisé à la compilation et c’est encore une fois une des force de ASP.NET du moins vs ASP2 qui n’était pas du tout compilé mais bien interprété chaque coup tout comme RoR qui selon cette page est aussi interprété. (Ref: http://rubyhacker.com/ruby37.html)
D’ailleurs, profitez-en, la page présente une belle liste des “pros” de Ruby
On est vraiment rendu trop loin!
Tout ce que je peux en dire c’est que je suis capable de faire une application web en deux fois moins de temps avec RoR qu’avec .NET. Peu importe si on peut faire de la génération d’image, si c’est compilé ou si ça il a un gros membre viril.
Donc pour la même application, .NET = 4 mois et RoR = 2 mois.
Si ça c’est pas un avantage majeur, je me demande ce qu’il faut.
Je pense que tu as parfaitement compris ce que je voulais dire par langage déclaratif…
Tu aimes .NET et c’est correct que tu veuilles le défendre, mais quand tu dis : “emportements qui manquent de données objectives et/ou références officielles”, ça me fait rire un peu. Je connais pas tous les hacks que tu peux faire avec VB pour que ça ressemble à un langage dynamique. J’ai pas non plus envie de lire 200 livres sur le sujet avant d’écrire un article sur Triabulle dans les cas où, oh l’horreur, je ne détiendrais pas la vérité sacrée sur tous les points. C’était un article à caractère général dans lequel je n’avais aucunement l’intention de parler du traitement d’images.
Finalement, je te cite :
“Pour ce qui est de la comparaison, si tu tiens à comparer quelque chose, compare ASP.NET (et non .NET) à RoR.”
Regarde le titre de l’article…
Comme je le disais dans mon article (voir mon commentaire ci haut), je suis certifié .NET. J’ai longtemps fait du PHP avant de faire du .NET et je retourne au PHP avec le framework symfony. Je trouve symfony vraiment fantastique et de ce que j’ai vu de RoR, c’est tout aussi fantastique.
Mais je ne vois toujours pas qu’est-ce que ça change qu’un langage soit strict ou pas. Quand tu sais où tu t’en vas dans ta programmation, ça ne devrait pas affecter la vitesse de croisière.
C’est probablement plus facile apprendre à programmer avec un langage comme PHP ou Ruby qui ne sont pas strict, mais un coup que tu as programmer avec un langage strict et que tu y es habitué, je ne crois pas que ça soit un facteur si important.
Bien souvent, ça permet de trouver des erreurs bien plus facilement!
Je suis d’accord que pour faire une application X, ça va probablement aller plus vite avec un framework tel que symfony ou ruby on rail que avec asp.Net. Mais ça n’a pas de lien avec le langage, mais plutôt avec le framework. Si on avait un bon framework en .NET, ça irait tout aussi vite.
@Martin,
Bon point. C’est vrai que lorsque tu sais “où tu t’en vas” comme tu dis et que tu as atteint un niveau assez élevé peu importe dans quelle technologie, tu deviens assurément très efficace.
Mais un langage ouvert et dynamique comme ruby peut vraiment te faire sauver temps et énergie. Je peux te donner un exemple concret qui m’est arrivé pas plus tard qu’hier et qui m’a évité un beau casse-tête. Avec un langage strict ou tout est fermé et protégé, j’aurais eu à refaire une petite partie du code.
Une fonction qu’on utilisait à plusieurs endroits prenait en considération qu’un champ “id” existait dans l’objet qu’on lui passait. Seul petit problème pour ce que je devais faire cette journée-là, l’objet utilisé (librairie 3rd party) ne possédait pas de propriété ID. Plutôt que de modifier la fonction centralisée testée à fond et risquer de la “briser”, j’ai utilisé le côté “tout est open” de ruby et j’ai ajouté la propriété “id” à mon objet sur le fly. Comme ça, pas besoin de modifier le code source de la librairie 3rd party (ça aurait été très mal) et pas besoin de modifier la fonction globale testée à fond (ça aurait été risqué). Résultat? Une seule ligne de code du genre the_obj.send(:define_method, “ID”) {return self.name} et le tour était joué… the_obj possédait maintenant une propriété ID et la fonction centralisée allait n’y voir que du feu!
Ce sont des petites choses comme ça qui te font dire : Merci ruby.
Et là on parle juste de ruby ici, j’ai pas parlé des avantages de Rails qui lui aussi pousse du même bord afin de te simplifier la vie.
Merci pour ton commentaire!
Frank
Mais en .NET, tu aurais juste à te faire une classe qui herite de ton 3rd party object et ajouter une propriete du nom Id et voila
Voici 3 liens qui parle du MVC avec .NET
http://www.c-sharpcorner.com/UploadFile/napanchal/MVCDesign12052005035152AM/MVCDesign.aspx
http://www.codeproject.com/useritems/ModelViewPresenter.asp
http://www.codersource.net/aspnet_model_view_controller_sample.html
Mais tout ça pour dire que je suis entièrement d’accord avec le fait que les frameworks aident à travailler plus vite et facilite les bonnes pratiques.
Comme je te dis, depuis quelques semaines (2 mois genre) je check pas mal symfony et on a commencé à l’utiliser au bureau et c’est effectivement très très productif!
Tu as bien raison… j’y avais pas pensé à celle-là
Mon exemple devient un peu moins pertinent dans ce cas-là.
Il faudrait que je te trouve un exemple ruby utilisant le “duck typing”. Ça te permet de passer n’importe quel objet à une méthode en autant que ce “n’importe quoi” possède les caractéristiques que la méthode recherche (ce système ne se base pas sur le polymorphisme).
Si je trouve un bon exemple, je vais t’en faire part
Mais pour ça tu as les Interfaces
Je ne crois pas que Ruby soit vraiment mieux que C# ou VB.NET. Je crois que Ruby On Rail est plus productif que ASP.NET sans framework.
Tu vas avoir pas mal de misère à me prouver le contraire avec des examples …
=)
Mais c’est un peu ça aussi. Avec Ruby, j’ai pas à déclarer d’interface, je passe un objet et si l’objet peut faire la job, ça va marcher, point final.
Je dis pas qu’il y a des choses qui se font en ruby mais qui sont impossibles à faire en VB ou en C#. Tout peut se faire comme on dit. Mais ruby étant un langage moins “protégé”, ça le rend moins lourd et plus rapide à développer avec. Pour avoir développer avec les deux c’est ce que j’en ai conclu en tout cas. Libre à quiconque de tirer ses propres conclusions.
Absolument!
J’ai pas encore pris le temps d’essayer Ruby! Trop débordé et les journées n’ont que 24h! Quand j’aurai essayé symfony comme il le faut, après je prendrai du temps pour regarder RoR !
Actually, www.troika-asp.com TROIKA.ASP framework does NOT need .NET to run! It can run on pre .NET ASP platform. And it could be easily ported to PHP too.
Bonjour a tous,
je developpe depuis 4 ans avec .NET (asp, winform) et je commence à regarder RoR.
1 - a priosris .NET 3.0 puis 3.5 devrais etre moins strict et pouvoir ajouter des propriete et des methode aux classes
2 - je crois que le gros avantage de .NET c’est Visual Studio , je ne sais pas avec quoi vous développer, mais quand je regarder les tutos, ou le doc de ruby, il faut developper avec un bloc note, voir au mieux avec emacs et compiler en ligne de commande. ça à une autre gueule avec un visaul Stuido 2005 et je ne parle pas de Orcas (je reconnais que ce n’est aps libre, et pas gratuit, mais c’est un autre débat)
3 - mais j’aimerais vraiement voir ce que RoR apparote de plus que .NET alors n’hesiter pas à m’en parler
4 - enfin les outils autour de .NET commencent à arriver
* Log4NET
* Spring .NET
* Nhibernate / LLblgen (payant mais ce n’est pas le débat)
* et tous les petits (Ndoc, NUnit, FxCop, ….)
y’a t ‘il des équivalents pour ruby ??
bonne journée a vous