I recently had the pleasure of installing and playing with the Chrome/Chromium Operating System on my Mac. I have a really good friend that highly recommended me to give it an honest go and give him some feedback from a developers perspective. While there is a lot of rave about cloud-computing, I’ve found a few interesting points that the Google OS is attempting to achieve.
Chromium OS, is Google’s operating system answer to the cloud revolution. The Chrome OS’s goal seems pretty straightforward. Instead of traditional operating systems like Windows, Mac OSX, or Linux for personal computing, allow a super lightweight Chromium OS to take advantage of web applications that run through a browser and get rid of everything else. So what is an operating system? For those who don’t know or really just think it’s the stylish or sexiness of your computer or notebook, here’s a pretty direct but important explanation.
Operating System 101: Not just sexy UI
An operating system is not just an cute graphical fan boy user interface. It is a piece of software that runs on a computer that helps manage its resources. If you take a computer apart, there are a lot of interconnected hardware and components (the resources) like RAM, Hard drive, USB Input, display for the monitor, the CPU, the keyboard, or even something as abstract as security. When you open up a program on your computer, like an internet browser, a video game or Microsoft Word, that program is going to ask to use some of your resources. It’s going to ask for RAM, some organized way to look for files, maybe full screen capabilities and much much more. These programs never really have direct access to use or manipulate these resources (nor should they ever need to!), they always go through a mediator (the Operating System) to get its job done.
The trend from Desktop to the Cloud
Remember those days of shrink-wrap software where you actually had to go to Circuit City and buy a box that had a CD in them? Then you had to wait for a very long time to install the piece of software and then you could run it? These applications are typically referred to as “desktop applications”, they live on your computer and take up space on your computer’s hard drive.
People are still stingy about WiFi
South Korea is the most digitally connected country in the world. I’ve been there, it’s fantastic! However, in Silicon Valley, I was able to lose signal inside of a mall. Countries like South Korea and Japan have incredible connectivity rates for widespread public use, while I can only login to Panera’s slow WiFi for 30 minutes at a time. The staggering disparity and quality of wireless connections from square foot to square foot on this planet pose a pretty interesting geographical limitation that traditional devices are immune to. Yes, I understand that people today use their computer primarily for internet browsing. However, a Chrome book with no WiFi is virtually crippled compared to a MacBook in the same situation.
They use AJAX to make their web application behave like a desktop application
The world wide web today has a defacto standard for sending information back and forth: Hyper Text Transfer Protocol (HTTP). This protocol is stateless. The stateless nature of the web can be demonstrated by going to many website registration pages, filling it out, and going to a different page and instead of pressing submit, then returning to the registration page. Voila, all your emails and phone numbers and all the data has been completely erased. Stateless means that the web application has no way of knowing what happened from page to page. (Just go on Youtube, watch a videeo half way and press refresh, the application will not know where you last stopped!) Thus, in a lot of situations a simple refresh button or closing the browser can lead to a lot of lost data. This is a frustrating part of using and creating fluid web experiences. On the other hand, desktop applications don’t have this issue thus they are stateFULL. Being statefull has not only a really beneficial user experience but also a much more pleasant development experience.
Facing the facts: Even today, it’s still not easy to create software
For those who aren’t really technical, this might be news to you. Regardless of today’s hype around tech companies and startups selling for billions in less than 2 years, it hasn’t gotten any easier to develop software. There are some major hurdles that really have no solution and have just become part of the process:
- Today’s developers must learn many programming languages
- The demand for mobile puts much more work on the developer
- There is a staggeringly low supply of software engineers out there today
Today’s developers must learn many programming languages
Back maybe a few years ago when cloud computing wasn’t as prominent as it is today, a developer could really just program in straight C++ or C to crank out an impressive desktop application. Today, with the majority of the developer positions aimed at web specific solutions, software teams are required to learn many programming languages and technologies. While the common frameworks and solutions are pretty much similar across the board, the differences create overhead to getting a good product rolled out.
Let’s take a famous example: Facebook. It’s really just one application: you can go online and add profiles and photos and statuses. This alone (as far as I know) has quite a few technologies involved:
- C++ (Server Side Language)
- C (Server Side Language)
- PHP (Server Side Language)
- SQL (Server Side Language)
- ActionScript (Client Side Language for all the Flash Stuff)
In an example as simple as Facebook, there are at least 5 programming languages used! Let alone, there probably many technologies and design implementations that the development team have to master in order to roll out a straight forward application.
The demand for mobile puts much more work on the developer
Now comes the demand for mobile applications. Facebook now has to support adding more languages to their current stack
- iPhones -> Objective-C
- Android -> Java
- Windows Phone -> C#
This list is a probably a serious cursory to the additional technologies, and architecture, and plugins and in house code that needs to be written to make an application available across multiple mediums. With the advent of mobile devices, applications are now required to be mobile friendly. Some may not know but mobile websites and applications have far less resources available than a desktop browser. This forces developers to optimize everything so that applications don’t crash and still remain somewhat responsive for a good user experience. Optimizing code is often thought of a good thing, but sometimes extreme optimization of code can tear down readability, a fundamental importance in software engineering, and push back deployment time, a fundamental importance in business development! In addition, memory management When software uses resources, they typically use memory or RAM. Many modern languages have a feature called Garbage collection that allows programmers to focus more on code rather than tedious tracking the memory that their code might be using. Garbage Collection is nonexistent when developing for the iPhone or iPad! is nonexistent for iPad and iPhone development.
There is a staggeringly low supply of software engineers out there today
Today, there aren’t a lot of software engineers. The demand for technology has significantly increased but the rate at which people take up a profession as software engineers or graduate with a computer science degree is simply not able to keep up with the demand. The average starting salary for junior developers is scary high these days: with a majority of them approaching $100,000. Software engineering can really handle a specific type of organizational and logic thinking. It’s not necessarily mathematics driven but logically driven. Many students today struggle with computer science courses and cannot make the mental leap to dive into creating software as a business. Thus, from the handful of developers out there, only a handful of them will probably make good software!