Date
|
Topic
|
Read / Watch / Exercise
|
Assignment / Announcement
|
Jan 9
|
|
|
|
Jan 12
|
Introduction
Introduction
|
Student's Guide to Grand Failure (anti-patterns)
Teaching Future Software Developers by Vaclav Rajlich
|
|
Jan 16
|
Git from bottom up
Git building blocks:
- Blob (SHA1, content based hashing, why not using the regular file concept)
- Tree (Structure, How different is it from a file system snapshot)
- Commit
|
Git from bottom up
|
|
Jan 19
|
Git from bottom up
Git core concepts:
- Commit history
- Branch
- HEAD
- Working tree
- Index (staging)
- Repository (local, remote)
Git core concepts in action:
- Initializing a repository
- Examining object signatures
- Examining heads, the HEAD, the HEAD logs
- Examining a blob, tree, commit
- Examining the working tree and the staging
- Examining the ref log
- Repository (local, remote)
- Ignoring files
Git core commands: add, commit, reset, checkout, log, diff, stash, merge, rebase
|
try.github.io
Git Cheatsheet
|
|
Jan 23
|
Pragmatic ABCs of a Software Engineer
- Setting up Software Development Infrastructure
- Setting up a code repository: GitHub
- Working with a remote repository (pull, fetch, push, resolving merge conflicts, README.md)
- Unit testing: JUnit
- Dependency management and building: make, ant, maven
- Continous Integration: TravisCI
- Automated static analysis: code climate
- Automated deployment: Heroku
- Contributing to open source projects
- Issue trackers
- Different styles of contributing
- Forking
- Pull Request (Merge request)
- Code reviews:
- Following coding styles
- The lint tools (pylint, jslint etc.)
- Convincing the reviewers
- Understading the diff output
- More integrated review tools: Gerrit
- Case Study: OpenJDK
- Case Study: GitLabs
- Making small modifications in a large software code base
- finding things in the code
- finding people to blame
- trial and error learning
- understanding the control flow
- analyzing the impact
- getting ready for a code review
|
Code Style Guide for Contributors to Android
Examining openjdk project
Example merge request
Syncing a fork
Successful git branching model
Distributed workflows
Git reset demystified
code review
List of tools for code review
|
New Assignment Announcement
Due: January 30
Description: Setup your individual GitHub repository with continuous integration and automated static analysis
Link: To be posted here or in Piazza
|
Jan 26
|
Continue
|
|
Last day to submit
The project teams before automatic grouping
|
Jan 30
|
Program Analysis
- Static vs. Dynamic Analysis
- Abstract Representations for Software
- Abstract Syntax Tree
- Control Flow Graphs
- Buchi Automata
- Statement Dependence
- Control Dependence
- Data Dependence
- Slicing (Forward, Backward)
- Chops, Backbones, Dices
- ANTLR4
- Building lexers/parsers
- Examining ASTs
- Performing static analysis
- Visitor Design Pattern
|
Program Analysis
Static Analysis
Dynamic Analysis
ANTLR4
|
Last day to submit
The code repo setup assignment
Announcement
Project teams
New Assignment Announcement (Project)
Team Assignment 1
Due: February 13
What:
- Project selection
- 2 minute screen capture demo of current software version
- Link to forked github repository
- Each member makes a dummmy git commit to forked repository (Web commits not allowed)
- Meeting notes of the team meeting (Participants, Place, Time, Summary of Discussion)
|
Feb 2
|
Continue
|
|
|
Feb 6
|
Continue
|
|
New Assignment Announcement (1st coding assignment)
Due: February 20
Description: To be posted here in Piazza
Link: To be posted here or in Piazza
|
Feb 9
|
Midterm 1
|
|
|
Feb 13
|
Answers to Midterm 1
|
Software Metrics
Connascence
|
Last day to submit
Team Assignment 1
|
Feb 16
|
Building Software Platforms, Frameworks, Services, Libraries
- Stages of building reusable software
- Ways to reuse software
- Design
- separation of concerns
- dependency injection
- inversion of control
- API design
- Architectural design patterns
- model view controller
- asynchronous token pattern
- broker pattern
- simulating multiple threads with single thread
- Intent specification with java annotations
- Code generation: extending javac compiler with annotation processors
|
|
New Assignment Announcement (Project)
Team Assignment 2
Due: February 27
What: Link to team backlog. Each issue has to be described in detail. Each issue has to be assigned to a team member.
|
Feb 20
|
Continue
|
|
Last day to submitCoding Assignment 1
New Assignment Announcement (2nd coding assignment)
Due: March 6
Description: To be posted
Link: To be posted here or in Piazza
|
Feb 23
|
Continue
|
|
|
Feb 27
|
Software Development Processes
- Waterflow, agile, scrum, kamban
- Scrum
- backlog creation
- sprint planning
- sprint
- standups
- demo and retrospective
- Release and version planning
- Pushing updates to staging and production systems without breaking the live system
- Team roles
- product manager, project manager, tech lead, developer, tester, build cop, infrastructure engineer, operations, UX, manager,
push czar
- Project Management Lessons
- Mythical Man Month
- Second System Syndrome
- Essays from Conteporary Software Engineers
|
Formal verification
Profiling
|
Last day to submit
Team Assignment 2
|
Mar 2
|
Continue
|
|
|
Mar 6
|
Testing, Verification, Measuring, Monitoring, Alerting
- Testing and Test Automation
- Unit testing (JUnit, pyunit), Mocking and stubbing
- Test Coverage
- Integration tests, End-to-End tests
- UI testing: Selennium
- Regression testing
- Load testing
- Manual testing
- Model checking and verification
- Modeling software systems: transition systems
- Specification expectations: Linear Temporal Logic
- Measuring
- Metrics
- Availabiliy
- Latency
- Response time
- Capacity
- CPU, memory, bandwidth
- Request per second
- Profiling
- From logs
- From live signals
- Defining KPIs (metrics)
- Monitoring and Alerting
- Detecting problems
- Graphing
- Alerting
- Experimentation
- Providing options
- A/B testing
|
Demo Yapma Rehberi
|
Last day to submit
Coding Assignment 2
|
Mar 9
|
Continue
|
|
New Assignment Announced (3rd coding assignment)
Due: March 20
Description: To be posted
Link: To be posted here or in Piazza
|
Mar 13
|
Designing Robust Software Systems and Expressing Them to Other Engineers
- Importance of common terminology
- Design patterns
- Using diagrams
- UML
- class diagrams
- sequence diagrams
- state diagrams
- collaboration diagram
- Case study: Design a high traffic Web service
- System architecture
- Caching
- Load balancer
- Asynchronous vs. Synchronous interaction
- Message Queues, push notifications
- REST
- Case study: Design Whatsapp mobile application
|
|
|
Mar 15
|
Last day to perform the project preliminary demo
|
|
Last day to perform the project preliminary demo
|
Mar 16
|
Continue
|
|
|
Mar 20
|
Software complexity metrics, software quality and program comprehension
- Writing software vs. reading software
- Readability
- Using Conventions
- Effects of Dynamic Typing
- Effects of Asynchronous Programming
- Effects of Inversion of Control
- Effects of Layers
- Metrics
- Coupling/Cohesion
- Connascence
- Measuring Documentation Quality
- Pragmatic techniques to improve the readability of code fragments
|
Demo Yapma Rehberi
|
|
Mar 23
|
Continue
|
|
Coding assignment 3 (demo)
|
Mar 27
|
Getting Ready for Software Engineer Job Interviews (Silicon Valley)
- From the applicant's perspective
- From the interviewer's perspective
|
|
|
Mar 30
|
Closing
|
Demo Yapma Rehberi
|
Project final demo
|