The rise of Software Defined Networking has led to a steady stream of emails from network engineers asking whether they need to learn to programming in the future. After consideration, I currently think that the answer is mostly no but some percentage of networking people will gain and use specific programming skills for good business outcomes. You need to decide where you want to be.
Early SDN Will Be Rough
The early versions of SDN products from vendors are going to be incomplete, buggy or just not have features that you need. Like any new technology product today, vendors are getting the minimum viable product out the door and looking for “customer feedback” to “input into the development cycle” (you might think they understand what customers want but apparently not).
This isn’t a criticism but a simple reality that is proven over and over.
Older, more cynical engineers will be well aware that “rushing out the door” means buggy, hard to install, manual upgrades and significant lack of features. I’ve been installing and operating “network management platforms” for a decade or so and the server & software administration skills I learned in the late 90’s have been very useful. Most people agree that “network management” applications have been universally poor quality for a long time and require some amount of customisation via scripts to become useful.
Programming Skills in Two Parts
I consider that there are two parts to having programming skills. The first part is obviously to be able write code that can take inputs, munge the results and display an output. This is a specific skill and discipline.
The second element of programming is simpler – it’s a deeper understanding of how technology operates or more specifically, how a computer application works. Many people toss around verbal barbs about “just develop a feature” or “why can’t they do that, it looks easy” and once you have done some programming you gain insight into the complexity of that process and how hard it is to develop good software.
If you spend time writing software you will gain insights into the underlying challenges of code quality that means most software from big companies is of such poor quality and that good quality can be unevenly spread throughout the organisation itself. A company might have one or two good pieces of software and, at the same time, dozens of acutely poor quality which is perfectly normal for corporate programming teams (lets leave startups & recent Internet companies out of this debate for now).
Time and Money
The challenge of programming is to make it valuable and worthwhile. There are good business reasons why large companies don’t write their own software anymore. Writing software is expensive, hard to manage during the development cycle and even harder to maintain in the years ahead. The financial model rewards a write once, use by many business model. If that is true, is there any value in learning programming ?
Look at VMware & Microsoft
It is practical to make a strong comparison with the skills that are used in server administration. The majority of VMware and Windows administrators will manage their systems using a graphical console that is provided by the vendor. Almost all functionality contained in the application is presented in that console and many, if not most, organisations can derive value from the software with the simplest use cases that are easily managed by a GUI.
And just a few engineers will learn and develop skills around software tools like Powershell and master the ability to create small programming projects that provide a specific feature or function. This is more commonly called scripting instead of programming.
The EtherealMind View
I have a personal view that all network engineers should learn to program to gain insight into the applications and systems that are our customers. Lets face it, applications are the direct customers of the network.
The SDN platforms will provide interfaces that we can use to deliver network services. From what I can see of products today, the primary interface will be delivered via HTML using a web browser.
And a very small number of network engineers will develop skills in a programming language, be it scripting or a complete structured language like Java. They be able to build a unique solution that add features or functions to an SDN controller or application. This will happen a lot in the first version and will diminish over time as the applications mature and features increase coverage for more use cases.
Overall, it seems most likely that the majority of networkers will never program anything, some will develop skills to use and apply small snippets of code from blogs and vendor support.