Software Engineering Course Syllabus

From Knowledge Kitchen
Jump to: navigation, search


Course Description

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.

Instructor

Prerequisites

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.

Tentative Topics

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
    • Documentation
    • Demos and presentations
    • Tools such as GitHub, Slack, Trello
  • Change management
  • Project planning and management

Teamwork

  • Personality types
  • Team formation
  • Roles and responsibilities
  • Task estimation and assignment

Software development phases

  • Specification
  • Development
  • Validation
  • Evolution

Refactoring

"In almost all cases, I’m opposed to setting aside time for refactoring."
-Martin Fowler

Optimization

"Premature optimization is the root of all evil."
-Donald Knuth

Project methodologies

  • Big Design Up-Front (BDUF)
  • Iterative
    • Agile
      • Scrum

Design and modeling

  • UML
  • Software architecture
  • Design patterns

User-centered design

  • Service Design
  • Applied human-computer interaction

Frameworks

Timing

  • Concurrency
  • Asynchronicity

Data and databases

  • SQL
  • No-SQL
  • Hadoop

Cloud services

  • AWS
  • Azure

Course focus

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

Software

Getting help

Help resources available to you are listed in order of “seriousness” of your problem:

Slack

There is a slack group for this class:

Tutoring

Our tutor, Priyanka, will be available at the following times:

  • Tuesdays: 2-4pm (in WWH Room 412)
  • Wednesdays: 3-5pm (in WWH Room 412)
  • Fridays: 3:30 - 4:30 (via Slack only)

If you have question for her at other times, either direct message her on Slack (if something private), or post something to the #ask-priyanka Slack channel (if you don't mind sharing the conversation with others), and she'll respond as soon as she can.

Talk with the professor

  1. see me before class
  2. raise your hand during class
  3. see me after class
  4. come to my open office hours

Additional tutoring resources

Grading

  • Quizzes - 5%
  • Midterm exam - 10%
  • Final exam - 15%
  • Individual exercises - 15%
  • Participation - 15%
  • Team project - 40%

Late assignment policy

Individual exercises

You are allowed to submit individual exercises late twice. After two late submissions, you will not receive further credit for late work.

Team projects

Work on team projects will not be accepted late.

Team project

  • 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

Inside class

Class time will be consumed by a variety of activities:

  • Lectures
  • Exercises - individual, team project group, and other group exercises
  • Project work time
  • Demonstrations and presentations
  • Exams

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

Books

Readings will be pulled from many sources online or on paper, including:

Inspirational Quotes

"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 in his lecture to the London Mathematical Society
"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