17 ms·
Saying goodbye to Python
- joshuacc 13y ago> 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.
- StavrosK 13y agoIt's the difference between learning enough to be conversational in a spoken language and learning enough to write a novel in it. Maybe the people who think they can do it in a few months have never written a novel in any language?
- falcolas 13y agoMost developers don't need to ever write novels, and most development tasks do not involve writing novels, for what that's worth.
- Buttons840 13y agoThe people who think they can learn a new language in a few month, indeed, might never write a novel, but they are out there writing crappy code I'll probably have to maintain on day. They're also getting paid well I might add.
- schmichael 13y agoI 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 13y agoWhat's really hard is not mastering the language, but software development. That's the reason top, super-productive coders can jump between langs.
- bsaul 13y agoI would generaly agree on that, but considering the fact that the OP has actualky created pip and virtualenv, i would say that for going that deep in a language and its ecosystem one really need some time.
- dasil003 13y agoI would consider Ian Bicking to be a "top, super-productive coder" and he is saying exactly the opposite. In fact not to put words in his mouth, but I think he would agree with my opinion that you can not master something as broad and unqualified as "software development". You can only achieve the level of mastery he is talking about within a domain your are focused on for many years. Software in the gestalt is just too broad, it is arbitrary, any logical construct you can imagine can be built, but without an application deeply considered your efforts and crafting the perfect architecture with just the right tradeoffs will flounder. It's one thing to be a learned hacker who understands many paradigms, patterns and language features and can whip up a solution to anything in short order; it's a completely different thing to build an architecture that people consider brilliant and becomes a pillar of open-source.
- nostrademons 13y agoI may be putting words in the grandparent poster's mouth, but I didn't read his post as saying you can be an expert at all "software development", but rather that there are certain skills that cut across languages, and then what you see in a specific language is one specific manifestation of that pattern. Learning those skills is both harder and more generally useful than learning any one specific language. Or to put it succinctly, focus on problems, the constraints and forces shaping those problems, and not solutions. Different technologies will come up with different solutions depending on the specifics of their culture and where they're being used, but the underlying problems come up a lot, and understanding where you've seen it before can make reaching for the correct solution a breeze. For example, I was just talking with some Polymer folks last week about how to manage global data that needs to be passed between components. They're largely from a client-side, web, JS-heavy background, but after listening to them sketch out this approach that they'd found very useful, I was like "Oh, it's like a Monostate pattern for HTML." That's made it dramatically easier for them to explain their solution to other people, because C++/Java/C# devs know what Monostates are, and now they can just plug in the syntax of HTML and semantics of Polymer elements into everything they know about why the pattern might be useful, what its drawbacks are, how it fits in with other patterns, etc. One of the sibling comments here mentions how you really ought to know things like testing frameworks, in-code documentation practices, logging, etc. before you can be considered to "know" a language. I'd agree, but I'd argue that knowing that these things exist and why they're important is about 80% of the battle to using them effectively. I can pick up a new language in a few weeks and while I won't be an expert on it, I'll at least know to check out the preferred unit testing framework, read up on the logging APIs, see what the language's philosophy on error handling is, etc. I don't have to start from scratch, because I've worked on projects where these things were important and used a variety of frameworks that all solve these problems in subtly different ways. No, I'm not going to be as quick or elegant as someone who's been working with the language for 10 years - but I'll also be miles ahead of a fresh grad out of college who is just encountering the concepts for the first time and needs to learn the language mechanisms and why they're important. And when technology changes so fast, that knowledge is a lot less likely to go stale than whatever framework is flavor of the month.
- jghn 13y agoI have never bought the party line that learning languages for a new job is difficult, particularly from hiring managers. Multiple times in my career I've taken a job which required a new language, scala most recently. These all involved new frameworks, library stacks, etc. In each of those cases I was reasonably productive after a couple of weeks and productive enough after a month or two. It's not like I was the world's expert in those languages and at that point and I'd probably flub the sort of interview questions focused on the nitty gritty (heck, I've never been good at those regardless) but I knew what I wanted to do, had a good idea of how to do it and a minute or so with google would fill in the rest.
- memracom 13y agoLet's face it, if you practice TDD (i.e. write tests first) and you have access to a browser and Internet connection, why would you need to memorize libraries? Sure you might make a few more mistakes than someone steeped in the platform, but I just don't see it making a difference when you consider the amount of time you need to get up to speed on a new company's quirks and needs.
- danohuiginn 13y agoIan 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!
- wbond 13y agoIt 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 13y agoWhat 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 13y agoI 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.
- jpdlla 13y agoThanks 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."
- schmichael 13y agoIn 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.
- mercurial 13y agoI have a lot of respect for his work, and I also appreciated the tone of the posting. Thank you, Ian, and may your attitude inspire others.
- Zancarius 13y agoI'm especially fond of Ian's story-telling prowess. Not many can capture their own thoughts and experiences as succinctly nor as enjoyably.
- MrHeartBroken 13y agoIf I may ask, how should I find Go jobs?
- yeukhon 13y agoThe same way you find any job? If they advertise they use Go, you know they are interested in Go programmers too. If they don't, still put it in the resume?
- schmichael 13y agoI'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.
- _random_ 13y agoHopefully we are approaching the slope of the Python hype: http://en.wikipedia.org/wiki/Hype_cycle http://en.wikipedia.org/wiki/Hype_cycle
- JasonFruit 13y agoWhy hopefully?
- _random_ 13y agoIt will take its well-deserved place in the range of many other languages available instead of being offered way too often as the only language worth learning here on HN. I hope the JS-madness will calm down in next few years as well. Would be helpful to get some other languages in browser. Maybe Dart/NaCl will help.
- yeukhon 13y ago(didn't downvote you) And the hype of Dart? I think there is always hype. Hype of Go, hype of Rust, hype of Scala.
- sejje 13y agoWho cares? Languages get hyped because people are newly finding them as great solutions to a problem they have. There's no "perl hype" because (virtually) nobody is just discovering it as something new and useful. As python came to have a robust web ecosystem, it started to get a lot of hype as it was getting a ton of converts from perl/php/etc. Now as web tasks are changing, Go's niche is becoming larger, and people are excited to use it where Python was failing them. This will continue forever, most likely.
- yeukhon 13y agoI am not the one judging the hype, FYI.
- 13y ago
- awjr 13y agoI 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 13y agoThere 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.
- yeukhon 13y agoYou are making a connection between the advent of NodeJS and the Javascript language. The correct version the way I see it is that the popularity of V8 and NodeJS makes Javascript more than a in-browser scripting language; now people can write both client and server side applications in JS. The latter doesn't require the language to change; the language implementation has been around for years and now people started to do things outside the original norm.
- mercurial 13y ago> The latter doesn't require the language to change; the language implementation has been around for years and now people started to do things outside the original norm. No, but it certainly has pushed for decent dependency management systems, and has led to more complex libraries.
- Pacabel 13y agoWhat 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.
- davidw 13y ago> 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 13y agoI 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.
- nostrademons 13y agoHe's stating a personal opinion. The only way that becomes a subtle dig at PHP is if you make it such.
- Pacabel 13y agoI 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 13y agoThat'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.
- ludwigvan 13y agoFirst, 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 13y ago> 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)
- ludwigvan 13y ago> This feels like a cheap shot. What flexibility, general appeal, or philosophy? Right, somewhat a cheap shot, that was partly a rant, as I don't have the motivation to explain it fully in a comment. > 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. I would argue that it is not as flexible as Ruby or Clojure for building DSLs. I believe this is not only a decision, but the result of constraints of the language, like significant whitespace or lack of macros. > General appeal: What does this even mean? The only reason JS has a general appeal is that it ships with every modern browser. Exactly, but also due to significance of web, it is drawing lots of talent and there is a cambrian explosion in JS. There is so much energy and experimentation going on right now in JS world. > 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) Exactly, purity and simplicity. Lack of functional programming ideas in Python, broken lambdas, mutable state etc. Clojure tackles one of the major source of complexity, state, head on, while maintaining pragmatism. Python is pragmatic too, I concur, but it is not a language that transforms the way one thinks about programming, it gets the job done, without giving you that much leverage.
- awakeasleep 13y agoFor 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 13y agoI 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 13y ago"mastery takes time" Also requires talent (or skill, genetic disposition, etc., call it what you will)
- stdbrouw 13y agoHe mentions 10,000 hours once or twice, and uses the word "mastery." If you hadn't ever heard of Gladwell, you wouldn't even know he's making a reference to anything at all.
- j_baker 13y agoThis 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.
- aaron-lebo 13y agoSomeone explained "blandly practical" to me in terms of Python being very Dutch, pragmatic yet conservative. I am not versed in Dutch culture, but considering Van Rossum's background, I thought it was an interesting statement.
- pekk 13y agoThis is something about you and what you hear as having buzz, not about Python
- rwallace 13y agoI'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 13y ago>>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.
- dinkumthinkum 13y agoMy recommendation to people interested in computer science is to not get too obsessed with individual programming languages.
- jrochkind1 13y agoThis 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 13y agoOk ... 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.
- myth_drannon 13y agoPython'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 13y agoThat'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.
- CmonDev 13y agoThe sad bit is that a lot of JS frameworks are trying to patch the many language design and implementation flaws (see wtfjs.com) and limitations. Python can evolve at faster speed and change more drastically, while the next version of JS has been promised since forever due to inefficiency of committee and backwards-compatibility worries.
- gaius 13y agoNo 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 13y agoThat's why I said "much of JS" and called out server side JS specifically.
- myth_drannon 13y ago
- jrochkind1 13y agothere's a bunch of smart under-appreciated observations in there.
- nickbauman 13y agoWhat 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 13y agoI 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 13y agoI'm a scientist and also a terrible programmer. What's your hypothesis on why this is the case?
- delluminatus 13y agoIt's simply because most people are terrible programmers, except for programmers.
- danbmil99 13y agoScientists 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.
- walshemj 13y agoor 4 that they can't hack Fortan
- jkldotio 13y ago"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 13y ago> 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.
- michaelochurch 13y agoI'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 13y agoyou gonna pass that thing around, or are you gonna bogart it all night?
- sdegutis 13y ago> 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).
- sdegutis 13y ago> 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 13y agoAs 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?
- zerop 13y agoI said goodbye to python for performance.. otherwise its great :)
- stox 13y agoI never thought I would see the day. Best wishes Ian, no matter what path you take.
- deleted 13y ago[deleted]
- frik 13y agoIs someone saying goodbye to Ruby? (in favor of Go, Rust, Node.js, etc.) I would appreciate such blog posts/comments too.
- bayesianhorse 13y agoI 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!
- cyphunk 13y agotl;dr version: > And when I did step back there wasn’t anything in Python that excited me.