Question From a Student:
I am a CS graduate student looking at my course options for the next
semester. I have completed the 2 prerequisite courses for non-cs
undergraduates; CSE501 & CSE502.
I am thinking about taking your CSE 422S course.
I am concerned about the C++ requirement for the course.
I have no practical C++ experience; my background is Java, VB, Fortran,
Assembly. Do you feel this will be a problem? Do you have any
suggestions?
Here is my standard answer to this question:
- CSE 422S assumes that you have taken CSE 332S (or whatever the C++/OO
course is now numbered). Some number of students ignore this
requirement or think that it is unimportant. Some regret it.
- The major projects (there are 2 or 3) must be written in C/C++.
I don't care which although I prefer streamlined C++; i.e., I don't
care about extreme reusability.
- C/C++ is just a tool ... like arithmetic.
- One of my best 422 students didn't know C/C++ ... but she/he did have
a PhD in bio-medicine or something.
She/He did know some Java.
My best student ever in Programming Languages and Systems
(use to be numbered CS 455) was a biology major with no
programming experience. But he did graduate from Caltech.
So, my take on it is it depends on your intellegence and what kind
of a learning skills you have.
- A significant number of students who have taken our CSE 332S (C++/OO)
find the C/C++ part of the projects challenging.
My impression is that these students had not developed enough
confidence in C/C++ while taking CSE 332S.
This confidence comes from time spent in the practice of thinking
about and writing non-trivial C/C++ programs.
- Here are some C/C++ things that seem to burn up student time:
- Pointers, dynamic storage allocation, internal representation
(e.g., C-string versus integer variable),
vague understanding of BASIC C/C++ semantics
- Here are some C++ things that are not required but seem to
make life much easier:
Using C++ STL map and queue templates, gdb (Gnu debugger)
- Many (Most?) students claim that 422 is the first time they had to write
a real program. I think they really meant it was the first time they
had to build a system by writing a program that solved a problem ... where
they were given great design and implementation lattitude. The
projects (in hindsight) are not real: 1) They are toys; 2) They are
500-1000 lines of code, not 100,000 lines; 3) We assume in many cases
that the input is correct and put just enough code to protect us;
4) The project requirements are stable (although not completely
defined), not based on the whims of a nebulous user base,; and
5) We only have a few weeks to test the code, not 6 months.
- The conceptual core of the course is NOT writing C/C++ programs although
some students think it is. The core is about OS concepts and their
implementation: 1) OS services offered through the system call
interface and command language; 2) Concurrency (software and
hardware); 3) Resource management and scheduling; 4) I/O; and
5) OS abstractions (e.g., Virtual Memory).
- Most students say they learn a lot from the course ... but that depends
on the student, not the instructor.