Essential Skills for the Agile Developer
Summary
What are the Essential Skills that every developer should have? As an industry, we have not established a basic set of principles, practices, and disciplines that empower developers to work in an agile environment. This course will examine what we at Net Objectives believe to be critical engineering skills, and teach them both through demonstration and student exercises.
Description
This course comes complete with lectures, reading assignments, exercises, periods of collaboration, and Q&A.All participants are expected to:
- Read learning assignments requested. Readings will be given prior to each class, usually at the end of the preceding session. These will not exceed one hour in duration.
- Attend live online lectures when possible, listen to the recordings of them when not. Each session will be from 60-90 minutes.
- Do exercises assigned between online lectures.
Questions
Questions by participants will be handled (asked and answered) in a discussion group provided for the class in our Learning Management Site (LMS).Registration
The first step will be to enroll via a registration form created for the course. You will receive an email with further instructions before the course begins.Course Level
IntermediateCourse Outline
Session 1:
Introduction to the Course
- The LMS and Course Mechanics
- Outline of Upcoming Sessions
- Introduction to "Essential Skills"
- Essential Code Qualities
- An Exercise
Session 2:
Principles and Practices
- Cohesion Exercise Debrief
- Definitions: "Priniciple" vs. "Practice"
- The notion of a "Discipline"
- Principles:
- Open-Closed
- Dependency Inversion
- Liskov Substitution
- Practices
- Programming by Intention
- Encapsulation of Construction
- An Exercise
Session 3:
Encapsulation and Patterns
- Exercise Debrief
- The Gang of Four
- When and How to Use Inheritance
- What Patterns are
- ...And are not
- Patterns and Forces
- Encapsulation
- Strategy, Chain of Responsibility, Adapter
- Pattern Exercise
Session 4:
Sustainable Test-Driven Development
- Pattern Exercise Debrief
- Unit Testing Basics
- Re-Defining TDD
- Defining a "Good" Unit Test
- Testing Qualities and Code Qualities
- TDD as Test-Driven Design
- Breaking Dependencies in Testing
- The Role of Patterns in TDD
- An Exercise
Session 5:
Refactoring to the Open-Closed
- Sustainable Testing Debrief
- The Open-Closed Principle: A Review
- Different forms of it
- What can be open-closed?
- Refactoring
- The Traditional View
- Examples: Extract Method, Move Method
- The Agile View
- Refactoring to the Open-Closed
- An Exercise
Session 6:
Bringing it all Together: Emergent Design
- Refactoring Exercise Debrief
- The natural flow of software development
- The traditional view
- A more realistic view
- Professionalism
- Disciplines: Testing, Refactoring, and Patterns
- The Magic Card
- Emergent Design (an example)
- Resources for further investigation
Recordings
Sessions will be recorded so they can be re-played (without interaction or moderation) at a later time. This will allow anyone who missed the live session a way to make it up. These will likely be available a day after the original broadcast.