How to RTFM – Tips for a life of discovery

22 Nov 2011 – Houston

My friends and I have often discussed the topic of programmer education. The idea is that programming is somehow unapproachable or favors a certain rare learning style. I can sympathize with this perspective. At the same time I feel that learning how to approach the unapproachable is somehow at the core of becoming a good programmer. The name of this all-important technique is RTFM.

Update: RTFM T-Shirts now available. Spread the euphoria!

Everyone was a newb at some point. Chances are some jerk in #latest-fp-language told you to RTFM and that rubbed you the wrong way.

Well, I’m here to tell you that RTFM is like “Amen!” (or “So say we all!” for you BSG fans) for programmers. These kind souls are just trying to remind you of your commitment to reading TFM which should be no less than religious.

Why RTFM?

First, I really recommend reading Vivek Haldar’s article comparing GUIs and CLIs. This is soul food for the aspiring reader of TFM. Internalization is critical for programming. It’s the only thing that separates effective from ineffective programmers. Your goal is to get as much of your daily required knowledge into your brain-RAM as possible. You do not want the syntax of your language of choice or the switches to grep to reside on disk or on the network somewhere.

RTFM forces you to think about what you’re trying to do, and understand the tool you’re using to do it. It also allows you to discover other tasks that the tool might help you with. It is my experience that this extra processing forces one to actually, uh, think?

The Rules of RTFM

These are simple rules that should guide your daily RTFM practice. The goal here is not to simply get things done—we want to get things done and have learned (internalized) new techniques that will help us next time.

Rule #1: Do not Google (or DuckDuckGo) first

Google is a great tool. Google will match you with the guy who had your problem and show you exactly how he solved it. However, Google Is Not Your Friend.

The reason is this: once you’ve found the one-liner that will get you going and you’ve copy-pasted it into zsh, you’re done. That’s it. Google has deprived you of your quality time with TFM.

Using a pure RTFM strategy, the voyage of self-discovery is something like:

  1. Think about what you’re trying to do or why you’re getting that error.
  2. Remember a similar tool or experience you’ve used before.
  3. Read TFM for that tool or related tools.
  4. Discover new techniques or ways to apply your tools.

Google is the deus ex machina of the programming world, punching plot holes in your epic rise to RTFM stardom. Google has weakened your ability to solve problems by jumping straight to discovery. If you absolutely have to Google, then make sure you also take time to understand the results of your Googling and how you might have found the answers through a more organic process.

Rule #2: Do not settle for an example

When people say that humans learn best by example, they really mean that humans avoid learning when they have examples. This is because examples enable one to employ tools without really understanding how they work.

Try to avoid learning things in opaque chunks. If you’re working with the shell, make sure you’re learning what the a, u, and x switches do in ps aux. This means man ps followed by tinkering with the various options until you develop a satisfying freedom of movement along the various axes of the command.

If you’re working from a big section of code, try changing it and seeing what happens. Make sure you can account for each part of the code. Seeing a chunk of code as an indivisible unit is buying a season pass to that same old article on Stack Overflow for the magical incantations.

Rule #3: Sometimes the code is TFM

Not all projects have great documentation. That being said, most of the projects I use have docs in the decent to awesome range. For example, I would consider Android docs better than decent. I’d consider the FreeBSD handbook to be awesome. Most of the programming languages I use are very well-documented.

Hopefully the documentation for your project captures all behavior that is intended to be public. That still leaves a couple of reasons why the code itself may be the best or only documentation for a piece of software.

It’s my guess that writers read much more than they write and filmmakers watch many more hours of film than they produce. A programmer has to read code well especially now that most programming work consists of correctly using libraries and services written by others. In any case, code reading is sometimes the only way to figure out what received software does and how efficiently it does it. Don’t have the code? Try replacing that component with one of these.

Rule #4: Question your questions

It’s a little-known fact that TFM will answer any question you pose it—as long as it’s the one that TFM was written to answer. It’s like one of those movie kung fu teachers. You’re going to be chasing the chicken and waxing on and off until you man -k up and start asking the right questions.

This generally requires knowledge that won’t be cited, linked, or in any way communicated by TFM. You’re not going to understand a language spec without understanding what the heap and the stack are. Insensitivity to the strangeness of one’s questions is the most difficult obstacle to overcome in RTFMing, and it’s also the most likely to be solved by contact with another human being.

Still, resist the urge to talk with someone. If you need some release, open a shell and echo into /dev/null or tell your barber. After much confusion, much RTFMing and some good luck your brain will turn inside-out and you’ll have an epiphany.

Maybe.

Although artists often learn by copying other artists, we programmers are often in the rather fortunate position of having manuals available. This article explains why we should RTFM and [imho] it should be required reading.

Coding Guidelines: Finding the Art in the Science

Nice article : Coding Guidelines: Finding the Art in the Science

Using MEF 2 with ASP.NET MVC 3 blogs.msdn.com

This looks quite promising.

Media_httpwwwcodeproj_dzfkm

Nice article on WPF and MVVM on CodeProject

I talked to a former colleague and friend today, asking if I had seen any options for choosing who to show on the Google+ profile/home page.

The concern was that there might be contacts that one would not “show off” or allow some discretion by not showing everyone in all your circles. I had to dive in and check for any such options and I found what I was looking for.

To turn off or select which circles to show you need to take 4 small steps in Google+ :

1. Click your name in the upper right corner and select “Account settings”

Selection_003

 

 

 

2. Now click “Profile and privacy”
Selection_004

 

 

3. Scroll down and click the “Edit network visibility” button.

 

Selection_005

 

 

4. Now there should pop up a window like below and you can choose which circles to show or hide and whether anyone on the web can see it.

 

Selection_006

 

 

It seems, at least to me, that Google has taken the privacy matter seriously on this bit. You just need to be aware of how you want to organize your circles and people and choose your privacy settings carefully and wisely.

 

I for one, love the concepts of Google+ and I think this looks really promising.

TEDxOslo impressions

Posted: June 20, 2011 in Uncategorized
Tedxoslo_mobile

Last week’s TEDxOslo (june 16), was in my humble opinion a great success. As the first official event in Oslo, with the theme ‘from ideas to action’, they had come up with some really great speakers with great talks. That said, I wish some of the norwegian speakers could have improved somewhat, both in presentation and rehearsed some more english speaking – the content was good.

I’ve been following TED.com and seen quite a few talks there. I was looking forward to enjoy some TED.com feeling up close – it has always struck me that the events seemed to have this atmosphere of enthusiasm, passion, great ideas and a interested crowd listening and participating.

I got all that and more. One of the talks that hit home was Angela Morelli on water. Her enthusiasm and great visualizations let me understand the challenges we have and got me thinking – I haven’t got around to actions yet…

With mingling and dinner after the sessions everyone had the opportunity to talk to the speakers. At dinner, I had the pleasure of exchanging some words with Sturla Ellingsvåg who is behind the Global Movement for Human Rights.

In the end, I hope there will be more TEDxOslo sessions – I had a memorable day and evening.

You can find the recorded talks at the TEDxOslo event pages.

Summer in Oslo

Posted: June 3, 2011 in Uncategorized
1556132680

Nice, hot summer day in Oslo.

mobl web page

mobl - easy mobile web development

An article on InfoQ got my attention a couple of weeks ago : “mobl : a DSL for Mobile Web Development“. I’ve been tinkering a bit with Android applications, but I acknowledge that there are other platforms out there. With “mobl” you can create mobile web apps in a snap. Check out the tutorials and documentation. This couldn’t be done any easier.

I played around with the tutorials and examples and it struck me that it would be nice to embed a web application into a native Android application – eliminating the need for a web url to get the application as well as having the app available when not on-line. With Android’s nice browser widget this turned out to be a breeze. I’ll follow up with some code in my next post, but for now – check out the goodies at the mobl site.

New theme!

Posted: March 30, 2011 in Uncategorized
Tags:

Whoah! Found this amazing WordPress theme (“Greyzed”) and found that I needed a change (and some more posts – will follow up shortly).