home /all posts/ here

My (work) Goals for 2021

January 5, 20213 minutes read

For the past few years, I have had tried my hands at multiple projects and fields in computer science. But it has been difficult to stick to one of these and get deeper, mostly due to my tendency to jump from topic to topic. So as the last year ended, I decided to create a plan for things to focus in the year 2021. The motto would be few, long term projects.

From this year onwards, I would be concentrating on a limited set of topics throughout the year and dive in as deep as possible. By limited, I mean a maximum of 4 topics. These also include any project ideas that I'd want to work on. With this, I aim to focus my efforts in a limited region and gain considerable expertise at the end of the year. Then, I can decide which ones I wish to continue for the upcoming year.

To narrow down on these, I went through the topics I've always wanted to learn and those which would add value to my overall career. These would contribute directly by either building on the things I do at my work, or indirectly by instilling good practices and theoretical correctness. Not being too strict on this though, as learning should be voluntary and not majorly driven by an external factor.

So coming to the topics, I plan to study and develop understanding of the following topics in 2021:

1. Programming Language Construction - Compilers & Interpreters

I have always been interested in how languages are built, and this has grown even more after working on unipipe. My aim for this year would be to understand how compilers & interpreters work, and implement a minimal working version of both.

By the end of the year, I expect:

  • To have a working compiler ready for some language
  • To have a working interpreter ready
  • To start a language project of my own

Resources:

2. Functional Programming

Ever since I've read about Lisp in SICP, I have been drawn towards functional programming. I think I'm a purist, and that's what I like about functional programming. It all makes sense when seen from a functional perspective. I'd want to pick up on the functional concepts and preferably start with some language I already know, like JavaScript. Then later, if it is possible, try to pick a new language e.g. Haskell.

By the end of the year, I expect:

  • To be aware of various functional programming patterns and concepts
  • To be skilled in FP using JavaScript
  • Implement a project using these patterns, e.g. like in unipipe, try your hand at a mini JS module bundler.

3. Distributed Systems w/ JavaScript + Performance of web applications

As I am encountering different scenarios while developing JavaScript applications, I am intrigued about building large distributed software in it. I want to pick essential elements of building a distributed setup like synchronization, database concepts and infrastructure.

JavaScript is a comprehensive language, and has lately become much more standardised. I want to learn more about web workers, some less popular data structures, browser APIs and especially Node. I want to explore areas like parallelism via workers and performance optimization in Node. This can be my targetted field to work in at work.
This also includes web performance - page loading, critical path, server bottlenecks etc.

By the end of the year, I expect:

  • To understand concepts involved in building distributed systems
  • To implement such a system in Node
  • To learn about databases in a DS
  • To know about Node's performance specific APIs
  • To having worked on one of these at work

Resources:

© Mohit Karekar • karekar.mohit@gmail.com