Haskell: A Functional Love Story
Ilya Peresadin is a Serokell software engineer and one of the company’s team leads who also teaches Haskell at ITMO university. But just a couple of years ago he was a student attending a Haskell programming language course organized by ITMO together with Serokell. In this blog post, Ilya tells how he became a Haskell fan, what drives him to be a teacher and a developer at the same time, and why it is essential to share knowledge with young people.
The ITMO Haskell Course
When I was studying at ITMO, we had to visit a Functional languages class organized by the university together with Serokell. The quality of the lectures was high, and we had to do a lot of homework, which I really liked as it forced us to take the material seriously and deepen the understanding of the lectures.
Our teachers checked students’ tasks individually, and that was an excellent opportunity to talk to the teachers and explain your decisions, and they could see how well you understood the material.
This class gave me knowledge qualitative enough to get the job of a junior developer in a company using Haskell as the primary working language. Also, it gave me motivation for future development. Haskell is a functional language, it differs from familiar imperative languages. For this reason, many students start to hate Haskell; I am happy it didn’t happen to me, and I even became a big fan of the Haskell programming language.
Work at Serokell
I enthusiastically did my homework, read related materials and even solved tasks in advance. It didn’t go unnoticed. Arseniy, who was one of the teachers, checking my homework once offered me a job at Serokell.
I was in doubt because the position required better English language knowledge than I had those days. But my main concern was about Haskell, as starting programming in it was a big deal. Haskell wasn’t as popular as imperative languages, such as Java or C++, which I knew as well. If I gave them up, I would lose a vast developers community and infrastructure (tutorials, well-known libraries, development environment). At the same time, I would gain a chance to try something new without significant risk, as I was only a fourth-year student and didn’t have serious obligations. So, I decided to give it a try, and I’m still happy with this decision.
Now I also teach Haskell at ITMO, and I like it. First of all, it gives me a unique experience. Secondly, if you teach, you must know the subject perfectly. You must be ready for any questions students can ask if you don’t want to look like an idiot. Thus, I prepare for the lectures carefully and continuously improve my own level of understanding material. And this differs from what you need at work. At work, you need to be familiar with many various things, while at lectures, you need to understand something specific but very deeply. Finally, I simply enjoy teaching, it’s fun.
Standard university training system gives future developers knowledge about imperative languages, such as Java and C++, which seem to be easier than functional ones. Thus, Haskell, OCaml, F# and other functional programming languages gain less attention at schools and universities, and that’s sad because they have quite a lot of advantages in comparison to imperative languages. I consider it important to popularize the culture of functional languages.
Also, I’m not satisfied with most of the so-called “unusual for programmers” courses we have at ITMO (for example, physics, general science, etc.) because students don’t take them seriously and often don’t even understand the basics of those subjects. I didn’t like it when I was a student, so I feel like I pay my debt showing how to teach properly. I think it’s a valuable contribution.
Students to whom I read lectures, often come to Serokell as interns and then keep working at the company. Besides, the company is becoming well-known in the whole university, not only among my students. And if some people are interested in Haskell, they know where to go to try themselves as developers.
Learning New Things
During the first year at university, we had a sort of Haskell course with another teacher. He was not from Serokell. It was awful, to be honest. And I don’t think to teach such a thing as functional programming was a good idea for the first year in general. As a result, everyone in my group, me included, hated Haskell. Some objective facts supported our hate: in reality, no one writes code in Haskell, it is slow in comparison to other languages, it is very complicated, etc. Back then, I couldn’t expect I might become a Haskell developer in the future.
I find it funny that I had a similar situation with physics, which I hated learning at school. But in the second year at university, I had a rigorous physics teacher. If I wanted to pass an exam, I had to learn a lot, and I actually liked it.
These two stories taught me that it’s unwise to neglect what you cannot understand well. Probably the reason why you think something is rubbish lies in your ignorance. Perhaps, you need to bother a bit and try to study the subject. It’s not impossible that one day you will realize it was definitely worth your time. Never say never, that’s so true.