I am a CS graduate student looking at my course options for the Fall
2005 semester. I have completed the 2 prerequisite courses for non-cs
undergraduates; CSE501 & CSE502. I am thinking about taking your CSE422
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.
- My best 422 student ever didn't know C/C++ ... but she did have a PhD in
bio-medicine or something. She 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 was from Caltech.
So, my take on it is if you are a problem solver, it's not an issue.
- A significant number of students who have taken our CSE 332S find the
C/C++ part of the projects challenging. Hmmm, what does that mean?
- 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.