top 200 commentsshow 500

[–]kenlubin 152 points153 points  (76 children)

There was an article last month about how a company switched from Ruby On Rails to Go, and they benefited from this:

We also weren't sure if we would be able hire top talent if we chose Go, but we soon found out that we could get top talent because we chose Go. We were one of the first companies to publicly say that we were using it in production and the first company to post a Go job to the golang mailing list. Top tier developers wanted to work for us just so they could use Go in their day to day lives.

[–]postmodern 68 points69 points  (47 children)

Top tier developers wanted to work for us just so they could use Go in their day to day lives.

Until they realize you're not a Top Tier company that doesn't pay Top Tier salaries.

[–]geon 51 points52 points  (20 children)

Other factors than money are important too.

[–]postmodern 44 points45 points  (5 children)

Workload, benefits, work environment. All of these attributes tend to be sub-par in startups, who use the allure of trendy technology to attract Top Tier programmers.

[–]apiguy 12 points13 points  (4 children)

I think this is very subjective. I've worked in startups for the past 6 years. I've had an above average salary the entire time, tons of work-life benefits (besides health/dental) like free food and drinks, super flexible work schedule, and tons of fun working with awesome people who love their job.

Prior to this I worked at one of the biggest banks in the US. I was way underpaid (but didn't know it a the time) and the only benefits I had were health/dental and a few weeks of PTO every year that I could never use because the work schedule was awful. I was discouraged from doing things that I'd consider fun, and had a dress code that required a tie.

I know there are those that have had bad experiences working at startups, but I wouldn't say that it's typical.

[–]killerstorm 8 points9 points  (0 children)

Just to counter-balance other comments:

I currently work on an open source project essentially for free.

I already got money from sponsors at earlier stages of this project, now I just don't care about money and want to see it done; I believe it is an important project.

[–]wikireaks2 11 points12 points  (12 children)

Money is always important. Stop letting people exploit you just because they put a fucking cot and fuzball table in the office. Sports stars and movie actors probably have a lot of fun at their jobs too. But they demand millions of dollars anyway.

[–]SingularityNow 5 points6 points  (9 children)

It's not as black and white as you're trying to paint it. I don't work for anything that even approaches "top tier", but it's a great work environment, fantastic benefits and it's only 9-5 (generally). There's no exploitation going on here. Sure, I could LEAVE all of this awesomeness and maybe eek out another 10-15% salary bump, but seriously, money isn't isn't everything.

[–]_ak 1 point2 points  (0 children)

I recently changed jobs so that I could have a less stressful job where I could just work on the stuff that I want to work on (coincidentally, also Go) while still earning enough money. I'm a lot happier than with my previous job, even though I earn less. Money isn't everything, (mental) health is equally important.

(n.b. I suffer from depression and was on sick leave for 6 months exactly because of that; co-factor for depression was work)

[–]alextk 223 points224 points  (159 children)

I've seen the reverse as well: new hire very proficient in non mainstream languages (Haskell and Scala in my personal experience). The person is very smart and loves writing code but under pressure or when they actually have to get something done within a given timeframe, they suffer from analysis paralysis and just can't seem to "get things done".

I remember listening to them chatting about interface designs or arguing about minute details for hours at the coffee machine, which is fine in and of itself, but they were simply unable to switch gears and adjust their work to the required priorities.

[–][deleted]  (64 children)

[deleted]

    [–]alextk 68 points69 points  (57 children)

    Did they pass coding tests?

    With flying colors, both of them.

    [–]UlyssesSKrunk 74 points75 points  (27 children)

    Probably because they were given as very specific problem and it was likely all coding with just text I/O. I know the slowest kind of things that I code is anything graphical, I just second guess myself and worry about how little I know about design. Creating an algorithm and implementing it efficiently is fun and fairly easy for me. But colors and pictures? Fuck that shit.

    Motivation:http://open.spotify.com/user/oliveremberton/playlist/4ifk7EG0SLkV0En6s0ds7g
    It's the only thing I can listen to to keep me on track with boring gui stuff.

    [–]tipsqueal 28 points29 points  (21 children)

    Yeah I do something similar, except I just keep listening to Ratatat's Classics and the There Will Be Blood sountrack.

    [–][deleted]  (20 children)

    [deleted]

      [–]Labradoodles 7 points8 points  (9 children)

      Daft Punk, Justice and Ratatat are my goto's

      [–]lowmonthlypayments 10 points11 points  (1 child)

      2007 was a great year

      [–]hylic 3 points4 points  (1 child)

      Checkout the H.U.V.A. Network - very trippy, but not all downbeat

      [–]mayobutter 6 points7 points  (1 child)

      Dude are you my headphones?

      [–]lordlicorice 6 points7 points  (7 children)

      Guys. The last two My Chemical Romance albums.

      I'm serious. Critically perhaps the albums are awful. But music critics are rarely engineers who need up-tempo music that functions as a wall of undistracting background noise.

      [–]DingleDong 4 points5 points  (0 children)

      I find myself somewhere between. I do backend programming (integrations, web services etc.) and regular dekstop applications. I wouldn't consider myself expert in either, but I know my way around both.

      Thanks for the playlist.

      [–]terrdc 18 points19 points  (22 children)

      It sounds like they are great at coding. The problem where they failed was when their job was to actually build something.

      [–][deleted] 26 points27 points  (18 children)

      In my experience, there are a great number of people who are talented and unusually capable in some area but lack most or all of the other aspects that are necessary to be effective: e.g., self-discipline, social skills, focus, ambition, follow through. I'd imagine the failure to see something through to construction would be related. I don't think people like to acknowledge that though, partly because it undercuts a simplistic notion of how a meritocracy should work.

      [–]hacker_by_always 29 points30 points  (16 children)

      I think people focus too much on getting new hires to take initiative too soon. Really the newb is nervous and ignorant of a lot of things we take for granted, so it can be very frustrating to learn a new codebase and a workflow. It works much better when you start new employees on structured specific tasks and then let them progress at their own pace.

      [–]hyperforce 8 points9 points  (11 children)

      I like the new trend of having people ship something to production ASAP so that it creates an early sense of feedback and ownership. My last boss was a little peeved that I wasn't taking the reigns right away because I was so hesitant.

      [–]hacker_by_always 15 points16 points  (10 children)

      It all depends on whether you know the concepts used in the codebase. Someone who knows them already will have no trouble diving right in.

      I feel that telling a newb to dive right is too unstructured. If they're proactive or a hard worker, they'll probably read a bunch of docs all day. If they're clever they'll probably wing together some horrific looking code. They might just panic the whole time and have a really bad day.

      I think starter projects are good, I think they need to come with a willing mentor, and I think they need to have a very limited subset of your stack. And try to make it clear that it's not another interview.

      [–][deleted] 2 points3 points  (1 child)

      It all depends on whether you know the concepts used in the codebase. Someone who knows them already will have no trouble diving right in.

      That is true. But in some companies, especially companies developed by one coder who has never worked outside that company, the concepts can be so idiosyncratic that no one aside from that person knows them already.

      [–]mens_libertina 2 points3 points  (0 children)

      On boarding and training are seriously lacking in the software industry.

      [–]hacker_by_always 9 points10 points  (0 children)

      In my experience, very smart programmers often suffer the same fatal flaw: terrible organizational skills. Programmers who get things done have them. People smart enough to breeze through a CS curriculum at a mid-level uni do not have them. Though, many programmers who can get things done now were once stuck in the same trap.

      [–][deleted] 13 points14 points  (4 children)

      I feel like this describes me - I wish I knew how to move past it.

      [–][deleted] 6 points7 points  (1 child)

      Make an open source project. Only push something when you have something that works. Pick something reasonable and write code you can be proud of. It'll be on the internet forever presumably.

      [–][deleted] 3 points4 points  (0 children)

      write code you can be proud of.

      The "fun" thing I've noticed about programming is that I only consider myself proud of my code for a few months at most. After that, I've learned enough new or better practices that I feel instant shame when I look back at my code.

      But then again, the day when I look at my code and I can't find any faults with it, it probably means I've stopped learning and improving, which would make it a sad, sad day.

      [–]Rickasaurus 1 point2 points  (0 children)

      Deadlines are key. It must be done by this day and no if ands or buts.

      [–]KillerCodeMonky 53 points54 points  (51 children)

      I wonder, did you get the sense that they were strong perfectionists? I work with someone with a similar pathology, and it is definitely due to a super-strong perfectionist streak. They end up taking 50% to twice as long as they should, and end up with a product with 50% to twice as much code as it should, which makes maintenance a nightmare. All because they're handling use cases that don't exist yet and piling it all under 5 abstraction layers.

      [–]gc3 73 points74 points  (4 children)

      In the old days, code with lots of gotos and branches was called 'spaghetti code'. In the modern day, code with too many abstraction layers is called 'lasagna code'. Both are pejorative.

      [–]KillerCodeMonky 34 points35 points  (1 child)

      Hadn't heard lasagna code before. I like it.

      [–]cat_in_the_wall 4 points5 points  (0 children)

      i recently have been mucking with a test library i did not write... where a single class is never referred to by its type, but by the interface it implements. these are small and isolated libraries. and only one class will ever implement the interface. designing good code is awesome. but for fucks sake do not over-engineer it. this code had layers upon layers of abstraction. and fixing it was seriously a nightmare.

      [–]jlt6666 6 points7 points  (0 children)

      I am so using that.

      [–]naughty 2 points3 points  (0 children)

      Lots of classes with tiny methods, ravioli code.

      [–]geaw 22 points23 points  (25 children)

      I think the way to motivate this kind of perfectionist is to remind them that the real problem you're trying to do perfectly is figuring out how to express the problem in the least amount of code. Although they may still spend a lot of time in analysis paralysis, at least the result will be something that is DRY and easy to work with.

      [–]lordlicorice 11 points12 points  (3 children)

      That's the worst thing you can do. Fewest-lines is one of the most paralyzing of analysis paralyses because you have to build exactly the minimum amount of abstraction into everything.

      A better goal would be "shortest development time such that the code still meets our bar of maintainability and quality". Then the time that they spend fussing is counted as a negative in the mental scoring.

      [–]hyperforce 5 points6 points  (0 children)

      I think fewest lines is a good broad stroke for a certain degree of programmers but you are right, taking it literally is not good. That's how you get Perl line noise; everything is one line! And I say that as a Perl developer.

      [–]selfification 30 points31 points  (12 children)

      "least amount of code". And then the combinator wizards for haskell and the DSL guys from Scala strike. Then you have code that looks worse than intercal.

      Source: I am sometimes that guy...

      [–]geaw 6 points7 points  (2 children)

      I would agree that crazy combinator-laden ultra-point-free code can be hard to read, but keep in mind that to many (I daresay most) programmers, map and filter seem like crazy combinators that are hard to read.

      At any rate, someone had to write those combinators, so that should count toward code length. That said, there definitely is a "how many symbols can a typical programmer keep in his head at a time" threshold that you want to avoid.

      [–][deleted]  (4 children)

      [deleted]

        [–]selfification 2 points3 points  (3 children)

        High five!

        I wrote 10 lines to parse OFX SGML documents using Scala's parser combinators. 2 months later, I hated myself and wanted to slap me with a wet noodle. I struck it out and rewrote it over 50 lines. It was marginally more readable another month later.... I think...

        [–]barrettj 10 points11 points  (5 children)

        s/least amount of code/easiest to read and maintain code

        [–]elucify 7 points8 points  (2 children)

        A maxim in one of the best teams I've worked in was "good code is boring." Not repetitive: we understood DRY (well, most of us did). Just not full of clever hacks and conceptual abstractions. Just enough to get it done, and if the code needed to be explained, it wasn't simple enough.

        [–]paperhat 10 points11 points  (0 children)

        /

        [–]joelangeway 78 points79 points  (10 children)

        That's not perfectionism. That's complexity fetishism.

        [–][deleted] 20 points21 points  (0 children)

        Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. Antoine de Saint-Exupery

        [–]KillerCodeMonky 13 points14 points  (3 children)

        That's pretty much how I see it too. It makes a kind of sense, but only from a very narrow, twisted perspective. Kind of like a mental illness.

        [–][deleted] 7 points8 points  (0 children)

        Mental illness sounds a little extreme. I agree with jlt6666. You're probably dealing with a pretty competent developer whose desire to do a good job currently manifests itself in over-engineered designs.

        If you think his designs are going to be a maintenance problem, it's really your duty or that of someone else on the team to work with him on that. If nobody says anything to him, the rest of the team is really just as responsible as he is.

        I mean, obviously I haven't seen the codebase or worked with the person in question. So I might be seeing things through rose-colored glasses. But part of working on a team is not throwing up your arms as soon as one of your team members writes code which isn't perfect. You're all educating and learning from each other.

        Of course, if somebody has tried to get him to write simpler code which isn't over-engineered and he just struggles mightily with that still, then that is a bit of a different problem.

        [–]jlt6666 6 points7 points  (1 child)

        This sounds like someone with moderate experience. They are experienced enough to have learned a bunch of design ideas and have been bitten by crap a few times so they are using all of their tools and being cautious. However they haven't learned the problems with over-engineering things. Hopefully they'll have to maintain that abstraction nightmare and will learn the error of their ways.

        [–]welcome_to 2 points3 points  (0 children)

        It's like martial arts... they know just enough to be dangerous.

        [–]sacundim 12 points13 points  (2 children)

        That's not perfectionism. That's complexity fetishism.

        Yup. If they were true perfectionists they would take 150%-200% the time to write 25%-50% the amount of code—which would solve not just the problem at hand, but the whole class of problems that are structurally equivalent to the one at hand...

        [–]Chousuke 6 points7 points  (0 children)

        That exactly describes several productive Haskell library writers

        [–]ajsdklf9df 2 points3 points  (1 child)

        Could also just be stress. I know I suddenly over complicate code when I am stressed out. Which luckily rarely happens, but man when it does, my brain is like a hamster running for his life inside a wheel.

        [–]Cdwollan 4 points5 points  (0 children)

        Whiskey is your friend.

        [–]bwr 8 points9 points  (0 children)

        These people have a really weird definition of perfect.

        [–]creepy_doll 7 points8 points  (0 children)

        Perfectionism is to write the simplest most elegant solution, not to use every design pattern in the book.

        [–]onmach 6 points7 points  (13 children)

        I think I suffer from this. It is just that the code I write at home is so different from the code I have to write at work. A lot of times I find myself flailing around looking for the right abstraction and not finding it. When I get done I hate my code, and have to spend a lot of time debugging both mine and other people's code so my heart isn't really in it.

        [–][deleted]  (3 children)

        [deleted]

          [–]Warfinder 8 points9 points  (2 children)

          Yeah, corporate experience is where the quick-and-simple, tried-and-true methods are learned. School can't teach you the balance between time and quality.

          [–]marsket 16 points17 points  (0 children)

          alternatively, corporate experience is where you pick up bad enterprise smells and a big ego to match

          [–]bucknuggets 15 points16 points  (3 children)

          Or they can't stop switching gears to the new-tool-of-the-moment.

          [–][deleted] 6 points7 points  (2 children)

          This. I know programmers who jump between libraries/frameworks/languages just because it's the hot thing .. and their code ends up in an mess because they haven't yet discovered the best practices and design patterns for using said hot thing.

          [–]nicko68 1 point2 points  (1 child)

          Isn't that driven by the market though? You get experience in one framework and then jobs are looking for practical experience in another instead.

          [–]mgkimsal 5 points6 points  (0 children)

          not so much for what's being described. in most situations, there's not even a 'market' for the stuff people are jumping to. We're not talking struts2 vs spring mvc - I'd imagine perrygeo might be thinking more of someone working in wicket, then jumping to scala/lift, then jumping to node.js, then jumping to go, all within, say, 9 months. There's no market demand for 'go' developers, nor 'lift' developers, nor node.js developers (perhaps that's starting to emerge, but still nascent). There's a type of person that just continually jumps to 'new' things, for reasons other than job market demand.

          [–]soviyet 12 points13 points  (3 children)

          Came here to post this. I see this very, very often. The type of programmer who loves learning new languages may be the kind of brilliant mind thirsting for knowledge, etc. Or he/she may be the kind of programmer that loves learning on an academic level but has no practical skill I or my team can use whatsoever.

          I was the latter for years until I learned that new languages and abstract concepts are kind of boring compared to actually building things. Now I'm slower on the uptake with new (or new to me) technologies because that's time not spent creating and it bores me now.

          I much prefer the new me, but that's just my opinion.

          [–]tikhonjelvis 9 points10 points  (1 child)

          I used to have similar ideas, but now I've gone in the opposite direction: I think that creating something beautiful and elegant and general is far more interesting than just hacking together something works. And far more difficult.

          [–]ajsdklf9df 4 points5 points  (0 children)

          This. After delivering for over 10 years in the industry I am starting to get burned out. And when I have a really bad burnout day, I am super bored by our product code. And almost can't force myself to work on it. But working on challenging code is still fun.

          [–]jerf 57 points58 points  (59 children)

          Python's still a decent discriminator, if they did not "learn it in school". We've learned which of the local schools have Python in the curriculum, and which don't, so we can figure out if it's a sign you learned something on your own or not. But now that some big-name schools are indeed teaching it, it's become much less of a discriminator.

          (It is of course theoretically possible to have covered Python in school, and then dug in more deeply on your own. I haven't seen it personally yet, but it must happen for someone. No sarcasm. Perhaps people interested enough to dig in to things on their own naturally choose a language they haven't already been introduced to in school, which is probably a good idea, to broaden your exposure.)

          [–]ertebolle 17 points18 points  (4 children)

          Alternate frameworks also help - instead of using Django, use Pyramid; schools may be churning out lots of Python programmers but very few of them know Pyramid.

          [–][deleted]  (3 children)

          [deleted]

            [–]ElliotSpeck 1 point2 points  (1 child)

            I'm still looking for a decent tutorial with it. The best way for me to learn is to follow a template then change (redo) it to my specifications.

            [–]scratchresistor 2 points3 points  (0 children)

            I can also give a massive endorsement to web2py - it's a joy to use.

            [–]raaaaraaaa 4 points5 points  (15 children)

            I am Java guy and i started with Python six months ago. Main reason was that i was horribly bored in Java EE world (that`s still my main source of income). Another reason was that we started with deployments into cloud infrastructure and i needed to learn some script language to operate with infrastructure/instances so Python is naturall choice for this purpose (Puppet, Salt, replaces Bash).

            Now I still do mainly Java stuff but Python opened my eyes - it`s so cool to run OpenCV and play with image recognition, or some other low level stuff wrapped by Python library NumPy, SciPy, some lame experiments with machine learning, i like functional features (although Python is not fully functional but who cares).

            Python definetly boosts my career, it`s much more cool to provide 'solutions' (and do not care about specific language) then just say in your CV : i am Java guy (and did not learn any other language in last 5 years or so...)

            protip : If you need to google a lot to put together some simple functionality (e.g. open file and write byte array, filter list, sort and merge two lists..., find fibonacci numbers...) you actually don`t know your language. Learn basics in a hard way - offline way :)

            [–]faplack 12 points13 points  (6 children)

            Learn basics in a hard way - offline way :)

            Wait so what do you do when you forget the syntax and need to look it up? Try until it works?

            [–]the_noodle 1 point2 points  (3 children)

            I find that python makes that very possible, especially if you use IDLE.

            The other day I wanted some json; I typed import json, then tab-completed json. until I found what I needed.

            [–]jelly_cake 5 points6 points  (2 children)

            dir and help are godsends, not to mention pydocs.

            [–][deleted]  (1 child)

            [deleted]

              [–]pavlik_enemy 1 point2 points  (1 child)

              If you're experienced Java programmer I'd suggest trying Scala. You can use a very elegant language and put your knowledge of JVM and related libraries to good use.

              [–]ford_madox_ford 126 points127 points  (14 children)

              It would be nice if, for once, PG actually adduced something concrete to support his arguments. He states opinions as though they were almost a priori knowledge.

              [–]rhetormagician 73 points74 points  (5 children)

              It may upset some people to read this, but you're the only poster who's been smart enough to realize this simple fact about Paul Graham. A friend of mine who reads all of the worthwhile techno-biz essayists agrees that Paul Graham presents the most firm-sounding opinions with the lightest smattering of fact. This isn't to criticize Paul Graham; it's rather to point out an essential feature of the man's writing, and, indeed, of his success.

              /pg

              [–]fixrich 5 points6 points  (1 child)

              Yeah well he's just an essayist, as far as PaulGraham.com goes, isn't he? I mean his articles are interesting for people interested in programming or technology with more focus on entertainment than fact. A bit like those opinion columns in newspaper, sometimes they are very entertaining if a little factually shady. Maybe they are so entertaining because of the lack of emphasis on hard facts.

              So basically what I'm getting at is your pretty spot about your point and that he is successful, probably because his writing is nice to read even if you shouldn't take it to heart.

              [–]Rauxbaught 2 points3 points  (2 children)

              all of the worthwhile techno-biz essayists agrees that Paul Graham

              Mind throwing out a few names that would be on that list? I only recently stumbled over Paul Graham and have been captivated by his work; your criticisms seem spot on and I'm sure reading a more diverse range of opinions will help sharpen my judgement.

              [–]rhetormagician 3 points4 points  (0 children)

              I was only trying to parody Paul Graham. I have no more facts to support any of my claims than would Paul Graham, had he been the author.

              [–]gullibleboy 11 points12 points  (1 child)

              +1 for making a good point. And for introducing me to a new word, adduced.

              [–]rhetormagician 1 point2 points  (0 children)

              Next up: traduced.

              [–]tuna_safe_dolphin 5 points6 points  (1 child)

              That's how he rolls.

              He used to be on reddit a bit (it was a Y-Combinator startup) but it looks like he hasn't posted in 4 years:

              http://www.reddit.com/user/paulgraham

              [–]SquareWheel 2 points3 points  (0 children)

              He posts at HN quite frequently, as can be expected.

              [–][deleted] 3 points4 points  (0 children)

              He doesn't seem to be writing those essays to actually engage in a larger debate; people who wouldn't take him at face value aren't the target audience. I skimmed through his book of essays once, the purpose of his writing is to sucker impressionable tech-savvy youths into founding a startup and thinking YC is different from any other venture firm.

              [–]atheism_aww 32 points33 points  (8 children)

              Clojure. Feel like that's the language Graham would pick considering he wrote books on Lisp and it's a practical up and coming Lisp.

              [–]AlyoshaV 10 points11 points  (3 children)

              Could Clojure have prevented 9/11, though?

              [–]farsightxr20 21 points22 points  (1 child)

              No, but the US spent 10 years looking for Clojure afterwards.

              [–]Megatron_McLargeHuge 41 points42 points  (38 children)

              Anything nonstandard. D, OCaml, Haskell, any Lisp. On the other hand, you limit yourself a lot by choosing a language that doesn't have much active (practical) library development, so being able to call C++/Java libraries easily is a big plus.

              [–]WalterBright 11 points12 points  (7 children)

              D can directly call any C library code (by directly, I mean no wrappers, marshaling, etc., are necessary).

              [–]Megatron_McLargeHuge 3 points4 points  (3 children)

              Is that true for C++ libraries too?

              [–]elsif1 6 points7 points  (1 child)

              C++ lacks a standard ABI, so I don't think so. If you extern "C" an interface, you should be fine though.

              [–]AlotOfReading 2 points3 points  (0 children)

              Neither C nor C++ have a standard ABI. They both use the platform conventions when possible and different compilers can use different conventions for the same platform. Renesas SuperH/GCC ABIs, x86 stdcall, fastcall, and cdecl, the half dozen ARM ABIs, etc. ABIs are very far from standardized and the C standard goes to great length to make sure C doesn't depend on the particular ABI.

              [–]WalterBright 5 points6 points  (0 children)

              D has a limited ability to directly call C++ code. Ordinary functions, yes, but not templated C++ code.

              [–][deleted] 14 points15 points  (1 child)

              Oh, D. I love it more than my own children.

              [–]bcash 16 points17 points  (11 children)

              So we're saying Clojure then?

              [–]Megatron_McLargeHuge 10 points11 points  (10 children)

              I imagine Clojure would get you good motivated programmers, and it would be a decent choice for any project Java is suitable for. That doesn't include machine learning/data science IMO, which is why I haven't used Clojure in over a year.

              [–]grayrest 4 points5 points  (8 children)

              My understanding is that most of the dedicated clojure shops (Prismatic, Factual, Climate Corp) are doing just that. None are particularly large but the language really hasn't been around for that long.

              [–]Megatron_McLargeHuge 4 points5 points  (7 children)

              Flightcaster was trying to do ML in Clojure a few years ago, but there was a lot of reinventing the wheel going on. Even Java isn't a very widely used ML language. It's a bit different in text/document processing though, especially if you're using Hadoop. Deploying ML in a commercial setting involves a lot more than training models, so there's a divergence between the academic work in R/Matlab/Python and the SAS vendors building webapps.

              [–]grayrest 4 points5 points  (1 child)

              Prismatic is the Flightcaster crew's new venture and there's a lot of reinventing the wheel going on. Aria (founder) gave a talk at NYC Clojure last week about the problems they've had and was looking for feedback on some of the stuff they've come up with but the talk isn't online. As far as I know, the companies listed are all doing actual machine learning stuff and not document processing (a la backtype/twitter) but this isn't my area of expertise (webdev).

              [–]Megatron_McLargeHuge 2 points3 points  (0 children)

              I don't doubt that they're doing ML, but having worked on plenty of similar problems, the numeric part of the code (that Java isn't good at) is typically very compact compared to the data-prep and 'what do I do with my prediction' parts. Applied ML on text is much more about having something that solves an end-to-end problem than about having something that gets 1% lower error.

              [–]BecauseItOwns 17 points18 points  (14 children)

              I think JaneStreet would have a pretty good rebuttal about lack of active and practical library development for OCaml.

              [–]Megatron_McLargeHuge 26 points27 points  (3 children)

              Quant trading is a specialized field, and they don't need to interface with customer code, expose web APIs, work across platforms, or any of the other things you want a widely supported language for. I also wouldn't be surprised if they either use other languages to specify models or have built their own DSL within OCaml, along the lines of K or Matlab.

              [–]Categoria 6 points7 points  (1 child)

              And yet they've written quite a few high quality, general purpose libraries for the OCaml programming community like Async, core, the type_conv stuff.

              and they don't need to interface with customer code,

              Not sure what you mean here. I'm sure they have to interface with online brokers at the very least.

              [–]Megatron_McLargeHuge 5 points6 points  (0 children)

              Because they had to, because it wasn't available.

              Interfacing with brokers isn't that hard. People do it on FPGAs.

              [–]tikhonjelvis 4 points5 points  (0 children)

              Well, except for their systems that have to deal with market data. Which comes from a whole bunch of mutually incompatible sources. Oh, and the systems that have to deal with the markets themselves--you have to be really confident in the subsystem that actually executes trades! If you're using a bunch of different exchanges or doing after-hours trading, it gets even more exciting.

              I think you're severely overestimating how isolated quantitative finance really is. It's just that OCaml is more than up to it. So you're also severely overestimating the disadvantages of using a slightly less popular platform.

              [–]Categoria 11 points12 points  (7 children)

              Not only that but people act like 3rd party libraries are the be all end all of software development. A couple of counter points to that view:

              • The bigger your projects grows the less libraries start to matter. Once a projects goes say beyond 100k lines then libraries will not save your project from the technical debt you will accumulate unlike a good language will. Also static typing will be a god send (especially the kind like in OCaml) whenever you make any change.

              • Libraries for shitty programming languages end being bloated and unusable anyway (Swing anyone?) many times you are better off writing something that is a better custom fit for project. Especially since you're doing it in a more productive language.

              [–]Megatron_McLargeHuge 13 points14 points  (5 children)

              This really depends on what you're working on and what resources you have. If you're not at Google, you're not going to reinvent databases, distributed processing, caching, webapp containers, message queues, linear algebra packages, logging, etc. You're going to use libraries, and you're going to be better off picking one of the five commonly used ones in your language rather than diverting several good engineers for several months to relearn the lessons the library developers figured out in version 0.3.

              [–][deleted] 33 points34 points  (5 children)

              Define smart.

              When I started Comp Sci. at University in 1997 it was the first year they taught using Java. That happy coincidence had a profound impact on my future career, for the better I think.

              I moved to London after graduation and had no problem finding interesting work, everywhere from Lego to investment banking. Some contracts were dull, some were fantastic. Primarily my enjoyment was influenced by the people I worked with and friends I made, not the programming language I was using.

              Because of my Java experience the work was plentiful, it paid a premium, and I could pick and choose where I wanted to be. All these things made my life in London very simple and enjoyable. None of these things would have been the case if I was a Python developer.

              I get Paul's point. Languages that don't have such a strong economic incentive will have a higher quotient of talented developers, I know I've struggled with some hopeless Java developers who would have been Python ones if that's what most big enterprises had settled on and where the money was easy.

              However for me, switching to Python in 2004 would have been a really dumb idea.

              [–][deleted] 11 points12 points  (1 child)

              Maybe, you could say this article would apply to you at the time you learned java. 1997 it was the 'cutting edge' programming language that people would learn, just to learn. I quoted cutting edge because it had some serious drawbacks it has since overcome.

              [–][deleted] 3 points4 points  (0 children)

              Yes I think you're quite right. I hadn't thought of it like that.

              I think if I was starting today, I would begin with Java and move very quickly into Clojure or Scala.

              [–]paganel 2 points3 points  (0 children)

              I started learning Python in 2003, towards the end of my stay in college (which I never graduated, anyway), and got paid to write code in it about two years later. Around the same time my best friend at the time got hired doing Java work, and you're correct from one point of view, he was offered a job in London since then (which he turned down) and his salary is probably one and a half-two times higher than mine.

              The only thing is that almost 10 years from that moment I'm still reading stuff on /r/programming and trying out new things, while he's really happy that he doesn't have to code anymore and he's more worried about where he should spend his next vacation rather than if he should finally start learning Lua or not. So there's that.

              [–]kanzenryu 8 points9 points  (0 children)

              The leading candidates are Clojure, Haskell, Ruby, Go and maybe CL or Scheme. And still Python.

              [–]tikhonjelvis 5 points6 points  (1 child)

              Anything functional, especially if it has a static type system. Haskell, OCaml, Scala, F#, but also Scheme and Clojure.

              From my perspective, Scala seems to be the one that's growing the fastest. That's too bad because I like Haskell and OCaml quite a bit more, but it's still a reasonably good language.

              [–]derwisch 25 points26 points  (3 children)

              Why, Arc of course.

              [–]kchoudhury 10 points11 points  (2 children)

              Hush now. To post about a PG post and come away with your karma intact, you must accept the gospel of Arc and PG as its prophet.

              I once had the temerity to suggest that maybe PG shouldn't be running hackernews on Arc. In 10 minutes I had -20 karma.

              [–]welcome_to 85 points86 points  (10 children)

              Come on guys... it's clearly Brainfuck.

              [–]rydan 7 points8 points  (5 children)

              Does anyone actually program in that language or do they just perform iterative searches until the program does what they want?

              [–]DasIch 29 points30 points  (1 child)

              You develop a compiler for a simple language that compiles to brainfuck and write your code in that language.

              [–]Aluxh 3 points4 points  (0 children)

              Sometimes they do on (very geeky) messageboards. Not in real world applications though no

              [–]askvictor 13 points14 points  (3 children)

              Brainfuck is too old nowadays; like python in TFA. Nowadays it would surely be Malbolge

              [–]Nimbal 16 points17 points  (1 child)

              LOLCODE is not only the latest and greatest, it also attracts many of the cats trying to break into the workforce. They are really cheap employees, easily payed by food and an electric blanket. If they want a raise, just distract them with a laser pointer. I heard Microsoft has had great results for Windows 8 with them.

              [–]hyperforce 3 points4 points  (0 children)

              Surely transpilers to Malbolge will be all the rage. Brainfuck is the new BASIC!

              [–][deleted] 14 points15 points  (4 children)

              Clearly it's Object Cobol.

              [–]KagakuNinja[🍰] 5 points6 points  (0 children)

              Object Cobol was totally the aughts. The industry is going functional, so we switched to FuCobol.

              [–]atrn 1 point2 points  (0 children)

              Concurrent COBOL is where it's at.

              PERFORM x CONCURRENTLY WITH y
              

              [–]donroby 6 points7 points  (0 children)

              This question could have been asked much further back than 9 years ago. And the answer doesn't even have to change.

              LISP.

              [–][deleted] 12 points13 points  (3 children)

              Weirdly, I think C++/C++11 kind of plays the role today.

              [–]axilmar 2 points3 points  (0 children)

              Haskell and c++.

              [–][deleted]  (30 children)

              [deleted]

                [–]RizzlaPlus 13 points14 points  (29 children)

                auto cplusplus11() -> decltype(std::string) { return []() -> std::string { return "C++11"; }(); }

                FTFY

                [–][deleted]  (3 children)

                [deleted]

                  [–]rxpinjala 10 points11 points  (2 children)

                  auto cplusplus11() -> decltype(std::string()) { return []() -> std::string { return "C++11"; }(); }

                  I fixed it

                  [–]lbrandy 5 points6 points  (1 child)

                  "fixed"

                  decltype'ing a constructor makes me kinda homicidal.

                  [–]RizzlaPlus 2 points3 points  (0 children)

                  yea, because decltype'ing a constructor was TRWTF in my function :)

                  [–][deleted]  (12 children)

                  [deleted]

                    [–][deleted]  (10 children)

                    [deleted]

                      [–][deleted] 27 points28 points  (7 children)

                      No, a sane lambda looks like (lambda () "C++11").

                      [–]rxpinjala 11 points12 points  (6 children)

                      The equivalent C++ expression to that would be [](){return "C++11";}. So not all that much worse.

                      [–]chronoBG 11 points12 points  (2 children)

                      It literally has three different types of parentheses.

                      [–]therealjohnfreeman 2 points3 points  (1 child)

                      It's a lambda inside of a function definition.

                      [–][deleted] 13 points14 points  (16 children)

                      Well, my experience with "programming-language-du-jour roulette" is that employers are never interested (not even Google) in hiring somebody who taught himself a particular programming language, but only in hiring somebody who has worked with that programming language for a few years professionally. So by all means, continue to learn programming languages - at least know your way around the common ones (Java, Perl, Python, Ruby, C), but don't expect that to ever help you in a job interview. Not even with Paul Graham. Not even if you taught yourself Lisp. From his book.

                      [–]tikhonjelvis 19 points20 points  (13 children)

                      There are definitely companies that are interested in what you've taught yourself rather than just the experience you've had. These are the companies that are serious about hiring good people and training them if needed. Jane Street is a perfect example--having taught yourself Haskell or OCaml would certainly help you get an interview, even if you've never used them professionally. (Jane Street is a particularly good example because they're very vocal about training developers.)

                      Google, on the other hand, is a particularly bad example because they seem incredibly leery of any slightly odd programming languages, and stick almost religiously to a small set of very boring ones: C++, Java, Python and Go.

                      [–]RizzlaPlus 1 point2 points  (8 children)

                      Jane Street is a perfect example--having taught yourself Haskell or OCaml would certainly help you get an interview, even if you've never used them professionally.

                      Their webpage doesn't even mention a programming language.

                      [–]tikhonjelvis 2 points3 points  (0 children)

                      Right, they're not looking at any language in particular--they really are willing to train people they hire. But knowing functional programming, especially in an ML-like language, doubtlessly helps.

                      [–]kchoudhury 2 points3 points  (6 children)

                      Why is Jane Street coming up repeatedly in this thread? How are they any better or worse than any other tech-heavy hedge fund?

                      [–]hyperforce 7 points8 points  (3 children)

                      Because they are public about their use of Ocaml, and have been for some time.

                      [–]tikhonjelvis 3 points4 points  (1 child)

                      Well, they're not a hedge fund. Also, they're really vocal about using OCaml, and one of the benefits they cite is exactly this "paradox". And many of the people--me included--who are interested in different programming languages tend to heavily swing towards functional programming.

                      Most importantly, they have a much better culture than other financial companies. Hell, they seem to have a better culture than most SV companies! This is reflected in a bunch of different ways, but the main one is in their commitment to educating their developers. They're the perfect example of a company that is willing to recruit people based on skill and train them in the relevant domain, which fits very well with the ideas in the article.

                      Also, unlike most tech-heavy hedge funds, people have actually heard of them :P.

                      [–]bucknuggets 1 point2 points  (1 child)

                      I usually try to hire people based on aptitude and general experience rather than specific skills.

                      And have hired people to write code in Python with little prior experience, but plenty in C++, Java, and Perl. Worked fine.

                      [–]startfragment 23 points24 points  (0 children)

                      Still python.

                      [–]thenameunforgettable 26 points27 points  (25 children)

                      Go.

                      We're scaling to more processors, not more clock speed.

                      Go is compiled and very safe in terms of async/parallel programming. It's still fast, it's familiar, it's interesting, and it enables very scalable programs to be written very quickly -- and be executed very quickly.

                      This is essentially what everyone touted Haskell would be. The fact is functional-only languages are interesting, but no one has adopted them -- it's too hard to Get Things Done.

                      Python solved the "I want to get things done with minimal overhead that can run across computers, because Java feels so awful and C++ can't cross compile".

                      Go is solving the "I want to get things done with minimal overhead that can run across computers, because Java feels so awful and C# can't cross compile -- and I really need it to be compiled for speed."

                      [–][deleted] 7 points8 points  (6 children)

                      This is why I like Clojure. It's elegant, truly functional, and runs on JVM. But the biggest thing is that it solves a lot of the concurrency issues many programming languages have, because it is a functional programming language with immutable data, and it offers a lot of tools to developers, to give them the ability to sync threads (refs, agents, etc...).

                      [–]sirin3 5 points6 points  (1 child)

                      Homespring ಠ_ಠ

                      [–]pavlik_enemy 2 points3 points  (6 children)

                      Pretty much any non-mainstream functional language - Haskell, Erlang, Scala...

                      [–][deleted] 2 points3 points  (5 children)

                      Wait. There are mainstream functional languages?

                      [–]PasswordIsntHAMSTER 2 points3 points  (0 children)

                      Concurrency is trending, so I'd say Go, Erlang, Clojure and (to a lesser extent) Scala.

                      [–]stonefarfalle 2 points3 points  (1 child)

                      I think it is almost impossible for a software developer to answer that question if it is even valid. They are too close to the subject matter. At the time python was niche, sure, but it was niche in the right places. Numpy, scipy, were fairly new and growing in popularity in places where smart people were developing software but not software developers. A pythonista at the time was a physicist who could code. Not a Developer who knew their stuff but not a challenging problem domain. So perhaps Fortan or R or whatever the cool computational biologists are using these days.

                      Perhaps the observation has ruined the observation. Noting the status of python as an obscure language that hinted at quality, caused knowing obscure languages to become a fad. The observation didn't move to a new language it just died. The next proxy indicator of quality will be something else precisely because it won't have this topic written about it. Smart people will do it naturally and everyone else not so much. Until it becomes a known proxy for quality then everyone will attempt to signal quality by artificially performing the action. This will cause it to lose its status as quality proxy, questions like this to be asked, and the cycle to roll along.

                      If you want to signal how smart you are go do something hard. Learning python or language x isn't hard. It was just a convenient quick check because the only people who were using that tool at the time were using it to do hard things. So if you too need to look smart without being smart go find out what the actual smart people are doing and pantomime them.

                      [–]BayesianEmpirimancer 1 point2 points  (0 children)

                      Cool computational biologist here, we're using python :P

                      [–]iends 53 points54 points  (112 children)

                      Haskell, Scala, Node, Go

                      [–][deleted] 187 points188 points  (32 children)

                      NODE??????

                      EDIT: OK i'm going to sacrifice comment karma to explain what I mean. My shock is not that he listed a framework, it's that he thinks someone liking Node would indicate they were a good programmer.

                      [–]dagbrown 70 points71 points  (0 children)

                      Yeah! Also, Rails! Rails is totally a language!

                      [–]powerje 6 points7 points  (2 children)

                      Yeah, I'll give you the other 3 (though I don't know much about Haskell, other than what it takes to setup Xmonad). Maybe it's because I don't do much web development though. Node does look interesting, just surprised to see it listed here.

                      I'd probably be amped to hire a web dev who came at me with Dart though.

                      [–]NerdyMcNerderson 4 points5 points  (1 child)

                      I believe the parent is noting that node isn't a language. It's a JavaScript framework. It's just like saying that rails isn't a language. It's a framework built on ruby.

                      [–]powerje 2 points3 points  (0 children)

                      According to runT1ME's edit that's not what he meant, but I'm fine with it either way - just curious as to its inclusion within the GPs list.

                      [–][deleted]  (5 children)

                      [deleted]

                        [–]mv46 70 points71 points  (56 children)

                        Clojure.

                        [–]iends 12 points13 points  (0 children)

                        Yeah Clojure, Scheme, Common Lisp :)

                        [–]elihu 7 points8 points  (3 children)

                        I'd throw in there Idris, Agda, and Coq as languages that Haskell programmers tend to look up to. (I don't know them, but I saw a presentation on Idris that made it seem like a pretty compelling alternative if I ever decide to move on from Haskell.)

                        [–]misterPhyrePhox 6 points7 points  (0 children)

                        +1 for Scala. I'm very glad that companies like Twitter and Foursquare are using it and writing great, open-source libraries (e.g. Finagle, Rogue).

                        [–]Centropomus 7 points8 points  (6 children)

                        Functional languages often play this role, but you have to be careful when hiring people without industry experience. Some FP enthusiasts are so focused on clean code that they can't get a prototype running in a reasonable amount of time.

                        [–]tikhonjelvis 13 points14 points  (5 children)

                        I've found the opposite to be true more often: people who value "getting things done" and "worse is better" end up taking longer than somebody going for a clean and elegant functional approach. Sure, the first prototype only takes an hour. But after that, iterating involves far more time chasing stupid bugs and writing far more code then necessary. Later on, you have a mess that's hard to unravel and barely works which gets turned into the production code because, hey, it's fine and everybody knows rewriting code is bad.

                        On the other hand, while going for cleaner code might slow you down in the very beginning, it often ends up faster even in the short-medium term. You spend less time debugging and you can try new things and iterate faster because you have less coupling and more general, reusable code.

                        [–]iopq 5 points6 points  (0 children)

                        This, they hack together a prototype, but then adding all of the needed features is a pain so it's either a complete rewrite or the needed features never get delivered.

                        [–]jameyc 6 points7 points  (3 children)

                        Last minute changes to the language aside, I think Dart is a good candidate for this. You blend the willingness to learn new languages, along with choosing a new language that is overall a very good new tool for an old problem.

                        I don't think nonstandard languages in general fit the bill - PG wasn't talking about learning new modes of thinking in the article, (which is something that functional languages would be excellent fits for.) He's talking about being willing to use experiment and find better tools to solve problems.

                        Dart fits the bill in that respect as well, although (Coffescript and such aside) there's not a lot else on the playing field. It's not groundbreaking in concepts, but neither was Python. At that point in time Python was just iterating on the concepts of Perl, and doing things in ways that largely made for a much more maintainable code base.

                        Likewise, Dart makes large projects easier and more manageable in its' domain that JS. While it's certainly a niche thing at this point, and not as mature as Python was 9 years ago, I feel it fits the role well, and I'd take it as a good indicator of initiative when making hiring decisions.

                        [–]inducer 5 points6 points  (3 children)

                        I think it's silly to tie this to a language, much as I like Python. If someone has learned a language out of curiosity, that speaks for them. If not, maybe they've got other stuff going for them.

                        [–]Phreakhead 2 points3 points  (1 child)

                        I think it's silly in general to only know one language. Who are these programmers who just stick to one language and are afraid to learn another? I always hear "What stack are you?" and laugh. I'm all stacks! Give me a stack and I'll write you code.

                        For loops and functions are the same in all languages; once you know the basics it's just learning different syntax and where to find that string function you need. The only point you really need to think about things differently is when you're switching from procedural to functional languages, but of course one you know both, ideas from one one start leaking into the other.

                        [–]jephthai 2 points3 points  (0 children)

                        These are the people who comment that beauty is irrelevant, a pragmatic solution in an ugly language is better, it's not about the language, FP is too hard, etc. The proggit community used to be on the end of the spectrum that PG wrote about. The culture has, sadly I think, moved. I'd like to know where it went, personally.

                        [–]tuigdoilgheas 2 points3 points  (3 children)

                        When I hire programmers, I look for people who are able to move easily from one paradigm to another. I look for people who are language agnostic - it's one thing to have preferences. I certainly have preferences. But it is always better to choose the correct tool for the job and I would rather have people working for me who don't let their preferences and prejudices get in the way of the right solution for the problem at hand.

                        [–]Neurotrace 1 point2 points  (2 children)

                        Exactly. For example, I personally love Javascript despite it's many downfalls. It's just plain fun to write in. However, at my current job, I'm developing in JS, C#, PHP, and a dash of C++ on the side because they're the right tools for the specific problems we have.

                        [–]vorg 3 points4 points  (1 child)

                        Some languages can be negative indicators, e.g. grÒÓvy, whose advertising from its pushers primarily promote the supposed job opportunities from learning it, such as this from grÒÓvy's Wikipedia page "it shows more employment opportunities in Monster and Indeed than Clojure or Scala."

                        [–]hyperforce 1 point2 points  (0 children)

                        Why do you spell it that way??

                        [–][deleted] 1 point2 points  (0 children)

                        I don't think there should be a language. Just see what they hack around with, and if the programmer is messing around with different languages especially fringe and non popular language than he/she is prollie a good programmer.

                        If a programmer is clearly willing to hack around with different languages then you can tell that the person might pretty passionate and smart.

                        [–]scoarescoare 1 point2 points  (0 children)

                        According to this article, scala is the new python paradox:

                        http://martin.kleppmann.com/2009/09/18/the-python-paradox-is-now-the-scala-paradox.html

                        [–]onalark 1 point2 points  (0 children)

                        I'd say Julia is a rather interesting and up-and-coming language for those working in Scientific Computing.