Having knowledge from multiple domain helps in problem solving

Background

Hello, I'm Aditya Vikram, a software engineer currently working at Adobe. I was born in Muzaffarpur, Bihar, but grew up in Rajasthan. Due to my father's transferable job, I attended school in various small towns in Rajasthan. I completed my high school and senior secondary education in Udaipur, where I developed an interest in the Indian Institute of Technology Joint Entrance Exam (IIT-JEE) and joined coaching for it.

Despite not being able to secure admission to a Computer Science program at one of the prestigious Indian Institutes of Technology (IITs) after the JEE Advanced 2014 exam, I enrolled in the Electrical Engineering (EE) program at IIT Kanpur instead.

Interest in programming

  1. While preparing for the IIT-JEE exam, I chose Computer Science as my 5th subject in 11th and 12th grade, which sparked my interest in programming. We were taught the fundamentals of C++, which happened to be the first high-level language I learned.
  2. I have always been interested in logical reasoning and puzzles in general. In my spare time, I played around with them and built a few basic command line apps.
  3. During my first year of college, I discovered competitive programming and started solving problems on various platforms. Each solution motivated me to tackle another problem.
  4. I read editorials for difficult problems and learned more about the data structures and algorithms involved.

Computer Science Journey

Like many other students in the Electrical Engineering (EE) program, I also attempted to change my major to Computer Science (CSE) but narrowly missed the opportunity. Nevertheless, our course structure offered numerous electives, and I opted for various courses provided by the CSE department during my undergraduate studies.

  1. During the summer of my first year, I enrolled in an introductory course in Machine Learning, which ignited my interest in the field and motivated me to delve deeper into the subject.
  2. In my second year, I also undertook introductory and advanced courses in Data Structures and Algorithms. My prior experience in competitive programming aided in better understanding the material and enhancing my skills.
  3. By my third year, I became aware of minor degrees and their requirements. I strategically planned my electives to pursue minors in both Algorithms and Artificial Intelligence. Several of these courses had prerequisites, and my grades in those courses facilitated my enrollment. Additionally, I had to persuade professors to grant me permission to enrol in certain courses.

Career in Computer Science

For my summer internship in my second year, I prepared my resume with relevant courses and side projects. I was shortlisted for a coding round at Samsung Korea but did not pass. Subsequently, I applied to a couple of startups in Bangalore but was rejected during the interview process. Therefore, I decided to stay on campus during the summer and enhanced my resume by completing additional courses and personal projects.

In my third year, I secured a summer internship at Adobe Research, which marked my first exposure to research. I worked on a research project in the field of Virtual Reality, which was novel for both our group and mentors. This internship provided valuable learning opportunities and allowed me to gain practical experience with research and a new software stack. Additionally, I received a pre-placement offer (PPO) from Adobe, which I gladly accepted. I successfully graduated from IIT Kanpur with a major in Electrical Engineering and minors in Algorithms and Artificial Intelligence.

Currently, at Adobe, I am a member of the platforms team responsible for developing integrated libraries for various flagship products. My responsibilities encompass both back-end tasks, such as designing interfaces for platform API calls, and front-end tasks, including creating a unified user interface for flagship applications.

Technologies I recommend

C++ Programming

I have included C++ in my list of technologies due to the abundance of job opportunities exclusively available to those proficient in C++. Despite its steep learning curve, I highly recommend C++ to individuals aspiring to a career in the software industry. The concepts embedded in C++, such as well-defined object lifetimes and templates, can yield efficient and scalable code.

Moreover, C++ is a cross-platform language with a vast community that provides valuable guidance. The continuous modernization of the language by the C++ standards committee renders it increasingly beginner-friendly over time.

Machine Learning

The enthusiasm (or hype) surrounding Artificial Intelligence has opened up numerous opportunities in the field of AI/ML across various domains. Andrew Ng's introductory course serves as an excellent starting point, followed by diving into specific subfields based on personal interests. Certain areas, such as Theoretical ML and Probabilistic ML, require a solid grasp of Probability/Statistics, while fields like NLP and Deep Learning rely more on intuition and experimentation.

Engaging in a basic course or working on small projects in these domains can help gauge one's interest, and possessing knowledge in multiple areas aids in problem-solving. Both research and coding in ML involve reading research papers from relevant fields to stay updated on state-of-the-art practices.

Web development

Web development is a skill that everyone encounters in their academic or professional journey, regardless of personal preference. With the growing popularity of web applications, having a foundational understanding of CSS and JavaScript is beneficial. React, a user-friendly framework for front-end development, is also worth exploring.

Guidance/Tips

  1. Practice: As cliche, as it may sound, practising numerous questions on any competitive programming portal can provide you with a general sense of how to approach problem statements and help you discover new data structures. Begin with the easier ones and gradually increase the difficulty level.
  2. When dealing with algorithmic problems, it is beneficial to start with a basic brute-force solution and then progressively enhance its time/space complexity. This principle can be applied to various other domains as well.
  3. Engage in new projects, whether they are related to your coursework or personal endeavours. Real-life coding experience is always advantageous, both for your resume and personal growth as a developer.
  4. Be open-minded: As recent college graduates, you may find yourself assigned to projects that do not align with your specific interests. However, by working on diverse projects, you will have the opportunity to identify your preferred field and specialize in it.
  5. In relation to the aforementioned points, knowledge acquired in one field can often be applied to problem statements in another field; no knowledge is wasted.

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 whether you succeed or fail, you will learn.” Enjoy learning, Enjoy algorithms!

More from EnjoyAlgorithms

Self-paced Courses and Blogs