Ruminations on Software Programming

Soft­ware pro­gram­ming is a chal­leng­ing endeavor. I know, because it’s how I started my career, and it’s still some­thing I do for fun and to keep my net­work engi­neer­ing skills sharp. Writ­ing soft­ware is also very tedious, which is why I quickly moved on to other things and now haven’t writ­ten code pro­fes­sion­ally for over 18 years or so. It takes a par­tic­u­lar kind of per­son who wants to really learn the syn­tax and thought process needed to be truly skilled at coding.

It is also a par­tic­u­lar type of per­son who wants to know the level of detail in how a large-scale net­work oper­ates. Most IT pro­fes­sion­als are con­tent to know the basics of networking—enough to do their day jobs—and leave the hard-core net­work knowl­edge to that spe­cial sort of masochist breed known as net­work engi­neers. The hard­core net­work folks who are obsessed with per­for­mance tun­ing even the small­est details of how pack­ets move around and between dat­a­cen­ters, the intri­cate dif­fer­ences between rout­ing pro­to­cols, tun­nels, under­lays and over­lays, and bit-twiddling for fun and profit.

In the past, those two sides of what I’ll loosely call the IT world have typ­i­cally been dif­fer­ent func­tions. The soft­ware types write the code for the sys­tems, the sys­tems peo­ple deliver the ser­vices, and the net­work folks tie it all together. From the out­siders’ point of view look­ing in, we’re all “com­puter nerds” and any dif­fer­ences between us are largely seman­tic at best. But peel back the vale and you’ll see that we’ve all decamped to our respec­tive cor­ners of the play­room and started our own lit­tle fiefdoms.

To hear some tell the tale the loose alliances and unsteady truces that have kept us func­tion­ing for so long are about to col­lapse under the weight of a new tech­nol­ogy par­a­digm: Soft­ware Defined Net­work­ing. While I hope the cur­rent crop of shrill screeds about net­work engi­neers dying off if they don’t learn to pro­gram will slowly start to fade away as the real­ity of things sets in, I’m not hold­ing my breath. SDN brings changes to the play­room of IT, for sure, but as I’ve writ­ten many times before, it is incre­men­tal, not wholly dis­rup­tive, change that’s com­ing on the back of SDN.

We only have to look to the changes that have hap­pened in the sys­tems space over the last 8–10 years or so to see what the future looks like. When the first wave of sys­tem vir­tu­al­iza­tion started to make inroads, there was a tremen­dous amount of push­back from all cor­ners of the IT estab­lish­ment. Ven­dors refus­ing to sup­port any­thing installed on a vir­tu­al­ized OS was the norm, and there were all sorts of opined pieces float­ing around the trade mag­a­zine cir­cuit, bemoan­ing the death of the sys­tems and appli­ca­tions folks.

In this brave new vir­tu­al­ized world, so went the rea­son­ing, there would be no need for sys­tems admin­is­tra­tors. They would all go away in favor of this new spe­cialty. In real­ity what hap­pened was that the sys­tems peo­ple kept right on doing what they’d always done, which was to learn the new tech­nol­ogy… incre­men­tal change pre­vailed. Now any self-respecting sys­tems admin knows and under­stands at least one hyper­vi­sor sys­tem at a pretty solid level. The tools changed, the par­a­digm shifted, and the sys­tems admin­is­tra­tors changed in parallel.

Did every­one sud­denly become soft­ware pro­gram­mers? Nope. They just kept on adapt­ing with the times and instead of using the tools they had been using, or per­haps in addi­tion to those tools, they started using new tools like Microsoft’s Pow­er­Shell. Now most big appli­ances in the sys­tems world are acces­si­ble via Pow­er­Shell com­mands and the sys­tems peo­ple can do more than ever. In fact, they can do it more quickly and accu­rately than in years past.

The same thing is going to hap­pen on the net­work side. Instead of being con­fined to a pre-built OS, pur­pose built for one device, we’ll be able to access all of our devices using var­i­ous new meth­ods. Some of us will use off-the shelf solu­tions wrapped up as man­age­ment packages—does any­one doubt that the big-boys of the net­work world will come out with soft­ware for SDN con­trollers that is pre-built, pre-packaged, and ready to use with no pro­gram­ming knowl­edge required? Oth­ers will use more advanced tech­niques and script our own tools to do spe­cial­ized tasks as we need.

Given the changes com­ing in the next few years, I will say that any net­work engi­neers out there who haven’t been exposed to basic pro­gram­ming pre­cepts; things like loops and basic logic flow, algo­rithms, and gen­er­al­ized prob­lem solv­ing using a programming-like syn­tax, should prob­a­bly pick up a book and start play­ing around a lit­tle. Pow­er­Shell is a good place to start, as would Unix shell script­ing (start with bash), but if you really want to learn a pro­gram­ming lan­guage, and you want some­thing that will be use­ful in the net­work­ing world over the next few years, I’d highly rec­om­mend start­ing with Python. It’s easy to learn, easy to use, easy to get things done, and you get some imme­di­ate grat­i­fi­ca­tion. Also, out­side of pure script­ing lan­guages, Python really seems to be where every­one seems to be coa­lesc­ing when it comes to SDN con­trollers and APIs for net­work pro­gram­ming. Jen­nifer Rex­ford writes about the Fre­netic Project and Pyretic in this arti­cle at Tech Tar­get and it is well worth a read.

At the end of the day, the IT game is one where the rules are always chang­ing, the skillsets always evolv­ing, and quite hon­estly if you’re still doing the same thing you learned 5 years ago you’re already behind the curve. SDN may shake up the world of net­work engi­neer­ing in a way we haven’t seen in a while, but it is noth­ing more than the con­tin­ued march of progress. If you’re not read­ing at least one whitepa­per or book on a new tech­nol­ogy at all times, I per­son­ally don’t see how you’ve stayed in the game this long. SDN is just more of the same. Adapt or quit now.

Soft­ware pro­gram­ming is always going to be a spe­cial­ized skillset, as is net­work engineering—at least at the high­est lev­els. That doesn’t mean that you shouldn’t embrace the com­ing change and learn to play with the kids on the other side of the play­room a bit, though. If you ven­ture over to the other side, you might find that some of the toys they have are the miss­ing pieces from your play set, and that you have more in com­mon with one another than you orig­i­nally thought.