"When I started writing programs in the late 80s it was pretty primitive and required a lot of study and skill. I was a young kid doing this stuff, the adults at that time had it even worse and some of them did start in the punch card era. This was back when programmers really had to earn their keep, and us newer generations are losing appreciation for that. A generation or two ago they may have been been better coders than us. More importantly they were better craftsmen, and we need to think about that." I'm no programmer, but I do understand that the current crop of programmers could learn a whole lot from older generations. I'm not going to burn my fingers on if they were better programmers or not, but I do believe they have a far greater understanding of the actual workings of a computer. Does the average 'app developer' have any clue whatsoever about low-level code, let alone something like assembly?

Let me start off by saying that I am currently a linux device driver developer for SAS storage controllers...so I consider myself a "to the metal" programmer. However, I also have quite a bit of experience with test automation, so I know both sides of the coin.

So as a rejoinder to this, I've heard hardcore C(++) and HDL also show a vast ignorance. To wit:
- (In regards to a distributed app) "Where is the exe that I can run to install this?"
- Recursion is stupid and should never be done because you can blow the stack (not realizing that other languages have tail-call optimization)
- Who have never heard of TDD
- Who have never heard of continuous integration
- Who think it is ok to rsh or telnet into remote machines
- Who thought that self-balancing trees were a new "invention"

I can't tell you how much prejudice I've seen with the "metal" programmers deriding web app and database guys. And yet if you ask them if they have ever done any themselves...they haven't.

My web application experience is extremely limited. I have played with a few web servers (cherrypy, pyramid, and jetty), and written some very small toy "hello world" kind of web apps. But I can tell you this...web programming is way harder than most "to the metal" programmers think it is. Same thing with database programming.

Figuring out network problems, understanding the topology of the system (are you using virtualization?), understanding either multi-threaded or asynchronous (reactor/proactor) servers handling several tens of thousands of requests simultaneously...none of that is easy.

And yes, everything I described is back-end development. But I think many "metal" programmers only think of the front end devs (the guys writing front php or javascript, css, adobe AIR or javaFX for example). But even that isn't as easy as you think. They deride that as "scripting".

I know EE's and CE's who just couldn't grasp closures in javascript or lambdas in python. Showing them python generators or classes that dynamically generated classes or functions was a real stretch for them. In other words, their idea that "scripting" languages are toy languages was simply ignorance.

For some reason, many "to the metal" programmers somehow think that being able to do bit manipulation, access registers, time the hardware with the software, and juggle virtual-to-physical addresses somehow makes them superior. Even desktop application developers don't have to worry about things like dependency management or networking issues.

The sad fact is, most programmers specialize and are therefore unaware of the difficulties faced by the kinds of programming others do. I am fond of an old chinese saying regarding religion, but which I shall paraphrase for programming: