cs_courses
Department of Mathematics and Computer Science
Hobart and William Smith Colleges
Computer Science Course Descriptions
Principles of Computer Science
Designed to appeal to a diverse audience, this course examines some of the fundamental ideas of the science of computing. Lectures and hands-on assignments cover a wide variety of topics such as hardware organization, the Internet, computer programming, limits of computing, and graphics. No prerequisites. This course counts towards the major and minor in computer science but cannot be taken after completion of CPSC 124. (Offered every fall, every second spring)
Introduction to Programming
An introduction to the theory and practice of computer programming, the emphasis of this course is on techniques of program development within the object-oriented paradigm. Topics include control structures, objects, classes, inheritance, simple data structures, and basic concepts of software development. Currently, Java is the programming language used in the course. This course has a required lab component, and is required for the major and minor in computer science. (Offered every semester)
Introduction to Computer Architecture
A broad introduction to computer architecture, this course shows students how computers really work and how millions of transistors come together to form a complete computing system. Topics covered include transistors, logic gates, basic processor components, memory, input/output devices, and low-level machine instructions. This course has a required lab component, and is required for the major in computer science. Prerequisite: CPSC 124. (Offered annually)
Intermediate Programming
This course builds on CPSC 124, covering some of the more advanced fundamentals of programming including basic data structures (such as lists, stacks and queues, binary trees, and hash tables), recursion, common algorithms (such as searching and sorting), and generic programming. This course also looks more deeply at object-oriented programming, including the use of class hierarchies. Currently, the course is taught using the Java programming language. This course has a required lab component and is required for the major and minor in computer science. Prerequisite: CPSC 124. (Offered annually)
Embedded Computing
Small, inexpensive, powerful, and pervasive computers have fostered a revolution in our daily lives. This course makes this revolution tangible through basic electronics theory, building electronic circuits, implementing logic gates and combinatorial circuits, and ultimately designing systems employing microprocessors and peripherals. Practical projects are emphasized, such as designing, building, and programming a microprocessor-controlled mobile robot. Prerequisites: CPSC 225 or permission of the instructor. (Offered alternate years)
Fundamentals of Computation
This course introduces students to some of the mathematical and theoretical foundations of computer science, and to their practical applications to computing. Topics include propositional and predicate logic, sets and functions, formal languages, finite automata, regular expressions, grammars, and Turing machines. CPSC 229 is a required course for the major in computer science. Prerequisite: CPSC 124. (Offered annually)
Topics in Computer Science
Each time this course is offered, it addresses a topic in computer science that is not covered as a regular course. The topic is covered at a level that is appropriate for any student who has successfully completed an introductory programming course. Possible topics include web programming, human-computer interaction, and Linux system and server administration. This course may be repeated for credit by permission of the department. Prerequisite: CPSC 124 or permission of the instructor. (Offered alternate years)
Data Structures and Algorithms
This course continues the study of data structures and algorithms, focusing on algorithm design and analysis and the relationships between data representation, algorithm design, and program efficiency. Topics include advanced data structures, key algorithm design techniques, analysis of the time and space requirements of algorithms, and characterizing the difficulty of solving a problem. Concrete examples will be drawn from a variety of domains, such as algorithms for graphs and networks, cryptography, data compression, strings, geometric problems, indexing and search, numerical problems, and parallel computation. This course is required for the major in computer science. Prerequisites: CPSC 225; CPSC 229 is recommended. (Offered annually)
Software Development
This course continues the study of programming by focusing on software design, development, and verification - the skills beyond fluency in a particular language which are necessary for developing large, reliable programs. Topics include object-oriented design, the use of APIs, and testing and verification. Techniques common in modern software development will also be studied. Specific techniques may include GUIs and event-driven programming, multi-threading, client-server networking, fault-tolerant computing, stream programming, and security. This course is required for the major in computer science. It includes a required lab component. Prerequisite: CPSC 225. (Offered annually)
Thanks from DABLIO_RAJA