Published on: 2024-06-24
CS Course Review CS161 C++
Written by Kyle Nicholson
My first ever university-level programming course was CS 161 - Computer Science 1, taught in the C++ programming language. CS 161 is one of the first courses you’d take as a freshman computer science student. It is essentially an introduction to programming that emphasizes fundamental programming concepts like variables, data types, data structures, and basic algorithms. This course is offered at different schools in several different programming languages, including Java, Python, C#, and my ultimate choice of C++.
C++ may seem like an odd choice for a beginner-level programming course, especially when compared with Python, which is much more approachable for someone who is brand new to programming. I decided on C++ because I was already self-teaching Python and had a basic understanding of most of the core concepts of programming. I was cautioned by several people that C++ was complicated and out of date. However, I ignored the warnings because I was curious about C++ and I knew that taking the course in an unfamiliar language would push the limits of my understanding.
This post will be a short reflection on my experience taking CS 161 taught at Lane Community College in Eugene Oregon.
This course combined in-person and virtual enrollment - with some students being onsite at the college and some being remote. Each week covered a separate module that focused on a different concept through readings from a textbook and lectures recorded by the professor. There were assignments and short (open note) quizzes every week.
The assignments included a ‘debugging’ exercise which presented code with some errors the student needed to fix. Each student was also assigned to grade two other students’ debugging based on a rubric provided by the professor. Finally, there was a lab assignment each week, which was essentially a coding problem or instructions to build a specific program to accomplish a task that applied the concepts from the readings and lecture.
Early labs simply involved getting the Integrated Development Environment (IDE) set up correctly and writing simple input/output programs. The labs became progressively more complex as new concepts were introduced, with projects such as D&D character generator, a CLI-based treasure-hunting game, and an implementation of simple data structures and algorithms like linked lists and binary search.
There were two exams for the course: A midterm and a final exam. Both exams involved a combination of multiple-choice, true-false, short-answer questions, and longer debugging and coding problems. The final exam was not cumulative, and neither exam was proctored.
Labs were the most enjoyable part of the class for me. I learn best by getting my hands on the keyboard and writing code, and it felt good to solve problems without significant hand holding. I did rely on GPT occasionally when I was stuck on a specific step. I think this is excusable when you’re a virtual student without easy access to the professor or a TA.
Grading was fair and most of the feedback I received was constructive. The instructor seemed to be reviewing the code and offering reasonable suggestions for improvement.
CLion IDE was great to use - easy to get up and running, fast, user-friendly. I liked it a lot more than Visual Studio and was excited to find out the student license allowed me to keep it for a year.
The textbook was borderline useless: Convoluted, incomplete, unnecessarily verbose, and pedantic are some words I’d use to describe it. I eventually stopped reading it because it was taking too long to understand the point that the author was trying to get across.
The lectures were recorded live in the classroom which seemed to have several acoustic issues. The microphone seemed to be far away from the speaker and also picked up a lot of distracting room noise. A simple lapel microphone could have greatly enhanced the audio quality of the lectures. I eventually stopped watching them and only read the Powerpoints to get the gist of it.
Breadth of material was emphasized over depth - perhaps necessary for a beginner programming course, but would have liked to get deeper on certain concepts rather than spending a week getting a superficial knowledge of the concept and then moving on to something completely different.
I enjoyed taking CS161 at Lane Community College overall. I learned a new low-level programming language to a basic level of proficiency. I became much more acquainted with the object-oriented paradigm. I learned how to implement basic data structures and algorithms. It was also eye-opening and useful to see the similarities and differences between C++ and Python. I think I became a better programmer because of this course.
I did not think the course was very challenging, but I mostly attribute that to my prior knowledge. I can’t imagine taking this class as someone with no previous programming experience: In 10 weeks, you are going from cout<<
(print) statements to functions, objects, classes, inheritance, data structures and algorithms. C++ is not a beginner-friendly language, and even some of the most basic concepts can be hard to get your head around given the complex syntax.
If you are brand new to programming, my advice would be to avoid the C++ version of this course and instead choose Python or maybe C# depending on what’s available. I would only recommend the C++ version if you have some experience with another language, are curious about C++ and want to dive a bit deeper into a low-level language.