I'm often asked variants of "What language would you recommend when getting started with Network Automation and how would you get started?
As with most things in IT, the answer requires context.
In general, right now I would still pick Python. Go is getting popular but still can’t compete with the huge body for work and modules and examples available for Python.
Before getting to some suggestions on how I would start learning Python if I had it to do over, let me mention that there are other ways to get started with automation that also involve learning "new syntax" but may seem simpler (at first). Ansible and other automation frameworks use Domain Specific Language (DSL) which may be simpler to learn if you are doing very basic things or things that have examples in the "Global Data Store" more commonly known as Google & the Internet!
So if you are new to programming you may want to start with Ansible…lets you do lots of basic automation with more of an abstracted language. All of the resources I mention below also have Ansible training. Try to get one that is recent and geared towards networking as many Ansible courses are geared towards servers and while useful, you will wind up spending more time ramping up.
All roads lead to Python today
Having said that, once you start trying to do more complex things you may run into limitations or issues where some Python knowledge would be useful. Ansible is written in Python. Also, if you are new to linux, then while you may have saved some time with Ansible, you will need to invest some time figuring out how to get around in Linux as the Ansible control host runs on Linux and its variants but there are many other reasons why being conversant with Linux as a network engineer is important.
If you are serious about "upgrading" your skill set as a network engineer make sure you are somewhat comfortable with Linux basics and, while Ansible can get you going with some simple immediate tasks you may need to do for work, get started with Python as soon as you can.
If you are not comfortable moving around in Linux, David Bombal has an excellent intro on YouTube which explains why its an important skill to have and his full course is available via various training options.
Linux for Network Engineers: You need to learn Linux! (Prt 1) Demo of Cisco 9k, Arista EOS & Cumulus
One more point. In the interest of getting you productive as quickly as possible, I have built a series of Docker images that provide an Ansible control server as well as a python programing environment with many of the modules network engineers tend to use.
So back to the question at hand:
Step 1 (Investment: Time)
I would start with Kurt Byers free Learning Python course.
Note: I have no affiliation with him or his company but he speaks to Network Engineers better than anyone I’ve seen and it is an on-line course of recorded lessons (with a lab), one lesson a week, so from a time perspective is very easy to “consume” his course while still having an opportunity to interact and ask questions. The course with the community forum is well worth the additional cost. You will make new acquaintances who are interested in what you are doing and you sometimes run into old friends.
I would also start going through the coursework available for free on DevNet (requires an account).
- Introduction to DevNet <- Start here
- Pick a Learning Track like IOS-XE Programmability or NX-OS Programmability
- Keep going..there is some terrific content there that should keep you out of trouble for some time.
Intermission (Investment: Time)
Pick a small task and get it working. This step is essential and will help focus your next step.
Spend time working with complex data structures, YAML, and JSON. See my post on "Decomposing Data Structures".
Step 2 (Investment: Time & Money)
Your next step can take you along various paths. All of these are paid courses and can be done on demand or in a class. There are many options here but I'm listing the options with which I have first hand experience.
I really recommend Kurt Byers Python for Network Engineers course. I've taken it several times!! 😀 . You have a lesson a week and this is taught by a Network Engineer for Network Engineers!
I’m also a BIG fan of Udemy and they have some very good courses as well at very reasonable price points. Always listen to the free examples and always check the dates before you purchase. Make sure you find out if the Python course is using Python3 as there are many courses there which use Python 2 and if you are just staring, please start with Python3.!
These courses are at a nominal cost, self-paced but, again, make sure you get a current one that is Python 3.
Sign up for an INE course. These guys are also very good and more self-paced but a bit more costly.
- Python 101 for Network Engineers
- Practical Python for Network Engineers
- Look around for more content...lots of good stuff
The Network to Code guys have great content in a more formalized setting where you can go for a week.
Note: I have taught for these guys so I do have a loose affiliation which does not lessen the point that they have terrific content.