Syllabus for CSC121
Computer Science I
IAI CS911
4 Credit Hours (3/2 Lecture/Lab)
Face-to-Face
Fall 2024
Harper College

SECTION
Section Time Days Room
002 12:30-13:45 MW H162 (lecture)
12:00-12:50 TR D258 (lab)

from Aug 19th to Dec 13th.

FINAL TIME

You will have your final during Wednesday and Thursday of finals week — Dec 11-Dec 12.

PREREQUISITES

MTH 070 (Plane Geometry) with a grade of C or better or Geometry Waiver; AND college-level placement in mathematics. (See here for more on Harper Math placement.)

(If you are unsure what background knowledge is expected, see this list.)

[it is recommended that you had a B or better in the previous class(es) to actually do well in this class — as this class is [typically] more demanding/challenging in time and intellectual difficulty]

TEXT

Volume I of Exploring C++: The Adventure Begins, James, OER, 2nd Edition, July '24 (or later) release

TECHNOLOGY

See Appendix A of your textbook for setup instructions of all software used in the course for Windows, macOS, Linux, and/or ChromeOS. Feel free to ask for help in any office hour or even a lab period if it's your laptop.

In addition to this site and Blackboard, we'll also be using two other sites during the term:

OTHER TEXTS/SITES
(you might find useful)

Learning Texts:

Reference Texts/Sites:

COURSE DESCRIPTION

The first in a sequence of courses for majors in Computer Science, Mathematics, and Engineering. Introduces a disciplined approach to problem-solving and algorithm development, in addition to an introduction to procedural and data abstraction. Covers: selection, repetition, and sequence control structures; program design, testing, and documentation using good programming style; block-structured high-level programming languages; and arrays, records, and files. IAI CS911

STUDENT OUTCOMES (The student should...)
  1. analyze problems and create algorithms for their solution.
  2. use proper design and documentation methodologies to write programs in a readable and stylistically pleasing way.
  3. list, describe, and utilize the flow control, procedural, and object-oriented constructs of a modern object-oriented language including exception handling.
  4. differentiate situations in which to use various types of data storage from simple intrinsic types to class types (standard library and self-designed) to basic containers (both 1D and of higher dimensions).
  5. differentiate situations in which to apply simple searching, sorting, and random number generation procedures — including their implementation.
  6. code algorithms in a modern object-oriented language using proper object-oriented design processes.
  7. use basic debugging skills to debug programs including assertions.
  8. design appropriate input data sets — for console or file implementation — to test the correctness of algorithms.

OBJECTIVE

To foster the student's understanding of the programming process. We will emphasize problem analysis and algorithm development while showing the importance of testing and documentation in generating well-crafted programs. The C++ programming language will be used.

In particular, we will study data types, variables, mathematical expressions, constants, input, and output in creating a main program. Then we will learn about some of the functions and data types provided by the standard library and how to use them to avoid 're-inventing the wheel'. (This will also prove to be our basis for learning object-oriented programming.) (We'll continue to pick up new library functions and data types through-out the remainder of the semester as well.)

Next we will study basic branching and repetition mechanisms for controlling the 'flow' of our programs. (We'll return to these topics later for some more depth, clarity, and enhancement.)

Then we will study the use of functions to break a program into smaller units. Each function 'unit', we will find, is more manageable, easier to debug, and easier to re-use. It is just as with the standard libraries' functions, but we get to design and write them ourselves!

After that we will study how classes (object-oriented programming) can be used to improve our handling of complicated data by making it more natural for other programmers.

And finally we will learn to use vectors to improve our handling of large amounts of data.

EVALUATION
Activity Percent
Tests41 %
Projects23 %
Labs18 %
Participation Activities 18 %
Total100 %
Grade Percentage
A 90-
B 80- 90
C 70- 80
D 60- 70
F 0- 60
 

Also note that you cannot earn a C in this course without having shown at least a 70% competency on each and every topic covered during the semester (not a 70% average over all topics, but 70% on each topic). (See main page for your course for a topic list.)

Participation activities refers to group activities (done during lecture time — ideally without a computer) and some sort of reading quizzes (for both book readings and online notes).

The labs and projects portions of your grade will come from the three portfolios you will be handing in (see below). Tests will be done in lecture time — not take-home.

TESTING

Lecture tests consist (most often) of true/false, fill in the blank (rarely a word list), short answer, and hand-execution/debugging of code. (Hand-execution is when I give you code and user input and you tell me what shows on screen and/or is stored in variables. Hand-debugging is when I give you code and you tell me what errors it contains.)

Lecture tests may also include hand-coding of small (5-15 line) segments of code. Multiple choice can also occur, but all correct answers must be chosen (i.e. it isn't multiple guess). Finally, matching is a rare occurrence. (The online question sets make a pretty good sample of types and style of questions.)

Make-up exams (with a reasonable excuse — see participation), will be ALL essay and/or hand-coding/execution.

Also there will be tests and a cumulative final during the semester. This means that each test will be worth of your overall grade. (Yes, the final, although cumulative, is equal in weight to a regular test.)

PARTICIPATION

For the participation activities part of your grade, you'll have three categories split evenly from the 18% listed above. The first will be questions posed on the TopHat service. There will be two per lecture segment and 1-2 segments per actual lecture day.

The second category will come from topic questions in the KHP workbook (Navigating C++).

The last category will be any in-class activities we do. I only have one planned so far — a welcome activity to refresh you on lab procedures and software. But others may come up as I see how people handle different topics.

ASSIGNMENTS

When an assignment is given (i.e. placed on the web site), you can hand it in as soon as you are done for a review of its content. ('done' here means that you've made a reasonable attempt to start the program or answer the questions. You don't have to have it perfect before you hand it in. You can even hand in something you've merely outlined/flow-charted, if it is a complete enough outline.)

I will give the checked paper back to you ASAP so that you can make any needed corrections to it before using it in a portfolio (if you so choose). You can also hand papers in as many times as you like before the portfolio is due. (Remember that this corrections policy is good for EITHER of the online assignments: projects and labs.)

Finally, every assignment will also be rated (typically between 1 and 7) as to its difficulty (1 is quite easy, 7 is fairly challenging). These ratings will help you determine what (corrected) assignments you'd like to hand in for your portfolios. Also, labs and projects often have options which can be done that will increase the level rating of the assignment.

PORTFOLIOS

Three times during the semester, you will turn in what you consider to be your best work up to that point (since the previous portfolio). Collect together your best (corrected) assignments and hand them in as a portfolio. The portfolio must contain a certain total ratings value each of labs and projects and consist of only a certain total number of items. These totals will be mentioned in the portfolio announcement on the web page and/or during class. The announcement is purposely delayed until at least a week before the due date so that you will concentrate on doing and understanding and not meeting minimum requirements.

Any assignments you turn in that exceed the total ratings value for their category will be added to an extra credit pile for review at the end of the semester. This extra credit work will be added to some part of your grade where it will do the most good (typically projects or tests).

Example: If the projects section of a portfolio said the minimum ratings value was 16 and the maximum number of projects were 4, you could choose several different combinations of project ratings to satisfy these requirements. You might choose to hand in 3 projects which were rated 6. You might choose to hand in 4 projects rated 4. You might choose to hand projects in rated at 4, 6, and 7.

You might choose to hand in a 4, a 6, and 2 7's. If you did this, I might place either the 4, the 6, or either of the 7's on the extra credit pile (the remaining items already add up to more than 16). To avoid me picking, you can mark those items you wish to be extra credit with XC or EC or XCred or Extra Credit marked in plain large type/writing at the top.

See also the portfolio page for more information.

LATE POLICY

Due dates (on portfolios) are present for a reason. If you do not turn in your papers by the due dates given, credit may be denied. (Reasonable excuses may be accepted.)

For further information, please see the portfolio page.

TENTATIVE OUTLINE

(Horizontal rules in the table demark logical separations in topic matter based on level of difficulty and/or time.)

Week(s)   Book Location   Topic(s)
0  Chapter 1  Background
  Chapter 2  Starting Out thru Programming Design
  Chapter 2  Standard Libraries I
  Chapters 2 & 3  Standard Libraries II & Flow Control Basics
  Chapter 3  More Flow Control & Objects with the string class
  Chapter 3  Menus & Control Flow
  Chapter 4  Basic Functions
  Chapter 4  Advanced Functions
  Chapter 5  class Basics
  Chapter 5  Advanced classes
  Chapter 6  array & vector Basics
  Chapter 4.6  templates for Functions
  Chapter 6  Searching and Sorting Basics
  Chapter 6  Mixing classes with vectors
  Chapter 6  Multidimensional Processing
  Chapter 7  Basic File Manipulation
  Appendix B  Basics of Debugging

Always look for online notes to augment/amplify the book's information.

I reserve the right to change this syllabus with sufficient warning to you.