# Posts

### Programming is difficult

Anyone can learn computer programming. It requires no special talent. I have seen several students starting from nothing (well, the baseline is school mathematics and at least one foreign language) and scoring top results at the end of the semester. However, doable is not the same as easy. What makes it difficult? Here is an argument about the challenge involved in the mental execution of source code.

### The empowering quadratic

Most people openly hate mathematics. I did that too, before university. The question is why? I think it is often taught badly. Once grades are involved, it is very difficult to get it right. One thing changed when I turned from a hater to a fan of math. I realized that there was a storyline in most examples. So, maybe we could put the narrative back. As a little example, here is a story of the quadrative formula.

### Yet another metaphor for classical computation

…long sequence of causal links, chain reactions, domino effect, deliberate complexity, previous events setting up the conditions for the actions happening later… Rube Goldberg machines, falling dominoes, Pitagora Suichi devices - somehow these are fascinating to watch. I had to do a bit of research (due to family entertainment needs) and not surprisingly there are lots of amazing contraptions documented all over the net. Watching through many videos of marbles rolling just into the right spot exactly at the right moment it felt oddly familiar.

### Abstraction, the fundamental idea of algebra

Using letters to denote numbers may look like just a simple trick of notation, but it is the fundamental idea of algebra. Abstraction allows us to do general computations, not just arithmetic calculations with actual quantities. Here is a handout for the first class of an Algebra/Pre-Calculus class. This also shows that if someone is able to solve an equation (no matter how simple), then he/she has already obtained the key skill needed for computer programming.

### What is programming? - a list of thoughts

In preparation for an open class on computer programming, I collected a few ideas that I would like to mention. Here is the current draft (v2017.12.30).

### Towards a practical philosophy of computer programming

Publishing research proposals may be an unusual practice. However, little consideration shows that there would be advantages, if it was the norm. Proposals are judged, but seldom discussed. Therefore, a bit more openness coud benefit scientific research in general. Here is a draft proposal describing how philosophical investigations could help learning to code and software engineering in general. Why philosophy? Well, whether we like it or not, ideas on that level of abstraction do influence coding and learning new technologies.

### Mathematics of the Digital World

I start every course with a sort of philosophical introduction. It is usually about asking `What is the most important idea of …?’, and by trying to answer the question, I can give an overview of the whole course. Today I started a computing-focused discrete math course, so the question was:

What is the most fundamental idea of digital computation?

This handout is an attempted answer.

### How to code it? - Functional programming & problem solving heuristics

Opinions differ about the relationship of mathematics and programming. Depending on temperament, one might say that they are essentially the same as both strive for understanding in a precise formal manner. Or, it can be argued that practical engineering goals are rather different from aiming for unquestionable proofs. Functional programmers, in particular, are probably more comfortable with the connection. They tend to know that some mathematical constructs like lambda calculus, or whole theories like category theory form the basis of their favourite languages.

### Informal introduction to the holonomy decomposition of transformation semigroups

The holonomy algorithm is the main method used in SgpDec for computational tools of the Krohn-Rhodes theory. The details of the algorithm might not be the easiest to grasp, but the underlying ideas are quite simple. Here is a short description of the general ideas used in the holonomy decomposition.

# Poetry of Programming - Puzzle-based Introduction to Functional Programming

The whole course content, tutorial notes, assignments can be found on GitHub.