Journey from remote village to being software engineer at Silicon Valley Startup

Background

Hi, I am Pankaj Kumar, a senior software back-end engineer at Isima.io, a hyper-converged data platform. Before delving into my life-changing experience in computer science, I'd like to share a personal story. I hail from Gopalpur, a remote village in the Siwan district of Bihar, where I completed my primary and secondary education at the local government school.

My educational journey began under unique circumstances. I vividly recall that our school didn't even have a proper classroom. We studied under trees during the summer and winter seasons. During the rainy season, the headmaster would request the villagers for a space to conduct classes. With only one teacher managing the entire school, students from grades 1 to 5 were taught together. Additionally, access to drinkable water on the school premises was a constant challenge.

Due to our family's critical financial condition, I couldn't afford JEE coaching classes. Thankfully, after completing secondary education, I learned about Anand Kumar's Super 30 program in Patna through a local newspaper. I managed to participate and was selected for the Super 30 batch.

Anand sir's unique teaching style consistently motivated me to put in tremendous effort. With his guidance and rigorous practice, I successfully cracked the JEE Advanced exam with a commendable rank. It was a dream come true for me.

Although I had no prior knowledge of computers, I excelled in mathematics. Following the advice of Super 30 seniors, I chose to pursue Computer Science and Engineering as my major at IIT Kanpur.

Motivation For Computer Science

After starting college, I had my first encounter with computers. However, I constantly felt the pressure of performing well since the grades were relative. Some of my batchmates already had 2-3 years of programming knowledge ahead of me.

I was introduced to Computer Science through an introductory programming course in the C language. Initially, I struggled to grasp the concept of loops, understand iterations, and fill 2D arrays. Visualizing memory allocations was also challenging. Nonetheless, I found it fascinating that this small computer box could help us solve real-life problems. I never let myself become demotivated and persisted in understanding the concepts, making my learning more concrete and practical.

Steps that changed my life as a programmer

I want to summarise these steps point-wise:

  • Having a well-defined goal is always beneficial in the learning journey. So, I always kept track of my computer science ideas and tried to improve day by day.
  • Sometimes, data structures and algorithms may seem overwhelming, but viewing them as concepts used to store data makes the learning process interesting. Therefore, I started learning the 7-8 most commonly used data structures in computer programming. Knowing exactly what I needed to learn helped alleviate the pressure.
  • I always tried to find similarities in concepts to avoid starting from scratch. For example, if we already understand trees and want to learn graphs, we can see graphs as trees with the possibility of cycles. It's like adopting framework-type thinking.
  • I prioritized understanding the basic mathematical principles behind algorithms rather than focusing on advanced approaches and solving complex problems.
  • There were only 10 labs in the entire semester course, which made the learning pace faster. I took these labs seriously because they provided the best opportunity for hands-on learning.
  • I preferred to solve coding questions on paper first and then implement the correct code.
  • I started using debuggers and tried to understand the output they provided (e.g., IntelliJ for Java). It gave me a trace of variable values in my code, which immensely helped me.
  • I always prioritized hands-on projects over theoretical understanding. For instance, to grasp full-stack development, I designed an E-Banking system with essential functionalities such as authentication, money transfer between accounts, and auto-debit (using virtual money). I made the UI almost identical to what SBI was providing at that time.
  • Similarly, to understand Django, I designed a job searching portal using a MySQL database. To comprehend the complete process of program execution, I designed a compiler that supported basic functionalities like addition and multiplication.
  • Internship: During the summer of my third year, I secured an excellent internship opportunity with one of the most popular startups at that time, Quikr. It was a goods company where I built a system to identify trending products using elastic search and other tools.

Experience of Placement Session

I wasn't good at communication skills, which also affected my placement. While I managed to clear most of the aptitude and programming rounds, I couldn't succeed in the interviews. However, as a privileged Computer Science Engineer from one of the best institutes, a Bombay-based firm offered me a position as a Data Analyst.

Believe me, I wasn't satisfied with my performance and made the decision to pursue a career in backend development. So, I chose not to join the firm. This wasn't an easy decision, considering the pressure of my family's financial condition. Nevertheless, I declined the offer and started preparing for off-campus placements.

Professional Experience

After completing graduation, I joined AlgonoX, a Hyderabad-based firm, where I developed an internal employee management system. After that, I switched to a B2B e-commerce firm called MedleyMed, where I worked as a Django developer. However, to fulfil my aspirations, a few months later, I joined Fortanix, a cloud security firm, where I gained valuable experience managing their clients directly. I worked there for two long years.

Best Technologies to Explore

Currently, I am working in the field of Backend development for Data Management. Research and development work is constantly happening in various technologies, so it is important to explore these areas before starting a career in them. It is also advisable to consider the future prospects of those areas in the next ten years. If I had to pinpoint three technologies, my suggestions would be:

  • Data Management: Every company collects data to improve its business growth, and effectively managing data is always a critical focus area. Therefore, roles such as data scientists and data analysts provide great opportunities to start a dream career in computer science.
  • Cryptography: Cryptography is a sensitive area that people will only use when it is open source. According to me, this field will experience significant growth in the near future. It offers excellent opportunities to develop problem-solving skills using technology.
  • Machine Learning and Artificial Intelligence: Industries in almost every domain have started exploring AI and ML to solve some of the most challenging problems that have remained unsolved. Hence, I believe that building a successful career in this field holds immense promise.

Tips for Planning a Career in Computer Science

Here are some standard practices that I would like to emphasize:

  • There is no harm in taking it slow and conducting prior research before starting anything. When you begin, try to learn with an end-to-end approach.
  • When learning tools, go through their official documentation to understand their implementation.
  • I always prefer hands-on experience as it enhances my skills.
  • Instead of relying on multiple resources, stick to the best one.
  • Think of solutions to problems as frameworks and try to identify patterns so that you become familiar with the next set of problems.

In summary, I would like to say that: Hard work and continuous learning is always the key to success.

Enjoy Learning. Enjoy Thinking. Enjoy Algorithms!

More from EnjoyAlgorithms

Self-paced Courses and Blogs