Unlike a lot of my peers, I had not chosen the computer sciences stream in my high school. I had no background in programming and consider myself an "accidental software engineer". I had applied to study Electrical Engineering, and due to excessive demand for that course, landed up with my back-up choice - computer engineering.
Although most of us have a "Plan B", we somewhat think of it as a setback when Plan A doesn't materialise. On the contrary, I started making the most out the opportunity presented. I had a strong affinity for mathematics and logical problem-solving in high school, and computer engineering was a perfect platform to develop these skills. The key was to "learn by doing" - I took up a lot of challenging projects, participated in hackathons (competitions where students build a software solution from scratch in one day!) and took up relevant internship opportunities.
The key is to get a feel of the logic, structure and efficient best practices that go into building software. Learning many languages like C++, JAVA is secondary and can be picked up relatively easily. On graduating, I had a choice of entering service companies (like Infosys, TCS etc.) or product driven companies (like Facebook, Google). I chose the latter as I valued working in-depth on a specific product rather than moving from project to project in a services firm. I chose to work in a well-known financial services firm, as I wanted to experience the fast-paced dynamic environment.
In my role as a Quality Assurance Engineer, I built software frameworks to test different systems and flows to ensure that the systems work perfectly in all different scenarios. Take for example in payment processing, a system exists to test payments for different situations such as fraud detection. My role would be to design those "situations" and try to "break" the system and report any instances where the system "breaks" to the software developer who built it. The developer would then correct the system (or as we call it in software, "fix the bug") and ensure that the system works even better now. Of course, it is impossible to think of ALL the possible "Situations", so I also write code to automate some of these test situations.
I believe that it is essential to keep yourself updated in this industry. Even at my workplace, I continued to participate in hackathons (and even won!), as it is important for a software engineer to stay passionate and constantly keep challenging your problem-solving skills.
Based on conversation in February 2019