It used to be pretty simple to adopt and learn the necessary knowledge and skills for a career in the field of Networking (we call it Network Science). It usually involved a non-university certification program (Cisco or Juniper or someone else), a bunch of money, and a bunch of time dedicated to the craft. In some cases you could drill down onto Layer 3 or Layer 2 specialization. It mean that manufacturers produced closed systems that were often different and designed for a certain role in the network (for example Core Router vs. Access Router). Generally speaking, this meant building lab systems costing significant amounts of money, space, power and A/C, learning the endless CLI commands, and designing lots of scenarios for the lab systems. I know this because I did all that!
It should be noted that sniffing and studying packets and their contents has always been an important skill - and the tool for this has always been Wireshark.
Then things began to change. With virtualization, you could build a lab on your laptop (GNS3 has been our favorite since its inception). But knowing the CLI, having tons of variations, and no automation was still an issue. During this change it was becoming obvious to some of us that Linux was better than Windows, and more and more tools that helped step away from CLI started to arrive on the doorstep, usually for free. We started to see the Network Engineer needing to have virtualization skills and we also started the see a dependency on more programming and scripting skills. Even using Git to save and track configuration change entered into the picture. We saw the development and delivery of virtual routers and virtual switches, and then we had the arrival of SDN – Software Defined Networking.
This changed the game again. Albeit different things to different people, SDN was really about making the control of packet engines (switches and routers) in a way standardized. A controller configures behaviors of those packet switching boxes to apply policies and services. Not only did this redefine the network architecture, it redefined the networking skill set of the network engineer. For many of us, we started learning this with mininet and then onto bigger and greater tools and products. Facebook started building switches. And more and more we became Linux based as a networking society (you can read my prior blog post on this here).
As I write this, the networking skill set is continuing to evolve. Linux has become an absolute essential OS, as well as knowledge of bash, and knowledge of Git. Understanding tools like GNS3 or Cisco’s VIRL are also essential skills today. The reason for these skills is knowledge of how to mock up, test, validate, even simulate network designs and changes are requisite. The need to program the network and automate the network has driven us to knowing Python, and tools that got their feet wet in data centers and server provisioning, as well as code control and distribution, has now required us to know tools like Netmiko, Genie, Ansible, Nornir and even Jenkins and other traditional software development tools. (I am not even trying to create an all encompassing list – but would love to hear what others would add in the comments).
The importance of CLI memorization in CCNA/CCNP/CCIE type certifications is not quite so important any more. Nice to have – yes. But network engineers need to be developing their Linux, Python, Git, and other skills with a more burning precedence. For those that already have the certification, you have to go back to class on these new subjects. I don’t think you need to be a full on Python programmer by any stretch of the imagination, but you do have to know the basics, because most of the tools I have listed above are Python and Linux based.
That said, it is cheap to get started. Basics classes are free to low cost (
What do these directions mean? Well, it means that we are becoming less dependent on SSH to a router or switch skills. That is done automatically by the tools. It means you end up coding use cases and It is not clear that the traditional certification programs are that meaningful anymore.
I personally am worried, because I see a problem. If someone starts out with Python, Linux, Git, GNS3, Ansible, etc. – can they design and deploy a network? Don’t they still need those CLI skills? I recently heard this being compared to the change from DOS to Windows. I could not agree. That was different (and besides we have always had the terminal). For example – let’s take the BGP protocol: can you build a BGP confederation, with route reflectors, internal and external neighbors without a CLI level knowledge of the way this protocol is configured and the understanding as to how it behaves? I look forward to thoughts and comments of what my readers think.
It will be interesting to see where this is all heading.