I've taught the Spring course in Computer Networking at
UAlbany for two years now. The first year, it was a bit of a surprise and I was playing catchup from day one. The second time, it was a little less of a surprise, but I still spent a lot of time playing catchup. One of the results of this was that for a textbook, I defaulted to using the 2nd edition of Steven's classic
TCP/IP Illustrated, Volume 1, because I was familiar with it and liked it. But I've become concerned that there was a bit of divergence between the course syllabus and the book, so I decided to check out some of the alternatives. I now have copies of 4 other text books to review, and have found a large can with many worms inside. Since it's tolerably certain that I'll be teaching it again, I was going to work steadily on improvements over the next 8 months in any case, but just the quick once over of the textbooks suggested other things I should look at.
But first, I should describe the basic course parameters. It's offered by the Computer Science Department, so the presumption necessarily is that the average student will have experience in writing single threaded programs that run on a single computer, and limited knowledge of the hardware side of things. My observation on the student mix is that, having been given the choice between writing projects in C, and writing projects in Java, the class splits fairly evenly, so I expect to continue to accept projects in either language. I also note that student choice of OS on their laptops varies, which is ok with me, but does mean that if I want them to install any particular software, I need to keep that in mind. I can in theory go with Un*x/Linux only software given that all students have accounts on a University Solaris system, so I can make them ssh into it and work with a text based system, which the Windows types may find annoying, but I assert that it's good for them.
As the syllabus has evolved, I've found myself adding lots of stuff that's not in Stevens (and Stevens isn't really a programming text anyway, so the Socket Programming API has always been supplemental material), and I've been using my own ordering of presentation, which has gradually improving. I have leaned on some lectures written by a prior instructor for subjects like queuing theory. The projects to date have been socket programming exercises. A prior instructor used one of the
ns series of network simulators for exercises, but I haven't had a chance to really look at how I might integrate such a thing.
From the perspective of ordering of material, I need to get them doing some socket programming early, so at least a cursory outline of TCP functionality needs to be done very soon after the course starts, to provide a framework for understanding why the Sockets API is what it is. If I add network simulator exercises, I may (depending on the ordering of course material) be able to delay the first socket programming exercise a little.
So these are the sorts of things I have to consider as I go forward. Next posting will be a little bit about the 5 textbooks I have in hand right now.