It's Hard Today To Know Where To Spend Your Time Learning June 10, 2015

I read Reddit Programming and Hacker News every day and every day there is something new and cool to read about.

The problem is that I program for a living, and where I spend my time learning something new is always a gamble. I can't learn everything, I can't even remember the names of everything cool I come across.

The danger is picking something to learn and having it die or become unimportant before I can actually use it for a real project. Javascript web programmers have it the worst, but everyone these days will feel that something new will overtake whatever we are getting paid for.

When I started in 1981 new things happened rarely and you had time to see the upcoming trends and prepare. You could even learn multiple things and still keep up. I admire people who can actually be highly skilled in incompatible technologies, or at least appear to be.

Currently I write iOS apps which at least isn't ridiculous, but Swift keeps changing, Apple has three OS's now that keep changing, and the demands of employers cover a wider and wider range of things to build. You can't just be an Apple programmer, you almost have to pick a platform and stick to that.

I remember when getting a job programming Java mostly required that you knew Java and maybe an app server brand. I doubt you could get a job today with such a limited set of knowledge. For that matter, I remember when you could get a job as a programmer with no experience and no education -- that's how I got my first job, I knew enough to get hired. Today you need a laundry list of technologies stuffed into your resume to even be noticed. Just being smart and capable of learning whatever, as when I was hired, is laughed at today.

If you can not only pick the right language but the right set of frameworks and use them long enough to have a track record you might be able to get a second job in them. But if you pick the wrong ones or hang on too long you might be unemployable, at least locally. If you work in the right industry you can get a new position easily, but if your industry is boring and no longer hot you might only get jobs that are boring and not hot.

The trouble with new technologies is to learn them takes time, and usually a real project, and that's not always easy to pull off when you are working in some other area. If you are lucky your current employer wants something new so you can learn on the job. Otherwise you have to spend your time away from work on something that might convince a new employer you can handle the new thing. I've known plenty of programmers who picked family over learning and had to leave the profession because they became obsolete. I've also known programmers who invested a lot of energy to become excellent in some technology area that then suddenly died away leaving them experts at dead fossils.

It's hard too that there are so many cool things to play with you wind up doing nothing but playing with cool things but learning nothing solid in the process, just a little tad here and a little dab there. It's fun but ultimately your brain fills with technologies you can't really use well enough to do an actual project. It's programmer cotton candy.

Even just in the Apple world I am torn. I would love to work with Metal, but is it more useful to learn HomeKit, or build a watchOS app, or abandon Objective-C (that I've worked in since 1998) and go whole Swift, or write a game with all the new stuff in iOS 9, or stick to business apps and ignore all the new stuff? I will be looking for a new gig around August, what would be more useful to know? How the hell do I figure it out? arc4random() ?

Every area in programming today has enormous change and that change increases at a ridiculous rate. I wonder if some day everyone in the world will be an expert in one thing which no one else in the world knows. It would make for interesting job protection but I don't think anyone of us would like it very much.

The future is becoming a serious pain in the butt.