Subscribe
Recent Posts
- Internal blogs matter
- The invisible hand, the sequel
- The invisible hand
- Security Access Permisisons Considered Harmful
- iPodification unfuzzed
- A day in the life of a Web 2.0 citizen
- Your mobile phone, serving the internet
- How reliable is your Information?
- Wikimania
- BI and Financial Risk Management
Navigate
Search the blog
Customised Software Development / Open Source
The invisible hand, the sequel
My previous post on The invisible hand created several interesting discussions (thanks Andy, Peter, John, Alex and Mark) and I would like to share some of it with the rest of you. Peter (Evans-Greenwood, CTO Capgemini Australia) brought up the interesting theory of swarm intelligence and I’ll quote Wikipedia to bring you quickly up to date:
“Swarm intelligence (SI) is artificial intelligence based on the collective behavior of decentralized, self-organized systems. … SI systems are typically made up of a population of simple agents interacting locally with one another and with their environment. The agents follow very simple rules, and although there is no centralized control structure dictating how individual agents should behave, local interactions between such agents lead to the emergence of complex global behavior. Natural examples of SI include ant colonies, bird flocking, animal herding, bacterial growth, and fish schooling.”
To extend the list of “natural examples”, I would like to add “Mumbai drivers” as well. If I may. Andy (Mulholland, Global CTO Capgemini) replied on Peter’s comment: “I had not thought of swarm theory for Mumbai traffic but now that it is raised it makes perfect sense”. And it does make sense, really!
- “The agents follow very simple rules”: Mumbai drivers honk in all situations to warn others
- “no centralized control structure dictating how individual agents should behave”: very true, haven’t seen any speed camera or police controls
- And the best one: “local interactions between such agents lead to the emergence of complex global behavior”: As John pointed out in his link that he supplied in the comments, it is the selfishness of the individual that drives a knowledge base, or applied to Mumbai traffic: “The Mumbai traffic participants are selfish in the sense that they do not want THEIR car to be damaged, thus resulting that other cars don't get damaged either.” This all leads to a situation where there are not that many accidents as you’d expect. The selfish drive for self preservation, benefits the whole system.
Alex added a link to a blog entry of the Austrian Economists that did an experiment with speed limits on a highway. On a highway where the speed limit was 50 MPH, everyone was driving 70 and the traffic was flowing rather well. As an experiment, four cars drove 50 MPH just next to each other and thus blocking the traffic, it created a huge traffic jam. If you apply this to Mumbai traffic, you can easily see that there is a much higher throughput possible in this seamlessly chaotic situation. Because they are not following the lanes, speed limits or anything else, but just take every millimeter that is possible and honk their way through traffic.
A question that I still have is whether this selfishness or self-preservation attitude from people always creates an optimum? Or better said, in what situations is this behavior desirable? Could you build your commercial software like this? What I think is that you have to distinct two main categories:
- The team or group is more important than the individual: think about commercial software development and sports teams. Of course you need to have expert developers or star players, but in these two cases, the group aspect outweighs the individual aspect. A nice example is a soccer club that has only the best players of the world in the team. When you look then sometimes at their ranking and game play, you see that each individual is brilliant but there are too many egos walking on the field. 11 brilliant soccer players do not make a brilliant soccer team. The same applies to commercial software teams: if you have five superstar developers that can think of the most incredible algorithms, it is no guarantee that your project is finished in time and in budget.
- The notion of “group” is actually just a side effect of similar behaving individuals, e.g. Mumbai traffic. No Mumbai trafficker wakes up and thinks “well let’s create a cozy group of mad-driving cars and rickshaws today”. The same applies to economics: a business man’s primary goal is not to create a perfect running economy, but to maximize its business’ profits. But in order to maximize its profits it has to participate in the market workings of supply and demand and thus aid in reaching an optimum. Not because he wants to, but because of selfishness. A good working economy creates a stable environment and thus a higher chance of profits.
To which category does an open source software project belong to? My first reaction is to say the second, but the more I think about it, I’m rather going for the first category. Because when you look at big successful open source projects, they are all managed by either a commercial company, a governing body, some strong community leaders or other way of centrally coordinated effort. True, you see a mixture with the second category in the sense that they often make use of these individuals that are in it out of selfishness. However selfishness in the broadest sense: pride or honor, improving own skills, community recognition or just because they really need that particular feature. Luckily the open source community is mainly driven by the last group that contribute code that was made because of something that THEY needed.
I did put the commercial software development in the first category, but would it be possible to have a commercial project that is driven by selfishness of the individual?
The invisible hand
Only a few people know that I actually love economics, more specifically macro-economics. I love the theories from economists like Pareto, Keynes, Friedman, Ricardo and of course Adam Smith. The latter one’s theory of the so-called “Invisible hand” is one of my favorites since I am quite liberal. Not as extreme as a good friend of mine who has very interesting ideas about a society where the government has almost no involvement at all, I am still a supporter of little government intervention.
Before you point out to me that societies where there is little government intervention are often far from ideal because it does not take care of the less fortunate members of the society, I acknowledge that in real life this does not work out quite as I would like to see. We do not live in a perfect world, where the market is fully transparent, where everyone is honest and is not only focused on money-making. So, often these economic theories do not seem to work quite well as expected.
Why do I tell you that? Not to change the direction of this blog into something like Freakonomics (must read by the way!), but because it relates a bit to my love for self-organizing chaos. Adam Smith’s “The wealth of nations” really focuses on the idea that free markets only appear to be chaos, but there is an “invisible hand” that guides the production and price setting to an optimum.
I am at the moment for three months in Mumbai to lead the RightShore operations from my practice and while observing the traffic, it appears to be utter chaos. People don’t use their reverse mirrors nor direction indicators, but it still “somehow magically” works. Most likely that there are a set of traffic rules, but nobody seem to follow them. How do they manage to drive without constant bumping? Honking and good faith! When you want to overtake someone from the left, you honk. When you overtake someone from the right, you honk. When you think the person before you is going too slow, you honk. When someone is getting too close, you honk. When you… anyway you get the picture.
So, without the need of an enforcing strong hand, each individual seems to take up the responsibility to warn others, by honking, of possible collisions and other dangerous situations. Isn’t this brilliant? When you take a step back from this economic blabla and look at the software industry, you see this idea of not having one central enforcing entity, but shifting responsibility to the participants coming back in similar or reduced forms. Think about distributed source code management tools like GIT or Mercurial or the open source community. The reason why it does seem to work is because they all have an interest in reaching an optimal situation where everything works out nicely, just as the drivers in Mumbai have an interest in not bumping to other cars. True, you often do have a strong “hand” in open source projects, look at Linus Torvalds at the Linux Kernel project, but there are plenty of open source examples where it is more a community-driven project without too many dominating people.
However, I do wonder to what extent this works? It seems to work for a city of 16 million people in Mumbai, but to what extend can you keep on doing this in (open source) software projects? A huge project as the Linux Kernel, would it be possible without having a leader person? And does a leader person necessarily needs to be of a strongly enforcing type? Could this actually work for a commercial software project as well, or is that doomed to fail? Please share your thoughts.
A day in the life of a Web 2.0 citizen
I usually start the day with firing off that foxy browser to explore the internet. A good starting point to get some vibes is the Capgemini Web 2.0 overview page which gives an one-eye overview of what’s happening in the Capgemini universe. Then I usually consume some RSS feeds that gives me some food for thought. And then the day starts. While reflecting on the latest news and sipping on my cappuccino in that delicious coffee bar around the corner, I moblog an article to my personal weblog or take a picture with my cellphone and Flickr it online. Usually I’m so taken up by my mobile twittering that I forget to notice the name of the gorgeous coffee girl. Too bad, could have facebooked her and flirt with her through status updates. However I noticed that in the Netherlands that they are more into hyving, which made me create an account there as well. It’s quite hard to keep track of all your friends that are feeding you with their interesting lifes.
One of my latest gadgets to enrich my life as a techno-sexual is an iPod that made me realize that touching is so much better than scrolling. After connecting to the local wifi, I check the Youtubed adventures of my friends and total strangers, till my secretary SMSes me to ask why I didn’t RSVP to the company's beach party invitation yet. But SMS is so 2000, I actually prefer to be blackberry’d since the company pays then when I am replying.
So after all the social networking, I often check my second life where I meet up with Tim or our Spanish SL experts. Quite awesome how they managed to build a new virtual Capgemini office. It almost makes me forget to get back to my first life in the real office. Unfortunately not in sunny Span but in rainy Netherlands.
Oh, it’s time to go home. Just need to Cap IT off to our corporate technology blog…
Your mobile phone, serving the internet
Just recovered from my "gosh, I thought I've seen it all" moment when I discovered about the Aptana Jaxer server, Jonathan Mulholland (a Twitter buddy, and read here his excellent blog) pointed me to the fact that Nokia launched the Nokia Mobile Webserver initiative. Djeez, it was one of those stupid things you read over the internet when someone said "wouldn't it be cool if you could run a webserver on your mobile phone?" and now.... it's reality!
That does make me think btw that you better listen to newbies, noobs and the simple-minded people that yell things like mobile webservers and running JavaScript on the server instead of the expensive reports from "certain reputed analysts". It's much cheaper and has a high probability of becoming true apparently.
Anyway, Nokia managed to tweak the Apache httpd server (one of world's most popular webservers) to run on their Symbian operating system. Since it already has some kind of POSIX layer, they could port the httpd server to their mobile phone. Since they already ported Python to Symbian, they reused that effort and now you can run your Python Server Pages on your phone.
But the most interesting part is not the fact that they managed to do this, but more what tremendous opportunities this could bring us. So basically your device becomes an active participant of the internet. Nokia envisions a future where users can browse to your phone and for instance watch your pictures and leave messages. But think also about the following:
- Stream your phone's video feed live to the world. (Could also be used by jealous husbands and wives, and when I think about it, the porn industry could be a major driver of this feature.)
- Extreme live blogging/twittering: I don't think how much more live and extreme this kind of blogging can be? If you would have a temperature sensor (and I don't see why you couldn't), your blog could adapt on the fly to the weather circumstances :-)
- Dating: when you enter a room or club, some wicked Personal Area Network detects all the participants and feel free to browse the profile pages from everyone around you.
But, and yes there are some "but's", think about the following:
- IPv6: if all those millions of phones start hitting the internet, I think we'll run into troubles with the amount of available IPv4 addresses, so we need to switch to IPv6
- Performance: when you're John Doe that wants to show off his cats to the occasional visitor, no problem. If you are some kind of porn star or just... popular, what if hundreds of people start hitting your mobile site? Can't imagine that your phone can handle that.
- Security and privacy: well I don't think I really need to explain you what kind of security and privacy nightmares this can cause?
- Bandwidth and costs: will UMTS be enough? And how much money will these huge data transfers will cost you (in case you want to live stream your video feed ;-) )
But let's not be so negative and let's focus on what kind of added value this could bring to a business! You can leave a message on my phone...
Social networks, RSS, email... aaargh! Information overload!
I have the feeling that I get more and more overloaded with information from my social network memberships, subscribed RSS feeds and email accounts. Sometimes I can’t even catch up anymore and prefer to just delete the whole list of feeds instead of saving them for another time, since it just won’t get any better…
There are a couple of web applications that try to find a solution for it:
- Yahoo! Pipes: Yahoo! offers a solution where you can "aggregate, mainpulate and mashup content from around the web". Honestly, it's one of those cool kick-ass online tools where a genuine "wow" comes out of your mouth. Pipes offers you a solution where you can graphically put feeds together and apply filters to it. You can say that you want to have feeds from CNN that only matches your regular expression or rule and for the result, it has to fetch pictures from flickr.com. Have a look at this movie to get an idea.
- Friendfeed: Friendfeed solves the problem of having to keep track of all your social networks and feeds in order to be updated about your friends' activities. Pretty cool web application that is backed by some top venture capitalists. If we apply Yahoo! Pipes to Friendfeed.... ouch! It brings us already one step closer to what we want...
- NewsGator: NewsGator's approach is not unique, there are more web-based RSS feed readers out there, but I have to say that NewsGator's is pretty well-developed. But imagine that for each post that you can say whether you like it or not (a bit like what Facebook offers on the activity list) and perhaps also the reason and that your RSS feed reader learns from it.
So basically we want something that is a mix of all of the above. Here's what I would want to see: some wicked abracadabra AI engine that perfectly knows what you want and do not want to read. But there are some problems. For instance I am not interested in chickens, but I do like to be updated on initiatives like www.adopteereenkip.nl where you can adopt a chicken (I am about to adopt one) to support a good cause. But how does the rule engine know that I do want to be updated on chicken adoption initiatives and not on some weird mad chicken disease stuff?
Someone that can help me out? I'm pretty sure the chickens would really appreciate it...
*update 6.35 pm @ mumbai: "Influenced" by the comments I finally joined Twitter as well. I could resist for quite some time, but now my resistance has been broken. You can follow me on the account leeprovoost. In the meanwhile let's republish the link to Capgemini's Netvibes page with their Twitter stuff: http://tinyurl.com/34h5oq. Happy Twittering! (and now my social life is really ruined... thanks...)
Pocket Earth
In an earlier post I wrote about context aware services. Being able to put the world in your pocket is an important prerequisite for enabling the personalized context aware services that I fantasized about in that article. And exactly that has become reality: your pocket now fits the world, because the world now fits inside a cell phone.
The world fits inside a Nokia N95
Our planet's entire surface (at least the inhabitable parts) is almost entirely digitally mapped, and in astonishing detail too. It goes far beyond satellite images nowadays. Buildings, roads, streets, parks, restaurants, phone booths, wireless hotspots and even individual hedges are being photographed and geographically mapped. Mashed together with directory services this makes for the killer mobile application. Nokia must be thinking on the same lines, because they have just bought NavTeq.
NavTeq is driving though our streets with special GPS and 360 degree camera equiped cars, taking pictures in all directions every 10 meters or so. They will almost need to do this continuously, because phone booths tend to move around every once in a while (wouldn't you if you were a phone booth?). It means that the digitization of our planet is a continuous process. Imagine the tremendous cost of doing that. The expected profits apparently exceed these costs, because there clearly is a business case. To give you an idea of the value: Nokia paid 5,7 billion euros for Navteq.
The mobile Rich Internet Application (RIA) is the next big thing in the RIA market. An RIA can be quite resource hungry. It needs support for smooth and slick GUI rendering, high quality audio and video streaming and high performance 2D and 3D rendering to name just the obvious ones. The average cell phone certainly isn't powerful enough. We won't accept less than a 3G phone with enough processing power to envy an XBox (well, okay, not that much). Apple's
iPhone sure seems powerful enough (unfortunately it does not support Adobe Flash yet), Nokia's N95 has enough muscle as well and most probably, the mysterious Google Phone too. The latter is much speculated about and was said to be launched in 2007 (by HTC) and would not have a built-in GPS receiver. The world hasn't seen that phone yet, I guess they have decided that it should have that GPS receiver after all.
I thought I've seen it all...
There are these moments in your life when you are in awe of what technology allows us to do. I remember a couple of years ago that a user on a forum was asking how to do some server side stuff in his web browser but without reloading the browser. We “experts” were all rolling our eyes and thinking, gosh yet another newbie that does not understand how web development works. You can imagine when the whole XMLHttpRequest and Ajax stuff became mainstream that we had to rethink the way we were designing our web applications.
In my current project, we have to write complex validation code for validating complex form input. The very annoying thing is that we have to write the server-side Java validation code, but replicate identically the same validation code with client-side JavaScript. This results that sometimes there is a small difference between the server- and client-side validation.. As you can imagine, leading to frustrating debugging sessions. I remember that I said to my colleague “It would be so cool if we had for instance the same JavaScript validation code that we could reuse on both client- and server side. True, we could send our client-side validation to the server with Ajax, but that would require some server roundtrips and alas, most banks are not really eager to use Ajax. So I sadly continued wondering why there are so many issues with getting the same buggy Double check in JavaScript and Java 1.4…
Yesterday, I bought a new Apple computer and I was happily installing and configuring my Eclipse environment and of course the must-have for every web-developer: Aptana! One of the big problems with JavaScript and Ajax programming is that there are barely good development environments. Syntax highlighting can be handled by most IDEs, but when it comes to complex code completion and assistance, nothing can beat Aptana as far as I know. You can either install it standalone or as an Eclipse plugin. So I surfed to the website of Aptana to get my plugin, but suddenly I stumbled on Aptana Jaxer. What caught my I was the following sentence: “Jaxer, The world’s first Ajax server”. My heart stopped beating, my whole (young) life passed by and I was thinking: “gosh, I thought I’ve seen it all…”
Here a short feature list from the website that says it all:
- Write entire applications or presentation layers in Ajax
- Full DOM and JavaScript on the server
- Seamless communications between browser and server
- Access existing pages written in other languages like PHP, Java, or Ruby on Rails
- Share validation code on the browser and server (my favorite!)
- Database, file, and socket access from JavaScript
- Open-source, standards-based, and uses the APIs you already know
Basically, Aptana made it possible that the typical client-side concepts like DOM and JavaScript functions become first-class citizens on the server side. You can easily write a function that can be shared by both client- and server-side and on the server you can manipulate the client-side DOM elements. So basically, you share some kind of common namespace between the server and client. Watch this screen cast for getting an idea.
So where can this take us? I don’t think that this will conquer large financial institutions or other companies with large web applications running on Java. Most of them are still struggling with taking a stand towards plain Ajax. However, I do see a big market at first for these little applications that run on platforms like Facebook or OpenSocial, widgets, mashups, etc. I don’t know the product well enough to judge how everything is arranged with security and scalability. I can imagine that it could give developers some more head aches related to security and hacking, since it became easier to pass malicious data to the server.
It would be interesting if Aptama would rebuild the (in)famous Pet Shop Store with this technology or if they can announce a major website that adopts this technology… Aptana, take the challenge!
c,mm,n: Cars-as-a-Service
I received recently an invitation to attend the first c,mm,n garage in Delft (the Netherlands). C,mm,n (pronounce: common) is a joint project between the three Dutch technical universities to build a car for 2020, but in an open source way. I quote: "c,mm,n is an innovative mobility concept; a new way of developing, manufacturing and using cars. By making the blueprint of the c,mm,n car publicly available under an open-source licence we are able to develop truly sustainable mobility. Just like open-source software, c,mm,n focuses on services around the product. You can use c,mm,n to offer people a lease car, rental car or other mobility services. It is allowed to sell c,mm,n too. Just as long as you make any derived work publicly available again."
You can watch on their website a video (sorry only in Dutch) where one of the project leads explain the philosophy behind the car. He explains that traditionally, car manufacturers take an existing car and improve it in several ways and there you have your new car. Basically the car (manufacturer) dictates the way how we should live our life. The c,mm,n project tries to reverse this and looks at the future and let our life influence the way how we build cars.
So the idea is that the technical drawings of the car are freely available on the Internet and everyone is free to change and improve the car, but as with the software open source world, one should contribute its changes back. What you actually get is that you can't make money anymore from the basics of the car (e.g. chassis), but that you have to earn your money with the services that you offer: rental, leasing, modifications, etc. Similar like the commercial open source companies like SpringSource that give away their code and products and charge for consultancy and support. I can imagine that there will be a booming market for "pimp my ride" kind of companies and if they do the marketing and service offering right, this might be a very lucrative market...
The big difference with traditional cars is that the lifetime of this car is set at three years. So you rent or lease your car for three years and then you bring it back to the dealership. All the external car parts like doors, electronics, etc are made to last three years. Where things like the chassis, engine, etc are designed to last a couple of lifetime cycles. So as a car dealership you don't sell cars anymore, but your customers rent or lease them. In a way they are following the current trend in software offerings where hosted software where you pay per use or per user becomes more and more popular (Software as a Service).
Very interesting concept this Cars-as-a-Service. I wonder to which other industries we can apply this "as-a-Service" as well... What about "Husband-as-a-Service"? Hmm, I think that exists already... ;-)
RIA Engineering skills or the 6-legged sheep
Remember the happy days of the first version of Java, almost 13 years ago (1995)? Java was hot. All of a sudden, you had the power to write attractive little web applications (Java Applets) that would run in any browser! Websites were never as slow at loading as in those days because everybody wanted smoothly
scrolling text applets on their page. It was a huge hype.
The first version of Macromedia Flash was introduced about a year after Java (1996). With Flash you could create flashy animations that loaded a lot faster than Java Applets. Actionscript was introduced in Flash version 3 (1998), allowing the development of interactive animations. In 2004, Macromedia released the first version of Macromedia Flex, a framework for developing Rich Internet Applications that run inside the Flash player. The term Rich Internet Application (RIA) itself was first used in 2002 in a whitepaper from Macromedia.
In 1997, Netscape version 4 was released. What's so special about that? Well, the fact that this version came with a Javascript interpreter, Cascading Style Sheets (CSS) and a Document Object Model (DOM). In other words: Dynamic HTML or DHTML. Although Netscape 4 was very buggy (especially, the CSS part), DHTML became popular very quickly. Since the introduction of DHTML, there always have been browser incompatibility issues because the browser vendors interpreted the W3C standard differently and because Netscape and Microsoft both wanted to become the dominant web browser vendor.
In 1999, Microsoft introduced a special ActiveX component that allowed DHTML developers to retrieve data (XML) from a web server in the background (asynchronously): the XmlHttpRequest object. The other browser vendors soon adopted this idea and W3C standardized the concept. Ajax was born and became
immensely popular in a very short time.
So, where are we standing now? Java Applets still load absurdly slow and you hardly see them anymore. Although, Java (Micro Edition) is the dominant front-end technology on mobile devices. Flash, now owned by Adobe, is installed on 96% of all internet devices and has evolved into a fast and robust platform for developing both rich media and rich internet applications (RIAs). Browser incompatibility is still an issue with Ajax, but it is hidden by a multitude of robust Ajax frameworks. Microsoft introduced yet another cross browser rich internet technology called Silverlight, which is a special plug-in that extends your browser with powerful multimedia capabilities that can be controlled through Ajax.
Rich internet technology has become mature. Vendors of such technology are more and more focusing on the quality of their development tools. It is interesting to see that Microsoft seems to primarily focus on their tools for visual UI design, which led to the Expression Suite. This suite allows designers and developers to cooperate more closely. This is crucial because more often than not, UI designs are just drawings that the developer should match in the real application. It makes far more sense if the designer can produce a skeletal version of the application that can be "wired" to business logic and services by the developer. Adobe has also understood this and is working on similar tools (code named Thermo).
Over the last 13 years, rich internet technology has become proven technology and we (users and business) have become familiar with its possibilities. This technology enables the development of responsive and usable web applications with attractive graphical user interfaces (GUIs) that can rival with the user interfaces of desktop applications. Well designed RIAs are easy to use and such a pleasant experience that (intended) visitors spend more time on the website and become regular users.
Building a rich internet application also requires a rather rich set of skills:
Besides a skilled software engineer, a RIA engineer:
- is a seasoned GUI engineer, implying solid understanding of typical GUI concepts, event driven programming and the MVC pattern,
- has knowledge of and experience with W3C standards such as XML, SOAP, XPath, DOM and XHTML,
- is familiar with the Web Oriented Architecture style popular in the Mashup development community, which means knowledge of concepts like Representational State Transfer (REST) and Javascript Object Notation (JSON),
- has basic understanding of popular server-side frameworks and standards such as J2EE, Spring, Spring MVC, Struts, Cold Fusion, PHP and .NET,
- and has sufficient understanding of user centered design and interaction design to be able to recognize design flaws or violations and communicate and work together with interaction designers.
Did I miss anything? Well anyway, I can confidently conclude that the RIA engineer is a sheep with at least 6 legs.
The COBOLization of Java
When I tell people that I had already my share of Cobol and RPG in my life, they look a bit puzzled since they do not expect a cool twenty-something dude, but rather an old long-bearded pony-tailed engineer. Ok, you might question the coolness of the dude, but the twenty-something is true. I actually entered this week the second part of the twenty-something-ness :-)
I’m not telling you this to generate more birthday wishes or presents (they are welcome of course ;) ), but because I start to hear more and more techies in the blogosphere that are talking about the COBOLization of Java. Bill Snyder’s entry on InfoWorld generated quite some buzz as you can see on the amount of comments.
2007 and 2008 is all about rich internet applications, Flex, Silverlight, Ruby on Rails and other fancy Web 2.0 stuff. Java is… well so 2000. Perhaps we, we as in Java community, should take the step to completely break with the past and bring a completely redesigned language and platform, without taking the garbage and burden from the past with us. Backwards-compatibility is nice, but often limits the possibilities for the future. Microsoft did actually quite a good job with their Visual C++ to Visual C# move. Never thought that I would say it, but C# 3.0 with LINQ is a damn cool environment for a developer!
But then you can wonder whether such a complete redesign and break with the past is necessary? The article quotes Senori’s CEO Ofer Ronen who decided to move to Ruby on Rails because of the pre-built structures for developing an e-commerce site. Well let’s not forget people, Java was not designed with building a fancy e-commerce website in mind. If we put everything a bit in perspective it makes sense that we need nowadays a lot of plumbing to get things done with Java. Ruby on Rails has the advantage that is fully designed to easily build web applications. In a way you can call it a Domain Specific Language. The same that Ruby on Rails is also not suited for every job either.
I had this discussion with a colleague at my customer recently and his idea was that Java will become more and more the COBOL for financial institutions, to build large and robust systems.
So, perhaps in ten or fifteen years people will react the same to the future cool computer science dudes (I’m really trying to polish up the image of us, computer scientists.) when they say that they had their share of Java….
That brings me to another discussion that has caused some heated debates in the blogosphere: which languages should the new computer science students see in university? Java? C#? C++? A recent article in the The Journal of Defense Software Engineering pointed out two interesting things:
- Pitfalls of Java as a first programming language
- A real programmer can write in any language
It’s not limited to Java, you can easily say the same for C#. They both hide a lot of lower level complexity for the developer. While this does speed up the efficiency of developing, it causes that the future developer is merely trained in reusing the right library than actually knowing what he or she is doing. Pointers? Registers? The more you know about the basics, the easier that you can actually get into other languages and language paradigms as well. I remember that in my first year, we were challenged by our professor to solve problems and come up with algorithms in C. I heard that nowadays, the new students from my university start with Visual C#. But not only the complexity of the language, also being exposed to different language concepts is a must. Especially nowadays with the growing trend towards using Domain Specific Languages. We realize more and more that there is no one size fits them all. Sometimes a problem can be better solved with a functional language, sometimes with a object-oriented language, or sometimes just with Assembly. If you have never seen these different concepts, how can you ever make a decision?
Anyway, got to go. Erlang is waiting for me… :-) What language will you learn in 2008? (and please don't reply "French"... ;-) )
Where's the spreadsheet for enterprise mobile?
VisiCalc on the Apple II platform in ’79 is generally regarded as one of the first “killer apps” for the desktop computer. I wasn’t born back then, so I can’t tell you how great it was, but I did experience email as one of the killer apps for the Internet. Now with the mobile revolution (well at least according to Apple and Google), one can wonder where the spreadsheet for mobile is? There doesn’t seem to be “the killer app” for mobile enterprise users.
Fair enough, Blackberry’s email service could be regarded as a major, well actually the only, driver for RIM’s handsets, but I still expect to see some kind of application that will blow away, us enterprise users, from our feet and let us rush to the stores to get such a device.
Now that we’re talking about push email anyway, Apple could compete directly with the Blackberry by positioning its .Mac service as a push email service (don’t know if actually exists already?) in order to drive enterprise adoption. (And I actually think that a lot of home users will appreciate this feature as well!) So can Google, with their GMail service on the Android platform.
I’m using both a Nokia E61 smart phone and a Blackberry 8700 and except for their excellent email handling capabilities, I’m not blown away by any of the other features. Reading PDF documents? Screen is too small and the mobile PDF software screws up your document layout. Surfing on the Internet? Well, Facebook Mobile is quite cool, but still have lots of issues with rich user interface websites (although I have to say that Opera Mini gets better and better). Before you start wondering why I am surfing on Facebook Mobile on the company Blackberry: our global Java Community has a presence over there… ;-)
But all complaints aside, where is the mobile killer app that will drive enterprise adoption? Google Maps with a GPS chip? Integration with SAP or SalesForce? All exist already, but doesn’t seem to create much more than some ripples in the water.
Now, both Apple and Google are counting on the developer community to invent some great apps for their respective platform to drive adoption. So does that mean that they can’t come up with a killer app either…?
Please enlighten me…
Smart phone killed the desktop star?
Rufus Ketting made in 2006 a nice parody on the 1979 Buggles pop hit “video killed the radio star”, named “iPod killed the video star”. With 2008 in the horizon, I make a parody “smart phone killed the desktop star”. Perhaps it’s too early to use the past tense “killed”, so perhaps we should rather use “will kill”.
Whatever tense we use, should we start throwing away our desktop computers and start buying Apple iPhones or other devices instead? I think for now, a certain group of people could perfectly do this. I actually know a lot of people that only occasionally use their computer for a Google search or for reading their emails. They could perfectly do with a smart phone and a flat-fee UMTS subscription. Until a couple of months ago, I always had my 12 inch Apple iBook with me. We were inseparable. Now that I have my Blackberry with UMTS subscription, the love has come to an end and the iBook enjoys a peaceful retirement as a portable DVD player.
So, if the desktop gets killed, what are we going to do with all those desktop developers out there? Luckily, Google has an answer to this problem (no pun intended): Android. Our friends from Mountain View are busy with developing a platform that will power the future cell- and smart phones and they target the big community of already-existing Java developers. I recently started playing with the Android Development kit and I have to say that I was quite amazed that as a Java developer that I could so quickly start writing applications for Google’s Android platform (also Java).
The interesting thing of the Android platform is that it perfectly fits in the growing trend of writing mashup applications, where you develop your software by combining other existing services. An example of this is that you can ask your phone to look up the address of your contact with Google Maps and that your application uses the GPS chip to plot the direction from your current location to your contact’s. Imagine how far you can take this. Let’s say that you know that your friend likes the super-delicious brownies from Starbucks, then your app could request the GPS locations from all the Starbucks franchises in your neighborhood and calculate the shortest path to your friend with a stop in a nearby Starbucks.
So in this new world, we’ll need two kinds of developers: the ones that develop services (or Web APIs) and the ones that create mashup applications that consume them. Perhaps in some future, we’ll see more and more websites that barely offer functionality through a traditional web interface, but just exposes most of their functionality through a service.
One question still to be answered is… on which devices are we –developers- going to write our Android code? Well probably in a far far future that’s not a concern anymore since we’ll have code generators that have replaced us. And of course code generators that can generate other code generators to generate new code. I hear already a new song coming up: “code generator killed the developer star”. It's just a matter of evolution...
SOA Tunnel Vision
Having delivered quite a few trainings on SOA and having observed several SOA-ish projects I notice that SOA solutions can be made very complex in a very short timeframe.
Being a big fan of minimal approaches, it really surprises me that instead for looking for simpler solutions, people tend to make a solution more complex.
The main cause for this is what I would call the golden hammer syndrome. I.e. people use the technology/trick that they know, even if the problem does not fit their particular tool/approach. Instead of looking at the reality, the reality is changed to fit within the “reality” of their tool/approach. And we have achieved SOA – Tunnel Vision.
The only way to deal with this tunnel vision is to induce a deep paradigm shift in the individuals involved.
I believe that nearly 90% of the engineers is not familiar with REST, although nearly all of them are using worldclass solutions leveraging REST ideas. (Mashups , Yahoo, Delicious, Amazon, Paypal, Google etc.).
That’s why in in the SOA training that I’ve co-developed the delegates are exposed to the REST approach of putting together a SOA Solution. Delegates are shown that within it’s strength a REST-full solution can be 20-100 times quicker implemented than a conventional SOAP solution. At the end of that workshop people start grinning and get energy from the idea of doing SOA in a different way.
They have just undergone a paradigm shift ....
The point of this exposure is not to become a REST zealot but to help engineers understand that they should have more tools in their toolbox. There are certainly environments in which a REST approach would cost more effort.
I think the whole goal of proper engineering is to find the simplest solution that fits the given requirements. Only the simple solutions (and therefore maintainable) will last, the complex solutions will founder.
Why don’t the engineers in this world just add more simplicity instead of more complexity to the solutions they design?”:
