There are so many angles to this topic – and this is my third attempt in three days to organize my thoughts around it . The trouble is not that I don’t have enough ideas – it is that most ideas seem to contradict each other when I read them again . Let’s see if the third time truly is the charm 🙂
1. Everyone will NOT be a (meaningful) programmer in future
I know that is not a popular position to take today – but that is where my mind is at now . We will need to water down the definition of coding significantly to make “everyone is a coder” be a true statement . If I can change the tires and oil of a car , and program the infotainment system – should I be called an automotive engineer ? That is “roughly” how “everyone will be a coder” sounds to me now .
Don’t get me wrong – I do think that understanding how code works is important for everyone in future . That doesn’t translate to everyone coding , at least in traditional sense . Very complex applications exist today in MS Excel – created by business analysts who are not traditional programmers . If we change the definition of coding to include that kind of development – I can buy into “everyone will be a coder”. The closer statement – though less sexy – would be “everyone will be a designer or modeler” !
2. More code will be destructed than created
World around us is changing extremely fast and that means we need lots of newer kind of applications . But the pace of change is such that no application can satisfy a customer for any length of time . Building better components and better orchestration mechanisms are the only way to deal with it . Neither concept is new – but the execution will kick into a higher gear . API designs will need a lot more flexibility than we are used to
3. Performance will trump simplicity
By simplicity – I mean what “humans” think of as “simple”, not machines . Code for tomorrow will be used more for machine to machine communication than for machine to human – by orders of magnitude . Creation of code itself might not need a lot of human help for that matter . And while maintainability and human readability are important today , it might get trumped by the need for extreme performance tomorrow . For example – if both ends of an interface are machines , why would they need to communicate in text and pay for the overhead of things like XML/JSON tags that need to be converted to binary and back again to text ?
4. You won’t need as much code in future
A lot of code is written today because a human does all thinking and tells computers what to do in very prescriptive ways with conditions and loops and all that. When computers get to “general AI” – they will learn to think and adapt like humans – and won’t need step by step instructions to do what they do today . Less code will do a lot more than a lot of code does for us today . We may be decades away at most – we are not centuries away from that stage . Software will eat the world now , AI will eat software tomorrow 🙂
5. Software offshoring/outsourcing will not be for development or maintenance – it will be for training
It’s already possible for machines to learn from vast amounts of . Some time in far future , machines will self train too . Till then – and that’s at least a decade or more – humans will need to train machines on data . And that will need to make use of local knowledge , labor arbitrage etc and hence will be an ideal candidate for offshoring and outsourcing !
6. Community of developers will be the only thing that matters
Well – that is already true, isn’t it . I have forgotten the last time I have checked official documentation or real books to learn anything . I google or search on stack overflow to get most of what I need . I am not a full time developer – but looking at the communities that help me , I am sure full time developers do what I do , a lot more than I do 🙂 . A better way of mining this treasure trove of information is the need of the hour to get significantly more engineering productivity.
7. More and more use of biological sensors
Human bodies and brains are the ultimate computers and we are some ways away from mimicking human thought . In near future I expect simple sensors for all kinds of chemical and biological stuff ( how cool would smell be as an input , like touch is today ) that provide input to and also dictate how code should work . Text is fast becoming the most boring part of data any way 🙂
8. We haven’t even scratched the surface of parallelism
What we call as massively parallel today in all probability will be amusing and funny to tomorrow’s programmers . The over heads of making parallelization work today is pretty high – and that will go away soon. A part of the problem is also that majority of developers don’t think of parallelism when they design code . I guess the near term solution will be for more primitives in popular programming languages (like for data access) to have built in parallelism . Note to self : get better at functional programming in 2017
9. Ethics and Privacy become core to all development
A few things are happening together now
a) data is exploding and we are leaving our digital finger prints everywhere
b) applications won’t stay around long enough to have ethics and privacy as a “future release” issue to be fixed
c) more and more software affects humans , but is controlled by machines with little human input
d) access to information is (and will be ) universal – which means bad guys and good guys can both use it for what they want
e) legal systems won’t ever catch-up with the pace of tech innovation
And that means – ethics , privacy etc need to be core principles of tomorrow’s software . It cannot be “in pockets” as it happens today. And the education on this topic needs to be pushed down to even the earliest levels of schools.
9 is really not a conventional number of bullets for a list – but given there won’t be anything conventional about the future of software development , I think now would be a good time for me to stop this list . Feel free to add , edit and challenge in the comments – I look forward to it .
Happy 2017 everyone!
2 thoughts on “Future of Software Development ”
Vijay the example that comes to my mind on reading your article is that – Software development / coding today is what medical science was few centuries ago. We can compare today’s coding scenario like the good old days of medicines – where people used to gather individual herbs and press them to extract the essence and swallow them. Compared to now , where we can buy readymade pills over the counter.
Also diagnosis of the disease was mostly based on individual expertise of the physicians, compared to the array of sophisticated diagnostic medical devices that are used today for treatment. Exciting times for doctors working in research labs with much more to explore, but boring for those outpatient general physicians whose treatment are all scripted. Exactly what you mentioned – “everyone will not be a meaningful programmer”. Something / someone becomes ‘meaningful’ only when they add ‘value’. With shift of analytics and cognitive capabilities from humans to machines, we will see talent differentiation minimizing, and diminishing value of individual in the marketplace since the opportunity to add net new value within the setup is decreasing.
I have a slightly different take on – “you won’t need as much code I future”. Building on the previous example, with prevalence of machine learning and AI, we will need more code to teach the machine and keep up with new findings as we see in medical diagnostics today. One keeps finding out more and more with newer devices and keeps adding to his need-list. Coding will happen in the name of innovation or transformation and not as maintenance / enhancement.
The downside of these emerging scenario is that, we are made to consume things that are sometimes unnecessary and at times even harmful plus they are cost prohibitive; making the end product expensive without significant value add. Sleep inducing chemicals come prepacked in the pain reliever pills, we have to take it even if we don’t want to sleep. In our effort to make things simple and provide easy access we laid down paved roads by cutting down trees, there may be a time when we will struggle for oxygen. So the question of ethics and balance is ever more important in today’s world.
However, I think we are privileged to be a part of this industry which is at its inflexion point. The future is running at us with unprecedented pace and the best we can do is to embrace it with open mind and accelerate our learning. Godspeed !
Already read this article number of times now. Loved it so much. The first one was the most striking for me. I am currently working on a project in Kaggle, sponsored by The Nature Conservancy of California and is trying to identify tuna fish types from fishing boat images. I find what I am doing very meaningful. So for me a “meaningful programmer” is someone who uses his coding skills to achieve something that he thinks is meaningful.
About (2), I think more code will be created than ever if the activity in open source projects are any indicator.
I find ethics and privacy to be the most important in that list. I would like to add accountability to it though. If you are creating something from the data you own/manage, then you should be responsible and ready for the consequences as well. In the current form I think there are lot of loose ends and data is being misused a lot.