CSCI 343
Application Development with Functional Programming Fall 2019
Division III Quantitative/Formal Reasoning
This is not the current course catalog

Class Details

This course will enrich the participants on how functional programming can reduce unintended complexity and create code bases that are simpler to maintain and reason about. Functional programming is a paradigm, which focuses on values and pure functions rather than mutable objects and imperative statements. Since good code design is intersubjective, we need to be open-minded and continuously reflect upon the decisions we make. Together we will reflect on the design choices made and the dilemmas that will arise. We will learn that there are often multiple solutions, each often having their benefits and drawbacks. By gaining experience, we will acquire empirical knowledge, intuition and sensors for avoiding unintended complexity, creating appropriate abstractions and a sustainable code base. Class will consist of a lot of live coding, code-reviews and a dialog on how we can improve our architectural design and knowledge. Topics include code quality, readability, maintainability, collaboration, version control system (git), global state, dependencies, pure functions, persistent data structures, data consistency, single source of truth (SSOT), reactive programming, web development, functional programming and comparison with object oriented programming, designing for testability, documentation, state management, atomic updates, concurrency, dynamic types, DSLs, lisp and REPL. The concepts are not limited to a specific programming language. We will use Clojure and ClojureScript to realize the ideas in the specific project. Hence, also rigorous abilities in lisp, repl workflow and Clojure/ClojureScript will be an outcome of the course. For each week there will be a video talk from programming conferences that will serve as inspiration and give us the opportunity to reflect. The videos will be posted when the course starts.
The Class: Format: lecture
Limit: 24
Expected: 24
Class#: 1656
Grading: no pass/fail option, no fifth course option
Requirements/Evaluation: a semester-long programming project, and midterm and final presentations
Prerequisites: CSCI 136, and at least one of CSCI 237, 256, or 334
Enrollment Preferences: current or expected Computer Science majors
Distributions: Division III Quantitative/Formal Reasoning
QFR Notes: The course will involve a programming project that emphasizes quantitative/formal reasoning skills.

Class Grid

Course Catalog Archive Search

TERM/YEAR
TEACHING MODE
SUBJECT
DIVISION



DISTRIBUTION



ENROLLMENT LIMIT
COURSE TYPE
Start Time
End Time
Day(s)