DEV Community

Cover image for Networking Machinery for Software Engineers
Dmytro Huz
Dmytro Huz

Posted on

Networking Machinery for Software Engineers

After 10 years of working as a software engineer in web development, I joined a company in the energy industry. To be precise, in solutions for the power grid.

I thought that the new domain would be the hardest and biggest challenge. And it was really very hard to understand such a complex industry, both from a regulatory and a technical perspective. It took me 6 months to finally build a mental map in my head. The result of my inquiries was this series: A Developer’s Map of the European Power Grid.

When I went deeper into developing and designing software systems for the field, I faced another unexpected problem. Let me first give you some context to understand the problem better.

The grid is a complex... no... COMPLEX graph of interconnected logical nodes. It is a complicated network of networks. And in most cases, when you build something for the grid, you end up reconstructing its structure in software and networks. Either as part of a solution or as an environment for testing and simulation.

The grid is a live structure that heavily depends on communication between its nodes. It is the most important property of the grid. And to fulfill its communication needs, there are a lot of different protocols, standards, and requirements. And you have to be VERY precise with them and understand their internals very deeply.

In web development, the lowest-level communication I had to deal with was constructing the headers of an HTTP request. In the energy industry, you need to construct multicast messages byte by byte and send them at a specific time over a network with a strictly defined topology and nanosecond precision.

And here an unexpected problem popped up: I, a web dev with a decade of experience, did not know networking. At least not at the level needed for such manipulations.

I jumped into it: Computer Networking: A Top-Down Approach by James Kurose, then Beej's Guide to Networking Concepts, then Computer Networking Fundamentals for Developers, DevOps, and Platform Engineers, and finally Linux Kernel Networking: Implementation and Theory by Rami Rosen.

A few months of reading, building, trying, writing, and chatting with ChatGPT, and here is the result of my work:
Networking Machinery for Software Engineers

Everything that you might need to know as a software engineer to feel comfortable with any networking topic.

It was created with the energy industry in mind, but it will be useful for any developer.

Of course, it doesn't mean that I know everything about networking now. Quite the opposite. But at least I finally have a solid foundation and a mental map that helps me understand how all these pieces work together.

I hope this series will help other developers who find themselves in a similar situation, or who simply want to understand what is happening underneath their applications.

And here is my request to you:
Take a look at the series and tell me what you think! Did I miss something important? Is something unclear or technically incorrect? Or maybe there is a topic you think deserves more attention?

I would really appreciate your feedback, especially from people who work with networking every day.

Top comments (0)