John’s Undergraduate Courses – Computer Science (6 courses)

Aug 1997 – Oct 1997, Grade: A
This course introduces structured programming using the C programming language, with emphasis on modular design and functional decomposition. Topics include problem solving and algorithm development, the syntax and semantics of sequential, iterative, and conditional control structures, functions, arrays, pointers, and simple I/O. Students will be expected to design and implement programs in C. Intended audience: computer science and computer engineering students and those students desiring a background in the C programming language.

Oct 2002 – Dec 1997, Grade: A
This course continues the development of discipline in programming design, style and expression, and debugging and testing. It provides sufficient programming background for other 2000, 3000, and 4000 level computer science courses. Topics include complex data types, indirect addressing, file I/O, dynamic memory allocation, elementary data structures, algorithm analysis, recursion, internal sort/search methods, and step-wise refinement of both procedures and data. Object-oriented concepts will be discussed as time allows. Students will be expected to design and implement reasonably large and complex programs in C. In addition, the students will learn how and when to use appropriate high-level tools available with the UNIX Operating System for program development. If time permits, C++ extensions will be included. Intended audience: computer science majors who do not have a strong background in these topics and noncomputer science majors who desire further programming experience or who intend to pursue upper-level computer science courses.

Jan 1999 – Feb 1999, Grade: A
This course introduces students to the structure and behavior of digital computers at several levels of abstraction. Starting with a high-level view of functional components, the course progresses through the system from the point of view assembly language programming, microprogramming, and logic circuits. Topics include the functional organization of computer hardware, the functions of assemblers, linkers, and loaders, representations of numbers in computers, basic assembly language instruction sets, addressing modes, stacks and procedures, low-level I/O, concepts and examples of microprogramming, and logic circuits. Students will be expected to write programs in an assembly language. Intended audience: computer science and computer engineering students, and those desiring a deeper understanding of the low-level functionality of a computer.

Aug 1999 – Oct 1999, Grade: A
This course serves as an introduction to some of the more important concepts, techniques, and structures of discrete mathematics, providing a bridge between computer science and mathematics. Topics include functions and relations, sets, countability, groups, graphs, propositional and predicate calculus, and permutations and combinations. Students will be expected to develop simple proofs for problems drawn primarily from computer science and applied mathematics.

Oct 1999 – Dec 1999, Grade: A
Building on a fundamental knowledge of data structures, data abstraction techniques, and mathematical tools, a number of examples of algorithm design and analysis, worst case and average case, will be developed.  Topics include greedy algorithms, divide-and-conquer, dynamic programming, heuristics, and probabilistic algorithms. Problems will be drawn from areas such as sorting, graph theory, and string processing. The influence of the computational model on algorithm design will be discussed.  Students will be expected to perform analysis on a variety of algorithms.  Intended audience: those desiring a deeper understanding of algorithm design and analysis.

Apr 1999 – May 1999, Grade: A
This course develops in the student an understanding of the nature and importance of problems concerning the efficiency and effectiveness of human interaction with computer-based systems. Topics include the design and evaluation of interactive computer systems, basic psychological considerations of interaction, interactive language design, interactive hardware design, and special input/output techniques. Students will be expected to complete two projects. A project might be a software evaluation, interface development, or an experiment.