trends in technology

Download Trends in Technology

If you can't read please download the document

Upload: dhananjay-nene

Post on 16-Apr-2017

7.986 views

Category:

Technology


0 download

TRANSCRIPT

Trends in Technology


Dhananjay NeneJuly 13, 2010

http://blog.dhananjaynene.com http://twitter.com/dnene

Some quick caveats

A few, not most might be recent insights into some not so recent trends

Since we are dealing with the latest trends, some opinions might be forward looking

These opinions are my own and should not be construed to reflect anybody else's

Structure of Talk

Client

Programming

Architecture

Miscellaneous

Client Tier Trends

The Rich Internet Client has been coming ...

.. but has been stifled by tensions between specificity and genericity ..

.. or between user interactiveness and time / cost

Some of these tradeoffs are most visible in the mobile space

eg. Internet Apps or Client Installables

Leveraging the platform, or coding to the common denominator

What is certain is that Richness is no longer the monopoly of the client installed

AJAX and Javascript have demonstrated the ability to create browser based rich applications

And jQuery has demonstrated the path to contain quirkiness, verbosity and high development costs

Even as CSS has taken on most presentation tasks

However new challenges emerge as the older ones are contained

Form factors moving from discrete to a continuum

Even as Touch Inputs become more heavily used

Platform shakeouts haven't happened
Symbian, iOS, Android and others

Specificity vs Genericity is still a big issue

And no consistent customer expectations

I believe HTML5, CSS, Javascript, AJAX will dominate in the longer term for most but the most demanding client apps .. but thats a trend in progress

RIP : This site best viewed in Internet Explorer.

Firefox, Chrome, Safari & Other webkit browser support necessary

As is support for multiple form factors and input mechanisms (specifically touch)

Touch requires lot of dumbing down of screens

And more error tolerances (thus wider gaps between display units)

I believe there is an upcoming category for integrated clients which compose data across applications

A good example is HootSuite, TweetDeck, Seesmic supporting multiple social networks simultaneously

Similarly applications will be required to render themselves into common container clients

But of course we heard that earlier with portal servers .. so this is still up in the air

In the meanwhile users don't want to press the refresh or the save button

Comet and eventually HTML 5 Websockets to the rescue

Now onto programming ..

The Java mindshare erosion is substantial

And its usage is likely to be dipping

Java is the new low-level / infrastructure / plumbing language

Even as the JVM has never been in a stronger position

The VM is the new OS

Now cross VM support is being built for many languages eg. Python, Ruby, Scala and others

Dynamic languages (PHP, Python, Perl, Ruby) after earlier bursts continue to hold their own

Some of them are getting newer runtimes or environments (eg JRuby, PyPy, Jython, IronPython)

But new languages such as Scala and Clojure are capturing many developer's imagination

And Erlang, Haskell, F# - all functional programming languages show a steady climb even though from fairly small current usage

What is functional programming ?

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast to the imperative programming style, which emphasizes changes in state.

.. source - Wikipedia

One of the suggested reasons for ascendancy of functional programming is the upcoming multicore challenge.

It is also suggested that programs are much easier to write and maintain using functional programming techniques.

Should one switch to functional programming ?

Depends upon the specific nature of applications

In any case it makes sense to slowly build adequate skillsets in the same.

The days of the dominant language (C, C++, VB, Java) seem to be over.

Moreover the days of one language for an app are also history

We already use HTML, CSS, Javascript + 1 backend language for all web applications

Now increasingly it will be just as easy to use multiple languages for the back end as well.

Polyglot programming is certainly a much easier option now.

Though adoption is still a little unclear.

Subversion was supposed to be the new & better CVS

But it is increasingly getting challenged by Git and Mercurial

The landscape is most certainly shifting towards DVCS

Architecture

Cloud

Beyond the will it become popular stage

While I am a little uncomfortable with the term private clouds, I shall let it stick

Enterprise private clouds likely to mirror developments in the internet based clouds

The interoperable cloud allows the possibility of private clouds for normal loads and leveraging the internet clouds for peak loads

The major influence is usage of a large number of commodity servers instead of smaller number of large capacity servers

This has an important requirement of making horizontal scaling necessary at much lower thresholds

NoSQL

The relational database has completely dominated the data storage space for long.

Even as it seems to be starting to face a substantial threat to that absolute dominance.

NoSQL is different things for different people. Its a family of approaches not one approach

Complex relationship maintenance is requiring graph databases

Some apps prefer to move intelligence (schema) away from the database and into the application. Thus some prefer NoSQL for its schemaless capabilities.

But much of the pressure is coming from large internet sites

For whom the RDBMS doesn't provide the right CAP tradeoffs

it is impossible for a distributed computer system to simultaneously provide all three of the following guarantees:

ConsistencyAvailabilityPartition Tolerance

The importance of C, A and P vary across different class of applications

Thus some particular approaches of NoSQL could be more or less applicable than others

Internet applications especially the really large ones, prioritize A and P in favour of C

However this audience focuses on financial software, and may find it more essential to prioritise C.

The key takeaway is to not treat C as always mandatory or required and deprioritise it where applicable a process that requires some unlearning

Given a telecom analogy the dawn of the stupid network, I find another reason why NoSQL is exciting.

According to that thought, internet won compared to POTS since it had a dumb network with intelligent endpoints compared to an intelligent network with dumb endpoints

Same for schemaless databases

Though I agree the thought is very hard to appreciate, when one has been exposed to SQL for long.

However, in relative terms this is still a nascent field. Observe carefully and leverage when and if appropriate

REST Representational State Transfer

This is now the dominant style of architecting applications on the internet

REST and WS-* will compete inside the enterprise

While WS-* focuses on leveraging typical application design semantics including RPC, REST eschews complexity and focuses on simple document / resource access semantics

It is possible to talk at length on how REST leverages the very aspects that made other aspects of internet such as WWW successful.

But many coming from a more conventional distributed architecture background may find REST a little hard to find comfort with. Especially its lack of registries, no predefined metadata using IDL etc.

I find the arguments not too dissimilar from static vs. dynamically typed languages

REST makes it really easy for clients to leverage exposed API

Also Hypermedia as the engine of application state can actually help reduce many application state errors.

Mashups and application integration

Inter application collaboration for servicing a particular user request including interaction with existing SaaS applications (eg. Google Maps) going to be increasingly important

Lines between applications and services blurring

An interesting implication of mashups is in the area of transactions

2PC / XA approaches of distributed transactions are simply impractical in large distributed services cloud especially on a WAN or across firewalls

Since technology is unlikely to help solve this problem, the solutions are going to come from remodeling the business logic.

eg. Long Running Business Transactions

Map reduce

Made popular by google

I see it increasingly used in the field of offline computations and analytics

Just earlier today AWS announced cluster compute instances :
pair of quad core nodes with 10Gbps connectivity

The enterprise trails the internet

The momentum of architectural evolution is squarely with the internet applications

Browser platforms, Web 2.0, Social Networking, Cloud, REST, Mashups, NoSQL, Map Reduce are all internet contributions finding their way into the enterprise

Some other miscellaneous trends

Social Networking enters the enterprise

Geo tagging and Geo location databases

Oauth is the new authentication and authorisation system. Whither SAML ?

Javascript goes to the backend
eg. node.js and V8

Fast Javascript engines allow high performance clients on the browser

Responsiveness starting to be a key requirement eg. Facebook Bigpipe

Design for extreme concurrency and long running connections eg. Tornado from Friendfeed

Thank You !