How Do I Get Started Learning Network Programmability?

One of the most often asked questions I get at events or online is “How do I get started with network programmability?” Another common question is “Should I get my CCNA, CCNP, or CCIE?”  These are important questions for network engineers with limited time and resources to invest in training, and looking to make the wisest investments.  I am honored that they value my opinion enough to ask me what I think.  And while I can’t promise I have all the answers, I certainly have some suggestions and ideas.

Getting started learning something new can be tough… don’t shy away from the questions.

Start Out With a Wide and Balanced Approach

My first bit of advice for anyone who asks me this question is to start out building a wide foundation of knowledge across key topics rather than go super deep in one area.  There are a couple reasons for this particular approach.

First, and probably most importantly, is that programmability topics intermingle a lot.  You will likely find yourself confronted with related topics you don’t understand if you try to go too deep into one topic.  For example, if you decide to go deep down the rabbit hole of containers, container networking, and Docker without having a basic understanding of Linux networking, you will quickly find yourself confused coming to grips with the details of Linux bridges and namespaces.

Secondly, there are a LOT of potential topics you could study, with more launching everyday.  If you pick one topic and study it to the exclusion of all else, you risk missing out on a topic that you find really really interesting.  Or worse, you could find yourself having put months into learning a topic that is no longer relevant.

To Certify or Not? That Is the Question

Whenever a question about certifications comes up I always feel like I’m back on debate club. It’s a topic I could argue on either side effectively because there is no clear answer for everyone.  Instead I like to point out two facts that have helped me when tackling this question for myself.

First, outside of a few specific partner requirements, certifications on their own should NOT be the goal.  Sure a cert might help you land that job, or snag you a bit of a raise at work, but the real goal of a certification should be the knowledge you gain while studying and earning the certification.  If that isn’t the goal, then in the long run you haven’t really gained that much from the effort.

Next, consider one of the benefits of working towards a certification.  It provides a curated set of topics, study material, and potentially training classes you can take to acquire the knowledge.  This can be a huge time saver as anyone who has ever set out to learn something completely on their own can tell you.  The internet is full of information, too full in fact.  You can spend days just looking for accurate and reliable resources to learn from before you even begin to study.

With these two bits of detail in mind about certifications, my advice is this.  If you are just getting started in any topic, pursuing a certification can be very helpful.  It provides a roadmap that was designed to relay a particular set of information.  And if there is a certification that well aligns with what you are looking to learn, it can save you a ton of time from assembling your own training plan.

However, there will come a time when you need to learn a topic for which there is no certification, or the certification just isn’t up to date enough for what you need to work on.  At that point, you’ll need to head out on your own to explore and learn using the resources you find out on the internet.

For most of us, I expect a back and forth between certification work and independent study will be the norm for the foreseeable future.

What topics to study?

When it comes to what topics to study and when, I’ve provided my thoughts on that in my look at Carl the Network Engineer’s journey in both blog and presentation form.  For a truly fun look at how a fellow network engineer approached his own evolution I highly suggest taking a look at the full story.  But in short, I suggest a three phase approach to diving into network programmability.

Phase 1: Programming Basics

In this first phase you need to build a basic foundation in the programmability skills, topics, and technologies that will be instrumental in being successful in this journey.  This includes learning basic programming skills like variables, operations, conditionals, loops, etc.  And there really is no better language for network engineers to leverage today than Python.  Along with Python, you should explore APIs (particularly REST APIs), data formats like JSON, XML, and YAML. And if you don’t have one already, sign up for a GitHub account and learn how to clone, pull, and push to repos.

Phase 2: Platform Topics

Once you have the programming fundamentals squared away (or at least working on squaring them away) the time comes to explore the new platforms of Linux, Docker, and “the Cloud.”  As applications are moving from x86 virtualization to micro services, and now serverless, the networks you build will be extending into these new areas and outside of traditional physical network boxes.  And before you can intelligently design or engineer the networks for those environments, you need to understand how they basically work.  The goal isn’t to become a big bushy beard wearing Unix admin, but rather to become comfortable working in these areas.

Oh, and maybe take a break from all these new topics to checkout some of the new networking standards like YANG data models and NETCONF/RESTCONF interfaces.  It isn’t “dead” but the CLI is definitely loosing some of it’s focus as the lead programmatic interface for the network.

Phase 3: Networking for Today and Tomorrow

Now you are ready to explore the details of networking in these new environments.  In phase three you will dive deep into Linux, container/Docker, cloud, and micro service networking.  You have built the foundation of knowledge needed to take a hard look at how networking works inside these new environments.  Explore all the new technologies, software, and strategies for implementing and segmenting critical applications in the “cloud native” age and add value to the application projects.

Topics along the way…

As you spend your time going through the phases above, your particular enterprise or interests will likely have you brush up against topics like NFV, controllers, IOT, DevOps, and NetDevOps.  The three phases aren’t written in stone, use your best judgement to explore and learn about the things that seem important, relevant or just interesting as you find them.

Resources to Get Started

I know what your thinking.. “That’s all great Hank… but where do I get started?”  Have no fear, here are some great resources you can checkout to get started.

Network Programmability Basics Video Course

It just so happens that I put together a set of 28 videos designed to help jumpstart network engineers on their journey.  It doesn’t cover everything you need to learn, but it offers a great start.

Cisco Network Programmability Certification

Programmability topics have long been finding their ways into all the Cisco Certs, but Cisco Learning also has a certification dedicated to Network Programmability.

Cisco Live Sessions

There have been many sessions at Cisco Live in the last several years that discuss network programmability.  Checkout this quick list from the free online on-demand catalog.

DevNet Express Events

In partnership with the Cisco SE organization, DevNet Express events bring multi-day hands on programmability training around the world.  Look for an event near you

Cisco Learning Series on SDN

In addition to the certifications, Cisco Learning also holds regular webinars on many topics and has a whole series just on SDN.

DevNet Learning Labs and Sandboxes

DevNet has built a whole library of self-guided learning labs covering many topics of programmability.  In addition, DevNet Sandbox provides 24x7x365 access to development environments composed of Cisco and Open Source hardware and software.  And all these resources are FREE!

Community Resources

And there is even more available from the community.  Here are a few sites that I have found very handy.

GitHub Tutorials

Docker Tutorials

Kubernetes Tutorials

Network toCode Slack Channel

Python for Network Engineers

David Bombal’s Videos

Summary

Wow… this post ended up way longer than I had originally thought, but hopefully you’ve found it helpful as you are starting your journey.  And if you have a resource you’ve found helpful, tell me in the comments or up on Twitter/LinkedIn.  Thanks!