

Ask HN: Which job to take? - deathbob

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.
======
strlen
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).

~~~
deathbob
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 :)

------
ken
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".

~~~
deathbob
"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.

------
jamess
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.

~~~
deathbob
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.

------
brk
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.

~~~
apu
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.

~~~
brk
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.

~~~
apu
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>

~~~
brk
Don't believe the OP was starting a company, he's coming in as an employee.
Big difference.

------
apu
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.

------
prospero
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.

~~~
deathbob
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.

------
vlad
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?

~~~
deathbob
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?

~~~
strlen
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.

------
strlen
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)?

~~~
deathbob
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?

~~~
jamess
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.

~~~
strlen
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.

------
crpatino
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?

