Attempt of Mit's OCW 6.005 Elements of Software Construction