Skip to content

Latest commit

 

History

History
421 lines (359 loc) · 17.5 KB

2019-Spring-WashU.md

File metadata and controls

421 lines (359 loc) · 17.5 KB

Computer Science and Engineering - Software Engineering Workshop

An introduction and exploration of concepts and issues related to large-scale software systems development. Areas of exploration include technical complexities, organization issues, and communication techniques for large-scale development. Students participate through teams emulating industrial development. The projects cover the principal system development life-cycle phases from requirements analysis, to software design, and to final implementation. Issues relating to real-time control systems, human factors, reliability, performance, operating costs, maintainability, and others are addressed and resolved in a reasonable manner. Prerequisite: Junior or Senior standing

Course Overview

This course is intended to introduce students to the concepts of Open Source software development as well as deliver a software product for a real-world client. Specific areas of focus are:

  • History of Open Source
  • Communities and governance
  • Technologies used
    • Source control
    • Communications tools
    • Issue trackers
  • Legal aspects (licensing/foundations)

Additionally, students should expect to be challenged in areas of personal development related to the business environment such as giving presentations, writing position papers and performing the full lifecycle of software development in a team setting.

Administrativia

Daniel Ruggeri - druggeri primary.net

Daniel Evans - evans23 wustl.edu

Mon/Wed 5:30pm - 7:00pm, 101 Lopata Hall

E81 CSE 437S

Textbook

Open Source Software ~ Karl Fogel

ISBN: 0596007590, ISBN-13: 978-0596007591

Download free at http://producingoss.com/

Assignments and Grading

In full transparency, the assignments as well as how they are graded are shared in this section

Team Project

This is the bulk of the grade you will earn as well as the primary focus of the class. Each student will participate in a team responsible for delivering a software product to a client. By the middle of the semester, an MVP should be completed. By the end of the semester, the final project with client feedback incorporated is expected.

  • Students will share ideas of projects in the second week
    • The client may be any real-world use case. Non-for-profits, corporate projects, campus projects, etc are all encouraged
    • You may not be your own client
    • Your client and their satisfaction is greatly important
  • Teams will be self-formed by the students and will consist of five to seven students
    • Each member of the team will receive the same grade for the project as a whole
    • Choose your teammates wisely - ensure coverage of important skills (code and non-code)

Grading for the project will be based on the effective execution of the following SDLC aspects:

  • Gathering requirements and understanding the client's needs
  • Incorporating client feedback into designs post-MVP
  • Overall project planning and timing
  • Time management and aligning deliverables in expected sprints
  • User experience and non-code materials (documentation, UI, ease of use, etc)
  • "Marketing" and presenting the final result
  • Effective use of team skills and individual expertise
  • Client evaluation of the delivered product

The system must be delivered in whole for grading. Examples:

  • Projects delivering a web-based resource would provide the public URL and credentials for evaluation
  • Projects delivering mobile applications would provide a physical device for evaluation (sorry - instructor will not install things onto his gear)
  • Projects delivering software that operates on a desktop environment would provide a virtual machine image (VirtualBox preferred) on a thumb drive

The final system will be presented to the class and your clients. This presentation will take between 20 and 30 minutes.

Homework

Homework assignments will be passed out from time to time involving reading, researching or taking some action. These assignments should be completed by the next class

Presentation

Each student will be required to give a short presentation about a topic related to Open Source of their choosing (approved by instructor). The presentation should be 5 to 10 minutes long.

The reason for this requirement is two-fold:

  • To ensure a certain level of mastery of the topic such that it can be explained well
  • To ensure a certain level of mastery in giving a presentation

This is so each student gets experience in exercising their "marketing" muscle which is not only required in the world of business, but also the world of Open Source. While presentations will be graded on content, a significant portion of the grade will also come from organization of the content, aesthetics of any materials presented as well as the ability to adhere to guiding principles for good presentations.

Some ideas:

  • Why I love the (name) Open Source project
  • Five ways to make money on Open Source
  • An analysis of Open Source license X versus license Y
  • A guide to getting started in an Open Source project

Writing

Communicating well is critically important in the world outside of the classroom and, similar to giving presentations, is a muscle that must be exercised regularly. Students will be tasked with writing short papers in the form of: ** Summary documents ** which should be written in a form suitable for a manager to understand the landscape or overview of a concept they are not familiar with. In addition to the points earned in position papers, these documents will also be graded on accuracy of their factual contents and the simplification of complex topics.

Source Control for Pointy Hairs

Exactly 1 physical page
I am a manager that has worked in manufacturing all of my career but have recently moved to become the manager of a software development team. I hear people mention "source control" and things like "commit", "branch", "tag" and such but I don't know what any of these things are. Provide me a one-pager that explains what source control is and gives a few key terms/definitions.

Participation

The world of Open Source is driven by community so it is important that the community within our classroom is full of individuals willing to contribute to the success of the whole class. Therefore, participation during discussions and presentations as well as within code and the project will be measured over the course of the semester and will contribute to a significant portion of the grade.

Extra Credit

Through the course of the semester, students will have opportunities to earn extra credit. Opportunities will be shared as they come along.

  • Contribute fixes to this course's content
  • Contribute fixes to a real Open Source project
  • Attend ACM events

Breakdown

Item Points Percentage
Homework 20 4%
Class Participation 20 4%
Paper: Source Control for Pointy hairs 30 6%
Presentation: About My Favorite Project 30 6%
Midterm 50 10%
Final 50 10%
Team Project 300 60%
Total 500

Schedule

This is the planned schedule of events for the course. Since topics may run longer or come up short, expect some minor alterations. It's also important to note that when you see discussion comes up in the schedule, you should expect the instructor to ask questions that will verify your understanding/homework as well as to cover some of the topics in depth.

Most class periods will be split between lecture/discussion about Open Source Software topics or class-wide work (30 to 45 minutes) with the remainder of the time dedicated to working within your teams and seeking guidance from the instructor.

Mon Jan 14

  • Get to know each other
  • Cover syllabus
    • Discuss project
    • Understand sprints and retros
  • Homework: Read chapter 1 of book

Wed Jan 16

  • Topic: Open Source intro and history - lecture notes
  • Share and present project ideas
    • Post-it notes!
  • Begin forming teams and seeing what works

Mon Jan 21 - MLK Holiday

  • During the time off, solidify your teams and get cracking

Wed Jan 23

  • Topic: TODO
  • Teams and projects are set
  • Plan and outline sprint 1
  • Check-in:
    • You know your project well
    • Your teammates are now your closest friends :-)
    • Analysis should be well under way
  • Homework: Read Chapter 3 - Version Control section

Mon Jan 28

  • Topic: Source Control - lecture notes
  • Remember the Source Control for Pointy Hairs paper is coming

Wed Jan 30

  • Topic: Source Control - Additional concepts - lecture notes
    • Beware of "fork" term
    • Branching
    • Tags
  • Homework: Source Control for Pointy Hairs paper

Mon Feb 4

  • Paper (Source Control for Pointy Hairs) is due
    • 12:00 am 2/4/2019 (Sunday Night, Monday Morning)
    • 1 Page Single Spaced
    • Turn in to evans23 at wustl.edu
  • Topic: TODO
  • Team project presentations
    • Five to ten minutes, as a team
    • Who is your client and what is your project?
    • Who are your experts in the team?
  • Homework: Read Chapter 7 - Packaging "Compilation and Installation" and "Binary packages" subsections

Wed Feb 6

  • Topic: Building software - lecture notes
    • Local builds
    • Local tools
  • Plan and outline sprint 2
  • Sprint 1 retro
  • Check-in:
    • Analysis should be complete
    • Design should be under way
    • Some code should already be in development
    • UX thoughts should be starting to form

Mon Feb 11

  • Topic: Managing dependencies - lecture notes
    • What is a dependency?
    • Why use a library?
    • Automated dependency management

Wed Feb 13

  • Topic: Application environments (dev, stage, prod)

Mon Feb 18

Wed Feb 20

  • Topic: Let's talk DevOps
  • Sprint 2 retro
  • Plan and outline sprint 3
  • Check-in:
    • Overall design should be gelled
    • Double-check analysis work - anything to revisit?
    • Continue coding
  • Homework: Read Chapter 3 - Bug Tracker

Mon Feb 25

  • Topic: Discuss bug tracking chapter learnings - lecture notes
    • Issue Tracking - overview
    • Bugs vs issues

Wed Feb 27

  • Topic: Issue Tracking - applied
    • Lab: Create an issue
  • Homework: Create your own issue
    • If this issue is for our class, resolve it with a pull request
    • If this issue is in a real project, extra points if you resolve it!

Mon Mar 4

  • Go around the room
    • What issue did you report?
  • Open time - questions/review for midterm

Wed Mar 6

  • Mid term examination
  • Sprint 3 retro
  • Plan and outline sprint 4
  • Check-in:
    • MVP!!!
    • Major internal system integrations are in place
    • Major external system integrations are well under way
    • Overall design should be complete
    • Begin designing/creating documentation

Mon Mar 11 - Spring Break

Wed Mar 13 - Spring Break

Mon Mar 18

Wed Mar 20

  • Topic: Releasing software - lecture notes
    • Versioning
    • Release procedures

Mon Mar 25

  • Topic: Community models (part 1) - lecture notes
  • Open Source Presentations
    • Presenter 1: Dorian Stubblefield
      • Topic: Henry Ford's contribution to open source.
    • Presenter 2:
      • Topic:
    • Presenter 3: Joshua Gelbard
      • Topic: Swift - Apple's Surprise Move

Wed Mar 27

  • Topic: Community models (part 2) - lecture notes
  • Sprint 4 retro
  • Plan and outline sprint 5
  • Check-in:
    • Client has reviewed MVP and provided feedback
    • Integration of code pieces should be well under way
    • Test cases should be in place for units
    • Plan to integrate client feedback into project
  • Homework: Read Chapter 3 - Mailing Lists/Message Forums
  • Open Source Presentations
    • Presenter 1:
      • Topic:
    • Presenter 2:Nirek Sharma
      • Topic: Why I Like VSCode
    • Presenter 3: Lucas Florence
      • Topic: Five ways to make money on Open Source

Mon Apr 1

  • Topic: Communications tools - lecture notes
    • Mailing lists
    • IRC
    • Forums
  • Open Source Presentations
    • Presenter 1:
      • Topic:
    • Presenter 2:
      • Topic:
    • Presenter 3: Visaal Ambalam
      • Topic: What is Kafka?

Wed Apr 3

  • Topic: Foundations - lecture notes
    • Their role (some examples)
    • US Non-for-profit types
  • Open Source Presentations
    • Presenter 1: John Bisognano
      • Topic: Scaling genomics with Spotify
    • Presenter 2:
      • Topic:
    • Presenter 3:
      • Topic:

Mon Apr 8

  • Topic: Getting involved - lecture notes
    • The importance of credibility in the community
    • A path to getting engaged
      • User
      • Contributor
      • Committer
      • Voter
  • Open Source Presentations
    • Presenter 1: Ethan Shry
      • Topic: GraphQL > REST
    • Presenter 2: Dan Schaeffer
      • Topic: pfSense Open Source Firewall and Router
    • Presenter 3:
      • Topic:

Wed Apr 10

  • Sprint 5 retro
  • Plan and outline final sprint
  • Check-in:
    • Client has reviewed the updates based on their feedback
    • Get more client feedback!!!
    • Presentation planning has started
  • Open Source Presentations
    • Presenter 1: Junbin Ma
      • Topic: Challenges for OSS maintainers - real world examples
    • Presenter 2: David Huang
      • Topic: Be careful who you trust (npm event-stream)
    • Presenter 3: Louise Zhu
      • Topic: Mozilla Firefox and community led marketing

Mon Apr 15

  • Topic: Development best practices - lecture notes
    • Documentation
      • MUST have files: README, CHANGELOG, LICENSE
      • Wiki, FAQ, Website
      • Developer guidelines
      • Translation
  • Open Source Presentations
    • Presenter 1: Benjamin Choi
      • Topic: What is Apigee
    • Presenter 2: Mystery Presenter
      • Topic: Open Source IPO's
    • Presenter 3:Christian Anyanwu
      • Topic: Why most of Machine Learning is Open Source
    • Presenter 4: Jin Han
      • Topic: Leaflet - a JavaScript library for mobile-friendly interactive maps
    • Presenter 5: Yipeng Wang
      • Topic: Why Hugo Is the Best Open Source Static Site Generator
    • Presenter 6: Shane Tong
      • Topic: History and Future of JavaScript and Node.js
    • Presenter 7: Julia Dickerman
      • Topic: Open Source's Inclusivity Problem

Wed Apr 17

Mon Apr 22

  • Topic: Licenses!!! - lecture notes
    • Questions that must be asked of every license
      • What are the terms, are they compatible with planned use?
    • The "big" licenses source
      • MIT
      • GPL 2/3
      • Apache 2
      • BSD
  • Final Exam Review
  • Open Source Presentations
    • Presenter 1: Kevin Fu
      • Topic: Wine (What is it good for?)
    • Presenter 2: Jianxing (Jason) Liao
      • Topic: Why is LibreOffice so powerful?
    • Presenter 3: Siam Abd Al-Ilah
      • Topic: Why I like Kotlin

Wed Apr 24

  • Conclusion of Final examination
  • Sprint 6 retro
  • Check-in:
    • Client loves the project
    • Documentation should be in place
    • Presentation should be ready
  • Open Source Presentations
    • Presenter 1: Kevin Ha
      • Topic: React Native makes lives easier
    • Presenter 2: Aumesh Misra
      • Topic: What is Kubernetes?
    • Presenter 3: Dominique Senteza
      • Topic: Open Source and IoT
    • Presenter 4: Zahra Lambe
      • Topic: Open Source and Blockchain

Mon May 6

  • Project presentations -- Cupples II L 015
  • Presenter 1: Cambridge
  • Presenter 2: Amazon
  • Presenter 3: Pupil

Wed May 8

  • Project presentations -- Cupples II L 015
  • Presenter 1: Sicnum

Thanks and Attributions

This class has been shaped through input from many folks, but a few notable attributions are deserved: