Learning TypeScript Deeply – Kick-off

In the past several years work has taken me closer to the realm of people and their problems than to shifting bits. For a nerdy programmer like me, it has taken a sustained learning and rewiring to be reasonably effective in a role different from writing code. A more management role has also meant that my learning focus is different and while I have been following technical developments very closely (especially in the JavaScript world), have helped with a lot of technical decisions, have read a ton of code, and even have written a non-trivial amount, I haven’t learned a programming language deeply for several years. Maybe since Clojure & ClojureScript in 2013–2015.

Six years is startlingly long time given my previously dense learning history. I am not sad – change is the only constant and I have enjoyed the people challenges as much as the purely technical ones. Still, the lockdown in combination with the realization that the problem-solving and regular surprises involved in learning a programming language are something that brings be a lot of joy meant it’s time to choose the next language.

Why TypeScript?

I have dabbled with TypeScript before, even wrote a few thousand lines worth of a hiring stats visualization system that ended up abandoned. But this experience was closer to a deterrent of learning more about the language than helped. Here are my reasons for picking up TypeScript:

  • The dichotomy of having the same codebase and same patterns exist in either typed or untyped form are every alluring. I am super curious what will be the effect on gradual typing on my thinking about problems.
  • After years of using generic (even if powerful) tools for my languages of choice, the first-class TypeScript support in VSCode is exciting.
  • People. I don’t know much about the community (yet), but I have enjoyed previous work by Anders Hejlsberg, like Delphi and Turbo Pascal. He’s still number one contributor, which is impressive. Last, but not least, Stefan was excited about it 🙂

How?

My learning strategy is usually to often alternate between top-down approach (first principles first, high-level knowledge) and bottom-up (low-level knowledge, often trivial). This often means alternating between a book, paper, theory, principles on the subject and a lot of hacking, tinkering, trying things out, doing, digging into source code, learning how something works in detail.

Here are the resources I have on my short-list and I am starting with them tonight:

Follow further progress and learnings here 🙂

What are your favorite TypeScript resources? Should have I picked something else?

Ten Years Since My First Open-Source Contribution

Ten years ago Ryan Boren committed to the WordPress open-source project a two-line change I had suggested. I wasn’t ecstatic, but there was this warm feeling of being useful.

Screenshot of the commit message

In the next few years I regularly contributed to WordPress. Not too much, but often. What kept me around wasn’t programming itself or the hard technical challenges, but three other reasons: being useful,  the safe path to learning responsibility, and that everybody was so nice.

I contributed translations and code for the internationalization infrastructure (affectionately known as “i18n”).  Translators rarely know much about code and since a lot of the developers were from English-speaking countries they didn’t know much about encoding, unicode, or how to make texts easy to translate. I was in the lucky intersection of both and that exact place made me useful.

Our jobs often make us work hard to achieve great things together and it’s worth it. But they often fail to make us feel useful in the simplest ways. Not as a part of a big machine stomping ahead, or a part of a great team changing the world, but just as person helping another person with their problem. I helped translators with their formatting problems or developers, who had been struggling with encoding bugs for days. I wasn’t assigned to fix those problems, the fact that it was a human on the other side just felt good.

Then people started to notice. In about a year I became the maintainer of the internationalization corner of WordPress. Now I had responsibilities. But those were responsibilities with training wheels – vague and weak expectations, even vaguer schedule, all the freedom in the world, an easy way out (“I am busy at my day job” works wonders). My task was simple, but I started to understand what it’s like when people depend on you. At the time I was a junior developer at my job and there was always somebody looking over my shoulder and making sure I was making progress. It wasn’t like that with WordPress. If I wanted internationalization to be covered before a release, I had to take the initiative or it wouldn’t happen and many people would be left unhelped.

Motivation and responsibility aren’t usually part of the “contributing to open-source” conversation. And yet, that’s what I learned from my first years of working with WordPress. Most of my programming I learned elsewhere, but contributing to WordPress boosted my soft skills – I learned to write better, I learned to deal with (and ultimately help) random people on the internet, I learned to manage a project, without giving assignments, I learned to be motivated for the right reasons.

Less than three years after my first contribution, I joined Automattic. It is one of the biggest contributors to WordPress and the company behind WordPress.com. I have been working there ever since (more than seven years now), because the culture was built around the same open-source values. We strive to help people for all the right reasons.

I don’t know if you’ll be as lucky as me, but contributing to open-source projects seems worth the try.