Edit (2023-12-06)
Having now taken CS 128 as well as completing a firmware engineering internship in which I produced real designs and programmed deliverables, I affirm that CS 128, despite some pitfalls, would make a far better introductory course than CS 124. I stand by the judgements made here.

TL;DR: The course is a waste of money because its content is published online by the professor for free, nothing is in person, and it's basically like a coding bootcamp for a CS-irrelevant programming language. It should be redesignated as an optional-but-recommended JVM programming course and replaced by CS 128 as the required introductory course for CS majors and minors.

This is a list of grievances regarding CS 124, "Intro to Computer Science I", the required introductory CS course at University of Illinois Urbana-Champaign. Under advisement of three software/computer engineering professionals who expressed concern over the quality of the course and its instruction, I wrote a letter concerning these grievances, sent to course and program coordinators.


Grievance 1: Method of delivery, value of the course

As of writing this, CS 124, considered "traditional delivery", is entirely online and has no lectures, discussions, or labs, and quizzes are proctored remotely over Zoom. Stripping away in-person interaction between students deprives them of development of real world communication and team building skills normally acquired in similar courses. Regarding course value, the professor exposes the same course materials on the internet for free. Despite this, the course is still required of CS majors at the same tuition rate of other engineering courses.

Grievance 2: Name-content disparity, validity as a CS course, and status as a program requirement

CS 124, "Intro to Computer Science I", is dishonestly named and advertised as a computer science course when it is, in fact, not. It would be more aptly named "Intro to Java Programming" (there is a difference between computer science and computer programming). The course inadequately covers the theory, math, and architecture of computers and computer programs, i.e. real computer science. Students will not fully understand the ramifications of the code they write. There is little justification for explicitly declaring it a computer science course or requiring it of incoming CS majors. Basically, it's more like doing a coding bootcamp rather than learning computer science.

Ironically, ECE 120 and 220 would be better intro CS courses than "Intro to Computer Science I."

Grievance 3: Choice of programming language

CS 124 is taught and tested in Java, a computer programming language unconducive to learning computer science, and is the only course in the UIUC CS sequence that uses Java. A student may have extensive prior programming experience (the case for many CS majors) but may be forced to take the course if they don't know Java—the programming language tested on the proficiency exam—making the course little more than a hindrance to higher education.

In essence, beginning the Computer Science main sequence with this course as it is now is nothing but a disservice to students paying tens of thousands for a high-quality education. (Edit 2023-12) CS 124 needs to transition to in-person delivery and needs to be turned into an actual CS (or CS-adjacent) course that uses C or C++, akin to 128. Otherwise, The course should be redesignated as an explicit intro programming course (e.g. "Java/Kotlin Programming") and made "optional but recommended" of main sequence CS students, with CS 128 being the introductory course.

Official Response

The official response I received is to the following effect for each grievance:

  1. The switch to the all-online delivery method was made during the COVID pandemic and it was kept afterwards for CS 124 because the course coordinators were comfortable with it, and student performance improved by most metrics. There are a variety of course delivery methods utilized within the university and more than enough resources are provided for CS 124.
  2. Teaching real computer science in CS 124 would make the course far too difficult for students, and real computer science is outside the scope of an introductory course.
  3. C/C++ are too hard for CS students to learn, and Java and Kotlin are provided to students to offer exposure to more programming languages. If a student doesn't want to take the course, they should just learn Java to test out of the course. Also, the course instructor really likes Kotlin.

The only real action taken was the opening of booked locations on campus during quiz times, even though the quiz is still proctored over Zoom. Several concerns remain unaddressed.

To the official response, I counter:

  1. Most other courses have returned to in-person delivery without a hitch and there is no reason why the CS department can't do the same. Improvement in student performance is easily attributable to plagiarism, or the lack of institutional integrity (anecdotally, I've known course assistants simply giving solutions to students). The response does not address the concern regarding professional development, or quality expectations given course pricing.
  2. Many students entering the CS program already have a good idea of how computers and computer programs work, or have written code prior. Holding back on exposing students to foundational computer systems knowledge hurts them in the long run as it forces them to internalize facts and methods of computer programming without underlying explanation—akin to having students try to learn calculus without prior knowledge of algebra—and forces them to later readjust their understanding of the subject when they are exposed to those fundamentals. The rationale for teaching "introductory computer science" in this highly abstracted manner is the result of the pervasion of the myth than anyone can or should learn to write code, even though software engineering and computer science are—and should be—highly specialized fields. The justification for teaching the course in the manner of a computer programing course is weak, and the dishonesty of calling it a computer science course remains unaddressed. Even as a computer programming course, the course is, in my humble opinion, not worth what is paid in tuition.
  3. C/C++ are difficult languages to learn, but the payoff is far greater and will leave students with a better intuition for how computers and computer programs work, which is what a CS course should do. A lot goes into learning a computer programming language, even if you have already written code and understand computer science/procedural programming concepts, because there are still the syntactical nuances and standard library to overcome. If the course isn't explicitly a programming course, the expectation that a student should learn an entire programming language to take a proficiency exam is completely absurd, especially when no other course in the program requires that programming language. Regardless, Java/Kotlin aren't great choices for teaching computer science because they are not direct analogues to machine code like C/C++ are; a lot of what the programmer writes is highly abstracted and handled behind the scenes, especially in the case of Kotlin.

Article hyperlink: https://joshstock.in/blog/uiuc-cs-education


To prevent spam, anonymous comments are held for moderation and may take a few days to appear.