From Zero Coding Experience to Software Engineer - My Journey to Landing the First Job
My project-driven journey from zero coding to software engineer - the pivots, lessons and perseverance required to transition from a non-CS background.
Why I wrote this ?
This is my 5th year working as a software engineer in the industry and it is really a good chance to take a step back and reflect on my journey thus far. From this reflection, I wish I can have a better understanding of the right choices I made and some of the mistakes that I should avoid. I also wish to use my personal story to encourage people who are hesitant in switching their career into software engineering.
How it all started
I remember my impression of software engineering vividly. It always sounded like a boring, geeky job to me and I had zero interest in spending more time with it. However, my first programming module in university changed my perception completely. Since childhood, I've enjoyed subjects requiring logic and analysis. Programming mirrored those interests in a different way.
What made it even more exciting was realising I could do cool things with coding, like creating a website, rename all my files with script, data processing on the terminal, and more. I decided then to pursue software engineering as a career and started planning for it.
The first pivot: Project with professor
I immediately identified the biggest hurdle to becoming a software engineer - my lack of computer science knowledge and project experience. Why choose me when thousands more have the degree and portfolio? I needed something to prove myself. That's when I reached out to my professor at NTU.
The project was an application for safe travel. We designed a mobile app with a map interface. On the map, you could see the danger level of your location - ratings, past crimes, and tips.
I worked on the Android app. My job was to put Google Maps into our app and let people tap on the map to check and leave ratings. I worked with 2 teammates on the Android and backend parts separately.
It was fun because I learned Android programming from scratch and applied my skills. Back then, everything seemed so hard - creating a button, passing data, HTTP calls. I had to Google for ages to figure things out. Definitely painful!
Still, by the end, our app was a solid MVP. It could do the basics, like showing and letting users leave safety ratings for places. Finishing this project felt amazing, and I learned so much from it.
The second pivot: Internship in a startup
My second pivot happened right after finishing the project with my professor. I wanted to make good use of my summer break to gain more experience. At that point, my skills were limited - at best intermediate Android programming, with little backend or database knowledge. I thought, no one will hire me!
Still determined for a job, I reached out to my professor for help. I told him I wanted more experience and asked if he knew of any opportunities. Lucky for me, a week before summer, he connected me to an internship.
The job was perfect. I would help create an app for a restaurant to make ordering food easier. The founder of the project was great. She helped me understand the big picture, what I had to do, and even suggested I take some online Android courses (and she even paid for them).
In those three months at the startup, I learned so much. I got better at Android programming, set up my own PHP application, and worked with a MySQL database. The highlight was when I first managed to send an order from the app to the server, and the server saved it in the database. It might seem small, but for me, it was a big win. It gave me a lot of confidence to keep going in this field.
The third pivot: Internship in a established software company
My third pivotal moment was securing a job at AdNovum, a company that specialise in designing, and implementing security solutions.
Working there was crucial for me. It gave me deep insights into excellent software engineering practices, tools, and technologies. After my time there, I felt, for the first time, like a genuine software engineer.
I worked on an internal tool for employees to quickly create forms with a drag-and-drop interface. The team often needed customised forms for data collection.
We used Angular and form.io for front-end and Java EE for back-end. I struggled a lot at first, unsure of the difference between frameworks and libraries or concepts like dependency injection and Gradle builds. I'm grateful my supervisor took the time to teach me the ins and outs.
Another valuable lesson was system architecture design - I learned how to use design patterns to make software more scalable and adaptable. I realized that programming isn't just about writing code; it's about creating well-designed, maintainable software.
By the end of my time at AdNovum, I showcased my work to the CTO. Even if it wasn't groundbreaking from his perspective, I felt proud. I could see how much I'd grown during the internship. The experience removed many of my "unknowns." I now had a better grasp of where I needed to improve and what I needed to learn next.
The fourth pivot: Prepare interview for big company
The final pivot to land a software engineering role was preparing for big tech company interviews. In the beginning, being hired by top firms seemed unattainable. But the progress I made so far had made it feel within reach.
I focused on my preparation:
Practicing Leetcode algorithms daily. I ensured data structures and complex logic would not trip me up.
Refreshing CS fundamentals through online courses - operating systems, networking, security. I could not let the basics escape me.
Studying architectural patterns and design books. Most undergrads overlook writing scalable, clean code. Mastering this will make me stand out
The meticulous preparation paid off with offers from Garena and Visa 🎉! After some deliberation, Visa felt like the best fit - a small, agile team within a large corporation.
My experiences at Visa had been incredible, though that's a story for another time 😉.
Reflection: Ups and Downs
Pursuing software engineering took me on a rollercoaster ride filled with highs and lows. Looking back, some key takeaways emerge:
The Good:
Have a long-term plan, but break it down into small, achievable steps. Rather than looking at the end goal, I focused on the next milestone within reach. This built momentum and prevented me from losing confidence when progress seemed slow.
Asking for help can provide game-changing opportunities. I likely wouldn't have gotten my first internship without my professor's referral. That experience then enabled me to land a job at AdNovum. Outreach is invaluable.
Apply for roles slightly beyond your current capability. The mantra of "fake it till you make it" has merits here. I constantly stretched myself by applying for jobs requiring skills I was still working on. The urgency forced me to rapidly gain those skills.
Improvements:
Find an industry mentor earlier on. A guide well-versed in applied software practices could have helped steer my learning and provided critical direction in those early days.
Maintain balance with personal life and interests. In my intense focus on work, I neglected friendships, family time, and explorations into other areas. Time in university is extremely valuable for making lifelong friends and memories. No amount of computer science knowledge could have traded that experience. In hindsight, I think I could have done better on my social life and other personal interest too.
Closing thoughts
This sums up my transformative journey from zero coding experience to software engineer. It's been an incredible learning experience, and I'm extremely grateful for the mentors who guided me and opportunities that enabled my growth. But the learning continues - since graduating, I've taken new pivots to expand my skills and experiences.
My path so far has shown that with perseverance and help, a non-traditional background can be springboard to a fulfilling engineering career. For anyone considering such a switch, take that first step and start working on it !
Stay tuned for my next article, where I'll discuss the series of explorations and pivots that propelled my journey from software engineer to senior software engineer
Thank you for taking the time to read and support this newsletter.
If you've enjoyed what you've read, consider showing your support by clicking the ❤️ button at the bottom of this email. Even better, share it with your friends!