[tweetmeme source=”shuggill” only_single=false]
For the past twenty years the IT industry has been dominated by one company, Microsoft, and for good reason. They developed awesome software which helped to bring computing to the masses, and with the birth of the internet they impressed upon us all the Microsoft way of thinking: we are the experts so we build the entire system (OS, Desktop Packages, Server Tools, Networking) and you, the user, drink it all in. A whole industry of expert support grew up around it and many users became IT experts over time as they toyed with their new hardware and the latest releases of Windows.
On the flip-side was the Linux way of thinking, which is far less integrated and less centrally controlled. We provide a base platform (the Kernel) and on top of that uber-geeks contribute single function utility applications that make everything work. The end user (or system builder) can then choose and customise every item to suit their needs.
Bill Gates’ vision for the 90s was to see a PC in every home. Now that we are well into that vision, what will be the compelling vision of the teens and twenties ahead of us?
Being a web developer requires that I have a number of specialist tools for the job: an IDE to write and debug code in, some basic graphics packages, browsers to test in, some form of source control and database management. Also being a professional I need an email client, contact management/CRM, calendars, project management tools, document editing tools, invoicing tools and financial management tools.
I’ve long been a Microsoft convert. My first programming language was Visual Basic, and I’ve cut my professional teeth writing ASP and ASP.NET web applications. However I also have extensive experience with PHP, Linux and MySQL. To run all of my professional life I currently have:
A desktop PC and a laptop both running:
– Windows 7 (OS)
– MS Office 2010 (Documents)
– Visual Sutdio 2010 (.NET IDE)
– SQL Server 2008 R2 Express (Database & DB Management)
– Mercurial (Source Control)
– Paint.NET (Graphics)
– Google Chrome, Firefox, Safari, Opera, IE 9, IETester (covers IE6, 7 & 8 for testing), iPhone Emulator
– Netbeans (PHP/Ruby IDE)
– IIS (.NET and PHP webserver)
– MySQL (Database)
– phpMyAdmin (Database Management)
– I use Google Apps for email and calendars
– I use Basecamp for project management
– I use Highrise for CRM
That’s a lot of software to maintain, keep up-to-date with and sync between my two main workstations. And if I’m not at either of those machines, I’m limited to email and calendaring on my iPhone. Whilst I can work in most places using the laptop, it’s a fairly specialist set up.
I would guess that the same is true for most web developers out there.
The advances in technology (and in many other areas) are possible because new layers of abstraction are added. For application developers new operating systems and CPUs give more options and capacity to do greater things – they increasingly:
– know less about the underlying technology
– assume that it is there and “just works”
With the advent of cloud computing the notion of “it just works” and “it’s in the cloud” are ever more enhanced. Sites can use services like OAuth to provide authentication from some of the major service providers (read: Google/Facebook). Disk space, CPU, servers are all becoming commodity items and web developers are increasingly in the position of not caring about the underlying hardware. In fact, it’s more than a case of not caring – it’s becoming essential not to care, as you need the time to focus on building great applications in this competitive marketplace.
Development frameworks are also making it much easier to get on and build applications. ASP.NET, PHP and Ruby (to name a few) all have well matured and generally very good frameworks available which speed up development no end.
When you start working with these frameworks you start to not care about what’s inside, or how the function “buildInputBox” was written – the fact is you start to rely on the simple fact that it is there and it works. You trust that whoever wrote the underlying framework, designed that CPU or built that cloud hosting platform knew what they were doing and optimised it for you. With all the time saved from not having to compile Linux kernels, write monkey code (e.g. buildInputBox) and design a redundant hosting platform, application developers can invest much more into creating great online experiences.
To this end I have started questioning two things: what will the future of desktops look like, and how we will build the next generation of applications?
Let me attempt to share some thoughts on these.
My vision is not orientated around a company, or the Open Source / Closed Source argument. I don’t expect everything to be free, and in fact serious business cannot be sustained through the free models – there has to be a revenue stream (and I’d rather it wasn’t all advertising based). Also, business critical operations require an incentivised commitment to service, and what better incentive than money?
I think the day of the desktop OS as a rich environment is dead. Why do I need to run 20 different applications, keep them all updated with patches and new releases and go through the awful pain of a system rebuild every 6 months? Most of my work is now connected to other systems in some way, all via the Internet. If I unplugged my network cable and tried to work I would probably last about a day before I needed to connect up either for testing, collaboration or just to get some help.
My future PC will be a highly powered web browser. I will connect to everything in the cloud, and the browser will be my cross-platform standardised access point to it all. This means that I can literally work from anywhere. No one will expect to be working without an Internet connection. More and more environments are meeting consumer demands by providing Wi-Fi access points so that we are always connected.
From my web browser I will be able to do everything listed above. It will become a new layer of abstraction. I will assume the PC “just works”. I will be able to access everything from different types of device – my tablet, my smart-phone, my laptop, a computer interface built into a table in a cafe.
This poses some interesting opportunities for companies of different sizes. The big boys will fight it out to run the infrastructure needed for all of this – i.e. the servers, connectivity and base services (like authentication) that all new applications will rely upon.
I have no doubt that the likes of Google and Facebook will be positioning themselves to become baked in as a layer of abstraction – their challenge will be reminding people that the infrastructure is crucial and needs to be paid for.
For small application developers however this is an exciting time. There will be much less to be distracted with – maintaining computer systems, patching software and limiting where you can work. It’s all infrastructure that should just work.
Everything in the Cloud
The new world is outsourced and cloud based. Although this means perhaps more disparate systems (e.g. how do you share contact information between Basecamp and Highrise?) these challenges will be overcome by new standards and another layer of abstraction – all of your contact information will live somewhere and just “be available”. Code will be written and tested in the cloud, since it’s going to be deployed there anyway. Designing will move beyond the confines of Photoshop into sketching and then building out into simple web prototypes.
The next generation of applications will start to make full use of the over-powered desktop PCs that are sitting in everyone’s homes and offices with bags of unused capacity. Web applications will be able to reach out of the browser and touch the hardware devices that the user has. Facial and audio recognition will be possible as authentication methods and drawing devices will make roughing up ideas quick and easy. Browsers will provide simple interfaces to these items, no more arcane Active-X controls or specialist plugins.
On the subject of browsers, they are all starting to converge. The long cry from web developers to adopt standards is starting to be heard, with the major web browsers supporting most of the W3 standards. Instead of differentiating on their level of compliance (which is now frowned upon if they don’t), browsers will have to distinguish themselves on speed and user facing features. However these will most likely fade as the features will all need to be web integrated to provide a seamless user experience across machines.
The future is about making things simpler. I want to have less in my brain about technology. I want it to work, so that I can have time to come up with great ideas, solve difficult problems and rapidly build stuff. I don’t want to write another buildInputBox function. I don’t want to recompile Linux to get the latest PHP version working. I don’t want to take my 1U servers down to the datacentre and be my own hosting company. I want hosting and provisioning to be seamless – when I need more resources I just click. I want to be able to work anywhere in the world, and to log on to a PC and have my entire desktop in front of me, even if it means (for the moment) five different web applications firing up.
Yes I want choice, but just as I want electricity to my home, provided the price is right, I don’t care how it gets here or how it is produced*.
* Within reason! I do care about green energy, what I mean is I don’t care about transformers and the national grid and power lines and heat loss because the current is too high.
Instead I want to choose to build an app that does this or that and get on and build it as quickly as possible. We don’t yet know what new things we will be able to create when we have these new layers of abstraction in place, but I’m sure it will be cool and fun and add value in new ways.