Building Blocks in Engineering

Any engineering product can be defined in three steps.

1. What to be made?(product)

2. How to be made?(method)

3. What are the building blocks that build it? (components)

That is, a certain group of building blocks combined in a certain way, make the product.

So, what are the building blocks in this?

Let's think in mathematical terms, to create a polynomial we need a basis vector and each polynomial is uniquely represented by a certain linear combination of basis vector. e.g. take one of the simplest polynomial P = a + bx + cx^2, where [1, x, x^2] is basis vector, if there is a certain value set (a, b, c) that make polynomial P, it can not be represented by some other set (a', b', c') in same vector space. At the same time if we choose different basis vector, then also we can not make the same polynomial P. As we see, the basis vector chosen here is very simple one, for complex polynomial, we need to choose more complex basis vector(e.g. [1, 2 + x^2, 3 + x^3 + x^5]), the idea is if we choose simple basis vector to construct complex polynomial, our combination become complex, in other words, we need larger set of basis points to construct it. Another way if we choose complex basis vector we can not construct simple polynomial. This complex basis vector is nothing but a linear combination of other simpler basis vector and that way going down to smallest mathematical units. If we generalize this, we can see at any level basis vector are just basis vector(just give different notation) and its complexity can be hidden in abstraction layer as long as it satisfies the properties to construct next level.

If we extend the concept of basis vector to building blocks in engineering, we will have complex building blocks of engineering going down to smallest units. So, let's see what are the building blocks of engineering? and what are its smallest/fundamental units?

1. Civil Engineering: Let's take the example of a bridge, what are the building blocks of a bridge? pillar, slab etc. So for constructing the bridge we just need to decide the properties of pillar, slab and we need to combine them in a unique way, an engineer building bridge, don't need to worry about what it made up of as long as it satisfies the properties(size, strength, etc.), what he has to worry about is properties of building blocks, if he choose larger size, then he need small number of units and less cost to join them, but making slope/curve on the bridge will be difficult and if he choose smaller size then joining them may increase the cost and decrease the strength. This argument can be easily extended to other properties and corresponding building blocks. Now let's take one such unit slab, what are its building blocks? concrete, iron rod, cement etc.. What are building blocks of an iron rod? iron and other metals, this way going down till electron, proton, neutron, most fundamental building blocks of any physical objects.

2. Electrical engineering: Take computer as an example, made up of components like CPU, motherboard, hard disk etc as building blocks, each made up of a transistor, capacitor etc. as building blocks, again going down to the electron, proton, and neutron as fundamental building blocks.

3. Mechanical Engineering: Take car as an example, made up of components like engine, interiors units, wheels, electronic systems etc. as building blocks and most of them perhaps take more than half of periodic table to make molecules as building blocks and again ending up to the electron, proton, and neutron as fundamental units.

So, if we see all these engineering, there are few things are very clear,

a. At each level, the engineer just needs to think properties of building blocks he is using, not much about the what those building blocks are made up off.

b. At each layer, there is some abstraction that hides the lower level building blocks.

c. Assuming linear independence in the mathematical sense, each product is made up of the unique combination of chosen building blocks, if one either change combination or building blocks the product is not same. 

d. As in the case of polynomial, for expected result, choices of basis vector decides the error in the result(fitting data points etc.), similarly, choices of building blocks shows the deviation from expected outcome from the final product.

Now, let's apply all these concepts to software engineering, what are the building blocks of a software product.

i. The software is made up of packages(in the generic sense for all, like databases, server, security etc.), configuration files, as building blocks.

ii. Each package is made up of classes(OOP), functions(FP), files etc. as building blocks

iii. Each class/function is made up of data types(int, float etc.) as building blocks

iv. Each data type is made up of the byte as building blocks

v. finally each byte is made up of bits as fundamental building blocks.

If we see, in theoretical sense software engineering is similar to other engineering, but here is a major difference. In the case of other engineering, for any product, building blocks are not only very much linear independent in nature, it's decided at the time of design. In the case of software, either we keep changing its building blocks from the class/function level layer or we expect different product by retrofitting the combination of existing building blocks. In all process, we abuse the fundamental principle of keeping abstraction at each layer. This is the major reason software products have more issues than other engineering products. So either we live with dynamics of this changing nature and keep working on issues coming from violation of principles of engineering or we follow the principles and expect the result like other engineering but may be with slower speed. 

PS : At the very low level in software engineering, it's good to see code duplication as a violation of the linear independence of building blocks.

This also means components with certain (high) complexity cannot be built with other components of too low compleity. Can we define anything like 'permissible complexity gap' between components in consecutive layers which build the system? Here, I refer to functional complexiy of components and not the code complexity

Like
Reply

To view or add a comment, sign in

More articles by Manish Kumar

  • Logical Fallacy in Tech leaders arguments

    When I started working in the software industry, the most common and desirable skill was logical ability, I am not sure…

    3 Comments
  • Bug in Indigo web check-in software

    Disclaimer: This post is about understanding the technical problem and finding a solution. Dear Indigo Software…

    3 Comments
  • A social network idea and industry reality

    Recently I was discussing one social network idea with my friends, the idea is a private social network for…

    4 Comments
  • Impact of the first manager(s) on career

    When some entry-level engineers ask my suggestion about career, one thing always comes to my mind is, the impact of the…

    4 Comments
  • Small flaws in amazon(pay) and paytm auto-reload flow

    If you are an engineer and use technology-based products, whenever something goes wrong, your engineering mind(even…

  • Dynamic typing is a Curse or Boon

    When I was in school, one of the most common essay teachers used to ask us to write was Science is curse or boon, in…

    3 Comments
  • Bad ambassador of technologies

    Sometimes I think if Google has chosen Haskel or Lisp instead of Python, would it have been as popular as Python?…

Others also viewed

Explore content categories