Courses Taught
 University of Texas at San Antonio 
Neal R. Wagner

I taught many courses, but only these are in machine-readable form. All but CS3743 and CS4313 were online.

For programming projects, see Projects.

Highlights
Course Best Version
CS 2213 Advanced Programming   Only one: Spr05
Self-replicating C programs
CS 2733 Computer Organization II   Latest: Fall04
CS 3343 Algorithms   Latest: Fall12
Normalize / denormalize
Hamiltonian Paths I, Hamiltonian Paths II
"Weird" topics (Calendar pages: Spr12, Fall12)
My most complex UNIX systems program!
CS 3723 Programming Languages   Latest: Fall14
Python, Ruby, PostScript, Lisp
CS 4363 Cryptography   Not latest: Spr03

List of All Courses
Course Best Version
CS 1023 Cultural Implications of the Information Society     None kept.
CS 1063 Introduction to Computer Programming   None kept.
CS 1073 Programming for Scientific Applications   None kept.
CS 1713 Introduction to Computer Science   Not latest: Spr98
CS 1723 Data Structures   Not latest: Fall98
CS 2073 Engineering Programming   None kept.
CS 2213 Advanced Programming   Only one: Spr05
CS 2733 Computer Organization II   Latest: Fall04
CS 3323 Topics in Programming Languages   Latest: Fall99
CS 3343 Algorithms,   Latest: Fall12
CS 3723 Programming Languages   Latest: Fall14
CS 3743 Database Management Systems   Only one: Fall03
CS 4313 Automata and Formal Language Theory   Only one: Spr97
CS 4363 Cryptography   Not latest: Spr03
CS 4953 Information Theory   Not offered.
CS 5363 Programming Languages and Compilers  Not kept


CS 1713: Intro. to Computer Science
    Fall03, Spr01, Spr98.

  • The latest two iterations of this course had mostly standard content, course materials, and method of teaching it. The materials were well-prepared, but not the way I would have taught the course on my own.

CS 1723: Data Structures
    Fall01, Fall98, Spr97.

  • The most recent iteration had required standard content and course materials, which were well-prepared but not the way I would have taught the course by myself.

CS 2213: Advanced Programming
    Spr05.

  • I only got to teach this course once. The students had already seen Java through data structures, and now we were teaching them C. My idea was to do C well, but to give them an overview of the differences and similarities between C, Java, and C++. I planned to improve the notes at the next iteration.
  • I loved my material about self-reproducing programs (see Recitation 7 or Self Replicating C Programs).

CS 2733: Computer Organization II
    Fall04, Spr04, Fall03, Spr03, Fall02, Spr02, Fall01, Spr01, Fall00, Spr00, Fall99, Spr99, Fall98.

  • The first time I taught this course (Fall 1998), it was particularly challenging because I had never studied the material. (I've never been much of a hardware person.) That first time I leaned heavily on the materials that Kay Robbins had prepared the semester before. I continued to use some of her materials the whole time I taught the course.
  • As time went on, I eased up on the difficulty of the recitation material because of all the copying that occurred with harder recitations. (See MIPS Single-cycle Simulator.)
  • I liked teaching the course and admired the textbook. The last time I taught this course, they came out with the 3rd edition (with my name in the Preface!).

CS 3323: Topics in Programming Languages
    Fall99, Spr99.

  • For many years, UTSA had 1-hour language courses. Eventually these were replaced by a 3-hour course covering 3 languages, initially Ada/C/Lisp. By the time I taught the course, the three languages had become Java/C++/Lisp.
  • The first time I taught the course, I used a Lisp project that asked them to write an interpreter for "pure" Lisp. The resulting interpreter included functions with parameters, so it wasn't a completely toy system. This assignment was first conceived by William F. Dowling at Drexel University. I used the assignment myself at that time, and we worked on it together, but the details were mostly his. The assignment and a solution (in C) are at: Lisp Interpreter. My solution seems to have some problem with "defun". Since it once worked, there must be some simple problem.

CS 3343: Algorithms
    Fall12, Spr12, Spr04 (9 weeks).
    Normalize / denormalize (interesting and related examples that came up).

  • I taught the first 9 weeks of this course because the regular instructor took a leave to take care of a new child. Initially it was to be 6 weeks, but that stretched out to 9 weeks, complicating the course organization.
  • In Spring 2012, because of a shortage of instructors, UTSA asked me to teach the algorithms course, which I did twice, long after I had retired.

CS 3723: Programming Languages
    Fall14, Spr14, Fall13, Spr13, Spr05, Fall04, Spr04, Fall03, Spr03, Fall02, Spr02, Fall01, Spr01, Fall00, Spr00.

  • I taught programming languages and compiler courses starting in 1977. This was not my field, but I got started and continued with them because of a lack of instructors.
  • Before the Spring of 2000, UTSA had a required course "Topics in Programming Languages", CS 3323. For the Spring 2000 course, most of my students had already taken CS 3323, so I decided to make it more challenging by covering mainly compiler topics. I liked these topics more anyway, and thought they were more worthwhile. (See All Compilers.)
  • In Fall 2002, we added a required 1-hour recitation. I restructured the homework so that there was something each week. I also came to realize that if the recitations were too hard, some students would just copy.
  • During the lifetime of this course, a high priority for me was to teach syntax-directed translation. Each time I taught the course I made this part easier and added other material. The final iteration (Spr05) still has a legitimate compiler, but it is feasible to complete in just 3 recitations. The language is structured so that are tokens are just single characters, so that a scanner is trivial to write. (See Simple Compiler.)
  • Starting with Spring 2004, I added to the course the Ruby language as an interesting object-oriented example. This was before Ruby became so popular.
  • Starting with Spring 2013, UTSA had lost 2 of its programming language instructors, and I got to teach this course 4 more times, long after I had retired.
  • In Spring 2014 I switched from Ruby to Python, mainly because Python had become much more popular than Ruby. In Fall 2014 I had the class use only Python for all their programming.

CS 3743: Database Management Systems
    Fall93.

  • I no longer have a machine-readable copy.
  • The main interesting feature of this course is a programming project to implement a relational database management system based on the relational algebra. (See Database Management System.)

CS 4313: Automata and Formal Language Theory
    Spr97.

  • I no longer have a machine-readable copy.
  • The main interesting feature of this course is a programming project to implement a recognizer of arbitrary regular expressions. (See Regular Expression Recognizer.)

CS 4363: Cryptography
    Spr07 (5 classes), Spr03, Spr02.

  • This is one of my areas of research. The course is complicated by the need for mathematics background that few of our students have. In the end I partially completed a textbook for this course (not published): The Laws of Cryptography.