No Silver Bullet: Essence and Accidents of Software Engineering (1987)
cgl.ucsf.edu
cgl.ucsf.edu
The main areas of complexity I perceive today in building software are:
- "infrastructure complexity" (see above)
- "deployment complexity": continuous delivery and getting code into production
- API complexity: using 3rd party tools used to be function calls, now they're complex distributed systems
- code complexity: git, pull requests, setting up your dev environment, etc
I wrote more about this here [1], but I honestly can't believe how complex it is to create software today.
He says BL is fundamentally wrong in his analysis, and that the overwhelming majority of time spent programming in 1987 turns out to be what BL calls "accident", and has been radically reduced by progress since.
There is still no "silver bullet", but there are many, many bullets with cumulative effect, so that many programming tasks that would have taken prohibitively long in 1987 can now be done on a whim.
https://danluu.com/essential-complexity/
Probably the biggest bullet is greater accessibility and power of libraries, coupled with languages better able to express and use them. When libraries are more useful, there is more motivation to make and publish them, and so there are more available to use.
https://github.com/papers-we-love/papers-we-love/blob/master...
It somewhat puts the old saying in another light: "There are two hard problems in computer science: cache invalidation and naming things." Cached state is, effectively, another name for derived state.
2019 https://news.ycombinator.com/item?id=20818537
2017 https://news.ycombinator.com/item?id=15476733
2015 https://news.ycombinator.com/item?id=10306335
2011 (1 comment) https://news.ycombinator.com/item?id=3068513
Related from 2008 (by Brad Cox): https://news.ycombinator.com/item?id=239323
Fred Brooks is a true genius to percolate a generation's worth of transformation into such a statement.