What I usually tell new grads is: Get offers from both, and take the job that has the best potential person or people that you'll be able to learn from. There are a bunch of ways you can research this. Try asking people on the team to tell you who they've learned the most from in their career.
Do not take a job where you'll be a lone wolf. As a new grad your goal should be to find great people to work with and learn from them.
If you want to have a balanced career you should try both big corps and startups, but ordering doesn't matter.
Good point. Fresh out of school I went to a tiny company of under 10 people. I had a great time and I was really impressed with the skills of the people I worked with.
But within 18 months or so it became obvious that I had by far the most theoretical knowledge of anyone there and a lot of their approach was guesswork. In two years, I began to realize I was just as good an engineer as any of them, just inexperienced.
I should probably have left after year three when the fun-factor was in sharp decline, but I stayed 5 more years, then took a job at at $BIGCO where my salary almost doubled instantly and projects were much, much bigger and infinitely more fun.
Maybe it doesn't matter which one you start with, but you should give both a try at some point.
It's important to differentiate skills learned at big companies. Some are very useful, but others are coping mechanisms that have no place in a startup. Meanwhile, the scrappiness and well-rounded skill set learned at a startup will almost always have a place in larger businesses.
My own personal recommendation for early career workers would be to prefer the cream-of-the-crop mid and large companies where you'll get useful experience you can't find anywhere else, then prefer startups and leave the slower-moving and more dysfunctional larger companies as a last resort.
Instead of recommending what people should go after college for their first job, I'll recommend what people should not do:
1. Work for a consulting / contracting company that has companies people don't like to work directly for. This is probably the worst arrangement of bureaucracy possible because you have the maximum possible layers of management overhead combined with business incentives to keep your compensation and impact upon the business as little as possible. Working for a web development shop that has big customers doesn't count here IMO because your work as an engineer is largely unchanged regardless of your customer paying you $2000 or $200k.
2. Work in corporate IT. These are high-turnover positions for many reasons. It seems like there's a lot of money in it, but it's mostly going to those that sell software to these places. People are miserable enough in F500 companies as it is, this is probably among the worst places for combination of stress, pay, and career mobility.
3. Work in a non-software company. A company whose business doesn't take its software seriously invariably treats its software and IT resources as cost centers meant to get maximum cost savings for as little money as possible via opex reduction and will, ironically, likely fail to make bigger expenditures required to keep costs (and really, wasting time) lower.
Being around non-motivated people in a demoralized environment is a great way to kill any starting career and learning what the signs of these organizational attributes are have important for avoiding really bad career moves.
To expand on this, there are some companies that seem like non-software companies, yet still treat software as a competitive advantage rather than a cost center. I worked for a big bank that did their best to stay six months to a year ahead of other banks on technology. The marketing folks were constantly coming to us and saying, "Give us cool features that we can sell." It was a fun place to work.
I also worked for an insurance company that viewed technology as a necessary evil that should be as cheap as possible. The marketing folks there were constantly complaining about how much time and money the company was wasting on technology. (Curiously, they also complained that the company's technology offerings were hopelessly far behind its competitors.) It was a miserable experience.
If you're looking for a job, ask questions about management support and budget priorities. If they're evasive or they say things like, "we're proud of how far we stretch our investment," it's not a good place to work. You can also ask how the company compares technically to its competitors. If they're evasive or talk about how they're trying to catch up, that's a bad sign, too.
A good example of what I mean are large, innovation-less companies with "start-up in a large company" efforts to bring themselves some relevance that almost always become the worst of large company inertia / legacy with the fiscal and market position disadvantages of start-ups. I've been through at least 4 of these efforts with varying degrees of "success." And while they're a large part of my career and I want to believe it can happen, I have no evidence of this working out well and am convinced it's a rather high risk to take with disproportionate upside.
Do you have any thoughts about what the general environment will be like, and is there any chance the place will be mired in bureaucracy? I'm relatively early in my career as well, and have never worked for a Big Co before.
I'd love to get in touch with you, but you don't have contact info in your profile. I'll be grateful if you can drop me a line - mailshanx at yahoo dot co dot in
Look for a deep culture of respected and accomplished leaders in software up and down the hierarchy. If nobody in a position of authority has delivered software successfully before that you can recognize as an engineer, pass because culture and experience among executives is massively important and their priorities should focus on long term growth (Amazon was ridiculed by enterprise vendors while I screamed that they will eat their business in a decade - they don't care because they'll go somewhere else while I have to deal with the very expensive consequences of bad software). There are too many great companies around today to waste time on mediocre companies - it is better to be jobless for months or years waiting for a great company to accept you for your talents than to waste some of the best years on companies where your best efforts will result in second rate winnings. It's a huge risk to work for mediocre companies that will not put the work you will have to put in themselves.
My e-mail is djk29a on Google's e-mail service. Not sure how the first part of your e-mail works out and I'm several days late so hopefully this is relevant advice.
Find the leaders that understand all programmers need training (especially around process and coding standards). Sell that on your passion and that you want to become good _quickly_.
And to be a little cheeky, Pivotal (compared to Pivotal Labs, not the same but still) is nowhere near a "start-up" company by most definitions. They're planning for an IPO and are pulling in many millions in revenue like Cloudera and HortonWorks, it's hardly possible to keep these plans from being kept under wraps.
The important thing is to be vocal about what you want to do. If you came in as a frontend dev want to do more about backend work, go find gossip about new projects and express your areas of interest to higher ups. If you want manage people, offer to improve the technical hiring test. If something is stupid (maybe there's burnout due to too much overtime, or a process is over-bureaucratic, or some aspect of development is too cowboy), be proactive and offer solutions.
The unique thing about small companies is that there are enough people that narrowmindedness and complacency start to appear (and with it, process problems), which gives you plenty of opportunities to prove yourself with out-of-the-box thinking, but not enough bureaucracy to prevent you from being able to make changes.
I rebuilt the recruiting process at my first IT-company after college.
Now I started my own IT-recruiting agency in Zurich. If you look for a tech-job in the most liveable city in the world, check out my story "8 reasons why I moved to Switzerland to work in IT" on http://medium.com/@iwaninzurich/eight-reasons-why-i-moved-to... or send me a mail to the mail-address in my HN-profile.
Starting off in a startup will lead to little support and a cowboy attitude, what the world needs more of is people who know when to cowboy, and cowboy with purpose rather than using 'just get shit done' as an excuse for a lack of standards and quality.
I've been trying to leave my small company for a mid-sized startup in NYC (currently in NJ). Started just before my year mark. Almost every startup wanted someone with more experience under their belt. Of the few that were willing to take on someone with one year, I was still in competition with others who had much more experience. I got the same line over and over again - "strong technically, passionate, good fundamentals, but we need someone more experienced". So I waited a few months and tried again. It's gone a lot better so far (no offers yet) but I've had to shift my image from that of a young up-and-comer to one who knows how to Get Stuff Done. I stopped asking about mentorship opportunities. I still really want to work at a startup but I need a new job ASAP - I don't think I'll be attractive to them for a few more months at least.
Flip side, I'd also add an option at months three and six to ask myself whether I should just get out now and basically just not put it on my resume in the future. Interesting tech is interesting, but if the startup has pathological personnel or psychological problems, a year may be too long. I would suggest sticking out anything other than outright abuse for at least 3 months, though, since you do want to account for the fact that, ahem, a real job is not school and there are certain different expectations, regardless of where you work.
This reads as if you're advocating against ever becoming an expert in anything. A few months is nothing--if the domain is difficult you're barely up to speed.
Given the recent specialization in programming (web backend v. frontend, "mobile", devops, etc.), which is a continuing trend from previous decades, this seems sensible. I advocate for a T shape in skills, but before you pick what you go deep in, get somewhat established in the wide. Fresh out of school you just can't have the width yet to know what you want to and should go deep in yet, not even if you've had a job the whole time.
Actually, I suppose I ought to raise that up as my true point: Go a bit wide before you select what to go deep in. Try not to just float into something without thought. Width should emphasize learning things that have demonstrated staying power, but you want to go deep on something that you expect has future power. It probably shouldn't be the current hottest fad tech, but the current hottest fad tech is probably at least in the area of a good future choice; it's more interesting why the current fad is a fad than the specific fad. If you do go for something that became super hot in the last 6 months to a year, try to figure out how to leverage that into learning about fundamentals even so. There's ways at both big companies and startups to succeed and fail by this metric.
Of course, on the flip side, you don't have to get it perfectly correct. You can't go deep in everything all the time, but "pi-shaped" Π is feasible in addition to T-shaped too. (That's capital pi, for those who may not have seen it before.)
And I would say that in your first several years, you really don't want to be an "expert" in anything, cause you likely haven't had exposure to enough different things.
The important thing is to leave after one year, no matter the compensation you are getting. Teams have a tendency to give the shittiest work to the most junior member, and there's very little inertia to replace that person if they are doing a stellar job at that shit work, but once you leave that startup with bankable experience under your belt, you'll have a much easier time interviewing and negotiating yourself a cushier position at either another startup or a big company.
Most big companies have a much better career 'ladder', where you'll be on a path to more interesting work once you've proven your worth, but I suspect you'd still be in a better position coming into the company one or two years in, rather than starting the treadmill at a lower salary/title.