For Cloud Developers, Polyglot is the Name of the Game
Polyglot is the ability to speak multiple languages. Typically, polyglot is a term used in the context of Platform as a Service (PaaS). But whether it is Cloud or not, developers today need to learn more than one language and runtime. This article attempts at identifying some key investments that the contemporary developers need to make to stay relevant in the era of cloud and devices.
There were times when the developer’s skill set was measured in terms of his expertise in one language and just one platform. In mid 2000s, the choice was simple – it is either .NET or Java. Hiring managers looked for the required depth in C# / .NET SDK or Java / JDK. Similarly, focusing on one database like MS SQL Server or Oracle and understanding database programming based on that was considered a bonus. By and large, the enterprise developer community was divided between the Microsoft world (Windows, .NET and SQL Server) and Java world (Java, J2EE, Oracle) That was also the time when IT certification trend became hot and forced every serious developer to get Microsoft or Sun certified developer.
But the scenario today is very different. Consumerization of IT is ruling the roost and that has forced the developers to re-look at the technology stack. Most of the contemporary applications can be classified into consumer web applications, social applications, mobile and desktop applications. Application development in the current context spans multiple devices, a variety of programming languages, diverse frameworks and at least a couple of database environments.
Traditionally, ASP.NET, PHP or JSP was a good enough skill set to claim to be a web developer. But that’s not enough anymore. Every web developer needs to know the following –
- Dynamic Server side Language – This is one area where existing skill set of web developers is valued. ASP.NET, PHP and JSP will continue to exist for rendering dynamic content by interfacing with the data. Patterns like MVC are becoming standards for the server side web programming.
- HTML5 – This is a non-negotiable skill for web developers. With mobile web dominating the traffic, developers should target responsive design and user experience that can be rendered across multiple devices with multiple form factors.
- Native Mobile Development – Majority of the web applications are now delivered as native mobile applications. Every web developer needs to understand at least one mobile programming environment targeting iOS, Android, Windows Phone or BlackBerry.
- Hybrid Mobile Development – By leveraging cross device frameworks delivered by PhoneGap, Appcelerator and others, developers can create apps that can be delivered on multiple devices without learning the nuts and bolts of a specific mobile platform.
Typically, business logic was always coded in C# or Java for the heavy lifting. The communication between the presentation tier and the business logic was through RMI or WCF. But this has been replaced with REST as the standard protocol. Also, with applications becoming chatty with frequent communication with the middle tier, realtime socket based communication frameworks complement REST. With majority of the applications getting deployed on the Cloud, dealing with the native Cloud APIs are essential to get the best out of the Cloud platforms. Developers need to be proficient to develop various layers to tackle the heavy lifting.
- Core Business Logic – Majority of the functionality goes into this layer where the core business logic of the application exists. This needs to be high performant and it is typically coded in C# or Java.
- REST API Façade – This layer separates the core business logic from the front end. The API façade either synchronously or asynchronously talks to the business logic. This should be designed to scale independently of the business logic tier. Developers can code this layer in ASP.NET, PHP, Java, Ruby or any other modern languages.
- Cloud API Façade – Based on the underlying Cloud platform, developers need to integrate the application with the APIs. This includes dealing with the storage, CDN, in-memory cache or queues. Separating this into an independent façade brings portability and avoids vendor lock-in. Developers need to be proficient with the APIs offered by Cloud platforms like AWS, Windows Azure or Google App Engine. These APIs have bindings supported in various languages, which saves the developer’s time in dealing with the plain REST APIs.
- Data Access – There were times when data access was meant to be either OLEDB or JDBC. With a variety of data sources handling the persistence, developers need to deal with a variety of database and persistence API. This includes talking to the RDBMS, NoSQL databases and Cloud based persistence layers.
- Realtime Communication - HTTP is not the best protocol for chatty applications. Mobile applications that send frequent updates (push) or query the middle tier often (pull) create a burden on the REST API layer that may hamper the user experience. So, applications need to separate the chatty communication and the regular REST API façade for performance. This is where Node.js has a key role to play. When combined with frameworks like socket.io, Node.js delivers the required realtime communication capabilities. The other advantage of Node.js is in it’s native JSON support. Mobile devices can send and receive JSON payloads without the overhead of serializing and de-serializing.
Database programming doesn’t mean using just the JDBC, JPA, ODBC or OleDB API anymore. At a high level, data tier is now split between transactional RDBMS and non-transactional NoSQL databases. Developers need to understand the tradeoffs and the specifics of dealing with what is now called as polyglot persistence.
- RDBMS – This layer can never be replaced and continues to be the most critical part of the applications. Developers need to understand the fundamentals of database programming and specialize in at least one of the databases like MS SQL Server, Oracle, MySQL or PostgreSQL.
- NoSQL – Non-transactional, user generated data need not be stored in the expensive relational databases. That data typically should go into the new breed of databases called NoSQL or NewSQL databases. MongoDB, CouchDB, Cassandra or hosted NoSQL databases like DynamoDB or Azure Tables will handle this requirement. Data that enters the NoSQL database comes through the realtime stream handled by Node.js. Since majority of the NoSQL databases store data in JSON, and it is the same JSON that the frontend and Node.js also understand, it offers a great performance boost when persisting and querying the data from the NoSQL database.
I want to conclude this article by highlighting the need for developers to learn the diverse set of languages, toolkits, frameworks, runtimes and databases. This is essential to survive the world of continuous services and connected devices.
- Janakiram MSV, Chief Editor, CloudStory.in