The Introduction to Software Architecture Every Programmer Should Have