Should I Hire a Web Developer To Code My TV Software?

JavaScript really is the 2nd ubiquitous programming language (the first is C).  It is found in web pages, mobile phones and now on TVs and Set Top Boxes.  This is not a judgement call on whether or not JavaScript is, or is not, a good programming language (or in fact whether C is or is not a good programming language).  It is a statement of fact.  HTML5 development environments are finding their way into each and every facet of software development.

The next generation of consumer electronics applications will be powered almost exclusively by JavaScript.

So, say you’re a web developer, you know JavaScript, maybe you’ve just graduated, maybe you’ve got a few years experience.  You are familiar with the JavaScript environments du jour.  You know jQuery, node.js and everything in between.  Now you can make the jump to consumer electronics, right?

Not exactly.

“But why is that?”  I hear you ask.  Isn’t the entire point of the HTML5 environment to be cross platform, operating system agnostic and suitable for any application?  Having learned HTML5 and all that surrounded it, shouldn’t you be able to apply those skills to any development task and any development environment?

In theory yes, but in practise no.  The reason why is simple.  There is more to development for consumer electronics than just the programming language or even the entire development environment.  Consumer electronics is really another way of saying “embedded” and embedded systems are very different to servers and general purpose computers.

Why is embedded software development different to web development?  There are 3 main reasons:

  1. Resources
  2. Resources
  3. Resources

What I mean by resources are things like CPU speed, memory capacity, disk / flash space, bus bandwidth, swap (or lack of), GPU texture memory, GPU emulation, no FPU or FPU emulation, etc, etc.

An embedded runtime environment is as far from a desktop environment as an 18 wheeler is from a sports car.

They both have wheels and an engine, but that’s about where it ends.  The handling is different, the way you control it is different, the results are different.  They’re designed for different purposes.

When you program a web application designed for a desktop browser, there is an interaction between the web client, the browser, and the web server.  Heavy lifting is done at the server side, user interface transitions are done on the client.  The server is usually a multi-processor machine that is fast and designed to handle millions of transactions a second.  The client is a PC, and today’s PCs are also multi-core machines with a dedicated GPU, a lot of memory, fast architecture and designed to run multiple applications simultaneously whilst being ultra responsive.

By contrast, embedded systems, such as Set Top Boxes and TVs, are designed around their BOM (bill of materials) cost.  The equipment manufacturer knows that they can sell their product for $x, and so to have a profit margin the BOM must be $x – profit.  They can’t afford to put more memory on board, increase the CPU, layout the PCB more efficiently, because it will bump the cost up.  Hence programming in an embedded environment has to be efficient with resources.

FancyPants, our embeddable graphics engine, has what is called a zero copy pipeline for image data.  What that means is images are loaded into memory once, and as they are passed around to different subsystems to apply transitions, effects, overlays, etc, they do not get duplicated.  It is a simple concept to understand but tricky to implement well.   It is one of many such optimisations for embedded targets we have implemented and is exactly the kind of thing that must be built into the software architecture from the start.

There are many techniques available to minimise resource usage for embedded systems but like anything, to be good at it you need experience.  If you have never had to manage resources to that degree you are unlikely to appreciate what can and cannot be done to cut the corners  for an embedded target.  Or said another way, if all you have ever programmed is web pages, served up from server farms to desktop PCs, then it is unlikely you will appreciate the how best to program for an embedded environment.

To answer the question posed in the title then; It depends.  Each developer is unique and you need to asses them on their own merits.  When we hire software engineers we look more closely at their  software engineering skills than their specific programming language experience.

A programming language is a tool.

A good software engineer can pick up the tool and use their experience to be productive quickly, bringing with them their valuable domain knowledge.

Apr, 05, 2012