Skip to content


This page describes my path to earning a B.Sc in Computer Science from the Evergreen State College.

Here you’ll find a summary section which is a list of courses I completed. It contains metadata like credits earned, dates, and credentials conferred. Below this is a corresponding course catalog whose descriptions were written by the faculty members who curated each program.

Table of contents

Open Table of contents


Credentials Conferred

Bachelor of Science; Awarded 14 Jun 2013

Transfer Credit

2005-092009-0690South Puget Sound Community College

Evergreen Undergraduate Credit

2011-092012-0648Computer Science Foundations
4Introduction to Programming in Haskell
4Java Programming I
4Java Programming II
4Computer Organization
4Computer Architecture I
4Computer Architecture II
4Discrete Mathematics I
4Discrete Mathematics II
4Discrete Mathematics III
4Seminar: Explorations in the Cognitive Science of Mathematics and Computing
4Seminar: Ethics and Technology
4Seminar: Explorations in Robotics
2012-092013-0332Computability and Language Theory
8Programming Language Design I, II
8Programming Language Project I, II
8Haskell I, II
8Formal Languages I, II
2013-042013-0616Computing Practice and Theory
4Statistics, Modeling, and Data Analytics
4Data Mining, Machine Learning and Pattern Recognition
4Computing Theory and Practice: Advancing the Practice of Science (Seminar and Lecture)
4Student Project: Research and/or Programming Practicum


186 Total Undergraduate Credits Earned

Computer Science Foundations


Computer Science Foundations students engaged in intensive study of introductory/intermediate undergraduate computer science. Students were evaluated based on attendance, participation in program activities, written work (including computer programs and executable logic models), and performance on examinations. Students completed some or all of the various parts of the program described below

Introduction to Programming in Haskell

Introduction to Programming in Haskell covered the fundamental concepts and practice of computer programming and problem-solving using Haskell, a functional programming language. Haskell is very well suited for high-level problem-solving, and the problem-solving aspects of programming were emphasized. During the fall quarter students concentrated on how to write and debug Haskell programs and how to develop functional solutions to problems using primarily integers and lists. They studied how to construct programs from previously written components as well as how to read, understand, debug, and design programs. They also learned about recursion, types, and higher-order programming constructs such as maps, filters, list comprehensions, and folds. Students were evaluated based on eight programming assignments, seven laboratory assignments, a midterm exam, and a comprehensive final exam. The text for this portion of the program was Programming in Haskell by Graham Hutton.

Programming in Java I

Programming in Java I used the textbook Big Java, 4th edition by Cay Horstmann, and introduced students to programming in Java. Students learned:

Students were evaluated on eight programming assignments, a midterm, and a final. By the end of this class, students understood the basics of Java programming and simple uses of object-oriented programming and design.

Programming in Java II

Programming in Java II continued with the textbook Big Java, 4th edition by Cay Horstmann. Students learned

Students were evaluated on eight programming assignments, a midterm, and a final. By the end of this class, students understood the basics of Java programming design, the use of classes, interfaces, and type parameters to support reusable implementations and design.

Computer Organization

In Computer Organization the students studied the organization and logic of simple central processing units from the digital logic level to the instruction set architecture level. Topics included the representation of data in binary and hex, combinational logic, sequential logic, register transfer level data path architecture, and the instruction set level architecture. Students studied Chapters 1 to 10 of the textbook DigitalComputer Electronics, third edition, by Albert Malvino and Gerald Brown, along with supplementary handout material. The class included weekly labs using a logic modeling program (Logisim) to build and simulate logic circuits. The lab work concluded with a complete logic model and simulation of a very simple Von Neumann-style computer. Students were evaluated on their attendance and participation in classroom learning activities, their weekly homework assignments, weekly labs, two examinations, and the final Computer Modeling Project.

Computer Architecture I

Computer Architecture I extended the study of machine organization from the register-transfer level architecture to the instruction set architecture and assembly language level of abstraction using the JavaVirtual Machine (JVM) with the Jasmin JVM assembler. Students were first assigned simple assembly language programs with loops and decisions using a very simple 8-instruction accumulator-based Turing-complete machine. Studies then shifted to the architecture and assembly language programming of the Java Virtual Machine language, covering Chapters 1 to 5 and 10 of the textbook Computer Organization and Assembly Language, by Patrick Juola. Topics included JVM implementations of Java arrays, records, classes, objects and method calls as well as the usual low-level assembly programming. There were two examinations, weekly textbook assignments, and 8 hands-on JVM assembly language programming laboratory assignments.

Computer Architecture II

Computer Architecture II continued the study of the Java Virtual Machine in the first half of the quarter with an emphasis on the implementation of the object-oriented features of Java, such as object creation, garbage collection, instance field access and update, method call and return, inheritance and polymorphism, and dynamic dispatch. The second half of the quarter covered key architectural concepts in systems and in support of high-level languages and operating systems: caching, interrupt handling, direct memory access, memory management, compiling, linking, loading, relocation, and virtual memory. Textbook material included Chapters 4-7 of Principles of Computer Architecture, by Miles Murdocca, and Chapter 1 of Operating Systems, by William Stallings. Students were assigned three programming lab exercises and weekly textbook exercises. There were two examinations.

Discrete Mathematics I

In Discrete Mathematics I, students learned some of the standard topics in Discrete Mathematics, including propositional logic, predicate logic, Boolean algebra, methods of proof, elementary set theory, functions, summations, graph theory, induction, and recurrence relations. The text used was DiscreteMathematics, fifth edition by Dossey et al., from which chapters 2, 4, and 9 were covered. Students submitted weekly problem sets and took five quizzes and two exams.

Discrete Mathematics II

In Discrete Mathematics II, students learned some intermediate topics in Discrete Mathematics including trees, combinatorics, and number theory. The text used was Discrete Mathematics, fifth edition by Dossey et al., from which chapters 1, 3, 5, 8, and parts of chapter 6 were covered. Students submitted seven problem sets and took four quizzes, a midterm, and a final exam.

Discrete Mathematics III

In Discrete Mathematics III, students studied probability and statistics using R for five weeks and game theory for five weeks. The study of probability is built on work in combinatorics from DMath II. The emphasis was on binomial and multinomial distributions, and this formed the basis for understanding normal distributions, probability densities, confidence intervals, and testing hypotheses. As a text, we used the first few chapters of Introduction to Probability and Statistics using R (IPSUR) by Jay Kerns and the first five problems in Fifty Challenging Problems in Probability by Mosteller. For Combinatorial GameTheory we covered the first three chapters of Lessons in Play by Albert et al. Students were evaluated based on 6 homework assignments, three quizzes, class participation, and two exams. The midterm consisted of in-class and take-home components. The final exam was in class.

Seminar: Explorations in The Cognitive Science of Mathematics and Computing

In the fall term seminar Explorations in The Cognitive Science of Mathematics and Computing, students read Where Mathematics Comes From by Lakoff and Nuñez, Arcadia by Tom Stoppard, and Alone Together by Sherry Turkle. Students participated in a weekly two-hour seminar discussion of the readings and wrote two papers exploring the role of metaphor in our cognition of mathematics and technology. Each student also posted online reflections on the reading and responded to the postings of other students.

Seminar: Ethics and Technology

In the winter term Ethics and Technology seminar students studied 8 chapters of the text Ethics andTechnology, by Herman T. Tavani, covering ethical frameworks and theories, critical thinking and logical arguments, professional ethics, free speech and commerce, privacy in cyberspace, intellectual property, and the ethical issues of pervasive computing and convergent technologies. Students participated in weekly discussions on the readings and wrote three papers analyzing specific ethical issues arising from new technologies using the methods introduced in the textbook.

Seminar: Explorations in Robotics

The spring quarter seminar Explorations in Robotics was a combination of reading, discussion, and laboratory experimentation on the general topic of robots and robotic systems. Students met in weekly discussions on chapter readings from the book The Robot, by Lisa Nocks along with the journal articles: Seven Big Ideas in Robotics, by David S. Touretzky, Elephants Don’t Play Chess, by Rodney A. Brooks, a Radiolab presentation Talking to Machines, and a Video presentation Fast, Cheap and Out of Control by filmmaker Errol Morris based on Rodney Brooks work at the MIT Artificial Intelligence Lab and his journal article of the same title. Students participated in two hands-on robot labs using the Lego robots and the Lejos class library to program simple robot actions and then a simple learning algorithm. Students were evaluated on their attendance and participation in discussions and laboratory exercises along with two written lab reports.

Computability and Language Theory


Computability and the Study of Formal Languages is an advanced computer science program, covering the study of Logic, Programming Language Design, Formal Languages, and Haskel (a high-level functional programming language). Students complete up to four of the five possible threads. These threads are described below and the student’s participation is evaluated immediately following

Programming Language Design I, II

This component studied the issues involved in programming language design. Using the textbookProgramming Languages: Principles and Paradigms by Allen Tucker and Robert Noonan, the class studied lexical analysis, parsing, type systems, how we give meaning to a program written in a high-level language, interpretation, and the impact design decisions have on the language and the interpretation process.

During the winter, students studied how functions are implemented and extended their study of languages to include the untyped lambda calculus, typing algorithms, and the multi-paradigm language SCALA. Students were evaluated on chapter assignments, two major labs (lambda calculus and SCALA), and two exams.

Programming Language Project I, II

In the project component of the program, students worked on implementing a small C-like language called C-lite in work that was coordinated with the Tucker and Noonan textbook study of programming language principles. Students were expected to implement five phases of an interpreter for the language: lexical analysis, parsing, static type checking, type transformation, and semantic interpretation. They were evaluated based on successful progress on the implementation project.

During the winter, students extended their small Clite language to include function declarations and function calls (CliteF). They extended their type system to allow for functions and substantially modified their interpreter to allow for multiple function definitions and a more complex idea of scope. Students were evaluated based on their implementation progress.

Haskell I, II

In the fall, students studied advanced functional programming concepts and techniques using the Haskell programming language. Weekly topics included higher-order functions, programming with lazy evaluation, modules, abstract data types, algebraic data types, type classes, overloading, polymorphism, and an introduction to monads. Students were evaluated based on 8 programming assignments and two exams.

During the winter quarter, the students studied higher-order functional combinators leading to programming and proofs with type classes and type class instances for functors, applicative functors, monoids, and a variety of monads (including the state monad). Students also studied polymorphic type inference and practiced making effective use of types to better understand Haskell programs. Students were again evaluated based on 8 programming assignments and two exams.

Formal Languages I, II

During the fall, the class studied formal languages using the textbook Languages and Machines by Thomas Sudkamp. In the fall, we covered the definition of regular sets, grammars, and languages and their properties, context-free grammars, normal forms for context-free grammars, and finite automata and their properties. Students were evaluated on weekly chapter assignments and two exams.

During the winter the class continued in the same textbook. Winter topics included the Pumping lemma for both regular and context-free languages, push-down automata, Turing machines, Turing computable functions, the Chomsky hierarchy, Decision problems, and Undecidability. Students were evaluated on weekly chapter assignments and two exams.

Logic I, II

During the fall, students studied propositional and predicate logic using the textbook Logic for Applications by Anil Nerode and Richard A. Shore. The class studied the full formal treatment of these logics emphasizing tableau proofs, models, soundness and completeness of the logics, conversion to clausal form, and the relation of the predicate logic to Prolog. Students also began studying the Prolog programming language. Students were evaluated based on weekly chapter assignments, 2 exams, and classroom participation.

During the winter students continued in the same textbook. The students covered modal logic, constructive logic, paramodulation, prolog as a programming language based on resolution as a computational model, and definite clause grammar. Students were evaluated on chapter assignments, two exams, three prolog workshops, and three prolog programming assignments.

Computing Practice and Theory


This project-oriented program combined the theory and practice of pattern analysis and modeling within the context of eScience and explored how pattern analysis, modeling, and statistics advance the sciences, particularly environmental science. The program consisted of a seminar, data mining, data analysis, and a project of the student’s choosing.

Statistics, Modeling, and Data Analytics

Data analysis and statistics exposed students to a range of research design and data analysis methods and some modeling and visualization tools. The primary focus was on the application and interpretation of statistical methods including graphical and tabular summaries, distributions, t-tests, analysis of variance (ANOVA), Chi-square tests, linear regression, and non-parametric (Monte Carlo/resampling) approaches. We also briefly addressed modeling (using STELLA) and scientific visualization(using Processing). Students completed weekly labs and demonstrated their understanding in nine lab reports, five quizzes, and midterm and final in-class and take-home exams. Text: Gotelli and Ellison, APrimer of Ecological Statistics. Software used included MS Excel for data management and presentation, the Resampling add-in for Excel, and JMP for statistical analysis. We also introduced students to R and STELLA.

Data Mining, Machine Learning, and Pattern Recognition

In data mining, students learned about problems in classification, clustering, and regression. They learned about the theory and application of decision trees, rule sets, and linear models. The evaluation and optimization of these techniques are based on statistical tests and information theory. The Wekasoftware framework allowed them to perform experiments comparing a wide variety of algorithms, although they also worked with implementing a k-means clustering algorithm. Students were evaluated on six required and one optional laboratory report and five homework assignments. They also took two exams and five quizzes. The text was Witten, Frank, and Hall: Data Mining: Practical Machine Learning Tools and Techniques, 3rd Edition.

Seminar: Computing Theory and Practice: Advancing the Practice of Science

The seminar focused on the impact of computation and statistics on science and society and included guest lectures on how scientists use computing. Students read three books: Meadows, Thinking in Systems; Salsburg, The Lady Tasting Tea: How Statistics Revolutionized Science in the Twentieth Century; and Lanier, You Are Not a Gadget. We also read scholarly articles by Megler and Howe (see lectures below)and sections from Weizenbaum’s Computer Power and Human Reason. Students were asked to write a 1-2 page paper each week.

Experts in environmental science and computer science presented weekly lectures:

  1. Nik Stevenson-Molnar, Conservation Biology Institute: Data Basin’s programming practices
  2. Lois Delcambre, PortlandState University: Machine learning to classify user web sessions for the Danish Cancer Society
  3. Veronika Megler, Portland State University: Database technology to serve science – an oceanography case study
  4. Guillaume S. Mauger, University of Washington: Introduction to climate change and climate change models
  5. Bill Howe, University of Washington: Cloud computing to support interactive, visual, exploratory science
  6. Michael Wolfe, The Portland Group Inc.: Technical computing on GPUs
  7. Jenny Orr, Willamette University: Computer graphics for non-programmers;
  8. Bob McKane, Environmental Protection Agency: Modeling natural hydrologic systems.

Student Project: Research and/or Programming Practicum

For their project, students were asked to write proposals with clear and attainable learning objectives. We asked that proposals include a bibliography, and be either small enough to be completed in one quarter or a self-contained part of a larger project. To facilitate project work, faculty organized small project affinity groups that met weekly with a faculty advisor. Students were asked to report orally and in writing weekly, to write a project report, and to present their project orally to the program at the end of the quarter and write a final report.