As the influence of software development expands, cloud computing gains popularity, API’s become a default interface, and the theme of software-defined-everything becomes more pervasive, it is apparent that the practice of manually configuring hundreds or thousands of network devices primarily via command line will become defunct. Most of us are familiar with hardware and command lines, so it’s terrifying to start thinking that what we do can be done via programs and automation scripts. As more devices have programming interfaces and API’s, the more valuable software knowledge becomes. Software people don’t know much about networking, and networking folks don’t know much about programming. However, like many other IT transitions like voice over IP, UNIX vs Linux, and ethernet convergence, the two technologies are merging. Remember however – email has been around for decades and people still fax, but there’s a major market change nonetheless. If you want to stay current and have the latest skills, software and programmability skills are important. The benefits of bringing software and infrastructure together are too large to be ignored. If you’ve familiar with the DevOps concept, it should make sense otherwise some DevOps reading may help. The next wave of devices are bringing software to the network world, whether the networking and infrastructure team desires it or not. The next generation of products will be configured with API’s, then by the GUI, and the last resort is the command line.
Most of us will not write our own scripts and programs, but being able to edit someone’s script and understand what it is doing is key. There’s a huge difference in being able to write a small 5 line script and requiring developer support for a similar request.
CCIE vs Programming
There are a lot of blogs, articles, and internet opinions on whether a certification like the CCIE is more worthwhile pursuit than ‘becoming a programmer’. When you’re working with networks, there are a few things that are intractable from being valuable – understanding the technology and mechanics behind what is happening. SDN, OpenFlow, Python, OpenStack, and a lot of the other buzzwords change the frosting on the cake – but the basic cake mix isn’t that different. For the foreseeable future, knowing the fundamentals at an expert level is going to be valuable. However, cake frosting is sexy and appealing. Knowing how to modify the network and view it with the lens of a programmer, devops engineer, automation system, or simply via a python script is going to pay dividends. So if you’ve been studying for that CCIE, don’t give up – but keep your mind open to new ideas.
Here are some good links to get your head around this idea:
- CIO.com: SDN and DevOps in High Demand
- Greg Ferro: Should network engineers learn to program?
- Will SDN kill off network engineers’ CLI?
- Evolution of Network Programmability
- John Willis explains how DevOps is coming to networking (39m Youtube)
How do I get involved?
Understanding the different languages, technologies, acronyms, and tools takes some time and this group hopes to help you familiarize yourself with these ideas. Feel free to use the mailing list (email@example.com) for newbie questions which will eventually make their way onto the FAQ. It’s totally okay if you’re clueless, everybody starts somewhere.
if you’re more familiar with programming, check out the projects on github.com/npug (in progress) and the Current Projects if you want to post your own work, collaborate on existing projects, or look at some example code(future). If you’re running into problems with your scripts or code, or curious about an idea, hit the mailer. We’re also always looking for topics and speakers, so contact the mailing list (firstname.lastname@example.org) or myself if you’re interested.
What should I start learning?
There are a few links below that lay out different approaches, but you’ll end up mixing and matching as there will never be a ‘best approach’.
A combination of programming, linux, tools, and technologies will be helpful for infrastructure and application teams to learn. Try to focus on the items most relevant to your team and interests. You’ll be doing a lot of googling, just be prepared. Sites like stackoverflow and communities like Ubuntu‘s will be very helpful along the way.
It may be helpful to create a use-case you would like to achieve so that you can focus on what technologies are suited – otherwise there are too many potential things to learn.
Hands On: Check out the Labathon Page for DIY self paced labs.
- Create a small python script that will request the driving time between your house and the airport, and save that value to a file.
- Tips: get a linux image, learn enough command line to install the python libraries, the libraries to do REST/HTTP calls in python, and then write a small python application to do an API call and write to file.
- Extensibility: Have the script email or text you the value, and then display it on a web page using Django or a static file with Apache
- Get an openflow controller and vswitch running in a virtual environment
- Tips: Get a mininet virtual machine, and follow instructions on setting up a controller and vswitch. Try replacing the default controller with opendaylight
- Find a way to automate troubleshooting on Nexus devices with NX-API
- Tips: Look into the NX-API documentation and github, learn some python, and develop an off-box configuration script with python to collect certain show commands.
Here’s a small list of basic topics that most should find useful:
- Git / Github
- New Terminology / Acronyms
Python is an easy language to start learning since it’s flexible, easy to start with, and you can start building things with it easily. It’s easy to run on Windows, native on Mac and a few packages on Linux. It has a very large user base with many examples.
Why Python? Python is an accessible language since it’s fairly simple and has wide support across products. It’s ideal for automating tasks, interacting with API’s, and programming products. ACI, N9k, onePK, OpenStack, AWS, NX-API, and many other programmability inputs are easily manipulated with Python. There are many examples and written scripts, and it’s easily manipulated so you don’t have to write your scripts from scratch.
Hands on activities:
- Codecademy is a great place for multiple languages, as well as their Codecademy Python page. It has a built in code editor so you don’t need anything to get started except a browser.
- This git page is a great listing of known free places and books for python.
- After Hours Programming is like Codecademy, and another option if you don’t want to set up a python environment.
- Python the Hard Way will teach you the basics through repetition and open-ended exercises. This could take anywhere between 5 hours and 5 weeks depending on pace. This has you set up your own python shell (windows, linux, or mac) and then start learning code from scratch. If you fully want to understand code and know nothing, it’s a great place to start.
- This University of Michigan page which is the basis for this Coursera course is also a great place to start – courseware, presentations, and a free python book.
- Udacity has a Python course as well, that also covers more basic programming concepts
- Python for network engineers has some code examples and an email list
Linux is an open source operating system and is the OS of most devices and applications being deployed today. If you’re a Windows user there are many changes and different tools to become familiar with. For Mac users there are less changes but there is still a change.
Why learn Linux? Many of the tools used are developed primarily or exclusively for Linux. To use many of the open source tools you’ll need to know how to get around, install, and operate applications and tools in linux. If you like it a lot, you may use it as your daily driver operating system. Linux is also a good platform for programming due to it’s flexibility, open source roots, tool sets, and availability. Since many of the products and applications are linux based, understand more about the system will help in troubleshooting and operating devices that are already in your environment.
- The first step is getting access to a Linux machine. Mac users can do most things natively on OSX. Windows users can install a program like virtualbox, VMware workstation, or parallels and install Linux, or get a cloud-based Linux server running with something like AWS. You can also dual boot your laptop to Linux if you like, but most of the time a virtual image is easiest. I suggest Ubuntu to begin with since it’s easiest to find answers for Ubuntu problems. This guide is for Windows users. Otherwise google your specific questions – the answers are out there.
- Once you’ve got access to Linux, there are a number of resources that are helpful
- One of the biggest challenges for Windows users in Linux is editing text on the command line. Since many linux sessions are via command line only (SSH), text editing becomes quite difficult. There are a few primary programs to be compared and learned:
- EMACS is a powerful and fully featured text editor. There are hundreds of keystroke hotkeys. Difficult to learn, but after 15-30 minutes you should have enough to ‘get by’. EmacsNewbie
- VI is a powerful and fully featured text editor. There are hundreds of keystroke hotkeys. Difficult to learn, but after 15-30 minutes you should have enough to ‘get by’. VI in 10 minutes.
- Both EMACS and VI are similar, and linux experts will almost definitely have a preference. If you start to get more serious, choose one as it can save you time. Otherwise use nano.
- Nano is the most approachable text editor and lets you use it in a way that doesn’t require much learning. Most beginners start here. Nano intro.
- Gedit is the default text editor for Desktop versions of Ubuntu, and is similar to notepad or wordpad.
- Learn some commands – here are the top 50 commands
- It’s worth learning about the different type of distributions of Linux, as they have slightly different uses and things like package management.
- This is a pretty decent list of linux terms that would be good to be familiar with.
- Beginner’s guide to emacs
- Cheat Sheets and Guides Worth Printing – courtesy of Jonathan Rogers:
Git is a software management tool that helps store and keep track of code changes. It can run locally on a laptop, on a server, or connect to remote locations. It’s simple to use and ubiquitous amongst software developers. One of the most common remote code storages to connect to is. Github is a free place to store public software, and is very common for open source initiatives. Because it’s easy to use and you can start using other people’s software with a single command from Github it’s become the first place to look for open source code.
Why Learn Git and Github? You will almost certainly be using other people’s software and code examples, and you will also want to be able to keep track of your own code changes. If you want to have the same code on multiple machines or share it with others, Git is your best friend. Additionally, understanding how the code is saved, branched, forked, and copied will give you a different level of understanding of software development and maintenance. A major part of the culture shock that is coming to networking is creating reusable software, collaborating with others, and open sourcing things you’ve created and Git is at the center of all of it. Plus it’s pretty quick to start using and there is instant gratification when you copy down code from Github.
OpenStack is an open-source software abstraction stack to create clouds. OpenStack is made of modules, each of which abstract away different components of cloud services – such as computing (Nova), networking (Neutron), object storage (Swift), images (Glance), block storage (Cinder), and more. It is an API-rich orchestration system that interacts or controls many other pieces of software and hardware, particularly anything with ‘open’ in the name. It’s seen as the next generation open sourced VMware or as an on-premise AWS – neither of which are truly accurate but are close enough to get an idea. OpenStack has been growing exponentially and has new releases every 6 months. Because of it’s prominence and the sheer amount of integrations it has, it’s an important component to become familiar with. Due to the open source culture, there is an abundance of free information about OpenStack.
These are more intensive A-Z lists that lay out a group of different topics or are full fledged courses.
- Dave Tucker’s NetOps to DevOps training plan. This is networking and open source specific.
- Nick Feamster’s SDN course on Coursera is interesting and gives one perspective on SDN. It’s fairly heavy on , open source tools, mininet emulation, as well python coding. I found it to be pretty intriguing but didn’t find much link between it and what I do at work. Some of the video interviews he does are great.
- Basics of Software. This is more comprehensive way to understand software, methodologies, and programming as a whole. Above what would be required for most operators, but interesting.
- Web Development with Python. More comprehensive list of Python programming, as well as how to extend it to web programming.
- Startup Engineering on Coursera is beyond SDN, but it walks through setting up a linux environment, , setting up an AWS instance, and then programming applications in node.js with frontend HTML/CSS. There’s quite a bit of Silicon Valley entrepreneurship lessons as well.
Software development continues to become more relevant to network engineers as the methodologies, technologies, processes, and tools continue to merge with network infrastructure. Concepts like “Infrastructure as Code” push the software world into infrastructure.
Software Development Life Cycle (SDLC) is good to know. Here’s a good primer on Waterfall, Agile, and Scrum: