trends in technology
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 !