How I Got My First Software Engineering Job as a High School Student

How I Got My First Software Engineering Job as a High School Student

My journey from no programming experience, to getting my first job as a software engineer

·

9 min read

Start of my Programming Journey

It was around the middle of May 2020 when I first started learning how to code.

The Philippines, where I live, had been placed under lockdown for about a month and a half at that point. My day-to-day routine was basically looking through my social media channels, watching youtube videos, binging Netflix series, and playing Call of Duty.

I was entering 11th grade, and at the time it looked like that I'd be having classes online for the next two years (which we did). I'd always known that I would be taking up Computer Science since I started 7th grade, but I always pushed down any urge to start learning it early as I didn't feel the need to.

I always used to say to myself that "I'll be learning this in college anyways". Eventually, I got bored with what I was doing.

As any person interested in learning how to code, I started searching to discover what the best programming language was, the best programming resources, the best coding editor, and other things newbies tend to search for a lot. And I settled on JavaScript and freeCodeCamp as my initial starting points.

How it feels like reading about which programming language is best

How it feels like reading about which programming language is best

For the next few weeks I was hands on grinding through the freeCodeCamp JavaScript, and (legacy) responsive web design certifications. However, like any newbie programmer, I was more focused on memorizing syntax. I didn't understand what I was really doing. In short, I was in tutorial hell.

At the start of July, I decided to learn C++ instead, as I was told that it would help me understand programming better. I took this free course on Udemy to learn C++. I finished the course by the end of the following month, and I did indeed have a better grasp of programming. But I still was reliant on memorizing syntax instead of understanding what I was really doing.

I then took a course on Coursera on Object-Oriented-Programming with C++. I breezed through it and finished it within a week, but when I took the second course in the specialization, I couldn't do the first assignment. I was way out of my league.

I realized that I still didn't have a solid grasp on the fundamentals of programming, not to mention that I still didn't have any knowledge about introductory computer science concepts.

How CS50 Changed My Perspective on Programming

I went to the r/learnprogramming subreddit to read about people's recommendations on introductory computer science courses. The two that were recommended the most were Harvard's CS50, and MIT's 6.0001.

I decided to go with CS50 as it taught C for the most part, and its instructor was highly praised in the subreddit.

cs50.jpeg

CS50 is one of the most popular courses on introductory computer science

From September until the end of October, I worked through the CS50 course; and it was tough, not to mention, that I had school at the time. The video lectures are, by far, the best I've ever seen. The problem sets were mind-bogglingly difficult. Despite the difficulty of the problem sets, I can say that I was finally understanding what I was doing. I wasn't hell-bent on memorizing stuff anymore. It was through this course that I finally had my aha moment in learning how to program.

Exploring different fields in Computer Science

After I finished the CS50 course, I used the month of November to explore numerous technologies, and eventually settle on what I'd like to specialize in. I explored cross-platform desktop development with Qt, game development with Unity, and ethical hacking. I didn't want to pursue web development at the time because I feared that I'd go back to relying on memorization.

At the start of December, I decided to settle on specializing in mobile app development with Flutter. I'd eventually like to learn, and do a deep dive on ethical hacking, but that's for another time.

flutter.jpg

Flutter, a cross-platform framework by Google

In learning Flutter, I used Angela Yu's course on Udemy. I did this course for three months, from December, until February. I only did however until the module on creating a chat application.

1st time applying to internships

By the end of February, I decided to apply to internship postings to see if I can get my first job. I was hesitant at first because I feel like I wasn't ready, nor good enough to get into tech yet. However, I read a post from a self-taught developer that one wouldn't really know when they're ready and that they should still apply to tech jobs anyways.

Low and behold, I got rejected for most postings I applied to. However, I did get interviewed for a startup that uses Ruby on Rails. Because of them using Ruby on Rails, they wanted to see if I can learn, and use the framework. I spent the month of March learning about Rails, and even made a tweet scheduler application with it. I submitted it to them, and they let me proceed to the third, and final stage of their interview process. The final stage is algorithmic problem solving, which I absolutely bombed. I wasn't really actively learning about algorithms at the time so I wasn't able to answer the problem they gave me (a Leetcode easy mind you).

Looking back, I felt like I wasted my time learning Rails as I haven't used it since I made the project, but hey! It was a good interview experience. I then took a month-long detour from doing any programming as I was busy with school.

Getting back to programming

In the month of May, I started getting back into programming with Flutter again. Specifically, I started learning about state management with Blocs and Cubits. This was also when I got into learning about machine learning with Python. Moreover, I also learned about Slingshot; a startup that connects teenagers with tech companies. I joined their community of tech talents, and got to learn more about people my age who are already working/looking for work.

The following month, I dived deeper into machine learning with Python, and made projects as well. The same month I also fine-tuned my resume to prepare for applying again to internship postings. The same month, I published my first tutorial article which discusses state management in Flutter using Cubits.

2nd time applying to internships

During July I started applying to internship postings again. This time, however, I did a mix of mass applying to postings, and cold-emailing/cold-messaging founders and CEOs of startups I find interesting to work for. I also started learning about the FastAPI framework in Python.

I got more interviews this time around, however, for most of them, I got rejected because I was only available for part-time work since I had school all year-round. One of the companies I interviewed for rejected me because I didn't have any knowledge of the Flask framework despite me already having Python knowledge. Another company rejected me despite doing well in the interview because I used C++, and they were looking for those experienced in Java. Despite all these rejections though I'm still thankful as I got to have numerous interview experiences.

At the start of August, I published my second tutorial article, this time on developing, testing, and deploying applications with the FastAPI framework. The following day after publishing, I got an email from one of the hiring managers at CertiK (one of the companies I applied to) asking me if I was still looking for an internship. I answered yes and we scheduled an interview for the following month. By this time, I've been burnt out from all the rejections I've received in my internship search so I told myself that I won't look for an internship for the rest of the year if I get rejected for this one.

certik.jpg

CertiK, a company focused on blockchain security

Getting my first software engineering job

Luckily, after one interview, and a take-home assignment, I got accepted to work at CertiK! Specifically, I'll be working on a Flutter mobile application. I started the second week of October, and I've been here ever since. Coincidentally, the weekend after my start date, I had my first ever talk in a tech meetup (albeit it was conducted online). I gave an online workshop about Cubit stage management in Flutter after I was invited by my country's local Flutter Google Developer Expert.

meetup.jpg

Got invited to hold a workshop for the first time

While working here at CertiK, and on the mobile app, I've gained a deeper understanding of not just Flutter, but software engineering in general. I've learned to understand big codebases, and how to understand code written by somebody else. Moreover, I've gotten a bigger appreciation of code architecture, and how a bad code architecture can limit one's understanding of a codebase.

I'm no longer working with Flutter for CertiK, but instead, I'm working with Golang now! The lessons I've learned throughout my stay however have made me adapt quickly to a new codebase, and an entirely new programming language I have no familiarity with.

What I'm up to nowadays

I still do projects on the side, and I still write articles as well. Most recently, I wrote a tutorial article on deploying a TensorFlow model as a RESTful API service. This article covers the backend portion of a food classifier web application I made. The frontend was made with Flutter, and served with Node.Js while the backend was developed with Python, and Docker.

Currently, I'm still at CertiK, and I'm finishing up the last few weeks of my high school years. I've also started learning about full-stack web development through the Full Stack open course which I highly recommend. Moreover, for the third time, I'm learning about data structures and algorithms through this specialization. I've already tried to learn through this resource twice but I always fail to understand the topic. I'm also coinciding this resource with Skiena's Algorithm Design Manual. Hopefully now with the knowledge, and experience I now have, I can finally understand, and apply the topics learned in solving algorithmic problems.

Resources I'd use if I were to start over

All in all, it took me over a year and four months to get my first programming job. Not to mention I was balancing this with school. I explored numerous resources, some bad, some exceptionally good. If I were to start over from 0, the resources I'd use from the get-go are:

There are other resources I'd mention like the ones I used for machine learning, but for the skillset, I use on the job, these are the ones I'd recommend.

Concluding remarks

My journey may not have had the best start. I wasn't understanding anything for the first three months or so of my learning. However, persevering through that initial struggle is what got me to where I am today. It's always said that starting is the hard part, and I agree! I've read lots of people give up how to code, my friends included since they couldn't get it right from the get-go. If you are someone who's starting to learn how to code, do not give up! It will all eventually click.

If you found this article helpful, feel free to share it on social media. Let's connect on Twitter. You can also buy me a coffee ☕.