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 I grew up in Rajasthan. My father had a transferable job, so my schooling took place in various small towns in Rajasthan. I completed my high school and senior-secondary education in Udaipur, where I became interested in the Indian Institute of Technology Joint Entrance Exam (IIT-JEE) and enrolled in coaching for it. After the results of the JEE Advanced 2014 exam, I wasn't able to get into a Computer Science program at one of the "top" Indian Institutes of Technology (IITs) and ended up enrolling in the Electrical Engineering (EE) program at IIT Kanpur instead.

Interest in programming

  1. While preparing for the IIT-JEE exam, I took 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 was the first high-level language I learned.
  2. I've always been interested in logical reasoning and puzzles in general. In my spare time, I played around with it 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 portals. Each solution motivated me to try 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 tried to change my major to Computer Science (CSE) but narrowly missed the opportunity. Nonetheless, our course structure had plenty of electives, and I took various courses offered by the CSE department throughout my undergraduate studies.

  1. In the summer of my first year, I took an introductory course in Machine Learning, which sparked my interest in the field and motivated me to learn more.
  2. In my second year, I also took introductory and advanced courses in Data Structures and Algorithms. My previous experience in competitive programming helped me understand the material better and improve my skills.
  3. By my third year, I learned 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 courses had prerequisites, and my grades in those helped me enroll. I had to persuade the professors to allow me to take some of the courses.

Career in Computer Science

  1. For my summer internship in my second year, I prepared my resume with some courses and side projects. I got shortlisted for a coding round at Samsung Korea but didn't pass. I then applied to a couple of startups in Bangalore, but was rejected during the interview process. I decided to stay in college for the summer and improved my resume with additional courses and personal projects.
  2. In my third year, I was selected for a summer internship at Adobe Research, which introduced me to research for the first time. I had a research project in the field of Virtual Reality, which was new for our group and our mentors as well. Overall, I learned a lot during this internship and gained 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 IIT Kanpur with a major in Electrical Engineering and minors in Algorithms and Artificial Intelligence.
  3. Currently, at Adobe, I work on a platforms team that develops libraries integrated into various flagship products. I've worked on both back-end tasks like developing interfaces for platform API calls, and front-end tasks like creating a unified UI for flagship apps.

Technologies I recommend

  1. C++: I included C++ in my list of technologies because I've seen many job opportunities that are only available to those who know C++. Although it has a steep learning curve, I would still recommend C++ to anyone aspiring for a career in the software industry. Concepts from C++, such as well-defined object lifetimes and templates, can result in efficient and scalable code. Additionally, C++ is a cross-platform language and has a huge community for guidance. The C++ standards committee is constantly modernizing the language, which makes it more beginner-friendly over time.
  2. Machine Learning: The excitement (or hype) surrounding Artificial Intelligence has created many opportunities in AI/ML in various fields. Andrew Ng's introductory course is a good starting point, and then you can delve into subspecialties based on your interests. Some areas, such as Theoretical ML and Probabilistic ML, require a good understanding of Probability/Statistics, while areas like NLP and Deep Learning are more based on intuition and experimentation. Taking a basic course or working on a small project in these fields can help you gauge your interest, and having knowledge in multiple areas can help you solve problems. Both research and coding in ML involve reading research papers from relevant fields to stay up-to-date with the state-of-the-art practices.
  3. Web development: Everyone encounters web development in their academic or professional career, whether they like it or not. With the shift towards web apps, it's good to have basic knowledge of CSS and JavaScript. React is another useful framework for front-end development and is easy to learn.

Guidance/Tips

  1. Practice: As cliche as it may sound, practicing lots of questions on any competitive programming portal can give you a general sense of how to approach a problem statement and help you discover new data structures. Start with the easy ones and gradually increase the difficulty level.
  2. For algorithmic problems, it's helpful to start with a basic brute-force solution and then incrementally improve its time/space complexity. This applies to many other fields as well.
  3. Work on new projects, whether they are related to your coursework or personal projects. Real-life coding experience is always beneficial, both for your resume and as a developer.
  4. Be open-minded: As new college graduates, you may be expected to work on projects that you aren't particularly interested in. But as you work on multiple projects, you'll have the opportunity to choose your field and become an expert in it.
  5. In relation to the above two points, knowledge from one field can often be applied to problem statements in another field; nothing 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

© 2022 Code Algorithms Pvt. Ltd.

All rights reserved.