Syllabus

1 Course Staff and Guest Speakers

Who we are, how to contact us, when and how we’re available.

1.1 Course Co-Leads

  • Danya Karras (UBC Alum, D2L developer, and course co-lead)
    Bio: After completing her undergrad in Physics at UBC, Danya quickly realized that she not only loved programming, but that it would also be able to fund her artisanal ice cream addiction. She immediately joined the BCS program, and then took 5 meandering years to complete it. Danya has now worked at D2L as a Software Developer for over 2 years, and is excited to bring her real-life developer skills to this course. In her free time, Danya enjoys shredding pow on Whistler/Blackcomb, and doing Ukrainian folk dance. (Not at the same time.) Going forward, Danya wants to make a pretty big dent in the technology education sector.
  • Ian McLean (UBC Alum, D2L developer, and course co-lead)
    Bio: Ian was destined to cure Ebola, until Grade 11 biology class introduced him to Charlie Darwin, and set him on a confusing path to study Evolution and Ecology at SFU(BSc) and Carleton(MSc). Though he loved biology, Ian didn’t have the patience for the theoretical/academic life, and so he stopped his biology studies, and tried to get a job (for which he was mainly under- or over-qualified for). Finally, Ian found his way to LifeLabs, and realized that he wanted a life with biology and tech combined. He then promptly moved back to BC, and bothered the BCS program until they let him in. Ian is currently a dormant biologist, learning how to be a software developer at D2L, and trying to help cool stuff happen (like this class).
  • Steven Wolfman, wolf@cs.ubc.ca or cs-436i@ugrad.cs.ubc.ca (UBC faculty, course co-lead, instructor of record)
    Bio: Steve has never really left academia, where he teaches courses ranging from introductory discrete mathematics to upper level programming languages. Like many academics baffled by the related words “pediatrics” and “pedagogy”, the only practical things he’s created in his life are his children (decidedly a second-authorship), for whom he also created his only full-stack website: a puzzle game that culminated in a geocaching scavenger hunt in Queen Elizabeth Park. He gladly helped Danya and Ian design this course so others could create practical systems. You know, besides children. Picture coming soon!

1.2 Teaching Assistants

  • Lisa O’Brien
  • Michelle Huh
  • Stephanie Mah

More info coming soon!

1.3 Guest Speakers

Guest speakers:

    • Units 1 and 2: Ian and Danya!
    • Unit 3 (Back-end APIs): Daniel Gipps
      Bio: Born and raised in greater Vancouver, Daniel received his Bachelor of Arts, majoring in Economics, from UBC in 2012. Near the end of that degree he started to teach himself to code and quickly realized that is what we he wanted. He started his B.C.S degree a year later, interning at Axiom Zen and Coho Data. After graduation he moved to Toronto and has been working at Top Hat ever since. Outside of work he spends a lot of time climbing, running, and cycling, and then cooking and eating a lot.
    • Unit 4 (NoSQL and MongoDB): Amreen Purewal
      Bio: Born and raised in North Vancouver, Amreen first studied Physics as an undergrad at UBC. In Physics, basic numerical programming knowledge was expected but unfortunately not taught. So Amreen was thrown into the programming deep end and somehow learned to swim (ie code).
      Surprisingly, it wasn’t until her last term at UBC that she finally took her first computer science course and realized that she loved it and wanted to explore the field more. However just months from graduation, Amreen wasn’t sure what to do. Could she handle another four more years detouring around the UBC campus in her heavy rain boots? Or should she try her luck with a physics degree and some online computer science courses? Thankfully, in swooped the BCS program to save the day. Fast forward a few years and Amreen is currently working at Safe Software, a local tech company, as a backend software developer.
      In her spare time, Amreen likes to bake (signature recipe is banana bread), run (so she can eat what she baked guilt free) and walk around the beautiful streets of Vancouver with a latte in hand (and a cupcake in the other).
    • Unit 5 (Release Engineering): Dorothy Ordogh
      Bio: Hailing from Toronto, Dorothy moved to Vancouver to pursue a bachelor’s degree at UBC. One bachelor’s degree quickly turned into two when she took a computer science class after she realized her job prospects were pretty sparse with a psychology degree. Dorothy interned at ABB, Ldryl (a startup that died mid-internship), and Hootsuite, and found full-time employment post graduation at Twitter in foggy San Francisco. In her three years at Twitter, Dorothy has worked on a testing framework, a build tool (Pants), and currently works on the foundational RPC library that every service at Twitter is built on. In her “spare time” at work, Dorothy uses that psychology degree to lead’s the women in engineering efforts at Twitter, developing programs to attract, include, and retain female engineers. Outside of work, Dorothy is a dance instructor, and amateur cook.
    • Unit 6 (Career Preparation): Jeremy Goh
      Bio: Jeremy has always been interested in technology but for one reason or another ended up doing a law degree in the UK instead. Before enrolling in the BCS program, he did a coding bootcamp – to see if he could code for 8 hours a day – and loved it. During the BCS program, he co-oped/interned at Axiom Zen and Facebook, and now works as a software engineer focusing on product at Facebook’s HQ in Menlo Park, California.

2 Schedule

Please see our posted course schedule for the structure of a typical 2-week unit and important dates. It’s critical to review (at minimum) the dates for the final presentations and workshops.

3 Learning Objectives

Typically, learning objectives state what you will be able to do. As we intend this to be an intensely practical course, we instead discuss what you will have done upon successfully completing this course:

  • applied a variety of current, popular, highly industry-relevant technologies;
  • expanded your professional portfolio with compelling, hands-on
    experience working on a complete software project, start to finish;
  • applied good communication and collaboration practices in a small-team environment; and
  • networked with industry contacts and potential mentors.

4 Equity, Inclusion, and Wellness

The CS Department has a fantastic statement on Equity, Inclusion, and Wellness with a large number of resource links available, for example if you have concerns or needs for accommodation.

We hope that all of us in the CPSC 436I also create a welcoming, respectful, inclusive, and positive environment. While the course is unlikely to be stress-free (because learning and projects are hard work, and hard work is often stressful), we also hope you will not find the course overwhelming. You may have ideas, questions, or concerns about creating such an environment in the course; we may make a mistake; or we may just plain do something wrong. If any of that happens, please let someone know. Talk to one of us on the course staff if you’re comfortable or to someone from the link above (or the Head or Undergraduate Associate Head of the department) if you’re not.

5 Policies

5.1 Waitlist

Students on the waitlist will be considered in the order normally set by the CPSC department except that waitlisted students who do not attend a workshop or are substantially late will lose their standing and be removed from the course. (We will not move students from the waitlist from the official start of the term until after the first workshop to better enforce this policy.)

We may form project groups entirely from waitlisted students or by replacing students who dropped from existing teams, but we are unlikely to provide free choice of group to waitlisted students.

Planned update to policy for next offering after 2019S: Your availability for lab sections may also affect when you are moved into the course. (I.e., we need space in both lecture and a lab you can attend to add you to the course.)

5.2 Project Groups

Your course project will be completed in a group of three. All members of the group must be registered in the same lab section!

We are open to discussing groups of two or four in extraordinary cases (including where the our lab size just isn’t divisible by three!), but do not plan or expect to have a group size besides three.

5.3 Absences

  • Emergencies: If you’re ill or an accident or emergency occurs, contact the course staff and your group ASAP to let them know at least that you will be or did miss because of an emergency. Follow-up with the course staff with enough details for us to be able to accommodate your absence in terms of grades. Expect to put in a lot of work to make up the missed time!
  • Planned absences from workshops: If you will miss a single workshop in the term because of scheduling conflicts, communicate that to the course staff RIGHT AWAY and by at least a week before the add/drop deadline. We may be able to accommodate that. Also be sure your group knows once you’ve formed a group.If you will miss two or more workshops, drop the course. That’s the equivalent of missing four weeks of lecture in a regular course that has mandatory lecture attendance and is NOT ACCEPTABLE.
  • Planned absences from labs: If you have to miss a small number of labs over the term for good reasons, we should be able to accommodate that. Be sure to let us and your group know in advance. If possible, we may want you to attend the other day’s lab.
  • Planned absence from final presentations on August 10: Treat this like missing two or more workshops (as discussed above) or a course’s final exam. You may need to DROP THE COURSE.

Contact us privately on Slack (preferred) or at cs-436i@ugrad.cs.ubc.ca in all of these cases.

5.4 Late Submissions

For all course components, if you have extenuating circumstances, contact us privately on Slack (preferred) or at cs-436i@ugrad.cs.ubc.ca ASAP, ideally in advance, and we will try to handle the situation empathetically, reasonably, and respectfully.

A few components have specific additional rules:

Individual Assignments:
Individual assignments are graded by demo. As a result, managing late assignments is rather burdensome! We do allow a single late submission to be graded by demo at the next Saturday workshop (last repo push Friday night) with an ostensible 20% point deduction for being late. If you need to take this option, you must contact us privately and reasonably promptly so we can plan for the late demo.However, note:

  • The 20% point penalty is just to disincentivize being late. We expect to waive it if late submissions don’t get abused.
  • On the other hand, if you are late more than once, we may impose additional penalties or disallow further late submissions. If the logistics of late assignments prove too challenging, we may stop accepting late assignments. 🙁
Scrum reports:
We do not accept late Scrum updates. Instead, update us on where you are when the time comes for the update!(We’ll allow a reasonable grace period. If your computer was hit by a bus with the flu, please get to a library branch or UBC lab as soon as you’re able and post your (rather exciting) update!)
Final presentations:
It would be logistically challenging to consider late final presentations and impossible to consider them fully. Try to arrange, even in emergencies, that someone on your team can handle the presentation. Of course, contact us in case of emergencies!

5.5 Collaboration and Academic Misconduct

Our course builds on the department’s academic integrity statement with additional rules designed to create a professional but collaborative environment.

  • For group submissions:
    • Group submissions are the joint effort of your group. We place no specific limits on your collaboration except where we explicitly ask you to document and discuss it (Scrum updates, peer evaluations, individual components of presentations/reports, etc.). Collaborate productively so that everyone learns!
    • The majority of your project should be yours, as a group. However, we encourage you to find help and resources, as you would in a professional setting!Where you use or adapt existing code, you must cite it and be cognizant of its license.Where you get help from others, you must acknowledge that help. (This is especially critical for classmates, as it may benefit their participation grade!)Citations/acknowledgments should be in a clear section in your main README.md, in your license (if you have one!), and repeated locally where you used the code/help.
    • Critically, be able to justify and explain your design: no piece should be obscure to your group as a whole, and little should be obscure to any individual team member.
  • For individual submissions:
    • (2019S: Applies to all assignments starting with Assignment #2:) Keep your repository for your individual assignment private until after the assignment’s deadline, at which time change it to public for grading purposes.
    • Except where a tutorial used for the assignment guides you to do so, do not copy-paste code. Ask for help only from course staff or in “public venues” from fellow students: during lab or workshops or on public Slack channels.Otherwise, ensure you follow the group submission guidelines for citation and acknowledgment!
    • Critically, be able to justify and explain all of your design.

We hope these rules encourage collaboration that helps you learn. Please inform us if you find they are imposing unreasonable limits on your work!

5.6 Privacy, Online Systems, and Your @ugrad.cs.ubc.ca E-mail Address

As noted in the section on required materials, we will require you to register with a variety of web-based tools that may be hosted outside Canada. In some cases, we may register you directly for such services using your @ugrad.cs.ubc.ca email alias (as listed in https://www.cs.ubc.ca/getacct).

Thus, we want to remind you to keep your @ugrad alias private, just as you would any other account information. If you choose not to keep your @ugrad alias confidential, please note that UBC will proceed on the assumption that you do not object to the services we use potentially identifying you personally, and that you are consenting to the storage of personal information on their servers outside Canada.

6 Being Prepared

6.1 Before the Term

No one is expected to know the material in this course before you start the course. If you know none of the tools/skills we’ll learn this term, that’s OK; indeed, that’s the point!

However, we also expect that registrants will have a wide range of pre-existing skills. That means someone can probably help you with whatever problem you run into. USE our Slack channel to ask for help, and help others as much as you can!

6.2 Keeping Up During the Term

This is a project course with extremely hands-on workshops and labs. Be sure that you do the required preparatory work before each workshop (except the first)—which often includes fundamental steps like installation—or fall immediately behind.

Also, be sure to manage progress on your project and communication with your team. Letting work slide to the end of the project will have a tremendous negative impact on your health, well-being, and grade. Letting communication or teamwork issues slide in your group can cause the same. We’ll try to use regular code reviews to give you an opportunity to flag these issues to us and to yourselves.

Please ask us for help when you need it!

7 Required Materials/Registrations

There is no required textbook for the course. However:

  1. It may be difficult to complete the course successfully without your own computer. Many of the resources we use are cloud-based; so, lab, library, and other public computers may suffice, but you’ll need to be very careful with your time and planning.
  2. We will require you to register with and use various online resources that may only be available on servers outside Canada. If this is an issue for you, please raise it with the course staff immediately by the end of the first workshop.

For a rundown of likely tools and systems used this term, please see the course course schedule.

8 Communication

Most course communication will be face-to-face (in workshops, labs, and your team meetings), via our course website, on github or the departmental bitbucket server, or on Slack.

Slack is an industry-standard communication tool for teams, and learning to use it is a course goal! Indeed, participation on Slack will factor into your participation grade for the course. As a rule, we prefer even private correspondence to go over Slack. (You and your group may have a primary Slack point-of-contact on the course staff assigned to you.)

However, Slack does store information on non-Canadian servers. So, if you wish to contact the course staff on a sensitive or private topic, please e-mail cs-436i@ugrad.cs.ubc.ca.

We may also occasionally communicate with you via your @ugrad.cs.ubc.ca e-mail alias or the e-mail address registered for you at the UBC student service centre. Be sure to check both addresses or forward them to somewhere you check.

Finally, we may require some additional communication mechanisms as the term goes on, such as LinkedIn.

9 Grade Components

Course components are weighted as follows:

Assignment type Weight Comments
Individual Assignments 30% 6 assignments @ 5% each
Final project 50% final submission + presentation/demo, design/code reviews
Participation 11% Scrum-style feedback, lab/workshop/Slack participation, etc.
Leadership/Teamwork 9% Primarily based on TA/teammate evaluations; mid- and late-term

Notes:

  • In cases of low contribution, the leadership/teamwork mark may also impact the final project mark. (We expect all team members to pull their weight.)
  • In extreme cases of low participation, we may increase weight on the participation mark substantially. (We expect everyone missing a workshop to discuss the situation—ideally in advance—with the course staff. We expect no one to miss more than a single workshop without extensive consultation and perhaps dropping the course.)
  • The course staff reserve the right to modify these weights (but anticipate at most small changes).

Note that you must pass the average of the individual assignments to pass the course. (Students who fail the individual assignments will receive as their course grade the minimum of their earned grade and 45%.)