“How do I make a move into server side programming?” – Aspiring programmer
“Is my team fully capable of building that application server!?” – Project manager
“Bring right mix of right skills into our web development competency!” – Talent acquisition team
These are the questions most frequently heard in discussions related to web development capability building.
Whether it is a content website, a service portal/mobile application, or an online dashboard – all need a web server in the back end to process the requests. Netcraft web server market survey published in October 2017 reveals that there are at least six million web facing computers worldwide, associated with above 1.8 billion sites. That indicates how large the size of web server market is.
Stakeholders understand the importance of Server Programming in enterprise software development. That is not a challenge. The challenge is to know how to build that capability with a wide variety of continuously growing technologies available in the market to create the server side programs. It needs an immense talent to engineer the server tasks through the right set of technologies.
Let’s take a close look into the main components involved in building a server side programming capability.
The approach to build the capability holds good at individual, at project and at an organization level. Depending on the size of the task in hand you may need either one programmer who knows about all components or one expert for each component.
This article doesn’t recommend any particular tool, language or a framework though the some hyperlinks explain the concepts from some specific technology point of view.
1. Core Network protocols
The TCP/IP protocol specifies how the network layer (IP) and the transportation layer (TCP) of OSI model should operate so that the applications running on distributed computers can communicate with each other using any type of routing protocols like HTTP.
HTTP is the foundation for any data exchange over the Web. HTTP specifies a message syntax and routing for the communication between the client and server. The client application sends a request to the server and then the server responds with a status code. HTTP headers allow the client and the server to pass the additional information along with the request and response.
Understand the HTTP & TCP/IP protocols in detail and their correspondence to the OSI model.
Configure Dev environment to enable http over tcp/ip communication between the client & server nodes.
Analyze HTTP headers originating from various browsers and servers.
Troubleshoot the issues based on the response codes.
2. MVC architecture
A good architecture makes the solution not to be restricted to a particular vendor, framework, platform or a language. It facilitates good collaboration and maximizes the benefits from the best in class tools and techniques relevant to the business.
MVC is the most popular architectural pattern for building web applications and it promotes the modularity, flexibility to scale and expedites the development process. This architectural pattern is closely related to the Observer, Mediator, Strategy, Composite and Command design patterns.
Practice the internals of the MVC architectural pattern by creating some prototypes.
Separate the application responsibilities into Model, View and Controller components with clear understanding of the underlying design patterns.
Data Binding of the client side data models to the server side schema.
Creation of an Event handling strategy between the views and the controllers.
3. Web frameworks
Web frameworks implement the basic MVC architectural pattern and provide the templates & resources to easily build the models & views of our application.
Libraries provide the readymade functions to perform the network protocols related tasks like the request object parsing, content rendering, public key validation etc.
Inbuilt bootstrap http server facilitates the coding, unit testing and speeds up the development phase.
4. Programming paradigms
The main objective of the programs running on the server is to implement the underlying business logic of the application. These programs should be responsive to the environment, able to scale in several directions (like user base, data volume etc) and should be flexible to adapt the changes in business requirements.
While the development of an enterprise application needs the ability to code in several programming paradigms – the functional, object oriented, concurrent, imperative, event driven and service oriented paradigms are the most important ones for the web application development.
Concurrent programming needs the implementation of asynchronous functions in many scenarios. Likewise, the service oriented programming has to define and publish RESTful web services.
Write controllers using event driven asynchronous functions
Publish the web application as a set of RESTful Web Services
5. Enterprise Integration
Integrating the web server with other architectures federated across the enterprise maximizes the benefits from the web application to the organization. It also strengthens the web application by allowing it to use the specialized services from the network applications.
In a collaborated environment, the applications will both produce and consume the web services. IoT server consumes the ‘file transfer’ services published by the FTP server and publishes the ‘data streaming’ services. Machine Learning server consumes the ‘data streaming’ services and publishes the ‘prediction’ service. Big data server consumes ‘prediction’ services and publishes a ‘recommendation’ service.
By integrating our web application with the Big data server, we can make the application to show real time recommendations to the users based on the IoT feeds.
Create Rest clients and consume the web services published by other architectures like Machine Learning, Big Data and IoT. Define the functionality as a series of web service calls.
Websocket programming to interact with the real time systems in the enterprise.
6. Deployment and Operations
Production environment is different from the development environment in terms of the hardware size, network security, user base and data volume.
The functional and qualitative features of the application have to be designed with the production environment conditions in mind.
If the application is hosted on multiple production clusters, using cloud / standalone data center, then the application has to be equipped with additional architectural elements of high availability and redundancy.
Create a cloud/standalone deployment architecture.
Tune the load balancing and configure reverse proxy.
Build a redundancy server and bring high availability.
Implement the security policies.
Server side web development is a large market with growing number of tools and technologies. Building a competency in this dynamic environment should focus on the primary skills behind the main components of this domain. While maintaining the connectivity with the root concepts, the workforce should be able to quickly acquire any new tool or technology arriving the market.