2017년 6월 7일 수요일

Introduction

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

댓글 없음:

댓글 쓰기