Tuesday, June 18, 2013

The Situation (On Investing in a Revitalized Career)

When I found myself unemployed, one of my first thoughts was that it would be a good opportunity to invest some R&D in my career. I had a plan to put in some serious time learning some new skills. I ordered some books on Scala, Objective C, iOS programming, digital filters, and a few other topics I wanted to study. I considered taking an iOS "boot camp" with Big Nerd Ranch -- it looked like a good class, but it just plain cost too much. I planned to work through a couple of books. I got in a couple of days of work and made some progress, but have come to realize that this was just a bit unrealistic.

In part, it's unrealistic because of the time required to manage benefits, as well as the job-search reporting requirements in which I have to log specific jobs applied for each week (only recently added, apparently). There's no option to say "I'm teaching myself some new skills so I can apply for better jobs." It hasn't helped that we've had a couple of other difficulties piled on too -- we're still waiting on the lead testing, now scheduled for this coming week. There was a heap of work to help my teenager finish some college application essays. There was some other family drama. In fact I had arranged to go stay with some friends in Ann Arbor for a week specifically to get away from the distractions here, and work towards a demo-able iOS app. When things blew up, I had to cancel that idea (although I did wind up doing it later).

I came across something else that I'd really like to do (although I missed this one). There's an organization that teaches two- or four-day intensive courses in Haskell programming. The last one was in the San Francisco Bay area. There is no guarantee at all that if I took the class, and met the folks there, doing the classic networking thing, it would necessarily help me get a better job. I'd really, really like to take the class anyway. I'm not asking for donations to go to a training class like that right now, as such -- I'm not sure it is quite the right time. I'm mostly writing this down by way of just putting my intention out there in some kind of concrete form.

I've been diddling around with Haskell for a number of years now. I've written about Haskell a few times on. I've used it "in anger" -- to solve a real work-related problem -- a few times, for creating small utility programs, usually to chew through some data files, to prototype an algorithm that I later wrote in C++, or to generate some audio data for testing. It is, hands-down, my favorite programming language, a language that expands my mind every time I use it, and has taught me some entirely new ways to think about writing code, applicable to any language. I won't claim that Haskell is, per se, the great savior of programming. GHC can be awkward, and produces truly obscure error messages. It can be hard to debug and optimize. However, it seems to have some staying power, and perhaps more importantly, it is a huge influence on recent programming language designs.

Haskell didn't appear in a vacuum -- it certainly has absorbed strong influences from the Lisp family of languages, and from ML, and maybe other languages like Clean, and others even more obscure. I love learning new programming languages, and I've learned new ideas from just about every language I've learned, but Haskell seems unique in the sheer density of its ability to blow your mind. Despite the fact that it is perhaps not practical for every application, I've become convinced that many of the paradigms and concepts behind Haskell really are the future of programming -- specifically, the competitive advantage, even something close to the ever-receding goal of a "silver bullet" for programming.

I'm really encouraged by the emergence of CUFP (Commercial Users of Functional Programming) and work that some companies like Galois and Well Typed are doing. I believe it is already practical to write complex embedded systems with real-time and space constraints in Haskell, or at least partially in Haskell. It looks like a few pioneers are already doing it. The expressiveness of the language, and the resistance to many kinds of common errors that the language design essentially gives you "for free" could be a big competitive advantage in embedded software designs.

I'm not sure if, at this stage, there are sufficient opportunities to join companies that are also interested in R&D along these lines, especially given that I don't have a Ph.D. and am not likely to acquire one in the near future. Certainly few people nearby seem to be doing this kind of work, and I'm not certain whether there might be an opportunity to join an existing consultancy as a remote employee. I might have to strike out on my own. Grace and I have also been talking about setting me up as an LLC, as opposed to just doing hourly work via W-2s. In fact, honestly, despite the fact that I don't think of myself as much of an entrepreneur, doing so may be the best long-term solution to the thorny question of how to get any significant "upgrade" to my career, in terms of both money and the challenge of doing new and meaningful work. But that's a big leap to make.

I realized that I have been thinking and occasionally talking to friends about the idea of forming a company to do R&D and consulting on using advanced languages for embedded programming for ten years now, or maybe even slightly longer. I didn't even know Well-Typed offered classes like this, until I stumbled across the description online, but I have confidence that there will be more classes in the future. It seems like there is a window of opportunity. I didn't manage to get into iOS development at the start, like I did with Newton development, and I regret that (although, on the plus side, stuff works now!). It's hard juggling a career and a family. But I don't think it's too late to become a Haskell guru, for some value of "guru," and feel that maybe programming isn't entirely devoid of innovation after all. And maybe even enjoy programming again!


Mike Nowak said...

How popular is Haskell?

Paul Potts said...

I'm not sure what the best way is to measure language popularity but this site tracks language use. They place it at something like 30th place (currently above Prolog and Scala). I'm not sure the language itself is so important as is the apparently growing FP paradigm. It might be that like Algol and Simula, Haskell will be remembered as important more for the influences it had on other languages that eventually become more popular.

Paul Potts said...

Errr, the link: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html