Five Ways to Become a Better Software Developer
Tuesday, January 13th, 2009by Josh Tynjala
For a while now, I’ve wanted to put together acollection of tips for up-and-coming software developers. I’m talkingabout talented guys and gals who dream of working on more excitingprojects and maybe getting a little recognition. Not entirely sure howto go from code monkey to code ninja? I don’t haveall the answers, of course, but each of these suggestions haspersonally helped me improve my career and discover other talentedpeople that were definitely worth meeting.
Contents
Write Code For Fun
For some software developers, coding only happens at the office.Once they step away from their desk, they won’t touch a compiler untiltomorrow or after the weekend. On the other hand, many of the mostsuccessful developers I know write a little bit of code at home too.Some contribute to open source projects. Some simply build theoccasional little utility for themselves. Some actually build somethingcool enough to become a product and make the developer a little extramoney. Whatever the focus, side projects like these are a great way toexplore interesting ideas and to learn new skills without all thedeadlines and politics you deal with every day at work.
Obviously, you don’t need to make spend every night coding. By allmeans, have a social life. However, if you find yourself sitting on thecouch in the middle of the week with nothing to do, brainstorm aproject idea that you’ll find exciting and challenging.
Fun Side Project Ideas
-
Use some libraries or APIs you’ve been itching to play with, but never had a reason to use in your everyday work.
-
Create a new application or extension to an existing app that will help you get something done faster.
-
Try to build something you’ve never seen anyone do with your technology-of-choice before.
-
If all you know are web apps, switch it up, and learn how to write a compiler or an operating system kernel.
-
Try to learn a new programming language.
Be ambitious. Stretch your limits. It’s okay if you fail. You’ll learn something no matter what the result.
For me, personally, coding in my free time has been the best way tolearn anything about software development and various technologies. Ijump into new frameworks, APIs, and technologies headfirst and come outwith greater knowledge that helps me a thousand times over on thethings I actually get paid to do. My co-workers often say “let’s askJosh” when they run into trouble because they know I’ve spent a lot oftime digging into a wide variety of features. In many cases, I’vealready discovered a bunch of quirks and bugs that they might run into,and I can often share workarounds so that they won’t get stuck forhours figuring it all out themselves like I had to do.
Though I never get paid directly for the time I spend on fun sideprojects at home, I’ve found that the skills and knowledge I gain onthese sorts of projects earn me better rewards in the long run.
Study Software Architecture and Design Patterns
Beautiful code is useful, reusable, extensible. Strive to make thequality of your code better as your progress through your career.Figure out how to make functions and classes more generic. Find ways tomake your code more extensible so that other developers can createcustom functionality easily without changing the internals. Discoverand experiment with new ways to get the same tasks done to figure outif you can do something better.
One good way to improve the quality of your code is to look at codewritten by other developers. Check out the code other members of yourteam have written. If you find something interesting or confusing, goover to their desk and ask about it. Your co-worker will probably enjoyknowing that you’re interested in his or her work, and you’ll learnsomething in the process. Alternatively (no, additionally!), look atthe source code for prominent open source projects,and try to figure out how they work behind the scenes. I like to lookat code from libraries and frameworks that I use in my daily workbecause I intimately know the input and output of many of the APIsalready. If you’re feeling confident, see if you can improve any of thecode, fix a bug, or add a new feature. One of the best ways to learn isto get your hands dirty and do some real work.
Likewise, you should let other developers look at your code andprovide suggestions. As you probably know, in a professionalenvironment, this is called code review.Allow them to ask questions and make critiques. Don’t be afraid ofsomeone telling you that something in your module isn’t the best itcould be. It’s easy to feel defensive about something that’s taken alot of hard work, especially if you feel proud of how it turned out. Ilike to think about it this way: if my code isn’t the best it could be(most importantly, if it has bugs), I’d rather get it working properlynow than to have a disgruntled user complain about its problems later.Even worse, they might give up completely and fail to tell me aboutwhat went wrong! Mistakes happen. Acknowledge that something isn’tperfect, and when you fix something after receiving a bug report, behappy that you have one less thing to worry about in the future.
Consider learning about design patterns.A design pattern is a commonly accepted way to structure your code tosolve a type of software engineering problem. They don’t provide thecomplete solution with everything finished for you. Instead, theydescribe a more generic architecture that applies to multiple problemsthat have similar requirements. Generally, development frameworks arethe best place to find extensive use of design patterns. Often,frameworks use patterns to help developers structure projects in a morestandardized and efficient way. Additionally, their use of patternshelp to decouple parts of a project so that future changes have a l
essimpact across the entire codebase. Many teams like to use a singleframework from one project to the next because it helps the developersbecome productive faster both when starting new projects andmaintaining existing projects.
Start a Blog
You know all those cool little projects and experiments you’ll soon be building in your free time? Consider starting a blogwhere you can share that stuff with others. Blogs don’t just have to bediaries about the mundane details of your life. For many successfuldevelopers, a blog’s content can be as effective as a resume. I can’ttell you how many hiring managers have mentioned that they enjoyedreading a few of my recent blog posts. A blog with excellentdescriptions of technical concepts, source code samples that followbest practices, and explain things in casual and friendly tone can be astrong supplement to help an interviewer evaluate a job candidate.
Allow people to comment on your blog posts. Be the person thatstarts (or continues) a great conversation. Don’t be afraid of feedbackor criticism. Everyone learns by making mistakes. My Compositionteacher from my freshman year in college once explained that the bestessays tend to have the most red-ink feedback in the margins. Not theworst ones. He explained that if you get constructive feedback fromsomeone, its generally because they like what you’ve created, and theysee value in helping you improve it.
A Few Blog Post Ideas
-
Share some clever code or a useful class you wrote, and explain howit helped you solve a difficult or normally tedious problem. If ithelped you get something done easier or faster, it’s likely that otherpeople can benefit from it too.
-
Talk about the process you used to implement a project frombeginning to end. Tell your audience what worked and what could beimproved the next time you need to build something like that. Everyonewants to get their work done faster and more smoothly. Learning aboutthe challenges another person has faced is a great way to be preparedfor the future.
-
Has a company relevant to your field announced a useful (or useless)new product or service, or has a prominent industry leader saidsomething very controversial? Share your own opinion on the subject. Do notwrite a “me too” post that’s only a paragraph long just to link toanother blog or website. Collect your thoughts and contribute to theconversation by writing a response to the news from your uniqueperspective. You may discover that all those lame “me too” posts startlinking to your blog as well.
In short, focus on creating useful content that will help others orprovide relevant information that they may not find anywhere else. Ifyou put useful information out there, people will find it and then comeback for more.
Join a community
Whether we’re talking mailing lists, user groups, conferences, orsome other venue, developer communities spring up anywhere andeverywhere. These communities can provide awesome ways to improve yourskills by learning from others, to help others by sharing your ownexpert knowledge, and to meet like-minded developers that may becomefriends, colleagues, and a part of your growing professional network.
Though the least personal, mailing lists and forumsare a great way to take a first step into participating in a technologycommunity. While blogs are a bit more monolithic with a single sourceof discussion topics and shorter conversations (if any), forums andmailing lists produce more longer-term discussion on a wider variety oftopics. In general, things are informal, and a lot of discussion(depending on the community, of course) starts from someone having aproblem and looking for advice. In more active communities, discussionsabout frameworks, best practices, and new techniques for solvingproblems can grow to hundreds of messages and provide a wealth ofreal-world experience.
Conferences often give you access to a national oreven worldwide community of people working with your technology ofchoice. They provide you with opportunities to travel, to meetprominent bloggers and community leaders, and to have a good time whilestaying relevant to work. They can be expensive, though, so you’lloften have to ask your employer to pay for your trip, and they’llexpect you get more out of the experience than personal networking.They want to know that their investment helped you learn something thatwill benefit their business. Your best bet for learning, especially ifyou’re like me and you already stay up-to-date on the latest andgreatest through blogs and other online sources, is to go to sessionsthat cover technologies or features you don’t normally use or to focuson sneak-peek type sessions where something is being introduced for thefirst time.
If you’d rather stay near home, or if you don’t have the budget for a big conference, consider joining a local user group.These small city- or region-based communities generally offer freemonthly meetings where developers can get together for a few hours chatabout tech. There’s often a presentation by a group member or avisiting professional on topics similar to those found in conferencesessions, followed by some informal discussion that may meander to awide-variety of topics. After the meeting, everyone may go out for acouple beers and continue chatting about the tech they love. It’s agreat way to find work, look for new employees, and learn what otherdevelopers are doing in your area. You may be surprised to discoverwhich companies, big and small, have offices nearby. In my opinion, oneof the best parts of a user group meeting is that the informal settingtends to make everyone more approachable and friendly. It’s not asintimidating as the crowds of several hundred to several thousandyou’ll swim through at conferences.
Keep Yourself Motivated
Once you start down the road to success, things start to feel a bitdifferent. People start showing you more respect. They ask for youropinions on how to best approach a problem. They listen more carefullywhen you have something to say. It feels great! However, that’s notreason to stop working hard to be a better developer.
If you stop working on fun side projects, learning new techniques,blogging, and participating in communities, you’re going to eventuallyfall behind. One day, you’ll discover that all the cool kids are“suddenly” doing things you don’t quite understand anymore. Sometimes,this is partially inevitable. Once you’ve become one of the best atwhat you do, you start to spend more time on very specialized projects.You end up in your own little bubble, and you can easily rationalizenot staying on top of every new development. That’s not necessarily abad thing, but there’s a line between doing this and getting toocomfortable or losing focus.
Many times, feeding the desire to become a better developer offersrewards that will continue to motivate you to do more. Praise andrecognition along with chances to work on more exciting and interestingprojects are often enough to keep you excited. At the same
time,overstimulating yourself (by overscheduling) can be a powerfuldemotivator. With too much “real” work, you may find yourself too tiredto do the fun stuff like blog or build side projects. When thathappens, you lose a powerful influence: you won’t be stimulating yourmind with new ideas from outside sources. I find myself at my mostcreative after I’ve worked on a project in another language or if I’vetalked shop with other developers working on widely-different projects.
Every developer is different. What works to keep me motivated maynot be what works for you. If you’re feeling a little burnt out, take amoment evaluate what has changed recently. Brainstorm new ideas or findinspiration elsewhere. Many developers have non-programming hobbieslike playing an instrument, working on cars, or mountain climbing(among many, many others). Often, it’s something that they considerboth stimulating and relaxing at the same time. Don’t let yourself getstuck in a rut too long. Be proactive and figure out what it takes toget yourself back on track.
Final Thoughts
Certainly, I don’t consider this list of tips an exhaustiveresource. Nor would I say that doing all these things will be right forevery software developer. However, I’ve described many contributingsuccess factors in my own personal career as I see them. I would haveloved to read an article like this when I was just starting out. Ifyou’re an experienced developer, what helped you get better at your job?
