I'd tend to say big company. Go to google or microsoft for two to three years. You'll go to a company with strong mentoring to help you dramatically improve your development skills, and you can almost view it as getting a masters in software engineering if you work hard and take advantage of everything the company has to offer. You'll get a great introduction to things like testing in practice, using and configuring linux in practice, developing good taste in software development practices, debugging large systems, what large systems should look like in order to be maintainable, source code control systems, etc. You should also be able to live relatively inexpensively and save a great deal of money.<p>After your two to three years, go to a startup. You'll get the increased responsibility and have the skills and experience to take advantage of it.<p>In my view, the problem with going to a startup is they tend to need you to be productive in a real hurry. There won't be much if any mentorship and often you'll be left to work autonomously. Frequently you won't even get reviews or feedback, which isn't as bad as it sounds, because often your boss won't be able to give good feedback anyway -- remember that at a startup your bosses are probably learning as they go just as much as you are. If you haven't developed good taste in software and a sense for how to build big systems -- something virtually no undergrad has, with the exception of people who've done a bunch of open source -- you can get yourself into a pretty bad place. Bright people can often overcome bad software development practices, but only for so long, and when the tech debt hits you it hits hard.<p>Edit: plus, if you go big company first, you can have little debt and $15k+ in the bank. There's nothing in the world as reassuring as knowing that if shit happens with your paycheck, you have 3-6 months to find a new job and won't have any trouble paying bills meanwhile.