I'll get to the fifteen pieces of advice. But first, let me explain what awesome careers look like.
They don't look like nice linear graphs, where you're moving up a little bit each month. (Heck, even so-so careers don't look like that. You don't move up every month. You get a bit better at your career every month, but you move up in big steps.)
Great careers look more like this. They have some periods of slower growth and some "turning points" where your career shoots up.
The color changes? Those are career changes: software development to product management, sales to cofounder, etc.
They also have some setbacks. Because you know what? Being great requires taking some risks. And taking enough risks means you'll fail a bit too.
So with that said...
#1: Code. A lot. Schools are great at theory, but not so much at practical stuff. This is especially true at the top universities. Professors are academics and are often actually hostile to more "practical" forms of education. The best way to be a great coder is to just practice - a lot. It doesn't matter so much what you code (open source, iPhone apps, etc.) as long as you're coding and pushing yourself.
#2: Be language agnostic. Language is just a tool. It's valuable to know a language deeply, but it's also valuable to be learning new things. The best developers tend not to identify as a ____ developer.
#3: Prestige helps. Having a strong name on your resume helps open doors and show competence. If you can get a name like Google, Facebook, Amazon, Microsoft, Dropbox, etc, do it. (But don't stay long. See #4.)
#4: Leave the big companies quickly. If you want to build your career at a big company, then by all means, stay and build your career there. But if that's not what you want, leave quickly. One or two years post-college at a company like Google is great. 10 years? Not so much. You will continue to learn, but there are diminishing returns of sticking around. (Unless you want to be a big company person.)
#5: If you want an A+ career, come to San Francisco bay area. I love Seattle and began my career there, but I have to be honest: there are so many more opportunities in tech in the bay area. You will limit yourself as an engineer (or product manager/tech business role) if you live elsewhere.
#6: If you don't want an A+ career, don't come to the bay area. It is extremely expensive here. Seriously. That's worth it if you want a ton of career options. But if you just want a cushy career, there are more affordable cities with enough tech (like Seattle). A good software engineer can buy a nice house in Seattle. It's a stretch in the bay area.
#7: If you don't want to be a developer forever, then move on quickly. There is a lot of value in getting really deep technical expertise. But it doesn't matter that much whether you spent two years as a developer or seven years. Within a few years of college graduation, make a choice. Do you want to be an engineer for the next 10, 20, 30 years or not? If you don't, start trying to move on now. More time as an engineer won't help you that much.
#8: Quit quickly. If I look at my friends who have switches jobs, almost all of them were thinking about quitting for the last 6 - 12 months. Some stayed for 2 or 3 years after they started saying that they wanted to quit. They've wasted so much time because of just a resistance to change. If you're thinking about quitting, take action now. Start applying elsewhere - or possibly just quit outright. You probably won't be very successful if you're unhappy anyway, and there is a big opportunity cost in staying.
Dealing with others:
#9: Integrity matters. If you try to cheat and cut corners, it'll haunt you. Do the right thing in life. It's not only the good thing to do, but it's also the smart thing to do. People will trust and like you more. More doors will open - and those doors might just be the breakthrough moments in your career.
#10: Be helpful. When possible, help people who ask for help. This is a nice thing to do as well as a smart thing to do. These people who ask you for help right now will be much more likely to help you in the future. That "help" might be introducing you to their friends who can help you more directly. So even if you don't see how that person will be helpful, you don't know who their buddies are or will be.
#11: Make friends. You actually can't really be successful by yourself. If you're an entrepreneur, you need employees and business connections. If you're an employee, you need a job. Either way, it's friends who will be key to opening up these opportunities. It's friends, distant and close ones, who form the important part of your network, not that one person you met at a meetup and never talked to again.
#12: Realize - no, internalize - that we've all got impostor syndrome. Even the most successful entrepreneurs and engineers (with very few exceptions) feel like they just got lucky and aren't nearly as good as people think, and that one day soon they're going to get "caught." Truly internalizing just how widespread impostor syndrome is can help you realize that feeling like you're a fraud doesn't mean that you are.
#13: Start stuff. Show initiative. Good things come to those who don't wait. Seek out new opportunities. Start stuff - a hackathon, a club, a project, a company, a new running group, whatever. You will learn so much from doing this and it will open doors.
#14: Take risks. Seize opportunities. When you notice that little flicker of opportunity, seize it. Run with it. See where it goes. Don't walk away just because you don't know exactly where it's going to go.
#15: Bias towards "yes." A great career hinges on the "breakthrough" moments. The problem is that you often can't identify those in advance. You don't know where that coffee meeting that you don't see the point in is going to lead. You won't know that, two months down the line, that person will end up introducing you to a guy who needs some advice and winds up as your business partner. Maintain a strong bias towards saying yes.
All of these have a reason - usually multiple stories - behind them. They are things that I, or my friends/clients, have lived.
- Lots of coding projects (#1) plus some friends (#11) resulted in my landing an internship at Microsoft after freshman year.
- That paved the way to eventually landing a job at Google, which has opened countless doors (#3).
- Initiative (#13) and seizing opportunities (#14), as opposed to careful planning and research, led to my launching two companies, both of which are profitable and just amazing experiences.
- In fact, both of those companies also started as an unpredictable result of agreeing (#15) to do a favor for a friend (#10).
- Acquisition consulting (now a core part of my business) started because someone asked me to help them. I didn't really feel like it at the time, but I said yes (#15) because I've seen over and over again how valuable this philosophy is.
But I made mistakes, too.
- I love Seattle (where I used to live), but being in the bay area has been so much better for my career. More opportunities and better opportunities, hands down (#5). It is a lot more expensive here though (#6), so if you're not going to use those opportunities, go elsewhere.
- I also stayed at Google too long probably. The extra time didn’t earn me much (#4). I eventually left because I realized I didn't want to be a developer for my whole life (#7) and because I just wasn't happy (#8).
Two more pieces of advice were "automatic" for me, but I've seen the consequences when other people don't do this.
- I've never identified too closely with languages and it's enabled a lot of flexibility. When I've coached people who do, they are much more limited in their career (#2). Fewer companies to pick from and the language-specific developers are often stigmatized as being weaker.
- As for integrity (#9), two stories come to mind. In both cases, someone's drive for success caused them to ultimately hurt themselves.In the first situation, a colleague tried to take advantage of a legal loophole to back out of a very important commitment. He eventually backed down, but I would never work with him again. I also won't help him if it's any sort of help that requires trust. (That is, I'll fill out a survey for him, but I won't connect him with anyone.) In the second situation, a fellow author posted some fake negative reviews of my book in some stupid, short-sighted attempt at winning. When I confronted him, he made up all sorts of lies and accusations. Now, he periodically asks me to connect him to someone I know or if I want to work with him on something. I refuse. It's not revenge; it's protecting myself and my friends.
If you've been tracking, you might notice that there's one left: Impostor syndrome (#12).
I've known what impostor syndrome is for years, but it wasn't until the last year or two that I realize that almost every successful person experiences it. This was an "a-ha" moment for me. It told me that feeling not good enough to do something didn't mean that I wasn't. As a result, I have more confidence and am more likely to launch something (#13), run with an opportunity (#14), or just say yes (#15).