Roadmap 1 by Laxman Desai

Laxman Desai 3rd Year, B.Tech (Chemical)

I'm Laxman Desai, a Chemical Engineering 3rd year Undergraduate. I love to code and design cool stuff.

First Year
Growing up, I always dreamt of becoming a software guy working for some massive SAAS company in Silicon Valley, but it was just a distant dream. As for my first year in college, I had absolutely no idea of what I should make of my stay here. I kinda knew I had no intention of pursuing Chemical.

Programming Experience untill 2nd year summers
It was quite accidental I'd say. It all started when the pandemic hit. All of a sudden I was locked in my room, with no college, no hanging out with friends, and basically nothing to do. With a ton of free time at hand, I began exploring various things: design, music and coding among others.

I saw a youtube video by Rachit Jain about how he got good at coding / landed an internship at Microsoft despite not being from CSE. He talked about this thing called Competitive Programming (aka CP), and how it got him addicted to coding. In May 2020 I too decided to give it a try. By June, I was hooked on it and decided to stop wasting time elsewhere (social media, etc) and focus full time on getting good at competitive coding. Back then, only a handful of my batchmates used to do CP. Every time I used to get stuck, I had no one to turn to. This greatly improved my Googling and debugging skills. I would read the editorials and even ask questions on the CodeChef/Codeforces forums. By October, I was highly rating obsessed and realised I wasn't learning anything new. I was at the end of my 3rd Sem at this point in time and had no winter internship. So I decided to change my strategy, and try and master some new algorithms during my winter break. I would take up a new topic every week from November till Jan, and attempt a shit ton of questions related to that topic. During week-1 and week-2 I focused on trees and graphs, during week-3 and week-4 I focused on Segment Trees and Disjoint Set Unions and then later I focused on Advanced Dynamic Programming, Sparse Tables and Math-based Algorithms (Euler's Totient, etc)

By January, I had attempted 800+ questions over the various websites I used. I've added links to how my coding habits evolved over time at the bottom.

During spring sem registration, I was hoping to take DSA as a course, but my CPI didn't allow me. By february 2021 things had begun falling apart. CP felt boring. I had no summer intern/plans at that point of time. My CPI had dropped massively last semester, and my major felt like a major waste of time.
To brighten things, I decided to explore other domains of Software. Particularly this thing everyone talked about called Machine Learning. I had also taken up DS303 - Intro to ML. During that semester, I learnt Python and understood basic machine learning, it seemed all fun until I got introduced to Tensorflow 💀.
In March I managed to land a summer internship via the placement cell. I had also decided to mentor for a CP-based project in WnCC’s SOC during the summer. I also became a mentee for another project called ResoBin which was something I really wanted to build since the previous year but for which I had no technical knowledge. The idea behind ResoBin was to build a common resource-sharing platform. That summer, I spent the majority of my time learning how the web works. I began with HTML, CSS and JS and soon realised how painful web dev actually was. Soon I moved to ReactJS and life got even more painful. I kept going and soon things started to fall in place. I got really good at React in a month's time (with no web knowledge). I was also doing an internship at a startup, where my project was mainly based on Computer Vision. I learnt Pytorch (and fell in love with it) and OpenCV. In June, I managed to get another internship. This time in frontend development using NextJS. The interviews gave me an idea of what my resume lacked - a thorough mathematical (not just intuitive) understanding of my ML projects. In July, I spent some time on CP for third-year intern tests, and also read the math behind miscellaneous topics in Deep Learning.

Projects or Internships
I did build a couple of projects, one can find an exhaustive list on my GitHub and soon enough on my portfolio

Preparation Strategy
3rd sem & Winter: CP
4th sem & Summer: ML / Deep Learning / CV
5th sem: Full Stack Web Dev
6th sem: Same as 5th sem + Explored Crypto + Game dev a little.

Intern Season
I had made up my mind a year back, and only applied for the software-related companies, a majority of which didn't open for Chemical. Out of the 5 companies I applied to, day 1 got me 0 selections. I was mentally prepared for this. The next company I was allowed to apply for was Sprinklr, and I was able to get a test shortlist. The test was 3h long, and I was able to solve 2.5 of the 3 questions. Anyone who solved 2+ questions was shortlisted for the interview. After 3 Technical (1 - 1.5h each) and 1 HR interview (30mins) rounds of interviews, I managed to get selected.

Interview experience (Tech Rounds)
1) Previous internship learnings.
2) Some projects from my resume.
3) My understanding of the tech used in my projects/interns. For example, why did I choose a particular web framework like React or why did I need a database or a cache.
4) DSA Topics: Some knowledge about how C++ Data Structures actually work, like set and map (AVL Trees, RB Trees) and their unordered versions (Hash Maps)
5) Solving a few DSA questions on Google Docs (No IDE autocompletions, so practice this!).
6) Some puzzles and logic questions.
7) A little knowledge about how the internet works. Since I had some React experience. I had to design some components and custom React hooks.

Protips for the Interview
Right off the bat suggest/implement the brute force solution (even if you know a better solution exists). Then walk the interviewer through how you can optimize various things and suggest a better solution. Also practice extensively with one language of your choice, I'd suggest C++. Closer to your interview, practise solving questions on Google Docs / Note Pad (No autocompletions)

Mistakes Committed
A ton. Here's what I've learnt:
a) Read, think, implement, repeat. Focus on implementing things hands-on, rather than just watching tutorial videos.
b) If you want to stay in the game long enough to get noticed then dream big. Most people tend to float away once they've accomplished their goals.
c)Start early, and work as much as you possibly can.
d) Everything is already out there. If you’re just beginning, things seem new. Stick around for a while and they become familiar.

Tips and Suggestions For CP, I'd suggest using Stopstalk to understand which problems to solve. It's a website that lets you see the problems solved by others in a sorted order. Here's my profile and you can find other instizens here You'll still have to submit on the various sites (Codechef, codeforces, etc) individually. I used to stalk a few seniors and follow their progress chronologically. You can also see how my code evolved from a noob person noob person to a well, non-noob person

Must Do Resources
For CP
Dynamic Programming
Speed solve this a month before your internship tests
CP Theory

For Interviews
Interview Questions
64 HR Questions

More such blogs: