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…
Woaw… Que d’erreurs dans cet article.
Ruby a rbenv maintenant, qui est léger et très simple à mettre en place également…
C’est complètement faux, Mac OS X intègre Ruby par défaut également…
Réponse aux deux remarques: depuis combien de temps ?
http://www.googlefight.com/index.php?lang=en_GB&word1=rbenv&word2=rvm
Parce que tout son argumentaire, c’est basé sur le fait que Ruby est plus innovant que Python.
Et “que d’erreurs”, pour toi c’est deux erreurs ?
On notera aussi que ces point n’invalide pas le message globale de l’article. Pas mieux en stock ?
Ça me rappelle la comparaison avec PHP précédente, les utilisateurs Ruby sont plus cool, mais comme le dit mon pote Babe, Ruby c’est pour les gays sous Mac :)
Rien de péjoratif ou d’homophobe hein , c’est juste que comme tu dis, Ruby, ça blink, ça shine, ça sparkle, mais ça reste web-centrique, un peu comme Php d’ailleurs dont on peut dire plein de mal aussi d’ailleurs.
Python a ce coté langage à tout faire.
Mais si je veux de la perf, je fais du C, si je veux du code sécure et réutilisable je prend Java, si je veux du web, je fais du PHP (je parle pour moi perso là).
Python, il perf moins que du bon code C, moins sécure que Java et je kiffe moins que Php pour le web.
Mais c’est comme en cuisine, tu as des couteaux spécifiques pour chaque utilisation, mais tu peux toujours utiliser ton bon vieux Opinel qui ta jamais lâché et qui est pas idéal partout mais fait sont taf.
Roooooo. C’est pas le message non plus hein. Ruby c’est un bon langage, des bonnes libs, de l’innovation, du dynamise. C’est un article de défense, un peu mordant certes, mais pas d’attaque. :-D
je me propose pour la traduc
=
Mdr :p
Halte à ce troll que je ne serais voir !!
Comme toi je n’ai pas trop aimé cet article, un peu prétentieux mais au final se basait sur la vision :
Python => stable et se renouvelle rarement
Ruby => instable mais se renouvelle sans cesse
Notre ami Bodo semble préférer le ruby, avec les avantages/inconvénients que ça implique. Petit jugement de valeur mais ça reste gentil.
Au contraire, je n’aime pas le ton du début de ta réponse ou Python > Ruby dans tout sauf le web. Je passe sur le virtualenv != rvm, on pourrait continuer avec easy_install/pip != gem.
Je suis d’accord avec l’idée, mais Ruby est quand même utilisé ailleurs que dans le web.
Un autre point est la documentation : la doc python est 1000 fois plus sexy que celle de ruby. C’est un des avantages de Python, mais inutile d’en conclure que Ruby ne vaut rien.
Et Python est de 5 ans plus vieux que Ruby/Java, ça ne fait pas avancer le débat …
Que conclure ? Qu’il vaut mieux se soutenir mutuellement, comme @marcchantreux l’a si bien présenté lors de la dernière PyCon FR avec l’acmeism que répondre à un appeau à troll.
PS: une réponse en anglais aurait été préférable ;)
C’est vraiiiiiiiii, mais c’est tellement tentannnnnnnnnnnnnt.
Par contre si, dire que Python est plus vieux de 5 ans, c’est important: 5 ans d’historique, c’est cumulatif sur l’historique. Ca implique plus de libs, mais aussi plus de code à migrer.
Quand à dire que ruby est utilisé ailleurs, certes. PHP aussi. Mais qui a codé un UI en PHP ?
L’idée n’est pas de dire “ruby est caca”. J’aime ruby. J’aime les rubistes. Mais ce ne sont pas les pères de l’innovation. Et l’instabilité à un coût, ce n’est pas juste un état d’esprit.
@morgoth
génial ^^
Max, il est temps de t’attaquer à la traduction de la doc Python.
(en commençant par les trucs les plus tordus…parce que ABS(…)on connait) Morgoth trouverais ça plus constructif..
Je verrais bien un site communautaire, une sorte de pythonfrancopédia.
Ouais j’ai un sens inné pour la traduction… Je vais commencer par la petite porte…
Plus sérieusement, il me semble que l’afpy c’est exactement lancé dans ça: la traduction de la doc Python. Pour les aider: #afpy sur irc.freenode.net
Je vois vraiment pas en quoi RVM est complexe à utiliser, une ligne pour l’installer avec le script fourni, ensuite
rvm install
etrvm use
…“Réponse aux deux remarques: depuis combien de temps ?”
Aucune idée pour rbenv, mais ruby dans macosx ça fait au minimum depuis 2009, date à laquelle j’ai eu mon macbook.
Quelques problèmes avec RVM:
– il override la commande cd
– il a besoin d’un fichier de config
– il install son propre ruby dans son coin (wtf ?)
En fait, rmv est à ruby ce que buildout est à Python
Ouais et le mythe de la communauté agile qui s’adapte bien vite, c’est gentil mais redmine quoi…
But ? What the fuck is that ?
#troll
Si l’on veut avoir le meilleur langage par rapport au fait que ce soit installé par défaut sur les machines. Dans ce cas, c’est Perl qui gagne :
– Linux
– OSX
– Et même Windows !
Je propose que tous ces gays qui font du Python et du Ruby fassent du Perl !
Désolé, c’est vendredi.
Bon maintenant pour répondre plus sérieusement.
J’avais trouvé l’article initial très intéressant (ou alors je l’ai un peu trop lu en diagonale).
J’ai fait du (plus ou moins dans cet dans ordre) Bash, Perl, Python et maintenant j’utilise Ruby.
Je suis passé sur Ruby par rapport à quelques limitations en Python.
Mais il reste quand même un super langage.
Pythonistes arrêter de vous comparer aux autres langages. C’est effectivement le meilleur langage au monde – pour VOUS.
Pour MOI c’est Ruby. Et d’autres préfèrent du .Net.
Arrêtons de nous taper dessus :
http://www.lacantine-rennes.net/2012/10/devcamp-1-mercredi-11-octobre-18h30/
:-)
Je sais que tu as raison. Mais c’est comme la clope, c’est tellement dur d’arrêter !
http://sametmax.com/apres-on-dit-que-je-troll-sur-le-monde-de-ruby-et-de-nodejs/
C’est un peu le problème de l’obsolescence programmée avec les nouvelles versions de tout, qu’elles soient faciles à installer ou non. Je ne ne suis pas un programmeur mais un scientifique qui utilise Python pour ses traitements. L’important pour moi c’est le résultat et non la programmation s.s.
Je veux une solution à un problème? je vais d’abord chercher si quelqu’un ne l’a pas déjà traitée avant de me mettre à programmer et je constate simplement que Python a pratiquement des modules pour tout faire, qu’ils fonctionnent bien, et que je peux les utiliser sans problème.
La majorité de ces modules sont faits pour les versions 2.x, de même que la majorité de mes scripts qui tournent bien.Je ne vois donc pas pourquoi je devrai passer mon temps à tout transformer en version 3.x pour faire plaisir à des “puristes” (à ma retraite ou si j’y étais vraiment obligé)
Quant à Ruby…
Même si le langage était meilleur que Python, plus beau, plus performant, plus tout quoi, le problème vient de sa diffusion et des librairies disponibles.
Dans le domaine scientifique,Python est partout soit de manière autonome, soit comme langage de script pour de nombreuses applications, pas Ruby. Les librairies Python sont faciles à trouver, celles en Ruby, il faut vraiment chercher, surtout si elles sont spécialisées…
J’ai aussi des collègues qui travaillent encore sur des versions 2.5, d’autres sur des versions 2.6 et d’autres encore sur des versions 2.7, qui sont très contents sans se tracasser sur le fait qu’ils ne sont pas “à jour”…
Alors, l’obsolescence programmée dans mon domaine, non merci
Marrant, cet article ne parle pas du parser des deux langages. ^^ Avec Ruby, beaucoup d’expression peuvent être misent sur une ligne sans pour autant être dégueulasses du genre
puts "foo" if bar
Après ne parlons pas des parenthèses dès qu’on doit appeler une méthode. Avec Ruby, il faut parfois aider le parser (genre sur les méthodes avec des arguments multiples) en mettant quelques parenthèses, mais sur les méthodes sans arguments c’est juste pas possible. Moi Python me gonfle à ce niveau là.
Après on pourrait également citer l’impossibilité d’utiliser certains caractères comme le “?” pour les méthodes de prédicats…
Il en va de même pour les tabulations ; je pense qu’on passe déjà suffisamment à chercher les bugs. Avoir des IndentationError ça gonfle au bout d’un moment et si je veux ne pas indenter mon code pour une raison ou une autre, je fais comment ? Alors oui ça oblige les débutants à utiliser la bonne manière de faire toussa toussa mais de toutes façons, le débutant ne fait jamais un code réellement propre et est-ce qu’il compte redistribuer son tout dernier Hello World sur Github sous license MIT ? Je ne pense pas …
Pour revenir sur le sujet rvm/virtualenv, je voudrais juste dire qu’aujourd’hui il y a de bonnes alternatives à rvm du genre rbenv, rbfu ou ry ; eux ils envoient du double poney et n’override pas cd ou rajoute des trucs inutiles.