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.
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.
Doing it the other way around (try a startup, then go to BigCo) is less optimal.
Another good point, between this and what ken said I think I'm leaning IBM now.
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)?
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?
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.
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.
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).
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".
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.
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.
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.
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.