So, you are a kickass programmer? You can write coherent code, tweak it to the last line for performance and spend hours refactoring it? Perfect! Btw, can you write well formed HTML? Or maybe a decently formatted Word Document with amazing content? Oh and yes, are you also good at a Drawing / Design tool?
Every few months I scan through countless resumes without a spell check or grammar check. With very little or no formatting in the resume, the applicant is making a statement: I’m a coder; I’m not supposed to know or care about Microsoft Word!
In a consultant’s life this statement doesn’t sell. Of course, you can’t play all the roles all the time but learning multiple aspects of software development helps you respect and appreciate “the bigger picture”. In special situations it allows you to be a one-man-army!
My Fifteen+ certifications are often discussed in casual conversations with clients, friends and colleagues. At times people wonder why I did certifications ranging from MCSE to OCP when I always was a Programmer at heart. I think Scott Ambler’s idea on Generalizing Specialist answers the question for me:
You may also want to become certified in one or more specialties. Although a certificate itself doesn't make you an expert, it does indicate that you've learned some of the background knowledge for your job. Like a university degree, certification is a great way to get your foot in the door, although you'll still need to prove that you can apply your knowledge in practice.
He describes the whole idea of being a generalizing specialist:
No, it's not an oxymoron: The generalizing specialist is someone with one or more technical specialties who actively seeks to gain new skills in these existing specialties and in other areas.
But what are these "other areas" that Scott talks about? The areas vary from individual to individual. If you are a developer who are starting out on his / her career or are a specialized .NET programmer who is submerging himself / herself in code or just one specialization, may I suggest that you also start -
- Learning Microsoft Word – Learning how to write formatted, presentable and good looking document with awesome content in an Art which takes time to master. Like all things it is practice that will make you perfect. Don’t shun documentation. Start learning the art!
- Learning a little bit of IT – Folks fumble when asked to configure IIS. Developers who are clueless about how to install active directory on a Windows 2003 box are not difficult to find. If you try really hard you might also find a developer who doesn’t know how to backup his data, format his machine, install Vista and then recover his data back. Learning the art of configuration will make you a better developer who is cognizant of the whole picture, including security. Rolling your sleeves, getting under your desk and tightening your own network cable instead of calling IT helpdesk will go a long way in making you confident in client offices! Setting up your own SVN and Continuous Integration Server will help directly in projects. I spent a few months of my career when I would switch as an IT administrator when Administrators were on leave or not available. Skills I picked up then and during my MCSE days help me every-day.
- Learn a Drawing / Design tool – I’m a Photoshop guy! The design of this blog isn’t perfect, but it’s self made. I don’t do the UI myself at work – we have specialized folks who do that – but then not giving the design folks a chance to complain about your messing up their formatting or well formed XHTML when you add your server side code to that ASPX file is a good feeling to have. :) Besides, being able to build your uncle’s website’s vision, your cousins marriage invitation card or the new wall of your room in Photoshop, is always fun!
- Learn Database – Table A has 3 rows 3 columns, Table B has 2 rows 3 columns – how many rows and columns does “select * from A, B” returns? I see countless folks fumble at basics like Cartesian Products or Normalization, look at me blankly when told to write fundamental SQL queries. Tweaking your databases will go a long way in making you write applications which run with blazing fast speed!
- Learn to write, speak and communicate – basically, learn how to be a thick skinned shameless developer. At the end of the day, every developer does some level of Business Analysis!
- Learn the language of your end users – If you are making an accounting application, start by reading the three golden rules of accounts. If possible go write a few journal entries! Following the specs a business analyst wrote works, but knowing the domain helps connect to the end users and clients much better.
Besides doing things like learning a new language each year, the first step to becoming a generalizing specialist is to look around you. Take a long hard look at all the other work that goes on around you besides the code that you write. You don’t have to be an expert in all that work, but every now and then, try to pick up a thing or two from all of it.
Can you do the IIS Setup and UI and Database Design and HTML and ASPX for your uncle’s website? Can you talk to him and build for him what he wants? How does your uncle’s website look after you’re done? Decent enough? Usable? Feature-Rich? Secured Enough? :) Start on your road to becoming a one-man-army who is a generalizing specialist today! I wish you luck!