Custom vs. Standardised

An interesting question popped up in one of the NSCA BLC talks I've been watching lately. First up, props to David Danto for the incredible handling of the question. The content of his response however is something that I could not agree with more.

...leave the custom for where the customers really need it

As integrators, our industry as a whole needs to embrace this mindset far more readily. I'm as guilty as the next person and enjoy nothing more than working with the latest in tech and continuously trialing new approaches to new problems. Where the issue exists is when these problems have already been solved - and solved well - this dilutes the resources that deserve to be focussed on the key custom areas of a project.

There are some incredible 'packaged solutions' and arrays of components built and designed to function in synergy on the market today and set to appear in the near future. By using these where they satisfy needs we can reserve and concentrate both our time and fiscal resources of providing those incredible solutions our industry does so well where it truly matters.

Abstract Beauty

I've spent a fair portion of my life looking at problems and building whole worlds in which they may be considered in different ways. Sometimes this will involve days or even weeks at a time running into walls, going nowhere, before eventually catching just the slightest glimpse of what may become an elegant solution. At that point, no matter how much pain, frustration or sleep depravation involved, it all becomes completely worthwhile. This is commonly called computer programming.

I would like to share some of the beauty that can be found in these abstract worlds and hopefully, if you haven't already done so, encourage you to do some exploring of your own.

Programming really is one of the most creative endeavors you could imagine. Yes, some rules do apply. However, in the same way prose follows form, a novel adheres to grammar and a sculpture is influenced by its material, it is how this structure is used that brings beauty.

Think of a treehouse. You can build a treehouse that is functional and has a trapdoor and is stable. But everybody knows the difference between a treehouse that is simply solidly built and one that is beautiful, that takes creative advantage of the tree. It’s a matter of combining art and engineering. This is one of the reasons programming can be so captivating and rewarding. The functionality often is second to being interesting, being pretty, or being shocking.

It is an exercise in creativity.
— Linus Torvalds

This creativity is driven by an overwhelming curiosity. The urge to discover, to explore; a drive to learn about not only the problem you are trying to solve but everything that surrounds it. It's a curiosity that can lead you down rabbit holes where you find some truly amazing things. Where you discover complete areas of knowledge that you otherwise may have never thought about.

Once you have this knowledge, once you have truly dived headfirst into a problem and are left with only your feet sticking out, the fun truly begins. The truly special element of programming is everything you are building is in a virtual world. You have complete freedom to experiment without consequence (well, if you approach things sensibly) and without waste. You can move quickly. You can try things different ways, and, fail quickly and try again. You can learn continuously.

Also, as you build digital rather than physical objects, it opens you up to a whole world of sharing and collaboration. There exists the ability for everything you create to be replicated and sent anywhere almost instantly. As with many programmers, I work with some incredible people from all over the planet. Many of which I've never met yet we've been able to collaborate and solve some of these problems together, even if our only language in common was a programming language.

This really highlights the real value of programming. Very little software development is what you probably picture it as - someone sitting at a computer bashing out code. Programming is all about problem solving and the development of ideas. Code is purely a convenient way to express this. It is a set of languages. Just as English, French or German may be used to communicate incredible stories, code is used to communicate incredible ideas, right down to the finest details.

Don't assume that everything stays in these abstract worlds though. As you go about your day have a think about the where some of these virtual worlds intersect with yours. The car you drive, or the train, plane or bus that you catch. The recorded music that you listen to. The design of the house you live in. None of this would be possible without software.

If you'd like to do some exploring of your own most cities have groups of passionate people who run free coding courses. Pop into one some time with a friend, partner or your kids and discover some of this world for yourself.

It's time to burst the AV bubble

Yet another example of a BMS / control system vulnerability popped up this morning.

With penetration tools becoming increasingly simple to use and services such as Shodan freely accessible to anyone who is so inclined, regardless of their intentions, I am still astounded that there appear to be so many people within the AV and integration industry who are completely oblivious to even the most basic network security.

We really need to move away from this view that we live in our own little isolated world far more rapidly than what is currently taking place. We build systems that have complete control over environments. We create, commission and install solutions that drop multiple-tonne screens from roofs, that distribute (potentially sensitive) media, that have eyes and ears in every space, control power, lighting, physical access and the monitoring of all of these services. Yet, as an industry we still seem believe we function inside our own AV bubble.

Those that continue the AV / IT dichotomy and perhaps more scarily actively spread the great fear of 'the network guys / girls' to newcomers to the industry truly scare me. Not only do they work against themselves but they position the entire industry as the threat or issue that needs to be resolved.

/ rant

Teach kids to farm, not code.

My father taught me to code as a kid. He's spent sections of his life as a software engineer and as a teacher and was one of the best mentors I could have asked for when starting the craft. These days he and my mother run an organic farm, are outspoken advocates of sustainable living and are both extremely involved in community activism.

On being exposed to code.org's recent hugely popular campaign he had an interesting comment. This is a view that I've seen mirrored amoung a number of people not actively engaged non-profit based software engineering or hacktivism. His entire post is below, with my comment following.

I’ve been able to write code fluently in a couple of languages at any one time for most of the last 35 years (although pretty disinterested for the last 5 or 6). Its much much easier than learning to speak, communicate, read and write or develop basic numeracy - skills which we expect of most members of our society. Growing food is far more challenging, requires an order of magnitude more knowledge and continuous learning and dedication. It requires us to be connected with a real world of which we still know almost nothing compared to what there is to learn. The way we do it has huge intergenerational consequence for people and everything else that lives on this planet.

Why are programmers granted such high status and wealth in our society for living in a self-created self-indulgant intellectual world of constant escapism - and yet farmers are regarded with such distain when they operate on the most important boundary between society and the biosphere? It’s all very well stating that all human beings should learn to code (and dance and sing) but it is far far more important that all human beings learn to interact with the natural environment and understand the basics of food, water and shelter.
— Steve Burgess

The ability to code itself does absolutely nothing to thrust developers into this elevated world of riches, status and disconnection that you allude to. Programming is simply a tool, a way to abstract a problem and enable it to be solved or solved more efficiently. What boosts mere mortal programmers into the world of software engineering demi-gods is their ability to clearly define these problems and present them in this abstract world. The programming part is nothing more than a hammer to a builder or a scalpel to a surgeon. Yes, you need to know how to use it, but the skill involves knowing what to do with it.

Even with absolute mastery of this skill you do not suddenly go riding into the palace of software engineering gods on the back of a sparkling unicorn to frolic in abundant riches. There are developers all across this planet that are absolutely incredible at what they do, serious geniuses and masters of the craft yet still barely earn enough to survive. What differentiates a programmer from a stupidly rich programmer is the problems they choose to solve. Addressing problems that improve the efficiency of advertising (Google, Facebook et al) are a pretty proven way to do this, as is high frequency trading algorithms or building things that people who already have a lot of money (VC / investor) can use to make more money. The list goes on.

What code.org advocates is teaching this art of programming. Yes, it is an advertising campaign that uses people who have made stupid amounts of money through some of the above tactics but lets remember it also an advertising campaign targeted at America and saying "Do x and you'll be swimming in vats of riches, shiny things and scantily clad women" is a proven tactic in that demographic. What code.org promotes is teaching kids how to look at problems, analyse them and present them in a way that captures what they are trying to solve. It promotes teaching kids how to use a new tool that can assist them to devise solutions to whatever problems they desire. Most importantly it promotes teaching them a tool that they can use to express and communicate this.

P.S. If you're having a hard time finding the applicability of programming to real world problems (i.e. things not contained in the get rich quick options outlined above) have a look at Random Hacks of Kindness and other similar initiatives.