Programming in Haskell 2022 Course

We're excited to announce the eighth edition of the Programming in Haskell (PUH) course! The course will be offered in the Fall semester of AY 2022/2023. Students of all study levels and profiles are invited to join!

Haskell (http://www.haskell.org) is a modern, purely functional high-level programming language, probably most famous for its close relation to math, for the “if it compiles, it works” mentality, and the practical usage of the monad (which is really just a monoid in the category of endofunctors :P). In this course, you will get to know Haskell as an elegant, powerful, concise programming language that is on the very edge of modern language design. You will discover a very different perspective on programming, that will make you a better programmer, regardless of the language you program in!

Paraphrasing a quote from r/haskell: “I complain the loudest about Haskell, not because I think less about it, but because I find it to be so painfully close to perfection.”

PUH (http://www.fer.unizg.hr/predmet/puh) gives an introductory but thorough treatment of Haskell programming. You will learn the basic concepts of functional programming and develop your Haskell programming skills by solving a variety of problems, as part of in-class hands-on exercises, regular homework assignments, and a final project, all of it led by professional Haskell developers with industry experience.

Important dates

  • Applications open: Jul 25, 2022
  • Applications close: Sep 18, 2022 at midnight
  • Notification of acceptance: Sep 26, 2022
  • Class start: start of October 2022 (details to be announced)

Read on for more information about PUH and the application procedure.

When, where, and how?

While we are yet to announce exact details for this year, they will most likely be similar to the details of the last PUH course, which were the following: The lectures will be held on Thursdays, 6:15-8:30 pm in lecture room D272, plus three additional lectures on first two Tuesdays, 6:15-8:30.

Distance learning is not offered for this course. The course will be held in English (level L3). The course ECTS credits (4 ECTS) count towards the "Skills" ECTS quota.

Applications

All students need to apply. The applications are submitted online. Besides the basic data, the application includes a questionnaire and a motivational letter of at most 200 words. Students of all levels and profiles can apply, provided they have passed the Programming and Software Engineering course and Algorithms and Data Structures course, or have equivalent skills.

Numerus clausus

For organizational reasons, the number of participants is limited to 30. All applications will be evaluated. The evaluation will consider the candidate's professional profile and motivation for attending the course. In case of a tie precedence will be given to second-year MA students,  students who have not previously enrolled in this course, and students who applied earlier.

Applications from non-FER students and non-students

PUH is open to highly motivated non-FER students as well as non-students, including future and past students. Such participants must also apply (see above) but their applications will be evaluated extra quota. Note that the following restrictions apply: (1) no certificate of attendance will be provided and (2) homeworks and project assignments may not be graded. An exception are the UNIZG students that work out the formalities with their administration offices. We reserve the right to reject applications due to participant unsuitability or our limited resources.

Course enrollment requirements

All participants are required to (1) have a notebook/laptop that they can use for in-class hands-on sessions, (2) have a good command of English, (3) ensure that they can attend all classes (with at most one class absence), (4) devote at least 6 hours a week for homework/project assignments, (5) devote about 1 hour a week for peer-reviewing the homework of your fellow students. Only one excused class absence is allowed; class absence policy will be strictly enforced. No previous knowledge of functional programming is required.

The estimated total workload for this course is 114 hours.

Course passing requirements

The students must fulfill the following requirements to pass PUH:

  1. Attend all but at most one lecture
  2. Submit all homeworks
  3. Pass all "level tests"

Additional information

How does Haskell compare to other languages?

Haskell is:

  • statically-typed (like C++ or Rust)
  • high-level garbage-collected (like Java or Python)
  • functional (like F#, but also many other languages now have functional elements like lambdas and maps)
  • lazy (ok, Haskell is special here :D)

Since Haskell is a high-level and statically typed language, it is best used for developing real-world, complex programs, quickly and with a lot of confidence (programs you would use Java, C#, Typescript, … for). Due to it being high-level and garbage-collected, it is not ideal for squeezing every drop of performance from your algorithms, for real-time systems, or for dealing with low-level machine programming, for that you would be better off with C/C++ or Rust.

Fun link: comparison of C++ vs Haskell for solving algorithm competition problems: https://martinsosic.com/topcoder/cpp/haskell/algorithms/2018/11/28/srm-742-div-2.html

Why should I learn to program in Haskell?

There are many reasons, perhaps the biggest of which is that using Haskell will change your perception and understanding of programming and forever enrich it with new concepts. That's also why it's hard to give a satisfying answer to this question, when the question comes from someone who doesn't yet know Haskell, while someone who already knows it doesn't need an answer anymore. Huh, an epistemological conundrum!

We suggest you start by watching this video:

Then have a look at these posts and discussions:

If you want to know more about the basic motivation behind Haskell and functional programming in general, listen to what the founding fathers of Haskell have to say:

http://www.youtube.com/watch?v=iSmkqocn0oQ

Autor: Martin Šošić
Popis obavijesti