This post was triggered by an article I read recently about Apple Inc's Cloud Ambitions. Apple is building one of the world's largest data centers' -- however they have not officially indicated a purpose or motivation. Microsoft has also embarked on a similar data centre venture (potentially to support their Azure platform). Google has its App Engine, Amazon has EC2. Adobe and Yahoo are wandering on the outer-rim, but with no firm roadmaps. There are a whole stack of other domain specific platforms out there as well (SAP, Oracle, SalesForce to name a few).
Currently, we are still in the pre-beta land for these cloudy ambitions. In another 5-7 years, these platforms will be mature. I'm going to be bold and predict that you will get the following from each vendor:
* A fully integrated IDE (one that will plug into the cloud, potentially running directly on the cloud -- i.e. runs within a web browser)
* A mature API stack (significantly more mature than what we currently have -- potentially domain specific maturity as well)
* A database system (to store/retrieve data -- file systems etc.)
* Language support for: Java, C#/VB.net, C and Python [others maybe -- but will certainly have to target either the JVM or the .NET CLI]. If Apple joins the fray at this level, expect Objective-C as well.
* Legal/deployment terms that will work for a number of different commercial domains (even finance and govt.).
* Services that will allow export of data stored on the cloud (e.g. GMail offers the ability to pull down all email to a local client if you want).
---
Why only a few languages? Cloud architectures rely on a method to distribute execution of code across multiple machines -- currently we have maturish platforms that will execute Java and C# applications. Support for other languages may never get the funding needed (esp. given the current financial climate) and hence will stay within academia or within a small group of enthusiasts. For a new language to take off, it has to offer something much much more. Java has a very large library pool built over the last decade (its core strenght), C# has 20k engineers just at Microsoft, it also has some strong language features.
What does it mean for software development? New projects will start to consider a cloud platform and very likely get locked in (kinda like they do now, if they choose SQL Server, .NET/Java, Oracle etc.). The key difference will be obvious in the Job ads -- companies will want Azure experience or Google App. Engine experience with knowledge of a certain set of API/libraries.
One of the largest change that I expect to see will be in the way we interact with database management systems. Currently, developers still have to be careful with the way they write queries and how they store data (i.e. the data structure). However, my personal experience has been that over the last 10 years -- developers have be able to get sloppy with the way they program because machines are fast and most developers are now able to get away with in-efficient code. This will now extend into the data-structure and query world in the cloud. If you have Google like retreival at your finger-tips, why bother thinking through your database schema at any level of depth? Do queries matter that much -- just throw keywords and guess till it starts to get the rightish data back. There are still going to be a few aspects that need a bit more attention, but nothing like we do now.
Once the clouds start to spread, the biggest change will be to current "PC" industry. In another 5-10 years, many more TVs, iPods, Mobile phones, Automobiles will have a full internet connectivity, quick CPUs, very likely a sizeable hard-disk and ability to hook into the cloud (turned on the default). The question is, will we still need a separate desktop PC at home?, for what purpose? If you thinking gaming ... consoles have already won this battle -- PC only games are no longer a growth market.
Good news: There will be plenty of work as we migrate legacy applications into the cloud. New innovations.
Bad news: More learning (hopefully, this will last our careers)
Thursday, August 20, 2009
Saturday, July 18, 2009
Software Engineering: An Idea who's time has come and gone!
An interesting perspective from Tom DeMarco in IEEE Computer (via Reddit) in a 2-page article, where he questions if Software Engineering is past its prime.
See: http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf
-----
The gist of the article is that software that transforms the world (he cites Wikipedia, Google Earth) were not delivered by a project team that was controled every inch of the way -- that is, they were not engineered as recommended in the text books. The whole article essentially kinda sorta states that Agile methods are fine (in a round about way). Tom is known as the "metrics guy", the "Software engineering guru" etc. -- so, this is quite a big statement for someone like him. Just look at the books Tom has authored.
Interestingly, the hardest part in software development has always been in the 'solution definition' -- that is defining the concept and abstract forms in sufficient detail to allow a group to be able to work together productively and build it. The programming and construction side is comparatively easier, mainly because given the right tools with discipline and focus we can actually get over this aspect.
Is software engineering dead? Tom is possibly right with respect to the management perspective. However, there have been many good ideas from this field that are still very relevant -- though most are still at software construction level. For instance, I still think it is a good idea to comment code (level of detail is determined by context), plan an iteration (with the full knowledge that we plan to prepare and synchronize the team, not to execute precisely against it), measure size and complexity (for feedback to allow reflection, not for control), modular architectures are still good, testing is still critical. Most importantly, the SE field provides a general organisation and scaffolding of various aspects to help us teach software development to the next generation.
-- rv
See: http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf
-----
The gist of the article is that software that transforms the world (he cites Wikipedia, Google Earth) were not delivered by a project team that was controled every inch of the way -- that is, they were not engineered as recommended in the text books. The whole article essentially kinda sorta states that Agile methods are fine (in a round about way). Tom is known as the "metrics guy", the "Software engineering guru" etc. -- so, this is quite a big statement for someone like him. Just look at the books Tom has authored.
Interestingly, the hardest part in software development has always been in the 'solution definition' -- that is defining the concept and abstract forms in sufficient detail to allow a group to be able to work together productively and build it. The programming and construction side is comparatively easier, mainly because given the right tools with discipline and focus we can actually get over this aspect.
Is software engineering dead? Tom is possibly right with respect to the management perspective. However, there have been many good ideas from this field that are still very relevant -- though most are still at software construction level. For instance, I still think it is a good idea to comment code (level of detail is determined by context), plan an iteration (with the full knowledge that we plan to prepare and synchronize the team, not to execute precisely against it), measure size and complexity (for feedback to allow reflection, not for control), modular architectures are still good, testing is still critical. Most importantly, the SE field provides a general organisation and scaffolding of various aspects to help us teach software development to the next generation.
-- rv
Subscribe to:
Posts (Atom)