Sunday, 30 September 2012

What I've learnt about professional software development


I've been professionally developing software for four years now and thought I'd reflect on what I've learnt over that time. I've gone for the traditional bullet-point style (hope you don't mind), and they're in no particular order.

Loyalty to your employer is good as long as it isn't blind


The software industry moves fast, but the systems at your current place of employment aren't as likely so. As soon as you feel like you've stopped learning in your current job, it would be wise to get looking for a new one. Too often people stick to a job for too long, only to realise their skill set has become irrelevant (VB6 anyone?). Therefore it is always wise to try your best to be in employment with skills that are currently in demand.

Know it's impossible to know everything, so concentrate on learning what's important (whilst knowing what exists)


Because the software industry is so large and constantly changing it's simply impossible to know everything. However it's equally important to not reinvent the wheel. So you should keep reading blogs, contribute to stackoverflow and go to as many user groups as you can. It's totally ok not to know everything about new technologies, just concentrate on what they can bring to your projects because good developers can learn on the job.

Get a fresh pair of eyes on your problem as soon as you've tried everything


As soon as you find yourself stuck with a particular problem ask one of your peers to take a look.  Don't worry about appearing stupid, your employer would much rather you be productive as soon as possible.  Too many times I've wasted time debugging a problem, only for a colleague to instantly know the solution. Also others have experienced what you haven't, so make use of it. When offered advice take it and ask questions.

Teach and be taught


Sit with your colleagues, write a blog, build up a stackoverflow reputation, but most importantly do anything which gets your thoughts peer reviewed. The only way you learn is by knowing you already don't know everything, or having a long held belief proved wrong wrong.

Absolutely everything should be as simple as possible


Your brain can only hold a handful of concepts at once, around about seven in fact. It therefore make sense that absolutely everything you do should be broken down into the most simple form possible. Read code complete, constantly refactor your code, and use source control to store the the reasons for your changes.

Users don't always know what they want


This is a big one. Users cannot always conceptually visualise what they want, and only get a narrowing of their requirements when they see something tangible. This is where methodologies such as Agile come into play, their iterative processes promote keeping the users in the loop, who can then crystallise their requirements before you've done too much work.

Ask prospective employers lots of questions (and) understand you can't trust recruiters to do this for you


When looking for new employment you should be interviewing the company as much as they're interviewing you. This means lots of questions. Use your experience to avoid previous employment pitfalls, ask them about the state of their source code and what they expect of you.  In fact you should have lots of questions that you've been collecting over your career.

As for recruiters, my experience is that many are only focussed on their commission and will do whatever they can in order to achieve it.  However there are also really good recruiters out there who genuinely keep your interests at heart.  When you cross paths with such a rare breed you should keep in contact with them even if not looking for employment, because you never quite know when you might need them.  I personally use linkedin to keep in contact, and have recommended the best.

Your experience


That's the end of my list, and hopefully I'll have a handful more points over the next four years.  Perhaps you think I've missed some big ones? Use the comments to share your experience, and perhaps I'll learn from you too.

7 comments:

  1. For those of us who can't learn software development as fast as others or don't have the time, I choose to develop the plans for a software I need and then outsource it to developers like yourself. I need the software for business and don't have time to program it myself or hire additional staff for one project. So I send it to others and I get a great product in the end. http://www.allshore.us/

    ReplyDelete
  2. Note that "skill set becoming obsolete" should not automatically mean you should get a new job -- quite often it means you should develop a new skill set.

    Likewise, "pace of job slowing down" should not automatically mean you should get a new job. Though it can be a big warning flag that your company is about to run into financial trouble, if you like the people you're working with I'd turn this into something worth talking about. Your company management will want to fix this, if they can understand the problem (unless they are also planning on jumping ship -- that's one you need to watch out for, and typically is associated with venture capital backing).

    The rest of your writeup looks spot on.

    ReplyDelete
  3. Thanks for your comments rdm.

    The problem is how many developers will "develop a new skill set" if their current employment does not require those skills?

    I would say the average developer, after finishing their 40+ hours a week, invest little time to improve their skill sets.

    Therefore you'd surely be better off selecting a job where you can learn within your 40+ working hours?

    ReplyDelete
  4. Wonderful, that’s exactly what I was looking for! You just spared me alot of digging around

    ReplyDelete
    Replies
    1. Really glad I could help. Perhaps you could help me too by linking to this article wherever you think it would be suitable?

      Delete

  5. Magnificent items from you, man. I’ve remember your stuff prior to and you are just extremely magnificent. I really
    like what you’ve acquired here, certainly like what you’re saying and the way in which by which you assert it. You’re
    making it entertaining and you continue to care for to stay it sensible. I can’t wait to learn much more from you. This
    is really a tremendous site.
    android application development

    ReplyDelete
  6. I couldn't agree more Matt, especially for points 2, 3 and 4. Took me a while to understand some of the points during the course of my programming career but I'm glad I came to their realization. Thanks for the post though.

    ReplyDelete