Course Info

Web Enterprise Computing

(All You Ever Wanted to Know about How to Build Large-Scale Software,

with Emphasis on Web Serving and Analytics)

4190.418A

Fall 2014

Seoul National University



Announcements

9/1: Project Proposal due 9/12 11:59PM.

9/3: Makeup class on  9/16 (Tue) 6:30-8:30PM
9/15: Makeup class on 9/23 (Tue) 6:30 - 8:30 PM
9/17: Project team formation finished. The team list is on the ETL class board.
9/20: Project requirements and specification due 10/7 (Tue) 6PM
Individual warm-up project due 10/12 (Sun) 6PM
9/22:  Each team should send <team name, repo name, github ids> to wec-staff at cmslab.snu.ac.kr
9/30:
  • Project poster session : 11AM - 1PM 12/15 (Mon)
  • Project final report due 6PM 12/13 (Sat)
10/13: Warm-up programming assignment #1 scores posted in ETL

Goal

This is an "experimental" hands-on course on large-scale software systems, with emphasis on web serving and analytics running in the cloud. 

How can companies like Amazon, Google, and Microsoft build software that serves a lot of customers much better than other companies? Building large software systems that actually work is notoriously hard. This course covers techniques for dealing with the complexity of software systems. We will focus on the technology of software engineering for the individual and small team. Topics will include, among others, abstraction, specifications, principles of design and software architecture, testing, debugging, static analysis, and version control. The students are expected to apply the theory to systems in practice by working on group project(s) in the areas of web serving and analytics.



Time

MW 11:00AM-12:15PM



Location

Bldg. 302, Rm. 106



Staff

Instructor: Byung-Gon Chun

TAs: Taegeon Um, Youngseok Yang

E-mail: wec-staff at cmslab.snu.ac.kr



Course materials

There is no required textbook in this class.

If you want to read more about the topics covered in the class, I recommend to read the following books.

  • "Engineering Software as a Service: An Agile Approach Using Cloud Computing", by Armando Fox and David Patterson
  • “Software Engineering. A Practitioner’s Approach (6th ed.) ”, by Roger Pressman
  • "Code Complete”, by Steve McConnell
  • "Design Patterns: Elements of Reusable Object-Oriented Software”, by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  • “Extreme Software Engineering. A Hands-On Approach”, by Daniel H. Steinberg, Daniel W. Palmer

Evaluation (TBD)

  • Class participation : 10%
  • Exam (1 exam): 10%
  • Programming assignments (2 assignments): 20%
  • Class project(s) : 60%



Syllabus (Tentative schedule)

  • Week 1
    • M - Introduction, Syllabus
    • W - Software Engineering Introduction
  • Week 2 Thanksgiving days (no class) - project proposal due 9/12 11:59PM
  • Week 3
    • M - Software Development Process (Agile process, Extreme programming)
    • W - Project proposal discussion and voting; team formation end
  • Week 4: Warm-up (individual) project assignment out
    • M - Working in Teams (Version Control: github), choice of tools to use
    • T - Make-up class: Web app architecture, Model view controller
    • W - Web app architecture, Requirements and Specifications
  • Week 5
    • M - Requirements and Specifications, UML
    • W - Requirements and Specifications, BDD
  • Week 6 (10/6 - 10/10) (OOT) (10/12 Sun: Warm-up project due): Project specification
    • M - Favorite development framework; Warm-up project discussion
    • W - Favorite development framework; Warm-up project discussion
  • Week 7:
    • M - Test-Driven Development
    • W - Testing Practice: Unit Testing, Functional Testing
  • Week 8
    • M - Guest lecture : MetaSync
    • W - Legacy Code Refactoring
  • Week 9
    • M - Design Patterns
    • W - Design Patterns
  • Week 10
    • M - Presentation, Design Patterns
    • W - Design Patterns
  • Week 11
    • M - Operations: Deployment, Availability & Responsiveness, CI, Feature flags, Monitoring
    • W - Operations: Caching, Abusive Queries & Indices, Security, Dev/Ops Wrapup
  • Week 12
    • M - Presentation; Operations
    • W - Guest lecture: Security
  • Week 13
    • M - Midterm exam
    • W - Advanced topics - Big Data, Scalable Cloud Services (AWS, Azure)
  • Week 14
    • M - Presentation, Advanced topics
    • W - Advanced topics, Testing another team’s project
  • Week 15: Final project report due
    • M - Advanced topics
    • W - Advanced topics
  • Week 16
    • Final project poster session (including demo)
Note. Potential topics to cover: client-side technology, server-side technology



Project schedules

  • Project Proposal - 1-2 page project description [done]
  • Project Bidding - proposals selected by the staff, bidding who want to work on the topic [done]
  • Project Requirements and Specification
  • Warmup Project - Frontend, Backend using a framework of your choice
  • Main Project
    • Track 1 - Frontend, Backend (Serving + Analytics); Track 2 - Backend-heavy (new Backend systems)
    • Steps 
      • Milestone 1
      • Milestone 2
      • Milestone 3
      • Milestone 4, Testing another team’s project
  • Final presentation



Frameworks and Languages for Projects

Project teams have freedom to choose the programming language and framework for building their project.

Front-end

The front-end for your project will run either in a browser, or as a native app on a mobile platform (Android or iOS). The following frameworks are your choices:

  • HTML5/Javascript

  • iOS (Objective C)

  • Android (Java)


Back-end serving

The back-end of your project will run on a server in the Amazon EC2 or on Heroku. It is likely that it will use a database (Mongo, MySQL, etc.) and a model-view-controller architecture. The following frameworks are your choices:

  • Django/Python

  • Ruby/Rails

  • node.js

  • Spring/Java


Back-end analytics

  • REEF, Hadoop