Created 1 month ago.
|Category||Science & Technology|
This is a series of extensive tutorials on functional programming.
The tutorials cover both the theory and the practice of functional programming.
Applied functional type theory (AFTT) is what I call the subdomain of computer science that should serve the needs of functional programmers who are working as software engineers.
It is these practitioners, rather than the academic researchers, who need to examine the incredible wealth of functional programming inventions over the last 30 years, -- such as these "functional pearls" papers -- and to determine which theoretical material has demonstrated its pragmatic usefulness and thus belongs to AFTT, and which material may be tentatively omitted. This tutorial series is therefore also an attempt to define the proper scope of AFTT.
In the videos, I demonstrate code examples in Scala using the IntelliJ editor because this is what I am most familiar with. However, most of this material will work equally well in Haskell and some other FP languages. This is so because AFTT is not specific to Scala or Haskell, -- a serious user of any other functional programming language will have to face the same questions and struggle with the same practical issues.
All lecture content is authored by Sergei Winitzki, Ph.D.
The lecture materials are released into the public domain under a CC-0 license, which is an "uncopyright".
The material is presented here at medium to advanced level. It is not suitable for people unfamiliar with school-level algebra, or for people who are generally allergic to mathematics, or for people unwilling to learn new and difficult concepts through prolonged mental concentration.
The first two chapters are introductory and may be suitable for beginners in programming. Starting from chapter 4, the material becomes unsuitable for beginners.
Main features and goals of this tutorial series
an emphasis on the mathematical principles that guide the practice of functional programming
the presentation is self-contained -- introduces and explains all required concepts and Scala features
an emphasis on clarity and understandability of all explanations, derivations, and code
some terminology and notations are non-standard -- this is in order to achieve a clearer and more logically coherent presentation of the material
all mathematical developments are thoroughly motivated by practical programming issues
avoid developing abstract theory for theory's sake
examples must show how each mathematical construction is used in practice for writing code
mathematical generalizations are not pursued beyond either practical usefulness or immediate pedagogical usefulness
each new concept or technique has sample code and unit tests to illustrate its usage and check correctness
currently the libraries cats and scalacheck are used throughout the sample code
each new concept or technique is fully explained via "worked examples" and drilled via provided exercises
answers to exercises are not provided, but it is verified that the exercises are doable and free of errors