(it's a portmanteau)
This is a weblog about computing, culture et cetera, by Miikka Koskinen. Read more.
The venue for Curry On after party was impressive.
Last week I attended Curry On in Rome and ZuriHac in Zürich.
The idea of Curry On is to bring together academic and industry people to talk about programming languages. There were talks about programming languages, tools for making programming languages, tools for analysing programs etc. I’d like summarize it as language-driven development: you create a custom language in which it’s easy to express and solve your problems.
In general, the talks were of high quality. I was positively surprised by the quality of the Q&A sessions as well - especially the senior academics made insightful questions and remarks. The talk videos are available on YouTube if you want to watch them. Here are my favorites:
The Racket Manifesto by Matthias Felleisen was about how Racket is programming language for creating languages and what this means, what problems there are and how Racket solves them. I was very impressed. This talk makes a nice pair with Larry Wall’s Perl 6 keynote - Perl 6 has a similar goal, but it’s philosophy is quite different.
Why the Free Monad isn’t Free by Kelley Robinson. Robinson first gave an explanation of what free monads are in the context of Scala and then discussed the cognitive costs associated with such advanced abstractions. The learning curve can be steep and it can make a piece of software unmaintainable. It’s a fair point and I haven’t seen much discussion about it.
ZuriHac is a Haskell hackathon. It’s one of those old-school hackathons where instead of competing, you gather together to hack on open source projects. There aren’t that many Haskell conferences, so ZuriHac has become an important meeting point for the European Haskell community. I liked this: hackathons feel more social than conferences and there are less talks to be ignored. Basically hackathons are like hallway-track-only conferences.
I did not get that much done, but at least I got in a small patch to Agda. Hopefully it enables some further work on the Agda JS backend, which isn’t in very good state right now. Zürich is a beautiful city and I had great time - I hope to be there next year as well.
How does one make the perfect pancake?
Once before I wrote about some questions I couldn’t answer back then. Instead of now answering them, I’m going to ask some new questions. I’ve been thinking about these lately.
What are coder super powers? What are some examples of programmer skills that are highly valuable and very rare at the same time? Can I learn some of them?
When is it worthwhile to update your application’s dependencies? If you upgrade early, you get all the bugs and the compatibility problems. If you upgrade late, you’ll miss out on the bug fixes and the new features. I’m eager to update dependencies, but I’m not sure I can argue that it’s time well spent.
Is generative testing worthwhile? I’ve tried to use it several times and I’ve only ever found trivial bugs. Experts would argue that I’m doing it wrong. Even if not, the trivial bugs accumulate. A similar argument applies to the correctness-enforcing abilities of static typing and code review.
Is there a pattern where smart developers create software with bad architecture? If you’re smart enough, you can make software work even if it has catastrophic architecture. If you were less smart, you couldn’t deal with the complexity and would have to come up with a design that actually fits the problem.
Summary: Guilt is a poor source of motivation.
On a certain IRC channel, we’ve had a series of discussions about how a dabbling software developer can become an established professional. One of the recurring topics is feeling guilty for not being good enough.
There are a lot of highly visible cool programmers with out there. Their knowledge is deep and wide, they’re pushing out popular open-source libraries, they’re giving spectacular talks, they’re working for or starting prestigious companies.
As a junior developer, it’s easy to conclude that this is what you need to do to be a professional programmer. A junior developer seldom does any of these. This can make you feel guilty.
Of course, nobody can realistically expect a junior to do those things. Not every experienced developer does those things, or wants to. It takes time and effort to have impact and to become well-known, even if you’re lucky and privileged. You eat an elephant one bite at a time, as they say.
The guilt may still be there, though, even when you know all this.
I don’t know how to get rid of it, but I want to tell you my story with guilt. It’s about math instead of code, but the logic is the same.
As a kid, I was always considered ”talented” in mathematics. I did very well in math in the high school and eventually ended up studying it in the university. The high school math needed no effort, but the university math was harder. Turns out you have to work for your grades in the university!
Some students seemed to solve the exercises and pass the exams without any effort. I felt like I should be able to do it easily as these other students did but I couldn’t. This made me feel bad about the exercises, which made me avoid them, which prevented me from learning to solve them, which made feel even worse about them. The vicious circle was complete. I pretty much dropped out of the university because of this.
I don’t know what changed it, but eventually I stopped caring about how easy the exercises should be. Instead I started to focus on how much I liked learning math. Studying became something I looked forward to. It has gone to the point that I’m excited about an upcoming exam, because it’s a reason to study math.
It’s a long road to become great at what you do, whether it’s software development, mathematics, or something completely different. I hope you can find a way to enjoy your journey.
For more posts, see archive.