Sabtu, 30 Januari 2016

Programming: An Essential Skill For Network Engineers

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.

Comments

Languages Of Choice?
Other than Python (given your admitted vested interest!), what other language or languages should programmers learn today?
Re: Languages Of Choice?
I'm also interested in hearing what Kirk has to say about other languages. Python is the one that seems to come up most often in the context of networking; I've also heard Java mentioned.
Re: Languages Of Choice?
I am a telecommunications tranmission engineer. I have a little knowledge of java and I will like to know which programming language will be beneficial to me. thanks
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.
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!
Re: Languages Of Choice?
For Network Engineers, I recommend that you become somewhat proficient in one language (as opposed to trying to learn several).  For that language, I would choose something that is high-level and that has a large active community (and consequently has a broad set of libraries available).  I would also probably pick a language where you can start being productive with it pretty quickly.  For these reasons, I think Ruby and Python are good choices.  
Re: Languages Of Choice?
@Ktbyers    Agreed.  I think most network engineers would be best served by Python and maybe C as well depending on the environment.
Re: Languages Of Choice?
JavaScript. But I like Python better.
Engineers Take Heed: Time to Program
An excellent and timely subject for sure.   And I could not agree more with the message.  Engineers need to be able to program or at least understand code when they come across it.   I have been an engineer for years and at no time do I take the idea of improving my programming skills more importantly than I do now.
I am working like crazy to make up for years of mis-guided effort.  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.

Ultimately I may just program mainly, but first things first - I have to learn how.
Re: Engineers Take Heed: Time to Program
Technocrati, thanks for weighing in on this topic -- it sounds like you feel pretty strongly about it. If you don't mind, would you share what made you decide to learn three programming languages all at once?
Re: Engineers Take Heed: Time to Program
Hi Susan,    Sure, it comes from years of working as an engineer and really having nothing to show for it. I am approaching mid-career and I have to ask myself, do I want to do this in my golden years ? The answer is No.   Do I have more to offer the World ?   The answer is Yes.
I should have done this years ago, but engineering became a comfort zone coupled with bosses who for the most part worked against my aims.
Now, I am ready to take my fate into my own hands, if I have to work ( which I will) I will write code.   And I can't learn it fast enough.

My particuliar industry uses all three to some extent so I need to come up to speed on all of them.   Might be a tall task for some, but a necessary evil for me.
Re: Engineers Take Heed: Time to Program
Technocrati, thanks for your candid answer. I think a lot of us have run into similar situations, where our industries are changing dramatically and you come to a point where you really need to shift gears in order to keep growing. I think people like you, with an engineering and programming background, will be in high demand, so you are wise to educate yourself.
Kirk will be writing more blogs here on Network Computing, so please come back and let us know how your journey is shaping up :)
Re: Engineers Take Heed: Time to Program
@Susan     Thank you for your kind words of encouragement. I do believe I am in a decent position for the future but of course, the final mile is always the toughest.
And I surly will keep my eye out for more of Kirks' work as well as others here at Network Computing.   And I will let you know how the quest is going. : )
Have a great day and thanks again ! : )
Re: Engineers Take Heed: Time to Program
First if a network engineer needs to use a General Purpose Programing language for configuration of a router/switch/loadbalancer/firewall etc or even create network based app.
THEY MUST BEGIN WITH C, to get a strong foundation. Without this, just forget it. You will not be a strong programmer.  Many advocate that C is not required including Brajne Stroustrope, dont listent to him and one can jump direct to OOP, many a times they are like CCIE certified with CCNA knowedge.
Please learn C and UNIX Internals. Thats the trick to mastering C. Do not skip pointers in C. Without mastering pointers, there is no use of learning C, just learn FOTRAN which can do all what C can do except Pointers/anon acccess
 Then they must progress to OOPS/OOAD concepts and master the concepts.. Once C is completed and OOPS concepts are understoond, you can progress to Core Java coding and/or Python C++ simultaneous.
Once C , C++ and Core+Adv Java is understood. Then any programming langauage is easy.
Think C as the N+ and CCNA which are the fundamentals.
DO NOT DIRECTLY JUMP TO JAVA or PYTHON, albeit you can and many do and are also encouraged. Do not listen to them.
Appears hard, but really not. I am Network Architect 2xCCIE. Trust me programming is much easier and systems programming is easier too.
Many ask which is the one best programming lang to learn. Should I do C or can I directly learn Java, python or C#. Sorry must build your foundataion from C, dont worry you dont need to learn any assembly languages. Just the C compilation knowledge will make you understand assembly code.
Maybe for IoT, for the embedded devices you need to understand the assembly code but there is  usually  a C or CPP complier designed for it. Some parts which C cannot program, just get the intermediate file which is complation process produces and add the small piece of code of the assembly and send it to LD/linking loading for the complete program.  Also many still use C for embeded devices since its super fast and compact.  C++ is also popular with lots of bound checks and intelligent compliers. However C is still used.
But for network enterprise app, you would typically use Java/Python since its easier for larger programs due to objet oriented approach. Only realtime sys app use C,C++ or assembly.
 Learn atleast 3 languages C/C++, Java, Python . Not to forget databases.  
Re: Engineers Take Heed: Time to Program
Sam,

Interesting Post.---i'm pretty new to the field ( 3-1/2 yrs) with a CCNP ( route/switch)-...currently working on the CCNA-Voice because of my current job. I figured that Engineers would need to step-up and learn skills outside of their-"Box"...so I've been looking everywhere for advise on how to start programming ( what to learn ,first); and so many people stated to start with Java and or Python ...and to pretty much forget about C, but not really saying why???? I actually remember reading a comment someone made stating that C is "Pretty Much obsolete"
--Pardon my ignorance, i know nothing about programming... but is that true??.----Anyway... you were the FIRST person that stated to Start with C in order build a foundation...completely against what the masses say ; and provided to what seemed like a valid  explanation. I dunno about anyone else but to me, that says-something.
---Since i'm new to programming and pretty much all languages look the same to me..( DIFFICULT)..i'm also very thankful that you compared the C-language with N+ / CCNA.---I didn't want to start at a level that i wasn't' ready for; I've seen so many ppl skip the "101-courses" for a given-topic and struggle because the foundation is no where to be found.--thanks again.

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!
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
Programming Advice
Hello Kirk,
I am a transmission planning engineer for a telecommunications network. I will like to get some advice on which programming language will be useful to me. I have a little experience with java.
Programming: An Essential Skill For Network Engineers
Hello to all,
@ Kirk, great article.Thanks.
Programming skill was always good for a network engineer, I would say mandatory  for the success in his job. A network engineer in a task of defining a network design  for a company should consider the softs that will be used on the network and there have a good background in software development is a plus.
This is also true  in telecom domain, when we talking about design, optimization on the radio interface, some applications installed on smartphones make mostly what we call "push"   (queries update for example --) which consume  resources and has a significant impact on network performance. We consider this during development work on the radio interface; without knownledge in app soft dev, i think poor design or inadequate parameters settings can be found.
Programming: An Essential Skill For Network Engineers
Also, in the case of software dev project that must run on a  network computing or Telecom net, a network engineer with a good skill in programming could  be suitable for  this job, for example when talking about IN -Intelligent Network, VAS - Value Added Services , ..

I have a friend (telecom & Network Engineer) who works for an IT solutions integrator, he told me that, the corporate give him most soft dev project which must operate on  network, because of his high skill in programming -- he is able to write the code according to the network caracteristics.  A Network engineer with strong  programming skill gets more opportunities!
Programming: An Essential Skill For Network Engineers
Also, in the case of software dev project that must run on a  network computing or Telecom net, a network engineer with a good skill in programming could  be suitable for  this job, for example when talking about IN -Intelligent Network, VAS - Value Added Services , ..

I have a friend (telecom & Network Engineer) who works for an IT solutions integrator, he told me that, the corporate give him almost all soft dev project which must operate on a  network, because of his high skill in programming -- he is able to write the code according to the network caracteristics.  A Network engineer with strong  programming skill gets more opportunities!
Programming: An Essential Skill For Network Engineers
Personally, I've always practiced several software development languages  (web, scripting, programming, --  C,C++,C#,WPF,JSE,JEE,Android,JavaScript,HTML/CSS,PHP,TCL,VBA,VBS,Batch, Bash,PS,JavaFx,.....) and i see its importance when i configure network equipments via the CLI or when i manage systems or when i  make a network design -- and also gives me more assurance  with the advent of SDN.
Special emphasis should now be given to the "Software Development" module in the training program of network engineers (at school).
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.
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...
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.

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? 
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.
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.

Tidak ada komentar:

Posting Komentar