http://www.pathsensitive.com/2018/01/the-three-levels-of-software-why-code.html?m=1