University of Alberta
Cmput 201 - Practical Programming Methodology
Winter 2001

______________________________________________

 Contents 
1 Course Information (including important dates)
2 Course Texts
3 Course Outline
4 Lecture Notes
5 Labs
6 Assignments
7 Evaluation Mechanism
8 Policy on Collaboration and Cheating
9 Miscellaneous Matters
10 Revision Information
______________________________________________



  1. Course Information

    Sections and Locations:

    Section Instructor Time Location
    B1 Marsland TR 12:30-13:50 CSC B-10
    X10 Beck T 18:30-21:30 BUS B-28
    Note: The labs are located in CSC, which is the new Computing Science Laboratory Facility, located behind Athabasca Hall.

    Instructors:

    Instructor Section Office E-Mail
    Tony Marsland B1 CSC 243 tony@cs.ualberta.ca
    Bob Beck X10 GSB 157 beck@bofh.ucs.ualberta.ca

    Important Dates:

    Section B1
    Section X10

    Teaching Assistants:

    Name E-Mail Lab Location
    Ernesto Novillo
    Head TA
    ernie@cs.ualberta.ca
    Greg Girczyc gregory@cs.ualberta.ca H01 Mon 1400-1650 CSC 159
    Matt Olson olson@ugrad.cs.ualberta.ca H02 Wed 0800-1050 CSC 159
    Kai Tan cavalier@cs.ualberta.ca H03 Wed 1100-1350 CSC 159
    Curtis Schofield schofield@ugrad.cs.ualberta.ca H04 Thu 0800-1050 CSC 159
    Inna Shekhtman inna@cs.ualberta.ca X11 Mon 1830-2130 CSC 159
    Greg Bell bell@ugrad.cs.ualberta.ca X12 Thu 1830-2130 CSC 159

    Note: new TA's get support for their labs from experienced TA's. Please report any problems or praises about labs to the head TA and your instructor.

    Contact:

    The best way to contact your instructor or TA outside of the lecture or lab is via email. In general we will not be having regularly scheduled office hours, but can answer questions via email, or arrange appointments if necessary. The use of email is the most efficient use of both your time and ours.

    The course home page is http://ugweb.cs.ualberta.ca/~c201.

    The course news group ualberta.courses.cmput.201 is one of the best ways to ask questions, since it is monitored by the instructors, the TAs, and other members of the class.

    To access the the newsgroup from off-campus you must first make your web browser recognizable by the CNS proxy server. That web page tells you not only how to set up your browser, but also how to authenticate yourself using your CNS ID and password.

    If you have problems with machines etc., contact the Computing Science Lab Admin people at labadmin@cs.ualberta.ca. Also, if you do not yet have a computing science undergraduate UNIX ID, you should go to Lab Admin in CSC 1-47 as soon as possible. You will not be able to do the labs or assignments if you do not have an ID.



  2. Course Texts

    There are many good (and many more bad) books on C, C++, and Unix. These are the ones we have ordered for the course, but if you have a trusted friend who recommends another text, by all means go ahead and use it. These texts will be used as references, we will not be lecturing from them.

    Books for Section B1 are:

    Books for Section X10 are:

    There are many other references and suppliers, some of which are described here.



  3. Course Overview

    Software Engineering is the discipline of Computing Science that involves the analysis of the information processing needs of individuals and organizations, and the development of software solutions to these needs with due consideration of cost, reliability, suitability, ethical factors, and social consequences.

    There are three broad subject themes which combine to form Software Engineering:

    1. Technology - the "theory in practice" issues of specifying and implementing systems and applications

    2. Communication - the clear and precise communication of ideas among people

    3. Management - organizing activities and people to accomplish the project

    These themes are supposed to be practiced in a professional manner with due consideration of cost, reliability, suitability, ethical factors, and social consequences. Our vision of the course sequence CMPUT 201, 301, 302, 401, 402 is that these three themes are interwoven throughout the courses, and that they are seen early, often, and practiced at increasing levels of complexity. Cmput 201 is just the first course in this process.

    The main theme of CMPUT 201 is programming to a well defined interface. In CMPUT 201, one uses components as black boxes that have an interface, builds components that are supposed to implement a given interface, and uses tools to do this effectively. This theme is exercised in the context of the C and C++ languages.

    In terms of problem domain, CMPUT 201 focuses on the manipulation and transformation of text (as contrasted to graphics). In terms of techniques, it focuses on low level language issues such as: how is data stored and represented, how is memory managed, how are pointers used, what is the call stack, how is an object stored. In terms of architecture and design, it concentrates on simple architectures, and students construct components that fit into the architecture.

    Students in CMPUT 201 must learn to clearly communicate the specification and rationale for an interface, and the design of their implementation.

    In terms of languages, this course uses C and C++. But these will not be taught as distinct languages, as has been done in the past. Instead, we will be using C++ from the beginning, and treat C as a subset (or dialect) of it. C++ will be C, plus objects, plus additional ways of doing memory allocation and stream input/output, plus a difference in perspective.

    A rough summary of the content in the course is given by the following table:

    Technology:
    • Low level notions: memory layout and allocation, addresses, call stack, stack frames, context
    • Process behind execution: pre-processor, compiler, linker, loader.
    • Programming to a well defined interface.
    • Components as black boxes with interface, and building components to implement a given interface, information hiding and separation of concerns.
    • Basic OO notions: object=state+identity+behaviour, class=classification of objects, reuse via containment and inheritance, principle of substitution.
    • Crucial details of C/C++
    • Simple architectures of a typical application: file-centric and database-centric applications.
    • Text manipulation and transformation
    • Tools: compiler and its preprocessor, make, CVS source version control, debuggers, profilers and related techniques.
    Communication:
    • Interpret ambiguous instructions, clarify via questions, and make reasonable assumptions.
    • Clearly communicate the specification and rationale for an interface, and the design of the implementation.
    • Produce documentation appropriate to the intended use of the product.
    Management:
    • How organizations are structured in real life.
    • The spiral problem-solving model.
    • Plan at the task level, with a 2 week horizon, working within the structure and limitations of the assignment.
    • Single student assignments or mini-projects involving 1 or 2 students per team.
    • Incremental development and submission of assignments.



  4. Lecture Notes

    Individual instructors schedules and course notes can be accessed through these links. Feel free to look at the notes for the other sections.

    Instructor Link
    Marsland Section B1 Notes
    Beck http://bofh.ucs.ualberta.ca/c201/
    Some notes from previous sections that you may find useful are here.



  5. Labs

    Because of class format and differing styles, the schedule and order of the material will vary somewhat between instructors. However, the labs are common to all sections:

    Week Date Lab
    Link
    Topic
    1 Jan 8 none but make sure you have a CS UNIX ID
    2 Jan 15 Lab 0 Unix Basics
    3 Jan 22 Lab 1 More Unix, CVS, Makefile for Assignment 1
    4 Jan 29 Lab 2 Strings and Memory in C
    5 Feb 5 Lab 3 More Complex C Programs and Debugging
    6 Feb 12 Lab 4 Memory, pointers, and arrays
    7 Feb 19 none Reading Week
    8 Feb 26 Lab 5 Function pointers
    9 Mar 5 Lab 6 Introduction to C++ Objects
    10 Mar 12 Lab 7 Templates
    11 Mar 19 Lab 8 Introduction to the Standard Template Library
    12 Mar 26 Lab 9 Extending C++ Classes
    13 Apr 2 Lab 10 Polymorphism and Virtual Functions
    14 Apr 9 none  

    A previous TA wrote down some helpful hints for the labs, they are here.

    Note: From time to time the labs are revised. Ignore solutions from previous semesters.



  6. Assignments

    Assignments will involve technology, communication, and management. They will not simply be the writing of programs. Part of each assignment is developing the plan to carry it out. Each assignment will have a requirements specification, which may require further clarification. Each assignment will require communication (test plan, architecture description, etc.) Each assignment will require design and implementation of one or more programs.

    You will have to use CVS (the Concurrent Versions System) to store your source files as you work on each assignment. This will be explained in Lab 1. Each student will have their own individual repository, that can also be viewed by the instructors and TAs.

    We expect assignments to be done incrementally (using management techniques we will discuss in class). That is, each assignment will be done in a number of steps (each step submitted via CVS), each step progressing toward the final solution. We will be observing your progress, especially your log entries as you proceed toward your solution. The logs will be taken into account during marking.

    Assignments will be marked by your lab TA. This will alleviate the frequent problem of not being able to find the person who marked your assignment in order to ask questions about it. Also, the hints that you get from your lab TA about the assignment will have a greater chance of being consistent with the marking of your assignment.

    Assignments 1 and 2 must be done individually.

    Assignment 3 is longer. It will be done in teams of 2 or 3 (your choice) students, who must be from the same lab section, that is, have the same TA.



  7. Evaluation Mechanism

    There is no mid-term examination in this course. Instead there will be three quizzes of 25-30 minutes in duration. Each quiz will be held in a lecture period. The actual lecture will start immediately after the quiz.

    Your final mark will be based on your term work, weighted as follows:

    Activity Weight
    Laboratory Work (10; equally weighted) 10%
    Assignments (3; weighted 7%, 10%, 14%) 31%
    Quizzes (3; equally weighted) 24%
    Final Exam 35%

    Note: In order to complete the course and receive a grade, you must obtain more than 50% of the laboratory component marks.

    Marks Posting: When ready, you may be able to examine your marks via http://ugweb.cs.ualberta.ca/~c201/marks/ or via Section B1., as appropriate.

    Your final grade will be based on our interpretation of the 9 point grading system as defined in Section 23.4 of the Academic Regulations. We do not use a pre-defined function of your final mark to compute your final grade, but instead use our judgement of how your mark reflects mastery of the course material. We believe that this produces a fair evaluation, and our extensive past experience supports this.



  8. Policy on Collaboration and Cheating

    We assume that students are familiar with the University Regulations and Information for Students, especially with the Code of Student Behaviour (Section 26 of the UofA Calendar).

    Except as described on certain assignments, all work is to be done individually. If work is handed in where, in the opinion of the lab instructor and/or one of the lecture instructors, it is too similar to have been done individually, a grade of 0 will be assigned for that work to all parties in the course that are involved. In such a situation, the individuals who are involved will be notified of this action by email sent to their Unix account. At that time, the individuals should contact the lecture instructor to discuss the matter, especially if they feel the action is unwarranted; contact must be within 48 hours of the sending of any such messages. Comparison of work will not be limited only to work handed in during this term. If it is discovered that work handed in is excessively similar (using the above criteria) to work handed in during a past term, not only will the above penalties apply, but the students in this course that are involved in this will be reported to their Dean. In such a situation, "similarity" will be considered a transitive relation (ie, all students in the course whose assignments are similar to one another's, will be reported to their Dean). The email sent to the student's Unix account will be considered "discussion" of the matter. Failure by the student to reply within 48 hours after sending of the message will be taken as a refusal on their part to discuss the matter further.

    Although some students taking CMPUT 379 doubt if they can complete all the assigned work on time, occasionally a few go furhter and break the Students Code of Ethics. In recent years the Dean of each Faculty has dealt increasingly diligently with any cases that arise. Penalties are severe (perhaps a 1F in the course and an 8-month suspension). Given that you learn best by doing, we believe that it is in your best interests NOT to replicate the work of others and submit it as your own. This is easy to check for, since the instructors are authorized to use automated techniques to ascertain the authorship of any piece of submitted work.



  9. Miscellaneous Matters

    Students who require accommodations in this course because of a disability affecting mobility, vision, hearing, learning, or mental or physical health must discuss their needs with Specialized Support and Disability Services, 2-800 Students' Union Building, 492-2281 (phone) or 492-7269 (TTY).



  10. Revision Information

    Contact Tony Marsland, tony@cs.ualberta.ca, about problems with or suggestions about this document.

Copyright © 1999, University of Alberta. This document was produced using the Apalon markup language, developed by the Software Engineering Research Lab, Dept. of Computing Science, University of Alberta, Edmonton, Canada. Apalon is implemented in Perl, http://www.perl.com. Every computing scientist should know Perl.