Having Knowledge From Multiple Domain Helps In Problem Solving - Aditya

EnjoyAlgorithms Blog Cover Image

Background

Hi, I’m Aditya Vikram, currently working as a software engineer at Adobe. I was born in Muzaffarpur, Bihar, but I grew up in Rajasthan. Since my father had a transferable job, my schooling was scattered across several small towns in Rajasthan. I completed my senior and senior-secondary education from Udaipur, where I was intrigued by IIT-JEE and enrolled in coaching. After JEE Advanced 2014 results, I couldn’t get into a Computer Science program in one of the “top” IITs and got enrolled in Electrical Engineering (EE) program in IIT Kanpur.

Interest in programming

  1. While preparing for JEE, I took Computer Science as my 5th subject in 11th-12th, which was the beginning of my interest in programming. We were taught the fundamentals of C++, which was the first high-level language I learned.
  2. I was always interested in logical reasoning and puzzles in general. C++ became a medium to express that so that a computer could solve problems. In my spare time, I played around with it and built a few rudimentary command line “apps.”
  3. In my first year, I discovered competitive programming and started solving problems on various portals. Each solution pushed me to take a crack at another problem.
  4. I saw editorials for problems that were difficult and learned more about the data structures and algorithms involved.

Computer Science Journey: How I planned my electives

Like almost everyone in the EE batch, I also tried to get a branch change to CSE but missed a narrow margin. Anyways, there were ample electives in our course structure, and I took various courses offered by the CSE dept throughout my UG(Under Graduate)

  1. In the summer of my first year, I had taken an introductory course in Machine Learning, which encouraged me to learn more in this area.
  2. In the second year, I also took introductory and second-level courses in Data Structures and Algorithms. My prior experience in competitive programming helped me understand better and hone my skills.
  3. By the third year, I came to know about minor degrees and their requirements. I planned my electives so that I could get minors in both Algorithms and Artificial Intelligence. Many of these had pre-requisite courses, and my grades in those helped me enroll. I had to go and convince the professor to let me enroll in the course for various other courses.

Career in CS

  1. For the summer internship in the second year, I prepared my CV with some courses and side projects. I got shortlisted for a coding round for Samsung Korea but couldn’t clear that. Then I tried for a couple of startups in Bangalore but was rejected in their interview rounds. I planned to stay in the college for summers and improved my CV with other courses and personal projects.
  2. I got selected for Adobe Research’s summer internship in my third year and was introduced to research for the first time. I had a research project in the field of Virtual Reality, which was also new for our group as well as the mentors. All in all, I learned a lot during this internship and got hands-on experience with research and a new software stack. I also received a pre-placement offer (PPO) from Adobe, which I accepted. I graduated from IITK with two minors in Algorithms and AI, accompanying my EE major degree.
  3. Currently, at Adobe, I work with a platforms team that develops libraries integrated into various flagship products of Adobe. I’ve worked on back-end tasks like developing interfaces for platform API calls and front-end tasks like a unified UI for flagship apps.

Technologies I recommend

  1. C++: I have placed C++ in technology as I have seen many job opportunities that only open up for C++. Notwithstanding its steep learning curve, I would recommend C++ to anyone aspiring for a career in the software industry. Ideas from C++ like a well-defined lifetime of objects, templates, etc., resulting in efficient and scalable code. Add to that its cross-platform nature, and C++ is one of the most used languages in the industry, with a huge community for guidance. The C++ standards committee keeps modernizing the language, which makes it more beginner-friendly day by day.
  2. Machine Learning: The fascination (or hype) around Artificial Intelligence has opened up many opportunities in AI/ML in various fields. Andrew Ng’s introductory course is a good starting point, and then one can dive into the subspecialties as per interests. Some areas like Theoretical ML and Probabilistic ML demand a good grasp of Probability/Statistics, while areas like NLP and Deep Learning are based more on intuition and experimentation. Taking a basic course or small project related to these fields helps in gauging the interest, and having knowledge from multiple areas helps in solving a problem. Both research and coding in ML involve reading research papers from relevant fields to stay up-to-date with state-of-the-art practices.
  3. Web development: Everybody encounters web development in their academic or industry career, albeit reluctantly. Given the shift to web apps, it is good to have a basic knowledge of CSS and javascript. React is another handy framework in front-end development and is easy to learn.

Guidance/Tips

  1. Practice: As cliché as it sounds, practicing lots of questions on any competitive programming portal provides a general sense of approaching a problem statement and helps in discovering new data structures. Start with the easy ones and gradually increase the difficulty level.
  2. Concerning algorithmic problems, it helps formulate a basic brute-force solution and improve its time/space complexity incrementally. This applies to several other fields too :)
  3. Work on new projects, be it course-related or side projects. Real-life coding experience always helps, both for the CV and later as a developer.
  4. Be open-minded: As new college graduates, folks are expected to ramp up and work on projects that they might not be especially interested in, to put it mildly. But as you work on multiple projects, you get to choose your field and master it.
  5. Related to the above two points, knowledge from one field often helps in problem statements from another; nothing goes to waste.

Reference Material

  1. Effective Modern C++ by Scott Meyers is an excellent book for learning modern C++.
  2. For the latest developments and fascinating stuff about C++, check CppCon’s youtube channel
  3. React intro: https://reactjs.org/tutorial/tutorial.html

So overall message that I wanna give is “Try various things! No matter you succeed or fail, but you will learn.” Enjoy learning, Enjoy algorithms!

We'd love to hear from you

More content from EnjoyAlgorithms

Our weekly newsletter

Subscribe to get free weekly content on data structure and algorithms, machine learning, system design, oops and math. enjoy learning!