We are in the middle of a period of rapid change in the software development world and I think the pace of change will only continue to speed up in the next few years. So, I thought it would be a good idea to post some software development predictions of what I think will happen in our software development world in the near future.
Mobile Software Development Prediction
Mobile is perhaps the biggest areas that everyone is curious about and it is really starting to seem that this space is ripe for an overhaul. None of the major players are innovating in this space at all.
Apple keeps releasing new versions of its mobile OS and new iPhones, but they aren’t really doing anything new or different. I also think moving to the flat design is going to turn out to be a bad move, because in doing so they took something that looked flashy and sophisticated and made it look extremely simple and plain.
On the Android side, there also isn’t much innovation. The OS itself seems pretty stagnant and the devices aren’t really adding any new exciting capabilities.
I think consumers and developers alike are getting a bit tired of the App Store / install apps model. It seems really burdensome and the more apps you get, the more updates you need to do and the more difficult it is to keep track of them all.
I think consumers are also finding that they don’t really like having so many devices to have to plug in, sync data with and carry around. I’m starting to feel the weight myself of having a fitbit, a phone, a tablet, a notebook, and a desktop. (Those are all links to the hardware I have, if you are curious.) I’d really like to have a single device that can adapt to a couple of different form factors and do everything I need.
My prediction is that we are going to start seeing the devices and OSes merge both on the Apple and Android side. I fully expect to start seeing devices from both Google and Apple that are tablet / notebooks which are similar to the Windows 8 notebooks we are seeing today. There is just no reason to have a tablet and a laptop when they can be easily combined into a single device with a detachable keyboard.
I am not sure this will happen, but I’d actually like to see it taken one step further and see the idea Ubuntu Mobile is pioneering take over. With Ubuntu Mobile, the idea is that your phone has enough processing power to be your laptop or desktop computer, so you can just carry around your phone and plug it into a monitor and keyboard. The actual OS adapts to the form factor depending on whether it is plugged in or not.
I’d actually like to see things go one step further than that (and I imagine they eventually will), and see a “computer” reduced to a very small block that you carry around with you which is able to display itself on any display technology that is around and utilize any external devices. I imagine, the phone form factor would still be the best way to use this device for now, since you probably want to have a portable display anyway, but I’d like to just be able to pull out this device and tell it that I want the output to go to my TV or my monitor and for it to remember that it should utilize my keyboard and mouse for that profile. At that point, I might have a tablet device as well, but it would only be a dumb screen that receives a display signal wirelessly from my phone.
I am getting a little bit far into the future though. But, I think realistically next year we should see a merging of OSes from both Google and Apple and I would really expect Google to take the lead here, because I can’t think of one single competitive advantage that Apple has retained at this point. There is no “magic” anymore with Apple products, the fairytale is over.
Web Software Development Predictions
I don’t know if Meteor itself will become very popular, but the ideas within the platform are very likely to spill over to the rest of the web and become the defacto way of doing things.
Meteor also gets rid of REST and replaces it with data synchronization that just seems to magically work. This is extremely powerful, because I am finding there is a huge waste of time involved in creating and consuming REST services ultimately to just sync data between two systems.
Right now the browser is an OS, but I think within the next year or so, we’ll see the PAGE or tab become the OS. And that is essentially what technologies like Meteor are doing. They are deploying their infrastructure code to the first page load and then running the app in their own environment on a tab in your browser.
I think we’ll see a much bigger adoption of Google’s Go language, because it seems to be a very good general purpose language that has many of the performance characteristics and power of C and C++, but has the ease of use and leverage of Java and C#.
We’ve sort of reached the place in the C# and Java space where just about everyone is doing “cargo cult programming.” What I mean by this is that a majority of developers are writing unit tests and using IoC containers without understanding what value those practices bring or even if those practices are actually bringing any value.
This complexity and confusion is preventing many new developers from learning C# and Java and it is starting to seem that Python is now the standard beginners language.
I expect that we’ll see a rise in both Python and Go. Google has the potential to greatly increase the popularity of either of these languages if they decide to move Android / Chrome’s primary language from Java to either Go and Python. (My bet would be on Go.)
We are overdue for a new statically typed language that incorporates all the things we’ve learned about in the past decade from Java and C#, but I don’t see that language on the horizon, so I am wondering if statically typed languages will eventually fade away. The increase in tooling and support for dynamic languages has for the first time in history made this a possibility and I am actually starting to wonder if I might be ready to turn over to the dynamic side after all these years of being a staunch defender of statically typed languages. (To be honest, the lines between what is statically types or strongly typed and not is blurring anyway.)
Only time will tell
Well, those are my software development predictions, and to some degree my hopes, but I’m not very confident in many of them at this point. The only one I’d bet on is that both Google and Apple merge their mobile and desktop OSes and develop ways to build web / native hybrid apps. That is the only direction that makes sense to me.
What do you think? How far off am I? What have I left out?