Thoughts and updates from the shop

Carrière Au Courant

A young programmer colleague and I were discussing programming and technology at lunch today. He asked a great question: "Over your career, have you found it difficult to keep yourself current with new programming technologies coming out all the time?"

In the ensuing discussion, he postulated something like: "I imagine it's different than woodworking and the tools you use in the shop don't change as fast. I bet a woodworker from the 1800's could come into your shop and still be proficient at using the hand tools that are similar to what they used back then. Like a hammer and nail are still just a hammer and a nail, right?"

We'll come back to this shortly.

I've spent much of my career becoming an expert in Java and the Java Virtual Machine, but I'm now working in JavaScript and node.js. For those unfamiliar, Java and JavaScript are completely unrelated and very different programming languages. The Java in both their names was merely a misguided late 1990's marketing ploy that most of us wish could be undone.

Besides Java and JS, over my 20-year career I've learned and used: Pascal, Perl, C, C++, Objective-C, Python, Scala, and lots of smaller bits and pieces of other special-purpose languages. Not to mention, their runtime environments, core libraries and API's, etc.

Then there's database systems, operating systems, frontend, backend, testing, networking, engineering methodology, frameworks, and architectures. Plus when you go to work for a large company like Google, they have a lot of their own internal infrastructure you have to learn, and most of it won't have any books in the bookstores (yet).

That's a lot of tools and technolgies! Even so, I haven't really felt that it's been difficult to keep up so far. For one thing, I'm a very curious individual and I get bored when I'm not learning something new.

One of the things I love about woodworking is there's so many aspects of it, that it's difficult to master even if you can devote your entire lifetime to it. I feel like I'll never run out of things to learn. Obviously software engineering isn't going to run out of learning material any time soon either.

On a more practical level, I think when you've learned something well and understand the fundamentals of it, you should be able to apply those fundamentals to new technologies that come along.

For the time-travelling woodworker coming into a modern shop, sure they'll be overwhelmed at first with just the basics like electricity and artifical light and magical boxes with music coming out of them. But they will be able to figure out the woodworking tools because they fundamentally understand the medium of wood.

They know how the fibers of trees work together, and how wood expands and contracts over time. They understand why cutting with the grain is easier than cutting across the grain. They'll probably be able to look at the saw blades and determine which is better for each type of cut.

With programming, I think knowing the fundamentals of how the high level programming language is translated into the low level operations, bits, and bytes, and then how the computer executes it is similar to the woodworker knowing wood. Electrons are our medium.

Learning a new programming technology requires learning the details about its idiosyncrasies, but the fundamentals are the same. There's lots of non-obvious quirks in both woodworking tools and programming that just take time to learn. Sometimes they're very frustrating at first, but with more experience, I find that it's easier to deal with them because you know to look for them.

As for the technology of woodworking, believe it or not, it constantly changes too (maybe not as fast as software.) There's helical planer blades, carbide quadra-cut router bits, vacuum veneer presses, orbital sanders with quick change velcro sandpaper, saw-stop table saws that won't cut your finger off, and finishing tools like HVLP spray guns.

The biggest new tech in shops these days is CNC milling machines. CNC is "Computer Numerical Control". It's a computer controlled system like a robot which can cut or carve almost anything, as long as you can figure out how to program the CAD/CAM software. The new 3D printers actually use the same basic design and control software.

So yes, this is the world we live in. Technology progresses constantly. It always has. Fire came from sparks, then matches, and now electronic igniters. Communications were grunting, cave paintings, then speaking, writing, printing, telegraph, and now email, chat, and txting.

One thing the woodworker from the past probably won't understand is our modern equivalent of hammer and nails. Even I still don't exactly know how nail guns work. It's so much easier than a hammer though.

Addendum: I wrote this at like 2am so I failed to really answer the question in a succinct way.

Keeping your skills up-to-date isn't hard. It's just something you do naturally if you're engaged in a profession you enjoy.