Status of Syllabus

Updates to Syllabus

Date Description
May 18, 2026 Syllabus Release

Professor

Francisco R. Ortega, Ph.D (NUI Lab).

Note: My preferred method of communication is via Teams for quick questions. Use class email (compsci_CT301@colostate.edu). Other times may be available upon request. Office hours are subject to change. I will announce it via Teams.

The class email (compsci_CT301@colostate.edu) is not active until classes start.

Graduate / Undergraduate Teaching Assistants (GTAs/UTAs)

Maryangela White (Ph.D. Student)

Benjamin Mooneyham (Undergraduate)

Online Office Hours: Office hours will be held online. If there are multiple students on the queue, the GTA/UTA will answer only one question and move on to the next student in order to allow everyone a chance to ask a question.

Email, Canvas, Teams, and Zoom

Email, Canvas, Teams, Zoom, and this Syllabus are critical. You must check the syllabus, Teams, and Canvas every day. Classes will be recorded asynchronous lectures.

How to communicate

First, be respectful and concise, but provide enough information for me to understand your question. Follow the following guidelines:

If a student behaves in a manner that is considered prohibited conduct, I reserve the right to report the behavior to the appropriate department.

Overview

CT 301 is a 2-credit course covering C++ syntax, memory management, pointers, references, templates, and object-oriented programming in C++, among other topics. This course is designed for students who have completed CS 162 (or CS 163 or CS 164) and want to learn C++ fundamentals. As a 2-credit course, it is intended as an introduction to key important concepts in C++. Please note that this is a C++ course, not a C language course; while C and C++ share some history, they are different languages with different idioms, features, and best practices.

Class Objectives

This course provides a basic introduction to the following topics (not in order of delivery):

  1. Learn C++ object-oriented programming
  2. Learn C++ templates
  3. Learn C++ raw pointers, references, and smart pointers
  4. Learn a few C++ standard library containers and other aspects of it

Learning Breaks

Note: In classes such as this summer session that are fully remote, structured learning breaks do not apply. However, I highly recommend incorporating them into your own study practice.

Research in the science of learning demonstrates that sustained attention during long lectures decreases learning effectiveness. To maximize your learning, I will incorporate structured mini-breaks during some synchronous sessions if offered. These brief pauses (3-5 minutes) will allow for small group discussions, reflection, or peer interaction before returning to the main topic. This approach helps consolidate information, maintain engagement, and improve retention.

For students interested in learning more about effective study strategies grounded in cognitive science, I recommend: Rhodes, M. G., Cleary, A. M., & Bjork, E. L. (2024). A Guide to Effective Studying and Learning: Practical Strategies from the Science of Learning. Oxford University Press. Available at: Amazon.

Prerequisites

CS 162 (CS1 -- Introduction to Java Programming) with a minimum grade of C, or CS 163 (CS1 -- No Prior Programming Experience) with a minimum grade of C, or CS 164 (CS1 -- Prior Programming Experience) with a minimum grade of C. Credit not allowed for both CT 301 and CS 253. If you need an override, email me.

Grading Scale

Grade Range
A [94,100]
A- [90, 94)
B+ [87, 90)
B [84, 87)
B- [80, 84)
C+ [75, 80)
C [70, 75)
D [60, 70)
F [0, 60)

A+: A+ is given only to those top students that have gone above and beyond (and they already have an A). Sometimes, this means you need to have a 99% or higher, or have exceled in the class while mantaining an A grade. Remember that for your GPA, an A+ is the same as A.

I reserve the right to curve in your favor per assignment, exam, or class. Usually, I only curve at the end of the semester the whole class if needed. While this does not happen often, if it does, I will announce it.

Grading Breakdown

This course consists of 1,000 points; therefore, 1,000 points = 100%. This is the breakdown by percentage:

Grading Group Percentage Notes
Syllabus 1% Quiz about the syllabus.
Warm-up 4% We will give you a C++ project for you to compile.
Assignments 20% Two assignments with the option of resubmitting the assignment with the lowest grade.
Exams 40% Two exams; you can drop the lowest grade. Proctored.
Final Exam 20% Final exam. Cumulative. Proctored.
Quizzes 5% You can drop the lowest grade. Open notes, open internet.
Labs 10% Binary grading. Small exercises meant for practice and to learn smaller concepts. As long as you try the lab, you will get the grade. You can miss two of them. We will not be evaluating correctness of submissions.

% The description for each quiz will mention where the answers to the questions can be found. Answers that are found outside the resources mentioned, may be marked as incorrect.

Exam Dates

Exams will be administered via Canvas. Online students will have a reasonable time window to take the exam.

Exam Dates:

Exam Date/Time
Exam 1 Saturday, June 6, 2026 (window will be announced by Teams)
Exam 2 Saturday, June 27, 2026 (window will be announced by Teams)
Final Exam Friday, July 10, 2026 (window will be announced by Teams)

Equipment for Exams

You will need to have a computer or laptop in a quiet location to take the exam. The university-provided system will proctor the exam. You will be required to take the practice quiz to test your system by a specific date. If you have a problem obtaining a laptop, please talk to me and the GTAs. The practice quiz will be open by the second week of classes.

About the Class Schedule

It is essential to recognize that students' needs differ from one session to the next. Therefore, it is hard to have a single schedule that fits all; therefore, the schedule is subject to change. The professor provides dates for the exam and will post dates on Canvas.

Note that this is an 8-week summer session (May 18 -- July 12, 2026). The pace is faster than a regular semester. Plan accordingly.

Asynchronous Format

This class is fully online and asynchronous. Lectures will be pre-recorded and available on Canvas. Zoom synchronous sessions may be offered if needed, but attendance at those sessions will be optional.

Late Assignments and Make-ups

The course offers a 24-hour late-assignment policy, with a 10% penalty applied to the grade awarded (except for exams). Unless otherwise stated or due to unforeseen circumstances (with the instructor's consent), no additional time will be granted. There will be no make-ups of exams or activities (unless there is a valid, verifiable excuse). If I extend an assignment, the 24-hour (10%) deduction may be removed. This applies to assignments, not to quizzes or exams. In addition, I will inform you in advance when we release an assignment whether it will not have a late policy.

Extra Credit

There may be opportunities to earn extra credit. Details will be announced in class. Additional options may appear during the session.

Information about Credit Hours

This is a 2-credit course. One credit is for the lecture; 1 credit is for a recitation/lab. The lab credit is the time you are expected to work on your assignments and labs.

The type of outside work for this class includes additional lecture materials, readings, and coding tutorials or practice on your own, with our resources and support. The rule of thumb is for every credit you need 3-4 hours of study per week. For a 2-credit course in an 8-week summer session, you should expect to spend a significant amount of time outside of lectures. Plan accordingly.

Details and due dates will be posted in Canvas. Assignments and labs must be submitted via Canvas (no email -- any email sent with an assignment will not be graded).

Required Textbook

Stroustrup, B. (2022). A Tour of C++ (3rd Edition). Addison-Wesley Professional.

Optional Textbook

Stroustrup, B. (2024). Programming: Principles and Practice Using C++ (3rd Edition). Addison-Wesley Professional. (C++ In-depth Series).

This is a more comprehensive, beginner-friendly book. While we won't use it directly in class, it may serve as a helpful reference if you want additional depth or a more gradual introduction to the material.

Performance measures that will be considered for grading

In some cases, exam questions are not multiple-choice. Therefore, if the answer is unclear, the instructor will use judgment and experience to evaluate it. The instructor's judgment applies to all questions, assignments, and exams. The judgment is based on the expected answer, the knowledge of the instructor, and the understanding of the level at which this class is set.

About Non-Graded Quizzes

We may release some quizzes to obtain more information from you. These are non-graded or survey quizzes. One example of non-graded quizzes is those that are released for you to practice exam questions.

Important information regarding accommodations for students

  1. Students should contact their instructor/TA/coordinator as soon as they receive their memo from SDC to discuss their individual needs. Students should read the SDC section of the syllabus for each course before the discussion with the instructor/TA/coordinator. B. The conversation with the faculty member/TA/coordinator should address the specific requests listed in the SDC memo, their applicability, and the reasonable arrangements for each course.
  2. All students are expected to submit all assignments, including laboratory reports or other assignments associated with laboratory courses, as defined in the course syllabus. Time extensions will generally not be granted for assignments or labs that are collected and graded on a weekly (or longer) basis. This is because scheduled due dates are sufficiently long to accommodate students who require extended time to complete assignments. Extension as a reasonable accommodation may be considered, although circumstances may limit its feasibility.
  3. It is understood that accommodations cannot fundamentally alter the nature of a course.
  4. Retroactive accommodations are generally not permitted.

Respect for others

I do ask everyone to be respectful of others. We want to respect everyone's right to be who they are. This includes respect for people in the LGBTQ+ community, in minorities (e.g., race, ethnicity, etc.), gender, and gender identification. We also want to be respectful of people's cultural and personality differences and to be understanding of these differences. I ask that you all respect each other in my class. We want to be respectful of different political positions. However, order in class is a must. If anything concerns you, please contact me.

If a student behaves in a manner that is considered prohibited conduct, I reserve the right to report the behavior to the appropriate department.

Important Notes about Assignments and Labs

This course requires an understanding of theory and hands-on coding. In other words, we will emphasize both hands-on experience and theory. Therefore, a level of programming maturity is required to be self-sufficient in the assignments and labs.

I ask that you reserve the time needed for this class, based on your understanding of your own schedule. Given that this is a compressed 8-week summer session, the workload will be more concentrated. One student may require only 5-10 hours per week, whereas another may require 20-30 hours. Given that you have taken many classes by now, I do trust that you will manage your time wisely. The rule of thumb is for every credit you need 3-4 hours of study. For a 2-credit course, you will spend 8-10 hours outside of lectures per week. In a summer session, this may be higher. Note that because this 8-week session moves at twice the pace of a regular 16-week semester, any time commitment mentioned here should be multiplied by 2.

Teaching Philosophy and Other Matters

While not all my classes share the same syllabus, I have some standard practices in my teaching that I would like to explain.

  1. My objective is for you to learn the core principles of the given class. For CT 301, the core principles revolve around C++ fundamentals: syntax, memory management, object-oriented programming, pointers, references, and more.
  2. My objective is for you to learn. I aim to follow a science-based approach grounded in learning science. I talk a lot with my friends in the Science of Learning. I recommend this book for anyone seeking to improve education: A Guide to Effective Studying and Learning: Practical Strategies from the Science of Learning by Matt Rhodes et al. Some of the methods I use include repetition, spacing, and others. I recommend this book for every student.
  3. Like most of us, I want to start from a place of trust. I don't want to live feeling that I'm being surveilled. I wouldn't want my students to think that they are in a police state. I will not look to trick you into your assignments or exams. My exams and assignments may contain errors or be difficult, but my goal is to improve my teaching and the learning process for everyone. This does not mean cheating is acceptable in my class. On the contrary, it is not, and you must know the rule for each of my classes. Given the rise of AI, I would prefer, whenever possible, to increase the weight of exams in evaluating your learning. If you cheat, you will do more harm to yourself than anything else. Some classes may need to prohibit AI, and its use can be controversial. Yet, each professor and each level needs to make this decision, and I fully support my colleagues making those decisions as they know their style and their classes best. However, we are in a transition from what computer science was to what it will be, and during this transition, various approaches are being evaluated. I will err on the side of trusting you whenever possible. I'm here for you to learn.
  4. I was hoping you could read this very well-written blog. Accusatory AI: How a Widespread Misuse of AI Technology Is Harming Students -- You may need to subscribe for free to obtain this article or pay for it. However, if you are unable, I'm providing a copy to those who need it under the Fair Use doctrine (as provided by copyright law), in Teams, as the start of class. The point is that AI detectors and other uses cannot only be incorrect but also disproportionately affect groups that have been historically marginalized. Note, you need to learn how to code with AI, but at the same time, you need to learn with AI. The computer science of the future is yet to be written, but it will not look like your father's computer scientist. Yet it is essential that each class has distinct rules, and you must understand and respect them.
  5. I'm a reasonable professor. However, by design, there is a separation between the students and me. I'm in a position of power, and I can affect your grade. Therefore, I must be mindful of this and also remind you that we are not friends, even when I'm very friendly. That said, there are behaviors that I will stop. This also means that TAs do not date students, and professors don't date students or TAs. I also ask that you please be respectful of the TAs. The TAs are here to help you, and they will not appreciate being asked on a date.
  6. It is essential that when in doubt, you ask me. This is another way I try to clarify concepts for students. Make sure it is in writing, so I can't say later, I forgot.
  7. I'm the ultimate arbiter of this class; however, you are within your rights to appeal your grade or even email my superiors. However, one lesson I want to convey to you, as computer scientists, is that, in most cases, emails are read by many people. Unless there is significant abuse, first attempt to resolve the issue with the professor. This will help you navigate issues with a supervisor.
  8. Remember, your grade is just an evaluation of where you were during the given class during a given period. It says nothing about you. While wanting to have an A is the goal, getting a B or a C does not mean you are an bad computer scientist; it just means, given the evaluation metrics given, you were not able to get an A for a given class in a given semester. It says nothing about you.
  9. I will not tolerate sexual harassment or abuse, and I will report it -- the same thing with physical violence or intimidation to others. Maintaining a safe environment (not safe from debate but safe from violence, abuse, and related harm) is critical to learning.
  10. I want you to have as much fun as you can when there is grading!

The AI dilemma: To AI or not to AI, this is the question?

Here is the biggest problem that I don't have an answer for yet. I will explore this in class, as I consider it imperative. In addition to ethical considerations (energy, copyright infringement, confidentiality, and others), there is the question of how computer scientists should use AI to aid their writing and coding. And these two are different. I don't have an answer, but I will tell you what I think today, as of Summer 2026. This may change in the future.

Coding: If you ask AI to explain something, this can be useful. If you ask an AI to help you find something, this may be useful (though it may be incorrect). However, if you tell AI to code everything for you, then you will not learn at all. Not only that, even if you know how to code, at what point are you not able to maintain the code anymore? There are obvious telltale signs that AI coded it all. Then you face the following problem at work. If a company wants you to use AI all the time, how do you code? (I believe our department may have a class in the near future on how to code with AI). If you go to a company that exists but only allows you to use its "LLM" version, which, based on conversations I have had with recent former students, is not great, so people don't use it, how would you code? If you go to a company that does not let you use any AI, how would you code? If you are doing this to pass the class, then why are you studying computer science in the first place?

Writing: Here is a more problematic use of AI. The text AI produces in many cases, it does not say anything but big words that are meaninless. The struggle to communicate science is key to learn this valuable skill.

I will describe how we will and will not use AI later in this syllabus.

Collaboration in this class CT-301

You may discuss concepts and approaches with classmates. It is ok to ask someone, "I was trying to do X, but it doesn't work. Can you show me how you did it?" As long as you implement this yourself later and understand it, it is ok. However, all work you submit must be your own. There are no group assignments in this class.

Using CHATGPT, CODE PILOT, or similar large (or small) language models for CT-301 or other AI Agents.

While CHATGPT and similar AI agents can significantly help, you must understand when to use them in a university setting, as they can also be a detriment to you. For example, I have found ChatGPT to be very useful when I want it to describe a well-known concept. There are legal issues beyond the scope of this class that must be considered. There are also ethical issues, and I will discuss them in class. However, we can't close our eyes to the fact that LLMs are helping people with coding and other tasks. They do make mistakes. In some companies, employees are asked to use them. In others, they may have their own LLMs due to restrictions, but they don't function well.

In my class, when it comes to coding, I will allow the use of LLMs/AI. All students get Copilot / ChatGPT. However, what I will not allow is the entire code to be written by AI. You must use it as a tool. Finally, you are responsible for the code, so if I ask you a few questions about your code and you don't know what it does, I can give you a zero. Therefore, make sure the code is yours, but use AI to support your learning process. You will not be able to tell me, "AI did it, so it is not my responsibility." Ultimately, this is your code.

When it comes to writing, this is different. You can use AI to help you in a few things, but I don't want you to use AI to rewrite your submissions (other than tools like Grammarly). You remain responsible for the content, and if I ask you and you don't know, you will also receive a zero. Don't use AI to write your submissions; use it to help you. However, if you cite something that is not relevant or does not exist, it is your responsibility.

You must acknowledge how you use it!

While this is not relevant to this class, it is essential to note that conferences, journals, and magazines now require that any content generated by Generative AI be appropriately referenced or acknowledged.

Refer to the IEEE submission policy and the ACM authorship policy.

According to these policies, IEEE: "The use of generative AI tools and technologies to create content is permitted but must be fully disclosed in work."

ACM: "AI-generated text shall have a citation to the AI system used to generate the text."

When using Generative AI to improve the quality of your text, be careful. Even when using it for enhancements, always double-check the output before incorporating it. The ACM policy clarifies that: "If you are using generative AI software tools to edit and improve the quality of your existing text -- much like a typing assistant such as Grammarly to improve spelling, grammar, punctuation, clarity, or engagement -- or to use a basic word processing system to correct spelling or grammar, it is not necessary to disclose such usage of these tools in your work."

While Generative AI is a powerful tool, it's essential to evaluate the content it produces critically. AI-generated data can carry biases; results may be inaccurate, including hallucinations, and references are often incorrect. Moreover, submitting work with vague or unsound text greatly increases the risk of a low grade.

Professionals who effectively use large language models (LLMs) as tools while critically assessing their outputs may thrive in their careers -- I (francisco) do not personally like them too much yet -- You can only critique AI-generated content if you have the foundational knowledge to discern accuracy. Critical thinking is key. Overreliance on LLMs is not the solution.

For this class, if you use a tool such as ChatGPT or a similar tool, you must acknowledge its use in your work. Yet, I'm encouraging you to use it as described above and in class. You can't use it in all classes. You can use it in CT-301 this session.

Finally, when it comes to coding, using LLMs or similar tools, I want you to be also aware. Understanding a piece of code may be helpful, but generating code without understanding, or simply copying and pasting it, will be detrimental to your learning.

About Cheating (Traditional, NON-LLMs)

I have adopted the following text from Prof. Thomas Cormen at Dartmouth College (with his permission). Note that for this class, all work is individual unless explicitly stated otherwise.

Don't cheat. You know what cheating looks like. I know what cheating looks like. Don't do it. Make sure that you have understood the Academic Honor in CSU. If you need more details on what constitutes cheating, read on.

On exams, all work must be your own. Programs that you turn in should be created, typed, documented, and output generated, yourself. For the lab assignments, you may consult freely with instructors and classmates during the phase of designing solutions, but you should then work individually when creating your programs -- typing, documenting, and generating output. During the debugging stage you may discuss your problems with others in the class, but you should not copy code to "fix" bugs. To do otherwise is a violation of the Academic Honor Principle. If you work with a classmate on any assignment, you should tell us who you worked with in a comment at the beginning of your program.

You should attribute the proper source in any code that you submit that you did not write yourself. This includes code that you take from outside references -- for example a book other than the course text. And it even includes code that you take from class examples, a book, or the assignments. (I agree that may be tedious to attribute the source in code that we have given you, but we want you to be in the habit of attributing your sources.) You may want to attribute sites or books that were helpful in any type of assignment.

Whenever we ask you to turn in sample runs of your program, the runs you turn in must be the result of actually running your program. It is a violation of the Academic Honor Principle to falsely represent output as coming from your program if it did not. If you change your program, make sure to generate output from the version of the program that you hand in. It's amazing how a seemingly minor change to the code can cause a big change to the output of a program. Also, make sure that when you are running a program, that it is your program; it's easier than you might think on a public computer to run a program that someone else had left on the machine.

In the past, we have had a few incidents in which students turned in output that did not come from the program handed in. In each case, it turned out that the student had made a foolish mistake (in not rerunning the program or handing in an old version of the program or the output) and had not intended to misrepresent the work. Yet it caused many an uncomfortable moment for the student and also for the student's section leader and for the professor as well. So please -- pretty please with sugar on top -- endeavor to verify that you're handing in output that comes from the very program you're handing in.

It is not easy to come up with good homework problems that help you learn a concept, are interesting, and require an appropriate amount of work. Over the years we have developed and refined a number of homework problems, and I plan to reuse some of them for this class. You should not look at any solutions to homeworks assigned in previous terms, including sample solutions, or solutions written by other students.

We have had some uncomfortable situations occur in the past, and I want to make it clear what the policy is. Two students, Alice and Ralph, discuss an assignment and design their code together. That is fine. But then they decide that since their programs would be so similar, they might as well have Alice type in the code, have Ralph make his own copy of the file containing the code, and then have Ralph make his own minor changes. This is a violation of the Academic Honor Principle. Although you may discuss and design with others, the code you hand in must be entirely your own.

Here's another situation that occurred. Trixie and Ed start working independently on a program. Trixie finishes and has a working version. Ed has trouble with his. Trixie helps Ed debug. That is fine. But then Trixie realizes that Ed has a section of code that is all wrong and the program she wrote has just the right code for that section. She shows Ed her program. Or worse, she gives Ed an electronic copy of her program so that he can just paste in the correct code. Either action is a violation of the Academic Honor Principle.

I realize that it can be hard to decide when you might be violating the Academic Honor Principle when we let you collaborate to a limited extent. Here is a good rule of thumb. If you are talking in normal English (or Chinese or German or some other natural language) you are probably OK. If you find yourself talking in C++ code, you have crossed the line. So saying, "Your program runs forever because you have the wrong condition in the while loop" is OK. But saying, "Change while (x == 0) to while (x >= 0)" is not.

If you have any question about whether what you're doing is within the Academic Honor Principle, do not hesitate to check with me. If it's late and you can't find me, you're better off erring on the side of caution.

Most violations of the Academic Honor Principle come down to failure to cite work that is not yours. If you copy any portion of your program from your friend Elvira and represent it as your work, then you either intended to deceive or were careless about citing. Either case is a violation of the Academic Honor Principle. If you copy your entire program from Elvira but include the comment, "This code was copied in its entirety from Elvira," then you cited properly, though you didn't actually do the work. In this latter case, I would not report a violation of the Academic Honor Principle, though your grade on the assignment would be 0. But that would be far preferable to a more severe penalty.

The same goes for code that you find in some other book or on the Internet. You are in violation of the Academic Honor Principle if you fail to attribute your sources.

You don't need to cite if you wrote the code yourself. You don't need to cite just because you're using a construct you saw elsewhere. For example, you need not cite for using cout << "Hello"; even though it was in the class examples. That would be like citing "printing press" in an essay! Nor do you have to cite just because you use a while-loop, even though you saw a while-loop in a class example. It's when you lift several lines of code from elsewhere that you need to cite.

To cite, include in a comment -- near the top of your file is fine -- stating where you got the code from:

Please do not cheat. Cheaters -- whether or not they are caught -- bring dishonor upon themselves and upon everyone else at our institution. To do that, for just a few lousy points in a course, is not worth it. Furthermore, if you cannot solve the assignments and lab exercises on your own, then you will be nailed on the exams. As you from the grading criteria, even if you get 100% of the points in the programming assignments, you won't get a good grade if you do badly on the exams. This will be another sign that something is going on.

Special note for when you work on a computer that anyone else might use

If you are working on a computer that is not yours or that someone else in the course might use, you should be very careful to remove your code from the computer when you are all done. You should probably email your code to yourself before you remove the code. Why do we tell you to remove your code when you're done? Because if you leave your code on a computer, and someone else can see it, then they can copy it and hand it in. If that happens, then we have a bad situation involving you (the copy-ee) and the other person (the copy-er), and it's difficult -- if not impossible -- to tell who was the copy-ee and who was the copy-er. By removing your code from the computer when you're done, you can avoid getting yourself into that situation. Of course, if the code is secure in our network, you may assume that it is fine. However, you are always erring on the side of caution.

I do understand that we are all busy. I do understand that sometimes we helped each other. However, copying is not worth it. Do your best. Work hard. Make sure you have the time for each class that you are taking. Finally, always attribute your information.

Strict Rules Against Copying in This Class.

Cheating will be reported. I will explain during class what constitutes cheating. You will only loose points for the assignment that you choose not to turn in. However, choosing to turn-in a plagiarised assignment may in a letter grade of F for the class and may be followed by additional consequences.