My journey to network programmability and automation

My journey to network programmability and automation

Here is my journey to start learning network programmability and automation, and how I get the Cisco network programmability specialist certification (300-550 exam). In this post, I give you the links towards all the resources which I used to study.

Back in 2015: SDN, new fancy buzzword or a paradigm shift?

I started this journey in 2015, when at the Cisco Network Innovation Summit in Prague, I saw a presentation of Tim Szigeti about dynamic QoS with Cisco APIC-EM. That was the trigger for me, after a few years reading everything about SDN without anything concrete, now this was real! Finally, the network industry is evolving, and the network engineer job will inevitably follow.

I always thought that the network engineer job needs to evolve: since more than twenty years, copying and pasting into a CLI is the standard for network operations, and Notepad is the most common text editor… At the opposite, systems admins can seamlessly move virtual servers from one data-center to another in two clicks. Now this will change.

Where to start, what to learn?

First, my questions were: How do I get started with SDN and network automation? What should I learn?

Because I am working for a Cisco partner for enterprise networking, I had the opportunity to see webinars and do some workshops on APIC-EM. But it was only the beginning of this product, so it had not yet many features. Furthermore, I quickly realized that APIC-EM or the SDN controller in general is only a single link in the network automation chain, and I need to learn the entire chain.

At that time, I needed to focus on my CCIE R&S, so I put this subject aside until mid-2017. And I did well, because things have seriously evolved in two years.

So, in September 2017, I had the chance to make a very good internal training on IaaS, SDN, NFV and network automation basics. It was two day of theory and three days of hands-on labs on:

  • Openstack (Horizon, config, deployment of an instance, CLI, VIRSH)
  • Open vSwitch (OVS) with OVSDB, then OVS with Openflow
  • Mininet
  • Container networking with Docker and IOS-XE containers
  • NFV on Cisco NFVIS

The labs part was tough and very interesting. And it helped me a lot to understand what exactly I must learn.

My Learning List

After this course, I made a list of the topics I wanted to learn:

  • Python
  • Git and GitHub
  • JSON and XML data-structures
  • Linux networking
  • Ansible, maybe also Puppet and Chef
  • NFVs
  • Network (SDN) controllers
  • DevOps principles
  • Jenkins, maybe also Travis CI
  • Docker and other container technologies, especially the networking part
  • Cloud networking

First, let’s start with Python & Git

First, I started with Python. Because this was probably the most difficult and longer part for me. Despite the fact that I made some bash/shell scripting in the past, my last real coding course was more then 25 years ago on Pascal and assembler (assembly). So, I am starting nearly from zero.

And learning how to use Git and GitHub at the same time was not a bad idea, because they go together.

My idea was to build a good enough foundation of Python to be able to read, write and debug a script. I did not pretend to become a developer.

Here are the tutorials and courses I made for that: – Python tutorial

I started first with a Python tutorial on

I found this tutorial perfect for someone like me, it starts from zero; the difficulty is increasing step-by-step and after each chapter there is a series of questions that challenge you on what you just learned. There is also an app for IOS and Android, to learn when you commute. And a mini-sandbox built into the website to try basic scripts. For some more advanced scripts they redirect you to Trinket. – Object-oriented programming in Python course

Then, I made an online course at, on Python object-oriented programming:

This is a 4-weeks course online, with a good mix of videos and practice. Useful to dig a little deeper into the Python’s objects.

Git Tutorial – Learn Git in 15 minutes.

To learn how to use GitHub, I made this nice tutorial: learn Git in 15 minutes:

I made it two or three times to be familiar with the commands. After, of course, I practiced and used Git as often as possible.

Kirk Byers – Python for network engineers

My last course on Python was the Kirk Byers free Python for network engineers, 8-weeks course. I encourage you to visit Kirk Byers’s website and also his GitHub page. There are a lot of useful resources. Kirk is doing a fantastic job for network engineers.

I loved this course! Every week, on Thursday, I received an email from Kirk including from 5 to 14 videos he made on Python, including theory and demo. Then, there are also useful resources and five to six exercises to practice what you just learned.

The course content was composed like this:

  • Week-1 – Why Python, the Python Interpreter Shell, and Strings
  • Week-2 – Numbers, Files, Lists, and Linters
  • Week-3 – Conditionals and Loops
  • Week-4 – Dictionaries, Exceptions, and Regular Expressions
  • Week-5 – Functions and the Python Debugger
  • Week-6 – Netmiko Basics
  • Week-7 – Jinja2 Basics, Introduction to YAML and JSON and Complex Data Structures
  • Week-8 – Libraries, Package Installation and Virtual Environments

A new similar and updated course is starting May 8, you can register here.

Courses including more or other topics

After these courses and tutorials focused on Python, I was looking for trainings including the next topics of my learning list. Here is what I did:

Cisco DevNet – Network Programmability Basics Video Course

In parallel with the end of Kirk’s course, I started the Cisco DevNet Network Programmability Basics Video Course. This is a 6-modules video course from Hank Preston from Cisco DevNet.

This course is totally free and very good! Each module has from 4 to 8 videos of around 30 minutes, combining theory and demo, on many network programmability topics.

Here is the content of each module:

  1. Introduction
  2. Programming Fundamentals
  3. Network Device APIs
  4. Network Controllers
  5. Application Hosting and the Network
  6. NetDevOps

Cisco DevNet

I also spent a lot of time on Cisco DevNet.

Cisco DevNet is much more than a simple website. This is a fully integrated developer program consisting of a website, an interactive developer community, developer tools, discussion forums and sandboxes. There are tons of free and useful resources on network programmability, network controllers, APIs, and so on. These people are doing an amazing job!

Here are some interesting modules I completed:

But there are many more…

Cisco Learning Network Videos

On Cisco website, there is a huge list of very good videos and webinars on Python, network automation, SDN and so on. For example:

Ansible Essentials course on Udemy

This is a two hours of very good online and official Red Hat Inc. course on, to learn the basics of Ansible for automation and configuration management. And it’s free:

Network Programmability and automation book

End of March 2018, I ordered this book, written by Jason Edelman (@jedelman8), Scott S. Lowe (@scott_lowe and Matt Oswalt (@Mierdin). 

The content of the book, by chapters, is:

  1. Network Industry Trends
  2. Network Automation
  3. Linux
  4. Learning Python in a Network Context
  5. Data Formats and Data Models
  6. Network Configuration Templates
  7. Working with Network APIs
  8. Source Control with Git
  9. Automation Tools
  10. Continuous Integration
  11. Building a Culture for Network Automation
  12. Appendix A – Advanced Networking in Linux
  13. Appendix B – Using NAPALM

The book is organized in such a way that it is not necessary to read the chapters in order. Except maybe for the first two, which are an introduction to the more technical content of the following chapters. And this is exactly what I did.

At the time of writing this post, I have not read the entire book yet, but I recommend this book to anyone who wants to start learning network automation.


Get Certified?

My goal was to learn network programmability, but, in addition, I also needed to renew my current Cisco certifications before June 2018. So, I thought about the Cisco Network Programmability Design and Implementation Specialist exam (NPDESI).

This certification is not part of the CCNA or CCNP curriculum, this is a “specialist” certification. But, as the others 300-xxx exams, it allows to renew your current CCNA/DA/NP or DP certifications.

Taking the Cisco NPDESI 300-550 course (and exam) was, for me, probably the best way to combine my current learning goals and renew my existing certs, so I signed up for the course.

Cisco NPDESI classroom training


The content of this course (V.1.0) is this:

  • Day-1: Network Programmability Fundamentals
    • Introduction to Network Programmability
    • Linux Primer for Network Engineers
    • Linux Networking
    • Python Foundations for Network Engineers
    • Writing and Troubleshooting Python Scripts
    • Python Libraries
  • Day-2: APIs and Automation Protocols
    • Introduction to Network APIs and Protocols
    • Cisco ASA REST API
    • NX-OS Programmability
    • Cisco IOS XE & IOS XR APIs
    • Securing the Management Plane
  • Day-3: Data Models
    • YANG Data Modeling
    • YANG Tools
  • Day-4: Network Controllers
    • Introduction to Controller Networking
    • OpenDaylight
    • APIC-EM
    • ACI / Application Centric Infrastructure
    • Cisco Element and Domain Managers
  • Day-5: Operations
    • Software Development Methodologies
    • Introduction to DevOps
    • Version Control
    • Automated Testing
    • Continuous Integration
    • Configuration Management and Automation Tools
My comments

The overall course content was very good, and there are many topics to see in only five days of theory and labs.

The only negative point is the course is spending too much time on some subjects, like Python basics and ACI architectures for example, and not enough on other, like the topics of the last day.

For example, on the first day, we spent the afternoon reviewing Python basics, like data-types, booleans, lists, dictionaries and loops. Can you learn Python in three or four hours? The answer is no, of course. Furthermore, basic knowledge of Python is one of the prerequisites of the course. So why did we spend four hours on this?

Same on Thursday, we spend a lot of time on Cisco ACI and APIC. It seems like Cisco is trying to promote ACI fabrics during this training.

On the other hand, Friday’s subjects were seen in a very superficial way. We saw Ansible very quickly and nothing about Jenkins for example.

But apart from that, I repeat, the course content is very complete, the student guide is very good, and there are a lot of labs.

The Cisco NPDESI 300-550 exam

End of April 2018, I took the Cisco 300-550 exam. This is a standard Cisco 90-minutes exam with  65 to 75 questions to be done at a Pearson VUE exam center.

This exam gives you the  Designing and Implementing Cisco Network Programmability specialist certification, but it is also valid to renew any CCNA and CCNP level certification.

This is a typical Cisco written exam. The questions are not all very clear and some others are not covered at all during the related course. Since the list of topics is very large, the exam is difficult. I failed my first attempt for 12 points, studied again, and passed the week after.

I am now: Cisco Network Programmability Design and Implementation Specialist

Next steps and conclusion

If I go back to the list of topics that I wrote in September of last year, I can say that I learned and practiced many of them. I have now a solid foundation to continue on this path, but I do not pretend being an expert in any of the topics below:

  • Python: able to write and debug simple scripts
  • Git and GitHub
  • JSON and XML data-structures
  • Linux networking:  I am at a network-admin level, but I must dig more into the routing and advanced networking possibilities.
  • Ansible: able to use it, but I need to practice more complex playbooks.
  • Puppet and Chef: I’ve seen the principles, nothing more.
  • Network (SDN) controllers: Seen Cisco APIC-EM, Cisco APIC (ACI), Cisco DNA-Center (SD-Access) and OpenDayLight. But almost every vendor have a network controller.
  • DevOps principles
  • Jenkins and  Travis CI: I’ve seen the principles of Jenkins and the basics of Travis CI. Need more experience on Continuous Integration.
  • Docker and other container technologies, especially the networking part: Also here, I’ve seen the basics. I need more experience on Docker and  start to learn about Kubernetes.
  • Cloud networking: I am playing with AWS since some months but I need to see more in details the advanced networking part now.

Now, I must continue practicing and experiment what I have learned during the last year, and I also have to keep learning new things.

First, I will finish to read the Network Programmability and Automation book. Then, I already scheduled many sessions related to network automation and programmability at Cisco Live US. And last but not least, I will try to use these new tools as soon as I have the opportunity in my daily work.

My conclusion: Constant learning is the key in this field.


Did you like this article? Please share it…



  1. Lawrence

    I lost of words!
    This is great.
    My journey as a network engineer just started because I just completed my first degree so I now have time to build myself so as to become a machine augmented network engineer. I am learning Python already, though still have some complications with it. But your life story has really intrigued me.
    We shall meet at the top.

  2. javier leon

    que buen contenido gracias por tomarte el tiempo de escribirlo

  3. Raquel Moreno

    This is a great article, and one I was looking for. I’m your , I’d say, classic legacy network engineer, who is now looking at next steps to putting myself in position to be able to go back out into the job hunt workforce, but with viable skills. When i say classic legacy network engineer, I’ve been at my current company 10+ yrs, and manage the network infrastructure. Our environment is pure Cisco, I do everything from first level network administration through to senior level, site rebuilds, Data Center, firewalls (traditional ASAs/ Firepower), routing (primarily BGP, OSPF), design, WAN/MPLS, VPNs, etc. But this is all what I feel is basic Network Engineering in a sense to what I see is happening with the evolving roles of being a Network Engineer. Since I’ve been at one company for so long, I’ve not put much stock in certifications, so that’s what I’m doing now, unfortunately, so I’m behind the game certification wise. I want to start arming myself with moving towards network automation, as I see that’s the trend, so this article was great for me. I was already starting to look at Python, and other areas for me to start delving in. I have a long road ahead of me, to be able to apply for some of these new jobs out there.

    • Thank you very much for your great comment Raquel! And all the best for your studies. In this area, we have never finished learning.

  4. Toral

    Hello Jerome,

    Very nice article. It is informative and helpful to the person who would like to be network programmer. I am Network engineer and would like to learn Network Automation. Would you please let me know how much depth knowledge we should have for Network programming.

    • It’s difficult to give you an answer on this question. My advice is: start small, make one or two Python tutorials, then take a look at Netmiko. Make some try with small automated tasks. Then continue to learn and practice with more and more complex tasks. And enjoy the nice results.
      I hope this answers your question.

  5. Zak Willis

    Great article! Really good insight on how you prepared for this exam. I do not think I will be able to attend the training class. Did you look or review the online training videos offered by Cisco?

    • Hi Zak,

      Thank you for your comment.
      Well, you can do a big part of the training class in self-study, for example the first day is only Python basics. Take one or two online tutorials, as I suggest in this post and that’s fine.

      Also for the data-models, you can use the Cisco DevNet online videos of Hank Preston, they are great: Cisco DevNet – Network Programmability Basics Video Course

      But, there are some topics in the course really necessary for the exam. Like the labs on the different Cisco network controllers. You need to know and practice Cisco ACI, APIC-EM and NSO. But, this should be possible mayne on Cisco dcloud or DevNet sandbox.

      Good luck for the exam!

  6. John Ramos

    Hi Jerome,

    Thanks for putting this article out, It is informative especially for guys like me who are trying to make the jump from a network engineer to a hybrid engineer (network+programmer engineer) as Cisco would like to call it but like many others, we don’t know where to start the journey. I am currently working on my CCIE DC and will surely have time to add this on my studies.

  7. Barry Mattingly

    Great article, currently using this as a blueprint to learn python, get NPDESI, and renew my NP R&S and DP.

  8. Mahmoud Ahmed

    Super Like !
    Thank you.

  9. Muhammed Salah

    That’s great and brilliant to share your learning journey moreover that would light this path to the others as evoloved networking technologies seems like dark side for most of network engineers.

    i see you didn’t mention:

    Is any of those topics was included in your provided courses/books titles ? theoretically or practically ?

    • Hi Muhammed and thank you for your comment.

      Yes, I saw and practiced Openstack, OpenDaylight, Open vSwitch and Mininet during the internal course I made last year. Unfortunately, this was an internal course, so I cannot share the student and lab workbooks.

      In the Cisco NPDESI course, there is a chapter about DevOps, software development methodologies and Agile.

      Hope this may help.
      Best Rgds,

Leave a Reply

Your email address will not be published. Required fields are marked *