[Skip Navigation] [CSUSB] / [CNS] / [CSE] / [R J Botting] / [CSci202] / syllabus
[Text Version] [Syllabus] [Schedule] [Glossary] [Resources] [Grading] [Contact] [Question] [Search ]
Notes: [01] [02] [03] [04] [05] [06] [07] [08] [09] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]
Labs: [01] [02] [03] [04] [05] [06] [07] [08] [09] [10]
Tue Apr 19 08:36:11 PDT 2011


    CSE 202 Computer Science II Spring 2011

      More information is in the Generic Syllabus [ syllabus.html ] and on the World Wide Web (WWW) site for this class [ http://cse.csusb.edu/dick/cs202/ ] You need to find these as soon as possible. Check them for updates several times each week.


      Computer science is based on creating computer software that solves people's problems. But it is also about predicting how pieces of software and hardware work together. CS202 is the second class in the core of all the Computer Science majors. It covers the second half of the ACM CS1 and the first part of the ACM CS2. This class is required by all CSE qualifications. This class is a prerequisite for CSE320, 330, 372, 375.


      All tests, lectures, and work assume you have passed a class equivalent to our CSE201. You need to have a Satisfactory ELM. Previous lab experience with UNIX is very helpful.


      You will develop problem solving skills used in Object-Oriented programming and software engineering. You will use a languages, operating system, and libraries that (1) are popular in industry and (2) force you to think about what you are doing. You will learn about new control structures and new types of data. The course includes the Unified Modelling Language, multi-file programming, data abstraction, encapsulation, templates, inheritance, polymorphism, and the standard C++ library.


      Required Text: "Big C++" by Budd & Horstmann, 2nd Edn., ISBN 978-0-470-38328-5. It should be in the book store. Used and cheap copies should be OK, but do not buy older editions.

      Reference Works: My WWW site has many useful pages. This CS202 site has a search and many "Frequently Asked Questions" for you to use. My website has a detailed late draft specification [ ../c++std/ ] of the C++ language. C++ books in the library are in the QA76.73.C153 section. A former CS202 student recommends "Conquering C++ pointers" by Robert J. Traister, ISBN 0-12-697420-9. Fowler's "UML Distilled" (3rd Edn.) is an excellent reference in practice. If you haven't used Linux much then Daniel J Barrett, "Linux pocket Guide," O'Reilly Feb 2004 $9.95 ISBN 0-596-00628-4 is an inexpensive and useful reference. Also go to the Computer Science Club's Linux sessions. For more try "Linux in a Nutshell" and "Learning the VI Editor" both from O'Reilly & Associates, Inc.


      You will study the text. You will do much supervised and independent programming. The more time you spend writing and testing code in the laboratory or on your own machine, the better you will get, and the less confusing the material in the book will be. You will do independent offline work (mainly reading and thinking) as well. Some of this work is submitted for grading. Note. I can't tell you how much time a project work will take: good programmers produce code 5 times faster than bad ones!

      Meetings (40pts=8%, 2 pts per session)

      Attend all class meetings from beginning (1 point) to end (1 point) or make up the work yourself. Exception - medical and other documented emergencies. *Note: mobile phones and wireless devices -- Turn off audio alarms. Do not use wireless devices during class time.

      Assigned Work (20pts=4%, 1 pt per session)

      Start with the web page/study guide. Finish by handing in a single even numbered review question plus answer. Study the part of the text assigned in the schedule. Answer as many of the review questions at the end of the chapter as you have time for. The more you do, the better your scores in quizzes, projects, etc. will be. Hand in one question+answer at the start of each class.

      Quizzes(100pts=20%, 120 pts Max)

      There will be four quizzes each worth about 30 points each. Points above 100 will be used to make up points lost before the final upto a total of 300. See the schedule for dates and topics.

      Quizzes will be closed-book and supervised. No wireless communication! You should prepare a 11.5in><8in sheet of notes to use in each test. You may use a calculator, but not a computer. A computer is any device that lets you compile and run C++ programs or browse the web. The quizzes and final will require you to (1) read, interpret, correct, and complete pieces of C++ programs, and (2) write correct C++ code.

      Labs(100pts, 20%, 10pts per lab)

      You can only attend the lab session that you have enrolled in. The lab instructions will be on the WWW site. I may change them until just before the class just before the lab. We will give you grades/scores for each lab by the end of the lab. Scores vary from full credit(A=10 points) down to zero. Seven (7) points (a D) will be given for being present, working hard, and making demonstrable progress during the whole lab period.

      Comprehensive Final(200pts, 40%)

      The final exam will be on June 15th from 2pm to 3:50pm. Take note of the date and the time: 2-3:50pm.

      It will go over material covered in quizzes, labs, projects, lecture/discussions, assigned work, and notes. The same rules apply as for Quizzes above.

      Project Work(40pts, 8%, 10 points per project)

        You will be writing four(4) required programs (see the schedule ) based on even numbered programming exercises in the book. The programs must be your own work and unlike anybody else's. More details will be put on the WWW site.

        You can resubmit the first project only, and only if it scored less than an A. To resubmit hand it in with the second project.

        It is better to give me anything on time than give me a perfect project late. Indeed I will reward perfect work handed in in the class before the deadline with a 5 point bonus.

        You can and should do the work on our systems. Either do them in a lab or via SSH ( [ ssh.html ] ). The labs are open whenever there is no class scheduled in them.

        Start Early and compile often! Aim to complete each project before the deadline because things go wrong. First think out a solution and roughly sketch it on paper. Start coding the program with a comment that has your name plus the number of the exercise. Add a short description of what the program demonstrates or does. Add the necessary "#include"s and an empty "main" function and make it compile. Add a set of tests of the classes and functions you need -- and compile it and watch it fail. Then add missing stuff or fix broken parts until all the tests pass. Then tidy up (refactor).

        If a project demands several files then each file must identify who you are, the name of the file, and what its purpose is.

        CS202 Project Requirements

        In a good software company, your bosses and colleagues want your work to be (1) on time, (2) correct, and (3) understandable. Late or confusing work is penalized. So, if the work in this course is late, it gets no points and if I can't understand it, then it loses points. Good projects also meet academic standards: (1) They show the skills and knowledge covered in the course at the time. (2) They must not pirate other people's work. Warning: I'm good at spotting errors and borrowed work. I have tools that will find anything that you download from the web.

        Work must be on time ! High quality work that is delivered early (the previous session) will earn a bonus. Partial credit is given for incomplete work including programs with documented errors. You won't lose points for missing features or bugs, if you document them in the code. (2) The code must explain what it does and how it does it. (3) All copied code must be documented in comments.

        What to hand in: I want to read your code and know that it will run. Print it out, staple it and hand it in! No cover sheets, folders, etc. No test runs. Each file should have a comment with your name and a description of the project as a comment at the top. It should have more comments explaining anything complicated or buggy. Projects with classes need an UML diagram. This can be drawn by hand on the listing if the result is readable and good UML.

        The schedule lists some chapters. Pick one programming exercise from the end of one of these chapters. All earn the same score. However, I expect a simple project to be done better than a more complex one.

        Warning about projects and quizzes

        Several quizzes will ask you questions about the project you have just handed in. The score will depend on how well the answers match the project.

        Project Hints

        (0) Always Seek Knowledge (ASK): Come to see me with questions about what is needed before you start -- "dumb questions are better than dumb mistakes".

        (1) KISS: Do the simplest thing that could possibly work.

        (2) Iterate and Evolve: If in doubt, take any small step in a useful direction. If stuck, do something different, and come back later. If you are stuck in code, draw a picture. If stuck drawing, do some code. Take a break: go shopping, eat something, get some exercise, come to my office, etc.. Read & Think: WWW, the book, the Pfau library, the Internet, ... . Find a tutor in the learning center. Talk to a student who is doing a different project.

        (3) Unexpected bugs? Bring printouts of code to my office. Take it to any lab assistant or any CSE teacher. We like hunting bugs.

        (4) Spare time? Refactor the code -- reorganize and retest, one simple safe step at a time, so that it is easier to understand. Use the DRY="Don't Repeat Yourself" rule to make code better.

        (5) Stop at the deadline. Hand in what you've got.

        (6) Answer questions in the quiz on your project.

        How we will grade projects

        I read the program from beginning to end and then assign a letter grade and/or a score. As I read it I will mark up problems. An A(100%, 10 points) program identifies who did it what it does. It is clear that it does what it says it does. There are no spelling mistakes or grammatical/syntax errors. It shows that you have understood the material in the course up to that time. Any bugs are described in the code. A B(90%, 9 points) is like an A program but is not as clear and not as easy to understand. A C(80%) program still identifies who did it what it does. But it may not do what you think it does(bug) or may have other mistakes. A D(70%) program has undocumented errors, spelling mistakes, grammatical goofs, syntax errors, etc.. It shows that you didn't understood the material in the course up to that time. An E(60%) program is worse than a D but is still an honest attempt. I may have to use unlettered percentages for really bad work. An F(0%) program is either late or has some plagiarized material in it.

        To encourage being ahead of the deadline -- I will give a A+ to A projects that arrive the class before the deadline. This is worth 15 points! The extra 5 points are project bonus points and can make up for points lost in course work before the final.

      . . . . . . . . . ( end of section Project Work(40pts, 8%, 10 points max per project)) <<Contents | End>>


  1. accessor::=`A Function that accesses information in an object with out changing the object in any visible way". In C++ this is called a "const function". In the UML it is called a query.
  2. Algorithm::=A precise description of a series of steps to attain a goal, [ Algorithm ] (Wikipedia).
  3. class::="A description of a set of similar objects that have similar data plus the functions needed to manipulate the data".
  4. constructor::="A Function in a class that creates new objects in the class".
  5. Data_Structure::=A small data base.
  6. destructor::=`A Function that is called when an object is destroyed".
  7. Function::programming=A selfcontained and named piece of program that knows how to do something.
  8. Gnu::="Gnu's Not Unix", a long running open source project that supplies a very popular and free C++ compiler.
  9. mutator::="A Function that changes an object".
  10. object::="A little bit of knowledge -- some data and some know how". An object is instance of a class.
  11. objects::=plural of object.
  12. OOP::="Object-Oriented Programming", Current paradigm for programming.
  13. Semantics::=Rules determining the meaning of correct statements in a language.
  14. SP::="Structured Programming", a previous paradigm for programming.
  15. STL::="The standard C++ library of classes and functions" -- also called the "Standard Template Library" because many of the classes and functions will work with any kind of data.
  16. Syntax::=The rules determining the correctness and structure of statements in a language, grammar.
  17. Q::software="A program I wrote to make software easier to develop",
  18. TBA::="To Be Announced", something I should do.
  19. TBD::="To Be Done", something you have to do.
  20. UML::="Unified Modeling Language".
  21. void::C++Keyword="Indicates a function that has no return".