Responsible Code

At an increasing rate, software now controls our lives.  A few examples are credit scores, loans, stock trading, releasing people from jail, new job screenings, getting into college and just about everything else.  Those decisions have major impacts on our lives.  Since they have such a huge impact on our lives, they need to be done properly.

An example of hugely important and impactful software is self-driving cars.  People’s lives directly depend on it, therefore it must be properly and correctly.  This is not like building a database, people’s lives are at risk. Lots of lives are at risk.  This is not something where someone should just fail-fast and then fix it.  But mistakes in production should not be acceptable.  Mistakes will happen, that is inevitable but it needs to fail gracefully.

No one enjoys unit testing but it is necessary for quality software.  There are so many different driving scenarios that they all can’t be accounted for and coded in.  Data needs to gathered from a wide variety of sources (such as still images, videos, radar, lidar), then it needs to be put together and analyzed.

In addition, no one enjoys government regulations but when it comes to self-driving cars, those regulations need to be followed.  All regulations need to be followed, I’m sure that some of them are ridiculous but please don’t skip them.  If they are ridiculous, object to them but still follow them while the laws are on the books.

I’m not saying this is easy.  This is a very hard problem that requires a lot of smart people working really hard.  I just want the people involved in this and other software projects to remember that this isn’t just an academic thought problem but people’s lives depend on this software.

I also think that technology can solve so many of the worlds problems.  I am optimistic,  not pessimistic, about the future of technology.  I do not want us to stop innovating.  We cannot stand still, we should always be moving forward but we need to proceed with caution.  The new and innovative technologies of today will become the foundation of tomorrow.  I want to make sure we have a solid foundation for everyone in the future.

This post was inspired by The Tesla Show Podcast, episode 85 about Comma.ai, “the Android of self-driving car companies” Link

 

Why Network Engineers Should Learn Programming

A typical network engineer starts off in a NOC and does break / fix work and that doesn’t require them to know how to write code.  But it would be great if they did AND it would help them advance.

Most other IT infrastructure engineers need to know either how to write basic scripts or at least edit or debug other’s scripts. Networking Engineering folks should learn about coding to expand their tool set and to better understand their Software Engineering brethren.  Even better to work better with the programmers that we are supporting.

An example is Powershell.

Powershell is a necessary skill for folks who work on servers, Exchange, Active Directory and Office 365. Lots of networking folks who want to dabble in other disciplines will  need to know Powershell and basic coding to keep up.  Here is a link to Greg Farro from the PacketPushers.net talking more about this very scenario.

Here are a few examples off the top of my head that other IT infrastructure engineers routinely perform.

Server / Storage Admins
•Automated backups
•Datacenter failover script
•Automatically setup new VMs and resources
•Linux Linux Linux

Security Admins
•Writing Firewall rules

Voice Admins
•Phone tree scripting

Architects
•Switch failover rules
•Pings sweeps
•SDN
•Device auto-discovery script

The IT world is becoming more and more automated.  That automation is done by scripting and coding. The networking world is far behind storage and servers in terms of automation.  Better for you to automate your own job away before someone else does… and it will happen eventually.  We’ll be examining automation in the IT world in general more in another post.