There has been a lot of talking about the future of the network engineer for the last couple of years. Many articles have declared that we MUST learn to program or we will be banished from the world by the programming overlords! I definitely do not agree with this bold statement but lately I have started to learn Python. Why?
Why Learn Programming?
As a network architect I probably won’t ever write a line of code or at least very rarely so. So why bother learning?
I didn’t learn a lot of programming back in my days of school. I fiddled around a bit with Basic, some Pascal and then at the university I tried some C# and C++. I never felt connected with programming. I never felt that I was good at it. This surprised me a bit because I’ve always been good at learning things. I’m good at analyzing things, troubleshooting things and I have a strong background in maths and science in general. I had all the skills that good programmers normally have so why couldn’t I learn programming? Because I struggled I didn’t enjoy doing it so I never pushed through until it “clicked”.
Later I have learned that things don’t always “click”. Sometimes it takes time, reading something multiple times, labbing with it, reading about the same thing from another resource. I never felt connected with those programming languages.
I started learning Python a couple of months ago. I immediately felt that this language was more suited for me. I could read the code and have some form of feeling of what it did even if I didn’t yet understand the code. While some people won’t like the indenting of the code to me it was more readable, it was easier to see what code blocks belonged to which loop or function.
So why did I start to learn Python?
There are several reasons to learn programming.
Automate simple tasks – You don’t have to learn a lot of programming to be able to do useful things. Especially with all the plugins and modules available you can use the code of better programmers to simplify your own scripts. One example is being able to convert a MAC address from the format of 00:01:02:03:04:05 to 0001.0203.0405 with just a few lines of code. Even simple tasks like this can get very tedious when you have to do it manually at scale. Another example would be to create an access-list with the same rule where only the subnet changes and you have 100 subnets to go through. Tedious by hand, easy by code. These simple tasks are not what your job is about so if you can automate and get them done faster you will have more time to do learning or more important work.
Learn the tools and language of Dev – Traditionally different job roles have been very differentiated where each discipline of engineer have had their own silo that they tend to. This is not efficient and the modern engineer needs to have a broader skill set. If we learn to use tools like Git and Travis CI we can both become more efficient in our own work as well as being more able to understand the language of the Dev people. We as network engineers can learn a lot from the coding side about how to scrub for bugs and how to test the configuration that we deploy onto devices.
Mental fitness – Programming can be seen as a form of mental training. You have to think about how things fit together, how to calculate different things and how to make sure your code is working. When your code is not working you have to troubleshoot it. It promotes a scientific approach for solving problems. It also helps in learning you how to attack a complex problem by dividing it into smaller parts and solving each part.
Understand applications – If you know how to code you will have a better understanding of how applications work. Why does this application require a L2 adjacency? Is it because it does not have its own proper HA so it must rely on things being part of the same subnet? Once you start talking the language of Dev you’ll be more fit to understand their requirements and come up with arguments of your own why they are building an app in the wrong way if it requires too much from the network.
Will We All Become Coders?
I don’t believe that we all will become coders or that it is a desirable outcome. If we simply replace CLI commands with scripts we won’t have gained that much. Configuring our devices shouldn’t require advanced programming knowledge. It’s the job of the vendor to develop proper tools to interact with the devices but also to promote open source solutions so that we have options for what tool to use to configure our devices.
Knowing how to code vill be a valuable skill but we also need to know networking, virtualization, storage, applications and we can’t be experts in them all. We should leave the advanced programming to the people that actually are developers. We can commit code to a project but someone with more experience should check the code for errors.
Under all the overlays there are still classic network protocols running such as ISIS and BGP. We will still have to know these tools in the future but it will be more for troubleshooting than for configuring, at least in a data center fabric. In a service provider network it’s still required to configure these things by hand.
The sky is not falling. You don’t have to learn coding if you don’t want to but doing so will evolve your skillset and possibly accelerate your career. Don’t be afraid to try it out and don’t be afraid if things aren’t “clicking” immediately. Give it time and you will soon notice that day by day you are becoming a better coder.