Is Software Engineering Real Engineering?
The problem with this question is that, if it&#x27;s not engineering, what is it? A better question is motivated by studying the history of chemistry and its progenitor, alchemy. That is: is software development alchemy or chemistry?<p>Software development is alchemy. Just like alchemy, software dev is not standardized, everyone has their own idiosyncratic naming systems, classifications and rules-of-thumb. Like alchemists, software engineers are often jealous of their proprietary knowledge. Just like alchemists, they are admired, feared and loathed for having secret knowledge. And just like alchemists, you have to be exceedingly brilliant to work in such a chaotic field and get anything done.<p>So, what changed alchemy into chemistry, and what will be the analog to that in software? Arguably the change started with notion of conservation of mass and energy, and the development of the periodic table (thanks to Lavoisier and Mendeleev, respectively). As for what that analog is for software, first we need a characterization of the field. With alchemy and chemistry both, it&#x27;s essentially mixing stuff together, heating and cooling it, and seeing what happens. But what is it for software?<p>First, software engineering is not computer science. Computer science is a tiny subset of software engineering. In daily practice, almost all of computer science is encapsulated in a few, tiny standard libraries - the places where bubble-sorts and hash maps live. (This mistake is consistent, and leads to &quot;leet code&quot; style interview questions which are irrelevant to actual work).<p>I&#x27;d characterize software engineering as the set of solutions to a boundary value problem[0] described as &quot;a set of interacting screens with behaviors pleasing to humans&quot;. The current solutions to this problem have been idiosyncratically defined by resource constraints that  relaxed exponentially over time[1], and characterized by elements discovered at random, by necessity: e.g. kernels, processes, files, procedures, terminals, etc. In this analysis &quot;language&quot; functions as a kind of &quot;coordinate system&quot; as in physics[2][3], within which each of these elements are described, and within which elements are combined to make new elements, which eventually yield a solution to the boundary problem (which is termed &quot;application&quot;). There is some coorespondence with chemistry, in that we have &quot;elements&quot; which combine into higher-level structures, but we lack an analogy to &quot;conservation of mass and energy&quot;. And our elements are still highly partitioned according to coordinate system (although there have been several[4] heroic[5] attempts to unify them within a single framework.)<p>I don&#x27;t particularly know what the standardization of software alchemy into software engineering will look like, but I&#x27;m certain that this analysis, or something similar to it, is the first steps in the right direction. Personally, I look forward to the day we can shed the considerable weight of our alchemical origins!<p>0 - <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Boundary_value_problem" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Boundary_value_problem</a><p>1 - <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Moore&#x27;s_law" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Moore&#x27;s_law</a><p>2 - <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Coordinate_system" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Coordinate_system</a><p>3 - <a href="https:&#x2F;&#x2F;www.rosettacode.org&#x2F;wiki&#x2F;Rosetta_Code" rel="nofollow noreferrer">https:&#x2F;&#x2F;www.rosettacode.org&#x2F;wiki&#x2F;Rosetta_Code</a> - the same problem is solved in many languages. For applications: <a href="https:&#x2F;&#x2F;todomvc.com&#x2F;" rel="nofollow noreferrer">https:&#x2F;&#x2F;todomvc.com&#x2F;</a><p>4 - <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lambda_calculus" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lambda_calculus</a><p>5 - <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Turing_machine" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Turing_machine</a>