My Journey from First-Generation College Grad to Software Engineer

"The only limit to the height of your achievements is the reach of your dreams and your willingness to work hard for them." – Michelle Obama

Growing up as the child of immigrant field workers who never had the opportunity to attend college, I learned from an early age that education was the key to a better future. My parents sacrificed and worked tirelessly to give me the chance to pursue my dreams. But as a first-generation student, navigating the complex world of higher education and breaking into a competitive industry like tech was a daunting challenge.

According to the National Center for Education Statistics, only 30% of first-generation college students earn a bachelor‘s degree within 6 years, compared to 64% of students whose parents had a bachelor‘s degree or higher. The lack of exposure, guidance, and resources can make the path to a degree feel like an impossible climb.

For me, that climb began when I discovered computer science. The ability to solve problems and build projects with code fascinated me, but with no prior programming experience, I felt perpetually behind my peers. Imposter syndrome kept me from seeking help as I struggled to grasp complex theoretical concepts without a foundation in their real-world application.

I earned my computer science degree by grinding through challenging coursework, but graduated without a clear idea of how to land a job as a software engineer. After months of fumbling through technical interviews unprepared, I took a detour into an adjacent tech role, temporarily putting my coding dreams on hold.

But the itch to create, to build, to solve problems that could make a tangible difference in people‘s lives never left me. Two years into a role that left me unsatisfied and yearning for more, I decided to recommit to my goal of becoming a software engineer. I didn‘t know how long it would take, but I was determined to do whatever it took to make it happen.

Leveling Up My Coding Skills

One of the first steps in my journey was finding a resource that could provide the structure and hands-on experience I needed to really hone my programming abilities. That resource ended up being freeCodeCamp, a non-profit organization dedicated to teaching web development skills through a free, self-paced curriculum.

Over the course of several months, I made my way through the freeCodeCamp certifications, building projects like:

  • A tribute page to a personal hero using HTML and CSS
  • A random quote generator pulling data from an API
  • A Wikipedia search app with autocomplete functionality
  • A tic-tac-toe game where users can play against the computer

With each project, my proficiency and confidence grew. I could see tangible progress as my portfolio expanded and I was able to tackle increasingly complex challenges. The freeCodeCamp curriculum covered a comprehensive range of front-end and back-end technologies, from basic HTML and CSS to server-side JavaScript with Node.js and data persistence with MongoDB.

By the end, I had built dynamic web applications using modern frameworks and libraries like React, Redux, and D3.js. I knew I had developed marketable skills that employers were looking for.

The curriculum was challenging, but the real-time community support kept me motivated. Through the freeCodeCamp forums and chat rooms, I connected with other campers around the world who were on a similar journey. We provided moral support, code reviews, and accountability to keep each other on track.

Immersing Myself in the Tech Community

As much as I loved communicating with other developers online, I knew I also needed to build relationships within my local tech scene. I began attending Meetup events hosted by groups like Women Who Code, Girl Develop It, and the JavaScript Society.

Walking into those events alone, I felt out of place and nervous. Would I fit in? Was I technical enough to keep up with the discussions? But with each event, I became a little more comfortable sharing my story and a little more confident in my ability to become a member of the community.

I met other aspiring developers who were also attending coding bootcamps or teaching themselves through online resources. I met experienced engineers who were excited to share their knowledge and offer advice to those just starting out. I even met hiring managers who were actively looking for fresh talent to join their teams.

Those events became an integral part of my support system. They provided encouragement when I was feeling stuck, inspiration when I heard the stories of incredible technologists, and motivation to keep improving when I saw how much there still was to learn. I wouldn‘t have made it to the finish line without that network cheering me on.

Treating My Commute as a Classroom

To accelerate my learning and make the most of every spare minute, I turned to software engineering podcasts during my commute. This became my favorite strategy for discovering new technologies and keeping a pulse on the industry.

Tuning into episodes of Software Engineering Daily, CodeNewbie, and Base.cs became my morning ritual. I loved hearing the journeys and career advice of seasoned developers, many of whom took non-traditional paths into the field as well.

Some of my favorite insights gained from these podcast binges include:

  • The importance of writing clean, readable, maintainable code and how to improve code quality through Test Driven Development
  • Strategies for effective collaboration with product managers, UX designers, and other stakeholders in an Agile development environment
  • How to evaluate the tradeoffs of different tech stacks and choose the right tool for the job based on factors like scalability, performance, and development speed
  • The impact of emerging technologies like machine learning, blockchain, and augmented reality and predictions for how they‘ll shape the future of software

I started keeping a list of all the new terms, tools, and concepts I was hearing about so I could look them up later and deepen my understanding. Immersing myself in the technical conversations happening in the industry made me feel like an insider and helped me communicate my skills more effectively in interviews.

Applying My Skills to Real-World Projects

While I was proud of my freeCodeCamp projects, I knew I also needed experience working on larger scale applications as part of a team. An opportunity presented itself when I heard about an upcoming hackathon focused on using technology for social good.

At the event, I joined a team of developers and UX designers to build a web app that would help connect refugees with local resources and job opportunities. Over an intense 48-hour period, we took the project from ideation to a functional MVP. I was responsible for implementing features like user authentication, search functionality, and interactive maps.

In a short period of time, I got hands-on experience with:

  • Collaborating with designers to translate wireframes and mockups into code
  • Making decisions about the technology stack and architecture
  • Dividing up tasks and managing a project timeline
  • Practicing Git workflows to integrate code from multiple team members
  • Pitching our project to a panel of judges and live audience

The experience gave me a taste of what it was really like to work as a professional developer. I realized how much I enjoyed the creative problem solving, camaraderie, and tangible impact of building technology that helps real people.

The project also helped me beef up my resume and demonstrate to employers that I could hit the ground running as part of an engineering team. I later learned that team projects, whether through hackathons or open source contributions, are one of the top things hiring managers look for in evaluating entry level candidates.

Telling My Story through Personal Branding

As I gained confidence in my technical abilities, I knew I still needed to work on how I presented myself professionally online. I wanted potential employers to look me up and immediately see a passionate, competent developer who would be an asset to any engineering team.

I started by updating my LinkedIn profile. I rewrote my headline to emphasize my aspiration to be a software engineer, included my best freeCodeCamp projects in the featured section, and made sure my work history highlighted the relevant technical skills I had developed in previous roles.

I also became more active on Twitter, connecting with other developers, retweeting industry news and insights, and sharing my own thoughts on the technologies I was learning. My Twitter feed became a reflection of my interests and involvement in the dev community.

When an article I wrote about my coding journey gained traction and was featured in freeCodeCamp‘s weekly newsletter, I knew I was onto something. I started planning out more content, whether full blog posts or short, targeted threads, that could provide value to other aspiring developers while showcasing my knowledge.

Eventually, I took the leap and purchased my own domain name, MaribeldotDuran.com. Creating a personal portfolio site was the perfect opportunity to practice my newfound front-end development skills. I challenged myself to build a responsive, fast, accessible site using modern technologies like Gatsby, GraphQL, and Styled Components.

The time I invested in my personal brand paid huge dividends in my job search. Recruiters started reaching out to me directly on LinkedIn, citing my projects and writing samples. I had a central hub to direct interviewers to learn more about my work. My online presence reinforced the image of a dedicated, versatile developer eager to contribute to a dynamic engineering team.

Cracking the Code of Technical Interviews

After months of determined preparation, the job applications and interviews started rolling in. With each phone screen and coding challenge, I was inching closer to my dream of landing a full-time software engineering role.

The interview process was not always smooth sailing. I stumbled my way through plenty of technical questions and bombed a few whiteboarding exercises. But each interview taught me something new – about the skills I still needed to improve, the types of challenges I would face on the job, and the kind of team and company culture I was looking for.

I put together a checklist of things to prepare before each interview:

✅ Research the company‘s mission, product, and tech stack
✅ Brush up on relevant computer science fundamentals like data structures and algorithms
✅ Review common behavioral questions and practice telling my story
✅ Pick 2-3 projects to discuss in depth, focusing on my role and the technical challenges I overcame
✅ Prepare thoughtful questions to ask the interviewers about their experience and the company‘s priorities

As I racked up more experience with coding challenges and technical discussions, I started to notice patterns in the types of questions I was asked. Some of the most common included:

  • Explaining the difference between client-side and server-side rendering and the pros and cons of each approach
  • Describing a challenging bug I encountered and the process I used to troubleshoot and fix it
  • Designing a RESTful API and modeling the database schema for a hypothetical application
  • Implementing a specific feature or algorithm from scratch using my language of choice
  • Discussing how I would approach performance optimization, security, or scalability for a web app

I also realized that interviewers were evaluating more than just my technical knowledge. They wanted to know if I was a clear communicator, a fast learner, and a pleasant person to work with. I made sure to show enthusiasm, ask clarifying questions, and explain my thought process out loud.

Over a grueling 6-week period, I interviewed with 8 different companies. I was challenged to design data models on a whiteboard, implement a breadth-first search algorithm from scratch, and build a functioning CRUD API in 4 hours.

After a few stressful rounds of negotiation, I finally accepted an offer for a backend software engineer role at a company whose mission I believed in. Walking into the office on my first day, I was overwhelmed with gratitude for the incredible journey that led me there and excitement for the opportunity to build technology that improves real people‘s lives.

An Exciting Road Ahead

As I reflect on how far I‘ve come – from a shy first-generation college student intimidated by CS courses to a confident and capable professional software engineer – I‘m filled with immense pride. But I know this is still just the beginning of what I hope to accomplish in my career.

I‘m currently focusing on absorbing as much knowledge as I can from the brilliant developers on my team, taking on increasingly complex challenges, and making valuable contributions to our product. I‘m constantly in awe of how much there still is to learn in this ever-evolving field.

But beyond excelling in my role, I‘m determined to use my experiences to make the tech industry a more diverse and inclusive place. I‘m actively seeking opportunities to mentor aspiring developers from underrepresented backgrounds, using my story to show them that a successful and fulfilling career in tech is within reach.

Looking at the statistics, it‘s clear that the software engineering field has a long way to go when it comes to diversity. Women make up only 25% of computing jobs, and Black and Hispanic workers account for only 8% and 7% of the tech workforce respectively.

I know firsthand the barriers and self-doubt that keep promising young people from pursuing computer science. But I also know the incredible rewards and sense of purpose that come from pushing past those obstacles and claiming your place in this industry.

To anyone out there who dreams of becoming a software engineer but fears they don‘t have what it takes – I‘m here to tell you that you absolutely do. With hard work, perseverance, and a commitment to continuous learning, you can achieve more than you ever thought possible.

The world needs your unique perspective and talents. Don‘t let anyone or anything convince you that you don‘t belong in this field. Keep honing your craft, seeking out new challenges, and surrounding yourself with supportive people who believe in your potential.

And know that I‘ll be rooting for you every step of the way, eager to welcome you into this incredible global community of builders and problem solvers. Together, we have the power to shape a more just, innovative, and impactful future through the code we write and the products we create. Never lose sight of that power, and never stop striving towards your dreams.

Similar Posts