I cut my teeth on the Commodore 64, Apple IIe, and Amiga 500 in the late 80s and early 90s.

It did feel a lot different then. The etymology of the word, "compute," was at least subconsciously watching over your shoulder as you sat down in front of these machines. Their utility was clear.

They loaded programs. They weren't "apps" back then and lacked that commodity feel to them. You had to understand in some way what programs were, how they worked, how your computer loaded them. Their limited resources gave the distinct impression that these were machines. Any sufficiently advanced game required at least a little tweaking to get running. Maybe you needed to add more memory, a hard disk, or needed to set some switch in your operating systems boot loader to squeeze out the last bit of performance from it. In many respects the old home computer was very much a tool or machine.

Today programming does feel different. I got into programming partly out of fascination with computers (which at the time required you to know at least a little BASIC to load a program) and partly from computer games. I would type in programs from Byte magazine back issues at the library, modify them, and have a lot of fun. Eventually I started writing my own games. And when I got good enough I started thinking, "I could make this," when I was playing other games. It was easy to see the underlying structures in my head and think about how you would build this thing.

Today it's not so easy. When I play Skyrim I don't think that there's a chance in hell that I could sit down at my computer and hash out my own Skyrim. There's a disconnect between how we use computers and how we understand them to work; there isn't any requirement to know what memory is or how to tweak your operating system. We don't even "load programs," anymore -- they're "apps," with all the commodity feel of going down to the store and picking up a new gizmo.

We hardly use computers for the ability to "compute," anymore.

Programming them... well most of the problems of implementation are largely solved for most applications. So it does feel a lot more like stringing libraries together. Some of this is mostly just an artifact of commercial software development: process demands re-use, etc. Lots of pressure to relieve programmers of the hard work of their jobs. The only times I find myself going beyond libraries is working on "web-scale" server applications and finding performance bottlenecks in all of these weird little scenarios. Or sometimes, as you say, writing yet another web framework because the existing APIs of the current crop are forcing complexity into certain components of my applications that could be removed if the library was just a little more flexible. It might also be experience. I certainly don't find things that impress me as much any more.

However it's still a wonderful profession and I still love it. It still delights me to open the source to 'grep' or 'cat' and read those old programs. Sometimes I still write an old-school number guessing game when I fire up the interpreter or compiler of some new language I'm trying on for size. And I can still think of applications for technology and programming that are interesting. And more often now than ever before I'm feeling the impetus to teach.

There's nothing quite like this craft of programming, even if it can feel a little long in the tooth sometimes.