Sunday, January 30, 2011

"Battle Hymn of the Tiger Mother"

I just finished this book, which is the full book version of the "Why Chinese Mothers Are Superior" article in the WSJ.

The book by itself is quite entertaining, with a lot of humorous stories of Amy Chua's struggles to balance the Eastern vs. Western styles of raising children in America.  She does bring up several good points in the book about how it's a good idea to be tough on kids (I won't elaborate on them, the main points are in the original article and a previous blog post).  There are also some fun interjections on the issues of raising children in a mixed-cultural environment (as Amy's husband is Jewish) and combating the temptations of TV and Facebook.

I came upon an article that Larry Summers (President of Harvard) began debating Amy Chua on this issue at the World Economic Forum.  I liked this quote in particular:

“It is not entirely clear that your veneration of traditional academic achievement is exactly well placed,” he said to Ms. Chua. “Which two freshmen at Harvard have arguably been most transformative of the world in the last 25 years?” he asked. “You can make a reasonable case for Bill Gates and Mark Zuckerberg, neither of whom graduated.” Demanding tiger moms, he said, might not be very supportive of their kids dropping out of school.

It's a good point. Personally, I've always viewed the upbringing more as a question of risk vs. reward. If you raise children more carefree, you'll sometimes get a Bill Gates, Ernest Hemingway, or John Lennon. That's really good. If you raise children the tough and strict academic way, you may not get as many Mark Zuckerbergs, Paul Simons, or Steven Chus, but you'll have a lot more good accountants and scientists. In other words, the Bill Gates and Mark Zuckerbergs of the world are the exception. Statistically, dropping out of college is not a good idea.

As a person who's done a lot of CS recruiting during his career, I can say that there are definitely not enough good computer scientists to go around. Every CS recruiter at virtually every tech company I know of has had trouble finding good candidates.

As a non-parent, I'm not sure what the best thing to do is. Some balanced approach is probably best.

Update (2/1/11)

Saw this editorial from one of Amy Chua's daughters in the NYpost. An interesting read.

Update (2/13/11)

This topic just want die in the blogosphere. A comment ...

I can't remember who said it or where I read it (I'm sure it's been quoted many times), but there was a quote that goes something like "The reason this has generated so much press is that many people consider this an attack on the way "Western Mothers" have raised their children. They subsequently feel the need to defend themselves and their parenting methods. However, deep down inside, many of those parents know Amy Chua is right."

I think it's a great point. I think many people are taken aback from the comment that we might be "doing something wrong." We want to believe we've been doing things the "right way" for a long time and naturally wish to defend that idea. However, when we see other countries education test scores go up or the economies of other countries growing faster than ours, deep down we probably are a little scared that maybe we have been "doing something wrong" for awhile.

Add in the fact that Amy Chua regular calls her parenting a "Chinese Mother" style is another factor. If Amy Chua had been a "Korean Mother" or "Thai Mother", most probably wouldn't have cared. By calling herself a "Chinese Mother", Amy Chua is (in)directly commenting on the reasons for China's rise in economic might, and many people are scared of it.

I've been thinking about how I might eventually raise my child someday, wanting to give my child creative freedom (e.g. be a "Western Mother") but not go "Tiger Mother" on them. I don't think eliminating TV is a good idea for a child (pop culture by itself is interesting). But perhaps, I could make my child write a "TV report" (like a book report) after watching a TV show. Or perhaps make my child write an episode of the TV show. In other words, you can watch TV, but you can't watch TV just to be lazy.

Saturday, January 29, 2011

IBM's Watson

For those who haven't seen this video of Watson whooping folks at Jeopardy, it's incredible.



This promotional video from IBM is quite interesting (and not too overbearing with marketing snazz).



The early Watson tests at 1:40 are particularly interesting.

I'm not an AI person by trade, but I have read rudimentary text on the difficulty of natural language processing. Watson seems to handle this absolutely amazingly, along with its incredible data mining. The problem space Watson handles is a tad dwindled, in that they can tune Watson for Jeopardy style language, but it's still very impressive.

Then there's the question of what IBM can do with this technology. IBM will certainly try and create Q&A systems to see to companies, such as medical institutions where doctor's can use a Watson to help determine medical illnesses better.

However, there is another sector that some feel IBM could enter and be far more profitable, building a search engine (err "answer engine") to take on Google. Affectively do what wolframalpha.com has attempted to do. Once in awhile I go to wolframalpha and try it out, but end up being disappointed. If IBM could build an "answer engine" of high quality, they could steal a nice chunk of search traffic away from Google, Bing, etc. I don't know what percentage of search queries are really Q&A queries, but I can't imagine it being tiny.

Friday, January 28, 2011

"Who Moved My Cheese"

I picked up this book at a book sale for a buck. I had seen it on enough bookshelves to warrant interest.

I'm glad I found it for only a buck. This isn't to say that it's bad. The book tells a small parable featuring anthropomorphic mice, and how the mice deal with challenges and change in their lives. Surrounding the parable is a fake dialogue amongst old highschool friends, how the parable reflects changes in real life, and how to handle those changes. The fake dialogue between friends is absolutely awful. However, the overall point of the story and book isn't too bad. It didn't particularly move me, but I can see some people liking it. It's certainly not worth the $19.95 cover price or ~$12 on Amazon.

I like to compare the book to Fish!. Fish! is a similarly short book featuring a fiction story about finding happiness (Who Moved My Cheese ~ 90 pages, Fish! ~ 100 pages). Fish! is far better written and more entertaining. While it is fiction, Fish! involves people and real jobs, so the story was more meaningful (and at a minimum I could relate to).

Saturday, January 15, 2011

Codility

I happened upon a website called Codility (codility.com) awhile ago. It's a website where employers can test candidates for a programming job through a programming "test" system of sorts.

On their blog, they have an interesting post (which points to another thread) titled, "Is Codility Fair?" The main point of contention is whether the "Codility System" is a fair mechanism for testing the programming abilities of a candidate. If the programming test description does not give enough detail on what is required, is it the fault of the programmer for not programming something properly?

The debate is on what a fair set of assumptions every programmer should make when writing their code. For example, is handling corner cases always a fair assumption? Is writing optimal code always a fair assumption? Codility suggests these are a set of assumptions that all good programmers make. If a programmer doesn't assume them, they are a weaker programmer.

Generally speaking, I agree with Codility's sentiments. However, where is the line drawn? What assumptions are reasonable for a person to have and what aren't? Is it setup in a manner that can actually help differentiate a good programmer from a bad one? I took the Codility demo test for a whirl to see how the system works. These are my impressions and some thoughts.

1)

I consider the test interface slightly unfair and bordering on bad. At the bottom of the programming test interface is a button called "verify". It tells you if the code you've programmed has passed or failed a set of test cases.

To me, this button strongly suggests that once you pass the verification button, you have passed the test and are done. However, this is not the case. There is an additional button called "submit task". After you submit your code, your code is then executed against additional test cases. You are then given a grade based on your results (if this was a real test from an employer, you wouldn't see the grade results).

I feel that this is a confusing interface. I believe many people will assume they've completed the assignment when they have in fact not. My first time through the demo I implemented a cheap and quick solution (normally I go back and optimize afterwards, the first pass is just to wrap my head around a problem). When I saw that I passed the tests via the "verify button", I went ahead and clicked "submit task" believing that I had passed the test and there was no need to continue. I wasn't aware that I would be given an additional grade. If you're taking a test from an employer you won't even see the grades, and will just assume you're done.

The lesson learned is if you are about to take a programming test on Codility (or a similar website), go through the demo and learn about how their system works before taking a test from an employer.

2)

The instructions are not unfair, but I have a hard time believing that the Codility System is properly setup to handle all possible interpretations and assumptions. Or in other words, it's a fair system, just not a good one.

As an example, suppose a question is asked to write a function called mystrlen() that measures the length of a string. Which of the below handles the NULL pointer corner case correctly?

int mystrlen(const char *str) {
    if (!str) return -1;
    /* ... rest of code */
}

int mystrlen(const char *str) {
    assert(str);
    /* ... rest of code */
}

I would argue that either of the above handles the NULL pointer corner case perfectly fine. Unless the description states specifically which one Codility wants, which one is correct? Will Codility accept either one as a solution?

Of course, one can also argue that not checking for NULL is fine as well. After all, the standard GNU libc implementation of strlen() doesn't check for it. My recollection is that most libc implementations don't check for it. It's defined (by Posix?) as undefined behaviour and documented as such. Would the following be considered something by a poor programmer?

int mystrlen(const char *str) {
    /* documentation states str behavior undefined for NULL */
    /* ... rest of code */
}

(Update: I originally screwed up the examples above by having the functions return size_t's. Those are unsigned types, so I changed it to ints. I suppose having a prototype returning a signed vs unsigned could suggest how a corner case could/should be handled, but please don't nit-pick on that point, think of the general argument in its entirety.)

3)

After the test is completed by job candidates, what does Codility give the employer? Do they give the employer the actual code submitted by the candidate? Or do they only give the employer a grade?

One commenter said that Codility gives employers a report something like this:

Candidate Bob: 100%
Candidate Sam: 100%
Candidate Joe: 100%
Candidate Max: 98%

So it looks like Bob, Sam and Joe will get an interview, but Max is out of luck. Those 2 percentage points are hardly enough to suggest that Max is a poorer programmer than the others. Given the issues I describe above under #1 and #2, I would bet that several poorer scoring programmers could have been equally skilled but just made a few incorrect assumptions. They weren't bad assumptions, just not the assumptions Codility wanted.

4)

After taking the demo test, I couldn't help but think of the famed Barometer Question. Does Codility want you to answer the question? Or do they want you to give them the answer they want? I'm leaning towards the later. That's why in-person programming questions (or even IM sessions) are really the best way to do a programming interview. You can deal with all the assumptions and see how the person really programs. As with the mystrlen() example above, the candidate can explain their assumptions and elaborate on why they made their assumption.

However, I believe Codility could be used as a general weedout mechanism. While I do not believe a 95% truly differentiates someone who scored a 90%, I do believe that someone who scored a 95% is better than someone who scored a 5%. Whenever I ask programming questions during an interview, the goal is not to determine if a candidate is a good programmer or an incredible programmer. The goal is to determine if the programmer is a terrible programmer or not-terrible programmer. I think that's the way employers should approach using Codility.

Update (1/28/11):

I suddenly had a thought. Is Codility treating the candidate like a customer treats a software developer/vendor? After mulling over it, I think the answer is no. With a customer, an engineer/developer has a set of requirements to meet. The requirements may not always be known ahead of time, so assumptions can be made about them. However, ultimately you are coding towards those requirements. Even if you are a brilliant programmer, some portion of Codility is testing your assumption making capabilities, not your coding or engineering ability.

Is testing assumption making capabilities proper for evaluating a candidate? I think it's a perfectly valid judgement of a person's engineering ability. However, I don't believe it is under a Codility system. As I describe above, there are many valid and good assumptions, it may not simply be what Codility wanted and how it will grade you. Subsequently, a recruiter from a company won't see your assumption making abilities. All they see is a score.

Sunday, January 9, 2011

"Why Chinese Mothers Are Superior"

I happened upon this article and thought it was really interesting.

"Why Chinese Mothers Are Superior"

I believe Amy Chua is exaggerating her points. I believe a more balanced approach is the most optimal way to raise a child. In fact, most "Chinese Mothers" I know (including my own) adopted a more balanced approach. For example, they realized that sports have some positive benefits for team building and self esteem (and you can add a blurb onto your college application).

However, the over-dramatization is probably done to illustrate the difference from the other extreme, which is the parent that is overly casual and relaxed with the upbringing of their children. Back in the early 1990s, when Japan was kicking America's ass economically, a number of politicians went over to Japan to try and figure out what was going on. After getting back to the states, one politician on TV said something to the affect of:

"In America, if Johnny isn't too smart, mom and dad are happy if he gets a C. In Japan, if Johnny isn't too smart, Johnny does more homework to make sure he can get an A."

It's a quote I remember very fondly because I think it's quite true. I never considered myself to be a particularly sharp knife in the drawer, but I believe all the extra programming assignments, self-induced textbook readings, and extracurriculars did pay off in the end.

Despite not being a "mom" (let alone a parent) I'm intrigued enough to pick up Amy Chua's book, "Battle Hymn of the Tiger Mother". It seems like it'll be an interesting read.

Sunday, January 2, 2011

Random Tech Predictions

Back in 2008 I told my boss and various co-workers that IBM was going to acquire Sun. I mentioned it my boss because I thought we should think of the consequences it could have on us and ponder what we might do in the event something "bad" happened. While I ended up being wrong (Oracle won the bidding war), I was close :P

To stroke my ego in the event I'm right about something, I'm going to go ahead and make some tech predictions based on the things I'm reading online and my own perceptions. In the event I'm wrong, hopefully not enough or my friends read this so I won't be embarrassed :P

Android Surpasses iPhone and Blackberry in Smartphone Market Share

Android has been on a tear. Last I've read, they were nipping at the heals of iPhone and not too far away from Blackberry. I wouldn't be surprised that they overtake iPhone just after this past holiday season. 2011 is the year they put iPhone and Blackberry away. I'm saying this will be true even if the iPhone comes out on Verizon.

Chrome OS Bombs

As much as I would like to see Chrome OS succeed, I don't think Google is entering the OS market in the right way. Their Android strategy was great. They made many of the negative things about the iPhone better. However, they're introducing Chrome OS into the relatively niche netbook market, which is already under attack from the tablet market. I'm skeptical the strategy is going to work out.

Kinect Becomes Huge

Microsoft has not had a hot gadget for years, but it appears that's over. Kinect has been selling like hotcakes this past holiday season. I read somewhere that it was on pace to sell 6 million units in less than 2 months. That's despite the fact that there are only a modest set of games and software that come with it.

With my belief that Chrome OS will bomb and Apple apparently doing iterations on older products (e.g. iPad 2), I'm going to predict that Kinect will become the gadget of 2011. Rumors are (and I'm going to bet they become true) that Windows 7 support is on the way. I'd bet there will be some really cool software that will come out for it, such as movie editing, painting, digital puppetry, etc.

Salesforce Stock Plummets

I'm a big fan of Salesforce, I think it's an incredible company with great products. However, their current valuation is at 17-18 billion and a P/E ratio of 240. Yes, 240! I'm the farthest thing from a financial expert, but it looks like they'll perhaps have a 25-30% increase in revenue, maybe 20-25% increase in operating expenses, and maybe 5-10% increase in net income over the last year?? This is what gives a company a 240 P/E ratio? With Microsoft, Oracle, and other companies gunning for Salesforce, I have a hard time believing they can drive revenue and profit to justify they current valuation. I'm wondering if the hype over "cloud computing" is simply making people giddy over Salesforce's stock.

Ok, those are my four random predictions. We'll see how I do :-)

Update (1/15/11):

I totally forgot about the Nintendo 3DS. That thing is going to mega-huge too. Due to supply-chain issues, probably not as big as Kinect sales wise, but possibly as big buzz-wise.