This post is long overdue; this isn’t a declaration of intent (any intent was long ago made real), just my reflection about my own path. I left the Python world a long time ago but I never took a chance to say goodbye.
While I had moved on from Python years ago, I felt a certain attachment to it well past then, not quite admitting to myself that I wasn’t coming back. When my proposal for PyCon 2013 was rejected I was frustrated (it was going to be a fun talk!) but for some reason that made me fully realized that I wasn’t part of the Python community anymore.
Python was the first — and I sometimes wonder if the only — programming community I was part of. Coming to Python was a conscious choice. In college I was interested in Scheme and Smalltalk. High-minded languages with interesting ideas, but hard to find practical uses. Scheme was always too underserved by its libraries and sparse academic community. In contrast Smalltalk was productive — it was built by and for people who loved to build things. (More credit here should probably go to Dan Ingalls than Alan Kay — I can sense in Dan Ingalls’s work a real passion for making things, and a pure but unproductive language would not have satisfied him.) But Smalltalk was and is a world of its own. It was culturally and technically pre-internet, pre-open-source, pre-online-community. And despite all the great things about the Smalltalk environment and language it couldn’t fulfill these then-new potentials, even as it tried to adapt. (I wrote a couple posts about this, intended as a sort of sympathetic explanation of why I couldn’t stick with Smalltalk: Where Smalltalk Went Wrong and a followup.)
At the end of my college career (1999ish) I consciously looked for a new home. I flirted with Perl, C, but knew they weren’t for me. Somewhere along the way I came upon Python, and it was good enough that I didn’t look for anything better. I can’t say I fell in love with Python like I had with Scheme and Smalltalk — Scheme was like an opening up of the world after going far beyond what anyone should ask of GW-BASIC, and Squeak/Smalltalk was a deep mysterious world, like coming upon the ruins of an ancient and advanced civilization. Python in comparison was practical — but I wasn’t in the mood at that time to discover, I wanted to build.
And I built a lot of things in Python. I was doing workaday web programming and my enthusiasm went more towards building tools to build stuff than in the building itself. I did build some cool products in those days, not just libraries, but for some reason it’s only the smaller units that I was able to push out. And I found a community in Python.
And I built. Back in the days I contributed to Webware, what felt like a completely different generation of web development in Python than today. I wrote SQLObject, my first foray into a oh-shit-people-are-using-this-I’m-not-sure-how-I-feel-about-that library. But SQLObject explored a lot of metaprogramming concepts that were quite novel in the Python world at that time. At the same time maintaining it felt like a terrible burden. It took me far too long to resolve that, and only once interest had died down (in no small part due to my lack of attention) did I hand it over to Oleg who has been a far more steady hand. This would be a pattern I would unfortunately repeat. But if SQLObject helped the next generation be better that’s good enough for me.
Later came WSGI which excited me with its subtly functional basis. I built a whole web framework toolkit (or a framework for building web frameworks?) in Paste. Few people really understood what I was trying to do with Paste — at times including me. Some people like Ben Bangert were able to see the principles underneath the code, and get them out into the world in the kind of usable state that I intended to enable. (And along the way I sometimes felt like I was doing the same for PJE.) Python web frameworks were a mess back then; ultimately reaching for the crown using a monolithic approach was a more successful technique than trying to build bridges as I attempted with Paste. I’m still not sure what lesson to take from that. Not a general lesson, but more understanding the landscape. And understanding what you can bring to a problem, and who you can bring with. I feel like I’m only now really understanding the importance of vision combined with a diverse group of skills and perspectives, and I have even more to learn about how to actually assemble and coordinate the right group of people in the right environment to succeed.
Somewhere around here I feel like I reached my 10,000 hours of Python coding. I wrote WebOb, taking the lessons of Paste and a better intuition for library design. I still think it’s the best mapping of HTTP to Python. Other libraries include more aspects of web development in their scope, or have better documentation, and more users, but when viewed with a particular lens I’m still very proud of WebOb. And it’s been an important building block in a lot of people’s explorations into building a web framework. Other libraries from this period are lxml.html, smaller things like WebTest, ScriptTest, MiniMock, Tempita, perhaps the over-ambition (or just mis-ambition) of Deliverance. That period felt like a clearing out of my system, unloading a bunch of ideas.
But for whatever reason my most successful tools were virtualenv and pip. These were never my greatest passions, or even close. They were about: (a) fixing personal annoyances in deployment (virtualenv), and (b) getting people to stop fucking whining about Setuptools and easy_install (pip). I’m not sure whether I blame the uneasy success of these tools on broad appeal, or that they are in a sense user-visible tools and not libraries, or that I didn’t like doing them because no one liked doing them and so there was a vacuum waiting to be filled.
And then my last project, Silver Lining. It was early on in the devops revolution, an attempt to think about what a generic container for web applications might look like. It was in a sense going deeper down the hole of virtualenv and pip, but with an aim to build a full product and not just a set of eclectic tools. No one cared. And I only cared a little — I cared because it was completing some ideas I’d long had about deployment, because for a certain kind of web application development it felt nimble and reliable, because it removed or automated tasks I didn’t like to do. But I didn’t care, no more than I cared about virtualenv or pip. I’d gone down a path that was about code and technical design, but if I stepped back it was unexciting.
And when I did step back there wasn’t anything in Python that excited me. Python was doing great, my interest had nothing to jumping on or off bandwagons. Python is doing great — better than ever (minor bumps with versions aside). But I think in my mind I’d always imagined I could build up just the right toolset, and using that toolset create the product I actually wanted to create — what exactly that product was, I don’t know, but with the right tools I imagined I could move fast enough and confidently enough to find it.
Sometimes when I’m feeling particularly excited about an idea, like really excited, I have to take a break. I need to calm down. Try to wrap my head around the ideas, because I know if I push forward directly that I’ll just muddle things up and feel disappointed. No, I don’t know that is true: maybe I don’t want to have to confront, in that moment, that the idea is not as cool as I think it is, or as possible as I think it is. But often I do step back into the problem, with ideas that are more mature for having thought more deeply about them. In a sense I think creating tools and libraries was a similar process: I felt too excited about creating something great, because I worried I’d muddle everything up, or afraid I just couldn’t pull it off, and so I stepped away and would work on tools.
I always directed my attention to the web, even if I got bogged down in the server. Somehow I skipped native GUIs, even as a user. But pure data processing without consideration for what you do with the data felt unexciting. And ops — that’s just the worst. I was, and am, a true believer in Free Software; and I was, and am, a true believer in the web. That is, I don’t see either as simply a means to an ends. But not for the same reasons, and I can believe in a web that isn’t open source, and open source that isn’t for the web. And yet writing it down I realize I don’t care about open source that isn’t for the web.
When I stepped back Python no longer seemed relevant to the web, at least not the part of the web that interested me. The tools I had built were no longer relevant either, they were not the tools with which I could realize my ambitions. The database-backed website, or the dynamic-HTTP-based web application, templates and deployments, anything you’d call “REST” — none of it seemed like the future, and whatever this vague thing was that I’d been looking for, I wasn’t going to find it there.
Somewhat before this I also joined Mozilla. But it would be backwards to say that Mozilla induced this change in perspective, that it tempted me away from Python. In fact I would have had a much easier time of it if I had just stuck with doing Python backend stuff at Mozilla.
The last few years of transition have been a struggle. With Python and the server I knew what I was doing. I was good at it, I felt competent. I could construct an opinion with confidence about all kinds of design questions. I was respected and my opinion would be listened to. I’d put in my 10,000 hours, I had achieved mastery.
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. To find programmers that consider all that knowledge transferable (for instance). I don’t know what to make of it — my less forgiving self thinks these people have never known what real mastery is. I don’t think it takes another 10,000 hours to get mastery in a new language and environment… but it definitely takes some thousands of hours, some years of hard work. I only now feel like I’m getting close.
But also whatever language partisanship I had is gone, and won’t come back in the guise of a new favorite language. This shouldn’t be confused with a disinterest in language. I still get as annoyed as ever by “use the right tool for the job” — the bland truism meant to shut down critical discussion and engagement with the tasks and choices in software engineering, replacing it with a weak passionless technical fatalism.
I suppose it is the platform that I am drawn to now before language. And the browser seems like the most interesting platform, not because it’s novel (though it is, it’s a runtime like few others), but because of how concrete it is, and of course how relevant it is to… anything. And the browser is no longer just the servant of a server, I prefer now to think of the browser as an independent agent, connecting to services instead of servers. Obviously that doesn’t describe a great number of running web sites, but it’s the model I see for the future, and a better perspective for understanding future architectures.
Still this only addresses which direction I’m looking towards, I still have to walk the path. I don’t want to get caught up in the weeds again, building tools for something I never manage to make. Right now I think I’m on to something in the area of collaboration, first with TogetherJS and now I’m thinking bigger with a new experiment. But while I feel like I’ve reached some competence in executing on these projects, programming is only one piece of bringing forward a larger vision. I still have a lot of learning to do, skills for which I haven’t put in the necessary time. How to recruit support, how to manage the project, how to negotiate between feasibility and user value, how to negotiate compromises in strategy and design. And collaboration itself is a whole domain of expertise. I’ve learned a lot, I can do things, but I am definitely not yet experienced enough to choose to do the right thing in these areas. And at this moment I’m worried I won’t have the room to learn these things, it feels like time is running out just when I’m pulling stuff together. [Update: time ran out]
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? Even as I find my technical footing I am still adrift. And so it’s hard to say goodbye. So instead I’ll say, Pythonistas: until we meet again. Maybe I’ll meet some of you over here.
You know you are one of those who got me interested in Python. Whole of the Python community is waiting for your return :).
Your contributions to python have been extremely important. Thanks for all the good work, and best wishes.
Thanks for everything you've contributed to the Python community over the years.
Couldn't agree more with your comments about mastery and transferability, and about the difficulty (and importance) of mastering "how to negotiate between feasibility and user value, how to negotiate compromises in strategy and design."
Hope to still see you around sometime!
I'm saddened to hear that you haven't found the JS community yet, either. My guess is that, over time, there will be enough Pythonista ex-pats and dual citizens to make `bower install community` a reality. Community matters in a way that transgresses our tools, languages, operating systems. Connections between people strengthen the technical ecosystem, not the other way around.
Your words are truly inspiring, and for someone (among the many) who uses tools build by you on a daily basis, I only have this to say. Python is what it is 'cause of people like you, and I hope that us and the future generations of Pythonistas can make you proud and build beautiful and useful things.
Ian, thanks for taking the time to write that up and for all your
amazing contributions through the years. I used SQLObject back in the
day, and we were probably trying to wring practicality out of PJE's
ideas around the same time. :-) I'm so glad you decided to go in search
of something that sets your mind on fire rather than fearing the sunk
cost, going nowhere, and getting burnt out. I look forward to seeing the
excellent things you continue to make!
That was cold, but i agree.
Yes, it was cold, but I wrote a similar statement above, and he is simply accurate.
IMHO, the difference with his comment over yours is that, he didn't attack the author, he was just exposing his opinion nothing more.
You realize there's these things out there called "concluding paragraphs", right? They are usually found at the bottom of the article. You might just want to stick to those if you're too lazy to actually read things instead of insulting someone for taking the time make some thoughtful remarks about his choices in programming.
We can see the concluding paragraph just well and nothing in it invalidates the statement made by digler99 in any way.
Of course it doesn't because his experience is subjective. This post might have been boring for you and others, but it was interesting for me and others. I didn't expect just facts or maybe some sketch of why Ian left the Python community. I liked the fact that he also shared his feelings with us.
Ah, but you see, some of us are interested in *why* a change occurred. Think of it like a commit message on his life.
What a pity that somebody held you down and forced you to read a post on somebody's personal blog!
I'm sorry dude. Maybe my upvote will make up for it.
I downvoted him to cancel yours out. You don't deserve that crap, but you're too good a person to stoop. I am not. :-)
You were one of those who inspired me. Thanks for all your great work!
I was gonna suggest Go to him too.
Really good article, I understand the drifter feeling.
I don't think I truly understood the importance of being part of a technical community until recently. I spent ten years working with Plone. Wherever I happened to be working at the time, I was often contributing code back. I think I learned more from the feedback I got from the community and the architectural discussions with them than anything else.
Shared experience provides a common set of reference points from which one can discuss technical problems or implementation strategies. Without it those discussions are not nearly as satisfying. Even though I suspect I won't go back to coding Plone again, I know there are many others in that community who are going through similar transitions. I want to see what they're doing now, and tell them about my new experiences. I go to conferences now more for the people and the hallway discussions than the talks.
I suspect it won't be quite the same, after all we won't be working on the same thing so the possibilities of collaboration are much lower. But I still hope to find some sense of shared experience so we can still learn from each other.
Python will miss you, thanks for your contribution to Python community :D
Python is one of the best languages IMHO, but it doesn't run in the browser.
P.S. ES6 fixes the OOP issue and the brackets and semicolons can be fixed by writing CoffeeScript (which will also fix the OOP issue for you right now if you don't want to include Traceur or wait for ES6).
Interesting link, but didn't work for me (probably some Silverlight issue). Anyway, I was thinking more along the lines of <script type="text/python"> and full DOM integration :) Although minifiying Python won't be easy, but if you can just serve it gzipped...
What about http://www.brython.info ?
Now that's more like it! :D Bookmarked, awesome!
Obviously there are a few things that you wouldn't be able to mimic, and maybe the speed would suck, but I find the concept incredibly interesting... and useful for some of the projects I have in my mind. I haven't run out of Python things yet ;)
And to Ian - yes, until we meet again!
Brython. Try that. Although it's an awful argument to say that "it doesn't run in the browser".
Yeah, somebody already suggested Brython - it's very cool, even supports HTML5 :)
Why is it an awful argument? You could get away with a JS interpreter for Python like Brython for small projects, but if you're making a game or something demanding, JS is the only way to go.
I never thought I would see this, but then again, the only real constant is change.
Best wishes Ian, no matter what paths you take.
Now stop goofing off, and get back to work!
Java Script blows nuts. Sucks for you breh breh.
Too bad the language suck so much more than Python. I think a really easy to use Python to JS compiler would be good for the Python Community. You know, something that makes it super easy to use ajax-functionality, some animations and handling websockets.
Thanks for writing this Ian. The phrase "right tool for the job" has always bugged me for similar reasons, but I never nailed it down like you just did. Thanks especially for the care you have put into open source for the Web. I still find it remarkable that either exist at all. Maybe they couldn't exist without each other? They certainly are fragile things that need more people like you to care about them.
Well said. I'd also venture that it tracks the development of a programmer (or builder, or whatever description you prefer); feeling that you're developed in an area in a way that makes it less exciting, and moving to other areas that get the juices flowing. It can happen with languages, methodologies, technical focus (e.g. user-facing web vs. OS kernel ), even business areas.
OK, Google Translate makes me think the first two are well wishes, but then things get a bit weird: "Laugh urine, give praise" and "Urine bar, urine it"
Well……in Chinese,“永垂不朽” means a great man died, here it's a kind of wisecrack. And the "笑尿了" means a man laugh too deep that to control himself, it's for the "永垂不朽"……
Although I was never as much of a pythonista as you Ian, I too have made the same transition. It is not an easy thing leaving a comfortable paradigm to explore. I salut you for doing so, and for saying so, making me feel not quite so alone in this here boat.
I also want to thank you for all your amazing python work and for the tools that made my life easier! I especially want to thank you for WebOb which inspired me to build my own framework(s) and pushed me to a new level of interest and understanding of both the web and software stacks in general.
Thanks for all the fish, and good luck!
Welcome to the fall of Python. I can hear all young amateur pythoners
crying because its toy language was criticized. Always the same history
with fashion languages. Besides, I found Python community one of the
most agressive closed-mind and negative about criticism. They simply cannot admit
something is wrong about its choice.
On the other hand, Smalltalk
community preserves its humility and great quality through the years by
having a colossal developer selection process: Becoming an Smalltalker
requires great dedication, deep knowledge of object-orientation and
great modelling. And by the way, Smalltalk has a new implementation
called Pharo which is making great success lately, you should check it
As one who exit'ed the Smalltalk community after 20 years of hard investment, and have been mostly pragmatically pleased with Python as a landing spot, I couldn't disagree with you more. Especially about Pharo. Everytime I download the latest, and play with it, I ask myself "this is what we threw the commercial smalltalk's out the window for???"
To each his own I guess.
Hey Ian, thanks for writing this post. I've always enjoyed your work and watching you do it.
I've gone through a similar transition in the last few years myself. I like to call myself a creative developer. I have been a web developer for about as long as I've been a Python developer. And where the creativity is at these days is on the client side more so than the server side, so that's where I went.
Back before I even heard of Backbone let alone the wave of Angular and Ember and React and such, I started Obviel, which was to me a fascinating exercise in porting sever-side web framework concepts to the client and seeing what happens. It hasn't gained much traction, but I learned a lot, and I think there are some ideas in there that I want to do more with.
Strangely enough I find myself back writing Python code again, trying to express what I've learned about web frameworks in a last 15 years or so in a compact form, Morepath. I'm excited about it. But I expect I'll be pulled back to the client again soon, and there are ideas I want to explore, so that is good. And Morepath is a web framework that intends to serve the modern rich-client web application that I've gained much experience over the last years.
"stay hungry, stay foolish"????... you've made a lot of awesome things, now go and have some fun... run Ian Run!
Thanks for sharing your experience...
What about coding in brython (http://www.brython.info/), or maybe working to bring python to the browsers (to replace or complement JS)?
Thanks for sharing, Ian. And thanks for being a great source of inspiration for the Python community and contributing so much really useful stuff that nobody else wanted to tackle.
Thank you so much for this soulful and inspiring article.
Why don't you check it out at the next (7th) European Lisp Symposium?
I just feel you would be an outstanding creator with Common Lisp, and you are getting so much closer to it now.
...or Clojure and ClojureScript. That community feels like it has more of a BDFL (Rich Hickey) vibe to it, supported by luminaries analogous to Tim Something-with-many-dashes-that-I-don't-know-how-to-emulate-ly Peters, Andrew Kuchling, some guy who works at Mozilla and just recently took on a huge responsibility, and so on... I haven't gotten very far in, yet, and I still use Python on the back end, but I'm pretty sure Clojure is where I'll put my next 10k hours.
Ian, thank you for all the work that you've done for Python. You've basically made our lives better. I admire your productivity and it's something I want to emulate. Best of luck with what you're doing next!
It's kind of sad to see you say "goodbye, Python", but I've never felt that language partisanship should peg us down to one place, be it a community, a job, or whatever, so I can't just but wish you all the luck. You've been an inspiration for many years and that will always be appreciated.
Dear Ian, I come from a completely different world: creative fiction (although I do love to code on the side). However you post made complete sense to me, and I applaud you for walking the new path. Sometimes our medium of expression fails to live up to the way we want to express ourselves, and you have to make a hard choice. Keep making beautiful things, sir - I wish you all the best.
Thank you, Ian, for everything you've done for the Python community, even—especially—when it was things like virtualenv and pip that needed fixing because they weren't fun to fix. I've learned a lot from you, before, while, and after we overlapped at Mozilla.
pip & virtualenv ROCK, thank you for those tools!
You created a legacy. We use your
tools everyday. An army of Pythonistas maintain and improve your various creations.
I think that you are welcome back if you ever want to, but if you don't, that's cool too. You have left your mark.
I too abandoned the Python community--or more properly it abandoned me. The Python community has done horrible things and it all came to a head with "Adria Richards." Python now has to be "gender neutral" and it's more about including Women than solving Big Computer Science Problems.
Politics and "women's rights" have NOTHING to do with Computer Science. The Python community has become watered down in the name of "inclusivity" and "diversity". That's why I left it.
if the Python Community was just a Computer Science Club then I wouldn't have had much interest in it. If you had just wanted to use Python as a tool that would be fine, and none of the community standards or any other stuff comes with Python-the-tool. Since I have a hard time imagining that any of these efforts had any material impact on you, I suspect that you are just fishing for reasons to feel some sense of righteous indignation.
A terrible loss to the community, I'm sure
I read it and it was worth it! Your contributions have been inspirational to Python and open source in general. I think what you're touching on is that developers, not languages, are the community. People are what matters, not the tech under the hood. Those relationships last a lifetime and will be remembered more than any syntax no matter how many hours of mastery you sought in seeking perfection.
I am not particularly fond of Node.js, though for some real-time stuff it has advantages. Mostly I've been deemphasizing the server in my work and concepts, going out of my way to keep logic on the client. I've really enjoyed creating and using minimalistic servers that don't need to be updated to extend the functionality of a project.