So, having vanished during the holiday season and then having become mired in all the things that happen in life, I'm back for an update.

I haven't started that book yet, although I still fully intend to do so. I've also not been completely idle. Over the past few months, via my reading plan, I've had the opportunity to explore a number of new (to me) concepts that weren't really around for Windows programmers in the 90s.

For example, I recently started a new project at work that makes use of a Gulp build process to compile SCSS (a total revelation as someone who has long wished for variables in CSS). Aside from the simple discovery of Gulp and SCSS, I had to learn a lot about package managers in the process -- a bit of an undertaking in itself! Yes, it's true: up until these past couple of weeks, the only way I ever included jQuery or Knockout in my projects was to visit the web site, download the zip archive, and extract the files manually. Now, I have a bit of working knowledge around NPM, Bower, and Chocolatey.

In addition, I've been working on a little side project, in PowerShell, for rapidly setting up new Hyper-V virtual machines with a fresh operating system and all the important stuff for my dev stack (IDEs, package managers, runtimes, and other tools). This way, I'll be able to set up new test environments for the various programming languages I plan to sample -- without dirtying up my main system. (I had originally attempted to make use of AutomatedLab, but although it works great for some purposes, it currently has a few bugs that make my use cases harder to implement. So my personal lab scripts will do the job instead.)

That's all for now. Hopefully I'll have something to report in the realm of language exploration soon.

Selected reading

After a bit of research and consideration, I now have a short list of web-based resources I'll use to keep in touch with the state of modern programming. Again, I've tried to be conservative in order to save time and to focus on my learning goals:

I might be able to add one or two more specific resources once my learning languages of choice are finalized.

In order to start evaluating my potential programming languages, I spent a fair amount of time browsing Amazon. Soon, I came across a fairly well-rated introduction to a number of decent-looking languages: Seven Languages in Seven Weeks. All seven listed (Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby) are ones I've heard of, but have no experience with so far. It's helpful that there are some functional languages included, since I'm keenly interested in getting up to speed with one.

Setting goals

In my quest for self-improvement, it's going to be important to have a set of concrete results I'd like to see from my studies. After all, I'm not just learning for the sake of learning; my intention is to go beyond what I already know - and to develop even more useful skills that can serve me both as a hobbyist and as a professional.

To that end, I started my plan by listing certain axioms that I would need to observe in order to be successful:

  • Obviously, I can't learn everything. There's just too much out there.
  • I must resolve to keep a keen eye on the landscape of technology, watching for new developments - keeping current while getting current, so to speak.
  • I truly don't have a lot of time, so decisiveness is important in selecting a direction, or a change of direction.

After a few weeks of personal reflection, here are a few specific goals I've decided on:

  • I want to learn two web-based technologies in-depth, as well as two new programming languages. One of the languages must be from the functional "family." I'll start by surveying a fairly broad array of options, spending short bursts of time with each of them before making my final selections.
  • Blogs and other media will be essential to staying on the forefront of my interests, so I need to identify a small number of sources that I can pick through occasionally for news and discussion.
  • Once I've gone through the preliminaries and chosen my technolgies, my goal is to build something useful with each of them (either separately or in combination). I'd like to reach a point that could be considered proficient by this time next year.

I'm not sure whether these targets are too conservative or too ambitious, but I'll certainly leave them open to change in case I end up overextending myself (or having a lot of free time on my hands). In any case, it's time to finalize my reading list for the next twelve months or so. I'm ready to get started!

(Re)building a better programmer

Hi there. You don't know me, but in 1999, I was on top of the world.

Back then, I was a Microsoft MVP specializing in Visual Basic 6.0. As the webmaster of Visual Basic Thunder, thousands of VB programmers treated me as an authoritative source for information on doing everything from the simple to the impossible in Microsoft's "toy" language. As a member of the Common Controls Replacement Project, I rubbed shoulders with such esteemed fellows as Karl E. Peterson, Randy Birch, Brad Martinez and many others who pushed the limits of the most popular software development tool in the world. I studied at the feet of greats such as Matt Curland and Bruce McKinney, striving to reach ever greater heights in unlocking the power of Windows.

My purpose in this introduction isn't to brag, but to illustrate just how far a programmer can decline. You see, in the intervening years between then and now, my programming knowledge has only become less and less relevant.

It was a slow, steady slide into apathy. Microsoft quietly began shopping around Visual Basic's replacement in 1999. I won't recount the debacle here, but suffice it to say I ultimately allowed my disillusionment to get the better of me. Instead of moving on to new challenges and opportunities to grow as a developer (please note: I'm did not consider .NET to be such an opportunity), I eventually abandoned the programming community - opting instead for a life in Information Technology, another type of technical expertise altogether.

It was there that I bounced around between several different job roles - first hardware/software troubleshooting, then desktop or server engineering. Today, I'm a black sheep working in I.T.; the guy who throws together PowerShell scripts or little C# web-based tools to make things happen. Yes, I've reluctantly learned C# and ASP.NET because it's been standard at every company I've been with since 2004.

But that brings me to the point of this blog: Somehow, after all these years, I'm still a programmer at heart. Problem is, I'm not a passionate programmer. I haven't been "current" now in about 15 years, and I haven't cared to be. I was bitter about .NET. Maybe I allowed .NET to sour me on everything else.

NoSQL. Node.js. Mobile development. Functional programming. These are all things that I should probably know at least a little bit about, but it's all Russian to me. Apathy. It's been my number one enemy.

Don't get me wrong; I'm still pretty good at what I do. But I could be so much better.

So one evening not too long ago, while I was busy feeling sorry for myself and what I'd become, one thought shouldered its way into my mind and refused to be silenced: If you want to, you can change it.

"No," I argued with myself. "I don't have time to screw around with learning new concepts these days. I'm not a carefree bachelor anymore."

You can change it.

"I have a wife. Kids. I'm too far behind to catch up."

You can make excuses, or you can change it.

"Ugh. Maybe. Maybe you're... umm, maybe I'm right."

And here I am today. Putting together a self-improvement plan, of sorts. A list of books to read. A list of technologies to learn. A list of stuff I want to know, need to know. I'm ready to be passionate about software development again.

It's here, on this tiny blog of minimal importance, that I'll chronicle my journey.