Skip to content

Latest commit

 

History

History
110 lines (57 loc) · 1.9 KB

README.md

File metadata and controls

110 lines (57 loc) · 1.9 KB

Advanced Programming Sessions @ VandyApps

Are you a Vanderbilt computer science student looking to become a better programmer? Join us on an 11 week journey towards that goal. We will be exploring functional programming, monads, promises, typeclasses, and more in JavaScript and Haskell, and becoming better, smarter programmers in the process.

Coming Fall 2015.

Week 1 - Introduction to functional programming in JavaScript

  • Using a REPL.

  • Welcome to JavaScript.

  • Anonymous functions: Lambdas, closures, lambda lifting.

Week 2 - Map / Reduce / Filter / Zip in JavaScript

  • Map | Reduce/Fold | Filter | Zip

Week 3 - Introduction to Monads

  • Note: Use Haskell style type signatures in descriptions without saying what they are.

  • Monad laws: Left Identity, Right Identity, Associativity

  • Maybe monad

Week 4 - Async monad / Promises A+

  • Callback hell

  • Async monad

  • Promises | A+

Week 5 - Either Monad

  • Left (error) | Right (result)

  • How this helps avoid the need for exceptions.

Week 6 - Introduction to Programming in Haskell 1

  • Installation directions (email out)

  • Types

  • Writing simple (pure) functions.

  • Using the REPL.

  • Pattern matching.

Week 7 - Introduction to Programming in Haskell 2

  • If statements

  • Case statements

  • Guards

Week 8 - Creating Data Types in Haskell

  • data

  • Recursive types

  • Binary tree example.

  • type

Week 9 - Typeclasses 101

  • Type classes.

  • Typeclasses are similar to interfaces in OOP.

  • Build on binary tree example and use typeclass for its operations.

  • BEncoding example.

Week 10 - $ and . operators | More Monads

  • $ and . operators

  • Maybe, Either monads

  • Identity monad

  • Reader monads

  • do notation

Week 11 - do and IO in Haskell

  • Writer monads

  • IO Monad

  • do notation with IO monad

Week 12 - Monad Transformers

  • Stacking non-IO monads

  • Stacking monads on top of IO