Will software developers continue to be in high demand in the future?

These are some of the trends that I have seen over the years:

  • Data agnostics software: if you’ve ever spent time jumping from project to project developing custom software for various customers’ requirements, you will pretty quickly come to the conclusion that you’re basically developing the same software over and over again and the reason you’re doing it is because each customer has different business rules. So to make your own life easier, you will inevitably start thinking about removing the business logic out of the code and making the software more and more customisable thereby making it data agnostic so that it doesn’t know anything about the data its working with. By developing data agnostic software, you are basically handing over the power and responsibility to your customers enabling them to implement the business rules themselves instead of relying on you to change code every time they change their business rules. Doing this is all good and great for the customer and even for your own company, because you can then resell your software to many more customers without having to code business logic for each new customer. However, the problem is that other competing software companies that are still coding custom business logic will be blown out of the water by you i.e. their customers will now rather just buy your out-of-the-box and customisable software from. The end result being that there will be less and less demand for software developers building custom business applications. That is why for example most corporates prefer implementing large systems like ERP, CRM, WMS, CMS etc. that are trusted and have been proven to work as opposed to developing their own system from scratch. Although these large software systems are more and more business logic and data agnostic, for the time being there will still be a need to have technical people installing and customising these “out-of-the-box” products. However the “technical” people required to do so will be less and less technical i.e. less and less technical skills will be required to perform customisations for each customer.
    • Example: back in the 1990s, if you wanted a simple company website you would have hired a web developer to put together a few HTML pages i.e. Home, About, Contact Us page etc. At some point, some clever guys decided to develop a CMS (Content Management System), which is exactly that: a data agnostic piece of software that doesn’t know or care about what content you’ve got, but it gives you the power to configure it yourself. You would still need an IT guy to perform the configuration and handle the hosting, but you no longer needed a web developer.
  • SAAS (Software As A Service) & PAAS (Platform As A Service) in the cloud: to make matters worse (or better , depending on your perspective), these large systems (ERP, CRM, WMS, CMS etc.) are now being moved into the cloud and offered as a service i.e. monthly payments to access the software online. That means that business people no longer even need technical IT staff to manage the hosting or to install and configure anything because that is now handled by the SAAS providers. Thus, once again making more technical people redundant.
    • Example: at this point the customer no longer even needs a CMS hosted on their own server. Instead they can just create their own website on wordpress.com without having any technical knowledge. If integration with a payment portal is still too difficult, they can even use Facebook Store or shopify.com.
  • Platform agnostic software: I started my career in mobile development, back when the popular operating systems available to develop for were Symbian and Windows Mobile/CE. If someone wanted a mobile app developed, they would have needed to hire a developer to code the app from scratch. Coding an app for Symbian was incredibly difficult with a 6–12 month learning curve, Hence requiring highly skilled Symbian C++ developers. In the company that I was working for, we were developing a .NET Compact Framework to run on Symbian, thereby allowing less skilled .NET developers to write code targeting the .NET Compact Framework and thereafter run that same app on Symbian. The very same people that I was working for ended up starting another company (devicemagic.com), allowing people with limited technical skills to put together a mobile app that will run on any of the popular operating systems like Android and iOS. Once again, if your requirements for a mobile app are relatively simple (data capturing, taking pictures etc.) then you no longer to hire expensive iOS, Android or .NET developers to build the app for you.
  • AI (Artificial Intelligence): at this stage AI is still a baby, but the baby is growing. Once fully grown it will further exacerbate the situation where we might see autonomous software writing code by itself based on your specifications. With AI programming languages will not even be needed anymore because the only reason programming languages exist is to enable humans to define the execution of a program. If the machine is generating the code, it will simply generate binary code.

The moral of the story being that it’s survival of the fittest i.e. the big fish will continue to get bigger by eating the smaller fish. The name of the game is consolidation; of technology, money and power. But to be fair humans have been playing this game since the beginning of time to the point where the little people on the ground get fed up and come out with their pitchforks, after which war breaks out, people die, everything gets destroyed and the survivors start rebuilding everything from scratch thereby starting the cycle all over again. But even knowing this I still can’t stop myself from recoding that function in my code to remove the business logic so that I can reuse it with my next customer.

To answer your question: as long as software still exists in this world, there will always be a need for software developers, but personally I think that the demand will drop in the long term. In a few decades, only the most talented developers will have jobs and they will most likely be working for the big fish, like Microsoft, Apple, Google, Oracle, SAP etc.

Knowing this, what can you do about it if you’re currently a software developer? The answer is; not much … except enjoy the proverbial gravy train that you’re currently on.

In the interim: focus on the following caveats of the above mentioned trends/technologies:

  • Security & Trust: there are still plenty of companies out there that are hesitant to move their data and infrastructure to the cloud. This especially applies to financial institutions which hate the idea of putting their money (numbers) into the cloud hosted by a third party. Their concerns being centred around the security of their data and whether or not they can trust the cloud hosting providers with their data/money.
  • Control: many of these companies are still run by control freaks that want highly customised software that works exactly the way they wanted to work. They will never be able to get that with so called “out-of-the-box” solutions. Thus they will still require highly skilled developers. For how long … only time will tell.

For the future: plan ahead by deciding between two different paths:

  • Technical: if you decide to stay the course and focus on being technical, then you better make sure that you are part of the best of the best. Average won’t cut it if you’re planning on working for one of a handful of tech companies in the world. Keep in mind that age will catch up with you sooner or later, and competing with twenty something year old guys that have no family, commitments or a life for that matter, will prove to be incredibly difficult.
  • Business: alternatively, you can become more business minded, worrying less about the details of software and more about how to sell it or manage the people implementing it.

What is it like working with extremely intelligent people?

In terms of intelligence, it’s an absolute pleasure working with intelligent people. Everything runs smoothly and everything just works. You should always surround yourself by people that are smarter than you are, because it’s really wonderful to have people that you can learn from and count on. Working with less intelligent people is more difficult because they may not easily grasp certain concepts and you will require more patience and management skills to make up for their lack of intelligence i.e. relative to your own intelligence. However everybody can teach you something, and everybody has different sets of skills, and sometimes perhaps for financial or practical reasons you may need to also work with people that are less intelligent than yourself. You should be kind to these people and learn from them too.

Having said that, one must keep one thing in mind that if you’re working with someone that is less skilled/intelligent, you can always teach this person what they need to know, but you cannot change an a**hole.

So the more important question is not whether or not someone is intelligent, but rather what kind of personality do they have … and more importantly, how wise they are. You will find narcissistic people on both sides of the intelligence spectrum and you need to stay away from them at all costs, regardless of whether they are geniuses or idiots.

  1. First prize: intelligent people that have empathy and wisdom.
  2. Second prize: less intelligent people that have empathy and wisdom.
  3. Third option: intelligent people that do NOT have empathy and/or wisdom. Work with these people only if you’re forced into it, in which case try to limit your interactions with them as well the power you give them. If you cannot limit their power or limit your interactions with them, then rather don’t bother.
  4. Fourth option: less intelligent people that have no empathy and/or wisdom. This shouldn’t really be an option. It’s best to stay clear of these people for the sake of your own mental health.

All of the above “options” should be relative to your own intellectual and emotional intelligence.

How to become a very good programmer

Firstly, I’ll tell you what you shouldn’t do to become a good programmer. No matter what anybody tells you, if you spend too much time doing any of the following things it might improve your skills a little, but you will never be a good programmer:

  • You won’t become a good programmer by just reading books.
  • You won’t become a good programmer by memorising code and algorithms. Programming is about thinking not about remembering. You can have the best memory, but if you’re not thinking for yourself you’ll NEVER be a good programmer i.e. we have computers and the internet to remember things for us, so there’s no need for you to remember anything – you just need to know where and how to find the information you need.
  • You won’t become a good programmer by writing single functions and algorithms from the books you read i.e. writing stupid bubble sort functions and similar useless algorithms.
  • You won’t become a good programmer by testing other people’s code e.g. whether testing software by using it or writing unit tests etc.
  • You won’t become a good programmer by reading and debugging other people’s code. This might help in the short term, but only if the other person’s code is well written so you can pick up some good habits, but using bad code as examples will teach you bad habits that you will ultimately have to unlearn. In the long term spending too much time reading and debugging other people’s code will be detrimental to your growth.
  • You won’t become a good programmer by allowing others to micro manage you … because again programming is about thinking for yourself.

There’s only one way to become a good programmer: you have to take on a project and start it and finish it yourself from beginning to end. Don’t focus too much on reading books, syntax, algorithms and functions i.e. don’t focus on details at the beginning. Simply sit and think about an app/system you’d like to develop for yourself … something you’d really enjoy building and using for yourself. Ask your friends/family/lecturers for an idea if you need to, but you must start the project from scratch and finish it by yourself from beginning to end. Once you’ve gotten the idea, keep the idea in your head and be passionate about finishing it … from there everything will slowly start to come together. You will have features in your mind that you want to implement at which point you will start researching how to implement this or that. It’s only at this point that you should pick up a book or search the internet for answers about how to implement this cool feature you’ve thought of doing. As your app/system grows you will slowly by yourself start thinking about writing cleaner code to maintain it in the future to make your own life easier.

It is only through the process and struggle of bringing your own idea to life that you will learn how to become a good programmer. You should see yourself as an artist, not just as guy who writes code to get it to compile and run. If you’re only working on someone else’s code, or only reading books etc. you will lose your motivation very quickly and you will never find or utilize your talent.