In my final year at university in the early 2000’s, whilst interviewing for my first job, an interviewer asked me which path I would like to take: “Network Engineer” or “Software Developer”? I answered that I have been studying both programming and networking so I would like a role that included both skills. I just could not pick one of them. I enjoyed both disciplines. The interviewer responded that there is a clear difference between network engineering and software development posts and both require very different skill sets. The interviewer insisted that I choose and so I opted for “Network Engineer”. At that time, the interviewer was correct of course, that there would be a different skillset needed for the role of Network Engineer compared to Software Developer. I wonder how many students are being asked the same question from interviewers or recruiters today, and how many people are wishing that there is a job that requires both skills. I remain interested in both disciplines.
During the last few years, the Network Engineer’s roles and tasks have expanded to cloud infrastructure management; Network Functions Virtualization (NFV) and Software-Defined Networking (SDN), Security, 4G/5G mobile access and more. The requisite skills driven by this change mean that the wall between network engineer and software developer is being removed; the importance of programming skills for network engineering has increased. Although programming is not a must-have skill for network engineers today, there are clear advantages if you know how to program code.
- Save your time and cost by automation
- Improve productivity by infrastructure as a code approach
- Increase your demand and keep growing
Save your time and cost by automation
Network devices were independent architecture until SDN evolved. Network devices needed manual configuration of each device by hand. Accessing one device at a time via telnet or SSH, typing commands through Command Line Interface (CLI). The syntax being vendor unique and requiring network knowledge and hands-on experience to configure devices correctly. I recall the days when I would sit down in front a monitor all night and access 100s of routers one by one, adding a few lines of static route.
Using programming language to create repeated tasks helps with administrative work and reduces provisioning time. Now, network hardware vendors are adding more Application Programmable Interface (API) capabilities to their devices and this enables programmable device access. Using an API you can create programs to deploy multiple devices, pull out configurations from each device, collect status and stats, visualizing data. The program can handle errors, where appropriate, rollback to an original state to minimize the impact of errors. More flexibility and customization is available to users. Also, there are powerful python libraries like netmiko or NAPALM to automate provisioning work with multiple vendors. Engineers with good programing skills are able to do more with the network infrastructure, faster.
By automating network tasks, you can reduce your time for tedious tasks and save costs for network management. You can therefore reallocate your time to other tasks or projects.
Improve productivity by Infrastructure as a Code approach
Network configurations are generally difficult to maintain. A couple of years ago, I took over a project from a colleague who had left the company that I was working for. I got some documents and no network diagram and configuration files. The colleague had stored all information in his head but after he left, we lost that intel. I started to access each router and switch, collecting configurations, trying to understand the configurations and recreate documents and network diagrams. I was scared to touch any configuration because I wasn’t sure what would happen if I made any changes. Every time I got a change request, I checked the configuration, verified that the change worked, updated related documents and associated network diagrams and pull out configuration, save configuration. Every change – however small – required an update.
As programmable network devices evolve, the potential to apply a concept of infrastructure as a code to networking also evolves. Or maybe network devices could be a part of IoC. Configuration files are machine-readable structured-data using JSON, YAML or XML and, store-in configuration management systems like Git, Ansible, Puppet and others. The entire network infrastructure and all maintenance history can be tracked.
When something changes, you could test the new configurations or features in a virtual environment and make sure that everything works fine and passes all tests. Once the test is successful, the configuration could automatically deploy to the production environment, minimizing any risk that would previously have been associated with human error due to manual configuration. All changes are updated on the system automatically.
Increase your demand and keep your demand growing
A variety of new technologies and tools are introduced to the market every day. Cloud computing, IoT, AI, machine learning, big data analytics and more. Networking is a core component of these technologies. Once you have learned to programme, you will understand these technologies a lot better and absorb this as part of your work. You could integrate services with your program easily because it’s using common programming skills. E.g., you could develop an application using smart speakers such as Amazon Echo or Google Home to check network status from a voice command. If there is a problem, start troubleshooting and send out logs to e-mail. The Network Engineer without programming skills will be left behind. You are in more demand if you know how to programme and develop these skills.
In summary, programming is a powerful skill for network engineers these days. The ability to programme is becoming a prerequisite network engineering skill. 2018 has just started, why don’t you start learning to develop your programming skills to enhance your value and career?