Shing Lyu

Why Both Knowledge and Experience Are Critical for a Software Developer's Career

By Shing Lyu    

Disclaimer: This content reflects my personal opinions, not those of any organizations I am or have been affiliated with. Code samples are provided for illustration purposes only, use with caution and test thoroughly before deployment.

There is an age-old debate about whether theoretical knowledge or hands-on experience is more important for a successful software developer career. However, the reality is that both knowledge and experience are equally important and complementary to each other. When I was a student (a long time ago…), I was proud of my education and the knowledge and skills that I have acquired throughout my academic journey. However, I couldn’t help but feel frustrated that despite my academic achievements, I was still struggling to find a job due to a lack of experience. Many companies seem to be looking for candidates who have already worked in the industry, leaving fresh graduates like myself feeling left out in the job market. It’s a catch-22 situation: how can I gain experience if no one is willing to give me a chance? In this blog post, I want to share my thoughts and experiences on how to overcome this challenge and land a job despite not having any prior work experience.

Knowledge is the theoretical understanding of concepts, principles, and techniques. For software development, it can be gained through formal education, online courses, tutorials, books, and attending conferences and meetups. Experience, on the other hand, is the practical application of knowledge to real-world problems. It is gained through working on projects, contributing to open-source software, and collaborating with others.

While experience allows you to apply what you’ve learned to real-world problems, knowledge enhances your ability to solve these problems. Experience is also critical for building trust and credibility with clients and colleagues.

During my internship at Intel, I worked alongside a colleague who had extensive experience in embedded Linux driver development, despite having no formal education in that area. His practical experience allowed him to excel in his role and contribute significantly to the team. That was the first time I realize that the theoretical knowledge I learned in school might not be the only way to success.

At Mozilla, I worked on the Servo, then the Firefox browser team, where there was no definitive book or resource that covered all aspects of browser technology. Instead, I had to learn from experienced contributors and apply my knowledge to practical problems. This experience taught me the value of seeking out experienced mentors and colleagues to learn from, rather than relying solely on textbooks or online resources. Many cutting-edge fields of technology are like this. You don’t have a clear learning path and have to sieve through information scattered around the places, and only the most experienced people in the field have a clear picture in their heads.

Now I work as a solutions architect, which is a half-technical-half-sales role. I also realized the importance of experience in building trust with clients. After all, saying something like “Ah yes I’ve read that in the textbook” is not going to earn you trust with the clients. Instead, if you say “Yes I’ve done 10 large-scale cloud migrations for customers in your industry, such as company XYZ, and they had the exact same challenges as yours.”, you’ll see the client’s eyes light up.

Most of us already know how to gain more knowledge, we’ve gone through school or bootcamp, read a lot, watched a lot of online courses, and attended endless webinars, meetups, and conferences. But it’s equally important to have a strategy and plan for gaining knowledge systematically. Trying out different types of experiences is essential to growing and developing as a software developer. Be intentional about every project you choose to join. If you don’t have a choice at your current employer, create some! Contribute to open-source projects, or switch jobs.

In conclusion, theoretical knowledge and practical experience are equally important for software developers, as they complement each other. While knowledge provides a strong foundation for problem-solving, experience allows for practical application. Graduates struggling to land a job without prior experience can seek out different types of experiences, such as contributing to open-source projects or creating opportunities at their current employer. Software development is an ever-evolving field, and having both knowledge and experience is crucial to staying relevant and competitive.

Disclaimer: This blog post was written with the assistance of generative AI and is an experiment in exploring the capabilities of artificial intelligence in producing written content. While the majority of the content was generated by the AI, it was reviewed and edited for clarity and coherence by myself. The personal experiences are also my own.

Want to learn Rust? Check out my book: