Will Network Engineers Become Programmers?

I know numerous engineers who decided to pursue a career in networking because they didn’t want to deep-dive into programming. Will that change when the Software Defined Everything takes over the world?

TL&DR summary: Of course not.

Making a networking expert a reluctant (and potentially bad) programmer makes as much sense as over-promoting him and making him a suboptimal boss (some people, myself included, just aren’t good at managing others).

If you need a custom-tailored network automation solution, pair a networking expert (who knows what needs to be done) with someone with programming skills who can translate those needs into running code – the networking expert becomes just another subject-matter expert (SME) working with the programmers to document the business needs (of networking department).

Will the networking expert become part of the programming team? It depends. For large projects it probably makes sense to embed experts with networking skills into programming teams, for longer-term low-intensity development projects you might add a programmer or two to your networking team, or merge development and operations.

Regardless of the approach you take, remember that you should treat the network automation tools like any other mission-critical application – the network automation requirements have to be properly documented, the project prioritized, and executed using the regular project management and quality assurance tools to ensure you get what you asked for in reasonable timeframe (internal IT projects tend to stay in indefinite limbo as everyone works on more important immediate problems).

On the other hand, if you’re a generalist working in a small shop, then it’s high time you get acquainted with the automation tools, and learn a bit of programming – once you master scripting, your life becomes easier on multiple fronts, including desktops, servers, operating systems, virtualization, and eventually networking.

Jason Edelman published a blog post focusing on the same dilemma a few days ago. Definitely worth reading.

9 comments:

  1. Though network engineers need not learn to program in the language of
    the machine (c, c++), I guess it will be useful to program in the language of the
    domain that provides high-level objects and APIs specific to the domain (python as of
    today).

    Another interesting recent trend seen especially in the datacenter world is where network engineers are themselves adding features onto network boxes that allow them to do so, using very minimal programming effort.
    https://www.nanog.org/sites/default/files/wednesday_general_field_openrouter_39.pdf

    --
    -Thejas

    ReplyDelete
  2. Ivan, thanks for the mention. You bring up good points on being a generalist at a small shop or embedding experts at the larger shops, etc. On a related note, Najam Ahmad (Facebook) recently talked about what they are doing these days and mentioned they are doing internal pairing between teams, essentially pairing up a network engineer with a software developer to better understand what each does and to ensure there is some level of cross-training going on. And of course, it helps the network engineer articulate requirements better too. It's also worth noting they have a dedicated software team for networking! Different size, diff requirements, and you paint a good picture for the Enterprise to Commercial segments.

    ReplyDelete
  3. There is a symmetric question - will programmers become the network engineers ;)

    ReplyDelete
    Replies
    1. They should - at least to a CCNA-like level (without the router configs and other garbage, of course).

      Delete
    2. Petr: For hiring, we look for good programmers first, that have at least minimum understanding of networking. We think, that should be ok, as their mindset allows them to learn network engineering topics fast.
      Just think of the abstractions of OpenFlow, or the OpenDaylight northbound API. They do that for breakfast...

      Delete
  4. We already are programmers and have always been. The languages we speak are IPv4, IPv6, OSPF, IS-IS, MP-BGP, MPLS, Cisco IOS variants, Junos, the list goes on; basically all the cool stuff that actually moves data from box to box around the web. Networks have always been "software defined." Will some abstraction layer swallow us all up? Perhaps someday, but Openflow and ACI/OnePK/whateverCiscoiscallingit have yet to show me anything that makes me fear becoming obsolete.

    ReplyDelete
    Replies
    1. The only language you've highlighted is Cisco's proprietary IOS, hence not much use to you outside of an all Cisco environment, everything else you mention appears to be a 'protocol' many of which are dynamic in nature. So while you are right that networks have always been defined by software, you've missed the point behind Open Networks.

      Delete
  5. I agree with Jeff, in one manner the IOS or various network OS's of our platforms are the scripting languages. I used to do some ASAM or C level libnet network related programming but for special cases. I agree that mastering a scripting language does help as I am working on python myself. We also do work with automation tools in some ways, the Cisco works, prime, or IPAM systems etc. We have to know protocols cold, the specs and standards which when teamed with a solid coder provides great value. I remember when the snmp revolution was suppose to automate and control everything but you can do so much with ASN. And I second Jeff's last sentence for us experienced veterans we learned one major important, evaluate, wait and select what NOT to learn.

    Example, I didn't bother with ATM outside of certification knowledge or one or 2 installs but that was it. remember when ATM was going to take over the world...

    So I will read up on it, maybe play a bit with OF but not dive into it until things settle down, mature a bit.

    ReplyDelete
  6. I come from the other side. I'm a programmer who works on network related software. Agree we need to also learn networking. Your comment "at least to a CCNA-like level (without the router configs and other garbage, of course)" seems like a good balance. Also info sources like your blog are a big help.

    ReplyDelete

You don't have to log in to post a comment, but please do provide your real name/URL. Anonymous comments might get deleted.

Ivan Pepelnjak, CCIE#1354, is the chief technology advisor for NIL Data Communications. He has been designing and implementing large-scale data communications networks as well as teaching and writing books about advanced technologies since 1990. See his full profile, contact him or follow @ioshints on Twitter.