We are able to perceive only a tiny fraction of current events that are happening around us. Even given a narrow area of study, the rate of change eludes even determined observations.
A look at the present
Consider the realm of tech news limited to software, in specific web development. In this fairly narrow topic there is a buzz of activity which vastly out paces my ability to track. I keep tabs on a subset of developments in a few languages, several common frameworks within these languages, and a handful of the most popular database choices*. My source is social news filtering by following app/framework builders, startup CTOs/chief hackers and identifying the best posts and docs to batch read or refer to later with Frankencuration.
All of that information gets piped up the abstract stack to data which describes the current state of web development. It's obvious that I can't even grasp a complete picture of the present, how can I reasonably expect to predict the future?
The Pinhole, a symbol for absolute focus
In an unknown future landscape, we can consider only what is essential to a particular goal when charting a course. The Pinhole represents the rational limit of prediction. Don't try and exhaust resources predicting a complete picture of the future. Pay attention to specific areas you have the greatest influence over and observe the strongest macro trends in the industry.
I'll refer once again to the state of web development tools. A heuristic method focuses on mastery with only a single technology stack that has a high probability of being supported in 5-10 years. One language, one framework, one front end, and only a couple of databases. Optimal persistence layers usually require a couple of core technologies, like a relational DB and memcached, or a nosql cluster and redis.
Well I'm off to steer my pinhole towards gearing up ruby 1.9.2 and rails 3.0+ with ruby version manager (rvm) on an ubuntu desktop and a brand spanking new iMac. Mega props to Mike Clark for putting together a super clear and easy to follow walkthrough that also works pretty well for Linux distros.
What I skip over
(BIG) Note:
* = The languages/protocols I try and follow, ruby, javascript, and html/http/css along with light python and php. Beyond those few tools there are many more that I don't consider at all for web coding. There are also a broad collection of frameworks, servers, and databases which I don't read much about and many more that I likely haven't heard of.
Stuff I don't keep tabs on:
- languages: c/c++ (used for many years but never for web dev), c#, lua, f#, java, erlang, go, Haskell and lisps: scheme, arc, clojure
- frameworks: django, grails, play, most eclipse/netbeans plugins, and .net anything (I have to use it at work, and it's pretty bloated/poor). I'd like to read more about node.js with express or sammy but haven't found an app that demands it. There are many UI design frameworks I skip: GWT, Mocha. I'm curious about iOS (and Android) but no project has yet demanded that I dive in deeper than hello world for those platforms
- databases: Hadoop, BigTable, EC2, SQL, Postgres. I use Sqlite and Postgres through Rails' active record and via Heroku deployment but I don't follow them specifically
The reward for reviewing diverse languages is quickly recognizing design patterns to common problems. I also enjoy hacking around with open source applications developed with a variety of tools.