As software defined networking (SDN) becomes more prevalent, understanding basic coding skills is becoming critical for network engineers. My start in coding began grudgingly. While I have always enjoyed network design, creation, and implementation, I did not enjoy coding. To me, time spent in front of the command line configuring and debugging a routing a protocol is much more enjoyable than time spent in text editor debugging functions, variables and loops.
However, with the growth of SDN and increasing application focus, I realized it was necessary for me to have at least a basic understanding of software development, so my journey began. Here are the steps I took.
1. Get acquainted with a programming language
After a bit of research, I chose Python, given its ubiquity in the market and the availability of information in the community. My education began by using free resources on Codecademy; its interactive tools allowed me to get familiar with Python and also with general development constructs such as variables, functions, and loops. In the approximately four weeks it to me to finish the Codecademy curriculum, I felt comfortable with most basic Python constructs and had developed a few basic applications.
2. Create a real-world solution
I decided to focus my continuing efforts on creating an application that would allow me to configure a Cisco Unified Computing System (UCS). I wanted to use Python to interface with Cisco UCS and configure the fundamental UCS constructs such as server profiles and address pools.
After some time browsing forums like Stack Overflow and Cisco Devnet, I was able to find examples of Python-based configuration of Cisco UCS, using the UCS Python Software Development Kit (SDK). Based on these examples, I was able to create a command-line based, interactive application, to configure a new UCS environment. While this was nice, it fell short in several areas; most notably, there was no graphical user interface (GUI).
3. Make something more useable
To make my UCS application more useable, I experimented with several Python GUI libraries, such as TkInter and PyJamas. However, I quickly found GUI programming was much more advanced than I was ready to tackle. Instead, I decided to look into creating a web-based interface using HTML forms.
This too proved to be rather difficult for me, but after many hours with Google, I landed on a framework known as Flask. With Flask I was able to “easily” create a web application with a simple HTML form. This allowed me to complete a UCS configuration using a web form to execute a slightly modified version of the Python script I developed previously.
4. Put new skills to the test
I put my new coding skills to the test at the DevNet Hackathon held just before CiscoLive Las Vegas in July. I was on a team that developed a platform for scientific research. The platform focused on the Hackathon theme of saving the honey-bee population. In the Hackathon, I leveraged my skills with Python and Flask, but I also learned several other things. I got exposure to using Application Programing Interfaces (APIs) with Cisco Merkai, Tropo, and Jabber, as well as more complex HTML front-end development, and using Raspberry PI as an Internet of Things (IoT) sensor.
After 36 hours of coding, our team won second place, and I learned about many development techniques, which helped me assist the team in building the IoT Enabled Bee Health solution (see screenshot below).
So after all this, I can say without a doubt that network engineers should learn coding. This is not to say network engineers need to be developers, or that developers will become network engineers. Instead, network engineers who can understand the basics of software development will be better prepared to design flexible, scalable, and stable networks that seamlessly support today’s application services.
However, proceed with caution. If not done properly, this automation could adversely impact the stability and performance of networks. In the end, I will continue to work on development solutions around SDN, automation, and orchestration services. I believe these are core areas of focus for today’s next-generation networks, and I actually enjoyed the unique thought process required to code. That being said, I still prefer designing and deploying large enterprise networks, and I won’t be giving up networking engineering for software development any time soon.