Post-Baccalaureate in Computer Science

My post-baccalaureate Certificate from Mills College is essentially a Bachelor’s degree in Computer Science, minus the general education classes (such as writing, foreign language, or world cultures) required by a typical undergraduate liberal arts degree.

I took the following nine courses at Mills College (GPA: 3.96/4.0):

Discrete Math I. The Discrete Mathematics I–II sequence studies the fundamental mathematical ideas that are used in various disciplines of computer science. Emphasis is placed on problem-solving techniques. Topics are selected from: logic, Boolean algebra, proof techniques such as mathematical induction and proof by contradiction, sums, sets, and the Halting Problem.

Introduction to Computer Science. Problem solving with computers. Problem decomposition, development of graphical user interfaces, development of simple algorithms, and the design and construction of computer programs using object-oriented techniques and the Java programming language.

Computer Concepts and Intermediate Programming. A continuation of problem solving with computers. Emphasis is placed on static and dynamic data structures. These data structures are used to implement various well-known algorithms for searching, sorting, list and string processing, etc.

Computer Architecture. A thorough introduction to computer architecture and digital logic. Students gain a deep understanding of computers by building and microprogramming their own computer and covering the following topics: Boolean algebra, binary number representation and arithmetic, assembly language, caches, and data paths.

Data Structures and Algorithms. The study of fundamental data structures such as lists, queues, stacks, heaps, hash tables, and trees. An introduction to computational complexity in terms of time and space. The implementation and analysis of sorting and searching algorithms, and as time permits, some graph algorithms.

Theory of Algorithms. An introduction to general algorithmic techniques including divide-and-conquer, dynamic programming, and greedy algorithms. Construction and analysis of some important classes of algorithms such as graph algorithms and string algorithms. An introduction to the complexity classes P, NP, and NP-complete (tractable versus intractable problems). If time allows, special topics, such as approximate algorithms, parallel algorithms, computability, and undecidability, may be included.

Programming Languages. Theory, design, and implementation of programming languages. Topics include different programming paradigms, such as declarative, functional, imperative, object-oriented, and concurrent; specification of a language’s syntax and semantics; definitions, implementation, and inferences of types; and automatic memory management.

Software Engineering. A course designed to help students transform themselves into skilled software engineers, able to apply their knowledge of coding, algorithms, and systems to write elegant, efficient, and correct programs. Topics include techniques and tools for design, documentation, collaboration, development, building, testing, debugging, and maintenance, primarily using the extreme programming methodology.

Cryptography and Network Security. This course teaches cryptography, explores threats against computer networks and teaches the various techniques used to provide network security. It covers basic relevant background in number theory and statistics, some networking principles, classic ciphers, and the most important current security fundamentals such as confidentiality, authentication, integrity, and non-repudiation. Undergraduate students learn and present case studies, while graduate students conduct small-scale research where they identify a problem, execute research, and write and present the results.