Thursday, June 25, 2020

Programmability - what's it all about?

These past few weeks have been very busy for me with work. I got into my groove at work with my new topic of network programmability.

Well, to start with the word programmability - what's it all about? It's about making something programmable, that is for something to be capable of being programmed. So what is being programmed or a program, really? It is a plan of action to a specific end, and a schedule of procedures to be followed.

Most people are familiar with computer programming and writing code. But when you think of networks and making them programmable, it is often tricky to put pieces of the puzzle together. Do you take someone who knows how to code, and ask them to write code for a networking project? I would say no. Do you silo the networking elements and the programmatic elements and hope that you can make them work together? Also, no.

Most networking devices are built with hardware and software. When we talk about network programmability, we're NOT talking about device software. Rather, we are talking about how to use tools and scripts to get meaningful data from networks, and organize this data and manipulate it in the best way possible. In my experience, it takes someone with a solid foundation in networking to figure this out.

Learning to code is something that many of us know and many do not. I did it almost two decades ago, but haven't done a whole lot since. However, I feel that with time and dedication, anyone can learn programming - to an extent. You don't have to have a lot of foundational skills to be able to code. Disclaimer: I am not talking about programming as a job or a career, since that does have huge complexity and requires foundational training. I am talking about learning to program as a tool such as for a blog, a script, etc. It's about syntax and logic and taking care of all scenarios. I do think that one can pick up coding at any age. Side note: I think it's quite unnecessary for kids to learn Python or coding as an extracurricular - why not follow some other interest that would evoke fond childhood memories, and learn your programming language of choice when you're 16 or 21 or whenever (or never)? Now to proceed..

Learning networking is a bigger challenge in my opinion. There are many who work in networking but only scratch the surface. What I found is that in order to do network programmability and do it well, you need to go deep. You need practical examples of networking to understand it well. For me, the key in network programmability is to understand the A to Z and to be able to put it all together - a proper workflow - from a network engineer's perspective. There is a lot of work done in DevOps and it is mostly done by developers. Many have foundational network skills, and have written a lot of code themselves. It is daunting to enter this world, and navigate through all the content. But I still feel that there is a lack of practical networking applications and a networking perspective on it.

In my personal learning journey, I started off a blank slate - well not blank, I should give myself more credit than that. But more or less not very aware of programmability topics. But now it is starting to make sense, and I have all this knowledge that is not documented anywhere. I've had to refer to obscure blogs (not this one, thank you very much), dig deep into config guides and more or less figure it out on the fly as I worked on it (with help).

So now the question is - what do I do with this information? I want to write - blogs, papers, presentations. I want to make videos. I want to try out all my ideas and create. I have a fire lit and I am not sure where to take it. BUT - I am still at the very beginning in a field that is already pretty mature. Covid and childcare and all of our worries are always around, ready to change things in a heartbeat. This always gives me pause in making plans and getting ahead of myself. Anxiety is ready and waiting to kick in. But while I am at it, I really want to make a playbook for network programmability.

I'll use this in my life lessons as well. When something feels daunting, take it apart. What is the goal? How can I start with just a small step? What will I learn when I do this one task - and do it myself from beginning to end? It is going to start to fall into place. Then I can start making a map or a procedure. Share my knowledge - even if with myself - and see where it leads. Recently, I came across a topic that I had learnt and forgotten, and was able to refer to study slides that I had made for myself and have it click again. I want to do more of this, and even share it with a wider audience.

This is something I read recently that is important to remember - "not letting anyone tell me that I'm not good enough". I know, caveats and all, and this needs to be in context. But it's something that spoke to me. I hope that I can keep on going with passion and dogged determination. Staying humble and treating all as equals. But also not falling down too hard if I receive discouragement, but to brush it off and keep my focus. Don't we all?

No comments:

Pinnacles National Park

 After living in California for over a decade, I recently went to Pinnacles National Park for the first time. Without knowing what to expect...