Bought
Algorithms in a Nutshell,
The Ruby Programming Language, and
Erlang Programming.
I'm under the impression that there are certain aspects of computer science that aren't taught or taught well. Having written so much C# code, I'm making the move towards Open Source this year. I believe that Open Source has solved some significant issues in computing a full decade ahead of Microsoft (IMHO).
Algorithms in a Nutshell: I believe that I was gypped in my algorithms course. We had spent so much time on the mathematics behind the algorithm that we never really became all that familiar with the algorithms themselves. I'm devoting time to relearning these algorithms for my own sake, I believe that having these under my belt will benefit me greatly. These time tested algorithms are the basis for a lot of the already-abstracted things in languages. For example, sorting is a huge topic and different frameworks will use any of these time-tested sorting algorithms.
Plus it looks good in an interview. I'm going to add algorithms to my repertoire of interview questions. Fundamentally speaking, good programmers should have a solid command of them, languages not withstanding.
Erland Programming: I wrote about this in an earlier post. Erlang is a highly distributed, highly concurrent, soft-real-time programming language. Erricson had the idea years ago that a many applications will utilize concurrent, scalable and distributed properties. Working for a hospital, even healthcare utilizes many of these technologies but they're often coded in languages that hinder true concurrent, scalable and distributed architectures.
While .NET may be concurrent/parallelized, the implementation of how it performs distribution, concurrency and scaling is often obscure. Has anyone tried writing a distributed anything in .NET? If so, it's a bit of a pain! Parallelism and multi-core functionality didn't really arrive until .NET 4.0 (at least not implemented in the framework). Erlang won my respect (and heart), so you may wonder: where would I implement Erlang?
In a hospital setting, it can be used as a scalable, distributed data repository. Architecturally, I would only have to worry about the actual implementation and let the language do its job. I would totally use it to build interface engines between non-compatible applications (w/out using ORB's). I believe that Erlang can do it and do it well.
Ruby Programming: I don't believe that one should learn a language through a framework. Currently, I understand Ruby from a Rail's perspective. I see Ruby through Rails, I want to understand why Ruby is Ruby. Rails is a wonderful framework, but I want the power of Ruby in my hands. This should empower me to use frameworks like Sinatra and Rack. Ruby's a powerful language and if the community focuses on making Ruby development simpler and easier, it can supplant the LAMP and .NET stacks easily.