What should I learn to work with awesome programmers?
March 5, 2012 5:28 AM   Subscribe

Suppose I'm a programmer. I want super awesome companies to be excited about hiring me. And I want to work with nice and smart people. What kinds of techonologies should I spend my time learning?

I'm a relatively inexperienced programmer, professionally -- I have only maybe 6 months of experience working. I have a MSc in CS. I'd like to get jobs working at companies where people are nice and smart and enjoy doing what they do and do it well. And also where people work 40-hour weeks. What should I be spending my time on learning? I know to varying degrees Javascript/PHP/Perl/C/Python, and small amounts of Java/Haskell/SML. But I can learn anything! Are nice people working in Python? Should I become a Python guru? Is it good to learn languages with higher barriers to entry like Haskell? (I'm not scared of category theory!) Should I become a Javascript expert? I'm not particularly tied to any language at the moment. I don't have access to (or really know how to use) a Windows machine, so anything that isn't easy to develop with on Linux is out.

Are Java programmers all totally cool and I should totally learn Java? Paul Graham thinks that Python programmers are smarter than Java programmers. Is it true? Are Haskellers the best people ever? Absurd generalizations welcome.
posted by oranger to Work & Money (26 answers total) 31 users marked this as a favorite
 
My admittedly dilettantish experience is that the most "awesome programmers" work at startups and work many more hours per week than 40.

As for Python--I've been learning it myself, and everyone I've encountered online when I've had questions has been nice enough. There are jerks in every industry and every walk of life, but you won't know until you've met someone whether he is a jerk or not.
posted by dfriedman at 5:33 AM on March 5, 2012


(By "dilettantish answer" I mean, I am not a professional programmer, but I know a lot of them...)
posted by dfriedman at 5:33 AM on March 5, 2012


I'm not a programmer at all unless you count BASIC on a 1980's C64 or TRS Model 1, but I have a feeling that the qualities you're looking for in an employer have little to do with particular technologies.
posted by jon1270 at 5:35 AM on March 5, 2012 [5 favorites]


This isn't a language question; good programmers know computer science, and a new language can be learned (to whatever degree of competence is needed) quickly, because it's just grammar on top of a strong base.

However, I will also point out that I've never seen a professional who legitimately works 40 hours per week, especially not in a programmer role. 50-70 is the norm, with variations across industry. I'd suggest picking an industry and company, and then focusing on the languages used there; for example, you know based on your requirements that anything involving financial services or video games is out the window, because you don't want the crunch-time work required. Thus, you don't need languages or skills related to those things.
posted by ellF at 5:46 AM on March 5, 2012 [2 favorites]


Python programmers think differently than Java programmers and vice versa. Different tools for different jobs IMO so I'm not surprised.

Stretching yourself with Python is not a bad idea. It is a well regarded language and used a lot in the "startup" world by very talented and dedicated development shops. You could poke around with Django, Bottle or Flask (web frameworks) to get started.

Next up would be Ruby and specifically the Rails framework. Still the hot ticket in town and the community surrounding it are avid supporters. In some cases, I think they're a bit too avid. ;)

Personally? Javascript is the hottest ticket in town right now. Node.js, backbone.js etc. These are all the rage at the moment and on the bleeding edge. A lot of Rails purists have even been a bit distracted by it, which is... something, I guess.

Finally, you should just head on over to Hacker News and follow it for a few days. You'll get a pretty good idea on what is interesting to the community.
posted by purephase at 5:47 AM on March 5, 2012 [1 favorite]


I'm not a programmer at all unless you count BASIC on a 1980's C64 or TRS Model 1, but I have a feeling that the qualities you're looking for in an employer have little to do with particular technologies.

Its not perfect but I bet someone could create a chart of technology stack and the cultural baggage that you get with that. Some things like Java and .Net are so big and broad that it would be hard to generalize from that alone but if you delved into which frameworks they use I bet you could come up with some accurate observations.

As for your 40 hours remark, yeah it might be hard to get that outside of government. What you will want however is a place with flexible hours and good management so that you aren't run into the ground with one crisis reaction after another.

I think learning python is pretty fantastic but I am biased since I use it a lot day-to-day. Keeping your Haskell skills sharp will make you stand out to a certain type of employer (but with that said I don't know how much actual Haskell work there is out there). If you want to do client UI development than you must be Javascript fluent.

Lastly, there is no excuse for at least having passing familiarity with Windows. You clearly have a Linux machine so install a VirtualBox (or another VM product0 and try out the free Windows 8 Preview.
posted by mmascolino at 6:03 AM on March 5, 2012


If you're getting into programming for the social aspects of the job, I would advise to search out another career alternative.
posted by PsuDab93 at 6:04 AM on March 5, 2012 [2 favorites]


Response by poster: Thanks for all the awesome comments! Right now I work 40 hours a week and program and make good money, so I'm curious about these claims that it's really difficult. Am I just super lucky?

(I understand well that with a good computer science base you can learn anything -- that's why I'm asking this question. I have an awesome computer science base, and I can learn anything. What should it be? :))
posted by oranger at 6:12 AM on March 5, 2012


The 40 hour work week ... it exists. In regular tech companies, dot coms, even start-ups. You just have to find the right ones. While there are many companies that do stretch the work week, there are many that believe in a healthy work-life balance.

Python usually gets the stereotype for having nicer people. Ruby, more hip. Dipping your toes into frameworks like Django and Rails would be great. Understanding MVC and web architecture well is more key than learning a specific framework. Many concepts are very similar in web MVC frameworks, anyway.

Good companies will eschew expertise in a particular language if you are smart and can learn quickly, with a positive attitude. Smart people and great programmers aren't limited to languages and good companies know this. OOP and common design patterns are never out of style.

Pick up hobby projects and see what YOU like to work in ... honestly the market is good enough for programmers to get a decent job in any sort of programming-type. You don't need a particular language to get hired. You can pick your favorite language / technologies and go for those jobs, instead.
posted by xtine at 6:25 AM on March 5, 2012 [4 favorites]


I learn Scala on my spare time. It's a fun, statically compiled language that also runs on the JVM.

You should be familiar with a version control tool. My workplace uses SVN currently, but I'm trying to get them to move to Mercurial, because of improved workflow in distributed version control systems.

Object Relational mappers are also used heavily as simple SQL query strings within the language offer no compile time checking, which can be bad. I've chosen Squeryl as the ORM for Scala (because of its support for nonstandard schemas). I'm familiar with the JPA and Fluently NHibernate on C# too. These all play nice with Postgres.
posted by DetriusXii at 6:37 AM on March 5, 2012 [1 favorite]


The 40 hour work week ... it exists. In regular tech companies, dot coms, even start-ups. You just have to find the right ones. While there are many companies that do stretch the work week, there are many that believe in a healthy work-life balance.

Yup. This. Small, well-established shops work this way - a way to tell is to see how many programmers and other tech types are over 40. They work normal hours, because they have the experience and expertise required to plan and execute a realistic release schedule.

Crunches occasionally happen - a serious bug affecting a large customer usually - but it's an occasional thing, and no-one much minds if you blow off early a couple of days the next week.
posted by Slap*Happy at 6:37 AM on March 5, 2012 [4 favorites]


The languages you know are much less important than the work you have done. Learning different languages can help expose you to concepts that are difficult to express in other languages as you may have noticed in your time with haskell. That being said, it can be helpful to group your language skills logically. So if you want to be a web dev, so pick one of ruby/python/php and spend more time with javascript in the browser. There are plenty of other stacks you can explore as well.

More important than learning any particular language is to build cool things that you can share with potential employers. You can start your own thing, or work on an existing open source project. Either way you end up with actual code you can show potential employers. Also, if there are particular companies you are interested in that have or use open source tools, you can contribute to one of those tools. It's a great way to get their attention and show them that you can be productive in their work.
posted by yeoldefortran at 6:45 AM on March 5, 2012 [1 favorite]


Best answer: You have been professionally programming for six months, grasshopper. What you are really going for here is to have some good stories to share in future interviews. I've met people who programmed in dusty languages, like COBOL and Fortran, who worked on very sexy projects with a great culture. In everything you do, find the story.

What I mean by this is to seek out the interesting way of explaining what you did. I'll give you an example of something I wrote up years ago to illustrate. That day of fixing a penny rounding issue could easily go into the dustbin of memory, but it is one of a handful of lessons learned on my journey as a software craftsman. It is happens to be about Java, but would it matter if the example was in Ruby, Python or ninja-code? Nope.

By all means, learn additional programming languages. In my opinion no developer should go five years without learning a new language even if it has to be done on personal time. Just make sure you keep your radar up for compelling stories while you do it.
posted by dgran at 6:55 AM on March 5, 2012 [3 favorites]


Best answer: Like people have said, I don't think technology used is the most important thing, though there may be some degree of correlation, just because of the contexts in which different tech tends to get used.

If I read you right, you want an interesting, reasonably well-paid job, surrounded by nice, smart people, working fairly regular hours.

My thoughts...

Startups are probably out, most of them are not into regular hours.

Many, but by no means all, enterprise jobs are also out, because the work gets too routine.

What will fit are jobs in large-ish stable-ish orgs where the problem domain is inherently challenging.

What such problem domains might be that are relevant to you depends on what your interests are, including interests outside of programming or Comp Sci.

Since you are not scared of category theory, I guess you like math. Many interesting problem domains that are non-routine are math heavy, and therefore people who work in them are math literate, therefore reasonably smart at least on that dimension of smartness. (As for people being nice... well, depends on the culture of the org.)

These kind of things crop up in places you might not expect. For example I worked a while in the airline business, where pricing, revenue management and forecasting are very important. The groups working on those problems are staffed by people with PhDs in Stats, MScs in Operations Research, the company's best programmers etc. Nice smart people, that got paid pretty well, and worked pretty regular hours. Except y'know, sometimes, when the big deadline crunch on the mega-important project was coming. Or your production prog crashed on its nightly run, and you have to come in to fix it asap because the airline will lose $$$ the next day if those forecasts are not available to decision makers.

Now some of those people used C++. This was a while back so C++ was more of a hot new thing then, but I know for a fact that in that world C++ continues to be used to this day because of libraries, legacy code, performance needs etc. Other languages were also used in that area esp by people more on the math side, for example things like APL and SAS. (Today that might be Matlab and R instead).

Now we get to: what language should you learn?

My short answer when people ask "What language should I learn?" is "Python".

(The long answer is "It depends". But this post is long enough already, and it would take a mini thesis to say anything very useful about what depends on what.)

I'll tell you why I personally settled on Python after looking into the options...

1) Python is a pretty nice language, and a highly productive one.
2) It has good libraries and a good ecosystem for just about anything I might want to do
3) It plays nice with other languages, esp C/C++

Highly productive is important in those challenging problem-domains I was talking about, because you want to be able spend a lot of time thinking about what's going on, and not much on the implementation details.

Libraries are the killer "feature" of Python that differentiate if from other nice, highly productive languages. Want to do serious scientific number crunching? Write a game? Do AI? Process natural language? Build web apps? Write a Windows GUI? Python has decent libraries for all those things and more. And importantly it has whole active communities of people that actually use those things.

Now for many domains it is true that there might be a better and more widely used language for that domain than Python. But if you want to be able to do many different kinds of things while using only one language, I don't know of anything else that comes close.

And in those cases where it would be ideal to use a different language, whether R or C, chances are someone has already done the work to be able to interoperate easily between Python and that other language. e.g. RPy and Cython.

Anyway, to wrap up.... in as much as choice of language matters for achieving your desired career goal, other things being equal Python is a good choice. However, choice of problem-domain to get experience in may be a much more important factor than choice of language.
posted by philipy at 7:43 AM on March 5, 2012 [2 favorites]


The technology, more often than not, has nothing to do with the job. You'll find just as many awesome Java projects as you will Python. Etc. Generally the *project* determines far more than the language. Public-service software projects with low profit overheads will have a very different fun/motivation factor than shrink-wrap home-user software projects. Big companies will have more unfun overhead than small. Established companies will give you more time to develop good habits when compared to small. (And bad habits are, in the end, just about the maximum amount of anti-fun you can find.) Etc.

Where the generalization about language breaks down a bit is when you start looking at what field in which you want to work. If you want to write web apps, you're going to tend towards late-bound weakly-typed languages. (Generally speaking.) If you want to write web infrastructure, you're going to tend towards early-bound strongly-typed languages. That sort of thing.

But in general, keep in your toolbox three languages; it doesn't matter which three, but there must be:
* one early-bound (compiled) strongly-typed language
* one late-bound (interpreted) weakly-typed language
* one functional programming language, even if you rarely use it
* one that supports object-oriented programming
* one that supports non-OO imperative programming

In your case, Haskell+Python+C. From your base of three languages, you can learn to program tolerably in any similar language in less than a year. You can be an expert in any one in five to ten.

Oh, and 40-hour weeks certainly exist. There are a lot of big and small successful companies who don't expect their engineers to live at work.
posted by introp at 7:47 AM on March 5, 2012 [1 favorite]


I know your question was asked with tongue slightly in cheek, but: Don't fall into the "Language X is the best/coolest language and all the others are teh lame" trap. Don't think in those terms as a programmer, and don't work for a company that's dogmatic about a particular language or platform.

Of course, most companies do standardize on something for stability's sake, but there's a difference between "Let's use [X] because we're all agreed that it seems like the best match for this project/product" and "Let's use [X] because it's the only thing the CTO knows from his long-ago programming days, and he's all religious about it." As the saying goes, when the only tool you have is a hammer, everything starts to look like a nail.

RE: Python specifically, I would say it's definitely worth spending some time with it. I find it tremendously useful for writing little one-off utility scripts to do things like migrate data from one CMS to another, or chew through big CSV files and do various things with them.

And yes... it may be a little harder to find but the reasonably-compensated, healthy work/life balance 40 hour week does exist. I don't think that there's any particular language or platform that will get you there; I think it's a combination of smarts/experience, networking, and maybe a little bit of luck.
posted by usonian at 8:20 AM on March 5, 2012 [1 favorite]


I don't typically like to toot my own horn, but on a resume, I'm allowed. In that vein, I have a piece of my resume, near the top, dedicated to languages, hardware and software with which I'm familiar.

I've spent my life dabbling in languages. As it was mentioned, above, languages are just a grammar over what you choose to achieve. Whenever I have a new pet project, I try and develop it in something new. That way, I have the experience and public product to show off to a potential employer.

Once the requirements of a position are out of the way, and you can comfortably say that you're qualified, you'll have your pick of places to work. At that point, you're in a position to negotiate such things with yourself or with the potential employer regarding work hours and environmental conditions.
posted by thanotopsis at 8:30 AM on March 5, 2012


Forget the language thing. Build something cool and get people using it. Or, find some open source project you like, and make yourself a big part of it. It's so much easier to get someone's attention when you can say "Hey, you know X? That was me."
posted by vasi at 8:31 AM on March 5, 2012


Paul Graham thinks that Python programmers are smarter than Java programmers. Is it true? Are Haskellers the best people ever? Absurd generalizations welcome.

If it was ever true, that was only because at the time Java was widely taught and widely used, while if someone knew Python that likely meant they were a person who was curious and enthusiastic enough to go learning things that were above-and-beyond the call of duty.

Therefore, if it was ever true, it ceased to be true once many colleges started deciding Python was a good first language to teach.

So for the most part I'd say: go learn things you are curious and enthusiastic about. If for example doing amazing things in a browser floats your boat, maybe that's Javascript and associated frameworks. (Btw, in-browser is the major no go area for Python, but people are working on that as well.)
posted by philipy at 8:45 AM on March 5, 2012


Best answer: First I would ask what do you want to work on? You've been in school for six years, no? What languages and theories really interest you?

If you really have no idea how to translate your interests into real industry terms, here is my (half-assed) assessment of what various programming languages/platforms mean to a recruiter:
- Haskell makes you look like a PhD candidate who dropped out to pursue a job in industry.
- Python is the new Perl – versatile, great as a UNIX scripting language or for bigger apps.
- C#/Java – about the same. Big OO structure, great for a large number of average programmers working on a large application. (*dodges rotten fruit*)

Anyway, if you want to work for [INSERT NAME OF TRENDY AND/OR OBSCENELY WEALTHY WEB COMPANY HERE] you could also try to get a background in Ruby on Rails or Node.js. Rails has an older community with more user friendly startup guides, Node is a recent (2009) invention that targets the same use cases – making a quick, fast web app.

Also, Node is built on JavaScript. JS is definitely a hot thing to specialize in now. I like it because it's a functional language, and I always preferred functional styles in school. And JS lives natively on the web, so it's going to be relevant for the foreseeable future. (Full disclosure: I work on JavaScript projects for a living.)

As for "nice", I think that's harder to define and to seek out. Programming has its fair share of careerists who will put their own career goals ahead of workplace cheer. Managers can also vary in their effectiveness, and sometimes a coder who doesn't really want to manage gets promoted until they are cranky and incompetent. In reality, you can't shield yourself from unpleasantness at work, though you can probably sniff out an unhappy company from the interviews.

Web development also, IMHO, is full of a lot of ambitious clever people that aren't really very good programmers. So sometimes, as a CS guy, you'll be thrust into a situation where one of your "senior" colleagues wants to do something very stupid, and you have to earn their trust enough to convince them not to shoot themselves in the foot. As a CS guy, you probably aren't great at workplace politics, but you'll need to engage in it every now and then. Be careful to choose your battles wisely, and don't be a curmudgeon.

For me, going from CS classes to a job was hard. You have to give up the control you have when you're working on your own projects and accept that sometimes you can't do things the right way and get it done on time.

You would do well to learn about the software engineering terms that every recruiter and interviewer will ask you about. Agile versus extreme programming versus pair programming. As dumb as it all sounds, development paradigms are actually really important in the workplace. Process becomes more important as the number of developers on a project increases and knowing something about that will give you an edge in interviews and show that you're going to play well with others. You should be able to find some nice books or articles on these topics.

Good luck! Feel free to mail me if you need some specific advice.
posted by deathpanels at 9:12 AM on March 5, 2012 [3 favorites]


Non-programmer here, but working at a startup that is ferociously recruiting devs. On our end, we don't really care what languages you know. We're more interested in whether you've built anything cool, and what it was. We figure you can learn and/or we can teach you what you need to get started working with our codebase (HTML5, js, Adobe Flex, Ruby).

So, consider this a big +1 to ellF's comment. We'd prefer you to have an interesting portfolio that shows you to be a capable programmer and learner. A resumé with a bulleted list of hot languages is less of a draw. That said, if you've got a portfolio, memail me.
posted by weaponsgradecarp at 9:30 AM on March 5, 2012


I mostly agree with everything deathpanels just said.

Python is the new Perl – versatile, great as a UNIX scripting language or for bigger apps.

I think that is probably a web developer's take on Python. The thing to add is that I doubt anyone ever tried to crunch data from the Hubble telescope using Perl. Whereas, amazingly, Python is very much used for things like that, as well as the kind of things that I believe Perl is used for. So it's incredibly versatile.

To be fair, if your focus is entirely on web development, Ruby is probably at least as good a choice as Python. For the things I'm interested in, Python can take me a lot of places that Ruby can't.
posted by philipy at 9:48 AM on March 5, 2012 [2 favorites]


you may also want to think long-term about what sort of career you want to have. want to program forever? specialize. want to become a manager? learn about team dynamics, business, and how to lead. in either case, knowing how to write and communicate effectively with non-technical people will put you ahead of vast scores of other programmers.
posted by jimw at 11:43 AM on March 5, 2012


philipy is right. My post makes the assumption you want to get into web development or OS application development as you seemed from your post to be moving away from academics. Python is great for science and research purposes (scipy rocks), if that's something you'd rather do. I should say I've used python as a stand in for perl, i.e. when writing automation scripts.
posted by deathpanels at 12:07 PM on March 5, 2012


You have an MSc. Look around tech stuff for a month, find a library that should exist... (something in node/js), build it, get hired :) People should be coming to you! Where is your portfolio, github, list of meetup presentations, etc?

Also, plenty of us have good dev jobs that are 40 hours/week! Unless you have an ownership stake, you should not be working 60 hour weeks.

(As for specific techs: node.js/jquery are growers, as is asynchronous programming in general. Ruby/Rails, and Python/(Flask or Django) are solid backups as well.)

Most of my work is now JS, coming from a Python/R. I still kind of hate it, after Python :)
posted by gregglind at 4:25 PM on March 5, 2012


the qualities you're looking for in an employer have little to do with particular technologies.

Someone's never worked in the Microsoft ecosystem.
posted by tapesonthefloor at 9:18 PM on March 5, 2012


« Older I should be able to handle this. Right?   |   Any ideas to keep our next winter (Western U.S.)... Newer »
This thread is closed to new comments.