Software Engineering Course Syllabus
- 1 Course Description
- 2 Instructor
- 3 Prerequisites
- 4 Tentative Topics
- 5 Course focus
- 6 Course web site
- 7 Software
- 8 Grading
- 9 Late assignment policy
- 10 Team project
- 11 Inside class
- 12 Outside of class
- 13 Books
- 14 Inspirational Quotes
An intense hands-on study of practical techniques and methods of software engineering. Topics include advanced object-oriented design, design patterns, refactoring, code optimization, universal modeling language, threading, user interface design, enterprise application development, and development tools. All topics are integrated and applied during the semester long group project. The aim of the project is to prepare students for dynamics in a real workplace. Members of the group meet on a regular basis to discuss the project and to assign individual tasks. Students are judged primarily on the final project presentations.
Official requirements include Operating Systems (CSCI-UA 202) and Object Oriented Programming (CSCI-UA 0470). These are of dubious value and may be waived by the instructor on a case-by-case basis.
We will try to weave as many of the following into the course as possible, although we will surely not be able to cover all:
Tools and techniques of the trade
- Version control
- Code collaboration
- Continuous integration / deployment
- Configuration management
- Automated testing
- Team communication
- Code level
- Demos and presentations
- Tools such as GitHub, Slack, Trello
- Change management
- Project planning and management
- Personality types
- Team formation
- Roles and responsibilities
- Task estimation and assignment
Software development phases
Premature optimization is the root of all evil. -Donald Knuth
- Big Design Up-Front (BDUF)
Design and modeling
- Software architecture
- Design patterns
- Service Design
- Applied human-computer interaction
This course is not a watered-down theoretical overview of every detail of software engineering - the discipline is too diverse and deep to do justice to students if attempting to cover everything in a single semester-long course.
Decision-making used when deciding what content to include in this course followed a similar pattern to how features are evaluated for inclusion in a software product release:
- What are the highest priority topics in Software Engineering that completely describe the discipline?
- Which of these are most likely to be relevant to the largest number of students going into the field?
- Out of those, which can we realistically cover, given financial and equipment constraints?
- And what combinatino of these will we be able cover to completion with the time constraint of a single semester?
And just as in the industry-standard Agile software development methodology, some of the topics covered later in the semester have only been roughly defined here at the beginning as I write this. Thus, this course may alter its path as we progress and new topics, student interests, or constraints arise. But we aim to complete a solid, functioning course by the end of the semester regardless of exactly what topics and activities are included!
Course web site
- Git - https://git-scm.com
- GitHub - https://github.com
- Slack - https://slack.com
- Jenkins - https://jenkins.io/
- Gliffy - https://www.gliffy.com/
- and more...
- Midterm exam - 10%
- Final exam - 15%
- Individual exercises - 15%
- Team project - 45%
- Participation - 15%
Late assignment policy
You are allowed to submit individual exercises late twice. After two late submissions, you will not receive further credit for late work.
Work on team projects will not be accepted late.
- The same team of 4+/-students will work on a project for the majority of the term.
- The team proposes their own project ideas and plans with guidance/approval from instructor.
- There will be several deliverables throughout the term.
- You will receive a grade for the team project based on your individual contribution to the project balanced with the success of the project as a whole
- Artifact submission and quality
- Instructor observation
- Peer evaluations
Class time will be consumed by a variety of activities:
- Exercises - individual, team project group, and other group exercises
- Project work time
- Demonstrations and presentations
Outside of class
It is expected that you will do a significant amount work outside of class.
- any assigned reading and/or videos
- any assigned quizzes or individual exersises
- team projects
Readings will be pulled from many sources online or on paper, including:
- Software Engineering, 10th edition, Ian Sommerville
- Software Engineering, Ivan Marsic
- Introduction to Software Engineering, Wikibooks
"One of our difficulties will be the maintenance of an appropriate discipline, so that we do not lose track of what we are doing. We shall need a number of efficient librarian types to keep us in order..." -Alan Turing, 1947
"The masters [programmers] are liable to get replaced because as soon as any technique becomes at all stereotyped it becomes possible to devise a system of instruction tables which will enable the electronic computer to do it for itself. It may happen however that the masters will refuse to do this. They may be unwilling to let their jobs be stolen from them in this way. In that case they would surround the whole of their work with mystery and make excuses, couched in well chosen gibberish, whenever any dangerous suggestions were made." -Alan Turing, 1947