common design patterns that can improve your application code;
software development principles that underlie many design patterns;
best practices in application design and development;
frameworks that support best practices.
Applying these patterns and practices in real-world applications can be a lot trickier than understanding them conceptually, so we will encourage you to bring in application design problems that you have been struggling with, or solutions that you have found to common design problems.