
Ruby vs. Python - bitboxer
http://bitboxer.de/2012/10/03/ruby-vs-python/
======
pajju
This whole article is in essence comparing Django to Rails and not Python to
Ruby.

Recently I spoke with Jacob Kaplan Moss in Pycon India, we had a great
discussion wherein he appreciated the Rails philosophy much for its fast
innovation. He even said that Django has in fact taken a lot of good things
from the Rails world + other web frameworks too.

I agree that - Django development philosophy + community is somewhat
conservative, slow in adopting and trying newer things.

But both are excellent frameworks. Use the right tool for the right job!

But the title is misleading - it should have been Ruby web vs Python web
Patterns.

~~~
freyrs3
Yes, very little of what he said applies to anything but the Django side of
Python. Compared to say, the numeric side of Python where I'm constantly
seeing rapid innovation these days (Numba, Scikits.*, Numba, Pandas, GPU
Runtimes, etc).

~~~
pajju
Yes that was my point. Its only the web part of Python.

The numeric side of Python projects like - Scipy, Numpy and other projects
like Cython, iPython have constantly blown my mind every-time I speak to some
physicist and mathematician. Many of the greatest minds are using Python tools
in scientific computing and its constantly delivering innovation with
contributions coming across the globe.

------
andybak
I was interested in the piece until he used the unnecessarily value-laden term
"afraid of change". He could have said "wary of change" or something even less
judgemental.

He also exaggerates the differences to make a point and comes over as a little
too fan-boyish on the whole matter.

I do think there's a core of truth in the observation but he glosses over
times where the Rails Team's attitude to change has caused genuine pain to the
community as well as times where innovation has come from the Python web-
framework community.

~~~
thelastpoet
Especially this bit:

"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."

Pythonistas apparently don't like new stuff, change, or hacking around with
things. How could anyone with any knowledge of both Ruby and Python write
something like that in seriousness?

~~~
dmorgan
> _Pythonistas apparently don't like new stuff, change, or hacking around with
> things. How could anyone with any knowledge of both Ruby and Python write
> something like that in seriousness?_

Because he has seen it in the wild, and is evident in the long term behaviour
of the two communities?

Pythonistas might like change and new stuff in the things they program WITH
python or in other aspects of their lives, but they don't seem to appreciate
it as much in their language, libraries and frameworks. Surely not as much as
Ruby guys do.

See the quote from the Python core developer above: "We're a conservative
community by nature - we generally don't like blazing trails when it comes to
language design."

------
doctoboggan
This meshes well with the article posted here yesterday written by one of the
python core developers.

Nick Coghlan on the future of python[1]:

> We're a conservative community by nature - we generally don't like blazing
> trails when it comes to language design. Instead, we're happy to let others
> rush ahead, letting them figure out where the pitfalls are, while we see
> what we can learn from their experience and integrate into Python's syntax,
> standard libraries, or the Python Package Index.

I think this is one of the main reasons the scientific community seems to use
python more than ruby. I work for a scientific computing company that uses
python and and almost none of our clients are even considering the move to
python3.

[1] [http://www.boredomandlaziness.org/2012/10/pythons-future-
glo...](http://www.boredomandlaziness.org/2012/10/pythons-future-global-
perspective.html)

------
nnq
...isn't the fact that Python's ecosystem being not so web-app-centric, with
lots of libraries being design of any use, not specifically in web-apps (think
classic desktop apps, scientific computing...), automatically leads to a
slower release cycle, and the whole dependency web slows things down and keeps
them stable?

...isn't it that web and mobile tech is moving at a faster pace than most
other software (don't think this is good thing though...), and the whole Ruby
ecosystem being web-centric stimulates the kind of mentality that keeps people
wired and always upgrading, refactoring?

It's obvious that there's more in the Python world than web-frameworks ...but
not so obvious that it's more in the Ruby world than Rails (not saying that it
REALLY isn't, just the outside look of a pythonista)...

~~~
SoftwareMaven
It is telling that he only mentions web frameworks and leaves out what is
arguably the most important Python library: NumPy. That alone tells me he
doesn't _truly_ understand the whole Python ecosystem and, therefor, it's
culture.

But I would agree that, in general, the Pythonistas I've interacted with are,
in general, a bit more conservative ( _not_ afraid of change, just more
willing to weigh the cost of change for its benefits) and rubyists are a bit
less conservative (not jumping every time you say "squirrel"), but these
differences are, in the end, quite small in the grand scheme of things.

~~~
dmorgan
> _It is telling that he only mentions web frameworks and leaves out what is
> arguably the most important Python library: NumPy. That alone tells me he
> doesn't truly understand the whole Python ecosystem and, therefor, it's
> culture._

"Most important" for who? I've used Python since 1999, and have never used,
had a need for, or even installed NumPy.

It's mainly important in the scientific community, not to most enterprise,
startup and independent python developers out there.

~~~
nnq
Good developers move around. I may have done scientific computing a few years
ago and be on "web startup" now, or vice versa... And being able to move
around and still use the tools you love is F AWESOME, let me tell you!

...but the side effect is that when moving around and keeping the same tools,
you tend to also bring one mindset from one area to another, so a bunch of
pythonistas hacking on a new web framework may have brought with them small
pieces of mindsets from the desktop apps world, systems an ops or even
scientific computing, and this is GOOD, IMHO, though it may make certain
rhythms of development seem "out of tune" with the speedy "jump and run
towards the newest squirrel" style of learning or development...

------
j45
The smartest people I know, use tools incredibly well. They make amazing
things with Ruby. They make amazing things with Python. They make amazing
things in other languages. I'm blessed to know all of them.

None of them would share the opinion in this article, either by the offender,
or the "reflector" on the differences.

I don't mean to be harsh. This article taught me nothing. It just spoke about
one's interpretation, preference and using such a position to create a
difference between us and them.

Pontificating on perceived differences fuels ignorance, intolerance, and more.
These kinds of wars of fanatical religious interpretation are neither
productive, unifying or helpful.

No language+framework will make you a superhero. Customers and users don't
care what the hell we code in. Developers are a little selfish perhaps, when
when we focus more on optimizing our own development experience, and
hallucinating that there may be some "trickle down" effect to users being
delighted, amazed and empowered because we automated yet another thing in our
development stack.

No language+framework will make up for one's inability to find and connect
with a need that customers have and would pay for, or tolerate being sold over
to advertisers.

Most tools are pretty capable, most all have pretty have capable frameworks.

~~~
dmorgan
> _The smartest people I know, use tools incredibly well. They make amazing
> things with Ruby. They make amazing things with Python. They make amazing
> things in other languages. I'm blessed to know all of them. None of them
> would share the opinion in this article, either by the offender, or the
> "reflector" on the differences._

Well, then you don't know the right people, because lots of Python and Ruby
devs would agree with the premise of the article. I've seen it stated lots of
time from Ruby devs (including top dogs) and you can find quotes from Python
devs too with the exact same opinion (Ruby: new, changes, Python: stability,
conservative change).

> _No language+framework will make you a superhero. Customers and users don't
> care what the hell we code in._

No, be we do.

Also isn't this "no language+framework will make you a superhero" counter to
the whole "beating the averages" and "blurb language" idea?

All other things being equal, a better language/framework WILL give you a
competitive advantage.

------
teilo
Wording aside, it's all about change.

Yes, the Python / Django community has a strong emphasis on backward
compatibility - don't break things unless you have a very good reason. It
works, and it works well, particularly in business where the app itself
_isn't_ the business.

I can understand wanting the cutting edge when the app _is_ your business,
when you eat, sleep, and breathe it, and your bottom line is tied to the app.
But when you are just trying to get the work of the enterprise done,
consistently, day after day, you don't want your tools to break just because
you need the latest security updates, or would like to take advantage of new
framework features.

This is something like comparing Gentoo to Debian. I've run both as enterprise
servers. Today I use Debian, and won't use anything else, for fairly obvious
reasons.

You will have to excuse the author for not being up on Python 3 developments,
since that's not his world. That is actually proceeding very well, and is
getting very close to critical mass. For the bulk of new development, I could
switch to it today, particularly with the release of 3.3. In fact, once I'm
sure that 3.3 is stable (a couple point releases), I will probably begin using
it.

~~~
bitboxer
Django is not ready for python 3.x right now. The support for 3.x is in "beta"
right now. I hope when the final 3.x support is released, a lot of more
traction is going on towards 3.x . The current state is pretty bad :(.

~~~
teilo
My use of python in the enterprise is way bigger than the Django world.

That said, it's not that bad, even with Django. I think you over-estimate the
current state of affairs. Six will be bundled with Django 1.5. By 1.6, I am
confident that Django will be 3/2 compatible. Until then - I'm not hurting by
running 2.7. Seriously, it's just not a problem. No angst.

~~~
bitboxer
If I overestimate it, why do all python devs I talk to still use 2.x and say
that they can't use 3.x because all kind of problems?

~~~
SoftwareMaven
GVR said to expect a five year migration. We are four years in. Major projects
like NumPy have had support for a while. Pyramid supports it. Django has good
enough support that library authors can start migrating their changes. Python
3.3 took out a major source of 2/3 conflict by putting u"" strings back. It
would not surprise me to see a lot of newly updated code be 2.7/3.3 or greater
as a result, but it will hasten the conversions.

All in all, with a year left in the migration path, I'd say we are doing OK.
The VM is in good shape for production use and the libraries are coming along
well.

I think the biggest danger is all the hand-wringing about how everything has
gone wrong, who didn't read the fine-print to start.

~~~
dmorgan
A question I have is how the duck can a language like C# introduce TONS of
changes from 1.0 to 5.0, including major syntactic, semantic and library
features, and still be widely adopted, whereas Python has to have a "five year
migration" for what are essentially some minor language changes.

~~~
teilo
They were not minor changes, though they might appear to be so from the
outside looking in. The unicode changes alone are significant enough to
require a significant refactoring of existing code - due to the monkeying
around that was required to properly deal with Unicode in 2.x.

------
bglusman
I'm still reading the article, but as a Rubyist who only knows a bit of
Python, my impression is that the comparison of 1.8 vs 1.9 to Py2 vs Py3 is
kind of unfair to Python... 1.9 wasn't THAT big a change in most respects,
only a few backwards incompatible changes I recall, whereas my impression is
Py3 has some pretty big changes in more substantial ways, including but not
limited to syntax (Ruby 1,9's only syntax changes that come to mind were the
JSON-style hashes and the stabby-lambda syntax, neither of which broke old
syntax).

That's not that important except that it's the crux of his argument that
Python is more conservative, so can anyone who knows both better expand on how
substantial the changes were for an existing codebase in Python vs Ruby?

It also seems if Django still can't work on Py3, that's a huge deal breaker
for many, as Rails has been able to use 1.9 since... I dunno, early 2.x?

~~~
yxhuvud
There are a few more syntax changes, like [foo bar] now have to be [foo(bar)]

------
bobwaycott
While I think the author mischaracterizes the Python community as "afraid of
change", there is a strong point in how rapidly the Ruby community--including
really big projects like Rails--adopt the latest language release versus
similarly large Python projects still not adopting Py3k after 3.5 years.

When working with anything Ruby-based, I hardly ever have to wonder whether or
not Package X runs on the latest Ruby. With Python, it's been a somewhat
default expectation with any given Package X that it won't run on anything
greater than 2.7.

This is rather disappointing because there's so much to like about Python3,
and I think it'd be much nicer to know that the community was supporting the
latest releases by keeping great software up-to-date with the language.

------
jayflux
"Python folks are really conservative and afraid of change" huh? Im still new
to the language but I've seen many devs/companies embracing Python 3. _

~~~
bitboxer
From :
[https://www.djangoproject.com/weblog/2012/aug/19/experimenta...](https://www.djangoproject.com/weblog/2012/aug/19/experimental-
python-3-support/)

> Does this mean that Django is ready to use with Python 3? Not yet!

Yes, there are devs/companies embracing python 3, but not enough :( . As I
said in my article a few people think it would be better to throw python 3
away. I don't understand why.

~~~
JulianWasTaken
Most developers I know are upset about the amount of unnecessary work that
porting their code to Python 3 causes, and vent that justified frustration (or
just don't port). A few are upset over the direction Python seems to be going
in.

I don't know very many who would classify their opinion objectively as "we
think it would be better to throw Python 3 away".

------
pejoculant
I'm not really sure that this explains it at all. For one, there are sites
similar to isitruby19.com - such as onpython3yet.com. What seems more likely
to me is that python 3 was not as compelling of an upgrade until recently
since a lot of stuff was back ported to 2.7. I don't know as much about ruby
1.9, but it is also seems possible that python 3 was simply more disruptive of
a change.

------
dagw
Is there anybody with insight into both camps who could care to comment the
relative amount of working need to port a major ruby library like rails from
1.8 to 1.9 compared to porting a major python library like numpy or django
from 2.7 to 3.0.

------
SoftwareMaven
The negativity over Python3 has stretched my patience with the community, even
though I truly love the language. I'm not looking for my day-to-day language
to change on a daily basis, but I don't want it to stagnate into Java, either.
I feel like there is a large camp in the community who would prefer that.

------
throwa
A nice simple observation that i hope would elicit matured discussions instead
of a language flame war.

------
jenius
I found this type very difficult to read, and added these styles which made it
much cleaner. If you add these to your site, people will love you <3

.entry-content p { font-size: 15px; line-height: 1.7em; color: #555; -webkit-
font-smoothing: antialiased; margin-bottom: 1.4em; }

------
ddellacosta
I've been a Ruby (Rails) developer for about 4-5 years now, I guess. After a
job change about a year ago, I've been thrown around to various different
projects--I was mostly doing Sinatra stuff until earlier this year, but about
four months ago I started working with Python (2.7).

I'll say right off the bat: I don't think my experience is really enough to
judge an entire community on. I also feel pretty strongly--as I've read a
bunch of articles on Python from a number of perspectives while learning about
it--that there are a variety of perspectives within the Python community, some
more conservative, some less. In fact, it may be harder to characterize the
Python community with a broad brush than the Ruby community (although I live
in Japan, and meeting some of the old-school Japanese Ruby coders shifts your
perspective a lot...but that's another story).

What I will say, however, is that there are aspects of the community that
correspond very much to the stereotypes. More to the point, there are folks
who use the talking points within the Python community as an excuse for really
foolish practices.

For example, I work with a developer who insists that you should do your
damnedest to use nothing outside of the standard Python library. So he ends up
writing his own web framework from scratch (!) rather than using Django, or
anything really--we are on raw webob/webapp2. This has something to do with,
in his words, "There should be one-- and preferably only one --obvious way to
do it."

He will also turn code into long blocks of if/else statements because he
insists this is easier to grasp; and Python code should be
readable..."Explicit is better than implicit. Simple is better than complex."
Etc. etc.

The Ruby community has its own normative qualities, I won't deny (I...kinda
agree with Zed Shaw: <http://learncodethehardway.org/blog/AUG_19_2012.html>).
But my experience roughly corresponds to the original article's perspective:
Ruby, as a community, tends to have a more forward thinking, "break it and fix
it quick" perspective. And as far as Rails at least, testing is entrenched,
which I think is a good thing. Generally speaking, experimentation is good,
and conservatism can get stuffed.

I don't think Python is a bad language. But I personally think having these
philosophical statements like "the Zen of Python" and "Pythonic" and whatnot
is actually poisonous to the community as a whole. It promotes a certain type
of dogmatic thinking that I think is really harmful--even if the ideas
expressed are correct! It becomes easy for bad programmers (or good ones who
haven't had their ass kicked in a while) to fall back on when they don't feel
like challenging themselves.

Also, this is kind of neither here nor there but functional programming
paradigms in Python suck. Well, maybe 3.x is better, I haven't really checked
it out in depth yet...

(Edit: sorry that last bit about functional programming in Python was a cheap
shot, with no bearing on the conversation at hand...)

~~~
think-large
I know absolutely nothing about Ruby, is it as useful outside of the web
framework as python is? I have come to use python a lot for different
programming needs and as a test before I turn to something like C/C++ any
more.

I have been able to use Python as a middle ground. A place that I can go and
work to make web tools, but also go offline to solve little problems that bug
me.

Is this something that is equally easy in Ruby? I mean, if I was going to go
to the web strictly, I can see comparing the two as apples to apples, but
that's not why I use Python...

~~~
dmorgan
> _I know absolutely nothing about Ruby, is it as useful outside of the web
> framework as python is?_

Ruby is used a lot for sysadmin, systems management stuff (more than Python,
surprisingly, because of good tooling). It's also used for stuff like iOS
development (RubyMotion), and general purpose scripting.

That said, _is_ there anything of importance happening "outside of the web"
nowadays?

~~~
dagw
__is_ there anything of importance happening "outside of the web" nowadays?_

Seriously??? You can't swing a cat without hitting someone singing the praises
of "Big Data". We're at a point where machine learning is moving from academia
out into "real world" in a major way. Statistics, data analysis and simulation
is playing a more and more significant role in more and more fields every day.
Both GIS and BIM, while still pretty niche, are growing rapidly in importance
in their respective fields. I could go on all day. I'd almost (but not quite)
say web frameworks is least important or interesting thing happening these
days.

~~~
think-large
It's really the contrast between these two comments that drove me to Python.
Many things are possible with the web, yet I'm more interested in Machine
Learning and development of applications for phones/computers/adruino/etc. So
I gotta say that Python seems like the tool for me. I also love C and C++ so
that might say a little more about what I like...

------
zachinglis
Another Ruby vs Python post. I wrote a few about 4 years ago, and so has
everyone else. It seems to be a Rubyist/Pythonist's version of a Bar Mitzvah.

------
leh
Nice article mr. schürre :)

~~~
bitboxer
Hehe...thanks :) .

------
Toshio
They are both pretty enjoyable languages. Every now and then I find myself
missing one Python feature when I develop in Ruby (and vice-versa), but
overall I would recommend both of them equally to someone who wants to get
started in web development.

