Disclaimer
At the moment this syllabus is still a work in progress. It has not been fully updated yet to reflect changes that will need to be made for 25fa.
Table of Contents
Overview
Prerequisites
-
Required: Knowledge of Computer Systems, C programming, Data Structures, basic Algorithms and time analysis.
- For Systems topics, students should be familiar with concepts of memory, assembly instructions, data representation, binary encoding, and vaugely familiar with the idea of an operating system.
- In terms of C knowledge, students should be very comfortable managing dynamically allocated memory, and pointers.
- Expereince with fundamental data structures including Hash Tables, Lists, Queues, Heaps, Trees, finite state machines and graphs. As a result, the official pre-requisites of this course is: CIS 2400 (Intro to Computer Systems) and to a lesser extent CIS 1210 (Data Structures and Algorithms).
We have CIS 1210 as a pre-requisite but I want to stress that this course does not need all of CIS 1210 and is very different than CIS 1210. This course is a PROGRAMMING course first and foremost. You will have to write 0 formal proofs for this course, but analysis of programs and short-answer problems may be asked of you. The main things we want out of CIS 1210 are:
- Stronger familiarity with programming and using data structures in general
- Familiarity in doing alrogithmic analysis.
- Some familarity with graphs
If you feel strong enough in your abilities on these and haven’t taken CIS 1210 then this course will probablby be doable for you without CIS 1210.
This course is currently only open to undergraduate students and assumes prior knowledge from CIS 2400 and CIS 1210. Note that students who have not taken CIS 2400 or an equivalent course will have very little, if any, chance of being admitted. As stated above, CIS 1210 is not as strong of a pre-requisite and it may be possible to get through the course with just experience from CIS 2400 and CIS 1200.
Course Description
This course is designed to train systems programmers. After this course you should be better equipped to tackle the problems that system programmers solve. As a side effect, you should be ready to take on some of the more rigorous upper-level systems courses (CIS 5480, CIS 5050, CIS 5550, CIS 5530, CIS 5600, CIS 5650, etc.).
To do this, we need to cover a couple topics that are critical to software systems programming. Upper level courses will often assume knowledge of these topics already and either do a relatively quick review of the material or not talk about it at all.
Learning Objectives
This course has roughly 4 main learning objectives. By the end of this course students should be able to:
- Critique/assess/judge code on style. This includes
- Thinking about maintaining object and loop invariants
- Writing clear documentation with pre and post conditions
- Modular design and minimizing cognitive complexity where possible
- Analyze the possible performance issues / bottnecks that come from our computers being physical devices.
- Big-O analysis is not everything
- Hidden costs that relate to locality, concurrency, and various hidden overheads in our programs.
- Identify new sources and use them to learn.
- Please read documentation please please please please
- Use the tools of a system programmer to solve problems
- This involves being able to write programs from scratch using the concepts covered in this class.
Note that not one of the learning objectives is “to do well on the test” or “to get an A in the course”. Our goal in this course is for you to learn and develop understanding. Of course we have to assign you a grade at the end of the semester, but we design this course (and the grading policies) around you learning. We want as many people to learn (and get an A) as possible. See the relevant policies for some examples of this.
Topic List
Broadly this will include:
- The art of Systems programming itself. This includes C++, writing good code, and getting familiar with some tools of the trade.
- Some detail about how our computer is a engineered phyical device and how that can directly relate to the speed and efficiency of our programs.
- Concurrent programming with threads & processes, the issues faced with concurrent programs, and why it is important
- Network programming w/ sockets and how our software usually uses the network to communicate.
A more detailed (but still tentative) list of topics includes:
- Sytems Programming
- A brief refresher on C
- pointers
- memory allocation
- C++ programming
- Objects
- RAII, Move Semantics & Rule of Five
- Standard Template Library (vector, deque, map, optional, std::algorithm)
- some misc C++ (namespaces, lambdas, exceptions, concepts, etc.)
- POSIX (Portible Operating System Interface for uniX)
- Processes
- File Decsriptors
- A brief refresher on C
- Software Design, Documentation, and Testing
- Invariants & Hoare Logic
- git
- catch2 framework
- Performance testing
- Makefiles
- (Maybe a little bit of CMake?)
- Hidden Software Overhead
- Locality, Caches (High Level), File Buffers
- Memory Allocation
- System Calls
- Concurrent Programming
- Threads
- Locks
- Condition Variables
- Data Races & Race Conditions
- Maybe std::async, std::future, std::barrier, std::atomic
- Network Socket Programming
- Internet Protocol (High Level)
- TCP
- UDP
- HTTP
- Reliability & Ordering
Course Materials
Website
The website acts as the central place for organizing material for the course. All essential material for the course is delivered through or linked through the course website. As an example, the website contains the course schedule, lecture materials, recitation materials, homework specifications, and this syllabus. We highly encourage you to explore, try some of the resources that are available, and become familiar with the site early on in the course.
Github
All programming projects will use github for version control. This is increasingly important for the later projects as they will be done with teammates. We will create repositories for you and distribute some provided code through them. You can setup your github account for the course by following the instructions here: Github Setup Instructions
You are not allowed to post your code from this course in a separate public repository. Doing so is against the academic conduct policy and can result in a failing grade in the course.
Gradescope
Gradescope is where both programming projects and exams are submitted and graded. You should be able to initially access the gradescope for the course via the canvas sidebar. After the initial access, you should be able to log into gradescope directly and see CIS 3990 on it.
Programming Environments
DO NOT use eniac machines to develop projects for this class!
Students caught running project code on Eniac will be penalized.
In the past, CIS students have accidentally crashed eniac in creative ways, causing issues for everyone using it.
In this class we are using an Ubunutu 22.04 Jammy Jellyfish environment for developing our programs. There are many ways to set up an Ubuntu 22.04 Jammy environment. There are two setups that will work regardless of which kind of computer you are on, but there are other (and in my opinion, better) options that you can choose depending on which operating system you have.
You can find more details on which environment to use in the document here.
Canvas
The canvas site contains the gradebook, surveys, and class recordings. You are free to use the canvas if you want, but if there is anything that is needed on canvas, it will be directly linked on the course website.
Ed Discussion Board
The Ed Discussion board provides a place for students to get support from course staff. Ed is also the primary mechanism for announcements, though we will try to repeat announcements at the beginning of lecture for convenience. Ed Discussion is also where we will host the weekly check-in quizzes.
OHQ
The course has an OHQ that we will be using for virtual office hours. Please write at least a somewhat detailed explanation of your question/problem and what you have tried so far to fix it.
Textbook
There are no strictly required texts for this course, however, some find it helpful to read the course material from a textbook. Note that none of the textbooks listed will have everything used in this course. As a result, we are suggesting the following texts:
- cppreference.com (https://en.cppreference.com/w): This website is the gold standard for programming language references. Extremely useful for C++ programmers of all backgrounds. Can be hard to read at times though, but C++ (like all programming languages) can sometimes be a bit complex.
-
cplusplus.com (https://cplusplus.com/) not as good but some people find it easier to read. Travis originally preferred this site before getting used to cppreference.
-
Dive Into Systems (https://diveintosystems.org/book/): this is a free online textbook that is well written and contains useful information about several of the systems topics covered in this class and in CIS 2400. Notably there are three chapters that are most relevant to what we will talk about in this course:
-
- Storage and the Memory Hierarchy
-
- The Operating System
-
- Leveraging Shared Memory in the Multicore Era
-
-
online manual pages (https://linux.die.net/man) and (https://www.man7.org/linux/man-pages/): These websites are online equivalents of the
manterminal command. They contains useful information on user terminal commands (section 1), System Calls (section 2) and C standard library functions (section 3).
Course Components
Lectures
There are approximately 27 lectures throughout the semester, which occur from 12:00 PM (Noon) to 1:30 PM on Mondays and Wednesdays. Lectures are designed to be very active. This stems from the beleif (which is proven by academic literature) that learning happens from interaction with the material. Simply listening to a lecture is not sufficient to integrate the material and thus will make the projects and learning much more difficult. The amount of activitiy in a lecture may vary a lot lecture to lecture, but the idea is that lecture will generally:
- Breifly introduce concepts
- Present a problem for students to think about individually
- Students then work on the problem in groups of 3 with course staff walking around to engage students
- After some time a group will present their findings and the instructor will go over the answer in front of the whole class to make sure everyone understands the material sufficiently
- Repeat
This lecture style has the following consequences:
- Students are expected to engage in lecture and show up in-person.
- Attendance and (more importantly) participation for both lectures and recitation will be part of the grade (Though not strictly required)
- The lectures will be recorded, but recordings will not be posted until shortly before an exam
- You can miss some lectures and/or recitations and still get full credit for participation.
- Slides will still be posted to the course website (typically shortly before lecture)
- You will learn the material better
Recitations
Recitations will provide yet another place for you to practice the material in the course, however recitation is usually geared towards preparing you for the homework assignment that is due next, and any particularly complicated topics in the course. Recitations will be largely activtiy driven, with small “micro-teaches” inside where a TA will give an alternative explanation to content covered in lecture. Sometimes the recitation will consist of new content that is not talked about in lecture, but is useful (if not necessary) for the homework.
Slides and worksheets from recitation will be posted afterwards, but not recorded to encourage student participation (as some students may get discouraged from participating by being recorded).
Attending Recitation is part of the coure-wide participation component of your grade and will be evluated by students having their worksheets checked at the end of recitation. The worksheets are checked not necessarily for correctness, just that a reasonable amount of effor was put into completing the activities and some understanding of the content is demonstrated.
Programming Projects
Homework will be distributed, through the course website, but will be graded, and submitted through the course gradescope. There will be approximately 10 homework assignments spread out through the semester, typically with an assignment due every week. Some easier than others.
Late submissions and the opportunity to fix assignments will be possible. More information can be found in the assignment policies section here.
Students who do not contribute to group projects will get an F grade regardless of overall score. Team members who do contribute some, but still do an insufficient portion of the work, will get a grade deduction.
If something comes up in your life that prevents you from contributing, please discuss with the instructor. We don’t need to know all personal details if something does come up, you have a right to your privacy, but please reach out.
Engagement Credits
Instead of mandating attendance to all aspects of the course, we instead will use “Engagement Credits” to keep track of the various ways you may interact with the course. These credits will be used to decide whether you get a “+”, “-“ or neither on the letter grade you earn in the course (more details are on this below). The most any student will need to earn to have an impact on their grade is 110 engagement credits
Engagement credits will not be hard to come by (as long as you are engaging in the course) and many opporunities will come up to earn them. Roughly 100 can be easily earned by attending lecture, recitation, and doing the pre-lecture check-in diagnostics. Further points can be earned by completing surveys, leaving thoughtful answers to questions on Ed, having interesting reflections/discussions on an optional reading, etc.
For a full breakdown, we are planning to have the following ways to earn engagment credits:
| Activity | Points per | # of occurances |
|---|---|---|
| Lecture Attendance | 1 | ~27 |
| Check-in Diagnostic | 3 | ~12 |
| Recitation Attendance | 3 | ~12 |
| Course Surveys | 4 | ~3 |
| Staff Endorsed Ed Answer | 2 | Uncapped |
| Other Activities | Varies | Varies |
Check-in Diagnostics
These will be “open-book” assignments on Ed Lessons that will be due before the first lecture of the week. These assignments will have unlimited submissions, so you can resubmit as many times as you wish. They are also auto-graded and will tell you when you are correct. Some weeks will not have such an assignment, details can be found on the course calendar.
These assignments are designed to keep you up to date with the course lecture material and make sure you are ready for the new material that will be covered shortly after the check-in is due. Sometimes the questions in the check-in will be a small to medium sized C++ program that we expect you to complete, but will not be graded on style. Sometimes the lecture activitiy will involve getting started on or doing part of the check-in assignment.
These check-in diagnostics will count towards your engagement credits for the course.
Oral Concept Discussion
During the semester there will be one or more “oral concept discussions”. These will be 1-on-1 evaluations between you and a member of the course staff (of your choice). In these discussions we will ask you to evaluate a problem / some code from the systems programming perspective and explain your thoughts as you work on it. We will be there to give you hints and discuss the problem with you. The problem will be analyzing/building off of something you have alread worked on, or something very similar. This is your opportunity to demonstrate both your technical understanding and the individual work you have done in the class.
You will be evaluated on your thought process, so please vocalize your thoughts during these when possible.
The main thing we are looking for in these is that you are integrating the knowledge of this course and are able to apply it to new problems.
You do not need to do the concept check perfectly to get a 100%. Similar to how we grade programming assignments, we will bucket your answers into either “Excellent”, “Satisfactory”, “Needs improvent” or “Unassessable”. Though we will be more lenient on grading these than programming assignments.
More details will be posted later in the semester about when these will occur.
If there is any reason why you don’t think you will be able to participate/complete these concept discussions (ESPECIALLY for any accessibility concerns) then please let the instructor(s) know as soon as possible so that we can work out an alternative for you.
Exams
Exams will be graded by the course staff and will be posted to gradescope. These will be taken in-person. You can expect there two be two exams. A midterm done in-class rouhgly midway through the semester and a final exam during the univeristy final exams period.
There are two other syllabus policies that relate to exams:
More information concerning how the exam is conducted will come as the exam approaches.
Policies
Getting Help
It is very important to us that you succeed in CIS 3990. As a result, we are providing many resources to help you succeed. These include:
- Many office hours held by course staff
- The Ed discussion board
- Contacting staff directly via email
- Scheduling a meeting with Travis here: https://www.cis.upenn.edu/~tqmcgaha/#meetings
Please do not be afraid to ask for help if you don’t understand something. We are here to help you succeed. Additionally, some of the course staff will get lonely and bored if no one shows up to their office hours.
It is also very important to us that you maintain your mental wellness throughout the course. A few points are not worth losing sleep over. Everyone on the course staff is available to chat, and you can always attend office hours for a non-academic conversation if necessary.
Additionally, if you are experiencing some unforeseen and extenuating circumstances, please feel free to reach out to course staff for help. Notably, the world is not in the most peaceful and stable place right now! Hopefully things are relatively calm for most students, but we know things can come up in the middle of the semester (whether it is directly related to school or not), and we are here to help.
Inclusion
You have a right to a learning environment that feels safe, where you are treated with respect and feel that you can contribute ideas constructively. Put another way, you have the right to an inclusive learning environment.
We want every student to feel that they have a safe and healthy learning environment, and if at any point you feel like this is not the case in any way, please let course staff know and we will see what we can do to help.
You can contact staff by making a private post on Ed, reaching out to course staff via email, talking to course staff at office hours, or scheduling a 1-on-1 with the instructor here:
Disability Services
The Student Disability Services (SDS) is a unit within the Weingarten Learning Resources Center (WLRC) dedicated to ensure equal access to all University programs, activities and services. They offer a wide range of services for students with disabilities that are individually designed and remove the need to reveal sensitive medical information to the course staff. Please submit a request if you will have a medical need for extensions of exam times or assignment deadlines.
Grade Calculation
To calculate your grade you need two numbers: the “normal” grade calculation (which determines the letter grade) and how many engagement credits you have earned (which determines if you get a “+”, “-“ or neither.
Letter Grade Calculation
The first number is similar to what you have seen in other courses. Simply calculate your grade percentage using the weights below.
Note that not every homework assignment is worth the same weighting. For example, an assignment out of 100 points is twice the weight of an assignment that is out of 50 points.
- Homework Assignments: (54%)
- Final Project: (14%)
- Midterm Exam: (9%)
- Final Exam: (18%)
- Oral Concept Discussion: (5%)
From this percentage, we calculate whether you get some kind of “A”, “B”, “C”, etc. If you got at least a 90% then you will get some kind of A (A, A+ or A-) in the worst case. If you get at least an 80% then you will get some kind of B or higher, a 70% will result in some kind of C or higher, etc.
I can’t give exact thresholds since it is adjusted slightly every semester to account for variation in exam difficulty and oral concept discussion.
Plus, Minus, or Neither
The next number you need is the total number of engagement credits you have earned. The engagement credits determine what kind of grade you get. e.g. if you get an A+, A or A-.
To get an A, you must have earned it from the normal grade calculation above and earn at least 90 engagement credits. If you earn at least 20 more than this (e.g. 110) then you will get an A+. If you get less than 90 you will get an A-. This can be repeated for a B with thresholds of 80 and 100, C with thresholds of 70 and 90, and D with thresholds of 60 and 80.
Assessment Policies
Late Policy
For exams, lecture participation and check-ins, no late submissions will be accepted, or extensions granted, except for special circumstances.
For Homework assignments, there are no late penalties or late submissions. Instead, homeworks will have an assigned due date and the ability to request for a re-opening. Extensions requests are made as part of the weekly check-in’s. When you submit the weekly check-in you will specify an assignment you want to re-open and that assignment will stay open till the next check-in is due.
If there are extenuating circumstances that are affecting your ability to complete work (whether it is “your fault” or not), then PLEASE reach out to the instructor. From there the instructor can work with you and give extra time if needed to complete the semester.
It is also worth noting a few things about the system:
- You may request to re-open any assignment after the original due date.
- This means that if you would like to “fix” or “reattempt” an assignment from earlier in the semester, you can ask for a re-open to fix or reattempt this.
- If you find one re-open request is not enough, you may follow-up with another re-open request on the next check-in.
- Because of this policy, you can be working on at most the assignment currently due that week and the assignment that you re-opened for the week. At the end of the semester there is also a group project that needs to worked on so at the end of the semester there are at most 3 assignments you will have open at any given point in time.
- We will NOT be granting an extension past the deadline for written homework assignments as these take much more work to grade and usually by the time we have finished grading them, we will have to release the answers so that students can use the assignments to study for the midterm exam.
Code Grading
We grade your programming assignments a little differently than other courses, so we will clarify these here.
Automated Grading
Almost all coding homework assignments are graded with an autograder with various test cases. However, in our course each test case is not worth a fixed number of points. Instead test cases are grouped together and you will only get points for a test case if all cases in its group are passing.
For example, consider an assignment where you implement a linkedlist and a hashtable. You will only get autograder points from the linkedlist once you pass all linkedlist tests. You will only get autograder points for the hashtable tests if you pass all the hashtable tests. Also note: To pass a test case you must not only get the correct behaviour but your code must not have any memory errors detected via valgrind.
Lastly there are also automated tests for checking some basic style functionality. You will not get these points unless you have passed all (or enough) of the automated correcntess test cases.
Manual Style Grading
Roughly every other programming homework assignment is graded on style in addition to correctness mentioned above. There will be a message at the top and bottom of the homework specification for each assignment that is graded on style. Style grading is done manually, and is only done if you get 100% on the automated checks mentioned above. This may seem a bit harsh, but this is for a few reasons:
- We let you re-open assignments later in the semester, so you can eventually get full correcntess and fix style
- It can take a lot of work to grade these manually, especially with the re-opens, so we need to make sure we stick to a reasonable amount of submissions to grade and regrade.
For each style issue we will leave a comment and mark a rubric item in gradescope.
Notably, each rubric item / style issue will necessarily result in a deduction on your grade. We instead categorize the overall quality of your assignment.
- Excellent (E) - 100% - Code Quality and displayed mastery of the content is perfect, or has only a few very minor flaws.
- Satisfactory (S) - 80% - Code Quality and mastery of material is pretty good, demonstrates a decent underestanding of style, but has a couple minor to moderate flaws or possibly one major flaw.
- Needs improvement (N) - 50% - Code works, but demonstrates an incomplete mastery of topics and/or code-quality. More than one moderate issue, and/or one or more major flaws that affect the code.
- Unassessable (U) - 0% - Code either doesn’t pass the already existing automated tests, or has enough major flaws to require an almost rewrite of the code. This can include: passing the autograder for the wrong reasons, having unreadable code, or other major issues.
I wish I could be clearer about what qualifies as an E/S/N/U, but the code quality errors you may have can vary in severity. For example, “extra copying” could be either minor or major depending on whether it shows up in an important loop or once at the beginning of a function. We will do our best to be clear about this, but please ask if you have any comments or concerns. We are also happy to process regrade requests when they come up, you must justify your regrade request though.
Midterm Clobber Policy
The clobber policy allows you to demonstrate mastery of past material with regard to exams. In particular, you can replace your midterm exam score with the score of the midterm section of the final exam. This does not apply in reverse, we will not replace your midterm section of the final with your midterm exam score.
To accommodate for the midterm subsection of the final exam being harder/easier than the midterm exam itself, we have a formula that accounts for average and standard deviation.
- First, we calculate Potential Midterm Clobber Score with:
(final_midterm_subscore - final_midterm_mean) / final_midterm_std_deviation * midterm_std_deviation + midterm_mean, capped at 100 - Then we take the maximum score between the calculated potential clobber score and the grade you had on the midterm. The higher of the two will be used to calculate your final grade.
Rescheduling Exams
If you know in advance that you will be unable to take an exam, please discuss it with the instructor as soon as possible, at least a day before the exam so that the reason can be verified and plans can be put in place. Make-up exams would likely take place after the initial exam.
For emergency absences, please reach out to the instructor when possible so that plans can be put in place.
Policies regarding absences for the Final Exam are covered by the University Provost; for Spring semester courses, a makeup Final Exam would be scheduled at the start of the following Fall semester. Requests for a makeup Final Exam due to reasons that could reasonably be anticipated (e.g. traveling for summer break) are unlikely to be approved.
Collaboration & Academic Misconduct
In general, we encourage collaboration, but there is a very fine line between collaboration and cheating. We can learn a lot from working with each other and it can make the course more fun, but we also want to ensure that every student can get the maximum benefit from the material this course has to offer. Keep in mind that the overall goal is for YOU to learn the material so you will be prepared for the exams and for job interviews etc. in the future. Cheating turns the assignments into an exercise that is a waste of both your time and ours; save us both by not doing it.
Cheating consists of sharing code or solutions to assignments by either copying, retyping, looking at, or supplying a copy of a file. Examples include:
- Coaching a friend to arrive at a solution by simply following your instructions (i.e. no thinking involved). An example is helping a friend write a program line-by-line.
- Copying code from:
- A similar course at another university
- Using solutions/code on the web, including GitHub.
- Copying code from Stack Overflow, Geeks4Geeks or another similar website.
- Copying from another student or using their code as reference.
- Using generative AI (co-pilot, GPT, etc.) to generate solutions for you and copying that into your project code.
- Similarly, you are not allowed to show your work with anyone outside of the current CIS 3990 course staff via electronic or non-electronic means. You are also not allowed to post this work publicly.
You are not allowed to post your code from this course in a separate public repository or anywhere else that is publicly accessible. Doing so is against the academic conduct policy and can result in a failing grade in the course.
If you want to use this as part of a resume or portfolio, instead describe the project, decribe what you did, and mention that you can show your work to potential employers upon request.
If you feel that you are having a problem with the material, or don’t have time to finish an assignment, or have any number of other reasons to cheat, then PLEASE talk with the instructor, we are more than happy to work with students as needed. We WANT you to learn the material. If you cheat, you are not learning the material (and thus wasting time and money of yourself and others). Please, just don’t cheat.
If you think you may have done academic miconduct on current or past work that was not caught previously, then please talk to us. If we think what you did may have been detrimental to your learning, we will not open a cheating investigation and instead work with you to try and make sure you get the desired learning experience. This may involve us asking you to redo the relevant parts of the assignment or perform some other task to demonstrate mastery of the material. What we care most about is not punishing you, but instead making sure you learn the material. What we do in these cases is intentionally vague since it depends on the circumstances in which it happened and we also hope that these situations do not happen much. If you communicate with us and are reasonable with us, then we will be reasonable in return. When in doubt, please communicate with course staff and we will do our best to work things out.
If we do catch you cheating, we will take it as a serious issue. If you are caught cheating, then we may initiate a cheating case in the University system and give you a zero for the assignment. Depending on circumstances, you may receive a failing grade in the course.
If you are in doubt about what might constitute cheating or anything regarding this policy, please send the instructor an email describing the situation and we will be happy to talk about it with you.
See Penn’s Code of Academic Integrity for more information.
Policy on Generative A.I.
This isn’t as much a policy as it is advice. For this class, I strongly recommend against using generative AI like ChatGPT, Co-Pilot or related technologies. I am not denying that ChatGPT can be a useful tool for getting something made, but I not convinced that it benefits your growth and learning of the material in this class.
- The most important point is that I am of the belief that increased usage of generative AI affects your ability to learn and to think critically. There is research that points to this as possibly being true, but we are in relatively early stages still. I think this also makes sense. You learn by doing things. I (Travis) am as good as I am at programming because I have been programming for 10 years. If you aren’t doing the critical thinking, the learning, the programming yourself, then that experience (and knowledge) will not stick with you.
- Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task
- AI Tools in Society: Impacts on Cognitive Offloading and the Future of Critical Thinking
- The Impact of Generative AI on Critical Thinking: Self-Reported Reductions in Cognitive Effort and Confidence Effects From a Survey of Knowledge Worker
- ChatGPT is pretty good at making things sound correct, in ways that can make it hard to discern when it is actually incorrect vs when it is spouting nonsense. (See ChatGPT is a bullshit generator. But it can still be amazingly useful). When you are first learning about a topic, it can be especially hard to determine what is correct and what is “incorrect but articulated in a way that sounds like it is correct”.
I do not claim that AI is useless by these statements. There are many things it can do, I just doubt their usefulness in this class with the purpose of learning. I will not ban the usage of ChatGPT or similar tools except for during exams. I will still be a little disappointed to see people using AI.
If you MUST use AI, then I suggest you read this article about how to use it well: https://horizon.mit.edu/insights/critical-thinking-in-the-age-of-ai. Notably, the first bullet point in the list at the bottom is: “Learn: Continue building your own body of knowledge and skills, even if it is seemingly something that a computer could do for you.”
Regardless of your usage, we expect you to be able to:
- explain & reason about your code yourself during office hours, project milestones and demos
- reason and think critically about exam questions without help. Questions will be designed for you to reason about them, not just to have memorized the correct answer.
All in all, use your best judgement.