
Saying goodbye to Python - ghc
http://www.ianbicking.org/blog/2014/02/saying-goodbye-to-python.html
======
davidw
> But also whatever language partisanship I had is gone, and won’t come back
> in the guise of a new favorite language.

This sentence is worth pointing out as a good attitude. I think the healthiest
place to be is using tools you like, but able to appreciate the good bits of
other systems.

For instance, as long as I'm not actually working with it, I can appreciate
the idea that PHP made it very easy for a lot of people to do _something_ with
the web, something that otherwise they might not have been able to do, because
it is very easy to get started with. That is worth something, and worth
thinking about for those who are building tomorrow's languages.

~~~
jcroll
I like how you squeezed in that subtle dig at PHP. It's like you like the idea
of being language agnostic just as long as it doesn't involve languages you
don't like.

~~~
Pacabel
I don't read that as being a "subtle dig at PHP". There are many very
legitimate reasons for a developer, especially one well-versed in many
languages, to not want to use PHP.

And his position is very reasonable. He doesn't seem to care if you use PHP,
if it works for you. But he doesn't like using PHP himself, for whatever
reason(s), and wishes to not use it. His abstinence from PHP doesn't prevent
or affect your (or anyone else's) use of it.

~~~
oafitupa
That's not what he's saying. He's basically saying that it's 0K to use PHP if
you _can 't_ use anything else because you are not smart enough. And you won't
even achieve great things, you will barely be able to build _something_.

PHPers like me know very well this kind of trolling (after years of suffering
it), but we are also way above it already. Sometimes we want to reply, but
then we remember that this trolling is born from bitterness and lack of
success, so we just let it be.

~~~
untog
I'm not sure you'll be able to read his post properly while you do it through
the chip on your shoulder.

~~~
oafitupa
Or maybe it's you the one who can't read it properly? Else explain to me what
he meant by this: "PHP made it very easy for a lot of people to do something
with the web, _something_ that otherwise they might not have been able to do"

~~~
fzltrp

      a lot of people != all php users.
    

Actually

    
    
      a lot of people != the majority of php users.
    

You're reading a bit too much in what OP wrote. I have beern an avid php
programmer several years ago, and still like it very much by the way.

------
schmichael
In the past 6 months I've switched from a mostly Python job to a mostly Go
job, but I think I'll always consider myself part of the Python community.
It's a positive and vibrant community.

Ian's participation in the Python community has been - and will continue to be
- missed. I hope he brings the same wisdom and humility to the splintered
Javascript community he brought to Python.

~~~
MrHeartBroken
If I may ask, how should I find Go jobs?

~~~
schmichael
I'm terrible at job hunting and didn't know how to answer when people would
ask me how to find Python jobs. There's only one method that has worked
consistently for me:

\- I met a founder from Lytics (my current mostly-Go job) at a Go meetup.

\- I met a couple of the founders from Urban Airship (my previous mostly-
Python job) at a Python meetup.

So I guess going to meetups is what works for me, but I don't think that's a
general solution. Sorry I can't be more help.

~~~
nl
_going to meetups is what works for me, but I don 't think that's a general
solution_

Personally I think it's a pretty good solution.

~~~
schmichael
Keyword being "personally." :)

There are lots of people for whom it probably doesn't work. It takes a certain
personality, and it really helps to be a white male. Minorities are often
treated differently at meetups, so I don't want to presume that my experience
in a privileged position applies universally.

~~~
nl
Fair point - and yes, it's a pity that minorities are treated differently
(although it does work both ways a bit, too[1]).

I suspect those difference also apply in formal interview situations - and
maybe even more difficult to overcome there. Maybe meetups have better
potential to overcome negative sterotypes because people actually get to know
each other a little?

But white male here too, so what do I know.

[1]
[http://www.slate.com/articles/technology/technology/2014/01/...](http://www.slate.com/articles/technology/technology/2014/01/programmer_privilege_as_an_asian_male_computer_science_major_everyone_gave.html)

------
myth_drannon
Python's scientific ecosystem is really exciting, that's where I want to spend
more time. Pandas,numpy,scikit-learn...

Just anecdotal/personal opinion on JS and Python communities. I went to Python
and JS meetups. Python meetups are usually people talking about different
real-life projects they are building with Python with maybe 10% of talks about
new frameworks/language. the one JS meetup I went was people comparing and
arguing which frameworks/library is better and should we stop using this one
or that one, which one is messy .. etc, talking about things that were solved
long time ago in AS/Flash/Flex

With JS I'm afraid to spend on a hyped framework that will be obsolete in 6
months.

~~~
untog
That's because much of JS is new. Server side is new. Even client side MVC is
relatively new. Python has a long, long history that means its frameworks are
much more stable. In time I expect JS to be the same.

~~~
gaius
No it isn't. Off the top of my head, 1996? I remember it as LiveScript. JS has
been "mainstream" longer than Python has. This was written in '04
[http://www.paulgraham.com/pypar.html](http://www.paulgraham.com/pypar.html)

~~~
untog
That's why I said "much of JS" and called out server side JS specifically.

------
joshuacc
> It’s oddly common to see people talk about how a programmer can pick up
> something new in the matter of a few days or months.

I see this and it bothers me as well. Sure, picking up new language syntax
isn't that big of a deal, but to become reasonably proficient at solving
problems with a programming language takes a huge investment of time and
energy.

~~~
schmichael
I would say learning the syntax and features of languages like Scala and
Haskell _is_ quite hard (at least perhaps for people of C++/Java/C#/Python
backgrounds).

Languages like Go and Python take very little time to learn the language
features even though mastering any language is quite an undertaking.

~~~
paulrademacher
What's really hard is not mastering the language, but software development.
That's the reason top, super-productive coders can jump between langs.

~~~
edwinnathaniel
Super productive coders can't master languages within a few weeks.

They probably learn some of the syntaxes but they don't learn the idioms and
proper ways of using the languages.

I've never met a developer who can pick up a book and be a master in
relatively quick. They can hack something up but by no means the code is
acceptable.

The only reason we believe someone can jump between languages quickly is
because we _NEVER_ see their work and we _NEVER_ put them under microscope. We
just believe the hype.

By acceptable I refer to the following criteria:

\- Proper test automation

\- Proper documentation (in-language doc)

\- Proper idiom (that means logging properly, proper design pattern suitable
for that language, using proper libraries/standard-lib correctly)

\- Proper SCM (that means build, dependency management, folder structure, code
style, code analysis tool in-place, etc)

Anything less than that is a sign of either the language ecosystem is not
mature enough or the developer has yet reached the mastery level (or simply
not enough data to measure the level accurately).

~~~
falcolas
Of your four points, the first two strike me as generic development skills
(knowing what and when to test, knowing what and when to document), and the
forth is just reading the docs and following their instructions once. Proper
idiomatic language use is probably the only thing you mentioned that is
language specific.

~~~
edwinnathaniel
Writing "proper" javadoc takes time. It has tons of keywords and annotation to
make it look consistent like any other "professional and good looking" javadoc
out there.

For example: if one is deprecating a method, there are a bunch of proper
JavaDoc ways to do this (starting with the @deprecated annotation, not to be
confused with another @Deprecated annotation, don't forget to state since
which version this method is deprecated, etc etc).

It requires a high level of discipline and knowledge of the javadoc idioms.

[http://www.oracle.com/technetwork/java/javase/documentation/...](http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html)

Occasionally, one have to insert HTML too...

I know C# support similar thing.

------
wbond
It is interesting, I experienced a similar feeling to:

    
    
        I don’t want to get caught up in the weeds again, building tools for something I never manage to make.
    

when moving away from PHP as my first language to master. I built large swaths
of library code for projects that I was going to build - from encryption code
to a diffing algorithm, a full-featured ORM and more. I did learn a ton along
the way - the most useful being the protocols, algorithms and other things I
interacted with in PHP.

However, I ended up moving to other languages for what I was "making". First
using Python, but now also venturing into native development using C. I guess
part of it was wanting to not have limitations on what I could build. PHP was
limiting in dealing with crappy hosts, Python less so, but the sky is the
limit with C.

~~~
frik
What kind of limitations?

Everything you can do in Python, can be done in PHP too. For long running
processes you can use libevent, and for threading (web server) you can use
libcurl. You can write native C or C++ extensions for both Python and PHP.
Facebook's HHVM PHP JIT VM is very scalable and there is PyPy (Python JIT).

~~~
wbond
I specifically mentioned dealing with crappy hosts. PHP's biggest strength is
that it is available to almost everyone for cheap. Unfortunately most of those
cheap hosts don't support sane extensions. And you certainly aren't going to
get custom ones on there. Or even a recent version of PHP.

Python has some similar issues. Ensuring that an end-user application written
in Python is going to have access the the appropriate version of Python with
the packages you need is still a challenge. Asking Joe user to install
virtualenv and Python 3.3 is not viable.

Currently I'm working on an app that uses Python, but is written in C and
embeds Python for some of the cross-platform components.

------
j_baker
This is exactly where I'm at. If I had to characterize Python with one phrase,
it's "blandly practical". Sure, Python gets the job done, and it's not a
horrid mess like some languages. But at the same time, it's just kind of
there. There just aren't any projects out there that I want to write (day job-
wise or spare-time wise) that scream "I _have_ to use Python for this!". There
are no new exciting projects or libraries using Python that I have to check
out now.

Javascript has Angular JS that I want to play with. Go is shaping up to be an
efficient _and_ easy-to-use server-side language. Rust is C++ that doesn't
want to make me gouge my eyese out. But what about Python? Apart from
throwaway command-line tools, I've got nothing.

~~~
rwallace
I've more or less reached the opposite conclusion for similar reasons. That
is, yeah, when I'm programming in Python, I don't really notice the language
at all. There's a definite flavor to the experience of programming in C++ and
another to the experience of programming in Java and another to Haskell, the
particular kinds of things I have to do in each case to get the language to do
my bidding, but when I'm programming in Python, the language is almost
transparent; the experience is almost entirely about the program I'm trying to
write, the problem I'm trying to solve.

And that's exactly what I want, these days.

~~~
kamaal
>>when I'm programming in Python, I don't really notice the language at all.

When you program in any language of your expertise you don't really notice the
language at all.

~~~
collyw
I moved from Perl to Python. I noticed Python was harder to do "clever stuff"
with - the sort you would see in Perl one liners.

My code is a little more verbose in Python, but I notice I don't shoot myself
in the foot by trying to be too clever too early, and ending up with a tangled
mess a few days later.

------
ludwigvan
First, let me preface by saying that I use Python and JavaScript in my day to
day work. There is a personal side to this issue, that is, his mastery of
Python, but I believe the issue is more related to Python.

Python as a language is uninteresting. It has no novel or exciting ideas other
than its readability. Python 3 has shown nothing of importance to upgrade as
the rate of adoption shows.

It lacks the flexibility of Ruby, general appeal of JS, philosophy of Clojure.

Maybe its boringness might be of value to some, as it has reached steady
state, but I believe that if you are going to be where the puck is going to
be, you need to consider languages other than Python. I am betting on JS and
Clojure.

~~~
maheart
> It lacks the flexibility of Ruby, general appeal of JS, philosophy of
> Clojure.

This feels like a cheap shot. What flexibility, general appeal, or philosophy?

Flexibility: Python is very flexible (I'll say dynamic), but not at the
expense of clarity. This is a (IMO, correct) decision made by the Python
community.

General appeal: What does this even mean? The only reason JS has a general
appeal is that it ships with every modern browser.

Philosophy: What philosophy? Purity? Simplicity? Python is a pragmatic
language ("get stuff done") while keeping simplicity in mind (although I
definitely wouldn't argue that Python is as "simple" as some languages, it's
simple enough)

~~~
kamaal
>>Python is very flexible

As a design goal Python aims to be as little flexible as possible to enforce
its design goal of making code readable at any and every cost.

In fact its so brittle merely small time changes to a print statement has
caused nearly a 8 year backward incompatible ecosystem which is still catching
up.

I can't image what would happen when some new ideas have to bought in the
language to keep pace. Keep going through migration cycle every 6-7 years to
handle backward incompatible changes.

The story till now was some how okayish. Basically Python was playing a catch
up game with Perl to get the popular features Perl has. It still hasn't
succeeded completely, and yet has a heavily fragmented ecosystem between 2.x
and 3.x dev branches. I don't see anything new going into Python any time
sooner.

Python is as little flexible as it gets.

~~~
maheart
>> As a design goal Python aims to be as little flexible as possible to
enforce its design goal of making code readable at any and every cost.

I think that's a very narrow way of defining flexibility.

By your definition of flexibility, C++ must be really flexible because its
template system is Turing Complete and you can do whatever you like!

By the same definition, Scheme must be a pretty inflexible language because
its syntax is extremely limited (simple).

Python is flexible in that:

\- it can be used in many different fields (because libraries exist for
science, web -- you can find a library in Python for pretty much any task you
can imagine).

\- there a number of different implementations of the language to suit your
needs (CPython, Pypy for speed, now Micropython for embedded). It is
(somewhat) easily ported to other platforms (e.g. ARM, JVM, .NET).

\- the language still allows you to do imperative, OO and to some degree
functional programming. I don't think allowing Python to do everything under
the Sun makes it "flexible".

\- Python's dynamism (look at something like the library "sh"), ducktyping,
keyword arguments make it flexible.

\--

Final point: I think using Python 3's print statement as an example of Python
being inflexible is dishonest. Python 3 had major internal changes made to it.
The backward incompatible jump between 2 and 3 (AFAIK) was more a choice and a
requirement. Guido has recently (just last year) said that he will never do
anything like Python 2 -> Python 3 transition again.

------
nickbauman
What I love about python is that technical people use it who don't code and
yet they do amazing stuff. Geologists. Astronomers. Mathematicians. Petroleum
engineers. It has a wild, wide crazy community that's rare elsewhere.

~~~
danbmil99
I have a theory that one reason Python is gaining so much ground lately in
scientific computing (over tools such as R) is because

1) it is literally almost impossible to write unreadable code in Python,

2) most scientists are terrible programmers,

and

3) when a project matures, "real" programmers get involved, and the fact that
the code is readable (and therefore amenable to maintenance and extension)
vastly increases the chances that the project will succeed.

~~~
cryoshon
I'm a scientist and also a terrible programmer. What's your hypothesis on why
this is the case?

~~~
danbmil99
Scientists know how smart they are, and assume that programming is mainly
about being smart. But it's not -- it's much more of a learned skill to become
a really good programmer. It's something you have to focus on and respect as a
goal in and of itself, not just something any smart person can muddle through
on logic and intuition.

------
jkldotio
"Squeak/Smalltalk was a deep mysterious world, like coming upon the ruins of
an ancient and advanced civilization" is really spot on. If you have some
spare time and get a hold of a copy of
[http://en.wikipedia.org/wiki/Croquet_Project](http://en.wikipedia.org/wiki/Croquet_Project)
it's just amazing what they were doing. Unfortunately it looks like the
project site is down for the count.

As for the rest, it seems very confined to the use of Python as a web
programming language, if you try to use many web languages in domains outside
of the web you will be writing a lot of things from scratch. Python has
multiple competitive web offerings but they form part of a huge landscape of
offerings in many areas few can match. I'd go so far as to say the top two
languages for "is there a B+ or higher viable library for this random task"
would be Python and Java. Clojure's promise is to swiftly address the flaw in
all other Lisps by incorporating the Java ecosystem.

Programming language research gets an order of magnitude more coverage on HN
than it does inside Computer Science as a discipline. It's a simplification,
which has nitpicks people can use to derail the argument, but broadly speaking
algorithms - in terms of practically being able to import and use them as well
as to practically be able to talk and reason about them with other people -
are vastly more important than language syntax.

~~~
stefantalpalaru
> if you try to use many web languages in domains outside of the web you will
> be writing a lot of things from scratch

Not only that, you'll also realize that you're wasting CPU cycles and RAM.

------
danohuiginn
Ian contributed a huge amount to the python world, both in code and in general
community presence. But I can easily imagine him contributing just as much, or
more, to Javascript. Good luck to him!

------
jpdlla
Thanks for all the awesome work, Python and the community wouldn't have gotten
to where they are without people like Ian.

"There is no community that created Javascript like the Python community
created Python. Python comes from the internet in a way Javascript does not;
Javascript was built for the internet, but Python was built on the internet."

~~~
camus2
He means JS was forced down our throats.

Hadnt it been for the browser noone would be using the mediocre language.

~~~
liviu
Yeah, sure. Nobody use node.js. /sarcasm

------
sdegutis
> _Anyway, that’s where I am now. No longer a language partisan, unclear of
> what community I am even participating in, I am less sure how to identify
> and self-identify myself. How do I describe myself now?_

Actually I'm really glad for this conclusion. I've always thought it kind of
counterproductive and useless to label ourselves as "Rubyists" or
"Pythonistas" etc. Yes, we may use that language, we may even prefer that
language over another, but it's not for the sake of the language itself, but
because of what it allows us to do. So when a better replacement comes along,
that kind of attachment to a language is only going to delay our adoption of
it because of basically nothing but sentimentality. So yes, I prefer Clojure.
But I also prefer C# and Objective-C and JavaScript. I'm not in any of these
communities, I'm just a problem solver.

~~~
film42
As a student, this is exactly what I think when a potential employer asks,
"What language would you like to be interviewed in?" I love the power that
each language brings to the table. I'm fluent in the language I'm using to
solve a problem, but when I'm done, it goes back on the shelf to collect dust
until I need it again. I just wish there was a way to convey that without
looking stupid.

PS: I'm looking for an internship! Any suggestions?

------
dinkumthinkum
My recommendation to people interested in computer science is to not get too
obsessed with individual programming languages.

~~~
jrochkind1
This article/memoir is not about someone interested in computer science (or if
they are, it's not about that interest), it's about someone interested in
software development and building things.

~~~
dinkumthinkum
Ok ... Thanks for that.

My recommendation to people interested in software development and "building
things" is to not get too upset and wrapped up in a particular programming
language.

Also, my recommendation to people interested in software development is to
study computer science, unless you just want to make WordPress templates, I
guess.

------
sdegutis
> _I suppose it is the platform that I am drawn to now before language_

I found this to be true about my experience too. I wanted to write GUI apps
for Mac OS X so I embraced Objective-C. Now I want to write GUI apps for
Windows, so I'm embracing C#. I guess it's just a really nice bonus that C# is
awesome. Same thing when I have to do front-end work, I just use JavaScript
(or ClojureScript if it's a big enough project).

------
bayesianhorse
I skipped the post, mainly because I somehow wanted to know what greener
pastures the author had found...

Then he revealed Javascript. Even though I am putting out a ton of javascript
and javascript-targeted languages, I found that a little disappointing!

------
awakeasleep
For as interesting and smart as this article is, it was really jarring and
annoying to see Malcolm Gladwell's ideas branded upon it everywhere.

It's so frustrating to see "Science-style bullshit" taken as gospel by
intelligent, creative, and usually critically thinking people.

~~~
6cxs2hd6
I didn't get the sense that he intended "10,000 hours" as a pseudo-scientific
assertion of fact.

It's a useful poetic phrase to express the observation that _mastery takes
time_. Sure you could call that a Captain Obvious observation. However he used
it in opposition to the idea that great programmers can master a new language
in a few weeks. Since that idea is so popular, its opposite apparently is not
so obvious.

~~~
zimpenfish
"mastery takes time"

Also requires talent (or skill, genetic disposition, etc., call it what you
will)

------
_random_
Hopefully we are approaching the slope of the Python hype:

[http://en.wikipedia.org/wiki/Hype_cycle](http://en.wikipedia.org/wiki/Hype_cycle)

~~~
keypusher
Python has some problems but I don't think "hype" is one of them. It's almost
25 years old, and it's been in widespread use for at least the last 10. Hell,
we've got 100kloc+ python codebase that probably qualifies as legacy already,
how hype is that?

~~~
erikb
Actually I feel especially because of HN that Python got a boost like no other
language in the last five years. It even reached our slow Berlin to recognize
it as a potential alternative to Java. So I guess the hype in the rest of the
world must have been quite huge.

~~~
drawkbox
Languages have long cycles. Python (1991), Ruby (1996), and Javascript (1995)
inception dates are not that far apart. I also believe Python use has
increased tremendously with HN, myself included. Ruby during the same time
also fueled that (2005/6 ish), reddit being built on it possibly also sparked
that.

A native language takes even longer sometimes, Objective-C just really hit
it's stride with Apple/Next integration and the iPhone but it was made in
1983, same year as C++. Both with very different spikes/waves of interest.

From this we can see strict/native type languages in the 80's, more
dynamic/scripted languages in the 90's, the ones in the last decade maybe are
still in contention. All of them are pretty much products of their hardware
environments at the time.

~~~
keypusher
Reddit was originally built on Lisp, but was later rewritten in Python. It was
never built on Ruby.

------
awjr
I have to say this rings true for me. Long term involved in one language and
feeling that the world is moving on. JavaScript feels exciting.

~~~
mercurial
There is a lot of innovation in Javascript, especially since the advent of
NodeJS. But compared to Python itself, the language has little to be excited
about.

~~~
Pacabel
What you describe is "innovation" only in a very restricted, local sense. The
developments we see within the JavaScript community today are just them
catching up with where Python, Perl, C, C++, Java and other languages were
years or decades ago.

Non-blocking IO is nothing new. Event-driven network app development
frameworks are nothing new. Even using the same language server-side and
client-side is nothing new. We were doing that in the 1980s when we wrote our
clients and servers in C, and in the 1990s when we used C++, and in the 2000s
when we used Java.

When it comes to JavaScript, what's seen as "innovation" is usually just the
language and ecosystem desperately trying to catch up with where everybody
else was many years in the past.

~~~
mercurial
> When it comes to JavaScript, what's seen as "innovation" is usually just the
> language and ecosystem desperately trying to catch up with where everybody
> else was many years in the past.

That's true up to a point, but you're being a bit uncharitable. I'm thinking
of a couple of solutions specifically:

\- npm [1], which I hear a lot of good things about, while this is definitely
not the case about many languages-specific build systems/package managers

\- react [2], which is a nice approach to DOM manipulation (if not, maybe, the
first of its kind)

And obviously, more and more languages compile to JS nowadays, or are on their
way there.

1:
[https://www.npmjs.org/doc/cli/npm.html](https://www.npmjs.org/doc/cli/npm.html)
2: [http://facebook.github.io/react/](http://facebook.github.io/react/)

------
frik
Is someone saying goodbye to Ruby? (in favor of Go, Rust, Node.js, etc.)

I would appreciate such blog posts/comments too.

------
stox
I never thought I would see the day. Best wishes Ian, no matter what path you
take.

------
jrochkind1
there's a bunch of smart under-appreciated observations in there.

------
zerop
I said goodbye to python for performance.. otherwise its great :)

~~~
pekk
What kind of code are you writing?

~~~
zerop
My app is CPU intensive, need to accept and process large data, index
it..searching index quickly.. It was quick to implement it in python. but I
got better performance in java.

------
cyphunk
tl;dr version:

> And when I did step back there wasn’t anything in Python that excited me.

------
michaelochurch
I'm learning Python more deeply because I think it's a good "Learn X" language
for the various X's I want to pick up over the next 5 years. If you learn,
say, web programming in Clojure, you're going to be encountering a lot of non-
mainstream concepts (see: Pedestal, which is cool as fuck but different from
how most people program on the web). That's great, but it's sometimes easier,
first, to learn the basics in an "uncomplicated" language. Python's an all-
around B+ language in which one can pretty easily learn the basics (except in
the browser, where JS is dominant).

That said, for a production system I'd prefer Clojure (or possibly Haskell).
It can be almost as fast as Java, has proper lambdas, and doesn't have mutable
state in unexpected places.

------
squirejons
you gonna pass that thing around, or are you gonna bogart it all night?

