Sunday, August 11, 2013

The biggest challenge to being a software developer...

The more I think about it, the more I believe that the biggest challenge to software developers these days is dealing with 'the learning gap'. The learning gap refers to the fact that when a programmer is in college they have plenty of time to learn new tools and technologies, but once finished with college and working full time, we don't give ourselves enough time to learn new things. Our field changes so fast that it is impossible for a professional developer, with at least forty hours of 'real' work per week, to experiment with all the new programming languages, frameworks, and techniques out there, let alone master them. I believe this is why programming is mostly a young person's game.

Imagine you are writing code for a big company on a stable, reliable stack. If you work on the project for a few years but don't have the time to learn new things along the way, then when the project wraps up your skills might be out of date. At that point you don't have many options. You could find a similar job (which might seem boring and repetitive but I am guessing many people will do this at least a few times), take some time off to learn the latest and greatest (all the while being unpaid), or you could take that non-technical management job (perhaps getting a raise).

As soon as you take that management job, though, you will only fall more and more behind. I have met people who have taken this path and after just a little while they lack the confidence to ever get back in the game. They seem to have forgotten just how awesome they were when they were slinging code. This premature retirement from solving complex technical problems seems like a waste to me that could be avoided if we all made learning an essential function of our jobs.

I see some obvious solutions to this problem:
- Make learning a part of the culture. In your company, make teaching to, and learning from others a measured performance goal. 
Hire people who are good problem solvers and let them learn what they need to know on the job.

While in college we have a rigid structure where we are expected to learn and practice along the way. Once we leave college most of us never have that structured learning experience again. Yes, motivated people can read books and blogs and keep up. But it is easy for even the most well intentioned developer to slowly fall behind. This is especially true once we start to acquire spouses, children, mortgages, etc.

The best way to ensure that you are keeping up is to learn in groups of your peers during work hours. I really like the idea of company sponsored 20% time, technical book clubs, meetups, fed ex days, and lightning talks because they involve peers pushing each other to stay current. I think an effort should be made for everyone on the team to work on small, less than critical projects that use experimental (or at least new-to-you) technologies. In addition, team members should work with people they don't usually work with on these projects. This is good for the employees and it is good for the companies to have a broad set of experienced people.

The main point that I am trying to make is that our peers and colleagues have to become our teachers, and our companies must support developers' teaching, learning, and experimentation. Teaching and learning should be an in-house activity. Luckily, all of this teaching and learning can easily be quantified and used as a performance measurement. If you are not actively learning from others and not making the people around you better, then you are not fully contributing to the team.

Another option to ease the problems associated with the learning gap is to hire problems solvers and let them figure out the technology stack on the job. This is especially applicable if your organization already has a strong teaching and learning culture. I wonder how many former rockstars turned middle managers at big companies would like the opportunity to get back in the game without the pressure of having to know everything before their first day on the job.

If I was hiring, instead of listing twenty impossibly diverse skills in bullet points this would be my only requirement:
Looking for an expert problem solver. Candidates should come in ready to learn new things and teach others what you have learned over the years. 
You don't know <hot new technology>, but you just spent the last several years working on an awesome product? No problem, <hot new technology> isn't that hard. If you were awesome on your last project you will be awesome on our project.  
Feel free to steal this for your next job posting. I might even apply!


  1. great article with practical observations.
    Also written by a pretty darn good teacher!

  2. Enjoyed the article. As someone who didn't attend college and learned mostly on the job or after hours I can certainly appreciate where you are coming from.

    How do you think "social coding" communities, like GitHub, have helped with "learning?" There seems to be a big opportunity to learn from open source projects that I'm not sure most people are taking advantage of, including myself.

  3. Funny you should mention that...

    My students and I are working on, what I hope to be, a next-generation social coding site that allows developers to tell more interesting tales about what they have done and why. You can get a sneak peak here:

    The distinguishing feature will be the ability to add comments about how code has evolved and to read the 'why' as the code is played back. Normally, the 'why' doesn't get written down anywhere.

  4. yes , as a software engineer, you need to update your knowledges frequently.

    and you need to learn many and many domain specific knowledges to help you work better

    and many programmer encourage of their power from computer, so they have interesting of improve every side of life, which let them learn more :]

  5. When I read your blog, it made me think of most of my programming instructors who have not been programmers for 15+ years. I went to school this year to become a programmer. The discrepancy between what we are learning and what programmers are doing in the field is huge. I have been suspect that this is why.

    1. Being a college professor, I would argue that learning how to solve problems is the most important part of studying CS. If your school doesn't teach the latest and greatest tech but they are teaching you how to solve common problems, you are in good shape. There is no way for us to predict the future five or ten years out, of course.

      What I fear you will find is that once you are done with school and start working as a professional developer you will be surrounded by people who do not have the time to keep up. I see this as the bigger problem.

      My advice is to look for that 'culture of learning' that I mentioned when you are looking for that first job. If potential employers don't have it, that's a red flag. There are companies out there that value teaching and learning, you have to work hard to find them, though.

  6. i have 2 ideas about this:

    1, people need to consider re-learning allday for a long time (like 3 month) every 10 years after school

    2, people in management part still have fractional time, the problem is the current knowledge learning system require a continuous time, we can split knowledges into many more different small pieces, in that case, every pieces could be learnt in the spare time of those people, for eg, when you in subway or bathroom :]

  7. Your blog is nice. Your sharing information are all awesome. All information is relevant. Your data are relevant for visitors. Your blog provide the accurate and update information to the clients.

    Regards: Software Development Services in India

  8. This comment has been removed by a blog administrator.

  9. Thanks for your great information, the contents are quiet interesting.I will be waiting for your next post.
    Premium web Design.

  10. thanks for providing this information really it is helpful

    teaching challenge

  11. The information written in the article is descriptive and well written.It is also simple to read and understand.Good Read.
    Prestashop Theme Developer

  12. Acetech software development company is one of the leading software company India.

  13. You raised a very good point "The Learning Gap" is really a problem for developers these days and developers should really take it serious for their further growth!

  14. Thanks for share a best Software Development Company News.
    Software Development Company in Indore

  15. I am to an incredible degree appreciative to break down your blog.I trust you would give the colossal relationship in the field of web sketching out and change and Search Engine Optimization. Thank for the offer..

    expert of professional web designer service in bangalore

    experts in seo's companies in india
    best web developer companies in bangalore

  16. Hi! Thank you for the share this information. This is very useful information for online blog review readers. Keep it up such a nice posting like this. We are most leading IT & Software company in India

  17. Hey, very nice site. I came across this on Google, and I am stoked that I did. I will definitely be coming back here more often. Wish I could add to the conversation and bring a bit more to the table, but am just taking in as much info as I can at the moment. Thanks for sharing.

    Dai Software