A big whole bunch of ideas, not even exhaustive! Feedback on any of them is very welcome. New ideas to add to the list are also very welcome. Job offers are greeted with an angel choir soundtrack and my frantic stammerings of lifelong gratitude.
1. Embedded OS/driver stuff - My resume screams "embedded OS/drivers". That's my most recent experience, a fair bit of it.
Sadly, what this past job has taught me is I no do drivers. Sadly, most anyone who wants OSes wants a lot of driver/firmware work. Can I find OS work without getting THAT far into the hardware? And can I find it near where I live? Alameda is out, so no Wind River.
Given my motivation, possibly embedded OS work is too far removed from the customer. I can't point to anyone whose life is noticeably better because I fixed a timer bug.
I don't know the internals of any big existing OS because we've always written our own. I know zip about Linux internals, for example. Of course, a lot of Linux work out there would likely be porting, which would put me right back in driver land, so that's probably not great.
Who's doing active OS kernel/internals development?
2. UI design and implementation - Another thing my resume has a big pile of is UI design and implementation. I've got a good decade of that.
Sadly, all of it was in X11/Xt/Motif, and no one uses that any more. I'd need to learn... what? MFC? ASP.NET? Java Swing? Plus, it's hard to find employers who respect good UI design skills. Mostly they respect knowledge of the library you're using. Too bad that's the part I don't have. Can I get it? Quickly? My Xt experience will speed up the learning curve.
Motivation is strong here. I know people who use whatever I write will have an easier time of it if I do my job well.
If I choose this path, which UI package should I learn?
3. Tools - One last bit of experience: I wrote some good-sized chunks of a debugger once.
That sort of thing motivates me if I think of the customer as my coworker down the hall. Other random development tools, ditto.
Pretending to be a compiler person is like pretending to be a physician. That's out. But other tools, I can likely do. So: custom debuggers for custom systems. Simulators, probably. With some learning curve, maybe profiling, or join a team doing static analysis. What else is out there in tools-land? What weird development worlds need weird tools written?
4. Spam-killing - No experience there. It sure does pass the "is it worth doing" test for me. What would I need to learn?
5. Apps destined for non-computer-professionals (software for small businesses, etc) - What's out there? Some of this would be way cool to do.
6. Webby stuff a company deploys for its customers to use - Some of this could be cool too. The debug cycle has got to be frustrating as all get-out, and that's something I've got years of tips and tricks for from my X11 work and embedded work.
7. Other - Any other development ideas?
8. QA - Getting farther off the obvious path, how about QA? It likely won't pay what development pays, but I've done it before and I seem to have the mindset.
9. Documentation - At all possible? I have zero training and zero experience, but it appeals, and I believe I could write clearly about complicated things. One unusual trait I have among engineers is that I give a shit about documentation: accuracy, appearance, completeness, etc. I don't even know what I'd have to learn though.
10. Build/release stuff - I've done this as secondary duties; think of the customer as the team down the hall. Again, likely lower pay than development, but if I'm good I can turn a painful process into something almost pleasant.
11. Other Other - What else? Any other ideas?
1. Embedded OS/driver stuff - My resume screams "embedded OS/drivers". That's my most recent experience, a fair bit of it.
Sadly, what this past job has taught me is I no do drivers. Sadly, most anyone who wants OSes wants a lot of driver/firmware work. Can I find OS work without getting THAT far into the hardware? And can I find it near where I live? Alameda is out, so no Wind River.
Given my motivation, possibly embedded OS work is too far removed from the customer. I can't point to anyone whose life is noticeably better because I fixed a timer bug.
I don't know the internals of any big existing OS because we've always written our own. I know zip about Linux internals, for example. Of course, a lot of Linux work out there would likely be porting, which would put me right back in driver land, so that's probably not great.
Who's doing active OS kernel/internals development?
2. UI design and implementation - Another thing my resume has a big pile of is UI design and implementation. I've got a good decade of that.
Sadly, all of it was in X11/Xt/Motif, and no one uses that any more. I'd need to learn... what? MFC? ASP.NET? Java Swing? Plus, it's hard to find employers who respect good UI design skills. Mostly they respect knowledge of the library you're using. Too bad that's the part I don't have. Can I get it? Quickly? My Xt experience will speed up the learning curve.
Motivation is strong here. I know people who use whatever I write will have an easier time of it if I do my job well.
If I choose this path, which UI package should I learn?
3. Tools - One last bit of experience: I wrote some good-sized chunks of a debugger once.
That sort of thing motivates me if I think of the customer as my coworker down the hall. Other random development tools, ditto.
Pretending to be a compiler person is like pretending to be a physician. That's out. But other tools, I can likely do. So: custom debuggers for custom systems. Simulators, probably. With some learning curve, maybe profiling, or join a team doing static analysis. What else is out there in tools-land? What weird development worlds need weird tools written?
4. Spam-killing - No experience there. It sure does pass the "is it worth doing" test for me. What would I need to learn?
5. Apps destined for non-computer-professionals (software for small businesses, etc) - What's out there? Some of this would be way cool to do.
6. Webby stuff a company deploys for its customers to use - Some of this could be cool too. The debug cycle has got to be frustrating as all get-out, and that's something I've got years of tips and tricks for from my X11 work and embedded work.
7. Other - Any other development ideas?
8. QA - Getting farther off the obvious path, how about QA? It likely won't pay what development pays, but I've done it before and I seem to have the mindset.
9. Documentation - At all possible? I have zero training and zero experience, but it appeals, and I believe I could write clearly about complicated things. One unusual trait I have among engineers is that I give a shit about documentation: accuracy, appearance, completeness, etc. I don't even know what I'd have to learn though.
10. Build/release stuff - I've done this as secondary duties; think of the customer as the team down the hall. Again, likely lower pay than development, but if I'm good I can turn a painful process into something almost pleasant.
11. Other Other - What else? Any other ideas?
no subject
The biggest growth areas here are Web and mobile UIs. You would have no trouble finding a job implementing UIs on the Web, especially the richer, more interactive sites that require more programming clue. Mobile is a smaller market, but growing, no question about it.
I can't speak with authority about mobile anything, but here are some Web technologies you may want to learn:
* HTML/CSS/Javascript. You know about HTML; CSS is layout and presentation rules, and Javascript is code. Put them all together and add asynchronous client/server communication, and you get AJAX ("asynchronous Javascript and XML"). Huuuuuge buzzword these days. :-) AJAX is the tech that Gmail, Google Maps, Flickr, etc. are built on, and though it's messy and hackish, one can build some nice UIs with it.
* Flash/SVG/Flex. This is Macromedia's path to building functional UIs on the Web. Flash is the vector-graphics player everyone knows about, SVG is code, and Flex is a full-fledged UI system based on those. Not as hot a market as AJAX at the moment, but impressive tech nonetheless. A programmer friend of mine is building a "big app" with Flex, and he loves it to pieces.
Of course, backend programming for the Web is done in an entirely different set of technologies: classic C/C++, perl, Java, PHP (sorta frontend too), databases, Python, Ruby, etc. Lots to learn! Whee! :-)
I currently build desktop UIs in Java Swing. It's okay as it goes -- decent language, a fairly mature UI toolkit, and marketable to an extent, but Swing programmers aren't in nearly as much demand as Web people, AFAIK. Check the listings in your area and see what you find.
I can type, really
So THAT'S what AJAX means! One puzzle demystified!
If I were to pick up, say, Javascript, CSS, and PHP, then I could be somewhat employable as a Web UI person, yes? Given I already have a fair bit of HTML and C/C++/Perl/Java. Three big pieces seems like a lot, but I do have a little time. If I start playing with them soon...
I've seen a few job listings for Swing here. I've also seen -- man, there's one I'd REALLY want to put you in. That's the one
Re: I can type, really
For a quick dive into AJAX stuff, you might take a look at openlayers.org (open source project run by a coworker, to produce a common toolkit for ajax mapping apps - if nothing else, it's a fair place to see what all of the issues are.) You definitely need javascript and CSS to be able to do useful stuff with AJAX, but there's not much depth to either of them, just icky special cases - and, well, you handled Motif and traversal, these should be *easy* :-)
oh yeah - 37signals just put up a ruby-on-rails job board - no idea how it's going, but if you want to look in that space as part of picking up a new language (rails has some helper tools that make writing ajax apps easier - or rather, makes writing certain kinds trivial so everyone just writes those :-) it might be worth a glance.
Re: I can type, really
but there's not much depth to either of them
Ah, thanks. I had that impression (particularly about CSS: all icky special cases) but it's good to hear a second opinion.
no subject
no subject
no subject
And by the way, thank you for being someone who gives a shit about documentation! It's so important to get it right. Plus, I've found that in most of the places I've worked, my best sounding boards and allies are people who do documentation and training -- they see the UI from the user's point of view better than anyone else in the organization.
no subject
my best sounding boards and allies are people who do documentation and training
Absolutely. Similarly, the documentation folks I've worked with recently have been able to tell me when an API published by our OS is b0rked, either directly ("Are you sure...?") or indirectly (a page of total confusion where the doc should be).