This repository has been archived by the owner on Nov 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
overview.tex
18 lines (14 loc) · 2.61 KB
/
overview.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LaTeX sources for The Guide to Functional Programming
%% Michael B. Gale (michael@fpclass.online)
%%
%% This work is licensed under the Creative Commons
%% Attribution-NonCommercial-NoDerivatives 4.0 International License. To
%% view a copy of this license, visit
%% http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to
%% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{The Module}
Functional Programming is an optional module which follows on from introductory programming modules such as CS118 or equivalents in other departments. In such modules you typically learn to write programs in the imperative style in languages such as Java, C, or Python. However, there are many different programming languages and many different programming paradigms. The imperative and object-oriented programming paradigms that you have learnt so far are just two of them. You can think of programming languages as tools: a hammer is different from a screwdriver and both serve different purposes for which they are the right choice of tooling. The same is true for programming languages. It is easier or harder to accomplish certain tasks in some languages than it is in others. To be a good programmer, you need to know which tools are at your disposal and when to use them.
In this module, you will learn about the \emph{functional programming} paradigm, which is equally as important as imperative and object-oriented programming. No prior programming knowledge is required for this module and it is therefore suitable for most scientists. We use the \emph{Haskell} programming language in this module. It is one of many functional programming languages, but it is quite unique in that it is lazy and purely functional. Writing programs in functional languages, and particularly Haskell, is very different from writing programs in languages like Java. Over the course of this module you will learn how to do that. This adds a powerful tool to your programming arsenal and you will gain a much deeper understanding of programming as a whole. Skills from this module can be applied in other languages, functional or not. In other words, you will become a better programmer!
This guide serves as a companion to the module by giving you an overview of all the major components, including guidance on how to use the different tools you will encounter as part of this module. You can also find the coursework specifications as well as exercises for all of the labs in this guide.