Table of Contents
0. Table of Contents
Est 0 minutes
Topics
1. Course Overview and Introduction to Java
Est 70 minutes
Topics
- Understand the structure of this course and what will be expected of you every week (15 minutes)
- Review the Systematic Program Design and Implementation Process (10 minutes)
- Describe the context of Java in the historical development of OO languages and "run anywhere" technology/JIT runtimes (10 minutes)
- Compare the Java runtime environment to Python (10 minutes)
- Recognize Java syntax (10 minutes)
- Understand the difference between core datatypes in Java: primitives, objects and array (15 minutes)
2. Inheritance and Polymorphism in Java
Est 55 minutes
Required preparation
Optional preparation
- Describe why inheritance is a core concept of object-oriented programming (10 minutes)
- Define a type hierarchy and understand the relationship between superclasses and subclasses (10 minutes)
- Explain the role of interfaces and abstract classes in a Java class hierarchy (10 minutes)
- Describe the JVM's implementation of dynamic dispatch (10 minutes)
- Describe the difference between static methods and instance methods (5 minutes)
- Describe the JVM exception handling mechanism (5 minutes)
- Recognize common Java exceptions and when to use them (5 minutes)
3. Inheritance and Polymorphism in Java II
Est 45 minutes
Topics
- Review the role of inheritance and dynamic dispatch in Java (5 minutes)
- Describe the role of generics in the Collections API (10 minutes)
- Recognize and apply Java's core data structures (10 minutes)
- Describe the purpose of primitive wrapper types (5 minutes)
- Utilize Java methods for reading input and writing output to streams (15 minutes)
4. Specifications and Common Contracts
Est 48 minutes
Topics
- Describe the role of method specifications in achieving program modularity and improving readability (10 minutes)
- Evaluate the efficacy of a given specification using the terminology of restrictiveness, generality, and clarity (15 minutes)
- Utilize type annotations to express invariants such as non-nullness (5 minutes)
- Define the role of methods common to all Objects in Java
5. Functional Programming and Readability
Est 45 minutes
Topics
- Describe the historical context of functional programming in the JVM (10 minutes)
- Read and write Java code that uses functional programming (10 minutes)
- Compare the readability of Java code that uses functional vs OO styles
- Describe common misconceptions about what makes code "readable" and draw on evidence-based research to evaluate the readability of code (10 minutes)
6. Changeability I: Modularity and Information Hiding
Est 60 minutes
Topics
- Describe the importance of changeability as a goal of program design and implementation (10 minutes)
- Describe the relevance of modularity to changeability (10 minutes)
- Describe the role of information hiding and immutability in enabling effective modularity (5 minutes)
- Be able to apply Java language features to achieve information hiding and immutability
7. Changeability II: Coupling and Cohesion
Est 55 minutes
Topics
- Analyze the changeability of a software module for some hypothetical change using the language of coupling and cohesion (10 minutes)
- Define and recognize cases of data coupling, stamp coupling, control coupling, common coupling and content coupling (20 minutes)
- Define and recognize cases of coincidental, logical, temporal, procedural, communication, sequential, and functional cohesion (15 minutes)
- Use the vocabulary of coupling and cohesion to review the Strategy pattern (10 minutes)
8. Changeability III: Principles for inheritance
Est 60 minutes
Topics
- Other design principles related to changeability: SOLID (20 minutes)
- Describe why to favor composition over inheritance by default (10 minutes)
- Describe rules for safely implementing inheritance (5 minutes)
- Define the decorator method pattern and its relationship to design for change (15 minutes)
- Identify cases where inheritance is preferred over other implementation tricks (10 minutes)
9. Interpreting Requirements
Est 55 minutes
Topics
- Explain the overall purpose of requirements analysis (10 minutes)
- Enumerate and explain 3 major dimensions of risk in requirements analysis (15 minutes)
- Identify the stakeholders of a software module, along with their values and interests (15 minutes)
- Describe methods to elicit users' requirements (15 minutes)
- Summary
10. Review
Est 60 minutes
11. Exam 1
Est 60 minutes
12. Domain Modeling
Est 55 minutes
Topics
- Introduction: Object-oriented design and the challenge of understandability (5 minutes)
- Formulate a domain model given requirements (15 minutes)
- Validate domain models with stakeholders (5 minutes)
- Translate a domain model into an object-oriented design using responsibility assignment heuristics (20 minutes)
- Evaluate the representational gap between a domain model and an object-oriented design (10 minutes)
- Summary
13. Introduction to AI Programming Agents
Est 45 minutes
Topics
- Define AI programming agents and enumerate their capabilities (10 minutes)
- A high-level workflow for using AI programming agents (5 minutes)
- Determine when it is appropriate to use an AI programming agent (5 minutes)
- Example: using AI programming agents to prototype a new project (25 minutes)
- SceneItAll - Domain Model Alternatives
14. Program Understanding & Debugging
Est 55 minutes
Topics
- Situate debugging within the software development lifecycle (5 minutes)
- Utilize control flow and data flow analysis to understand a program (10 minutes)
- Utilize diagrams to visualize control and data flow (5 minutes)
- Describe the scientific method of debugging (15 minutes)
- Utilize a debugger to step through a program and inspect state (10 minutes)
- Utilize an AI programming agent to assist with debugging (10 minutes)
15. Test Doubles and Isolation
Est 55 minutes
Topics
- Distinguish between unit, integration, and end-to-end tests (10 minutes)
- Explain the challenge of testing code with external dependencies (5 minutes)
- Differentiate between stubs, fakes, and spies as types of test doubles (10 minutes)
- Apply mocking frameworks to generate test doubles (10 minutes)
- Evaluate the tradeoffs of using test doubles (10 minutes)
- Apply AI coding assistants to generate test plans and test doubles (10 minutes)
16. Designing for Testability
Est 55 minutes
Topics
- Evaluate the testability of a software module and propose changes to improve its testability (20 minutes)
- Explain the Hexagonal Architecture and its relationship to testability (15 minutes)
- Describe general properties of "good" test suites (10 minutes)
- Recognize common anti-patterns that lead to untestable code (10 minutes)
17. Teams and Collaboration
Est 55 minutes
Topics
- Explain key advantages of working in a team and sharing information with your team (10 minutes)
- Describe the stages of team formation and strategies for establishing productive working agreements (15 minutes)
- Describe the HRT pillars of social interaction and strategies for resolving team conflicts (10 minutes)
- Write clear and specific GitHub issues, pull requests, and comments (10 minutes)
- Ask technical questions effectively (10 minutes)
18. From Code Patterns to Architecture Patterns
Est 50 minutes
Topics
- Review the creation patterns you have already implemented (5 minutes)
- Evaluate the tradeoffs in readability, reusability, and changeability between object creation patterns in Java (15 minutes)
- Describe Dependency Injection as a solution to the problems of Singleton (10 minutes)
- Compare Service Locator and Dependency Injection patterns (10 minutes)
- Recognize how code-level patterns manifest at larger architectural scales (10 minutes)
19. Thinking Architecturally
Est 60 minutes
Topics
- Define software architecture and distinguish it from design (8 minutes)
- Identify architectural drivers that shape decisions (10 minutes)
- Determine service/module boundaries and design good interfaces (20 minutes)
- Communicate architecture through diagrams and documentation (12 minutes)
- Compare upfront planning with piecemeal growth (10 minutes)
20. Architectural Qualities
Est 66 minutes
Topics
- Architectural Styles vs. Patterns (3 minutes)
- CookYourBooks: Applying Architecture to a Familiar Domain (5 minutes)
- Hexagonal Architecture Applied to CookYourBooks (15 minutes)
- Read Architectural Diagrams and Recognize Common Patterns
- Architecture and Quality Attributes (10 minutes)
- Compare Technical Partitioning vs. Domain Partitioning (10 minutes)
- Recognize the Big Ball of Mud Anti-pattern (5 minutes)
- Preview: MVC and GUI Patterns (3 minutes)
21. Distributed Architecture, Networks, and Security
Est 55 minutes
22. Serverless Architecture
Est 45 minutes
23. Open Source Frameworks
Est 50 minutes
Topics
- Explain how component reuse simplifies software development and the role of OSS ecosystems in distributing reusable components (15 minutes)
- Describe the role of the Java module system in defining APIs (10 minutes)
- Describe the role and impact of "copyleft" licenses on OSS (10 minutes)
- Describe tradeoffs that should be considered when adopting a library or framework (15 minutes)
24. Usability
Est 50 minutes
Topics
- Define usability and describe the five key aspects of usability (15 minutes)
- Identify stakeholders and their usability concerns (10 minutes)
- Recognize the relationship between usability and safety (5 minutes)
- Introduce approaches to evaluating usability (5 minutes)
- Apply Nielsen's 10 Usability Heuristics to evaluate an interface (15 minutes)
26. Exam 2
Est 60 minutes
Topics
27. User-Centered Design
Est 45 minutes
28. Accessibility and Inclusivity
Est 45 minutes
29. GUIs in Java
Est 55 minutes
30. GUI Patterns and Testing
Est 55 minutes
31. Concurrency I
Est 60 minutes
Topics
- Describe the role of threads as a concurrency mechanism and understand the concept of "interrupts" (15 minutes)
- Recognize the need for synchronization in concurrent programs and understand the concept of "atomicity" (15 minutes)
- Utilize locks and concurrent collections to implement basic thread-safe code (15 minutes)
- Understand the concept of "deadlocks" and "race conditions" (15 minutes)
32. Concurrency II: Asynchronous Programming
Est 45 minutes
33. Event-Driven Architecture
Est 50 minutes
Topics
- Define and describe the event-driven architecture (10 minutes)
- Compare and contrast event-driven architecture and synchronous communication (10 minutes)
- Define "consistency models" and determine the appropriate consistency model for a given software requirement (20 minutes)
- Describe common patterns in event-driven architecture (10 minutes)
34. Performance
Est 55 minutes
35. Safety and Reliability
Est 50 minutes
Topics
- Define common factors that contribute to the "Reliability" and "Availability" of a software system (10 minutes)
- Describe architectural tactics for achieving reliability and availability (10 minutes)
- Define common factors that contribute to "Safety" of a software system (10 minutes)
- Describe architectural tactics for achieving safety (10 minutes)
- Describe patterns for achieving safety (10 minutes)
36. Sustainability
Est 55 minutes
Topics
- Opening reflection (5 minutes)
- Define software sustainability and its importance in software development (10 minutes)
- Identify the four dimensions of software sustainability and explain how they interconnect (15 minutes)
- Evaluate trade-offs between competing sustainability concerns in software design decisions (10 minutes)
- Evaluate the long-term architectural impacts of design decisions beyond immediate technical requirements (15 minutes)
37. Design Case Study: Map-Reduce
Est 50 minutes
Topics
- Describe the purpose of Map-Reduce and the Google File System and its high-level architecture (10 minutes)
- Define the key components of Map-Reduce and their responsibilities (10 minutes)
- Define the key components of the Google File System and their responsibilities (10 minutes)
- Abstract a general pattern for distributed computing from the Map-Reduce example (10 minutes)
- Abstract a general pattern for distributed computing from the Google File System example (10 minutes)
38. The Future of Programming
Est 50 minutes
Topics
- Review major socio-technical trends in software development and speculate on their future impact (20 minutes)
- Debate the ultimate impact of AI on software development (20 minutes)
- Describe approaches for continuous learning and improvement in software development and relevant courses for advanced study (10 minutes)
39. Final Exam Review
Est 0 minutes
Topics