Milestone 2: Algorithmic Thinking & Software Design
From Methods to Professional Practices
1 Milestone 2: From Methods to Professional Practices
You will extend the Task Manager application by implementing core logic, refactoring for performance, and learning the essential arts of exception handling, debugging, and testing.
1.1 Overview & Learning Journey
Welcome to your second milestone! Building on the toolchain you assembled in Milestone 1, you will now deepen your Java knowledge by exploring core programming concepts. This milestone shifts focus to implementing logic, using flow control statements, working with advanced data structures, and showing how code evolves through refactoring.
Continuing in your role as a programmer, you will implement and then improve the Task Manager application. You will translate UML designs into code, and then refactor that code for better performance and robustness. This involves using ArrayList and HashMap and understanding the trade-offs between them, using control flow statements like switch for complex logic, and using an Iterator for safe data manipulation. This process of iterative improvement is central to professional software development.
1.2 What You’ll Accomplish
By the end of this milestone, you will have successfully:
- Implemented complex control flow statements (
if,for,switch) to manage application logic. - Utilized and compared Java’s built-in data structures, using
ArrayListfor storage andHashMapfor efficient lookups. - Refactored existing code for significant performance improvements.
- Safely modified collections during iteration using an
Iterator. - Translated UML Class Diagrams into an executable Java class structure.
- Handled application errors gracefully by throwing and catching both built-in and custom exceptions.
- Traced program execution and state using the live debugger in VS Code to pinpoint logic errors.
1.3 Course Learning Objectives Alignment
The tasks in this milestone directly support the following Program and Course Learning Outcomes.
| Module Task | Program Learning Outcomes (PLOs) | Course Learning Outcomes (CLOs) |
|---|---|---|
| Control Flow & Data Structures | Apply concepts (3), Implement solutions (5) | Develop algorithmic solutions (1), Create and use data types (3) |
| Refactoring & Optimization | Apply concepts (3), Implement solutions (5) | Develop algorithmic solutions (1) |
| API Stubbing & Class Design | Communicate (1), Apply concepts (3), Use system software (4), Implement solutions (5) | Develop algorithmic solutions (1), Develop modular solutions (4), Design applications that use file I/O and/or database connectivity (7) |
| Exception Handling | Apply concepts (3), Implement solutions (5), Maintain environment (6) | Design applications that throw and catch exceptions (6) |
| Debugging | Use current tools (2), Apply concepts (3), Use system software (4), Implement solutions (5), Maintain environment (6) | Compile, debug, and test (2) |
1.4 Learning Objectives & Professional Alignment
The exercises in this module are designed to build specific, marketable skills that align directly with the Knowledge, Skills, and Abilities (KSAs) of a Computer Programmer (O*NET SOC Code 15-1251.00).
| Module Task | O*NET KSAs | Technologies Used |
|---|---|---|
| Control Flow & Data Structures | Knowledge: Mathematics, Computers and Electronics Skills: Programming, Critical Thinking Abilities: Deductive Reasoning |
Object or component oriented development software: Java (switch, Iterator) |
| Refactoring & Optimization | Knowledge: Computers and Electronics Skills: Programming, Systems Analysis, Critical Thinking Abilities: Speed of Closure, Fluency of Ideas |
Object or component oriented development software: Java (HashMap) |
| API Stubbing & Class Design | Skills: Programming, Systems Analysis, Reading Comprehension Abilities: Information Ordering, Written Comprehension |
Object or component oriented development software: Java Requirements analysis and system architecture software: Unified Modeling Language (UML) |
| Exception Handling | Skills: Complex Problem Solving, Critical Thinking, Programming Abilities: Problem Sensitivity |
Object or component oriented development software: Java |
| Debugging | Skills: Complex Problem Solving, Critical Thinking, Programming, Quality Control Analysis Abilities: Problem Sensitivity, Deductive Reasoning |
Development environment software: VS Code Program testing software: Symbolic debugger software |
1.5 Tools & Development Environment
1.5.1 Development Toolchain
This milestone focuses on core Java concepts, debugging, and testing. You will gain hands-on experience with the following:
Key concepts to master:
- Control Flow: Using
if/else,forloops, andswitchstatements to direct the flow of execution. - Data Structures: Working with
ArrayListfor ordered storage andHashMapfor fast key-value lookups. - Iteration: Using
for-eachloops for simple iteration and anIteratorfor safe removal during iteration. - User-Defined Types: Creating your own classes and enums to model application data.
- Exception Handling: Using
try-catch-finallyblocks and creating custom exception classes.
Key features to master:
- Breakpoints: Pausing execution at specific lines of code.
- Stepping Controls: Using “Step Over,” “Step Into,” and “Step Out” to control execution flow.
- Call Stack: Inspecting the sequence of method calls that led to the current point.
- Variables Panel: Watching variable values change as you step through code.