Archive for March, 2007

There is this thing I call “the threshold.” The concept of “what is this thing I keep hearing about?” More formally: how many times I have to hear about something before paying attention to it.

Though it may seem to contradict my last post, I then put emphasis on the importance of the topic. Knowing the words of a language you use is important. Keeping informed about the field you work in is also important. But not everything is.

Qualitatively, the threshold formula would look something like this:


I like to explain the threshold by telling people how I found out about bittorrent. I had been on a few news site and I had come across a few references about bittorent in the comments. That was in the very beginning of bittorrent, before “everybody” started using it, and that’s one of the main point. I used the google and moments later, realized what all that rising noise was about. The threshold is a measure of the “buzz”, what is happening out there in the world.

One of the reason I like to talk about the threshold with people is that

  • they usually relate and start discussing the details of their methodology with me
  • having a common terminology for this concept is quite useful

Next time you hear someone mention that a certain topic hit “the threshold,” you know exactly what they are talking about and you know you should be paying attention too.

Read Full Post »

I have been in the habit of printing articles I find during the day so I can read them on the way home. One day last week, one of my colleague asked what I was taking with me that night. He was a little surprised by my answer: man find.

A few years ago, I had been told that when it came to learning a language, especially if it was your own, you should never ignore a new word. I won’t try to convince you that you should learn a language well because of pride, although I find it to be a very good reason. From a strictly practical point of view, there isn’t a better opportunity to learn than while in the context. It also seems obvious that incremental increases to your vocabulary should have a tremendous impact on language skills over time–a process I would like to compare to compound interest.

For the sake of nomenclature, I shall name this technique “systematic research.”

After you start applying the principle of systematic research to the English (or other) language, you might realize that this idea can be extended to other aspects of your life–in particular, to your professional life.

Back to my original story, the reason I was after man find was because I had been faced with the question “how can I get a list of files sorted by modification date?” That specific question originated from the more general “what files have I modified lately?”

I won’t discuss the command itself, partly because it wasn’t the point of this post and partly because I’m planning to talk about it in a future post.

find . -type f -printf '%T@ %p\n' | sort -n

When it comes to learning and becoming an expert, I try to find the “pain points”–the gray areas I am not comfortable with and focus on them. If, over time, there are less and less blind spots, you start feeling a lot better about the body of knowledge that you have accumulated.

This is all very much related to one of my favorite blog post: How to be an expert. I strongly recommend you read it for yourself, but the main idea is that the difference between an expert and an amateur is the willingness to push one’s boundaries and to try new things. This was also one of the main point of My Job Went to India.

The whole concept of systematic research is that you should not let questions you have go unanswered. I make a point of writing down my questions, keeping track of them, and finding answers. That’s why I read man find on my way home: to be a better person. :)

Read Full Post »

My feeds caught up with me and I found myself reading a few articles about BDD—Behaviour Driven Development. In essence, this is nothing new, just a new perspective, and terminology, for TDD—Test Driven Development. But things are more real when you say them out loud.

BDD is a developer’s coming of age with respect to TDD. I’ll restate, in my own words, the BDD levels of enlightenment you should achieve:

You write tests

  1. to check that your code works
  2. to ensure that changes don’t break anything
  3. to clarify what you don’t need
  4. to document how to use the code
  5. to clarify what you need

It’s hard to explain the value of writing tests to people who don’t. Hell, it’s hard to keep believing even when you have experienced it firsthand.

One thing that I keep going back to is “wishful thinking.” They talked about wishful thinking in SICP as a design methodology. Instead of “going away” and writing some potentially complicated piece of code, just assume it exists and start using it. Then, after your “client” code is completed, fill in the blanks. Remember that you can recursively apply this process while you are filling the blanks. I believe that this is exactly what point #5 above is all about.

Still in the BDD vein, I found RSpec. RSpec turns your tests into the spec. This makes a lot of sense when you think that good tests should be based on the spec. I followed the tutorial, but I recommend you skip to the last page to get an idea of what your test suite could be like.

Like all good ideas, BDD seems obvious in retrospective.

Read Full Post »