Building Blocks of a Software Application

Rome wasn't built in a day!

Advancements in the software development field today are accumulations of inventions over the years. Developers reap the benefits of the work put down by yesteryear researchers and developers. Perhaps the world civilisation is nothing but a game of relay!

From building just assembly codes to interact with the computer to building frameworks to cloud computing, we have come a long way in software development!

We will see how each of the technology or tool is just built one upon another and how we overlook the introductory terms of every tool we learn today! Learning the terms might also aid in better understanding of the modern age tech stacks we use.

Programming Languages

Programming Languages are human understandable computer instructions that control the behaviour of a computer. There are 2 types of languages, high level and low level based on their levels of abstraction.

High level languages are closer to human understandability with a higher level of abstraction than low level languages. High level languages are eventually converted to computer understandable machine language(low level).

It is important to note that not all languages are programming languages. Computer Scientists define programming languages as a set of languages that can implement algorithms and can perform computation. It is because of this HTML and CSS aren't considered programming languages.

Some common programming languages that are popular today are C, C++, Java, JavaScript, Ruby and Python.

Code

A code is a set of programming statements written in a programming language and is formally referred to as source code.

Source codes are converted to machine codes by compilers, interpreters or assemblers.

Languages like C++, Java and Ruby are converted using compilers (although Java is much more nuanced!) while PHP, Python and JS are done using interpreters.

Modules, Packages and Libraries

Modules group codes into methods or functions for ease of accessibility and legibility.

Packages are collection of modules where modules are grouped together on the basis of similar functionalities.

A library is simply a collection of packages grouped on the basis of similar functionalities. Libraries solve the purpose of reusability and are used to perform simple tasks effectively and remove developers' overhead. It must be noted that the terms libraries/packages are used interchangeably!

Some common web libraries include D3.js, jQuery and even React! Some popular data science libraries include numPy, sci-kit and so on.

Every modern day language has a package manager through which packages can be installed onto the machine and used. npm, yarn and bower are some common JavaScript packages while pip and conda are python package managers.

Runtime

A runtime is an environment for a language to be computed and run. It commonly refers to the environment variables and data structures that keep track of everything a code/program does.

For C and C++, a runtime is the OS environment variables and OS services while for Java, its runtime is the Java Runtime Environment(commonly referred to as JRE) that runs on top of an OS through JVM(Java Virtual Machine) to create a consistent cross-platform functioning.

For JavaScript, all the modern browsers provide a runtime environment. Chrome provides this through v8 engine while Firefox through spidermonkey engine.

NOTE:

NodeJS is an open source JavaScript runtime environment built on the same v8 engine as that of chrome hence making JavaScript executable without the need of a browser thereby bringing JavaScript for Backend Development!

Framework

Wikipedia defines a framework as ,

...an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software

General purpose languages like Java, Python are not easily adaptable to application specific functionalities like web development or data science. To overcome this difficulty, frameworks are built on top of these languages to make them application specific so that developers need not reinvent the wheel.

Flask and Django are examples of Python based web framework while PyTorch, TensorFlow are examples of Python based data Science framework. Similarly, ExpressJS, AngularJS, Vue.JS are JavaScript based web frameworks.

Frameworks usually contain libraries, templates, APIs, tool sets, session management and so on.

Prominent features of frameworks are Extensibility, Immutability and Inversion of Control(IoC).

Frameworks can be extended by developers to add a specific functionality. Frameworks aren't supposed to be modified. Developers can extend the framework but not modify the existing code.

Inversion of Control

IoC is a design principle. It is all about inverting the usual flow of code control. Traditionally, developers' code calls a library. With this principle put to use, frameworks make calls to the custom code.

IoC is a theory and is put to practice by various design patterns out of which Dependency Injection is one(which is an article for another day!).

Conclusion

I hope there is a much more clear idea on the history of web development and the terms predominantly used in the introduction pages of the new tools in the future!