As a software engineer, you must know the essence of modern software systems:
- Validation & Verification
Complex programming projects cannot be perfectly partitioned into discrete tasks that can be worked on without communication between the workers and without establishing a set of complex interrelationships between tasks and the workers performing them.
The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.
The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence.
The software entity is constantly subject to pressure for change. Of course, so are buildings, cars, computers. All successful software gets changed.
**Software is invisible **and unvisualizable. For decades, people have been anticipating and writing about "automatic programming”.
**Time-sharing **brought a major improvement in the productivity of programmers and in the quality of their product, although not so large as that brought by high-level languages.
Much of the effort in modern programming goes into testing and the repair of bugs. Is there perhaps a silver bullet to be found by eliminating the errors at the source, in the system-design phase?
Program verification is a very powerful concept, and it will be very important for such things as secure operating-system kernels. The technology does not promise, however, to save labor. Verifications are so much work that only a few substantial programs have ever been verified.
More powerful workstations we surely welcome. Magical enhancements from them we cannot expect.
Even though no technological breakthrough promises to give the sort of magical results with which we are so familiar in the hardware area, there is both an abundance of good work going on now, and the promise of steady, if unspectacular progress.
All of the technological attacks on the accidents of the software process are fundamentally limited by the productivity equation:
The productivity, P, of a group of people is:
P = N x T x (0.55 - 0.00005 x N x (N - 1))
N is the number of people in the group, and
T is the number of hours in a work period.
If, as I believe, the conceptual components of the task are now taking most of the time, then no amount of activity on the task components that are merely the expression of the concepts can give large productivity gains.
Hence we must consider those attacks that address the essence of the software problem, the formulation of these complex conceptual structures. Fortunately, some of these attacks are very promising.
P.S. This is an excerpt from my latest book The Prime Guide For Next-Gen Developer.
It's available for pre-order now.
Hope you like this one💙 Please share your feedback.
You can follow me for more killer content on Twitter
If you need 1–1 mentorship on any issue about coding career or life or fitness as a coder then you can book a 60–90min time slot with me.
Check out my website for more info about how it works.
I recently started blogging on theankurtyagi.com where I create free content for the community. This article is from there, you should check it out.
If you liked my recommendations, then I encourage you to sign up for my weekly newsletter
Every Friday, I share a “2-1-1” newsletter with 2 tips on coding from my exp, 1 life relationship tip from my experience & 1 fitness tip.
Sign up below 👇