andrei alexandrescu compiler data type duck typing exponential growth hello world program implementation international organization for standardization mixin multiple inheritance object-oriented programming programming paradigm separation of concerns source code strategy pattern subroutine template metaprogramming template method pattern variable