from scratch using modern c++