My Journey from an ESL Teacher to Software Developer in Vietnam

Introduction

Hi, my name is Tom, and this is the story of how I transitioned from teaching English as a second language (ESL) to becoming a software developer in Vietnam. My background is in education and linguistics, so making the leap into the world of coding and technology was a significant career change. But through a lot of self-study, hard work, and a bit of good timing and luck, I was able to make it happen.

Vietnam has seen rapid growth in both ESL education and the tech industry in recent years. There are an estimated 100,000 foreigners working as ESL teachers in Vietnam, with the market expected to continue growing at a rate of 10-15% per year (Vietnamnet Bridge, 2019). At the same time, Vietnam‘s software industry is booming, with a growth rate of 14.9% and revenue of $110 billion in 2018 (Statista, 2019). This dynamic made it an exciting time for me to transition between the two fields.

Discovering a Passion for Coding

My first real introduction to coding was actually through some of my ESL students in Vietnam. Many of them were studying IT or working for software companies, and they would often chat with me about their work. I was fascinated to hear them talk about building websites and mobile apps. It ignited a curiosity in me to learn more.

I had always been interested in math and logic puzzles, so coding appealed to that side of me. I started doing some online research into programming and found freeCodeCamp‘s online curriculum of coding lessons and challenges. I began working through their modules on responsive web design and JavaScript basics in my free time after work.

I still remember the thrill of making my first basic webpage and seeing "Hello World!" show up in the browser. As I progressed through the curriculum, I discovered that I loved the problem-solving process of coding. Whenever I got stuck on a tricky challenge, I would search forums, documentation, and tutorials to figure out where I was going wrong. Fixing bugs in my code and making programs run successfully gave me a great sense of satisfaction.

Committing to Learning to Code

As I gained this foundational knowledge through freeCodeCamp, I wanted to dive deeper. I researched the most in-demand programming skills in Vietnam‘s tech scene and found that full-stack JavaScript development was highly sought after, especially for building web applications. JavaScript is used by over 95% of all websites (W3Techs, 2020), so it seemed like a good language to focus on.

I enrolled in some Udemy courses on JavaScript and web development, including Colt Steele‘s Web Developer Bootcamp and Andrew Mead‘s Node.js course. These provided more structure and guidance as I expanded my skills. I supplemented the courses by reading the "You Don‘t Know JS" book series by Kyle Simpson to gain a deeper understanding of JavaScript concepts.

As I learned, I also started exploring other technologies and tools of the trade. I taught myself Git for version control, command line basics, SQL and MongoDB for databases, and Node.js and React for back-end and front-end development. I practiced working with APIs, deploying apps with Heroku and Netlify, and using Chrome DevTools for debugging.

All of this learning I was fitting in around my full-time ESL teaching job. I would wake up early to code for an hour before work, and spend evenings and weekends working on projects and courses. It wasn‘t easy to balance, but I tried to remind myself of my end goal whenever I felt exhausted or unmotivated. I knew that consistent daily effort was key, even if some days I could only manage 30 minutes of practice.

Building a Portfolio of Projects

As I gained confidence in my new skills, I knew I needed to build up a portfolio of projects to demonstrate my abilities to potential employers. I started brainstorming ideas for apps that would challenge me to apply what I had learned.

One of my first major projects was a basic social media platform called VietConnect. It allowed users to create profiles, make posts, follow other users, and view a feed of content. I built it using the MERN stack (MongoDB, Express, React, Node.js) and implemented features like authentication, routing, and database schemas. It was a great opportunity to learn how to integrate the front-end and back-end of an app.

Another project I created was an English pronunciation feedback tool using JavaScript‘s Web Speech API. It would prompt users to record themselves saying English words and phrases, then analyze the audio and highlight areas for improvement. As an ESL teacher, I had noticed that many of my Vietnamese students struggled with certain sounds in English, so I wanted to create a tool to provide extra speaking practice and feedback outside of lessons.

I also built a basic e-commerce site, a weather app using public APIs, and a flashcard app for learning vocabulary. Each project taught me new concepts and helped me work through challenges. I learned how to scour documentation, debug tricky errors, and most importantly, how to think like a programmer and break down complex problems into smaller pieces.

Throughout the building process, I made a habit of using Git for version control and deploying my finished projects to GitHub. I knew that having a portfolio of functional apps with clean code would be key for demonstrating my skills to potential employers.

Attending a Coding Bootcamp

After about a year of self-study, I had the opportunity to attend CoderSchool, a full-time coding bootcamp in Ho Chi Minh City. It was a significant decision, as I had to quit my stable teaching job and invest my savings into the program. But I believed that having the focused learning environment, expert instruction, and career guidance would be worth it.

The 12-week program was intense, with 70-80 hour weeks filled with lectures, labs, and projects. The curriculum covered full-stack JavaScript development, computer science concepts, and career readiness. We built our skills in technologies like React, Redux, Node.js, Express, MongoDB, and testing frameworks. I appreciated how the lessons built on each other and were immediately applicable in the daily lab sessions and weekly projects.

Some of the bootcamp projects I worked on included:

  • A tool for visualizing housing prices in Vietnam, using React and D3.js
  • A machine learning app to predict taxi fares, using TensorFlow.js
  • A real-time messaging app using Socket.IO and MongoDB
  • A Chrome browser extension for language learning

For our final capstone project, my team decided to build a mobile app to connect independent ESL tutors with students for online lessons. We used React Native, Node.js, Express, MongoDB, and WebRTC for real-time video. It was an ambitious project that required us to learn new technologies, but I was proud of how much we accomplished in a short time.

The bootcamp had a 95% job placement rate, and I could see why. In addition to teaching us to code, they also prepared us for the job search with technical interview practice, resume workshops, and a Demo Day where we presented our projects to hiring partners. By the end of the program, I had a solid portfolio, a network of supporters, and most importantly, newfound confidence in my abilities.

Breaking Into the Tech Scene

After graduating from CoderSchool, I was eager to land my first developer job. I applied to dozens of positions that seemed to match my skill set. For each application, I made sure to tailor my resume and cover letter to highlight relevant projects and experience.

I also leveraged my network, reaching out to bootcamp career coaches, alumni, and mentors for referrals and introductions. I attended local tech meetups and events to make new connections, like the JavaScript Saigon group and a Women Who Code workshop.

One of my bootcamp projects caught the attention of a hiring manager at a Vietnamese e-commerce startup. They invited me to interview for a junior full-stack JavaScript role. The interview process involved a take-home coding challenge, a technical interview where I live-coded in front of the team, and a culture fit interview. I prepared extensively using platforms like LeetCode and Pramp, and made sure I could explain my approach and thought process out loud.

In the end, I was thrilled to receive a job offer with a competitive salary and great benefits. It was a dream come true to officially begin my career in software development.

The Early Days as a Developer

My first few months on the job were a huge learning curve, as I adapted to working on a complex codebase with new technologies like GraphQL and Docker. I asked my senior colleagues a lot of questions, and they were generous with their explanations and code reviews. I tried to absorb as much knowledge as I could while working on adding new features and fixing bugs.

Some of the major lessons and skills I learned in my first year as a developer:

  • Writing clean, modular, and well-documented code
  • Collaborating with designers to implement new UIs
  • Optimizing performance and page load speeds
  • Diving into a large codebase to understand the architecture
  • Deploying new releases with Docker and AWS
  • Presenting my work to non-technical stakeholders
  • Pair programming and participating in code reviews
  • Practicing Agile development with sprints and daily stand-ups

I also had to learn how to cope with frustrating roadblocks and lingering imposter syndrome. Whenever I felt inadequate or discouraged, I would remind myself how far I had come from teaching myself to code after work to now getting paid to code full-time.

Since joining the tech industry a year ago, I‘ve had the opportunity to work on impactful projects, expand my skill set, and connect with inspiring developers from around the world. I know that I still have a lot to learn, but I‘m excited to see where this career path takes me. I‘m grateful for the mentors, peers, and resources like freeCodeCamp that have supported me along the way.

Advice for Aspiring Career Changers

If you‘re thinking about making the switch into software development, here are my top pieces of advice:

  1. Start with free online resources like freeCodeCamp, Codecademy, or OdinProject to get a taste of coding before committing time and money. If you enjoy the challenge and the creating process, then consider diving deeper.

  2. Choose a focus area that matches your interests and the demands of your local job market. Research the most commonly used programming languages and frameworks, and start with one to learn deeply. You can always branch out later.

  3. Build a habit of coding regularly, even if it‘s just for 30 minutes a day. Consistent practice is more effective than occasional large chunks of study time. Find an accountability buddy or post about your #100DaysOfCode on social media.

  4. Create projects to build your skills and your portfolio. Practical experience is key for solidifying your knowledge and demonstrating your abilities to employers. Share your projects on GitHub to start establishing an online presence.

  5. Explore bootcamps, but do your research on the curriculum, job placement rates, and student reviews. Prepare for the application process and time commitment. Remember that a bootcamp can accelerate your learning, but your success will still depend on your own effort and discipline.

  6. Network and find mentors in your local tech community. Attend meetups, workshops, and hackathons to meet other developers and learn about companies that are hiring. Don‘t be afraid to reach out to people you admire for informational interviews or advice.

  7. Highlight your transferable skills from your previous career in your applications and interviews. Many qualities that made you successful before, like collaboration, communication, and problem-solving, will also serve you well as a developer.

  8. Tailor your applications to each company, showcasing relevant projects and experience. Practice common algorithm and data structure interview questions, but also be prepared to explain your approach and your project designs.

  9. Stay open to learning and feedback. Technology is always evolving, so you‘ll need to stay curious and keep developing your skills. Embrace challenges as opportunities to grow. Ask questions and seek advice from your peers and mentors.

  10. Remember your journey and pay it forward. As you overcome obstacles and make progress, share your experience and knowledge with others who are just starting out. Your story could encourage someone else to take the leap.

Making a major career change is never easy, but it is possible with the right resources, support, and mindset. I‘m living proof that you can go from complete beginner to professional software developer, as long as you‘re willing to put in the hard work. So take that first step and start coding today. Your future self will thank you!

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *