Accidental Complexity - Falmouth-Games-Academy/comp350-research-journal GitHub Wiki

In the 1986 book "No Silver Bullet" by Fred Brooks 1(https://ieeexplore.ieee.org/document/1663532), he observed that hardware engineering was producing better productivity than software engineering. The two barriers that software engineers had to overcome were: accidental complexity and essential complexity 2(https://www.nutshell.com/blog/accidental-complexity-software-design/).

Accidental complexity is when a developer unintentionally makes a problem for themselves as a result of trying to solve a problem (This type of problem can be fixed or improved by the developer).

Essential complexity on the other hand is some areas of complexity that cannot be reduced, for example in Fred Brooks book 1(https://ieeexplore.ieee.org/document/1663532) he says that if a program needs to do 30 things then those 30 things are essential.

Essential complexity is a measurement developed by Thomas McCabe to see how well structured a program is. It measures entry points termination points and nondeductible nodes. The closer to 1 the value is, the better structured the program is 3(https://www.ibm.com/support/knowledgecenter/en/SS3JHP_6.1.0/com.ibm.raa.analyze.doc/common/cesscom.html).

Another example of essential complexity is the "Hello World" program at present time would take around 10 seconds to write and compile now. But in the 1960s the compile time would take a lot longer due to technology but the code would not be that much different 5(https://medium.com/background-thread/accidental-and-essential-complexity-programming-word-of-the-day-b4db4d2600d4).

Another example by Jon Harrop 4(http://flyingfrogblog.blogspot.com/2015/11/c-vs-c-performance-deleted.html) was that over 40 developers were needed to do this project and it took 15 years whereas he made it in 3 months using F# and his version was a lot better 5(https://medium.com/background-thread/accidental-and-essential-complexity-programming-word-of-the-day-b4db4d2600d4).

References

[1] Brooks, Frederick P.. “No Silver Bullet Essence and Accidents of Software Engineering.” Computer 20 (1986): 10-19.

[2] https://www.nutshell.com/blog/accidental-complexity-software-design/

[3] https://www.ibm.com/support/knowledgecenter/en/SS3JHP_6.1.0/com.ibm.raa.analyze.doc/common/cesscom.html

[4] http://flyingfrogblog.blogspot.com/2015/11/c-vs-c-performance-deleted.html

[5] https://medium.com/background-thread/accidental-and-essential-complexity-programming-word-of-the-day-b4db4d2600d4