I've done both - worked for 2 other people's startups, founded my own, worked 5+ years at Google, now founding another. My experience is that you learn something from both, but you learn <i>different things</i> from each, and which will teach you more depends on what skills you need to learn.<p>Working for someone else's startup, I learned how to quickly cobble solutions together. I learned about uncertainty and picking a direction regardless of whether you're sure it'll work. I learned that most startups fail, and that when they fail, the people who end up doing well are the ones who were looking out for their own interests all along. I learned a lot of basic technical skills, how to write code quickly and learn new APIs quickly and deploy software to multiple machines. I learned how quickly problems of scaling a development team crop up, and how early you should start investing in automation.<p>Working for Google, I learned how to fix problems once and for all and build that culture into the organization. I learned that even in successful companies, everything is temporary, and that great products are usually built through a lot of hard work by many people rather than great ah-ha insights. I learned how to architect systems for scale, and a lot of practices used for robust, high-availability, frequently-deployed systems. I learned the value of research and of spending a lot of time on a single important problem: many startups take a scattershot approach, trying one weekend hackathon after another and finding nobody wants any of them, while oftentimes there are opportunities that nobody has solved because nobody wants to put in the work. I learned how to work in teams and try to understand what other people want. I learned what problems are really painful for big organizations. I learned how to rigorously research the market and use data to make product decisions, rather than making decisions based on what seems best to one person.<p>Founding a startup, I learned the limitations of all of the above, and that even if you know in theory what can go wrong, it's quite a different matter to avoid committing those mistakes too. I learned a lot <i>more</i> technical skills; it turns out that no matter how well you prepared in your job, finding a workable startup opportunity requires that you do things that you don't know how to do. I learned how to talk to other people and gather information about the market from ordinary conversations. I learned to make decisions in the absence of firm information, <i>knowing</i> that I may be wrong but that I can't make any forward progress without trying something out that is almost certainly wrong. I learned how to take expedient shortcuts, and to un-learn many of the rigorous engineering practices that I learned working for people because they don't apply in this environment.<p>I've found many of these self-reinforce as well - I got farther on the first startup because I'd learned many of the basic technical skills from the two startup jobs I'd had before, then got into Google from the skills I taught myself founding that startup, then have a different perspective on what's possible for the second startup because of the work I did at Google. The overlap is less than I (or most people) would like, but one of the unfortunate facts of life you learn as you get older is that life is not a linear path of one move reliably preparing you for the next, and there are often twists of pure luck that throw a monkey wrench into all your plans.