TIC2002 (2019)
  • Full Timeline
  • Week 1 [Aug 12]
  • Week 2 [Aug 19]
  • Week 3 [Aug 26]
  • Week 4 [Sep 2]
  • Week 5 [Sep 9]
  • Week 6 [Sep 16]
  • Week 7 [Sep 30]
  • Week 8 [Oct 7]
  • Week 9 [Oct 14]
  • Week 10 [Oct 21]
  • Week 11 [Oct 28]
  • Week 12 [Nov 4]
  • Week 13 [Nov 11]
  • Textbook
  • Admin Info
  • Report Bugs
  • Forum
  • Announcements
  • File Submissions
  • repl.it link
  • Java Coding Standard
  • Duke repo
  • Summary of the Module Timeline

    Week 1 - Aug 12

    Topics Summary:

    • [W1.1] Software Engineering: Intro

    • [W1.2] Java: Intro

    • [W1.3] Java: HelloWorld

    • [W1.4] Java: Data Types

    • [W1.5] Java: Control Flow

    • [W1.1] Software Engineering: Intro
    • [W1.1a] Software Engineering → Introduction → Pros and Cons

    • [W1.2] Java: Intro
    • [W1.2a] C++ to Java → About this Chapter

    • [W1.2b] C++ to Java → The Java World → What is Java?

    • [W1.2c] C++ to Java → The Java World → How Java Works

    • [W1.2d] C++ to Java → The Java World → Java Editions

    • [W1.3] Java: HelloWorld
    • [W1.3a] C++ to Java → Getting Started → Installation

    • [W1.3b] C++ to Java → Getting Started → HelloWorld

    • [W1.3c] C++ to Java → Getting Started → Compliling a Program

    • [W1.3d] C++ to Java → Getting Started → Running a Program

    • [W1.4] Java: Data Types
    • [W1.4a] C++ to Java → Data Types → Primitive Data Types

    • [W1.4b] C++ to Java → Data Types → Variables

    • [W1.4c] C++ to Java → Data Types → Operators

    • [W1.4d] C++ to Java → Data Types → Arrays

    • [W1.5] Java: Control Flow
    • [W1.5a] C++ to Java → Control Flow → Branching

    • [W1.5b] C++ to Java → Control Flow → Methods

    • [W1.5c] C++ to Java → Control Flow → Loops

    Tasks Summary:

    1. Install Java before the lecture
    2. Create a GitHub account
    3. Submit the pre-module survey by Saturday 2359
    4. Attend the lecture
    5. Submit weekly exercises

    Week 2 - Aug 19

    Topics Summary:

    • [W2.2] Java: Objects

    • [W2.3] Java: Classes

    • [W2.4] Git: Saving History

    • [W2.5] Git: Traversing History

    • [W2.1a] Paradigms → OOP → Introduction → What

    • [W2.1b] Paradigms → OOP → Objects → What

    • [W2.1c] Paradigms → OOP → Objects → Objects as Abstractions

    • [W2.1d] Paradigms → OOP → Objects → Encapsulation of Objects

    • [W2.1e] Paradigms → OOP → Classes → What

    • [W2.1f] Paradigms → OOP → Classes → Class-Level Members

    • [W2.2] Java: Objects
    • [W2.2a] C++ to Java → Objects → Using Java Objects

    • [W2.2b] C++ to Java → Objects → Instance Members

    • [W2.2c] C++ to Java → Objects → Passing Objects Around

    • [W2.2d] C++ to Java → Objects → Garbage Collection

    • [W2.3] Java: Classes
    • [W2.3a] C++ to Java → Classes → Defining Classes

    • [W2.3b] C++ to Java → Classes → Getters and setters

    • [W2.3c] C++ to Java → Classes → Class-Level Members

    • [W2.4] Git: Saving History
    • [W2.4a] Project Management → Revision Control → What

    • [W2.4b] Project Management → Revision Control → Repositories

    • [W2.4c] Tools → Git and GitHub → Init

    • [W2.4d] Project Management → Revision Control → Saving History

    • [W2.4e] Tools → Git and GitHub → Commit

    • [W2.4f] Tools → Git and GitHub → Ignore

    • [W2.5] Git: Traversing History
    • [W2.5a] Project Management → Revision Control → Using History

    • [W2.5b] Tools → Git and GitHub → Checkout

    • [W2.5c] Tools → Git and GitHub → Tag

    • [W2.5d] Tools → Git and GitHub → Stash

    Tasks Summary:

    1. Install SourceTree before the lecture
    2. Submit weekly exercises

    Week 3 - Aug 26

    Topics Summary:

    • [W3.1] Java: Useful Classes

    • [W3.2] Git: Remote Repos

    • [W3.3] IDE: Basic Features

    • [W3.1] Java: Useful Classes
    • [W3.1a] C++ to Java → Some Useful Classes → Java API

    • [W3.1b] C++ to Java → Some Useful Classes → The String Class

    • [W3.1c] C++ to Java → Some Useful Classes → Wrapper Classes for Primitive Types

    • [W3.1d] C++ to Java → Some Useful Classes → The Arrays class

    • [W3.1e] C++ to Java → Some Useful Classes → The Scanner class

    • [W3.2] Git: Remote Repos
    • [W3.2a] Project Management → Revision Control → Remote Repositories

    • [W3.2b] Tools → Git and GitHub → Clone

    • [W3.2c] Tools → Git and GitHub → Pull

    • [W3.2d] Tools → Git and GitHub → Push

    • [W3.3] IDE: Basic Features
    • [W3.3a] Implementation → IDEs → What

    • [W3.3b] Tools → Intellij IDEA → Project Setup

    • [W3.3c] Tools → Intellij IDEA → Code Navigation

    Tasks Summary:

    1. Install Intellij IDEA before the lecture
    2. Setup Duke project on your computer during/after the lecture
    3. Submit weekly exercises
    4. Implement project increments Level-1, Level-2

    Week 4 - Sep 2

    Topics Summary:

    • [W4.1] OOP: Inheritance

    • [W4.2] OOP: Polymorphism

    • [W4.3] Testing text UIs

    • [W4.4] IDE: Intermediate

    • [W4.1] OOP: Inheritance
    • [W4.1a] Paradigms → OOP → Inheritance → What

    • [W4.1b] Paradigms → OOP → Inheritance → Overloading

    • [W4.1c] Paradigms → OOP → Inheritance → Overriding

    • [W4.1d] C++ to Java → Inheritance → Inheritance (Basics)

    • [W4.1e] C++ to Java → Inheritance → The Object Class

    • [W4.2] OOP: Polymorphism
    • [W4.2a] Paradigms → OOP → Polymorphism → What

    • [W4.2b] Paradigms → OOP → Inheritance → Substitutability

    • [W4.2c] Paradigms → OOP → Inheritance → Dynamic and Static Binding

    • [W4.2d] Paradigms → OOP → Polymorphism → How

    • [W4.2e] C++ to Java → Inheritance → Polymorphism

    • [W4.3] Testing text UIs
    • [W4.3a] Quality Assurance → Testing → Introduction → What

    • [W4.3b] Quality Assurance → Testing → Regression Testing → What

    • [W4.3c] Quality Assurance → Testing → Test Automation → What

    • [W4.3d] Quality Assurance → Testing → Test Automation → Automated Testing of CLI Apps

    • [W4.4] IDE: Intermediate
    • [W4.4a] Implementation → IDEs → Debugging → What

    • [W4.4b] Tools → Intellij IDEA → Debugging: Basic

    • [W4.4c] Tools → Intellij IDEA → Productivity Shortcuts

    Tasks Summary:

    1. Submit weekly exercises
    2. Create a Pull Request during/after the lecture
    3. Implement project increments Level-3, A-TextUiTesting optional

    Week 5 - Sep 9

    Topics Summary:

    • [W5.1] Java: Casting

    • [W5.2] OOP: Abstract Classes

    • [W5.3] OOP: Interfaces

    • [W5.4] Error Handling: Exceptions

    • [W5.5] Refactoring

    • [W5.1] Java: Casting
    • [W5.1a] C++ to Java → Miscellaneous Topics → Casting
    • [W5.2] OOP: Abstract Classes
    • [W5.2a] Paradigms → OOP → Inheritance → Abstract Classes and Methods

    • [W5.2b] C++ to Java → Inheritance → Abstract Classes and Methods

    • [W5.3] OOP: Interfaces
    • [W5.3a] Paradigms → OOP → Inheritance → Interfaces

    • [W5.3b] C++ to Java → Inheritance → Interfaces

    • [W5.4] Error Handling: Exceptions
    • [W5.4a] Implementation → Error Handling → Introduction → What

    • [W5.4b] Implementation → Error Handling → Exceptions → What

    • [W5.4c] Implementation → Error Handling → Exceptions → How

    • [W5.4d] C++ to Java → Exceptions → What are Exceptions?

    • [W5.4e] C++ to Java → Exceptions → How to Use Exceptions

    • [W5.4f] Implementation → Error Handling → Exceptions → When

    • [W5.5] Refactoring
    • [W5.5a] Implementation → Refactoring → What

    • [W5.5b] Tools → Intellij IDEA → Refactoring

    • [W5.5c] Implementation → Refactoring → How

    • [W5.5d] Implementation → Refactoring → When

    Tasks Summary:

    1. Submit weekly exercises
    2. Implement increment Level-4

    Week 6 - Sep 16

    Topics Summary:

    • [W6.1] Java: Generics

    • [W6.2] Java: Collections

    • [W6.3] Modeling: Intro

    • [W6.4] Class/Object Diagrams - Basics

    • [W6.1] Java: Generics
    • [W6.1a] C++ to Java → Generics → What are Generics?

    • [W6.1b] C++ to Java → Generics → How to use Generics

    • [W6.2] Java: Collections
    • [W6.2a] C++ to Java → Collections → The Collections Framework

    • [W6.2b] C++ to Java → Collections → The ArrayList Class

    • [W6.2c] C++ to Java → Collections → The HashMap Class

    • [W6.3] Modeling: Intro
    • [W6.3a] Design → Modelling → Introduction → What

    • [W6.3b] Design → Modelling → Introduction → How

    • [W6.4] Class/Object Diagrams - Basics
    • [W6.4a] Design → Modelling → Modelling Structure → OO Structures

    • [W6.4b] Design → Modelling → Modelling Structure → Class Diagrams (Basics)

    • [W6.4c] Design → Modelling → Modelling Structure → Object Diagrams

    • [W6.4d] Tools → UML → Object vs Class Diagrams

    Tasks Summary:

    1. Submit weekly exercises
    2. Implement increment Level-5

    Week 7 - Sep 30

    Topics Summary:

    • [W7.1] Java: Constants

    • [W7.2] Java: Enumerations

    • [W7.3] Java: File Access

    • [W7.4] Class/Object Diagrams - Intermediate

    • [W7.5] Design Fundamentals

    • [W7.1] Java: Constants
    • [W7.1a] C++ to Java → Miscellaneous Topics → Constants
    • [W7.2] Java: Enumerations
    • [W7.2a] Paradigms → OOP → Classes → Enumerations

    • [W7.2b] C++ to Java → Miscellaneous Topics → Enumerations

    • [W7.3] Java: File Access
    • [W7.3a] C++ to Java → Miscellaneous Topics → File Access

    • [W7.4] Class/Object Diagrams - Intermediate
    • [W7.4a] Tools → UML → Notes

    • [W7.4b] Tools → UML → Constraints

    • [W7.4c] Tools → UML → Class Diagrams → Associations as Attributes

    • [W7.4d] Design → Modelling → Modelling Structure → Class Diagrams - Intermediate

    • [W7.5] Design Fundamentals

       Abstraction

    • [W7.5a] Design → Introduction → What

    • [W7.5b] Design → Design Fundamentals → Abstraction → What

       Coupling

    • [W7.5c] Design → Design Fundamentals → Coupling → What

    • [W7.5d] Design → Design Fundamentals → Coupling → How

    • [W7.5e] Design → Design Fundamentals → Coupling → Types of Coupling

       Cohesion

    • [W7.5f] Design → Design Fundamentals → Cohesion → What

    • [W7.5g] Design → Design Fundamentals → Cohesion → How

    Tasks Summary:

    1. Implement increments Level-6, A-Enums if-applicable

    Week 8 - Oct 7

    Topics Summary:

    • [W8.1] Design Principles

    • [W8.2] Java: Packages

    • [W8.3] Java: Access Modifiers

    • [W8.4] Java: JavaDocs

    • [W8.5] Git: Branching

    • [W8.6] Project Management: Basics

    • [W8.1] Design Principles
    • [W8.1a] Principles → Separation of Concerns Principle

    • [W8.1b] Principles → Single Responsibility Principle

    • [W8.1c] Principles → Liskov Substitution Principle

    • [W8.1d] Principles → Open-Closed Principle

    • [W8.1e] Principles → Law of Demeter

    • [W8.2] Java: Packages
    • [W8.2a] C++ to Java → Miscellaneous Topics → Packages
    • [W8.3] Java: Access Modifiers
    • [W8.3a] C++ to Java → Miscellaneous Topics → Access Modifiers
    • [W8.4] Java: JavaDocs
    • [W8.4a] Implementation → Documentation → Tools → JavaDoc → What

    • [W8.4b] Implementation → Documentation → Tools → JavaDoc → How

    • [W8.5] Git: Branching
    • [W8.5a] Project Management → Revision Control → Branching

    • [W8.5b] Tools → Git and GitHub → Branch

    • [W8.5c] Tools → Git and GitHub → Merge Conflicts

    • [W8.6] Project Management: Basics
    • [W8.6a] Project Management → Project Planning → Milestones

    • [W8.6b] Project Management → Project Planning → Buffers

    • [W8.6c] Project Management → Project Planning → Issue Trackers

    • [W8.6d] Project Management → Project Planning → Work Breakdown Structure

    • [W8.6e] Project Management → Project Planning → GANTT Charts

    • [W8.6f] Project Management → Project Planning → PERT Charts

    Tasks Summary:

    1. Implement increments Level-7, A-MoreOOP, A-Packages

    Week 9 - Oct 14

    Topics Summary:

    • [W9.1] Requirements: Intro

    • [W9.2] Requirements: Gathering

    • [W9.3] Requirements: Specifying

    • [W9.4] Testing: JUnit

    • [W9.1] Requirements: Intro
    • [W9.1a] Requirements → Requirements → Introduction

    • [W9.1b] Requirements → Requirements → Non-Functional Requirements

    • [W9.1c] Requirements → Requirements → Prioritizing Requirements

    • [W9.1d] Requirements → Requirements → Quality of Requirements

    • [W9.2] Requirements: Gathering
    • [W9.2a] Requirements → Gathering Requirements → Brainstorming

    • [W9.2b] Requirements → Gathering Requirements → Product Surveys

    • [W9.2c] Requirements → Gathering Requirements → Observation

    • [W9.2d] Requirements → Gathering Requirements → User Surveys

    • [W9.2e] Requirements → Gathering Requirements → Interviews

    • [W9.2f] Requirements → Gathering Requirements → Focus Groups

    • [W9.2g] Requirements → Gathering Requirements → Prototyping

    • [W9.3] Requirements: Specifying

       Prose

    • [W9.3a] Requirements → Specifying Requirements → Prose → What

       Feature Lists

    • [W9.3b] Requirements → Specifying Requirements → Feature Lists → What

       User Stories

    • [W9.3c] Requirements → Specifying Requirements → User Stories → Introduction

    • [W9.3d] Requirements → Specifying Requirements → User Stories → Details

    • [W9.3e] Requirements → Specifying Requirements → User Stories → Usage

       Use Cases

    • [W9.3f] Requirements → Specifying Requirements → Use Cases → Introduction

       Glossary

    • [W9.3g] Requirements → Specifying Requirements → Glossary → What

       Supplementary Requirements

    • [W9.3h] Requirements → Specifying Requirements → Supplementary Requirements → What

    • [W9.4] Testing: JUnit
    • [W9.4a] Quality Assurance → Testing → Developer Testing → What

    • [W9.4b] Quality Assurance → Testing → Developer Testing → Why

    • [W9.4c] Quality Assurance → Testing → Test Automation → Test Automation Using Test Drivers

    • [W9.4d] Quality Assurance → Testing → Test Automation → Test Automation Tools

    • [W9.4e] Tools → JUnit → JUnit: Basic

    • [W9.4f] Tools → JUnit → JUnit: Intermediate

    Tasks Summary:

    1. Implement increments Level-8, A-JavaDoc, A-Gradle optional, A-JUnit

    Week 10 - Oct 21

    Topics Summary:

    • [W10.1] Sequence Diagrams: Basics

    • [W10.2] Code Quality: Guidelines

    • [W10.3] Error Handling

    • [W10.1] Sequence Diagrams: Basics
    • [W10.1a] Design → Modelling → Modelling Behaviors Sequence Diagrams - Basic

    • [W10.2] Code Quality: Guidelines

       Intro

    • [W10.2a] Implementation → Code Quality → Introduction → What

       Coding Standards

    • [W10.2b] Implementation → Code Quality → Style → Introduction

    • [W10.2c] Implementation → Code Quality → Style → What

    • [W10.2d] Implementation → Code Quality → Style → Intermediate

       Readability

    • [W10.2e] Implementation → Code Quality → Readability → Introduction

    • [W10.2f] Implementation → Code Quality → Readability → Basic → Avoid Long Methods

    • [W10.2g] Implementation → Code Quality → Readability → Basic → Avoid Deep Nesting

    • [W10.2h] Implementation → Code Quality → Readability → Basic → Avoid Complicated Expressions

    • [W10.2i] Implementation → Code Quality → Readability → Basic → Avoid Magic Numbers

    • [W10.2j] Implementation → Code Quality → Readability → Basic → Make the Code Obvious

    • [W10.2k] Implementation → Code Quality → Readability → Intermediate → Structure Code Logically

    • [W10.2l] Implementation → Code Quality → Readability → Intermediate → Do Not 'Trip Up' Reader

    • [W10.2m] Implementation → Code Quality → Readability → Intermediate → Practice KISSing

    • [W10.2n] Implementation → Code Quality → Readability → Intermediate → Avoid Premature Optimizations

    • [W10.2o] Implementation → Code Quality → Readability → Intermediate → SLAP Hard

    • [W10.2p] Implementation → Code Quality → Readability → Advanced → Make the Happy Path Prominent

       Naming

    • [W10.2q] Implementation → Code Quality → Naming → Introduction

    • [W10.2r] Implementation → Code Quality → Naming → Basic → Use Nouns for Things and Verbs for Actions

    • [W10.2s] Implementation → Code Quality → Naming → Basic → Use Standard Words

    • [W10.2t] Implementation → Code Quality → Naming → Intermediate → Use Name to Explain

    • [W10.2u] Implementation → Code Quality → Naming → Intermediate → Not Too Long, Not Too Short

    • [W10.2v] Implementation → Code Quality → Naming → Intermediate → Avoid Misleading Names

       Code Comments

    • [W10.2w] Implementation → Code Quality → Comments → Introduction

    • [W10.2x] Implementation → Code Quality → Comments → Basic → Do Not Repeat the Obvious

    • [W10.2y] Implementation → Code Quality → Comments → Basic → Write to the Reader

    • [W10.2z] Implementation → Code Quality → Comments → Intermediate → Explain WHAT and WHY, not HOW

       Logging

    • [W10.3a] Implementation → Error Handling → Logging → What

    • [W10.3b] Implementation → Error Handling → Logging → How

       Assertions

    • [W10.3c] Implementation → Error Handling → Assertions → What

    • [W10.3d] Implementation → Error Handling → Assertions → How

    • [W10.3e] Implementation → Error Handling → Assertions → When

    Tasks Summary:

    1. Add individual feature 1
    2. Implement increments Level-9, A-CodingStandard, A-CodeQuality, A-Libraries optional

    Week 11 - Oct 28

    Topics Summary:

    • [W11.1] Sequence Diagrams - Intermediate

    • [W11.1] Sequence Diagrams - Intermediate
    • [W11.1a] Design → Modelling → Modelling Behaviors Sequence Diagrams - Intermediate

    • [W11.2a] Tools → Java → Streams: Basic
    • [W11.3a] Tools → Java → JavaFX
    • [W11.4] Java: JAR Files
    • [W11.4a] C++ to Java → Miscellaneous Topics → Using JAR Files

       Unit Testing

    • [W11.5a] Quality Assurance → Testing → Unit Testing → What

    • [W11.5b] Quality Assurance → Testing → Unit Testing → Stubs

       Integration Testing

    • [W11.5c] Quality Assurance → Testing → Integration Testing → What

    • [W11.5d] Quality Assurance → Testing → Integration Testing → How

       System Testing

    • [W11.5e] Quality Assurance → Testing → System Testing → What

       Acceptance Testing

    • [W11.5f] Quality Assurance → Testing → Acceptance Testing → What

    • [W11.5g] Quality Assurance → Testing → Acceptance Testing → Acceptance vs System Testing

       Alpha/Beta Testing

    • [W11.5h] Quality Assurance → Testing → Alpha/Beta Testing → What

    Tasks Summary:

    1. Improve the individual feature (or add another)
    2. Implement increments Level-10optional, A-Assertions, A-Jar

    Week 12 - Nov 4

    Topics Summary:

    • [W12.1] Other UML Models

    • [W12.1] Other UML Models
    • [W12.1a] Design → Modelling → Modelling Structure → Object Oriented Domain Models

    • [W12.1b] Design → Modelling → Modelling Structure → Deployment Diagrams

    • [W12.1c] Design → Modelling → Modelling Structure → Component Diagrams

    • [W12.1d] Design → Modelling → Modelling Structure → Package Diagrams

    • [W12.1e] Design → Modelling → Modelling Structure → Composite Structure Diagrams

    • [W12.1f] Design → Modelling → Modelling Behaviors Activity Diagrams - Basic

    • [W12.1g] Design → Modelling → Modelling Behaviors Timing Diagrams

    • [W12.1h] Design → Modelling → Modelling Behaviors Interaction Overview Diagrams

    • [W12.1i] Design → Modelling → Modelling Behaviors Communication Diagrams

    • [W12.1j] Design → Modelling → Modelling Behaviors State Machine Diagrams

       Intro

    • [W12.2a] Implementation → Reuse → Introduction → What

    • [W12.2b] Implementation → Reuse → Introduction → When

       APIs

    • [W12.2c] Implementation → Reuse → APIs → What

       Libraries

    • [W12.2d] Implementation → Reuse → Libraries → What

    • [W12.2e] Implementation → Reuse → Libraries → How

       Frameworks

    • [W12.2f] Implementation → Reuse → Frameworks → What

    • [W12.2g] Implementation → Reuse → Frameworks → Frameworks vs Libraries

       Platforms

    • [W12.2h] Implementation → Reuse → Platforms → What
    • [W12.3] Quality Assurance
    • [W12.3a] Quality Assurance → Quality Assurance → Introduction → What

    • [W12.3b] Quality Assurance → Quality Assurance → Introduction → Validation vs Verification

    • [W12.3c] Quality Assurance → Quality Assurance → Code Reviews → What

    • [W12.3d] Quality Assurance → Quality Assurance → Static Analysis → What

    • [W12.3e] Quality Assurance → Quality Assurance → Formal Verification → What

    Tasks Summary:

    1. Finish up the project coding
    2. Prepare the final submission

    Week 13 - Nov 11

    Topics Summary:

    Tasks Summary:

    1. Submit the project Monday 2359
    2. Attend the exam review during lecture