The 10 things I learnt (or) tried learning in 2019

learning

Photo by Road Trip with Raj on Unsplash

I started my career in 2016 as a Javascript developer. Since then, I took a resolution to myself that I’d learn at least 3 new things every year. It is supposed to be part of my life-long learning exercise and to prevent myself hitting a wall down my career path.

First year it was quite difficult as I was just starting my career and there were just too many things to learn. Once you realize there’s too much to learn it creates an endless cycle of procrastination and a mental barrier whenever you pick up some topic. In my first year of this process, I wasted the whole first 6 months running after superficial targets like blockchain, AR, VR, ML etc. They were relatively new at that time and as a beginner they were pretty overwhelming. I ended up in a paradoxical state where I’m trying to learn something but end up going after another topic without actually making any progress on the first one.

Overcoming the block

The year of 2016 was moving fast and I’m trying to establish a solid foundation for my career all while trying to learn something new for personal growth. It was when I realized that I’m not making any progress. Comparing me with myself from the past 6 months ﹣ nothing much has changed except for the experience I gained at work as a Node.js developer. I knew it’s probably time for me to stop and think about it for a while. After a week of long self evaluation on how I’m approaching things, I decided to dedicate the rest of the year (which was just 4 months now) to learn only one new topic with a condition that the topic should be easy and straight forward to learn.

Guess what? by the end of 2016, I ended up learning React.js and I had very little idea that it will later end up defining many of my future career milestones. For learning react I had to learn a lot Javascript fundamentals, new programming paradigms (like functional programming) and tools like webpack, babel etc. I realized two things that are essential for the learning process.

Whatever you learn,

  1. Ensure you learn everything properly
  2. The rest of the universe can wait

Javascript By Example

Learning React is one thing but the true knowledge I gained in 2016 was how to learn. I dedicated my entire 2017 on learning and further refining my Javascript skill-set. After spending almost a year on the learning process I decided it was time I shared a few things with the world and luckily I got an opportunity with Packt to write and publish my first book ﹣ “Javascript By Example”. It was a great experience. I got to learn how to approach things from a writer’s perspective and plan chapters on different topics. The entire year of 2017 was spent on learning and writing about Javascript.

Learning doesn’t always need a reason

The first two years of my learning process were focused entirely on career growth. At the end of each year I spend a considerable amount of time thinking back on all the things I learnt and the things I wanted to learn. I love science. But in the past two years I haven’t spent much time on learning anything new on science except watching a few documentaries (like particle fever) perhaps. Starting 2018, I decided to include a topic on Science (it can be anything) into my learning process. It should be now 3 topics on tech and 1 on science.

I have listed below all the topics I picked up to learn and a ✔️ indicates that I have been successful in learning the concepts associated with the topic and a ❌ indicates I just messed up badly.

This is how my 2018 went:

  1. Reactive Programming & ReactiveX ﹣ ❌
  2. Machine Learning ﹣ ❌
  3. MobX ﹣ ✔️
  4. React Native Reanimated ﹣ ❌
  5. GraphQL ﹣ ❌
  6. JAMstack ﹣ ✔️
  7. Rocket Science ﹣ ❌

Oh wait did I just mess up badly again? Maybe… The topics aren’t tough to learn except for the Rocket Science part (It’s literally Rocket Science). I did manage to learn a few things from all the topics I decided to learn last year but the problem is, on an implementation level, I didn’t put much effort into building stuff that uses these concepts. Even though I understood what these things do, I decided I ain’t marking them complete until I build stuff that uses these concepts. For the Rocket Science part ﹣ it isn’t complete till I could derive those equations by myself. I was a bit too strict on myself but I had to… cuz nobody else will!

2K19 - Time for a blast! 🚀

I know what I needed to learn. I know how I’m supposed to learn. With these two things in my mind, I stepped into 2019 with the same target ﹣ 3 topics from tech, 1 from science. This year I am at a good position in my career path so I had very less to worry about and I had the complete freedom to pick up topics that were interesting rather than helping my career growth. I’ll be listing out the 10 items I focused primarily throughout the year and how each of them went. This year is different, supposed to be different, should be different.

1. Machine Learning ﹣ ❌

Did I say different? cuz I just messed up the first and the most important topic I was supposed to be learning this year! I initially planned on learning machine learning back in 2016, when I started my career. But every year I just kept hitting several blocks whenever I pick up this topic. Machine learning isn’t a tough thing to learn in 2019. In fact, now is the best time to learn this given how we have a diverse collection of libraries like Tensorflow, Scikit learn etc. But what exactly went wrong here?

For starters, my selection of starter materials were too deep. I started off with the famous Hands-On Machine Learning with Scikit-Learn and TensorFlow book and it was a slow process. I wanted to do this right, too right for my own good and I ended up back in the procrastination loop. Before I waste much more of my time in this, I decided to look for shorter, more quicker ways to learn this topic later. And that later never happened.

2. Fundamentals of Quantum Mechanics ﹣ ✔️

Inspired by the Particle Fever documentary and the hype created around quantum computers, I realized I had to learn this one. I have been passively reading about quantum mechanics concepts like quantum entanglement, quantum tunneling etc. but I had to ensure I’m ready by the time humans reach Quantum Supremacy (which Google did achieve later this year).

Quantum mechanics is the study of the fundamental particles that make up the universe, except, no on has any clue how the world works down there. Almost any kind of laws of physics we apply in the real world doesn’t work there and We cannot observe that world as observing the particles changes the particles (Heisenberg uncertainty principle).

So, How do you learn a topic that is only taught at major universities like MIT? You simply watch the classes on YouTube and follow along like regular students do ✌️. This of course takes a lot of time given there are 115 videos in that playlist, but I managed to sit through 45 videos and it only took me 3 months! (And it’s already March 😶). No wonder I didn’t had the time for Machine Learning. I was also passively going through OpenLearn course-ware and the awesome How to Teach Quantum Physics to Your Dog book which you might wanna checkout, if you are interested…

3. Testing Library ﹣ ✔️

I don’t remember when I last build some user interfaces without relying on React. It has become such an integral part of my developer life that I’m constantly building and modifying React components every day. However, traditional testing tools like snapshot testing and enzyme weren’t keeping up with the fast paced development modes. Most of the test cases often end up breaking badly for trivial changes and many scenarios feel like unnecessary burden on the developer’s shoulders. This all leads to some very poor test coverage at the end of the day (0 in my case 😅)

Enter ﹣ Testing Library where you test how users interact with your components rather than how these components are actually implemented. This encourages a lot of good programming and testing practices. This was a topic that was picked up due to the need for having a proper test framework in place for all the projects i’m working with and I have no regrets. The best part of testing library is that it works very nicely with React and has a wide collection of recipes which you might need a lot!

4. Quantum Computing ﹣ ⚠️

Quantum Computers are the next big thing happening to computers ever since transistors arrived. We are heading into a severe limitation of computing power with the traditional computers so I totally wanted to be able to program quantum computers by the end of this year! However, there’s one small problem… Like Graphene, quantum computers can do just about anything except leave the lab.

The best resource I’d recommend for anyone starting off with quantum computers is obviously learning a bit of quantum mechanics but once those particle physics terms start making sense to you, head over to the amazing Microsoft Quantum Documentation where you can learn the essentials of quantum computing with the nice C# eco-system or the from the comfort of python. They have a nice Quantum Development Kit that lets you run your code inside a quantum simulator. There’s also a nice book that I have been reading (still reading) which you might find coming in handy ﹣ Programming Quantum Computers

I’m kicking off 2020 with Quantum Computing so I’m not done with it yet. Might write a few blog posts or give some tech talks on my experience so far. Gotta be ready when those Qubits are ready to be manufactured!

5. String Theory ﹣ ✔️

String Theory is simply hands down the best thing I decided to learn in 2019. It is by far the theory closest to explaining everything in the Universe. I wanted to clearly understand how it explains every single thing in the nature and of course understand the famous derivation Sheldon used while he was explaining string theory to Penny (the actual scene). I started off with buying a kindle edition of The Elegant Universe by Brain Greene. (You might love his direct explanation)

As usual like every topic in science, string theory requires a lot of pre-requisites that includes understanding how theories before it failed to explain the nature of Universe. First of all I had to understand the special theory of relativity (refer ﹣ minutephysics). Then I learnt about the forces of nature, additional dimensions and how sum of all positive natural numbers add up to -1/12 😶

Before I knew it, I was watching ted talks after ted talks, running behind the easiest explanations for confusing concepts in YouTube. But I kept making steady progress with the book thanks to my curiosity to understand the nature of the Universe and the need to understand the Sheldon’s side of conversation.

After 6 months of reading, watching, tweeting, creating memes and scribbling, I finally went back to watch the scene and when Sheldon said “if you consider them sheets” I could totally visualize it in my mind. That right there is a huge sense of accomplishment I’ll never forget. If you wanna learn about String Theory the best starting point will be ﹣ “String Theory Explained” video by Kurzgesagt.

6. Finite State Machines & XState ﹣ ✔️

Meanwhile, as I spent almost half of the year learning String Theory over the night, during the day my career was moving forward facing more new challenges. As a part of React application development, state management proved to be a huge challenge as the team size kept increasing. We couldn’t set a standard to define states and how to properly handle state transitions. That led me to search for newer ways of application state management.

I’m a big fan of Turing Machine ever since I watched The Imitation Game. I had already put in considerable effort on understanding the concept behind Alan’s turing machine which falls under a class of Automata Theory. One of the sub classes involved in Turing Machine is Finite-state Machine (FSM). I didn’t pay much attention to it until I came across XState ﹣ a library for building FSM in Javascript. Turns out XState holds the key to solve all my worries about state management. Its based on one of the most fundamental concepts of computer science after all!

I spent a few days building a react app based on Reddit API integration from the docs. Then I went on to check out few open source projects that were built on top of XState. These are pretty much the standard steps for learning any new Javascript framework at this point. The official docs have some good examples. Also, if you want to stay up-to-date, you can follow the related accounts on Twitter. (Follow David K.🎹 creator of XState)

Instead of defining states and managing them separately XState makes state definition and management a single entity simplifying the application logic to a great extend. I have also tried using it with Node.js and it works seamlessly with the backend frameworks too!

7. TypeScript - ✔️

TypeScript was picked up as more of a tech debt that I didn’t pay attention to for the past couple of years. Given how much the JavaScript ecosystem has grown and the complexity of the apps we are building with it, having a safe type system is very important. Of course It took me two of my senior folks pushing me to use it in my project at work to get started. But once I got into it, I realized there’s no turning back. It will make you wonder how you survived this long without having proper type definitions.

For starters, you can try TypeScript in 5 minutes from the official docs to get an idea of what TypeScript is all about. React Native folks are in luck as it comes with typescript support out of the box (lucky me!) and you can directly convert a file from .js to .ts or .tsx and start writing types right away! Setting up typescript with other bundlers is relatively easy and I’d recommend you to use Parcel if you are starting a new project.

I just decided to dive right in after reading a couple of blogs and watching an YouTube video over night. Sometimes you just gotta go for it! This cheatsheet had me covered throughout my initial steps. But if you need in-depth knowledge, you should be reading this free book by Basarat“TypeScript Deep Dive”.

8. Neural Networks ﹣ ❌

That was the end of my 7 month success streak, but there’s lot to learn from mistakes so I’d consider Neural Networks a win-win challenge. While I was travelling to Bangalore for a tech conference on June, I was listening to an audio-book based on a non-fiction book by David Eagleman“The Brain: The Story of You”. It’s about the working of the Human Brain and the way the author explained the things made me develop an overwhelming interest on learning more about the process of thinking itself.

Our brain is a network of millions of neurons. To understand how the process of thinking works, what better way there is than to build our own Artificial Neural Networks (ANN). So, I decided to build my own neural network. There are abundant resources for learning ANN. There are also plenty of frameworks like TensorFlow, Keras and Caffe that make adding neural networks into your project a breeze. However, before I go out and use third party libraries to do the heavy lifting, I wanted to build my own network without any fancy tools.

Luckily, I found the Neural Networks Playlist by 3Blue1Brown on YouTube which had exactly what I needed to learn about neural networks. It provided a good launchpad to learn more on the topic. But then, before I realized, I ended up watching more videos from this channel and my mind diverted into more fun ideas like Calculus and Linear Algebra putting an halt to my journey on learning ANN. By the time I realized I was supposed to be building my own network, it was the mid of December and I was infected by a common cold which would later put me in bed for the next two weeks ruining all my travel plans for the holidays.

9. Swift UI ﹣ ❌

####Building iOS Apps ﹣ Dani’s Journal entries

Sometime in 2016Dani realizes the potential of Apple’s iOS & macOS Devices and the Swift programming language and starts learning iOS App development

Again sometime in 2016Dani builds some iOS apps with poor designs convincing himself that he is now an iOS Developer

October 2017Dani becomes a mobile app developer but on React Native instead of iOS and builds totally cool apps due to his natural aptitude in JS

2017-2018Despite building beautiful & successful apps on React Native (thanks to flexbox and the UI/UX designers he worked with), Dani still tries to build apps with swift on iOS but he couldn’t cuz he has the designing skills of a potato

3 June 2019Dani watches Apple’s WWDC 2019 to create memes about apple & apple devices, but was surprised when they announced SwiftUI. It’s like someone in Apple listened to his worries and decided to make the design process much simpler! He decides to learn SwiftUI. (He still created tons of memes after the event since they also introduced an expensive cheese grater)

October 2019Dani successfully builds a simple iOS App with SwiftUI and runs it on his iPhone SE. Feeling accomplished, he decides to build more advanced apps hoping to learn more about SwiftUI

December 2019By this time, Dani has already forgotten that he was supposed to learn SwiftUI and also that he owned an iPhone

####End of the Journal entries

10. Vim & Tmux ﹣ ✔️

Finally, it’s time to introduce my new terminal workflow. After using iTerm2, Hyper and Terminator, I was tired of looking for a terminal that can be used consistently between mac and linux. Turns out I was looking at the problem in a wrong way. I was looking for better terminals but what I actually wanted was a workflow that can taken to any operating system easily.

I use a 15 inch Macbook pro at work and a easy to carry 13 inch hp laptop running ubuntu MATE when I’m travelling. I also have two Amazon Ec2 instances that I always ssh into for quickly deploying and running personal projects. Also I always edit the code directly in the server (Please don’t try this at work!). Given that most of my work requires a terminal and multiple tabs, I decided to pay two old friends a visit. The friends from my childhood I never understood properly before I started hanging out with all the cool guys ﹣ Vim & Tmux.

The main problem with Vim & Tmux is there was a big learning curve. But with my experience of learning TypeScript using a cheat-sheet, I understood I can overcome any learning curve if I lived dangerously (Again! Please don’t try this at work!!). I took my ubuntu laptop and uninstalled Terminator, VSCode & WebStorm leaving behind gedit as my only text editor for backup. Then I installed Neovim and added some of the essentials like amix/vimrc and the Ben Awad’s VSCode vim setup. After which I installed tmux along with Oh my Tmux.

For the cheat sheets, I got this amazing wallpaper from reddit that contains all the essential vim keybindings. Given my terminal is transparent, the keybindings never leave my sight! It’s surprising how fast I got used to the new vim + tmux setup once I removed all the other text editors from my system (Most of this post was written from vim). Finally, after a couple of weeks I got well used to my setup and decided to move the workflow to all my systems. With a quick setup based this answer, I was able to sync my config across all my devices. Will write a separate blog post regarding my setup since the size of the current post keeps increasing.

It’s 2020

I’m glad I took the time to reflect on all the things I have been learning in the past year. Also, pretty happy that I took the time to write my experience in my personal blog. I usually don’t plan too much and simply learn as I find interesting stuff but I have a pretty good idea how 2020 is going to be ﹣ tech talks, blog posts, fluid animations and SwiftUI cuz why not? 😜

This post marks the launch of Dani’s personal website & his personal blog daniakash.com which was initially planned to go live on last December. Not a great start but as the saying goes… better late than never!

© 2024 Dani Akash. All rights reserved.