I have a lot of people continuously ask me how I keep up with changes in technology.  It’s actually kind of funny though, because there are lots of times where I feel behind too!  Since I research this stuff probably more than most, I thought this would make for a great topic to write about.

The first thing I do is simply read the news.  I am a news junkie.  I love knowing what’s going on in the world of technology and feeling like one of the first to know something.  This is obviously something everybody can do very easily by adding news sites and blogs you’re interested in to an RSS reader.  There are two types though.  You need to cover broad technology news sites like Slashdot, Wired and Mashable and always have them in your reader.  You also need to find specific rotational ones.  Anytime you are learning a new technology, find three blogs that talk about it.  For instance, when I was comparing Java EE 6 to Spring 3 awhile ago, I had Adam Bien’s blog in my RSS reader.  When I was done with my comparison, I removed it.  Always keep these rotating.  You shouldn’t need more than a couple months (or less) to research any particular technology anyway.  If it’s going to take more than two months to learn about it, it’s probably not worth it, ha!

Second, I watch the book trends.  Some people think it’s funny that I buy so many technical books.  There is so much information online for free, why pay for a book, right?  I actually look at this a little differently though.  My view is that if there is enough interest about a particular language, framework, tool, etc. that people are devoting time to write complete books on it, it has to at least be a little interesting!  I never buy paper books anymore, only PDFs.  This way I can take my whole collection of books with me to every single meeting!  “Bobby, how do I provide JSON and XML data formats for our JAX-RS service?”  Well, give me 20 seconds and I will tell you since I have a book titled RESTful Java with JAX-RS as an indexed and search-able PDF.  I certainly could just as easy look this up on the Google machine, but sometimes this takes longer than you think and I’m looking for an expert answer, not a hundred potential answers.  Another key thing about books is I always buy the cookbooks!  Anytime I see a cookbook for a particular technology I’m interested in, I will always buy it.  It’s great to see examples when diving in to something new.  One particular one I recently bought was Windows PowerShell Cookbook.  I’m not a Windows Server administrator and I prefer Linux for servers anyway, but going through this book gave me just enough information and examples of working PowerShell scripts that I now feel comfortable discussing it with anybody and comparing it to *nix shells.

Finally, I have playgrounds that I use all the time!  I can’t even tell you how many times people complain about not having administrator writes on their company laptop.  Of course big companies don’t want you installing a bunch of stuff and messing with their standard desktop builds.  I actually do have admin rights on mine (or at least I did at Ameriprse, not sure what Target’s policy is), but even if I didn’t, I would still establish my own playground.  Did you know that you get your own VM at SliceHost for $20 a month?  Did you also know that you can get an AMI (Amazon Machine Image) really cheap (exact price depends on configuration and OS)?  You could SSH or Remote Desktop to these from your company laptop and play around with new technology all you want!  Right now on my laptop I have the following installed: Tomcat 6 and 7 (Java, Groovy, Scala), WebSphere 6.1 and 7.0 (Java EE), IIS6 (.NET), Apache 2.2 (PHP, Ruby and Phython mods installed), Oracle 11g, MSSQL 2008 and MySQL 5.1.  I only run the ones I’m using, but they are all configured and ready to be used at any time!  I’d recommend every technology enthusiast establish their own playground and actually play with technology.  As the old saying goes, the only way to learn programming is to actually program!

So, that’s my advice on how to keep up with technology!  Read the news, stay on top of book trends and establish your playground to try new things out!  Obviously what works for me will not work for everybody, but now I have something I can point to when people ask me!



As I have said before to numerous colleagues, Java as the platform will provide the most value in the future, not Java as the language.  The news about Gosu, a new JVM language, shows this once again!

Gosu is the latest JVM language I’ve seen pop-up and it certainly has some benefits over the current contenders.  Gosu has all the newer language features that we have come to expect in dynamic languages, but is still statically typed.  Sound familiar?  It should because this is exactly Scala’s position.  Gosu provides one important benefit over Scala though, it’s easy for existing Java developers to learn, which Scala is not.

I think the best way to describe Gosu is that it’s somewhere in the middle of Scala and Groovy.  It provides the static-typing of Scala and the ease of use of Groovy.  So, what is the value?  Well, to answer that question, we’ll have to dive in to the details a little more.  Gosu provides an interesting comparison chart, but honestly these items won’t make a bit of difference to 90% of the people I work with on projects.  I’m not saying that I don’t work with smart programmers or that I don’t care about modifying existing types or an extensible type system, but rather I’m simply saying that the need to do these advanced level techniques rarely comes up on my projects.  So, what do I care about?  Here’s my list: longevity, repeatability, productivity and frameworks.

As an architect, I always try to recommend technical solutions that are maintainable.  The most prominent part of maintainability is the technical stack that a particular application runs on.  So before I would recommend any language for a business application, I need to know the basics of longevity!  How long has the language been around?  How many developers work on the language?  How many companies use the language?  Is there vendor support for the language?  In terms of Gosu, it actually looks pretty good!  It’s been around since 2002 (privately until recently) and is used by lots of companies via Guidewire Software Inc.

One great thing about a big company is you can move around to different teams and try something new.  One horrible thing about a big company is when you move around to different teams they often do things completely different.  Java and .NET solved this problem for the industry.  Java is Java and C# is C#.  It is very easy for one Java developer to move to a completely new team and start adding value pretty quickly because all Java code looks pretty much the same.  This is not always true though and PHP or Perl are perfect examples of this.  There are so many different ways to do things in PHP and Perl that it’s often very hard to read other people’s code.  Scala has a different spin on the same problem, it’s so complex that other developers can’t comprehend what’s going on, ha!  Gosu gets another +1 in this area as a language that looks very repeatable (at least from what I can tell so far) and developers should have no problem reading and understanding code somebody else wrote.

Everybody wants to be productive in their jobs.  It doesn’t even matter what industry you work in.  If there’s a way to automate a task or reduce the amount of work it takes to accomplish a task while still producing the desired output, why not pursue it?  This is the whole idea of convention over configuration that Ruby on Rails inspired.  Why do work when you don’t have to?  So, before I’d even consider a new language (or framework), I need to understand the benefit to productivity.  I have actually done some basic testing to see how fast I can accomplish tasks in Groovy vs Java.  So what about Gosu vs Java?  What about Gosu vs Groovy?  I haven’t played around with Gosu enough to really know how productive one can be with it, but from what I can tell it looks pretty good and has the basics of good IDE support (Eclipse), closures, etc.

Finally, it’s time to discuss frameworks.  One of the most important rules of programming is don’t reinvent the wheel. In other words, a language is no good if there aren’t any established frameworks to use with it.  I often hear people say they use Groovy to build their websites, but this really doesn’t even matter, does it?  What I really care about is that you used Grails because then I know you used an established MVC (Spring MVC) and ORM (Hibernate) to build your application.  Same thing with Scala and Lift.  Lift provides all the base components you need to build your next killer Scala web app.  Groovy is to Grails as Scala is to Lift and Gosu is to Ronin.  In my research, Ronin looks like it has a lot of potential as a solid MVC and ORM (RoninDB), but it failed my obligatory framework test.  There’s lots of activity in the project, which is good, but it’s not stable enough yet.  There are also only two contributors right now which simply introduces too much risk to adopt right now.  Hopefully this changes in the near future.  Or maybe I’ll even try to become a contributor! :)

So there you have my personal take on Gosu, a new JVM language.  A language with good potential, but I probably won’t use it for a new project quite yet!  I’m certainly going to keep my eye on Gosu and Ronin though and it will be interesting to see how quickly they progress!


New Year, New Job

After over six years of working at Ameriprise Financial, I decided it was time for me to try something new!  My new job is a Senior Technical Architect role at Target Corporation!  My last official day in the office at Ameriprise is Thursday, December 30th.  I will be starting at Target on Monday, January 3rd.  I’ll be working in the City Center office.  It definitely was a hard decision to make since I have met so many great people at Ameriprise and really enjoyed the various roles I’ve had over the years, but finally decided that it was time for a change!

There were a couple reasons I decided to make the switch.  First and foremost, I simply wanted to get experience with a different company.  I’ve been working at Ameriprise since I was 20 years old, ha!  I actually remember going to happy hour on my 21st birthday my first week at Ameriprise, crazy!  I have numerous friends who are on their third or fourth company already and I have been observing how much they are learning by moving around and being able to compare and contrast different companies.  So, I decided this would be something good for me to do too!  Second, the role at Target sounded like a great opportunity and something I will enjoy!  I’ll be working on a new team that is part of enterprise architecture.  So it should be a great way to learn about all the different areas (Target.com, Target Financial Services, Stores, etc) in the technology group.  Third, Target does some really cool things with technology that sound really fun to work on.  I have primarily focused on web development for the past 5 years, but the next thing I want to get into is mobile development!  I’ve built some simple iPhone apps (not published to the store, just on the simulator) and am currently reading a book on Android development.  Target is all about mobile and bringing their store experience to mobile devices.  As an example, imagine walking into a Target store, checking in on FourSquare and then receiving coupons via your phone!  Sounds pretty cool, doesn’t it?  Don’t get me wrong, Ameriprise was investing in mobile too, but I thought I’d have more opportunities (simply more mobile projects) at a retail company.  And finally, I think I’m going to like the Target culture!  Target moves fast because they have to as a retail company and I think it’s going to be a completely different world for me coming from a financial company.

I’ll certainly miss all the great people I’ve met and worked with over the years at Ameriprise Financial and who knows, maybe someday I’ll try and come back!  As the old saying goes, it’s not what you know, it’s who you know!  So, I’m definitely going to try and keep in contact with as many people from Ameriprise as I can!  It’s been an absolute pleasure working at Ameriprise and I’m very appreciative for all the opportunities I’ve had with the company.  I wish all my co-workers at Ameriprise the best as they progress in their careers and hopefully our paths cross again!