Object-Oriented Programming vs Functional Programming
Many of us have heard about Functional Programming paradigm and may have wondered what is the advantages of FP over well established Object-Oriented Programming?
Is it enough to know the basis of OOP and have at least a general idea of Functional Programming ?
Which Software Development Skills are not Subject to Aging?
The software development industry is growing at a phenomenal pace, and product requirements are constantly growing. To develop a product, a multi-tasking programmer who does everything alone is no longer enough. Behind any project, be it an open-source web server or commercial CRM, there is a team of specialists, each of which has its own area of competence.
Of course, every technical specialist should have a scientific and technical basis for understanding the operation of the entire system as a whole. These skills include understanding the OS, network stack, the principles of database operation, and the mathematical approaches that underlies any algorithm or protocol. However, these skills alone cannot be useful unless they are integrated into the overall development process. Thus, the need for the development of soft skills becomes more and more obvious. The ability to achieve the assigned task together is something that technical specialists often miss. It happens that communication issues are not given due attention. Improving communication skills is not only due to the study of materials on this topic, but also requires daily practice and changes in their already familiar patterns of behavior. Learning to code is important even for kids.
A Reactive Approach in a High-Load Application Using the Service for Calculating Cashback as an Example
This article does not aim at describing frameworks and architecture, as they are already well documented. Rather, it is intended for those who start working with microservices and Project Reactor, and describes the main features of these technologies and what they will have to deal with and work with.
Unlike monolithic, microservice architecture is based on the allocation of small independent software services, each of which implements a separate business function. If everything is connected in a monolith (and in case of failure of one function the others can “fall off”), then microservices can provide flexibility and stability of the system. Large IT solutions can contain dozens of microservices in their architecture, and a separate independent team can work with each of them.
Example
Consider the case study from practice. The insurance company contacted us to upgrade its online application with a flexible microservice architecture. We were faced with the task of implementing cashback in the application, that is, accruing bonus points to the user for the purchase of an insurance policy.
At first glance, the task looked simple.
For each paid (extended) policy to accrue to the user a certain cashback of X% through the accounting service. The user should have access to information about the received cashback.
Upon reaching a certain total cashback, automatically transfer funds to the client through the accounting service. The payout history should be available to the user.
The main project used the Kafka message queue as a means of exchanging information between microservices, and also as the only permanent replicated information store.
When you need to implement certain functions on microservices, you always need to keep in mind the possibility of horizontal scaling. The code should work not only in a multi-threaded environment, but also in the case when several containers with a microservice are launched.
We also add that the clients of such an application are supposedly unlimited. And many of them are mobile, i.e. relatively slow.