1. You’re not smarter than anyone
In all jobs, especially the software industry, there are a lot of smart people. They have worked at that company, and in that industry, longer than you. Even if you were the smartest and brightest student at your school, you’re not going to be when you find a job. Get over it. The sooner the better
2. There is such a thing as a stupid question
Note: This has been heralded as mostly bad advice from a variety of people that have read this. The consensus seems to be, that asking questions is a great thing. I suppose my experience was non-typical. Hooray for the internet I learned something new.
Before asking any question, Google it first. If you still can't find it, look in other places; internal documentation, text books, API's, forums, etc. Only when you have exhausted all possibilities should you ask for help. Then ask the guy closest in pay scale to you, don't ask the lead developer or manager, or anyone else. If they don't know go to the next highest guy.
3. Looks matter
If you look like you don't shower, and have never had a haircut, people will think it’s so. Your looks, for better or worse, will impact you positively or negatively. Imagine my surprise when my contract didn't get renewed after wearing a mo-hawk to work for 3 months.
4. Know what you know and what you don't know
If someone asks you a question and you don't know the answer say, "I don't know," or "I can find that for you". Giving someone bad information, because you don't want to look stupid, can make you look ten times dumber and lead to poor outcomes. Information is the currency of our industry, if the information is not good, then nothing will be. On the contrary, sharing valuable and accurate information can be extremely helpful and reflects well on you.
5. Become a part of the culture before trying to influence it.
Prove your worth, intellect, and ability to make good decisions that are in alignment with the company before trying to make changes or influence anything.
6. Software’s primary function is to earn profits
That is its number one priority. Software does not make money by: being coded well, being high quality, or delivering all of the features users want. They are all certainly important, but software makes money by being sold!
7. Listen to people
See 1. This seems pretty basic, but so many people fail at this in a big way. When people talk, listen to them - your boss, coworkers, the janitor, whoever: in the software industry people rarely tell you things that are not important. Take notes if you must.
The worst thing you can do is ask someone a question when they’ve already told you the answer. In my early years, I would ask people for documents, or how something worked, or where something was, and I would get my butt handed to me. They would say, "Why didn't you write it down", "We talked about this in such and such meeting last Friday", and all in a very harsh tone. I received absolutely no sympathy, and often got a wicked tongue lashing.
That's it, just listen well. It makes you look smarter, more devoted, and makes people like you. If you suck at listening I have no idea how to get better, I suck at it too.
8. Have a presence
Go to work, go to meetings, show up to company events, schmooze, hang out; do whatever you can to get your face in front of people. If no one knows who you are, you're going to get passed for promotions, cool opportunities, and will be underappreciated for the work you do. I suck at this too, but trying hard goes a long way.
9. Archive Everything you can
Information is what the software industry runs on, those with the most and best rule. You need to archive everything you can so that you can reference it later, save every email, every instant message, take notes on every conversation, and know where to find it all. You look like an idiot when you have to ask a co-worker to explain something that he told you yesterday because you "forgot". It's much more dignified to look at your notes and review what he said.
It's also important because invariably someone will say, "I asked you to have that report to me yesterday". Then you can say, "This email you sent last week says to have it on the third, which is 3 days from now". Then that person ends up looking like the douche, and you look well organized and on top of your game.
10. Toot your own horn
When you do something well, let people know. The best approach for this is to present your awesomeness as a service to others. For example, "I made this script that turns monkey turds into gold; I thought you guys might want to use it.”
In an ideal world, everyone would be recognized for the work they did and wouldn't have to work on their personal PR, but it's not an ideal world. People are busy and worry about what benefits them and what they're working on at the moment.
11. Help others and they will help you
When co-worker Joe comes begging for assistance, because he's going to miss a deadline, help him! Undoubtedly, unless you’re the most Supreme Being in the universe, you will be in the same position and it will be nice to know that someone owes you. Build up as many favors as you can, at some point you will need them all.
12. Advance your skills at all times
Employers/Market forces are not your friend. They don't care about your family, or that you’re a nice guy, or that you have a massive collection of Pokémon plush dolls they care about your skills. Take every opportunity to improve them. Take courses, seminars, beg more experienced people for tips and feedback. It's hard to say what will be popular in the software industry in ten years, but I can guarantee it won't be esoteric Anime.
13. Do Secret projects
There are things that your boss will never say yes to, projects that sound kooky, or don't provide immediate profits, but could be important anyway. Spend whatever free time you can, developing 'Secret Projects'. This can include: setting up a repository for code (there are still places that don't have that), writing up an experimental interface, writing a testing framework, or creating anything that can add value to your company.
When you complete your secret projects, verify that it in fact will provide value to your company, and then show your boss. 99% of the time they will be thrilled. It's much easier to sell a finished product, than it is to sell an idea.
14. Learn to be self sufficient
See question 2. A man that can work on his own, and not gobble up the resources of those around him, is worth more than a thousand men that constantly need help. Find answers to your own problems, keep yourself busy, and stay motivated.
15. Don't be a yes man
Tell your boss when they’re wrong, but be careful. Use grace and facts to convince them of the best approach. Your boss will thank you. One of the greatest things about the software industry is that it's usually an open exchange for ideas.
16. Definitely be a yes man
For the love of all that is good and holy in the universe, don't disagree with people just to have the opposite view point. When someone has a good idea or strategy tell them you think so. If you must, you can follow that with a few concerns you may have. If you always tell everyone they’re wrong, they will hate your guts and think you’re an egotistical maniac.
17. Choose your battles wisely
Arguing with co-workers consumes energy, time, and morale. If you must argue about something, make sure that it is a worthwhile argument. Spending 3 hours trying to convince someone to use ruby instead of python to write a 12 line script is not worth anyone's time.
18. Make Friends
I openly admit to being terrible at this, but it's important anyway. Making friends at work says a lot about you. It says you’re a team player, you can get along with others, you have a stake in your job, and so much more. It's also an incentive to show up to work. If you have a person you enjoy seeing everyday it makes getting through the day that much easier.
19. Have fun
Find something you enjoy at work - like having friends, it’s a great incentive to come in every day. It improves your morale and makes you more enjoyable to others. We have a basketball court at work and I love to go shoot hoops. I make time for it as often as possible. I come back refreshed and happy, and am often more productive than I have been all day.
20. Know when to put in the extra hours
Working extra hours is great. It shows your devotion and ability to be a team player. However, I caution against long hours every week. You will burn out. You will become a sunken-eyed zombie who is dead to the world. The quality of your work will decrease. You should be saving yourself for the times when it really counts.So that you will be able to drop 60 or 80 hours in a week to meet a deadline that really is critical, while also making every one of those hours the best you have to give.
21. Don't get too comfortable
Most of us know by now that there is no such thing as “job security”. It was a temporary concept created by some economic illusions and sleight of hand. “Now you see it and now you don’t,” poof it’s gone forever. This is especially true for the software industry. We are an industry that moves fast, moves hard, and isn't afraid to lay people off.
As a younger employee in the software industry, you shouldn't expect to stay anywhere too long - a couple of years max. There are people who manage to hold on to positions for years and years, but don't count on being one of them. At some companies entire divisions get axed without consideration for who is going. Just because you are a rock star doesn't mean the guy killing 200 jobs will know your name.
22. Learn to write well
You don't need to be great or even good, just get proficient enough to write a good email. If you’re a terrible writer, like I was, try starting a blog.
That's why TPH was created; my boss at the time told me that my emails bordered on embarrassing, and my number one goal should be to improve my writing. Six months after starting the blog, I was told that my emails actually look professional. I'm still not the best writer, but I'm much better than I used to be.
23. Get comfortable with phone calls
I have spent a ridiculous amount of time on the phone working with teams from various states and countries. Software companies are continuing the trend of worldwide offices, working from home, and distributed teamwork. The telephone is still the best option for many of our communication needs. There's no good strategy for getting used to talking on the phone several hours a day, just deal with it.
24. Learn to work in a team
The lone programmer is gone! That's right, I used an exclamation point: that's how gone it is. You will be working with a team of other developers, content creators, managers, quality assurance personnel, and more. Your ability to work in a team will directly affect the outcomes of your project and your ability to improve your career.
25. Say Thank You
Anytime someone helps you, say "Thank You". Time is the most valuable asset to anyone working in the software industry, and they need to know you appreciate the time they gave you. It was a gift, not a right. Thanking that person will also encourage them to help you again, because you recognize that their time is valuable.
26. Make your job enjoyable
If you hate your job, then change something. Is your job to push buttons every day? Make a game out of it, create a robot to push buttons for you, just do anything you can. If you show up to work every day looking miserable and hating what you do, you will never go anywhere. In a cruel twist of fate, you will probably end up stuck there forever. If you hate your job so much you can't possibly make it enjoyable, find a job that you can.
27. Take Breaks
That's it: take breaks. It's ok to skip them sometimes, but not all the time. Getting out of your cube and getting some fresh air will help clear your mind and improve your productivity.
28. Be A Cool Guy
If you’re not a cool guy, pretend to be one when other people are around. Don't spend your time crapping on everything you disagree with, don't bad mouth people, and try to have a good outlook on the things that are happening around you. For better or worse, what others think about you is what will ultimately decide if you’re going to have upward momentum in your company.
29. Don't complain
See 28. It's annoying to be around someone who complains all the time. As your mother would say, "If you don't have anything nice to say don't say anything at all" - unless it's constructive to your project.
30. Do the best you can with what you have
The world is not an ideal place. When you go to work your computer might be too slow, you might not have the software you need, and you will definitely never have enough time to complete projects, the "right" way. It's important to work with what you have. You will seem smarter, be more likable, and be considered a good worker, if you manage to get your job done with what's available. There are times when you have to ask for things, but doing so rarely will help you get the stuff you need, when you really need it.
31. Find out what you like and don't like about your job
If you know what you like about your job, you can get better at those things, and, if you are good at something, people will want you to do it. No one asks the guy that hates coding to whip up a script to test the database. Also know what you don't like about your job: it will allow you to divest yourself from those things, and hopefully push it onto somebody who does like it.
It sounds crazy, but tell your boss, "I don't like doing this thing, is it possible to have someone else do it”. This may seem bold, but a good boss will give it to someone who's good at it, or your boss will tell you why you should be doing it. If your boss freaks out about a statement like that, QUIT. Go find a job with a good boss.
32. Never Get Drunk At Work Parties
It's cool to have a few drinks to loosen up and have a good time, but its way uncool to be the drunken idiot kid. It could wreck your work environment, your job, or your career. If you can't handle your booze, just don't drink at all.
33. Don't do things because they are cutting edge
Knowing about the latest and greatest techniques in your field is important. It provides opportunities to improve your work, show your knowledge, and improve the overall quality of whatever you’re working on. However, just because things are new doesn't mean they’re better or good. I have seen people completely re-code thousands of lines, just to move to their new favorite programming language, only to switch back after a few months. Newness does not guarantee goodness.
Before switching techniques, languages, or anything else, carefully decide if it provides a large enough benefit. Also be sure that the solution you’re using now can't be tweaked to offer that same benefit. For an industry so concerned with time, it's ridiculous how often we are willing to climb a giant learning curve just to be on the latest and greatest thing. Be practical.
Special thanks to everyone that put up with me while I was learning to be a professional. I was a pathetic intern.