When it comes being great at what you do in life, thereโs no real formula. Some people have that natural talent for something, and others just love it enough to dedicate the time to get better at it.
Regardless of how you ended up where you are, there isย alwaysย room for improvement. Iโm going to talk about some of the things that have helped me along the way become better at what I do: write kickass software. Realistically, you can substitute โSoftware Engineerโ with your field and most things should still apply.
Now, in no particular orderโฆ
Donโt stopย believingย learning
Just because your schooling stops, it doesnโt mean you stop learning. You should be constantly learning. New technologies come out, new ways of thinking take hold, and new problems need to be solved. You canโt stagnate and keep solving new problems with old ways of thinking. Sometimes it works, and sometimes it does end up being the best way to do it. Many times you have to explore new spaces and examine the problem from a different point of view to find a truly excellent solution.
Learning happens a number of different ways:
Read
Blogs, magazines, professional publications and journals, books, code, schematics, experiments, studies, whatever. Read as much as you reasonably can. Donโt limit yourself to one or two formats either. Donโtย justย read blogs. Grab a subscription to anย ACMย publication (Transactions on Software Engineering maybe), or whatever your field has for professional publications. Read actual books too. There is a lot of fiction being read these days, and with the explosion of blogs and online reading, physical non-fiction books arenโt as popular.1ย Find the good ones in your field, and buy actual books (or Kindle ebooks) and read those too.
Conferences
Go to conferences if you can. Itโs sometimes a big deal and can cost a good chunk of money to fly places and get hotel rooms, but itโs worth it. I havenโt even been to a software related conference yet, but I can already tell itโs worth it judging from the tweets, slides, videos, and simply all the people that attend. I always learn things checking out slideshare and vimeo after the fact, so it makes sense youโd learn even more (and have more fun) actually attending.
Professional development seminars
These are designed to help make you better at your job, and improve your career. In my world, they are usually a day or two, but can be multi-week things that cost lots of money. Check if your employer can help you out, because in the end, it benefits them too.
Learn from others
I sort of break this into a couple main parts:
Listen to criticism and feedback
If somebody rips on your code, design, solution, whatever, it is in your best interest to listen to them. It doesnโt mean you have to do what they say, but you at least listen to and analyze what they are saying. Their concerns might be completely legitimate, since they are looking at the problem and your solution through a different lens. They have their own view and are thinking about different things, and might see problems you didnโt.
Examine solutions to similar problems
Letโs say you decide youโre going to write a new source control system. You probably already have a lot of good reasons if you are doing this, but youโd be stupid if you didnโt examine how existing software solved the problem. Go read about git, mercurial and svn. See how they deal with merge conflicts, serving repositories, and keeping things fast. You can learn a lot by examining existing solutions.
Teach
I canโt find the quote, but itโs something relating to how you donโt truly understand something until you can teach it to somebody else. So teach!
If you love something, help other people learn about it. Convey what knowledge you have so that others can help solve problems and apply new technology to new problems. Teaching can take the form of giving talks at user groups, meetups and conferences, running formal classes at a site likeย codelesson, doing corporate training (like whatย Github offers), or even just walking a coworker through a piece of code you wrote.
Whatever format you choose, get out there and teach.
Love your jobย andย work on stuff you care about
These two work in tandem. If you hate tax software, donโt work at Intuit. Pretty straight forward. You might say โbut thereโs no good software companies in my area!โ
Move.
If you donโt like your job, donโt rule out relocating to get a job you will enjoy. If you canโt go to work and enjoy what you do, you might not have the motivation to work on your own stuff, since your day will be so depressing.
Think about it: if you hatedย MIPSย assembly programming, and would never do it at home, why would it be acceptable to go to workย every dayย and do it there?
Do what you love, and love what you do. No excuses!
Be consistent
I think consistency in how you carry and present yourself, online and off, is a big thing. It can encompass a bunch of things, from your dress (Steve Jobs is the ultimate in clothing consistency) to your coding and writing style.
As an example, I ensure that my avatar and bio is the same everywhere. Pretty much any site Iโm on, youโll be able to see my cartoonified self and that Iโm (at the time of writing) a โSoftware engineer (EIT) in Edmonton, Alberta, Canada.โ I might leave the location out if there is another place to put location, but itโs there somewhere.
Writing style, dress, bio, attitude, and contact information are all things to keep in mind when it comes to being consistent. If you start giving out an email to be contacted at, keep using that email. If you are consistently a nice person on the net, donโt randomly jump out and be a dick somewhere.
Be consistent. It helps people remember who you are.
Be contactable
Living in a box sucks. If you want to move up in your career (this doesnโt mean climbing the corporate ladder), you are going to want to communicate with people in your field. Have an email and maybe a phone number on your business card. Useย Skypeย for web calls. Use a contact form fromย Wufooย if you donโt want your email out in the open. But why not? Use Gmail and benefit from their spam filtering!
By being contactable, youโre making yourself available for teaching (โhey, how did you do this?โ), job opportunities, and criticism, which as we talked about are all good things.2
Participate in the community
This isย Why the Lucky Stiff. ย Heโs awesome. He did so much for the ruby community that when he dropped off the internet, people stopped what they were doing to pick up where he left off, and take over maintenance of the the things he was involved in.
If he just sat at home and kept his stuff to himself, he wouldnโt be nearly as awesome.
If youโve got cool code, show it to people. If you did something cool in your field of work, show it off and teach others how you made it.
Participate in forums, user groups,ย IRCย channels, webinars, and Twitter discussions. Get out there and start talking to people, on and off the web. Go to conferences and get in on hack nights, and find people to go to lunch with.
Crazy and interesting things can come outย during lunch.
Practice your trade (code) for fun
If youโre not coding at home, for fun, youโre doing it wrong. Donโt give me crap about I-donโt-have-time. You do, youโre just not managing it properly. Scott Hanselman has two kids and he still programs the crap out of things. If all the programming you do is at work, and you legitimately donโt want to program when you get home, see the section โLove your jobย andย work on stuff you care aboutโ?5
This goes past programming too. If youโre an electrical engineer and a guitar player, make a guitar amp. If youโre a carpenter, make a badass swingset for your kids.
Just work on something thatย youย want to do at home. If what you want to work on is what youโre doing at work, then make like The Eagles and take it easy.
Get shit done
This is from Joel Spolsky. If youโve ever seen a job posting forย Fog Creek Softwareย youโll see they really only care about two things: smart and gets things done. If you are those two things, it doesnโt really matter if you are a python/django guy or gal, and they need somebody to work on their Wasabi based application; youโll pick it up pretty quick. Itโs sort of like going to work for a different carpentry shop and they say โhey, I know youโre used to red hammers with leather grips, but hereโs a blue hammer with a badminton style grip.โ The language is basically just a tool, and if youโre a smart cookie that doesnโt screw around, the tool doesnโt really matter.
Stay organized
Use a todo list or go farther and subscribe to theย GTDย philosophy. I tried theย GTDthing, and I still sort of use parts of it, but I cram things intoย Remember The Milkย to keep track of things I need to do, or want to do at some point. This gets things out of your head, and into something where you donโt have to think about them all the time. I also use bug trackers to keep track of specific things on specific software projects Iโm working on.
Cut your losses
I know you might want to push through on something, but some things just arenโt worth doing or finishing. I had wanted to do a Gravatar clone using Rails 3 as an example application for when it first came out. It wasnโt set in stone, just something I thought would be cool. But then Rails 3 was out, and I got sidetracked doing other things, and now itโs taken a bit more hold. Me spending time on that application would kind of be a waste, considering Rails 3 has been out for a while, and my blog is also Rails 3 already. If an item has been in your todo list for a long time (maybe it was just a random thought), consider whether or not it still needs to be in there instead of just doing it. This also applies to things youโve started, but have fizzled out. If itโs not exciting or relevant anymore, scrap it and work on something fresh and awesome.
Be asynchronous
This one is weird, but I wanted to talk about it anyway.
Actually use todo lists andย RSSย feeds. Like email, these are asynchronous systems. You send an email, subscribe to a feed, or write down a todo item, and you donโt worry about it too much anymore. Sure, you check your email the next day or read your feeds before bed, but you donโt have to keep checking a website for new content or be sitting staring at the โJohn is typingโฆโ text on Skype. You can dedicate time to dealing with things, write them down when you think of them, and deal with them in the time youโve set aside. The more you can get out of your brain into some other system the better. This allows you to focus on the task at hand. Later, when the time comes to deal with email, or read feeds, you can focus on that.
These are some things that apply more to computer related fields , but I list them because theyโve really helped me out.
Get a Kindle
Seriously. This thing is awesome. Itโs beautiful to read, you can send other documents to it and have them converted (professional journal style papers inย PDFย form convert very nicely) for easy reading. The battery lasts forever, and Amazonโs book selection is great. If you do a lot of reading, you need a Kindle. Itโs only $139!
Use Google Docs
All the littleย PDFย whitepapers, ebooks,ย PDFย manuals, everything I find on the net (reading or reference wise), goes into Google Docs. Itโs a great office suite of tools that works the same on all systems, so you donโt have to deal with โoh I saved it on my Mac and now Iโm on Windowsโ crap. It just works. Files are safe on Googleโs servers (I feel great about that, but you might have other opinions about keeping things in Googleโs system), and itโs completely searchable. Itโs not only limited to the office suite things either. I store PDFs, important archives, or really anything that I want to be safe and accessible.
It might not be the most useful thing in the world for you initially, but definitely check it out.
Boom
Thatโs it. Those are all the secrets. Well theyโre not really secrets, but I think theyโre going to help me do great things in the software world. Maybe they can help you too.
_________________________
About the Author
This article was written byย Daniel Huckstep of Verbose Logging. Daniel isย aย software problem solverย inย Edmonton, Alberta, Canada. He enjoys all kinds of programming, even assembly. see more.