PROJET AUTOBLOG


Sam et Max

source: Sam et Max

⇐ retour index

Réponse à l’article “Ruby -vs- Python” de Bodo Tasche

jeudi 4 octobre 2012 à 16:44

C’est pas encore vendredi, mais je ne  pouvais pas laisser passer ça. Petite réponse à Bodo Tasche, affûtez votre english car j’ai la flemme de traduire sa prose (si quelqu’un se propose, il aura droit à un tampon :-p).

Ruby and Python. Two languages. Two communities. Both have a similar target: to make software development better. Better than Java, better than PHP and better for everyone. But where is the difference? And what language is “better”? For the last question I can say: none is better. Both camps are awesome and do tons of great stuff. But for the first question the answer is longer. And I hope to provide that in this little article

Is the difference in the toolset around the language? No, I don’t think so. Both have good package managers, tons of libraries for all kind of stuff and a few decent web frameworks.

Heu… si. Il y a une énorme différence.

Ruby a RVM, un truc enorme et très difficile à mettre en oeuvre. Python a virtualenv, un truc léger et très simple à faire passer. Conséquence ? Une grande partie des rubistes n’utilisent pas RVM et leurs projets souffrent de problèmes constant de compatibilité. Combien de fois j’ai vu des gems install planter à cause de ça…

Et combien y a-t-il de RAD pour faire des applications en Ruby ? Ca influe sur le nombre d’applications desktop écrites en Ruby.

Combien y a-t-il d’outils pour facilement interfacer Ruby avec d’autres technologies ? Python est utilisé massivement comme langage d’extensions à cause de ça (Sublime Text, Blender, Nautilus, Inscape, etc).

Quant aux libs. On utilise Ruby pour quoi en dehors du Web ? Développement de jeu ? Sur tablette tactile ? Simulation scientifique ? Application desktop ? Très peu. Alors que Python est utilisé pour tout ça. La raison est justement le large panel de libs. Python a beaucoup, beaucoup, beaucoup plus de libs que Ruby.

Youhou ! Pour accéder à Internet, on utilise un ordinateur plein de trucs qui ne sont pas sur Internet ! Pour servir un site Web aussi !

L’écosystème, c’est la moitié de l’intérêt d’un langage. Je ne retire pas à Ruby le mérite de la qualité du sien: il est innovant, dynamique, sa communauté est fantastique. Mais on est loin d’avoir dans Ruby le dixième des outils et libs qu’on a en Python. C’est pour ça que Mac embarque embarquait Python par défaut et pas Ruby. C’est pour ça qu’Ubuntu est massivement codé en Python et pas en Ruby. Ca fait toute la différence.

I think there is something else that is way more important. The culture.

+ 1. Et Ruby en a une excellente. Faites un bisou aux gars de 37 signals.

Okay, now what is the difference in the culture? It is pretty easy. Python folks are really conservative and afraid of change, Ruby folks love the new shiny stuff even if it breaks older things. It’s that simple. But it has huge consequences.

Ce n’est pas la seule différence, mec. Les rubistes sont vachement plus sympa, d’une manière générale. Les pythonistes que je connais sont généralement assez blafards. Compétents, mais pas funny fun. Et les rubistes sont plus actifs socialement, du coup: plus d’events, plus d’articles de blog, plus de vidéos… Et ça, c’est un gros plus pour Ruby.

Mais d’un autre côté, Python a la culture des comptable: du code lisible, et de la documentation. Et comme c’est un peu mon job de lire le code 500 fois par jour et de fouiller dans la doc, c’est très important pour moi. Les docs Ruby, parfois, c’est vraiment une grosse blague. Regarder dans le code source n’est pas un bon palliatif. Une doc indique une manière officielle de faire, une manière figée, stable, qu’on va pouvoir utiliser et supporter sur des années. C’est important.

One you can see for example in the adaption of Ruby 1.9 vs Python 3. Both new versions did tons of breaking changes. A lot of code needed changes to run on the new plattform. In the Ruby world the transition went pretty quick. In the Python world it is very troublesome. Some Python people even say that Python 3 is broken and all energy should be focused on the 2.x-branch of the language. The Ruby community saw the opportunities. The Python community only saw the update problems. Yes, there have been update problems in the Ruby world, but we found an easy way to fix this: isitruby19.com. A simple plattform that showed if the gem is ready for 1.9. And if it wasn’t and the gem was important, it got fixed with pull requests or something similar. And the problems went away fast.

Ouai mais tu vois (tu me permet de te tutoyer ? en anglais on s’en fou de toute façon…), c’est vachement plus facile de tout péter quand on a pas deux OS majeurs qui se basent dessus. Je sais pas si tu as déjà essayé de faire upgrader un repo complet de milliers d’apps open sources, mais ça prend du temps.

Oh, et Python est là depuis vachement plus longtemps que Ruby. Python était même là avant Java. Chaque corps de métier à un sacret paquet de code à faire migrer, et ils sont pas tous en lean management super agile mega scrum mode, eux. Les biologistes qui utilisent Python pour faire leurs simulations depuis 10 ans, ils ont pas que ça à foutre d’upgrader leur code. Pour eux la prog, c’est pas “Fuck yeah, new features, I’m going to touch myself on Vx and migrate”. Pour eux c’est 7 ans de scripts d’analyse de génome à se retaper alors que ce n’est qu’un outil ennuyeux à leurs yeux.

Both models of thinking have pros and cons. The Python world is more stable, you can update your django installation without much troubles. But that also means new technology is only added very slowly. The Ruby world loves changes.

La différence majeur entre Rails et Django ? Rails: chaque version stable possède des gros trous qu’ils bouchent au fur et à mesure, parce que c’est pas grâve, on est flexible et adaptif mec, on release early et often. Django, en version 0.96, tout le monde l’utilisait déjà en production car le truc était rock solide.

Alors oui, y a moins de features. Mais ma plateforme ne m’explose pas à la gueule. Et pip installe fonctionne.

So much that most of the “new stuff” in the Python world was tested in the Ruby world first.

Ca c’est vrai. Merci d’ailleurs. Mais encore une fois, on parle d’une catégorie de libs qui se limitent au dev Web. C’est le même débat que “Mac est innovant”. C’est certain, quand on a une archi et 3 modèles à supporter, c’est plus facile de faire un truc innovant: on a pas à supporter de compatibilité.

We love changes so much that the Rails core is build around that idea. You can easily change nearly everything and extend everything. Most of the new stuff the Rails Core Team is testing right now for version 4 is available as plugin for Rails 3. This is pretty interesting if you love new things, love change, and love playing around with stuff. If you don’t and hate the idea of breaking changes, you maybe are better suited with the Python way. But don’t be afraid of breaking changes. They are all pretty well documented in the release guides. It’s not voodoo.

Si. C’est carrément du voodoo. Le monkey patching des objets built-in, c’est la porte ouverte à toutes les fenêtres, et quand deux libs le font en même temps, BOUM.

Et le nouveau, c’est marrant. Je suis pour le nouveau. Max m’engueule tout le temps car je veux essayer les trucs nouveaux. Mais pas instable. L’écosystème de Ruby est instable. Si les langages étaient des OS, Java serait Debian, Python serait Ubuntu LTS, Ruby serait Ubuntu RC. J’utilise la dernière Ubuntu pour mon desktop, parce qu’avoir Unity qui plante une fois par jour ne me dérange pas. Mais sur le serveur, je prends la version la plus stable, parce que j’ai pas besoin de <blink>, j’ai besoin de <strong>.

I for myself love the Ruby mindset. Something like Rails or Asset Pipelines or all the other things would not be possible if we are stuck with “no, don’t change that, it works pretty well that way”. Someone has to be the leader. Someone has to play around with new ideas. Yes, some ideas won’t fly, some are removed pretty quickly. But at least we tried them. Yes, I know that some people prefer the conservative way. If you consider yourself to be like that, you should at least try Python. I stay with Ruby.

C’est vrai qu’on ne fait rien d’innovant en Python: programmation du rasberry py, simulation neurale, facilitation du parsing d’arguments, création du meilleur protocole d’échange en P2P au monde… Ah, par innovation tu veux dire une énième lib Web ? Pardon, je croyais qu’on parlait de programmation au sens large du terme.

Dans ce cas: Twisted était là bien avant event-machine (ou même NodeJs). Wep.py était là avant Sinatra. Virtualenv était là avant RVM. Zope était là 6 ans avant ROR avec son ORM et son langage de template.

Et oui, vous avez bien amélioré tout ça. Et c’est génial. C’est comme ça que ce doit être. Mais arrêtez de vous prendre pour l’élément indispensable de l’innonvation de la programmation Web moderne. Vous n’êtes pas tous des Jason Fried. Et là plupart des choses que l’on fait aujourd’hui on été inventé par les mecs de Lisp, Haskel et Smalltalk de toute façon, qui eux même se sont inspirés de l’amont. On giant shoulders, tout ça, tout ça…