This is a guest blog post from Allan Wintersieck. Enjoy.
Dear new developer,
I realize that just trying to learn basic programming principles can feel daunting enough, but if I may, I’d recommend adding one more task to your list: learn a little bit about network engineering.
Networking underpins everything web and app developers do, since almost every web app communicates from the frontend to the backend regularly. Most developers understand the basics of making API calls and how data flows over the internet, but taking a small dive deeper will help you debug issues for years to come.
The goal is to build your underlying knowledge so that when you encounter related issues in the future, you understand enough about how it all works to intelligently tackle the problem. For example: the reason everyone complains about CORS (Cross-Origin Resource Sharing) being confusing is because it doesn’t make sense without first understanding the basic principles of networking and security.
A quick list to get you started:
- Read up on the basics of routing. No need to dive into how the protocols work, but understand why it’s set up this way and how internet traffic gets to where it needs to go.
- Read the basics of DNS, and understand how a DNS request is resolved.
- Read a brief rundown of the OSI model. Focus on understanding one or two examples of things you’ve dealt with in the past that exist at each layer.
- Review the difference between TCP/IP and HTTP, and why they exist at different layers in the model.
- Read up on the basics of what a “proxy” is.
An overall analogy that I find helpful: networking is like sending mail via the postal service.
- Routing is the process of putting mail in your mailbox, having a postal worker pick it up, and it eventually reaching its destination.
- DNS is the process of looking up someone’s mailing address so you can send them mail.
- The OSI model is a fancy name for making it clear that there’s a lot of details the postal service takes care of for us. Most people understand how addresses and mailboxes work (let’s call that the equivalent to the Application layer), but don’t really understand all the internal details of how the postal service gets your mail to its destination. All those details are the first 6 layers of the model.
With that background knowledge in place, tackle some of these additional questions to lead you to more learning:
- How do CDNs (Content Delivery Networks) work?
- What’s the difference between “regular” HTTP and WebSockets?
- How does SSL (HTTPS vs. HTTP) work, at a high level?
- What can nginx be used for?
And as a last exercise, sketch out a complete picture of a work app or side project: what DNS calls get made, what servers are involved, are there any proxies, what protocols are in use, what OSI layer those protocols exist on, etc.
I promise that spending the first few years of my career as a network engineer only slightly biases me towards learning this stuff.
Allan Wintersieck is the CTO and co-founder of Devetry, a software consultancy in Denver that provides strategic partnership for software architecture and engineering.