I’ve been employed for one year but I’ve been programming for probably five or six and I don’t have a college degree. I’ve gone from tech support/basement hacker to employed software developer, and in the brief amount of time that I’ve been developing and getting paid for it, I’ve made an incredible amount of mistakes. In the paragraphs that follow I’m going to share what I’ve learned with you.
Do not wait for work to come to you. You’re expected to tackle work on sight. Sitting on the sidelines will not yield results. No results means no money and no future. When the ship is sinking you can wait for the captain to shout at you or you can start plugging holes. Having come from low responsibility jobs (i.e. burger flipper, shelf restocker, tech support) I was used to having my work cut out for me and fed at a consistent rate. In fact, this is what I had been used to all my life and mostly through high school. I grew up this way. It’s a hard habit to break, especially when your parents never tried to teach you any kind of mental framework for achieving goals, and not growing up learning anything resembling a work ethic. Fast forward to today and I’m tackling work rather than waiting for it thanks to the job I have now.
Communication with the team is absolutely critical. Failing to communicate will have dire consequences. Communication is key in business, and when you’re a significant player in the company, the failures to use communication are stark and extremely apparent. If you don’t communicate with your team, you may trail off somewhere far from the intended goal. Communicating with your team keeps you focused. When I’m in the habit of communicating constantly with my team, I’ll think twice before trailing off and refactoring something that doesn’t need to be refactored, because I know that’s what I’ll have to report to my boss and my team.
Embrace the dictatorship. Software development teams are not a democracy. There are just some things you do not ultimately decide, and things will go smoother if you just go along with it, no matter how wrong it feels. I had drank too much developer kool aid and thought that only the cool kids use git and haml. This had some pretty bad repercussions when I started using these two technologies while the team was using svn and erb. You need to be on the same page. You need to yield to the people in charge. Even if you think they’re wrong, you will learn an utterly insane amount from seasoned pros by just yielding to their advice. What I had ultimately learned is that there is no Right Way™ other than the way that gets the job done efficiently. When developing a product it’s better for one person to hold one clear vision about the product. As Henry Ford once said, if he had listened to what his customers wanted, he would have made a faster horse.
Dedicate yourself to the project. This is why you’re earning a salary. Things break at night and on weekends. These are the implications of earning a salary. Being just a kid fresh out of high school the implications weren’t clear to me. Because I had grown up with the rank-and-file masses, and not really engaging in any team activities, the whole idea of teamwork had eluded me. Don’t make my mistake and take the contract between you and your employer lightly. A lot of jobs won’t notice you slacking off, i.e. the jobs I’ve had my entire life. As a software developer, slacking off is noticed very quickly since net income usually depends highly on your work. If you’re a walmart employee nobody will notice, because you generate so little income for the company. However, as a software developer, and a significant player in the company’s success, your slacking off is extremely noticeable. If you fail to meet deadlines, you cost the company a lot of money. And what is the most noticeable metric in business? Money.
Base your decisions on the bottom line. In the business world, everything is about money. This simple truth can escape a software developer sometimes, especially one from the open source world. Whenever you’re making job related decisions, there must be one major thing on your mind, above everything else: will this bring the company money? Will it cost the company money? As an amateur, and someone who held no stock in the company, my priorities weren’t money. This led me to concern myself with trivial matters such as switching version control, refactoring, experimenting with a new language, etc. Don’t make this mistake.
After making all of my mistakes, it is now apparent why past experience and college education are highly valued to hiring managers. It’s because they’ve been building the mental framework to get things done for years. If you’ve been a hobbyist programmer for a long time and you’re looking to become a professional programmer, take some time to get your priorities straight, and make your emphasis on business apparent to potential employers, because you probably won’t be the first “open source hobbyist programmer” to come their way. Being a software developer is a grown up job. If you’re working at a lesser job, take advantage of the opportunity to learn responsibility, even if you’re just a walmart employee. I had the opportunity to practice time and task management but I didn’t. I’m kicking myself in the ass for it. I look around and see that my co-workers have probably been learning time and task management probably since they were kids. I have to force myself to learn good habits, and it’s sometimes a struggle that requires mental effort. If you’re like me, you can probably learn a lot from my advice. Hopefully my mistakes are not ones you will have to make.