Monthly review: 2017-01
I’m starting a monthly review of my blog posts. It summarizes the themes of the past month and plans for the next month. Here’s the first one, reviewing January 2017.
Earlier this month in a work review, I set some technical skills I want to learn in 2017. These were:
Looking back at January, I’ve roughly covered these topics. An addition to the list is electronics. I’ve since conceptualized my interests along the “networking” spectrum (e.g. OSI model):
<-- low-level comms / high-level comms --> Electronics ... Networking ... WebRTC
C and UNIX are the implementation/glue to learn these.
I joined Pusher in early 2016 with the intention to use Haskell professionally. I left 2016 with virtually no use of Haskell, for a couple of reasons. First, at Pusher, we decided that Haskell was not the best fit for our realtime concerns. Second, personally, I decided that using Haskell put me in a bubble. It’s great for expressing abstract computation, but it’s not so great for expressing concrete computation, and it’s not so great for understanding what our computers are actually doing. To do that, I decided to move back to my old friend: C.
A later “realization” I came to was that
communication > computation. Since leaving university in 2012 I’ve invested most of my learning in “computation”. This basically means “learning programming languages” and “learning abstract algorithms”. But our computers are more interesting as communication devices. Telephones on steroids, not calculators on steroids. There are many ways to compute things, and you can choose between them all arbitrarily. But there aren’t so many ways to communicate, because you have to work with common protocols.
So, here’s how January breaks down.
In electronics, I played around with USB, then realized I needed to understand more basic details. I learned about charge and current in electric circuits. In February, I’ll learn more fundamentals - voltage, capacitance, resistance, etc. I want to complement this by making real circuits.
I learned a few things in C. How to pack bits in structs using masks; how to do the same using bitfields. How unions work. Some semantics: the meaning of “lvalue” vs “rvalue”; and “constants” vs “literals”. A few posts around understanding a “check for zero byte” algorithm in C. In February, I’ll explore more C fundamentals - such as compilation in detail (object files, assembly).
I learned a few things in UNIX. A few posts about signals, though I still don’t feel like I understand signals very well. A few posts about memory mapping; I’d like to continue learning how virtual memory is implemented. An overview of UNIX system calls, and the various methods of IPC. In February, I’ll learn more fundamentals - how time-sharing/processes are implemented, and more fundamental socket/networking programs.
In networking, I mainly concentrated on WebRTC, learning the concepts. I made a “hello world” program without a server. I described what STUN does, and how it works. In February, I’ll learn more fundamentals - ICE and SDP. I’ll make a few “hello world” programs. Soon I’ll show the canonical chat program using Pusher as a signaling server.