Like many of my friends back in India, I went to study Computer Science as an undergraduate because my parents thought it was where the money was. Gladly, for me, I happened to like it and was reasonably good at it. Sadly, that isn’t true of a lot of people. It kinda sucks to continue down the chosen path, when either passion or aptitude is missing.
In college, I often taught complex concepts to my friends and helped them with their projects. Some cared about understanding, some just needed answers. For those who cared, the joy of the moment when they understood something gave a kick more than grades ever have. But that might also be because my grades didn't reflect my comprehension. The system rewarded people who could reproduce exactly what was taught, even computer programs. I remember one morning, riding the bus to college, when I heard people reciting computer programs out loud like they were verses from Shakespeare. I struggled with the notion of confusing regurgitation with smartness. I watched some of my classmates ace exams with no grasp of the underlying ideas. It was like training to be a chef by memorizing recipes without learning about flavors, ingredients, consumers, or the art of improvisation.
The incentivization of rote learning and fixation on scores felt wrong but I could not articulate it then. Certainly not to my parents, for whom, like many in their generation, academic scores alone dictated success later in life.
When I showed up at my first job, I was asked to code in technologies I hadn’t learned in college(HTML, CSS and JavaScript) and was expected to build a complex web application from the ground up in a matter of weeks, with three other people I had never met. We had no product manager, so at every step of the way, we had to ask the user how they wanted it built. It was new, and uncomfortable, but felt like a welcome change from the dullness of college. We were learning new things everyday, and putting them to use right away. Or rather, the learning was dictated by our needs, rather than the other way around.
Fast forward a decade into my industry career, that vague discomfort I had in school has crystallized into conviction. The academia had prepared us for what the author David Epstein, in his book Range[1], calls a “kind” world - one where patterns repeat and solutions follow predictable paths. But software engineering is deeply “wicked”. Each project brings unique challenges, ambiguous requirements, and complex human dynamics that no predefined rules can solve.
The truly challenging aspects of the job were not about writing code. Deciphering vague requirements from stakeholders who themselves were not sure about what they wanted, dealing with legacy code written by developers long gone, trying to understand not merely what their code does but why it was written that way, organizing the software in a maintainable way, and navigating human relationships were the real hard parts of the job. Of course, there are harder problems where technical expertise alone makes you shine, but that's not true for the majority of software that's built.
While I learned the fundamentals in college, which were, no doubt, helpful, the art and craft of building software, the soft skills needed to excel at it, and knowing what to build were glaringly left out. No course had prepared me for how to work with a diverse set of stakeholders, or how to influence others when your incentives were not aligned. No professor had taught me how to manage trade-offs, the inevitable choices you have to make when working within severe constraints. We were all "trained" to enter an industry without any kind of formal training on the majority of the skills that would be expected from us.
Over the years, I have learned that success in software engineering is less about knowing all the answers and more about knowing what problems are worth solving, and how to find answers for them. It’s about developing the resilience and adaptability to tackle unclear problems, the humility to learn from others, and knowing when perfect is the enemy of good.
This gap between education and industry is even more concerning in the age of AI. As LLMs become more sophisticated, they begin to handle many of the technical tasks, or knowledge work, we spent years learning. The barrier to software development is rapidly lowering and hence those relying on a traditional computer science education to teach them the skills they require to thrive, are most at risk and may find themselves unprepared for this shift.
Get notified when new posts are published. Once a month, I share thoughtful essays around the themes of personal growth, health & fitness, software, culture, engineering and leadership — all with an occassional philosophical angle.