Skip to main content

Rediscover, Rebound, Reimagine — Part 1

Photo by Kalen Emsley on Unsplash

Setting the Stage


Everyone of us across the world is suffering from the impact of Covid-19. From the health impact, to social loneliness, to unexpected layoffs, the immediate negative impact are just too many and on everyone of us.

In this article, I am going to focus one aspect of the Covid-19, the lacklustre job situation all around. It may seem that this is going to never end, however this is not the first time economy has been impacted like this. I have myself witnessed such dismal situations atleast twice 2002 and 2008.

The key to address this situation is to realize that right now if the market is low, it will rebound back in next 6–9 months, and what you have to do is to prepare for that upbeat mood when you can encash yourself.. . .

Preparation — Putting Finances in Place


In this article, I am going to detail about the computer engineers who are at the early stage of their career. The key to remember here is that you have to make yourself aloof of the financial stress. To achieve it,
Bring down all unnecessary expenses. Remember, its just about few months and then you can come back to your lifestyle.
Don’t do panic selling, Try to pool your finances and ensure you can sustain the EMI payments.

Preparation — Study Plan


With the finances aside, let us now look back at the problem of allocating time. The key here is that if you are unemployed, you must be ready to stretch upto 10–12 hours daily. If you are already employed, then you must strive for atleast 5 hours daily. The way you can do that with a job is to cut down on every activity that is not related to work.

Ideal Profile


Let us consider what I will look in an ideal computer engineer.
Good exposure to programming languages (5 Skills). An engineer who is well-versed with multiple kinds and styles of programming language, is a better computer engineer because they can better evaluate the solutions and also have better exposure to different abstractions and paradigms. I will typically put languages in the following clusters -
  1. C
  2. Python, Ruby
  3. Java, C++, C#
  4. Go, Erlang, Rust
  5. Clojure, Haskell, Lisp, Scheme, F#
Aim should be to know atleast one language from each cluster.

Strong Data Structure, Algorithms, and Problem Solving (2 Skills). A great engineer is someone who can transform its daily problem into some classic algorithms or discover some algorithms. Usually any data structures book along with Algorithms by CLRS will suffice. You can add to your belt graph algorithms, dynamic programming by Richard Bellman etc.

Design and Software Architecture (2 Skills). Knowledge about UML, design patterns helps us in building on the known high performant, reliable patterns of solutions.

Fundamentals of Computer Science (4 Skills). Knowledge about operating systems, databases, networking, threading, concurrency.

Study Plan


If we look at the above ideal profile, it is evident that we are talking of close to 13 different skills, assuming that we are starting at the ground level. The study plan is spread over next 5–6 months with each skill taking approximately two weeks -
  1. [Stage 1 — Duration 1 month] Start with couple of programming languages, data structures and algorithms. Divide your day into chunks of 3 + 3 + 4 hours. The three slots correspond to two languages and DS+Algorithms. The key is to implement the algorithms in the language that you are studying.
  2. [Stage 2 — Duration 1 month] Cover up the remaining programming languages and try to implement as many non-trivial algorithms in them. This will set you up solidly for the expertise in the languages as well as the algorithms, in different programming paradigms.
  3. [Stage 3 — Duration 1 month] Ramp up on the software architecture. Go back to your code that you have collected till now and organize them. Refactor the code, look at their interfaces, can you package them into your own data structure library with bindings available in 5 languages, what design patterns can be applied, and so on.
  4. [Stage 4 — Duration 2 month] Go through and learn the fundamentals. Note that by now you have strong fundamentals in development and DS+Algorithms. Try to implement physical storage engines, implement different kind of distributed computing setups, network servers. Note that every of your little code goes into your personal Github repository.

Avoiding Distractions


  1. Keep reminding that you are building your profile and you will rebound back once the economy opens up and in much better position.
  2. You may occasionally give interviews in between but don’t hamper your study plan under any circumstance.
  3. Remember job market is always open for smart folks and ones who are ready to learn. It operates in cycles and such difficult times are just a mechanism to step back and enrich ourselves.
In the end, just remember the simple law, just as booming market is bound to fall, so is crashing job market is bound to bounce back. The key is to jump ahead the skill curve when the market is going down.

Comments

Popular posts from this blog

Reversing Digits of a Number

Given a 32-bit signed integer, we want to generate the 32-bit signed integer obtained by reversing the digits of the original number. Incase, the result is beyond the range of a 32-bit signed integer, we return 0. To reverse a number we need to progressively extract the mod 10 and keep pushing into our new by first multiplying it by 10 and then adding the obtained digit from the original number. This is equivalent to extracting the digit, right shifting the given number, left shifting the new number and adding the digit. class Solution { public int reverse(int x) { long soln = 0; while(x != 0) { soln = 10 * soln + x % 10; x /= 10; } if ((soln > Integer.MAX_VALUE) || (soln < Integer.MIN_VALUE)) return 0; return (int)soln; } } The above code uses the constants from Integer class in java.lang package. However, this logic fails if we are given a 64-bit signed number, as we will not hav...

Aarambh: The First Java Program

package Aarambh; class Aarambh { public static void main(String[] args) { System.out.println("!!! Hare Rama Hare Krishna !!!"); } }