1. Historically, progress in software development has relied on reuse & Reuse-oriented methods have reached their limit
- originally based on abstraction/encapsulation: function libraries / components / dedicated processors
! limit
1) encapsulation can prevent optimisation
2) (static) error checking is limited: prefer domain-specific error messages
3) combinatorial explosion (library scaling problem): vertical vs horizontal scaling
https://www.microsoft.com/en-us/research/publication/the-library-scaling-problem-and-the-limits-of-concrete-component-reuse/
- complemented by open abstractions: frameworks/design patterns
! limit
1) APIs too large/difficult: see library scaling problems / need to write large amounts of boilerplate code
2) framework evolution: interaction between framework and completion code needs constant updating
- middleware systems
! limit
1) APIs too large
2) runtime overheads: enforcement of middleware protocol at runtime
!! causes of the limitations
1) insufficient / wrong abstractions ("geek egoism"): need domain-specific abstractions
2) functionality == components ("embodiment"): many concepts not bound to (single) components
e.g. distribution, persistence, security
3) host language restrictions ("linguistic poverty")
http://searchsoftwarequality.techtarget.com/definition/reuse-oriented-model
2. Further progress requires more automation of programming
: Need to free programmer from routine jobs by
- ...using better abstractions
- ...using more powerful mechanisms
- ...using better languages
3. "Automation of programming" can be hidden in programming languages
- compilers often simplify programs into a core syntax
- pre-processors unfold macro definitions
http://melancholy8914.blogspot.co.uk/2017/06/1_7.html
- templates: "macros for classes"
http://melancholy8914.blogspot.co.uk/2017/06/template-meta-programming-in-c.html
- aspects: code fragments "woven" into the base code
http://melancholy8914.blogspot.co.uk/2017/06/concepts-in-aspect-oriented-programming.html
http://melancholy8914.blogspot.co.uk/2017/06/programming-in-aspectj.html
4. Programming can be automated by dedicated separated tools
- Scanner/parser generators
e.g. Java CC
- CASE tools
https://en.wikipedia.org/wiki/Computer-aided_software_engineering
댓글 없음:
댓글 쓰기