- Posts tagged tools
- Explore tools on posterous
Tools for Reading, wRiting and aRithmetic
The 3 Rs are the basis of education. So fundamental are these skills I inevitably use, improve and enjoy them daily. The tools needed to perform them vary, but I currently favour the following:
Reading: Amazon Kindle
Like the Portable MP3 Player's effect on music collections, portability has changed the way I consume writing. I often have three books on the go (programming for work, something educational and a novel), I read as I walk to work and have the kindle within reach pretty much the entire day. I still have plenty of physical material, but having my entire library at hand is a real luxury. I'd be very surprised if the momentum of e-reading doesn't equal that of portable audio soon. The kindle is simple, light and lacks the distractions offered by more complex devices. Mix in some Slow-Media philosophy: using long-form reading tools like Instapaper and custom Hpricot scraping scripts, you can read web-content away from the distractions of a PC.
wRiting: Squared Whitelines Notepads (1 A4 Wire Bound, 1 Pocket), Pencils and a Kum Automatic Longpoint Sharpener
Notepad and pencil are a simple, effective, low-tech, way to record ideas. Electronics are fragile (Kindle included), transient and, comparably, hamstrung by their inputs. Tablets may be improving, but drawing and writing are elegantly straight forward and tactile the old way.
I like to have a slim, pocket, notebook to hand at all times for quick use. Moleskin's Cahire and Field Notes are great, but, to me, Whitelines are the best match with an HB pencil for readability. An A4 pad is essential for prolonged note making. I prefer squared paper as it suites diagrams, notes, equations and can be used in any direction.
I'm still experimenting with pencils (recommendations welcome), although most HBs will satisfy (I know many readers will have favourite pens, but there is a unique charm to the humble wood and graphite pencil). It is the sharpener that I think makes the largest difference, thanks to Brendan Dawes, I've discovered that Kum's Automatic Longpoint Sharpener is a cut above any other I've used. Seriously, you may scoff but it's properly cool.
aRithmetic: HP-12c Finance Calculator
My wife rolled her eyes at discovery of my HP-12c finance calculator. It looks dated, for the uninitiated, the reverse-polish input is hard to operate and it's expensive (compared with bog-standard models). But this calculator is a classic, a design that has barely evolved in the last 30 years. It hasn't changed because it doesn't need to. Scott Locklin gives a better account than I, and the mechanical Curta could be a worth contender, if I could get my hand on one.
These tools all have a certain low-tech appeal, even the kindle. They feel like a gentle antidote to the hectic computing environment in which I spend most of each day. Although the HP-12c and Kindle are digital, and require power, they do not flicker, beep or emit light - and are, largely, dependency free (provided the Kindle is amply stocked). In combination, I feel that they could provide a life-time's worth of insight and enjoyment. Throw in a reliable solar charger and these tools could make a desert island a very enjoyable place to be marooned.
Which Language Combination?
I'm trying to be a better programmer. I have been writing and learning as much code as I can, the benefits are a threefold positive feedback loop:
- Learning is, in itself, very pleasurable (it makes you feel clever, which is nice)
- New knowledge transfers to, and enhances, existing skills
- New tools and skills provide a greater resource for providing solutions
But, how does a developer know which skills to learn and which languages are best to learn with? (Assuming that you're learning for fun rather than as a work requirement.)
If Google is a good bench mark (assuming that they can take their pick of the best developers), one requirement (taken from an ad for a Software Engineer) asks for:
Fluency in two or more of C, C++, Java, Shell, PHP, Perl or Python.
If you are specifically aiming for a career at Google then making sure you are fluent in two major languages is probably the way to go, and there is certainly no downside to a developer broadening their skill set. In my experience, each foray into new languages has improved my PHP, and in turn, I feel pretty comfortable in Ruby and Python.
When deciding to learn something new: you could argue that PHP, Ruby, Python, Perl etc... are pretty much different brands of the same tool (procedural, interpreted languages). It's great to have the option to use each, but these languages are not necessarily complimentary. It is unlikely that you would write a system with a combination of PHP, Python and Ruby. But, it is conceivable that you could have a project requiring C, PHP and Erlang skills.
Rather than learning interchangable skills, complementary languages might offer the opportunity to become a more rounded developer:
- Interpreted, procedural (PHP, Ruby, Python, JS)
- Compiled, procedural (C/C++, Java)
- Functional, concurrent (Erlang, Scala, F#)
Assuming that side stepping between similar languages is easier than picking up a completely new concept: it would seem learning these varied skills opens up more possibilities.
Sometimes I worry that by learning a particular, none mainstream, language (like Erlang) I could be backing the "wrong horse". However, bearing in mind my earlier ramblings, there's little downside to picking up a new way of doing things, for example Elang may not prove popular, but the functional approach will give me a head start learning F# or Scala.
This slide from Painless Payment Processing by Erik Stenman points out other benefits of learning more "unusual" languages:
Nice paradox:
The lack of Erlang programmers makes it easier for us to find great programmers.
- There are many great C and Java programmers, I'm sure, but they are hidden by hordes of mediocre programmers.
- Programmers who know a functional programming language are often passionate about programming.
- Passionate programmers makes Great Programmers
Or am I talking nonsense?

