Skip to content

Overview

As business domain and its requirements expand, the software to support it becomes larger and eventually the code base becomes huge. To reason about, understand and maintain these large code bases programming languages are often equipped with paradigms like object oriented programming, functional programming etc to structure and organize large code bases.

Object Oriented Programming (OOP)

In this paradigm, software is divided into multiple objects. Business domain and its logic is then defined as the interaction between these objects and their results. These objects often contain state information that changes over time as the objects interact with each other.

Ruby language which we extensively use for our backend applications supports OOP. Javascript also supports OOP using the new ES6 specification.

Learning and mastering OOP is mandatory to excel in our projects/products. These principles are used both in our frontend and backend applications.

Functional Programming (FP)

In this paradigm, software is divided into multiple functions. Business domain and its logic is then defined as the interaction between these functions and their results. We barely use functional paradigm to build our applications, mostly we use it when want to do array or map transformations.

Ruby and Javascript both support FP paradigm. In Ruby, lambda/proc can be passed as function references across method calls or invocations. Traditionally Javascript has been functional in its approach and function itself is a first class citizen of the programmaing languahes and it can be passed around to other functions and form higher order functions.

There are languahes like clojure, haskell and lisp, that are purely FP in their approach.

Static type vs. Dynamic Type

In a statically typed language, before the program runs, a separate process called compilation happens that checks for correctness of data types in your program. The process that performs such verification is called as a compiler, the output of the compiler is then interpreted and executed.

On other hand, in a dynamically typed language, the compilation step is skipped and program is durectly interpreted and executed. Any failing data type mismatches are found during runtime execution of the program.

There are pros and cons to each of these approaches. There are lot of academic materials on the same which you can study.

Swift and Kotlin that we use for ios and android development respectively are statically typed languages, while Javascript and Ruby are dynamically typed languages.

Concurrency & Parallelism

Dependency Injection

Frameworks IoC