Data centers

09:06 AM
Kirk Byers
Kirk Byers
Commentary
Connect Directly
Twitter
LinkedIn
Google+
RSS
E-Mail
50%
50%

Programming: An Essential Skill For Network Engineers

As software takes over the networking discipline, engineers who don't learn to code a general-purpose programming language will be left behind.

I'm going to start off with a disclaimer: I teach Python courses to network engineers, so I have a vested interest in programming. Nonetheless, I regard the following as true.

In 2011, Marc Andreessen wrote an article called "Why Software is Eating the World" (subscription required). In it, he predicted:

    Companies in every industry need to assume that a software revolution is coming. This includes even industries that are software-based today. Great incumbent software companies like Oracle and Microsoft are increasingly threatened with irrelevance by new software offerings...

    In some industries, particularly those with a heavy real-world component such as oil and gas, the software revolution is primarily an opportunity for incumbents. But in many industries, new software ideas will result in the rise of new Silicon Valley-style start-ups that invade existing industries with impunity. Over the next 10 years, the battles between incumbents and software-powered insurgents will be epic.

During the last few years, we have seen the rise of software-defined networking. Cisco has launched both its onePK API and its Application Centric Infrastructure, and VMware has countered with its NSX overlay-underlay networking model. Network engineers are increasingly using DevOps tools like Ansible, Puppet, and Chef. Additionally, Amazon Web Services, OpenStack, and other software platforms are making the software-defined data center a reality. Finally, white-box switches have the potential to standardize and commoditize networking hardware.

Networking has joined the software-eating-the-world buffet
But what do all these changes imply for network engineers? Is it all business as usual, and do we just need to continue pounding on our CLI? Or is this a fundamental change in the networking industry?

I think that it is a fundamental shift, and that programming skills will be increasingly important for network engineers.

Many of us have seen the great advances that server engineers have made in automating their environments; network engineers need to keep pace. But in order to keep pace, we need better methods of programmatically controlling equipment, better tools, and an increased use of network virtualization. Network engineers also need programming skills to use the new tools and the new programmatic access.

Now, I am not saying that you need to be Linus Torvalds or Guido van Rossum, but you must be fairly proficient in a general-purpose programming language. (Python and Ruby are good choices.) You need to add this important skill to your tool belt.

For many of you, this is not entirely new. Lots of network engineers have known how to program for years and years. Network engineers have been hacking together shell, Perl, and Python scripts for quite a while. But the requirements of network engineering and the job market are now requiring more -- more network engineers with programming skills and a broader and deeper understanding of programming.

Obviously, not all network engineers need to learn to program, but it is a valuable skill to have (and will be increasingly so). There are certain jobs, roles, and companies that will be immune to this, but for many of you, it's in your interest to acquire or improve programming skills.

But can't I just use the tools other people create for me?
Yes, but if these are DevOps tools like Ansible, Puppet, and Chef, then these tools themselves have numerous programming constructs built into them. For example, Ansible has lists, dictionaries, loops, and conditionals. It actually has multiple forms of these, if you consider both the main script (the playbook) and templates. Additionally, if you want to be proficient at automating tasks in your environment, you will need to write your own glue scripts and potentially add your own code to DevOps tools. These tasks require programming skills.

But can't I just buy a large network controller with a GUI that does all this for me?
I am sure vendors will be happy to sell you a very large, very expensive network management package. However, this hasn't worked very well in the past. If a vendor could accomplish this on a broad scale, that would be great.

Additionally, many of the large management programs will result in increased network virtualization (VMware NSX, OpenStack), including virtual switches, virtual routers, virtual firewalls, and virtual load balancers. These virtual network devices can be created, configured, and destroyed programmatically.

Finally, a management program would still need to integrate into your environment and workflow. This integration would often involve programming.

But can't I just think like a programmer?
Learning and doing are closely related. I doubt that you will be able to reasonably understand programming practices without learning how to program (at least to a certain extent).

By all means, use tools. Find the best tools you can. But one of these tools should be a general-purpose programming language.

Time will tell if I am right or not -- making predictions about the future is a dangerous game. If programming skills are important for network engineers, then they will allow you do your job significantly better, and your market value will increase. The evidence I see so far indicates that these skills are important, and that they will be even more important in the future.

As the owner of Twin Bridges Technology, a bootstrapped technology business in San Francisco, Kirk teaches Python courses for network engineers and writes about network automation at pynet.twb-tech.com. He is a long-time network engineer himself (CCIE #6243), has extensive ... View Full Bio
Comment  | 
Print  | 
More Insights
Comments
Newest First  |  Oldest First  |  Threaded View
Page 1 / 3   >   >>
ktbyers
50%
50%
ktbyers,
User Rank: Apprentice
9/2/2014 | 5:19:47 PM
Re: Scripting versus Programming
I agree with John on the learning one language versus multiple languages issue (for network engineers)--I think you are better off learning one language.  There is only so much time in the day, and you are generally better off expanding your skills in a single language (as opposed to spreading yourself across multiple languages).

On scripting versus programming...some of this comes down to definition of terms.  I view scripting as being a subset of programming.  My definition of scripting would be a type of programming whereby you are writing small self-contained programs that accomplish specific needed tasks.

I agree, however, that writing scripts is not new for many good network engineers.  That many network engineers have been doing this for a long time.

I don't think it is all that worthwhile of talking about whether network engineers are programmers or not.  It is more important to ask what skills you need to do your job well and how much programming that entails (if any).

There also has been some recent discussions on whether "scripting" scales or not (Greg Ferro had a recent article on this).  Personally, I don't think this is a good way to frame the issue. We know programming scales...so a more useful question is what characteristics do you need to have to make your programming scale (or to make your programs maintainable).  This is more valuable than saying a certain type of programming doesn't scale.

I also agree with John that migration periods take a long time...i.e. the old methods are not going away anytime soon.  These kinds of transistions are going to play out over many many years.  I also don't necessarily see it as an either-or function (i.e. programming or CLI); I view of it more of an 'and' function (programming and CLI).  Just as the rise of automation in the server world has not eliminated the 'bash' shell.

 
Jerome Amon
50%
50%
Jerome Amon,
User Rank: Ninja
8/29/2014 | 7:05:18 PM
Re: Engineers Take Heed: Time to Program
Hello,

@ jgherbert, good, i think it's clear now that  network engineer need also to have skill in soft programming in order to survive! but now, don't you think that soft developper need also to renew their skills into networking?

Learn many programming languages is very good and could help because you can choose the appropriate for a specific task based on some criteria (number of code to write, power, platform supported, ...)

But i believe that fundemental in order to be confortable is to learn the differents concepts of programming, developp algorithms reflex , modeling methods ... Doing this will help when learning the language. For a task, have a program writen in Python and another into C, your understanding of programming concept will help you in the structure.

thanks

 
jgherbert
50%
50%
jgherbert,
User Rank: Ninja
8/27/2014 | 9:41:28 PM
Re: Scripting versus Programming
I suspect that as with most things, there will be opportunities to apply scripting/programming skills at a variety of levels. There's no question though that the more understanding you have of programming logic, the easier you're likely to find the next generation data centers. Of course, not everybody's going to adopt that new paradigm, and even for those that do, there's going to be a fairly long migration period until all our "old" (i.e. current) methods are pushed out the window.
MarciaNWC
50%
50%
MarciaNWC,
User Rank: Strategist
8/27/2014 | 12:15:55 PM
Re: Scripting versus Programming
Good point John. It seems like the term programming is used pretty generally. Looking ahead, do you see things changing in terms of networking pros needing to go beyond scripting? 
jgherbert
50%
50%
jgherbert,
User Rank: Ninja
8/26/2014 | 10:07:34 PM
Scripting versus Programming
One thing that I think is often confused - or at least glosed over - when this subject comes up is the difference between Scripting and Programming.

I am a scripter. I might use Python, Perl, bash, VB.Net or something else, but the fact remains that I do not consider myself to be a programmer. I don't want to have a career as a programmer; if I did, I'd have chosen that career earlier in life. What I do want though is the ability to automate tasks, or at least to understand the mechanisms and algorithms necessary to automate. The ability to write scripts to automate processing, analysis of data, querying of switches and so forth has been essential to my job as a network engineer for many years, and now that network devices are offering some more computer-friendly non-screen-scraping interfaces to us, my ability to script now includes the ability to more reliably and effectively manipulate those devices. Hoorah.

Does that make me NetOps? I dunno.

 

 
jgherbert
50%
50%
jgherbert,
User Rank: Ninja
8/26/2014 | 10:00:12 PM
Re: Software engineer & Cloud computing
"I also believe that, it's now a need for a software developer,  to have a very strong skill into network computing  -- Having regard to the furture of cloud computing."

 

This has been the case for many years now; software developers have needed an understanding of the network on which their software will run - and that was before the cloud was even a thing. Many a good application has been ruined by testing it exclusively on a LAN. It is though even more critical now than it ever was...
jgherbert
50%
50%
jgherbert,
User Rank: Ninja
8/26/2014 | 9:52:59 PM
Re: Engineers Take Heed: Time to Program
"I am learning C#, C and Python currently and my goal is to be proficient in all of the above by the end of the year."

 

You're brave! Seems like you could get the same effect by just sticking forks in your head for a few hours... ;-) My vote would be to try and pick one language and get good at it, rather than spreading your effort (and focus) across multiples. But perhaps that's just me!

 
Jerome Amon
50%
50%
Jerome Amon,
User Rank: Ninja
8/16/2014 | 4:36:43 PM
Re: Languages Of Choice?
So, what i can suggest you, is to  increase upon your skills in java, learn and pratice C/C++, python, ruby, perl -- if i must propose high level languages; but notice that it also depends  of the vendor, so try to get more information about their SDN solution. (what are the suitable programming languages  to program their equipments)
And, work generally to increase upon your algorithms skill.
Please, try also this link : http://yuba.stanford.edu/~casado/of-sw.html

Thanks!
Jerome Amon
50%
50%
Jerome Amon,
User Rank: Ninja
8/16/2014 | 4:32:32 PM
Re: Languages Of Choice?
hello Calbert234,
In my job, we often work with  transmission team, and i've remarked how SDN will impact  this part of telecom network, more and more telecom vendors propose SDN solutions.

When we see how the number of BTS, NodeB, eNodeB... increase quickly, how the traffic flow coming from many technologies (xdsl,fr,atm,mpls,vpls,wimax,2G,3G,4G...) increase, backhaul all that with some constraints or propose a transmission path  become more and more complex.
Jerome Amon
50%
50%
Jerome Amon,
User Rank: Ninja
8/15/2014 | 8:53:41 PM
Software engineer & Cloud computing
I also believe that, it's now a need for a software developer,  to have a very strong skill into network computing  -- Having regard to the furture of cloud computing.
Page 1 / 3   >   >>
Cartoon
Slideshows
Audio Interviews
Archived Audio Interviews
Jeremy Schulman, founder of Schprockits, a network automation startup operating in stealth mode, joins us to explore whether networking professionals all need to learn programming in order to remain employed.
White Papers
Register for Network Computing Newsletters
Current Issue
2014 Private Cloud Survey
2014 Private Cloud Survey
Respondents are on a roll: 53% brought their private clouds from concept to production in less than one year, and 60% ­extend their clouds across multiple datacenters. But expertise is scarce, with 51% saying acquiring skilled employees is a roadblock.
Video
Twitter Feed