Drinking from a Firehose

Whenever I interview a person for an open position I always ask the person how they keep up-to-date and keep their knowledge set relevant with industry trends and new technologies.  The answer can tell you a lot about the person across the table from you, and the beauty of the question is that it gives you lots of opportunity for follow-up questions so its easy to determine if the candidate is being honest.

This makes it really easy to separate the wheat from the chaff.  Some candidates don’t do anything to stay current, or say that they a book that is 10 years old (and can’t remember anything about it.)  Others tell me that they follow tech. news, read blogs, contribute to open-source, utilize twitter.  Its easy to see when someone has passion and pride for the work they do.

That all being said, while I am trying to evaluate the candidate for the job, I’m also hoping that they will give me good ideas for how to improve my own content consumption pipeline.  I am constantly striving to become better as a person, as an engineer, and as a general technologist.  Scouring the Internet is one way to find new technology and new ways to learn, but you typically need people to reframe your vision or to open your eyes to new possibilities.  I’ve learned a lot from interviewees.

So, in the spirit of sharing, I wanted to take the time out to document how I consume content and try to stay relevant and learn new things.  Hopefully in exchange, I can get some great ideas from readers.

Step One: Content Acquisition

The first stage of the process is content acquisition.  I try to cast a pretty broad net here.  Google Reader is my savior here.  I get feeds from a ton of place including web comics (SMBC, XKCD), tech news (TNW, Wired), Lifestyle (Uncrate, Acquire), individuals blogs (Bad Astronomy, Al3x), and individual post discussions for interesting posts, or posts that I have commented on so that i can follow the conversation and continue to participate.

In addition to blogs I also keep TweetDeck running and try to dip into my Twitter stream a few times a day to see what is happening (lots of stuff comes from @hnfirehose, some of it is good, some of it is junk but you can quickly separate the wheat from the chaff.)  I really love Instapaper and how it integrates into Twitter for iPhone.  I use the Instapaper bookmarklet and hook it up on my iPhone so that when i find something good i can save it to read later when I have time to focus on reading.

I also learn about a lot of new things from co-workers and friends via word of mouth, from books (I keep a list of books I want to read (tech and otherwise) on Goodreads), and magazines (I really like Communications of the ACM.)

Step Two: Content Shaping

Step one results in a lot of data to sift through, so I try to go through my Google Reader every day and clear out everything.  I will read or skim some articles right then and there, but for the most part I take the articles that I think are interesting and I save them in Instapaper.

Step Three: Content Consumption and the Feedback Loop

Once I have pruned all of that content into something that is roughly manageable it typically ends up in Instapaper.  At first I wasn’t sold on Instapaper but, as I outlined above, i’ve come to depend on it.  I like that I can use it on almost every device I have and that on my iPhone I can download and archive articles for reading on planes, etc.

I try to find 30 minutes or 1 hour each day to actually read through the stuff that has gotten into Instapaper.  This doesn’t always happen so I end up with a sizeable backlog that I try to manage.  Some of the news related items “go stale” and just get removed but many of the technical articles will be good whenever I do get to them.  When I find a blog article I really like or I think would be interesting to people I know i share it.  Sometimes this is personal emails, sometimes it is Twitter, sometimes I note it in my Google Reader public stream.  When I find a blog I really like via a Hacker News article or through a cross-link I typically add it to my Google Reader so that I can follow that writer in the future.

When I comment on blogs I always add the blog post’s comment stream RSS to my Google Reader so that I can keep up with the conversation.  I set up a specific “Conversations” tag in my Google Reader for these.  After a few weeks (or whenever the conversation dies down) I remove these.

Step Four: I’m pretty sure that I forget a lot of good things!

Once i’ve gone through and perused the stuff that seems interesting and dug into the stuff that is really interesting some of it gets put to use immediately, some of it sticks with me, some of it embeds itself deep in my brain and comes out at random times (“hey, i saw a plugin that does that.. let me google and find what it was”) and some of it is just lost.  I think that most of what I lose are individual libraries and things that I’d like to try but have no immediate use for.  I’d love to be able to put these things in my toolbelt, but I don’t have a good place for them that I use regularly that is searchable.

So… How do you stay current?  How do you keep up to date with the latest libraries and technologies in fast growing communities?  Two place that I think would be great to learn from that I want to focus on improving are attending local user groups, and contributing to open-source.

How do you keep this stuff from slipping right in to one ear and out the other?  Do you have a repository that acts as a final resting place for things that you have no use for immediately but that you want to use in the future?  How do you search it?  How do you organize it?

Help me out!

  • Arved Sandstrom

    Before I comment specifically, let me say that you writing this kind of article, amongst others, ties in neatly with your “Developer Dad’s Manifesto” article. In my opinion there are a lot of developer parents out there who parrot what you said in that other article, but they do not actually walk the walk when it comes to their career. I work with a lot of them. Those folks do not exhibit any passion at all, they surely do no professional development (employer time or own time, it does not matter) or it is not sinking in. They – none of them – maintain a personal technical blog, and they – none of them – are concerned about managing incoming information, because they do not bother to acquire any in the first place.

    Having said that, I will explain what I do. I am considerably older than you are, so kids are not in the picture. But I do like my outdoor activities and hobbies, so I have got interests outside software development also.

    I do a fair bit of speculative programming. I run across something I should know more about, or want to know more about, I start designing and coding. I will generate dozens of Proof of Concept (POC) or Proof of Technology (POT) projects like this every year. Some are throwaways, some become long-lived experimental test-beds.

    I maintain a home developer notebook that faithfully records all this work, exactly parallel to the notebooks I keep as a software consultant. If I was interested enough in something, when I read about it, to actually pursue it, it behooves me to describe the work I did with it.

    I also maintain an electronic document (in practice one for each home computing device) where I keep a list of interesting links, with short summaries of why I think it is interesting, and carefully chosen search tags. Every morning I wake up early enough to give myself at least 30 minutes of quiet downtime with the first coffee of the day, and that is when I read my Code Project Daily News, my InfoQ, my ServerSide, my ACCU mags, Dr Dobbs, scan favourite blogs, and check out MIT Technology Review and IEEE Spectrum and ACM Queue. I also have the luxury of not having to commute with my car, so I can read some more on the bus and on the ferry…twice a day.

    When I read an interesting article, something I want to retain and reference, into one of my electronic lists it goes. It is XML format, so I can search the list more effectively.

    It is not exactly about staying “current”, really. Not in my opinion. It is more about staying “relevant” and “informed”, and “current” input is just one datafeed. Historical information as to what you did, and what you thought was interesting, 2 years ago, or 5 years ago, or 10 years ago, is just as important. After all, a problem that comes up today is very possibly one that you sort of considered and researched five years ago.

    One reason I go to these lengths is because I am a software consultant. I have to hit the ground running. The more “ready mix” solutions that I have got in my toolchest, the better positioned I am to help out a client. But I do recommend keeping a personal developer notebook for everyone, and I recommend some form of list of links and topics of interest. Finally, there are folks out there who keep hundreds or thousands of code snippets in their IDEs or in ECMs or in databases: I will not discount that because effectively I accomplish the same thing by having hundreds of exploratory projects in personal version control.

    Last but not least, I read software development books. Sometimes programming books, like Alexandrescu on “Modern C++ Design”, or Vandevoorde & Josuttis on “C++ Templates”, or Chris Okasaki on “Purely Functional Data Structures”, or re-reading Bloch or Goetz, but more often I try to sink my teeth into good software engineering. Right now it is “Lean Architecture” by Coplien and Bjornvig. A couple of months ago I was re-reading “Code Complete” by McConnell. Books like this are distillations of hundreds or thousands of the best inputs that you could discover on your own. So you must – I stress must – set aside time to read these references.

    It is not like all of this needs to be drudgery. You know, if you are up at the cottage relaxing in the sun with a cold one and a good book, no reason the book cannot be one of the above. If you are vegging on the couch watching NASCAR or NFL or NHL or footie, no reason you cannot have your laptop right there in front of the TV and be playing with a Java EE 6 application, or trying out some F# or Haskell. And like I mentioned above, if you commute by mass transit, leverage that time effectively – you could waste it by reading pop news, or you could make good use of it for some professional development.

  • Trương Xuân Tính

    Your way to stay up-to-date with the software industry is quite similar to me :)
    But I’m not sure if I am a good developer or not. That’s the reason why I keep reading technical blogs everyday. An infinite loop, I guess.

  • http://www.facebook.com/people/Richard-Tolar/1225352331 Richard Tolar
    • http://adamschepis.com Adam Schepis

      great pointers.  Slashdot fell of my radar some time during the Digg era and has been mostly replaced by other things.  I might give it another shot.