Foundations of Software Engineering is a course that presents an introduction to the field of software engineering. The class begins with a review of some core tools that are needed to support our work throughout the semester. We will then delve into the history of software engineering and review its foundational concepts and perspectives. We will encounter a wide range of techniques and tools used in modern software development and we will work together as a class to create our own “wikipedia” of software engineering throughout the semester.

In addition, we will take two “deep dives” this semester on the following topics -

  • Techniques and frameworks for designing single and n-tier applications
  • Techniques and case studies for designing, developing, and deploying production software systems

The high level goal of the class is to ensure that a student new to software engineering leaves the course with a grasp of the basic concepts and tenets of the field and has some mastery of the latest techniques and tools.

Learning Goals

  • A solid understanding of core software engineering concepts, including:
    • The concepts and arguments of No Silver Bullet
    • Software development life cycle and team
      • Product management
      • Product design
      • Development
      • Deployment
      • Production support
    • Core support processes of software engineering
      • Effective user stories
      • Software versioning
      • Testing
  • A solid understanding of git and GitHub
    • A working knowledge of git for use in software development
    • A working knowledge of GitHub, including the relationship between repositories on your local machine and repositories on GitHub
    • A working knowledge of Markdown, such that you can use it to compose documents, comments, issues, etc. on GitHub
  • A solid understanding of designing, developing, and deploying software
  • A solid understanding of designing and development client programs that make use of software services, including -\
    • command-line clients
    • web-based clients
  • A solid understanding of asynchronous and concurrent programming techniques, frameworks, and models
  • Expertise working in small groups of software engineers to design, test, build, and deploy a software system
    • The group will make use of an agile life cycle to plan and drive the development of a Minimum Viable Product (MVP)
    • The MVP will make use of techniques and frameworks associated with the “deep dive” topics of the semester

Evaluation

Your grade will be determined by your work on

  • Homeworks and the Semester Project (40%)
  • Essays and participation (40%)
  • Quizzes (20%)

The semester project will be integrated into the homeworks for the class. Essays will be created on Github or Google Docs; they will be due each Wednesday and will need to be reviewed each Friday. Quizzes will be taken on the Canvas website associated with the class.

Note: We currently do not have plans to hold a midterm or final exam for this class. However, we reserve the right to add exams to the class (with two-week advance warning) if we feel that we’re not able to properly assess your skills via the categories above.

Textbook

Recommended Reading

We will also be supplementing the material in these books with lots of additional content from other books, web articles, and previous versions of this class.

Syllabus Statements

The University of Colorado Boulder has a set of policy statements that apply to all classes. Please review these statements here - Required Syllabus Statements

Course Contacts

  • Lecturer: Mike Barinek (email: Michael.Barinek)

  • Course Manager: Ravinda Mangar