<commit_before># Syllabus - Spring 2017
CS1530: Software Engineering

Note that this syllabus is subject to change, but we will cover all of these topics!  I may change the ordering based on class/project needs or interests, but these are the topics we will cover.

# Required Books

* Freeman/Pryce - Growing Object-Oriented Software, Guided by Tests
* McConnell - Code Complete, Second Edition
* The Mythical Man-Month is available for free online at the Internet Archive: [https://archive.org/details/mythicalmanmonth00fred](https://archive.org/details/mythicalmanmonth00fred)
* Building and Testing With Gradle is available for free online at: http://www2.gradle.com/l/68052/2015-01-13/6dm
* A Friendly Introduction to Git by <NAME> is available for free online at: https://github.com/laboon/friendly_introduction_git/tree/master/presentation

## WEEK 1 (16 and 18 May)

### Class 1 - Introduction: What is Software Engineering?
  * Software Engineering vs Programming vs Computer Science
  * Group creation (EX1)

## WEEK 2 (23 and 25 May)

### Class 1 - Overview: Designing a Software Product
#### __Reading: Brooks, "The Tar Pit" and Brooks, "The Mythical Man-Month" (just the titular essay, not the entire book)__
  * Why is this difficult?
  * Overview of the Software Development Life Cycle
  * What goes into a software product aside from code?

### Class 2 - Agile Development: Theory and Practice
#### __Reading: "Manifesto for Agile Software Development", http://agilemanifesto.org/
  * Terminology - Sprints, scrums, kanban, retrospective, etc.
  * BEGIN SPRINT 1

## WEEK 3 (30 May and 1 June)

### Class 1 - Interacting with Stakeholders and Co-workers
  * EXERCISE: Stakeholder interaction (EX2)

### Class 2 - Intro to Gradle
  * Building
  * Testing
  * Other tasks
  * EXERCISE: Pair Programming with Gradle (EX3)

## WEEK 4 (6 and 8 June)

### Class 1 - Git Exercise
  * Reading: A Friendly Introduction to Git by <NAME> - https://github.com/laboon/friendly_introduction_git/blob/master/presentation/Git_GitHub_A_Friendly_Introduction.pdf
  * Branches and Merging
  * EXERCISE: Git 911 (EX4)

### Class 2 - First Retrospective / Sprint Planning
  * EXERCISE: In-class retrospective and sprint planning (EX5)
  * SPRINT 1 ENDS; SPRINT 2 BEGINS

## WEEK 5 (13 and 15 June)

### Class 1 - Introduction to Test-Driven Development (TDD)
#### __Reading: Freeman/Pryce, Chapters 1 - 3__
  * TFD / TDD
  * The Red-Green-Refactor cycle

### Class 2 - Software Engineering with TDD
#### __Reading: Freeman/Pryce, Chapters 4 - 6__


## WEEK 6 (20 and 22 June)

### Class 1 - An Overview of Other Software Engineering Methodologies
#### __Reading: McConnell, Chapters 1 - 3__
  * Waterfall (BDUF)
  * Prototyping
  * Incremental
  * RAD
  * "Cowboy coding"

### Class 2 - Software Design
#### __Reading: McConnell, Chapters 4 -5 and Freeman/Pryce, Chapter 7__
  * Top-down vs bottom-up
  * Architecture Models (simple, layered, client-server, n-tier, Big Ball of Mud, etc.)
  * SPRINT 2 ENDS; SPRINT 3 BEGINS

## WEEK 7 (27 and 29 June)

### Class 1 - Object-Oriented Analysis and Design
  * Overview of UML
  * SOLID Principles
  * DRY

### Class 2 - Programming with Concurrency
  * Why program with threads?
  * Threads vs Processes
  * Pitfalls
  * Thread-safe programming in Java
  * Common patterns and anti-patterns

## WEEK 8 (4 and 6 July)

### Class 1 - INDEPENDENCE DAY - NO CLASS

### Class 2 - Concurrency Exercise
  * Concurrency exercise (EX6)
  * SPRINT 3 ENDS; SPRINT 4 BEGINS
  
## WEEK 9 (11 and 13 July)

### Class 1 - Quality Assurance and Quality Software
#### __READING: McConnell, Chapters 20 - 23__
  * The QA process and why it is important
  * QA implementation as part of the SDLC
  * Code Reviews
  * Code review exercise (EX7)

### Class 2 - Using Design Patterns
#### ___READING: Freeman/Pryce, Chapters 26 - 27__
  * EXERCISE: Design Patterns (EX8)

## WEEK 10 (17 and 20 July)

### Class 1 - Software Craftsmanship
#### __READING: McConnell, Chapters 33 - 34__
  * Writing good code - maintainable, testable, etc.
  * Intellectual humility and avoiding complexity
  * Conventions and Abstractions
  * Continuous Improvement

### Class 2 - Legacy Code, Large Systems, and Working On Other People's Code
#### __OPTIONAL READING: Working Effectively With Legacy Code by <NAME> (http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf)__
#### __OPTIONAL READING: Testable Java by <NAME> (http://www.objectmentor.com/resources/articles/TestableJava.pdf)__
  * SPRINT 4 ENDS; SPRINT 5 BEGINS

## WEEK 11 (25 and 27 July)

### Class 1 - Integration and the Software Pipeline
  * Classical models of integration
  * Continuous Integration

### Class 2 - Trade-Offs in Software Engineering
  * Cost / Benefit analysis
  * Making decisions based on the Iron Triangle
  * Examples - Apollo Guidance Computer, Adding Metrics to Web Application
  * EXERCISE: Trade-off Discussion (EX9)

## WEEK 12 (1 and 3 August)

### Class 1 - Fiat Voluntas Tua - The Power of the Command Line
  * Command line exercise (EX10)

### Class 2 - Presentations
  * Each group will present their project (~10 min) to the rest of the class
  * SPRINT 5 ENDS
<commit_msg>re-order syllabus<commit_after># Syllabus - Spring 2017
CS1530: Software Engineering

Note that this syllabus is subject to change, but we will cover all of these topics!  I may change the ordering based on class/project needs or interests, but these are the topics we will cover.

# Required Books

* _Freeman/Pryce_ - Growing Object-Oriented Software, Guided by Tests
* _McConnell_ - Code Complete, Second Edition
* _The Mythical Man-Month_ is available for free online at the Internet Archive: [https://archive.org/details/mythicalmanmonth00fred](https://archive.org/details/mythicalmanmonth00fred)
* _Building and Testing With Gradle_ is available for free online at: http://www2.gradle.com/l/68052/2015-01-13/6dm
* _A Friendly Introduction to Git_ by <NAME> is available for free online at: https://github.com/laboon/friendly_introduction_git/tree/master/presentation

## WEEK 1 (16 and 18 May)

### Class 1 - Introduction: What is Software Engineering?
  * Software Engineering vs Programming vs Computer Science
  * Group creation (EX1)

### Class 1 - Overview: Designing a Software Product
#### __Reading: Brooks, "The Tar Pit" and Brooks, "The Mythical Man-Month" (just the titular essay, not the entire book)__
  * Why is this difficult?
  * Overview of the Software Development Life Cycle
  * What goes into a software product aside from code?

## WEEK 2 (23 and 25 May)

### Class 1 - Agile Development: Theory and Practice
#### __Reading: "Manifesto for Agile Software Development", http://agilemanifesto.org/
  * Terminology - Sprints, scrums, kanban, retrospective, etc.

### Class 2 - Interacting with Stakeholders and Co-workers
  * EXERCISE: Stakeholder interaction (EX2)

* BEGIN SPRINT 1

## WEEK 3 (30 May and 1 June)

### Class 1 - Intro to Gradle
  * Building
  * Testing
  * Other tasks
  * EXERCISE: Pair Programming with Gradle (EX3)

### Class 2 - Swing Refresher
  * Event-Driven Programming
  * Frames and Panels
  * Layouts
  * Buttons
  * EXERCISE: Pair Programming a Swing Application (EX4)

## WEEK 4 (6 and 8 June)

### Class 1 - Git Exercise
  * Reading: A Friendly Introduction to Git by <NAME> - https://github.com/laboon/friendly_introduction_git/blob/master/presentation/Git_GitHub_A_Friendly_Introduction.pdf
  * Branches and Merging
  * EXERCISE: Git 911 (EX5)

### Class 2 - First Retrospective / Sprint Planning
  * EXERCISE: In-class retrospective and sprint planning (EX6)
  * SPRINT 1 ENDS; SPRINT 2 BEGINS

## WEEK 5 (13 and 15 June)

### Class 1 - Introduction to Test-Driven Development (TDD)
#### __Reading: Freeman/Pryce, Chapters 1 - 3__
  * TFD / TDD
  * The Red-Green-Refactor cycle

### Class 2 - Quality Assurance and Quality Software
#### __READING: McConnell, Chapters 20 - 23__
  * The QA process and why it is important
  * QA implementation as part of the SDLC
  * Code Reviews
  * Code review exercise (EX7)

## WEEK 6 (20 and 22 June)

### Class 1 - Software Engineering with TDD
#### __Reading: Freeman/Pryce, Chapters 4 - 6__

### Class 2 - Integration and the Software Pipeline
  * Classical models of integration
  * Continuous Integration
  * SPRINT 2 ENDS; SPRINT 3 BEGINS

## WEEK 7 (27 and 29 June)

### Class 1 - Programming with Concurrency
  * Why program with threads?
  * Threads vs Processes
  * Pitfalls
  * Thread-safe programming in Java
  * Common patterns and anti-patterns

### Class 2 - Concurrency Exercise
  * Concurrency exercise (EX8)

## WEEK 8 (4 and 6 July)

### Class 1 - INDEPENDENCE DAY - NO CLASS

### Class 2 - Software Design
#### __Reading: McConnell, Chapters 4 -5 and Freeman/Pryce, Chapter 7__
  * Top-down vs bottom-up
  * Architecture Models (simple, layered, client-server, n-tier, Big Ball of Mud, etc.)
  * SPRINT 3 ENDS; SPRINT 4 BEGINS
  
## WEEK 9 (11 and 13 July)

### Class 1 - Object-Oriented Analysis and Design
  * Overview of UML
  * SOLID Principles
  * DRY

### Class 2 - Using Design Patterns
#### ___READING: Freeman/Pryce, Chapters 26 - 27__

## WEEK 10 (17 and 20 July)

### Class 1 - Fiat Voluntas Tua - The Power of the Command Line
  * Command line exercise (EX9)

### Class 2 - Legacy Code, Large Systems, and Working On Other People's Code
#### __OPTIONAL READING: Working Effectively With Legacy Code by <NAME> (http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf)__
#### __OPTIONAL READING: Testable Java by <NAME> (http://www.objectmentor.com/resources/articles/TestableJava.pdf)__
  * SPRINT 4 ENDS; SPRINT 5 BEGINS

## WEEK 11 (25 and 27 July)

### Class 1 - Trade-Offs in Software Engineering
  * Cost / Benefit analysis
  * Making decisions based on the Iron Triangle
  * Examples - Apollo Guidance Computer, Adding Metrics to Web Application
  * EXERCISE: Trade-off Discussion (EX10)

### Class 2 - Software Craftsmanship
#### __READING: McConnell, Chapters 33 - 34__
  * Writing good code - maintainable, testable, etc.
  * Intellectual humility and avoiding complexity
  * Conventions and Abstractions
  * Continuous Improvement

## WEEK 12 (1 and 3 August)

### Class 1 - An Overview of Other Software Engineering Methodologies
#### __Reading: McConnell, Chapters 1 - 3__
  * Waterfall (BDUF)
  * Prototyping
  * Incremental
  * RAD
  * "Cowboy coding"

### Class 2 - Presentations
  * Each group will present their project (~10 min) to the rest of the class
  * SPRINT 5 ENDS

{'fraction_non_alphanumeric': 0.09229602956505259, 'fraction_numerical': 0.02909125367194163, 'mean_word_length': 3.877079482439926, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 8, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3247584', 'n_tokens_mistral': 3594, 'n_tokens_neox': 3148, 'n_words': 1287}