Updated Jun 29, 2023

The Balancing Act: Understanding technology vs grasping the underlying science

In the ever-evolving field of computer programming, there's an interesting trend that's been gaining momentum. Many software engineers are honing their skills in specific technologies, mastering the tools of their trade. But are we losing sight of the fundamental science that underpins these technologies? Is the adage becoming, "As Tech is found, Science is lost"?

The Layers of Abstraction

Software development has been transformed dramatically over the past few decades, primarily due to the increasing layers of abstraction. These layers hide the intricacies of underlying mechanisms, making it easier for developers to code and create software without needing to know every little detail about the hardware, the operating system, or even lower-level programming languages.

Data flows as packets from one application to another via a network.

For instance, today's web developers may not necessarily need to understand the workings of protocols like TCP/IP, or how browsers interpret HTML, CSS, and JavaScript. They can comfortably use higher-level languages, frameworks, and libraries that abstract these complexities away.

The Impact of Increasing Abstraction

While these abstractions make our lives easier and more productive, they have a downside. They can, and often do, lead to a scenario where software engineers excel in using specific tools or technologies but lack a deep understanding of the foundational principles that these tools are built upon.

I've observed this trend even in how developers identify themselves, often aligning more with the technology they use than the underlying language it's based on. For instance, someone might say, "I am a React developer," instead of "I am a JavaScript developer." It's as though we're lifting these abstraction layers onto a pedestal, viewing them as separate fields of study, independent of the science that gave birth to them.

The Danger of Losing Sight of the Science

The peril here lies in the possibility that as we discover and immerse ourselves in new technologies, we may be losing our grasp on the fundamental scientific principles that make it all possible. We risk becoming so enamoured by the elegance of the tool that we forget about the complexity and beauty of the machine that the tool operates.

A Reminder and a Quote

This isn't to undermine the importance of specific technologies or the role they play in modern software development. They're crucial for productivity, efficiency, and innovation. However, as we delve into these technologies, we must always remember that they're abstractions. And while these abstractions may simplify our work, they shouldn't simplify our curiosity and drive to understand the foundational principles that make them work.

You can never understand everything. But, you should strive to understand the system. - Ryan Dahl (Creator of NodeJS)

As software engineers, we should take these words to heart. We should continue to strive to understand the system—the science—that our cherished technologies are built on.

Closing Thoughts

In conclusion, we must strive to strike a balance. It's crucial to stay abreast of emerging technologies—they're the tools of our trade, after all. However, we must also make a conscious effort to grasp the science that lays the foundation for these tools. It's in this delicate balancing act that we can truly excel as software engineers, building not just on the technologies of today, but also contributing to the innovations of tomorrow.