Building software nowadays is far more difficult than it can be done several decadesago. At that time, software engineers focused on how to manipulate the computer towork and then solve problems correctly. The organization of data andimplementation of algorithm were the crucial process of software designing then.However, more and more tasks in low level, such as memory management andnetwork communication,have been automatized or at least can be reused with littleeffort and cost.Programmers and d