ICS 45C: Programming in C++ as a Second Language
Fall 2021
Course Reference

Instructor information

How best to contact me

I tend to be much easier to reach via email than any other way, so I would suggest using email to contact me under normal circumstances. As it turns out, I'm not in my office all that often — most particularly this quarter, when I don't expect to be physically on campus regularly — but I am connected online quite a lot.

When you write me an email, it's not a bad idea to be sure you're including enough contextual information in your email that I'll be able to answer the question: your name, your student ID#, and which course you're enrolled in are all good data points to include. Without things like this, it raises the likelihood that I won't understand the context of the question you're asking (e.g., "When is Project 1 due?" is a question that has a different answer in different courses of mine), which means we'll need an additional round trip to get the matter settled.

Office hours

I'll be offering virtual office hours via Zoom on Tuesdays and Thursdays from 8:00pm-9:00pm. You'll find a link in the Canvas course space.

If you require a conversation privately at other times, I'll do my best to accommodate your request, but we'll schedule those on an ad hoc basis; email me as a starting point and let me know what you'd like to discuss and what times you are available. With a total of about 500 students in two courses this quarter, I may not be able to accommodate every request, so I may also direct you to other places you can get help more quickly (such as the lab meetings with TAs and tutors, which I'll describe below), but I'll certainly try to accommodate requests that I'm best equipped to handle myself.

Course staff

In addition to me, this course is staffed by a number of folks in a few different roles. They are listed below.

Teaching assistants

There are three teaching assistants, who will share the duties of attending remote lab meetings, will serve as an additional source of assistance on your projects and via the Piazza online discussion board, and will be the primary point of contact with regard to the grading of the projects and reinforcement exercises.


Additionally, we have three readers, who will be tasked with grading projects and reinforcement exercises.

Lab tutors

In addition to the TAs, the following lab tutors will also be staffing the labs at various times, specified further below.

Course organization


This course will be administered in a virtual-remote format. What this means, chiefly, is that your physical presence on campus will not be required in this course at any point during the quarter, and that your virtual presence will not be required at any particular time, either. Lecture material will be delivered via pre-recorded videos, with the scheduled lecture times devoted to online question-and-answer sessions and other supplementary content (e.g., discussions about projects that you'll be working on) that will be recorded.

One-on-one help will be available via a combination of in-person and online lab meetings.

Required equipment

In order to participate in this course successfully, you'll need access to a few things. Given that we will not be meeting in person as a group this quarter, the most important thing is that we be able to communicate. For that reason, you will need the following.

If you won't have access to these things, there's not much of a workaround I can offer you, from a course organization perspective; if you can't communicate with us, we simply won't be able to offer you a beneficial remote course experience.

Where to go online

With only one-on-one in-person meetings available, the course will otherwise be organized around a few online sites and services.

Online decorum

It should go without saying — though the recent experiences of other instructors around the country tell me otherwise — that we expect a reasonable level of decorum within all of these online spaces at all times. While I won't be able to describe all the ways that you might misbehave, do be aware that we will not tolerate behavior that is offensive to others, or that disrespects others; just because you're online doesn't relieve you of your obligation to be collegial with one another and with course staff, and there will be repercussions when you do not meet that obligation.

Pre-recorded lectures

The lectures will be pre-recorded and will be available to officially-enrolled students via the Canvas course space for ICS 45C. My general plan is for each week's lectures to be available near the end of the previous weekend. Given the set of constraints we're all operating under, it's safe to assume that I'll fail to meet that requirement at least once this quarter; in general, if you don't see a video on the Canvas course space, it's because I plan to re-record portions of it, and haven't finished recording and editing it, so asking when it will be available will not make it be available faster; I'll appreciate your patience in advance.

Of course, you are under no obligation to watch the pre-recorded lectures, and we will not be measuring whether or not you do so. For the most part, the lectures will corresponding pretty closely with the Notes and Examples, as is usual in my courses these days. But it's hard to imagine you'll get what you came for without watching them, and I'll do my best to infuse them with the same spirit that I would if I were able to enjoy being in a large room with all of you.

Reinforcement exercises

Corresponding to the pre-recorded lectures will be a collection of reinforcement exercises, whose role is to help you assess your knowledge of each topic. Think of these as "Things you should expect to be able to do and/or explain if you understood this topic well," so they are a sort of measuring stick that you can use to gauge your understanding. They do contribute to your grade (see below), but also contribute to your ensuring that you leave this course with what you came for.

Like the pre-recorded lectures, these exercises will be released as they are available. Asking when these will be available will not make them available; they'll be posted when they are.

Question-and-answer sessions during lecture times

Since the lectures will have been pre-recorded, we'll have the lecture time available to us for the additional purpose of allowing me to answer your questions, add color to topics whose lectures you thought were unclear, and so on. So, during the scheduled lecture times, I'll be available in a Zoom session to which all officially-enrolled students are invited, during which you can ask general questions about lecture material, assigned projects, and whatever other course-related issues are on your mind. The one course-related thing I won't reasonably be able to offer during that time is individualized debugging help; for that, we'll have lab meetings (see below).

These question-and-answer sessions, too, will be recorded, for the benefit of those who are unable to attend on any particular day. Attendance is not graded, but we certainly recommend it.

Our lecture times are Tuesdays and Thursdays from 6:30-7:50pm, beginning on Thursday, September 23.

Lab meetings

While there are no scheduled lab sections in this course, we will be offering a combination of in-person and virtual lab meetings on a selection of days and times throughout the week, which provides you with a place to go to get individualized help on your projects and reinforcement exercises. The links to these meetings can be found on the Canvas course space.

During these times, some combination of TAs and lab tutors will be available to help you as you work through your projects. C++ requires an attention to detail that is uncharacteristically high, even for programming, so it will be handy to have a place you can go to get help; keep this on your calendar. You're free to come and go as you'd like within that time; there are no "sections" or other formal arrangement, and you do not need an appointment to attend.

The lab meetings begin on Wednesday, September 29. Times and locations are listed below. Zoom links for the remote lab meetings will be listed in the Canvas course space before the first meetings.

Days/Times Location TAs and/or Tutors
M 2:00pm-3:30pm ICS2 100 Jessica Souza (TA)
M 3:00pm-5:00pm ICS2 100 Rishab Dalai
M 5:00pm-7:00pm Remote (Zoom) Liqin Ye
Tu 12:00pm-2:00pm Remote (Zoom) Rishab Sridhar
Tu 2:00pm-3:30pm Remote (Zoom) Jessica Souza (TA)
Tu 8:00pm-10:00pm Remote (Zoom) Aiden Sui
W 10:30am-12:00pm ICS2 100 Benjamin Kuschner
W 12:00pm-2:00pm ICS2 100 Dien Nguyen
W 3:00pm-5:00pm ICS2 100 Rishab Dalai
W 5:00pm-7:00pm Remote (Zoom) Liqin Ye
W 8:00pm-10:00pm Remote (Zoom) Nathan Ng
Th 12:00pm-2:00pm Remote (Zoom) Rishab Sridhar
Th 2:30pm-4:30pm Remote (Zoom) Austin Truong
Th 4:30pm-6:00pm Remote (Zoom) Shashank Uppoor (TA)
Th 8:00pm-10:00pm Remote (Zoom) Aiden Sui
F 10:30am-12:00pm ICS2 100 Benjamin Kuschner
F 12:00pm-2:00pm ICS2 100 Dien Nguyen
F 2:30pm-4:30pm Remote (Zoom) Austin Truong
F 4:30pm-6:00pm Remote (Zoom) Shashank Uppoor (TA)
F 8:00pm-10:00pm Remote (Zoom) Nathan Ng

Ed Discussion

A course space has been created on Ed Discussion. You'll find a link to Ed Discussion on this course's Canvas page.

Within Ed Discussion, you'll be able to ask us (and each other) questions about course material, and can expect to see both course staff and students answering those questions along the way. It is our hope that this can be a useful resource to you as you're more physically isolated from each other than usual, and the course staff will be glad to be of service there throughout the quarter.

However, it's important to note that Ed Discussion is only a positive and productive tool if students use a certain level of etiquette and care in using it, so we'll be requiring that — and your grade can be negatively affected if you do otherwise. So what does that mean? In practice, it means a few things.


This course requires no textbook, as I will be providing a complete set of Notes and Examples covering every lecture this quarter.

Note that you might find a book that complements the lecture material and helps you fill in details that you missed while listening to me speak for eighty minutes, though I think the Notes and Examples section will generally be enough information for you to succeed. If you prefer a book (or online supplements of your own choosing) other than what I'm providing, that's generally fine, though do be aware that style and approach among practitioners of a programming language tend to differ, particularly with respect to a language as large and complex as C++. We'll be expecting you to follow similar conventions to what we're learning about in this course.

Accommodations for disabilities

Any students who feel that they may need an accommodation based on the impact of a disability should contact me privately to discuss these specific needs. Also, contact the Disability Services Center online or by phone at (949) 824-7494 as soon as possible to better ensure that such accommodations, such as alternative test-taking environments or note-taking services, can be arranged for you in a timely way.


Weights of graded artifacts

Your course grade will be determined from the weighted combination of your scores on each of five programming projects, a final project, and eight sets of reinforcement exercises, along with your online participation and decorum throughout the quarter. The weights of each of these are:

Online participation and decorum

While it is not our intent to measure your participation — in the sense that we won't be tracking whether you're watching the pre-recorded lectures, attending the question-and-answer sessions or lab sessions, and so on — we are reserving 10% of everyone's grade to use as a deduction for behavior that does not follow the decorum requirements described above. In other words, everyone gets that 10% unless their participation is problematic. My sincere hope is that no one will receive these deductions, but we do reserve the right to use them if need be.

(Note that the default is that everyone receives full credit on this measure, and you'll be notified if that changes, so no need to ask about what your participation/decorum score is; if you've received no notification otherwise, your score is 10 out of 10.)

Determining final grades

Course grades will be determined neither on a normal curve nor a straight scale. It is guaranteed that overall scores over 90% will receive an A- or better, scores over 80% will receive a B- or better, and scores over 70% will receive a C or better. However, the actual cutoffs may be lowered at the end of the quarter. In short, it is not my intention to fail half of the students, nor am I planning on giving only 2% of the students A's, but I prefer not to constrain myself with either a straight scale or a formalized curve.

Unforeseen circumstances may lead to changes

This course has been designed specifically for virtual-remote delivery, in a way that takes into account the potential for some uncertainty along the way. While we'll certainly do our best to leave these policies — as well as the general structure of this course — intact, it is possible that unforeseen circumstances amidst uncertain times may require us to make modifications along the way. If so, we'll make those modifications in a way that attempts to preserve the spirit of the course and its grading to the extent possible, and we'll notify everyone of any necessary changes as soon as we can.

Dropping the course or changing grade option

Through the end of Week 2 (Friday, October 8), you may drop the course by simply going to WebReg and dropping it. If you wish to drop the course after that date, you will need to use the Enrollment Exceptions system to request a drop; I do not have the final say over those, ultimately, as the Dean of the Bren School (and your major, if you are majoring in something outside of the Bren School) must approve them. It is not generally the case that an exception will be accepted simply because you're not doing well in a course, though extenuating circumstances are certainly considered.

Similarly, changing your grade option (to Pass/NotPass or back again) can be done via WebReg through the end of Week 2 (Friday, October 8), after which you must use the Enrollment Exceptions system to request the change. As with exceptional drops, you must receive approval from the appropriate Deans, and that approval is not guaranteed.

Academic honesty

The policy

As a student enrolled in ICS 45C, you are expected to know and follow the academic honesty policies of both the Bren School of ICS and the University as a whole. Please take a few minutes to read the policies, which can be found at this link.

All of your work on projects and reinforcement exercises is expected to be completed solely by you. Working in larger groups and/or sharing of code or solutions between students is not permitted. Note that "high-level discussion of course material for better understanding" is permitted and encouraged, but when it comes time to sit down and write code, that is expected to be done by you and you alone. All submissions are compared to one another using an automated plagiarism detection system. This system is extraordinarily good at finding similarities between submissions, even when there are superficial differences. (Note that we also compare your submissions to those submitted during previous quarters whenever one of these assignments was given during a previous quarter, so it is an exceedingly bad idea to turn in, or even refer to, code written by a friend of yours who took the course already.)

Since all of your work is expected to be completed solely by you, you will be held responsible even if you plagiarize only a small portion of someone else's work.

Academic honesty is a two-way street. Providing your code to other students for them to turn in as their own is not permitted any more than turning in someone else's code. Resist the temptation to give code to your friends "for reference." Based on my experience, I can say that your "friends" may very well betray you and turn it in, anyway, and then you'll have a lot to answer for.

Naturally, the Midterm and Final Exam are also expected to be individual efforts. Dishonest behavior during an exam will not be tolerated.

All violations of academic honesty policies will be reported to the UCI Office of Academic Integrity & Student Conduct (AISC) and will trigger an administrative procedure, which is described on their web site. Additionally (and at least as importantly), you can receive a course grade of F — as a number of students in my courses do, because of this issue, every quarter — without the option to drop the course to avoid the grade. A single documented case of academic dishonesty may also have other ramificiations, such as precluding you from switching into computing majors, registering for computing minors, joining the ICS Honors Program, and graduating from a computing major with honors. All of this is University and Bren School of ICS policy and is not subject to negotiation.

Knowing when you're being dishonest

I've been asked by students how they know when they're crossed the line between asking for help and being academically dishonest. To me, there is a fairly straightforward way to know the difference. Did you actually write the code in question? That's not a matter of whether you typed it in; that's a matter of whether it was you who wrote it (i.e., it is comprised of your own ideas about how to solve the problem, how to organize the solution, and so on).

The easiest way to determine whether you've crossed the line is whether your work was driven by someone else's existing solution. Here are some examples:

In my view, this really isn't that complicated. We require you to do your own work, because that's how the learning is done in this course. A large part of what you're learning to do is to design and write programs, a skill that can only be built by designing and writing programs. You have to make the decisions about what to do next, how to organize your program, and so on. If someone else is making most of those decisions for you, you're not building the skills necessary to be ready for the courses that follow on from this one. And, from the standpoint of academic honesty, if someone else is making most of those decisions for you, that's plagiarism.

The lesson

Okay, so the moral of the story is that it's wise to avoid cheating. I believe that it's relatively rare that students enter a course with the conscious intent to cheat their way through it; why come to UCI if you're not planning to get something out of the coursework? So why do people cheat every quarter in every course? The answers vary, but here's the easiest way I can boil down the numerous conversations I've had with students caught cheating in my courses over the years: I fell behind and couldn't figure out how to catch up. Things happen and ten-week quarters are unforgiving. You might get sick, you might have issues crop up in your family, you might have misunderstood one of the earlier topics in this course (or one or more important topics in previous coursework) on which later topics depended, you might have an off-campus job that's demanding too much of your time, you might be trying to decide whether you're on the overall life path you want to be on... Any of those things (and many others) can make it hard to keep up. You fall a little behind, you fall a little further behind, and pretty soon the situation seems hopeless. You're under pressure, temptation gets the better of you, and suddenly it seems better to submit someone else's work than to submit nothing. As upwards of 10% of my students (who have cheated like this) can attest, it's not.

If you feel like you're beginning to slip off course or things are getting beyond your control, the best thing to do is to talk to us sooner rather than later. We're here to help; we understand. But the reality of taking large-sized courses at a large-sized institution is that we're not going to know you're in need unless you tell us. If things are happening in your life, tell us; you don't have to be specific if you're not comfortable with it. Before the fact, there's often a way to work things out. After the fact, it's usually too late.

And, in general, some students won't pass this course with a C or better this quarter, and won't be ready to take follow-on courses yet. And that's not as disastrous as it sounds. Most students who get less than a C in ICS 45C take the course again; most of those who take the course again pass it the second time around, with their feet firmly underneath them and ready to move forward.

Sharing your own solutions online

Some of our past students have wanted to post their own solutions to their projects online, with the goal of helping others or just showing off work that they were proud of. This is also problematic from an academic honesty perspective, because many or all of the projects you're working on will be reused in a future quarter; good problems are good problems, and I don't rebuild five new projects every quarter. Given that, posting your prior work online will absolutely lead to other students finding it and plagiarizing it — this is now one of the more common root causes of plagiarism cases that we find.

I can appreciate, of course, that you might want to build a portfolio of work to demonstrate your skills as you build them, and I'm not unsympathetic about that. However, the reality is that posting solutions to first-year coursework is very unlikely to be of use in job searches or other professional scenarios. I've asked a number of hiring managers over the years, including ones I've worked for in my industry career, and have universally received the same response about it: Hiring managers generally aren't interested in seeing prior homework. Projects in courses like this one are sanitized, in the sense that they're problems that have been designed to be solved using techniques just taught, with the requirements clearly spelled out, and with few enough rough edges that a large number of students can solve them without encountering roadblocks that can't be overcome. Real-world work isn't like this, as it turns out. Figuring out what needs to be built is as important as figuring out how to build it. Building a portfolio is best done with your own solutions to your own problems, containing things you've written to scratch your own technology itches or explore concepts that you wanted to learn more about on your own.

So, in general, despite the fact that you may be proud of the work you've done, you need to understand that there is a very strong likelihood that the only thing you'll be doing is enabling future students to plagiarize your work — and quite possibly becoming embroiled in the investigation yourself and being reported to AISC — while not accomplishing much of anything positive for youself.

Do not share your prior solutions online.