A brief history of my education
This page documents my path to earning a B.Sc in Computer Science from The Evergreen State College. It isn’t written for an audience or meant to be consumed by anyone but me; just a personal archive of what I studied during my undergraduate years and a way to preserve the details in one place.
I earned my Bachelor of Science on 14 June 2013, completing 186 undergraduate credits in total. My studies began with 90 transfer credits from South Puget Sound Community College (2005–2009), after which I completed the remainder of my coursework at Evergreen.
From 2011 to 2012, I completed 48 credits in Computer Science Foundations, a full-year program covering Haskell, Java, computer architecture and organization, three sequences of discrete mathematics, and seminars in cognitive science, ethics, and robotics. In 2012–2013, I continued with 32 credits in Computability and Language Theory, an advanced sequence focused on programming language design, interpreter construction, formal languages, logic, and two quarters of Haskell. I finished with 16 credits in Computing Practice and Theory during the spring of 2013, where I studied statistics, modeling, data mining, machine learning, and the role of computational methods in scientific research. The program concluded with an independent research and programming practicum.
Computer Science Foundations
Faculty:
Neal Nelson, Ph.D.; Sherri Shulman, Ph.D.; Richard Weiss, Ph.D.
Program Overview:
Computer Science Foundations students engaged in intensive study of introductory/intermediate undergraduate computer science. Students were evaluated based on attendance, participation, written work, programming assignments, logic-modeling labs, and examinations. The program included the following components:
Introduction to Programming in Haskell:
Covered fundamental programming concepts and problem-solving using Haskell, including recursion, lists, higher-order functions, types, debugging, and functional design, based on Programming in Haskell by Graham Hutton.
Programming in Java I & II:
Used Horstmann’s Big Java to teach object-oriented programming, data types, loops, arrays, polymorphism, inheritance, interfaces, abstract classes, generics, and recursion. Students completed eight programming assignments per quarter, plus midterm and final exams.
Computer Organization:
Explored digital logic, data representation, combinational/sequential logic, CPU datapaths, instruction set architecture, and hands-on logic modeling using Logisim, culminating in a simulated Von Neumann computer.
Computer Architecture I & II:
Focused on JVM architecture & assembly, object implementation, garbage collection, arrays, method calls, inheritance, dynamic dispatch, caching, interrupts, DMA, linking, loading, and virtual memory, using Juola, Murdocca, and Stallings texts.
Discrete Mathematics I–III:
Covered logic, proofs, set theory, combinatorics, graph theory, number theory, probability, statistics (using R), and game theory.
Seminars:
- Cognitive Science of Mathematics & Computing: Lakoff & Núñez, Stoppard, Turkle, weekly discussions and reflection writing.
- Ethics and Technology: Tavani, papers on contemporary ethical questions.
- Robotics: Nocks, Brooks, hands-on Lego robotics labs with LeJOS.
Computability and Language Theory
Faculty:
Neal Nelson, Ph.D.; Sheryl Shulman, Ph.D.
Program Overview:
An advanced program covering logic, programming language theory, interpreters, formal languages, and Haskell. Students completed up to four of five academic threads:
Programming Language Design I & II:
Lexical analysis, parsing, type systems, semantics, interpretation, lambda calculus, type inference, and SCALA, based on Tucker & Noonan.
Programming Language Project I & II:
Implementation of Clite and CliteF interpreters, including lexical analysis, parsing, static type checking, semantic evaluation, and functional extensions.
Haskell I & II:
Covered higher-order functions, lazy evaluation, modules, algebraic & abstract data types, polymorphism, monads, functors, applicatives, and proofs.
Formal Languages I & II:
Regular languages, grammars, finite automata, context-free grammars, pumping lemmas, pushdown automata, Turing machines, computability, and undecidability.
Logic I & II:
Propositional & predicate logic, tableau proofs, completeness, clausal form, modal logic, constructive logic, paramodulation, and Prolog-based computation.
Computing Practice and Theory
Faculty:
Judith Bayard Cushing; Aaron A. Skomra; Richard S. Weiss
Program Overview:
A project-oriented program integrating statistics, modeling, machine learning, and scientific computing, with an emphasis on eScience.
Statistics, Modeling, and Data Analytics:
Covered distributions, ANOVA, regression, Chi-square, Monte Carlo/resampling, visualization using Excel, STELLA, JMP, and introductory R.
Data Mining, Machine Learning, and Pattern Recognition:
Classification, clustering, regression, decision trees, rule sets, Weka experimentation, and implementation of k-means.
Seminar: Computing Theory and Practice:
Explored the impact of computation on science through readings (Meadows, Salsburg, Lanier, Megler & Howe) and expert lectures on climate models, GPU computing, hydrologic modeling, graphics, and data systems.
Student Project Practicum:
A self-directed research or programming project with weekly faculty-led affinity groups, written reports, oral presentations, and a final paper.