What is “engineering for software?”
github.com
github.com
> I argue that "engineering" is the difference between our modern, high-tech civilization (only a few centuries old, at most) and the hundreds of thousands of years of human experience that preceded it.
So constructing those marvellous cathedrals, pyramids, statues, water irigation systems etc from a thousand or few years ago are not engineering?
Just like anything else, human mind is exploring similar avenues for thousands of years, and there is no good basis to claim that we've been doing engineering for only a few hundred years.
I disagree by giving examples of engineering feats from a few thousand years ago.
Btw, for "statues", I was thinking of things like the Great Sphinx of Giza or Colossus of Rhodes (Colossus was of comparable height to the Statue of Liberty).
This is nothing but a collection of platitudes, blog spam. The described process is not only already implemented by everybody, there is simply no other way to do it even if you tried.
The trap is when that horror code isn't immediately binned but becomes the cut-corner foundation for even more spaghetti.
Disagree with all of this.
During the Q & A, someone stood up and proposed that by his definition, authors were literary engineers, since they approach writing a novel in the same way that we approached writing code.
I didn't have a horse in this race, but I remember thinking about how silly it was for my company to spend hundreds of dollars to fly me out across the country so I could listen to brilliant people discuss semantics at a software conference.
Engineering is also not normally scientific investigation. The author uses "hypothesis" in the worst layman manner. A hypothesis is not something to be confirmed, it is something to be disproven.
No, engineering is primarily about the application of predictive knowledge and models to create and implement designs which are robust to known operating parameters and unknown model error.
Guessing and checking frequently (via CD) has merit. In fact in the limit you can eliminate the human in the loop if you add in some basic rule like "reduce error with each step". That's automatic optimization.
But if you want to talk about engineering you need to talk about constraints, predictive formula, and industry knowledge guiding design choices. If you need to serve 1M QPS, is a single sharded single node Elasticsearch instance on an MX5 large sufficient? Why or why not? That's an engineering discussion. If you need to identify the closest points to a vector in Nd space among 1B points what algorithms produce tenable runtimes? That's an engineering discussion.
Other disciplines have centuries of accumulated knowledge and modeling to fall back on. They don't have to guess (mostly) which metals will survive high temperatures. Or how air will flow around a given shape. We have similar knowledge that explicitly removes the need to guess. Again, checking is always good, but the valuable tools in an engineering toolbox massively reduce the search space before any implementation is attempted and that's the heart of engineering.
People often confuse scientific investigation with logical reasoning. Software Engineers do the latter more often than the former, but they do perform the former. We literally have environments called "Test" and verifications called "tests". I find it hard to believe there's no relation.
> A hypothesis is not something to be confirmed, it is something to be disproven.
That is incorrect. The definition is available.
Hypothesis: a supposition or proposed explanation made on the basis of limited evidence as a starting point for further investigation.
> That's an engineering discussion
Yes and those discussions result in "hypotheses".
> Other disciplines have centuries of accumulated knowledge and modeling to fall back on.
While there are few software development papers, there is some progress. Mostly we each rely on our own experiences and the experiences of others (reading a bunch helps).
Engineering, or science for that matter, doesn't include all the values that individually or collectively motivate human beings to do anything.
An engine can be the core component of what an airplane or rocket is, and science can help us optimize fuel type or efficiency, or make a more stable flight, but science and engineering will not lead us to decide whether to use that airplane for leisure or war. Perhaps in a perfectly technocratic society it is arguable that engineering and science are the ultimate guiding values and principles, but that is not the society or societies we live in.
As far as software, it seems to me its engine is the microprocessor, but much if not most software is not working in tandem with some engine on the other end, exceptions being cars, planes, 3d printers etc.
Rather, software is very malleable and although end users want things to work well, they also are accustomed to a steady if not daily flow of updates, which the author of this blog post has some expertise with (I would consider the development if continuous delivery an engineering endeavor).
All that to say is I think the author should look more deeply elsewhere than science and engineering as to the why and what to build, or ironically the epistemology, ontology, methodology and axiology will sort of just be pulled out of the air ad hoc, perhaps the least scientific way of operating.
Cf. "System Design from Provably Correct Constructs" https://archive.org/details/systemdesignfrom00mart