Hacker News new | ask | show | jobs
Ask HN: Which job to take?
7 points by deathbob 6406 days ago
I'm graduating with a CS degree, and have a couple job offers. The choices basically boil down to working for IBM doing windows/java stuff, or working for a small web development company doing linux/python stuff. Is it just crazy to turn down IBM for less money and (potentially) less career advancement opportunity? Or could expanding my linux and python skills be a good choice in the long run? I'm real conflicted about it and would like to hear from some people that have been there, done that.
9 comments

couple more things: did you like the people who interviewed at either position? did you get to meet the team? in the end it's the people you work with that you learn from the most. there are office-space like environments in big companies and there are highly dynamic environments in big companies; there are start-ups run by clueless wantaprenuer (sp?) business-types (where you'll just be expected to crank out low quality PHP code 80 hours a week) and there are truly innovative start-ups.

ignore the name of the company and the title, focus on the content of your work and the people you will be working with.

my first job out of college was doing operations at yahoo: i ended up learning a tremendous amount on the job and was almost hunted by a start-up who came across me. my first real job (prior to college, junior year of high school) was doing similar work at start-up: the pay wasn't great and i ended up losing the job after the dot-com crash (which gave me a chance to go to college) but i got to work on real and interesting projects on the job which i could put on my resume and talk about at my yahoo! interview. the reason i mention my experiences is that big companies offer unique challenges (at yahoo it was a truly massive scale growing at an immense rate) and name recognition; smaller companies, on the other hand, are more able to take risks and put you on high responsibility projects that will also teach you a great deal.

lastly don't over think your decision and don't worry too much about making the wrong one. once you've made one stick with it and don't think too much of "what if i chose the other way". i am quite guilty of not following this advice (over thinking and going back and forth on decisions, regretting previous decisions, worrying too much about the future) and that has cost me a great deal of sleep, productivity and happiness. you're fresh out of college, this is the perfect time to make mistakes (whether it's joining a start-up that may end up tanking or going nowhere, or joining a company that you may end up leaving in a year due to lack of challenge).

First of all, I don't know anything about python, my first experience with it was doing the django tutorial last week. The small firm said they use python specifically because they found PHP programmers to be so different in level of skill, and that python programmers were consistently pretty high. I can't vouch for any of that, but to me, it does say that they're concerned about hiring good people and not just anybody. The owner/founder has an active development role so I'm thinking he's not too much of a "clueless wantaprenuer". Hopefully :)
You're foolish to turn down a job only if it's a job you really want. No position is so awesome it's perfect for everybody.

Most any job can have interesting problems. That's a function of the problem space, and the freedom you have to explore solutions in it, not the platform/architecture they use.

I've worked at a (very) big company, a (very) small company, and in academia. If you're not sure what you prefer, maybe you should try several (in any order).

There's a lot of "how to write software" that you didn't learn in your CS degree, but you'll pick that up quick enough on any real-world project. I learned most of what I know on a solo project (and reading the c2.com wiki); most people I worked with at the big company still haven't figured it out.

Recent startup people I've talked to have been very interested in my small-company experience (even in a different field), and almost not at all in my big-company experience. Who do you want to impress? If you're thinking of doing a startup, tenure at IBM may not impress potential cofounders; if you want to work on device drivers at Microsoft, a web startup may not be the most relevant.

You will almost certainly have many, many jobs over your lifetime. Even if the one you pick today ends up being terrible for you, it's simply not possible to choose a job so bad from which you can't recover. Not even "Swiss Patent Clerk".

"Even if the one you pick today ends up being terrible for you, it's simply not possible to choose a job so bad from which you can't recover. Not even "Swiss Patent Clerk"."

Excellent point. I hadn't really looked at it like that. Just getting started it feels like this job will determine the entire trajectory of my life but like you said, I can always change direction (relatively) easy later.

I'd go for the IBM position, regardless of which pays more. For one thing, the advantage of working at a large established company is they'll teach you how to write software. There are a truly vast number of things about writing software professionally that a CS degree doesn't prepare you for.

You could do a lot worse than spending a couple of years at IBM. If your alternative is a web development company, you'll almost certainly be doing more interesting work there.

I take it you mean more interesting work at IBM. That's what I was wondering. If I get to go to work and solve interesting problems every day I would be happy. I just know so little about it that I fear working at an Office Space type environment. If anybody reading this does or has worked at IBM I'd love to hear what you thought about it.
You will find that the greatest accomplishments in the world are often built upon solid foundations.

It's perfectly possible to go from college into a startup (or to skip the college part), but in general you will do better (and contribute more) in a startup when you have some experience in a large company. You may not want to retire from IBM, but it's good to see the good and bad bits about how a large organization is run.

The IBM job may or may not be there in another 5 years. There will always be some startup opportunity available.

I would actually argue the opposite: the IBM job (or some equivalent big-company job) will always be there. The startup opportunity at [name your startup here] is only available now.

Big company jobs tend to be alike in many ways (due to their size), whereas startups vary so significantly that it's deceptive to think of all startups as interchangeable.

So yes, there will always be some startup opportunity available, but if you know that there are good people working at this one, or if they're working on interesting things, then I think it's a better option.

Companies like IBM tend to be most interested in finding high-ranking college grads to bring in. Additionally many startups appreciate and value someone who has solid experience at a large organization, coupled with a drive to do more.

Doing it the other way around (try a startup, then go to BigCo) is less optimal.

As one data point against your statement, from PG's "Hiring is Obsolete":

I asked managers at Yahoo, Google, Amazon, Cisco and Microsoft how they'd feel about two candidates, both 24, with equal ability, one who'd tried to start a startup that tanked, and another who'd spent the two years since college working as a developer at a big company. Every one responded that they'd prefer the guy who'd tried to start his own company.

http://www.paulgraham.com/hiring.html

Don't believe the OP was starting a company, he's coming in as an employee. Big difference.
"The IBM job may or may not be there in another 5 years. There will always be some startup opportunity available."

Another good point, between this and what ken said I think I'm leaning IBM now.

I haven't faced this problem myself, but I have a few friends who've been in somewhat similar situations before. Most were more interested in the smaller company, but due to various reasons (rationalizations?), ended up picking the bigger company job (ibm/microsoft/amazon/google). Despite their stated intentions to only work for a few years to learn how things work in the "real world" and, of course, make some money, they seem to have no real intention of leaving now.

At the same time, with the exception of one of the Google people, none of them are particularly interested in the work they're doing. So it seems that earning the big money and having relatively stable, secure, and only slightly challenging jobs becomes a local maximum that is hard to escape from.

So while it's true that you'll probably have many jobs over your career and in the end what you choose may not matter as much as you might think, it does seem tougher to go from big company -> small startup than the other way.

Another data point (anecdote) about IBM specifically: I know 4 people who work (or have worked) at IBM, on the software-side of things. None of them says that it's very hard. One actually quit because he said it was ridiculous that everyone just constantly slacked off and nothing got done. On the other hand, the one person I know on the hardware side of things at IBM says that the work is interesting, challenging, and fairly busy.

Do you know who you'll be working for at either job, and who you'll be working with? Are they personable? Are they knowledgeable? Will they be able to look at your work and tell you, in the simplest terms possible, how you fucked up?

Your first job is going to be, in the best case scenario, extremely humbling. Even if you can make major contributions to the project, you'll find a lot of your assumptions coming in will be silly and ill-founded. A lot of the things you'll learn will be independent of the language you're using, or the platform you're developing on.

Choose wherever you'll learn the most. Responsibilities matter more than titles and salary (modulo whatever you need to live comfortably), but these things aren't mutually exclusive.

I'm pretty sure I'm gonna learn an awful lot no matter which one I choose. The people I've met so far at both places were very smart and nice. I'm fortunate that judging on those criteria neither job is far ahead.
Where are these positions located? Why do you care about "potentially less career advancement opportunity?" Do you want to do a startup, or do you want a career at a big company? We can't assume much from your post. Thanks! Also, what choice are you leaning towards, and why?
What I want is to work on free software. The smaller python job offers that. What I'm not sure about is if it would be foolish to turn down IBM. I'm hoping other HN readers have been faced with this choice, or similar, and could tell me what decision they made and how it worked out for them. I don't have anything against working for a big company, but it was made pretty clear to me that at IBM I would be working on enterprise applications using java, among other technologies, on windows. I'm not really excited about working on proprietary software but this is my first job and I don't know what to expect. Is working on enterprise software challenging and exciting or am I going to spend all my time doing paperwork?
enterprise software has it's own challenges: you're dealing with software that has to be shipped to a customer, who may or may not want to upgrade/keep up to date the software (e.g. he may want to keep using an ancient version and yet want backwards compatibility). you have to follow a different development cycle: you can't just release too early and then fix it in production when bugs surface.

there's going to (usually, but not always) be more "process" overhead involved in enterprise software, although the goal of various agile methodologies is to lessen it and let you spend more time coding.

in short it's a different life cycle: someone else has clear requirements for the software (which you likely aren't going to be using yourself) that you have to deliver in a fixed time frame.

with consumer web applications the challenges are different: you don't have a specification document from your customers, you don't ship a copy to them. iterations are much quicker and you can always fix code once it's in production as it's running on your own servers. however, this is pretty much a 24/7 environment: you may not be carrying a pager, but you will be expected to be ready to fix the software at any hour of the night.

what do you mean "windows/java"? are they doing java in a windows vs. unix environment?

would there be chance for you to transition into doing linux/python stuff over at ibm (they certainly do a great deal of linux/python work)? ask them that up front.

also what matters a lot more than the tools/languages/systems you will be working on is -- if you want to do core software developlment -- whether you will be working on company's bread and butter or something which is only tangential and "nice to have"? are you going to be doing new development or merely fixing bugs (or doing operations)?

Well the IBM position sounds like it would be kind of an easy transition, that I would not be thrown into anything too tough right away. NOt that there aren't challenges there, but I would be able to ease into it a bit. Bug fix here, documentation there, slowly and steadily work up to more difficult problems. Which is fine by me. But ultimately it sounded like their main stack was windows and java. I'm sure they've got *nix boxes and python doing things, but the main stuff would be in java on windows.

Now this may be stupid, but to me, right now, I would rather learn more about linux and python than java and windows. In 3 - 5 years I would like to be a python wizard, not a java wizard. Is that short-sighted?

To some extent, yes, this is short sighted. Languages are all much of a muchness. A decade ago, Perl was the flavour of the month. All the hot new sites used it. Today the same niche is filled by Ruby, and Perl is something of a pariah amongst scripting languages (though still my first choice for anything that needs prototyping.) Whatever flavour of the month you happen to like today will inevitably describe the same arc. That's just the nature of the business.

The good news is that all these skills are transferable. Becoming a better Java programmer automatically makes you a better Python programmer, and vice versa.

What isn't transferable is domain knowledge. If you want to make something of yourself in this industry, you need to specialise in something. Learn everything there is to know about something, be it networking, writing compilers/virtual machines, security or operating system design, etc. If you don't, you're essentially doomed to a career of moving bytes from a to b, applying some trivial transform to them on the way. Which, incidentally, describes neatly the vast majority of web development.

that's a very good point (about domain knowledge), but it doesn't seem to be that IBM will give him the sort of domain knowledge he's looking for either. and perhaps the original poster doesn't know what domain knowledge to look for - as he hasn't been exposed to it yet.
that's not short sighted at all - if you want to code python on linux, then position yourself that way. however, i am just wondering if you saw that they ran windows on their desktops and extrapolated that it means they don't do linux. i'd certainly ask if there would be a chance -- perhaps even right away -- to do linux/python there.
No, I asked. I told them my experience was mainly with Linux and C++, and asked what sort of environment I would be working in for them, and they said most of the projects are on windows and use java. :(
the linux company it should be. if the IBM field office you're dealing with isn't even waving the carrot of "but you'll be able to work on linux/python later" in front of you, don't bother.
Why do you ask this? You already should know that, at IBM, you will be another brick in the wall. Do you need permission to do what you love?