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.
8 thoughts on “General – Network Engineering vs Coding”
Awesome blog Daniel. :0
Great post Daniel!
You’ve brought up valuable points. Also liking the “Mental fitness” idea.
I just wanna add that learning a programming language, also helps in getting to a point where your mindset becomes more structured and efficient: you’ll learn to see a problem from different perspectives, trying to solve problems with more efficient solutions, knowing how to put different pieces of puzzle together, seeing things modularized and hierarchical, and hopefully making less complex networks 😉
Those are very good points you make! I agree that we become more structured if we think more as programmers. It also helps to design a solution that should be able to be more automated and hence less complex.
Reading code is not the same as reading even the most complex of configs, and I believe those who are not proficient at both of these skills will ultimately be left behind. That is not (necessarily) to say that we need to be come expert code slingers, but we increasingly require proficiency to the degree that we understand basic control structures, data structures, and fundamental software principles. Scripting has likewise grown to become a fundamental network engineer/administrator skill, not to mention grep/egrep/awk/etc.
But I am not bragging here in the least: I regard my own skills in each of these areas to be about the least I can get away with, and I plan to step up my game on all fronts as time permits. So much to master, so little time…
Very nice post, btw.
I agree and I’m trying to sharpen up those skills. At the same time it’s difficult knowing the ROI since I’m an architect and my CLI time is quite limited these days.
What resources do you use to learn python ?
ps. great blog BTW 😉
I have been using “Learn Python The Hard Way”, “Teach Your Kids Programming” and a Coursera Python course so far.