Archive for the ‘Multi-language Development’ Category

A Massive Shift to a New Third Party Software Development Paradigm

Thursday, January 7th, 2010

In the last few months. third party software development world has made a historical paradigm shift to cloud-based computing and App store distribution model.

The most significant aspect of this shift is the opening of almost any platform  (televsions, cars, netbooks, phones) to sophisticated third party applications. Each of these platforms has its own unique technology. Previously, these platform were only open to minute number of embedded developers closely working with the hardware vendors and the code was pre-installed on the hardware before it reach the consumer. Now any third party developer can develop apps for any number of these platforms.

Imagine developing an app  that users can download to their iPhones that interacts with an app that they have running on their Samsung HD TV. All through a cloud-based platform. The users simply go to Apple’s and Samsung’s App Stores and purchase the app. Or an app running on Ford cars interacting with Android phones. The possibilities are endless.

The multi-technology and app store distribution model of this new paradigm has significantly increased the complexity of the development process, hence making new generation of software development methodologies critical. For example, we have tailored some of our development processes to include micro iterations (to satisfy quick-time-market business requirement), and app store submission/approval activities.

Multi-language Development

Friday, June 26th, 2009

As if the development of software systems was not complex enough. It is about to get even more complex.

In the past few years, there have been much fruitful activities in the area of programming languages resulting in introduction of various languages. Although some of these languages have been around for a number of years, the recent availability of their robust, high-performance versions has made their usage in large commercial systems possible. Broadly speaking, these new languages can be grouped into two categories: dynamic languages and functional languages.

Dynamic Languages

For many developers strong-typed languages are too restrictive, contextually unintuitive, and verbose. Dynamic typed languages, on the other hand, are simple and elegant, ideally suited for rapid prototyping and development. They are specially well suited for time-sensitive development projects where time-to-market is critical.

Functional Languages

With the advent of universal deployment of multi-core hardware and the eminent availability of cheap massively parallel systems, the need for making concurrent programming mainstream has attracted much attention. The non-imperative aspect of functional programming results in code with no side-effects, well suited for concurrent programming. Functional programming is also very efficient for implementation of certain algorithms resulting in dramatic code reduction.

Multi-language Platforms

Aside from robustness, the new versions of the above languages are design to run on common runtime environments: virtual machines. This allows co-existence of multiple languages in a single software system.

Imperative type-safe object-oriented languages—such as java and C#–dynamic languages—such as Groovy and IronRuby—and non-inperative functional languages—such as Clojure and F#–can run seamlessly together on commercially available virtual machines–such as jvm and .net clr/dlr. Therefore, no technical barriers to development of multi-language systems exist today.

Example: Mobile Application with Cloud-based business logic.

Imagine a mobile application that provides sophisticated investors with instantaneous alerts based on news on or coverage of a company. Such an application constantly scans large number of online sources for any mention of the company’s name or reference to its competitors or general macro-economic events that can affect it. The system, then, analyzes the raw inputs and provides the user with a single metric indicating the effect of the latest chatter on the company’s stock price (positive or negative). Based on this metric, the investor can take appropriate actions.

Development of this system requires both mobile client and server side development. The client side could be an iPhone application implemented in Objective-C and UIKit.

The server side is more complex. It requires a concurrent component running on a massively parallel cloud computing platform that constantly monitors and filters large number news feeds, blogs, and possibly social networking sites. The analysis of the filtered information may require specialized algorithms some aspects of which require constant enhancements. These functionalities are best implanted using combination of object-oriented, dynamic and function programming languages

Process and Multi-language Development

Because of the inherent complexity of multi-language systems, software development processes and integrated application lifecycle management (ALM) systems are critical to development of such systems. Imagine the various categories of practitioners and skills involved. Each with its own unique development, validation and verification approach and tools.