Drawn In


I have always felt that a key to becoming more competent in any field is to watch experts while they do their job. This is true for two reasons. Firstly,  experts have optimized their knowledge and procedures through mental automation, they are able to do many important things unconsciously. Secondly, experts don’t notice what they do unconscioulsy so they will rarely instruct others to do it.  This is actually why experts are so poor at writing documentation of processes, because so much of what they do is unconscious.

One goal I have had lately is to improve my creative journal skills. Spending the last five year in the design side of research and product development I have come to appreciate the power of the sketchbook or journal in the creative process. But journals tend to be very private, and experts develop very different strategies for their journals. Fortunately there is a trend under way for more creatives to post excerpts from their journals and sketch books online versus just publishing their final products. I hope this trend will continue. I have recently seen several books that provide a curated version of this trend. One of the recent books I have enjoyed is Drawn In by Julia Rothman. It provides a peek inside the sketchbooks of 44 fine artists, illustrators, graphic designers, and cartoonists.

I really enjoyed this book and the diversity of styles that it provides. It is inspirational to see the roughness of the ideas that are worked through in the journals and the fun and creative content mixed together on pages to work through an idea. I feel my own sketching of ideas has already improved from studying the contents of the book.

There are other related books: The Illustrated Life and Graphic: Inside the Sketchbooks of the World’s Greatest Graphic Designers. Another interesting book is The Creative Process Illustrated, not exactly a sketchbook, but a book where various creative directors, art directors, and advertising copywriters discuss and sketch their creative process.

Why Don’t Students Like School

Let’s start with the fact that  Why Don’t Students Like School by Daniel T. Willingham is a good book. I read it cover to cover. It didn’t have  the bloat common with research papers turned into research books, there is no hint of filler here. This book has depth. I am not a expert in education, however I believe you will find much of the information informative for the author’s intended purpose (education, students, learning, and intelligence).  I found it useful for its very accesible cognitive neuroscience insights related to attention, memory, and cognition.  I often have to present innovative new ideas and concepts to executive teams (who were likely the ADHD students of their day) and drive towards tough but informed decisions on products. This seems like a rational and logical process but it rarely is;  even smart people rarely really listen and instead snap to judgment based on past unrelated experiences. I am always looking for techniques to really achieve information transfer, and it is interesting to read through a book like this that relates it back to core models of learning. The book provides excellent insights as to why a room full of smart people can all have completely different take-aways from the same presentation and discussion. Willingham’s proposed approaches to teaching seem very relevant to many situations where new information is exchanged, learned, and used.

Willingham explores how classroom lectures could be improved to target the items you want the students to be thinking about, instead of leaving it to random chance.  This is equally important in creating any presentation or pitch. Especially when you are covering new and innovative topics. The unfortunate fact is, neuroscience shows us that we humans are lazy thinkers by nature, our brain can burn through massive amounts of glucose when we are consciously thinking hard, and so we tire and get that light headed feeling quickly when fully engaged. We prefer to let our unconscious take over and we go on autopilot and let our fuel efficient pattern matching brain engage;  words and images sending us off on a random walks down threads of thought and memory. This book explains what that means for improving education, but the information can be applied in so many other situations.

This is a very exciting time in brain research with new technologies and techniques shattering long-standing beliefs about intelligence and how the brain works.  Why Don’t Students Like School is built on a foundation in the latest cognitive neuroscience research and will really make you think about how the brain works and why many practices in education ignore key facts related to how we learn and think. It also will make you think about what people really need to know in order to be smart rather than accept the cop-out view that it is all in the genetic roll of the dice.

Willingham’s tretise  on learning adopts a model of intelligence that changes with effort, study, and practice and thus he sees intelligence as more influenced by effort than genetics. The genetics may play a role in the brain’s dopamine reward system for problem solving, which explains why some children are more interested in learning, but even this seems to be mutable with practice. He provides a lot of information and research for more effective techniques that should be tested in classrooms to better engage students. It seems many of the findings are equally applicable to workplaces. Modern workplaces are lifelong learning environments and some of the lessons should be able to be adapted to inspire a workforce to achieve more by working smarter, and to create more effective presentations, meetings, and work environments.

The synopsis….

  1. Anyone can wire their brains to be more intelligent, intelligence is more about what you know and how well you know it.
  2. Long-term memory is the vast store of knowledge about the world. It can be abstract or concrete. All information in long-term memory resides outside awareness. It must enter working memory to become conscious. Long-term memory also has procedural knowledge.
  3. Successful thinking relies on four factors: information from the environment, facts in long term memory, procedures in long term memory, amount of space in working memory.  If any one of these factors in inadequate, thinking will likely fail.
  4. Overloads to working memory are caused by such things as: multistep instructions, lists of unconnected facts, chains of logic more than two or three steps long, the application of just learned concepts to new material.
  5. “Memory is the residue of thought” – There are many aspects to any situation and what we remember is what we were thinking about in the moment. If I am thinking about the speaker’s appearance this is what I will remember.  If I am thinking about the tone in her dialog, I will remember the her attitude, not what she said. If I am thinking about the meaning of her words, this is what I will remember. Many people do not focus on what they are thinking about and thus miss the opportunity to remember and learn the important things.
  6. Objects and situations can have many aspects of meaning and thus people may have differing memories. Examples of meaning I may remember are emotion,  cost,  purpose,  position, mass, presence, or context (“CEO is here!”)
  7. If you are using meaning in remembering and in recall, your will remember more effectively.
  8. “Understanding is remembering in disguise” - Understanding new ideas is mostly a matter of getting old ideas into working memory and then rearranging them. Making comparisons we hadn’t made before or thinking about a feature we had previously ignored.
  9. Understanding has levels of comprehension (shallow/deep). Understanding in the classroom may not transfer to the outside world. (lack of transfer)
  10. It is virtually impossible to become proficient at a mental task without extended practice.
  11. The lack of space in working memory is a fundamental bottleneck of human cognition. However, through practice many operations can be made automatic, so they do not burden working memory at all.   One example is our use of the rules of grammar & syntax, once learned we rarely think about them to use them. Experts perform many complicated tasks both mental and physical without burdening working memory.
  12. Often we practice initially to gain a minimum competence. We continue to practice to gain proficiency. But we should in some cases continue to practice for three reasons: It can help mental process to become automatic, it makes memory long lasting, and it increases the likelihood that the learning will transfer to new situations. Building blocks of knowledge should be automatic.
  13. Children do differ in intelligence, but intelligence can be changed through sustained hard work.

Willingham makes a strong case that we naturally try to avoid thinking, we rely heavily on automaitic process and memory for our actions during the day. Automatic process is autopilot mode, like driving home from work. You brain may be occupied thinking about your day, or what you need to do later, but the driving portion is automatic. Automatic processes are mostly based in memory, perception, and the unconscious brain. It turns out we can learn to do many things automatically, and we naturally prefer this mode because doing things in our conscious mind is very draining. In fact it seems the entire field of behavioral economics related to decision making is based on this quirk of our brain. We would rather not have to think, but rely instead on past patterns from our memories to make rapid judgements versus really evaluating the current problem or situation. Expertise is having achieved a level of automation in you field through much practice, where you can perform very complex work automatically and unconsciously.

Willingham discusses the conscious cognitive process and the serious limitations caused by very limited working memory. People with even slightly enhanced working memory (genetic most likely) are at a great advantage, but knowledge is the second way to get around this issue. The more abstract concepts, heuristics, etc one has in their memory the more effective their working memory can become. This is because various bits of information can be chunked into a single symbol, freeing up working memory to process more items.

Willingham also covers long-term memory, the vast store of knowledge about the world, both abstract or concrete. All information in long-term memory resides outside awareness. It must enter working memory to become conscious. I find this part fascinating because with the readily available information on the web we are tempted to not waste time memorizing things, with a preference for looking them up. But this seems to be the opposite of what the brain needs because to avoid overloading working memory we need to create patterns and heuristics from information and not start over relearning the basic facts each time. Perhaps more importantly, for us to think, we need information in our long term memory, not on a web page. Food for thought.

Great book, I highly recommend it for anyone who has a brain (and wants to use it more effectively).

 

 

 

Quote

A friend of mine once said that there are problems and there are difficulties. A problem is something you savor. You say, “Well that’s an interesting problem. Let me think about that problem a while.” You enjoy thinking about it, because when you find the solution to the problem, it’s enlightening. And then there are difficulties. Computers are famous for difficulties. A difficulty is just a blockage from progress. You have to try a lot of things. When you finally find what works, it doesn’t tell you a thing. It won’t be the same tomorrow. Getting the computer to work is so often dealing with difficulties.
Ward Cunningham


Quote

To be shaken out of the ruts of ordinary perception, to be shown for a few timeless hours the outer and the inner world, not as they appear to an animal obsessed with words and notions, but as they are apprehended, directly and unconditionally, by Mind at Large -- this is an experience of inestimable value to everyone
Aldus Huxley

How to Measure Anything

During my sabbatical I have had the opportunity to advise a number of people I have worked with in the past who are starting companies. In the past few years my role has been that of a director of both design and R&D teams and so I enjoy continuing that type of role in providing direction to these exciting new startup ventures, as well as providing guidance to some new ventures inside of HP.

One thing  many of these early phase projects lack is clarity and proper measurement of the problem and opportunity. They also often have only a vague sense of their relative probability of success given their chosen direction versus alternative approaches.

Lately a lot of new startups tend to point to some fuzzy “user experience” as their advantage, and why they will succeed. As a design director I know that this is B.S. and even design and user experience contributions can be measured to a reasonable degree of confidence.

More times than I care to say, I have pointed teams to read and practice the techniques in How to Measure Anything: Finding the Value of Intangibles in Business by Douglas Hubbard.

The first response is always, “Read a book, are you serious” — yes I am serious, this is a good book and for many people it provides some very important tools for success around estimation and prediction. If you learn and use this on your projects it will become automatic for you, and require little thought. It just takes practice.

Here are just a few key excerpts to motivate you to read it:

There are three reasons why people think things can’t be measured, all are misconceptions about different aspects of measurement: Concept, Object, and Method.

1. Concept of Measurement. The definition of measurement itself is widely misunderstood. If one understands what measurement means, a lot more things become possible.

2. Object of measurement. The thing being measured is not well defined. Sloppy and ambiguous language gets in the way of measurement.

3. Methods of measurement. Many procedures of empirical observation are not well known. If people were familiar with some of the basic methods, it would become apparent that many things thought to be immeasurable are not only measurable but may already have been measured.

Hubbard does a good job of making it clear that these three misconceptions are easily overcome, and you can learn to measure anything quickly. More importantly perhaps, you will end up with a better defined question or problem through the process of identifying measures.

He uses a definition of measurement based on uncertainty  that is very powerful, echoing Shannon’s information theory of entropy:

Measurement is a quantitatively expressed reduction of uncertainty based on one or more observations.

By framing measurement as “uncertainty reduction,” Hubbard has solved the problem for many people who get stuck thinking of measurement as an impossibly exact science. For as Hubbard points out, even inexact measurement is valuable if it reduces uncertainty by some non-trivial amount. This is especially true when investment in the project is high.

He spends several chapters on techniques for determining what to measure and how, and then get’s into what I found to be a great exercise for teams.  It involves calibration of estimation for team members. By evaluating how calibrated people are at estimation (usually not!) we can get the team to understand they they need to improve, and more importantly with the right tools they can learn to be quite proficient at estimation. Having this skill will help them in many ways in their day-to-day work.

Hubbard  discusses the terrible misunderstanding and misuse of risk management in business and R&D projects. You know, the Low/Med/High values people put on their slides. He instead prescribes the use of basic confidence intervals and shows the reader how to use them.

A simple example is his test of confidence.

For a given question you provide a range you believe has a 90% CI. For example you say with 90% confidence the module will take you 2-3 days to code, unit test, and submit to system test. Or the wireframe will take you 3-6 hours to update, get reviewed, and hand to engineering.

Then ask yourself this: Suppose I offered you a chance to win $1000 in one of two ways:

1. You win $1,000 if you your estimation turns out to be correct. If not, you win nothing.

2. You spin a dial divided into two unequal “pie slices,” one comprising 90% of the dial and the other just 10%. If the dial lands on the large slice, you win $1,000. If it lands on the small slice, you win nothing (i.e., there is a 90% chance you win $1,000).

About 80% of people choose option 2, but why would this be if their estimate is of 90% CI or higher. In reality they probably are more like 50%-80% confident. For those who choose option 1, it could also mean they are over 90% confidence but being conservative in estimating, this can be equally undesirable.

This is the Equivalent Bet test. You should try to set up a mental test like this when assessing confidence and if you pick the wheel then keep lowering the win percentage on the wheel (80%, 70%, 60%, …) until you don’t pick the wheel, that will tell you your real confidence in the answer. Research shows turning it into a bet (real or pretend) increases the quality of the estimates.

People who are very good at accessing their uncertainty (i.e. they are right 80% of the time they say they are 80% confident, etc.) are called calibrated.

That is just a few teasers, but I highly recommend Hubbard’s book for anyone involved in complex  endeavors whether on their own or in teams. You will find problems are more clearly articulated once you have  figured out how to measure it; having good calibration in estimation will also significantly reduce your project risk and improve your decision making significantly.

There was a recent question on Quora: Why are software development task estimations regularly off by a factor of 2-3? That I believe is true because of teams not doing proper analysis, but also it is a multiplier effect of bad estimation across a team. Because of interdependencies of teams these estimation errors can cause huge estimation errors when rolled together.

Get the book: How to Measure Anything: Finding the Value of Intangibles in Business

 

 

Quote

Every creative act involves … a new innocence of perception, liberated from the cataract of accepted belief.
Arthur Koestler

NY Times using d3 for visualization

I am always impressed with the New York Times visualization department, and noticed that they are using the d3 library for their visualizations. Their most recent is a visualization of the Obama Budget Proposal.

New York Times Obama Proposed 2012 Budget Visualization

 

I have been doing some work in R lately and utilizing its visualizations capability, but am left wanting to explore more powerful options from a design perspective. We looked at d3 last year in my design team as we were developing the first release of the HP design system toolkit we had released internally. We ended up not including visualization in the scope of the first generation UI toolkit, so we had put the d3 investigation on the back burner for a while. But now that I have some time I have started to look at the library and it looks pretty solid.

It is javascript based and utilizes SVG and CSS selectors, so it leverages any web knowledge you already have in that area. I like its declarative approach and the way it binds data with SVG.  I will post some code samples when I have them running.

 

Simple nokogiri screen scraping example

 

I have had the need to scrape various data lately and went looking for a good ruby library to make it quick and easy to write small code snippets for grabbing the data I need. I found the nokogiri ruby gem to be exceptional for this purpose.  I also found a selector gadget that pinpoints the  CSS selector you need to grab a data item. You could also use Google Chrome’s Inspector, but this gadget is super easy to use.

Prerequisites:

1. Make sure Ruby is installed on your machine, if you are a OS X or Linux user you should be set (Windows user will have to Google instructions for Ruby and Ruby Gems installation)

2. open a console window

3. sudo gem install nokogiri

4. Got to the selector gadget website and follow the drag-n-drop instructions for installing the bookmarklet.

Here is a quick example

 

First we need to get the CSS selector that we will use to pull data out of the page.

Let’s look at the page below which is from the following URL: http://www.trackinfo.com/dog.jsp?runnername=noble+sky

Greyhound Dog Info Page

Greyhound Dog Info Page

 

One cool thing about adopting a retired racer is there is data on the web about your dog. Each retired racer is uniquely identified by two strings of data. In their left ear is a tatoo that represents their litter id, in their right ear is their position in the litter. In this case my retired racer was born in litter 46422, and his right ear tattoo (28E) indicates that he was born on Feb 2008 (28), and was the 5th pup born in the litter (E). Not that useful but a fun fact.

Note: if you are interested in adopting a retired racer please check out the web site of an adoption group in your area, they really are the best dogs. I have some greyhound info on a pintrest board.

So today let’s scrape and print the name of any retired racer that sent to the script, and also use the litter id (left ear tattoo) to list the names of all of the litter mates.

This will take two requests, one for the dog info, and one for the litter info.  The litter information web page  looks like this…

Greyhound Litter Information Page

Greyhound Litter Information Page

 

Using the Selector Gadget

1. In your browser go to the first URL: http://www.trackinfo.com/dog.jsp?runnername=noble+sky

2. click on your “SelectorGadget” bookmarklet in your bookmark bar.
3. Click on the number to the right of the Left Tattoo label, it is 46422 in my example.
4. You should see a green highlight on the item you selected and a lot of yellow on other items. We will see later with the litter page that this approach of selecting more than where you clicked makes sense if what you wanted was multiple like items in a table. Here we only want the number we selected so next click on the yellow boxes until they turn red leaving only 46422 highlighted in green. (ignore the yellow associated with your cursor moving around).
5. If you did this correctly (and they haven’t changed the web page structure since I wrote this) you should see the selector in a small box near the bottom of your browser that lists the selector: tr:nth-child(2) .it2 a
CSS Selector
Now that we have a selector lets look at the code snippet for scraping the page
# Code Snipet for demonstrating the use of nokogiri
# The code will look up yor retired racing greyhound by its racing name
# And return info about your dog as well as a list of its litter mates.
#

require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'uri'

# Use the dog's name for lookup of dog information
dogname = ARGV[0] || "Noble Sky"
get_dog_info_url = "http://www.trackinfo.com/dog.jsp?runnername=" + URI.escape(dogname)
dog_doc = Nokogiri::HTML(open(get_dog_info_url))

# Get the left ear tag which is all the litter id for identifying all litter mates.
left_ear_tag = dog_doc.css("tr:nth-child(2) .it2 a").text
name = dog_doc.css("h1").text
right_ear_tag = dog_doc.css("tr:nth-child(2) .it4").text
starts = dog_doc.css(".detail-wrap tr:nth-child(4) td:nth-child(2)").text
dob = dog_doc.css(".it4 em").text
sex_color = dog_doc.css(".it2 em").text
sex = sex_color[0,1]
color = sex_color[6,4]
sire = dog_doc.css("tr:nth-child(1) .it2 a").text
dam = dog_doc.css(".it4 a").text

# Look up all litter mates
get_litter_info_url = "http://www.trackinfo.com/dog-search.jsp?keyword=" + URI.escape(left_ear_tag) + "&by=ltattoo"
litter_doc = Nokogiri::HTML(open(get_litter_info_url))

puts("Your Dog: ", dogname, "has the following siblings:")
# Parse the resulting document for key data elements.
# Then print the info to the console.
litter_doc.css(".item-table tbody tr").each do |tr|
    if tr.css(".name").text.casecmp(dogname) != 0
      puts(tr.css(".name").text)
    end
end

 

You can grab the snippet of code from GitHub Gist and save it to a file called gh_lookup.r, or just copy and paste from the snippet below to your favorite editor to try it out.

 

The first part of the code is the call to get the dog information page.

1. This is pretty straight forward. Use the argument passed in as the dog name, or “Noble Sky” if no dog was passed in.

2. Create the url string making sure to escape the dog name using the uri gem.

3. Request the document using the Nokogiri gem.

 

In the next section of code we simply parse out the items we want using the CSS selectors we got using the SelectorGadget earlier. The first is the left ear tatoo that we calculated. There rest you can verify yourself.

 

 

The final section of code

makes another call using the Nokogiri gem to get a list of dogs from the identified litter (46422), and a loop to print out information about each of the dogs.

 

Run the ruby script in your console window:

That’s is it, pretty easy. Don’t let a the lack of a clean API stop you from getting data when it is this easy to grab what you need.

Possible Additional Steps:

Simply printing to the console is not very useful. For real projects you probably want to store the data somewhere. I typically take two paths

1. Store the data as objects in a persistent store like a sql database. In this case you would use the data to create “Dog” objects. In rails the Dog would be a model, and this code could go in the model for Dog.create() or possibly Dog.find() if you were using find like a cache where you check your DB first and only if it wasn’t there you performed the scraping.  This live scraping isn’t always  such a good idea for a live multiuser service, but works well for many cases.

2. Lately I have been using a NoSQL database for this type of data collection.  CouchDB is my choice usually because it has a web interface to the db. CouchDB is a document databases, so you could save dogs as documents, and then query them later. For this case you would probably also save a litter document, which would serve to connect the dog hierarchy if it included all dogs born in the litter and the dam, and sire.

 

Javascript Alternatives

If you prefer Javascript to Ruby you probably want to use NodeJS with jQuery for achieving the same goal. If I get a chance I will create and post a version written in NodeJS/jQuery so you can see that version as well. The nice thing about NodeJS is your code is written just like in the client side so you are creating skills and talents that work on both the front and backend.