This is the course outline for COMP206 in Fall 2018 term. Welcome to the course!
COMP 206 - Software Systems is a course that teaches important aspects of low-level programming that are crucial to creating pieces of software that an interoperate across different computers, different types of devices, and online across the world. We study these topics conceptually as well as through hands-on creation of software in the C programming language. By the end of the course, you should have a strong ability to program in C generally. More importantly, you should be able to “Think in C”, which is often a helpful way to get insights on the way that operating systems and more recent programming languages work.
- Become familiar with common challenges in creating software systems and best-practice solutions
- Understand how software runs on the Linux operating system, including the structure of a running process, scheduling, user and file permission and networking
- Experience implementing software system elements using C programming language
- Experience setting up and maintaining a software system with Linux tools, Github and CMake
- Reasons for being of software systems.
- Examples and history.
- Study of a modern OS
- Linux operating system, POSIX, standard Linux tools
- Aspects of system software in C:
- Input and output to files and terminal
- Libraries and linking
- Memory allocation
- Pointers
- System calls
- Socket communication
- Multi-process software systems - synchronization
- Web-based software
- Case studies and example problems
David Meger: Office McConnell Engineering 112 N (north wing)
Office hours: Wednesdays 1pm - 2:30pm and Fridays 9:30am - 11am
Email: david.meger@mcgill.ca (please try My Courses Discussion first for Assignment queries)
The TAs will be offering guided tutorial sessions directly targetted to each assignment, as well as weekly office hours. The tutorial schedule will be updated throughout the term as we schedule more sessions, so check back here to find out the latest.
Current Tutorial Schedule:
- Tutorial on Linux/Shell with target on Assignment 1:
- Friday 12:30-2:30pm Trottier 3120.
Office Hours Schedule. Each office hour specified will be given every week in Trottier 3090, until Dec 14th, 2018, except when McGill is closed for official holidays or the election):
- Mondays @ 3pm
- Tuesdays @ 2pm
- Wednesdays @ 10am
- Thursdays @ 10am
- Fridays @ 1pm
When possible, please try to use the My Courses Discussions to ask questions, since there everyone can see the response and share the information. In case you need to mail the TAs directly, they can be reached at:
- Prabhjot Sandhu: prabhjot.sandhu@mail.mcgill.ca
- Juan Yao (Justin) Li: juan.y.li@mail.mcgill.ca
- Vishal Jain: vishal.jain@mail.mcgill.ca
- Deven Parekh: deven.parekh@mail.mcgill.ca
- Zhaohui Su: zhaohui.su@mail.mcgill.ca
- Yuqian Zhao: yuqian.zhao@mail.mcgill.ca
- Xoey Zhang: xoey.zhang@mail.mcgill.ca
- Olamilekan Fadahunsi: olamilekan.fadahunsi@mail.mcgill.ca
- Anirudha Jitani: anirudha.jitani@mail.mcgill.ca
- Yash Patel: yash.patel@mail.mcgill.ca
- Aayushi Kulshrestha: aayushi.kulshrestha@mail.mcgill.ca
- Assignments (5): 40%
- Online Quizes (5): 10%
- Midterm Exam (1): 10%
- Final Exam (during official exam period): 40%
Assignment deadlines are strict, however we will count the best 4 out of 5 marks, so you can choose to skip one during the term in case of scheduling conflicts. Quizes are given online through My Courses and we will also count the best 4 out of 5.
Exemptions (not extensions) are possible for cases of medical, religious or family needs that prevent participation in some assesment (other than the final).
There is no required book for this course. Provided course notes and slides will be the core method for learning and studying the material. We will often point to useful resources online and sometimes even give assigned readings. In case of wanting additional background, each of textbooks can be helpful, in order of decreasing relevance:
- The C Programming Language, 2nd Edition by Kernighan and Ritchie. ISBN: 01311036282.
- Software Systems by Vybihal and Azar. ISBN: 978-0-7575-5727-9
- Learning the Unix Operating System by Jerry Peek, John Strang, and Grace Todino
- C for Java Programmers by Tomas’s Muldner. ISBN: 0201702797
COMP 206 is meant to be an introductory course to one of the most important areas of CS, and indeed one of the most important skill-sets that people will use to influence the world in our lifetimes. Our goal is to make this content equally accessible to students of all backgrounds and we work to pro-actively acknowledge and address any bias that may occur during the term. Equal treatment of students from every gender, race and orientation is a top priority. We openly welcome suggestions on how to improve inclusion, by contacting the TAs or instructor either with your name or anonymously.
The midterm and final will be closed book, with a one-page crib sheet (double sided) allowed only and no calculators. The exams will be a mix of multiple-choice and written answers testing both the basic concepts of the course and the ability to create programs that exercise this knowledge. No make-up exams are possible. In the case that you cannot write a midterm, with supporting documentation, the midterm weight can be instead moved to the Final Exam. All of the TAs and instructor are humans (for now) and mistakes in grading can happen. Re-grading requests should be made first to the TA who marked the work. The request should include an email explaining where you think the confusion or error was made and any additional evidence required for re-marking.
COMP206 is one of he most programming intensive courses in our undergraduate program. While we will have written tests that ensure you know the material, the real intention of the course is to ensure you have the skills to write effective Software Systems yourself. These skills are needed in the workplace and in research to help you change the world and earn a good salary.
In order to get the experience and develop your own Software Systems skills, you must turn in programs that you have completed yourself. You can get tips and ideas from myself, TAs and other students, but you must do the software development yourself, which means typing in all of the code in a way you understand, running and debugging it and ensuring it passes the specifications given in the assignment document.
- Copy/pasting directly from the code of other students.
- Sending the assignment to any paid or free service, either local or online for someone else to solve.
- Giving your code to others.
- You can copy/paste from the web if you find resources there, since that’s exactly how many working programmers operate.
- You can take notes or phone images of code that the instructor or TA give in office hours. We plan to be very helpful there and will often give really good hints on how to set up the solutions, so we do recommend coming. We will also be fair and ensure you’re left with enough parts to solve yourself afterwards.
- You can share notes taken at a TA session with other students, as long as you do not include your own code that you have written afterwards.
I hope everyone will follow these rules and we have a great term. We will be using automated tools and our own manual checks to ensure this is the case. In case of any detected plagiarism, we will proactively report through McGill’s academic disciplinary procedure.
As is McGill’s policy, all work can be submitted in either English or French.