It's been a while since I wrote anything here. I wanted to write this in December, but couldn't. I gave this a lot of thought and took my interests, needs and skill gaps into account to prepare this list.
This is not a prediction of what will get big in 2022 (though some of these might). This is a personal upskilling plan. These are the technologies I'm going to explore in this year apart from what I do at work. I don't think I can master all of these in 2022. I'm learning in slow burn, this is defining my area of focus.
Note: Thoughts expressed here are personal. I'm not representing my employer or anyone else.
Stuff I'm going to learn
I'm learning Rust from 2020 but barely scratched the surface. Rust has a steep learning curve and not having prior low-level knowledge makes it harder. I wrote my first impression and implemented array data structure with Rust. After that, I'm stuck on implementing Linkedlist because it is far beyond my current Rust knowledge.
In 2022, I would like to finish implementing the basic data structures in Rust and get decent at fighting the borrow checker to do what I want.
I don't expect to become a Rust developer in 2022. I lack lot of basics for systems programming. But I'm learning it because it is interesting. Also, I believe it reached the critical momentum after being used by multiple companies and used in web3 projects.
Low level stuff such as compilers, parsers
I've been working as a web developer and did a few mobile apps. I always wanted to understand concepts like memory management, multi-thread programming, and low level systems design. These are all abstracted away in the web technologies.
by using Rust, I want to write low-level systems such as JSON-parser, small compiler, and a relational database. All these are way out of my league. But it is worth trying and learn at least some part of them.
I believe WASM has opened up endless possibilities for the web and browser. It has great performance and it is very portable. It could run in non-browser based environments as well. This is best suited when we want to share some code between frontend, server and mobile.
Rust has a great support for WASM and I'm planning to write some frontend apps, and games using WASM. I might also start using it at work for some of the complex stuff we generally delegate to the server.
Data structure and Algorithms
I'm learning this on slow burn along with Rust. This is not critical for my day to day job. But it helps to know the fundamentals to be able to make better decisions when designing applications or optimizing performance.
After writing the first CS fundamentals post I caught up and now okay in DSA theory. But I don't use them as part of my thinking when structuring data model of an application. I want to change that by learning them well and applying them in actual code.
Even though I worked in backend, those are all simple monoliths. I'm not familiar with how people design and scale systems. I know the basics of system design and cloud. But working in Angular and frontend eliminates any possibility of gaining actual experience from the job.
I want to do mock system design interviews and start cloning existing systems and write about them to get better. Right now, I don't even know how they write and meet SLAs or how they plan the infra based on the expected load and it is embarrassing.
Cloud (AWS to be specific)
This goes with the same problem of working too long in frontend. It feels like the backend world moved on while I was busy learning Angular. Now I feel that I lack some critical skills to be able to create scalable applications leveraging the cloud.
I want to learn AWS and cloud principles to a degree where I'm confident about using those services at work. I'm trusting Dr. Kleppmann's Designing data intensive application to help me learn this.
I'm decent in REST API design but never tried GraphQL. I had it in my list for 2020 but never got around to it. I want to look into it and learn how it is different from REST and the benefits. I also heard there are interesting things like Hasura which I want to explore further.
This is just to satisfy my curiosity and understanding of GraphQL, REST served me well so far. I'm not going to dive deep into GraphQL, just enough to decide when and where it can be used.
I only worked with Relational databases, MySQL mostly. IMO, not knowing a NOSQL database clouds our thinking. When I think of some design, it always leads into the relational way. It is suitable most of the times, but I heard there are some scaling challenges where relational databases won't meet the needs.
I want to use MongoDB in few applications to understand how to think in terms of non-relational DB design.
The only backend language I know is PHP and I'm good in Laravel as well. In the last 3-4 years I didn't learn anything new in the backend and my skills are outdated now.
There are less Angular/PHP jobs than React/Node jobs in the kind of places I like to work. Though Laravel and Angular are solid, I want to create career insurance by expanding on the adjacent skillsets.
I asked around what people are using for backends, lot of people said Node and Django. Since I already know JS, Node seems like a logical choice and it plays well with MongoDB goal.
I want to build few apps in node and publish them. I'll also try moving to backend with node at work to learn it better.
Stuff I'm keeping an eye on
I know CSS and bootstrap enough to convert any design into UI. I use Angular material at work. There is no incentive for me to start learning another way to write UI. But I heard a lot of praise for Tailwind throughout last year.
I'm going to keep an eye on how Tailwind is doing but not going to spend time with it.
I doubt if Svelte will ever become mainstream or as big as Angular and React. But it is something I wanted to explore ever since I saw the intro video of Svelte.
The frontend landscape is ever changing and there is no incentive for me to learn another JS framework. I'm keeping an eye on the Svelte ecosystem and how Indian job market opens up for Svelte.
It is hard to ignore Web3 now because of the promises we keep hearing. But I feel it is too early for the landscape to settle and find its actual use cases.
It might either change the way we write software or it might settle for a portion of suitable applications in a couple of years. Being an early adopter is a huge advantage, but every opportunity comes with a cost associated with it.
I don't want to spend my personal hours learning web3 in 2022. I'm following enough smart people working in Web3 to keep a bird's view of the landscape.
If you made it this far, thank you. What do you think about this list? Do you have any preferences on what to focus in this year?