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.
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.<p>ignore the name of the company and the title, focus on the content of your work and the people you will be working with.<p>my first job out of college was doing operations at yahoo: i ended up learning a tremendous amount on the job and was almost <i>hunted</i> 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.<p>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).
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.<p>Most any job <i>can</i> 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.<p>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).<p>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.<p>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.<p>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".
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.<p>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.
You will find that the greatest accomplishments in the world are often built upon solid foundations.<p>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.<p>The IBM job may or may not be there in another 5 years. There will always be some startup opportunity available.
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.<p>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.<p>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.<p>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?<p>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.<p>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.
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 do you mean "windows/java"? are they doing java in a windows vs. unix environment?<p>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.<p>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)?