Detailed exploration of the design space of programming languages, specifically the functional, imperative, logic and object-oriented programming languages. 

This course will introduce you to the field of computer science and the fundamentals of computer programming. Introduction to Computer Science I is specifically designed for students with no prior programming experience, and taking this course does not require a background in Computer Science. This course will touch upon a variety of fundamental topics within the field of Computer Science and will use Java, a high-level, portable, and well-constructed computer programming language developed by Sun Microsystems (now Oracle), to demonstrate those principles. We will begin with an overview of the course topics as well as a brief history of software development. We will cover basic object-oriented programming terminology and concepts such as objects, classes, inheritance, and polymorphism, as well as the fundamentals of Java, its primitive data types, relational operators, control statements, exception handling, and file input /output. By the end of the course, you should have a strong understanding of the fundamentals of Computer Science and the Java programming language. This course will lay the groundwork for a strong educational in Computer Science and a successful career devoted to implementing the principles you will learn as you progress through the CS discipline.


This course is a study of the evolution of computer architecture and the factors influencing the design of hardware and software elements of computer systems. Topics may include: instruction set design; processor micro-architecture and pipelining; cache and virtual memory organizations; protection and sharing; I/O and interrupts; in-order and out-of-order superscalar architectures; VLIW machines; vector supercomputers; multithreaded architectures; symmetric multiprocessors; and parallel computers.

Detailed exploration of the mathematical techniques used for the design and analysis of computer algorithms. Topics include: the study of computer algorithms for numeric and non-numeric problems; analysis of time and space requirements of algorithms; correctness of algorithms and NP-completeness