In geometry they have axioms. You take those axioms and you can build all theorems based on it. See Euclid's Elements.
In chemistry they have atoms. All materials consist of atoms. So you need to study atoms and how atoms interact and you can understand chemistry (I'm no a chemistry major, but I guess this is a big part of chemistry). See the Periodic table of elements.
In architecture, they have units from which they construct buildings, like windows, walls, stairs, etc. See Pattern Language by Christopher Alexander et al.
My question is: What are the building blocks of software development?
Is it algorithms and data structures? I don't think so, because we don't have an exhaustive list of them, those are more like premade receipts. More like theorems in geometry, not axioms.
Is it design patterns? Is it objects? I don't think so, because those are paradigm specific.
Is it monads? Maybe. I'm not sure about that. Can we describe assembly with it (my guess we can, because it is a very abstract field, but the question will it be comfortable to use for that case)? Is it paradigm specific or more universal?
Is it even possible to have one set of building blocks? Or we need different sets for low-level code (assembly) and high-level code (for example, functional languages). Maybe we can define different levels of abstractions and find building blocks for each level?
Maybe what think of as different abstractions are the same thing?
Source of the image: reddit.
What every programmer should know to understand the programming independently of language and paradigm? What are the most basic building blocks in software development?
Photo by Rick Mason on Unsplash