Disconnect Between the Layers

I have been programming for a long time, and for the last few years I started working on the hardware side of things too.  Something that has really come to my attention recently is how much disconnect there is between the “layers” of producer-to-user.  I suppose this kind of disconnect might also exist in other areas, but I work with computers so this is where I see it most.

An example is that of a gamer and game developer.  In this case I’m talking about a non-technical gamer, i.e. a gamer who does not program.  Programmers think about their problems in terms of data, structures, objects, and algorithms.  Gamers, on the other hand, see graphics, game levels, hear sounds, and control characters.  From a gamer’s perspective, pushing a button causes the character to jump.  From a programmer’s perspective, a very complex series of events just took place which had to take into consideration a large amount of information (is the character already jumping? can the character jump here? which way is the character facing? how long has the jump button been pressed? etc.) that results in a change in the character’s motion and internal state.

If you are a programmer then just reading the description above will probably have you thinking about the last game you wrote where the character had to jump, and the code associated with the process.  Even if you have never written a game, as a programmer you probably automatically started trying to solve the problem.  You started thinking about the data you need to track: xy location, velocity, an algorithm for calculating an arc or trajectory, or possibly using a pre-calculated path, level data representation, etc.  Interestingly, the description above also tends to make you think of a 2D platform game, instead of a FPS or other game style.  At least it does for me, and I was actually thinking of Mario and Donkey Kong when I wrote it.

To a gamer, they push the button and the character jumps.  They have no concept of the decisions that have to take place to make that happen, or how complex such a seemingly simple activity can actually be.  A programmer will spend so much time in the code, coming up with clever ways to solve a problem, do something faster, save some memory, etc. that no one ever even knows about.  The programmer becomes intimate with the code to which a gamer has no connection.  It can leave the programming feeling very isolated from the very thing they created.

Even among programmers there seems to be a lack of interest in other programmer’s projects.  No one gives a shit about your project unless they benefit from it in some way.  Even trying to get a fellow programmer to take a look at your code is like pulling teeth.

After working on hardware for a few years, it has become clear to me that the same kind of disconnect exists between programmers and the electronic engineers who make the hardware.  Just like gamers don’t get code, programmers don’t get hardware.  There is a huge gap between how a programmer views the hardware and what is actually going on inside the chips and on the circuit board.  Even programmers who go down to the assembly language level still have a software perspective of the system.

Is no one curious any more?  Has the desire to learn, tinker, ask questions, or figure something out been sucked out of everyone?

To me the disconnects create problems, expectations, isolation, and perpetuates “more of the same”.  The game industry that keeps pumping out yet another FPS.  Software companies that keep pumping out yet another glassy-lickable-drippy GUI OS.  The computer hardware manufactures who keep pumping out yet another x86 compatible system.

Everyone is a critic and no one seems to care about the human element, the achievements, the failures, or the emotion involved in the creation of the things they are using and consuming.

So the next time you start to complain about that stupid game, computer, phone, OS, software, etc. stop and think about the lower layer, what you might not understand, and if you could have done any better.  Find a forum where you can help others without benefit to yourself.  Learn something new about a layer supporting you.  Be part of a solution, not just more of the same.

1 comment to Disconnect Between the Layers

  • Bennie Holcomb

    Most excellent observance. Fortunately I have electronics background and programming background so I am just as interested in how it works as well as how to get things done with the hardware through software, but I think that is just me. It always helped me to know what the hardware was doing to get a deeper knowledge of what may be happening in my programs that I wrote. The problem today that I see is that we have higher level languages that abstract further away from the hardware, therefore just as we move further from our roots in nature with the advance of society, we move further away from the hardware that powers our programs. I always enjoyed the subtleties of assembly language and when I was 12 years old attempted to understand and get into it with my TI 99/4A. The issue was I was not ready for it, but now I am and I am excited to be getting another one and teaching my kids from the roots that I learned from. So I agree, the abstraction further removes us from the actual, and elegant, hardware that powers what we do . Imagine the gamer or user of the OS, iOS, Game, etc. actually think of all the issues the programmers had to go through to get what they have in front of them, and in turn the things the programmers (not all) that wrote the code did not understand the underlying concepts of what they were controlling in the first place. Good article and point of view on all of it.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">