Teaching is learning
Seeing people learn is exciting. I really enjoy my part-time gig working as a Distance Education Instructor supporting the Software Architecture eLearning course at the Carnegie Mellon University. It’s exciting to see students, who are many years into their professional careers, learning about a disciplined way of thinking about software architecture. These students are not there because they have to be there, they are there because they (and their employers) see value in learning and applying a disciplined approach to building software intensive systems.
During the semester long three phase project it’s interesting to see students get to the “Aha!” moment when they try to reason about system decomposition and fail because the quality attributes they specified were not defined in a precise manner. Since quality attributes define the behavioral properties of the system they (along with business and technical constraints) impact the selection of architectural patterns and tactics. It’s the students’ desire to go back and re-work a previous phase of the project that shows they understand their mistakes and want to learn from them.
What helps students learn is detailed feedback on their project and their responses to the lecture and reading material. For students this course is an opportunity to learn how to think about analyzing software architecture now and in future. It’s a place to learn, make mistakes, and get effective feedback. And for me it’s an opportunity to reflect on my professional experiences and learn about myself by teaching the software architecture discipline to others.