Sometime back, I was reading a chapter in a book (I think it was The Tipping Point by Malcolm Gladwell) describing the comedic depth of the writers on Sesame Street. At first, I was a little surprised by the comments. How in the world is Sesame Street sophisticated comedy? The chapter describes how the writers of Sesame Street added a lot of humor into the show to make sure adults would like it too. Back when Sesame Street first came out, most families only had one TV, and it was believed that parents wouldn't let their kids watch Sesame Street if it wasn't entertaining for adults.
I had not seen an episode of Sesame Street since I was a child, but had to confirm the argument. Sure enough, now as an adult, I can see a lot of the subtle humor in Sesame Stret that I never would have seen before. Here are some hilarious ones I found for Cookie Monster.
Clearly, tons of parody of the Today Show. I love Cookie Monster's line of, "Where this guy come from?"
I don't think this last one is from Sesame Street, but I imagine the writers setup the interview responses and the lines are hilarious.
Cookie Monster also has a hilarious breaking of the 4th wall in the beginning of this video:
Here's a hilarious interview w/ NPR
And I can't forget about Cookie Monster's classic Stephen Colbert interview
http://www.colbertnation.com/the-colbert-report-videos/174545/june-19-2008/cookie-monster
Pages
▼
Thursday, December 29, 2011
Sunday, November 6, 2011
3 Nights in August
After going through the thrilling St. Louis Cardinals World Series ride and sadly seeing Tony Larussa retire, I was compelled to read this book. I needed something to feed my Cardinals high. I remember hearing about the book after the Cardinals won the World Series in 2006, so it's sort of fitting I read it now.
WARNING: THERE WILL BE SPOILERS IN THE BOOK HERE
For anyone who loves Moneyball, it's a great follow up. Tony Larussa is famed for his deep use of statistics for managing situations and creating matchups. However, unlike (as Buzz Bissinger calls them) Moneyballistas, Larussa feels that the statistics can only take you so far. He believes that there is a deeper component beyond it that can't be measured, things like confidence, focus, or stubbornness.
As an example, most sabermetrics fans believe that saves and the use of a specific 9th inning closers is completely overrated. It would be no less effective to have a rotating group of relievers pitch the 9th inning. However, Larussa feels that the a 9th inning closer is necessary for a confident bullpen and morale. Nothing can demoralize a team or bullpen more than losing in the ninth.
I love the individual tales of baseball plays and players told in the book. While the managerial problems are discussed in the context of baseball, they are good examples of how to manage (or not manage) in any profession.
My favorite tale is how Tony Larussa once yelled and took out his frustrations for a loss on Cardinals utility man John Mabry. While Tony later apologized to Mabry, he believes Mabry lost confidence in him, leading him to perform poorly. It's a parable that could mapped to virtually any environment. How many times does an employee become scared or bothered by a superior? So much so that the employee begins to watch their back or just wish to avoid trouble, rather then doing what is best?
There are tons of parables in the book that could mapped to regular jobs: building up the confidence of younger players, getting players on board with a plan, making your players trust you, defending your players, motivating players, etc. There are tales of jealousy between players, players being stubborn, and emotion or lack of focus that everyone can relate to.
Unlike Moneyball, I'm unsure how much non-baseball fans would like this book. It is clearly a baseball book. As a Cardinals fan, there is also a soft spot in this book for me that non-Cardinals fans may not appreciate. I know most of the players described in this book from articles and TV. I knew most of the stories in it at a high level (death of Darryl Kile, issues of Rick Ankiel), so it was very interesting for me to learn the subplots and details.
WARNING: THERE WILL BE SPOILERS IN THE BOOK HERE
For anyone who loves Moneyball, it's a great follow up. Tony Larussa is famed for his deep use of statistics for managing situations and creating matchups. However, unlike (as Buzz Bissinger calls them) Moneyballistas, Larussa feels that the statistics can only take you so far. He believes that there is a deeper component beyond it that can't be measured, things like confidence, focus, or stubbornness.
As an example, most sabermetrics fans believe that saves and the use of a specific 9th inning closers is completely overrated. It would be no less effective to have a rotating group of relievers pitch the 9th inning. However, Larussa feels that the a 9th inning closer is necessary for a confident bullpen and morale. Nothing can demoralize a team or bullpen more than losing in the ninth.
I love the individual tales of baseball plays and players told in the book. While the managerial problems are discussed in the context of baseball, they are good examples of how to manage (or not manage) in any profession.
My favorite tale is how Tony Larussa once yelled and took out his frustrations for a loss on Cardinals utility man John Mabry. While Tony later apologized to Mabry, he believes Mabry lost confidence in him, leading him to perform poorly. It's a parable that could mapped to virtually any environment. How many times does an employee become scared or bothered by a superior? So much so that the employee begins to watch their back or just wish to avoid trouble, rather then doing what is best?
There are tons of parables in the book that could mapped to regular jobs: building up the confidence of younger players, getting players on board with a plan, making your players trust you, defending your players, motivating players, etc. There are tales of jealousy between players, players being stubborn, and emotion or lack of focus that everyone can relate to.
Unlike Moneyball, I'm unsure how much non-baseball fans would like this book. It is clearly a baseball book. As a Cardinals fan, there is also a soft spot in this book for me that non-Cardinals fans may not appreciate. I know most of the players described in this book from articles and TV. I knew most of the stories in it at a high level (death of Darryl Kile, issues of Rick Ankiel), so it was very interesting for me to learn the subplots and details.
Sunday, October 30, 2011
Where will Albert Pujols go and how much can he get?
The question that's on everyone's mind is where Albert Pujols will go and how much he can get.
I think there are a few contracts to look at to really get a gauge of the type of contract Pujols can get.
Alex Rodriguez, Age 32, 10 year $275 million
Adrian Gonzalez, Age 28, 7 year $154 million
Mark Teixeira, Age 28, 8 year $180 million
Ryan Howard, Age 30, 5 year $125 million extension
Ryan Howard's extension was given to him after he had completed 1 year of a 3 year contract. So to some extent, the extension is really a contract for Ryan Howard at age 32, not 30.
First, lets look at the Adrian Gonzalez, Mark Teixeira, and Ryan Howard contracts. Together the three average about $23 million a year, with Ryan's howards $25 million/year the highest. I suppose we can use this as a measurement for what an elite first basemen has been able to obtain over the last few years. Albert Pujols is certainly in a class above these first basemen, so one can reason that he can obtain a premium above these players.
However, there are a few differences between Albert Pujols and these first basemen. Albert Pujols turns 32 in January 2012. Mark Teixeira and Adrian Gonzalez were able to obtain their lengthy contracts at an age 3-4 years younger than Albert Pujols. Ryan Howard's 4 year extension perhaps gives an indication of the hesitation teams may have in giving an older first baseman a 7-8 year contract.
On the other hand, Alex Rodriguez was able to receive his 10 year contract at the age of 32, the same age as Albert Pujols. At the time he received the contract, Alex Rodriguez was arguably the best player of his generation and had just won his 3rd MVP. So perhaps its Albert Pujols could get a similar contract?
I have scepticism Albert Pujols can obtain a contract of such magnitude. The baseball marketplace will be much different for Albert Pujols than it was for Alex Rodriguez. First, the two highest spending teams, the New York Yankees and Boston Red Sox, have already secured long term contracts to elite first basemen (Mark Teixeira and Adrian Gonzalez respectively). While its always possible those teams may attempt to move those players or attempt to sign Albert Pujols as a DH, the odds are low. With the Yankees and Red Sox presumably out of the picture, it takes two big spending teams off the market in the Albert Pujols sweepstakes.
In addition, the marketplace may not be willing to suffer giving a player in his early 30s a 10 year contract after baseball saw how injuries have affected Alex Rodriguez. In 2011, we saw Alex Rodriguez hit only 16 home runs over 99 games and eek out a measly .823 OPS. Certainly not the production you expect from a player you're paying $27.5 million for.
So taking into account the current "market rate" for elite first basemen, Albert Pujols' success, age, and the removal of the Yankees & Red Sox, it stands to reason that Albert Pujols can get a contract that is better than the other elite first basemen, but less than the Alex Rodriguez contract. If I had to guess, Albert Pujols will get a 8 year contract in the range of $210-$230 million. (As a note, it is rumored the Cardinals offer during the 2011 spring training was 9 years for about $190-$200 million.)
Naturally, that's a conclusion is based on some amount of logic and reason. What can't be determined is if some team will go crazy with a contract. That's the one thing that will be difficult to determine.
So where will Albert Pujols go? Well presumably, the team that signs him will:
A) Need a first basemen or could move their current first basemen
B) Has the financial resources to sign Albert Pujols
C) Has the organizational fortitude to offer such a contract
Based on these criteria, which are the teams that I think have the best shot?
California Angels - Could use a big upgrade over Trumbo. Have signed Torii Hunter and Vladimir Guerrero in past big moves.
Chicago Cubs - New ownership might like to make a splash and take away Albert Pujols from their rivals. Theo Epstein and crew are not shy to big signings. An issue for the Cubs is the lingering big contracts on their roster.
Los Angeles Dodgers - Assuming the financial issues of the owners is settled (it apparently is), could make a run.
San Francisco Giants - A team badly in need of offense. Their signings of Barry Bonds and Barry Zito show the willingness to make a big move.
St. Louis Cardinals - The question is how high will the rest of the league go. If Albert Pujols gets something crazy, its unlikely the Cardinals will bite.
Washington Nationals - When I was first told they could make a run at Pujols, I laughed. But now that I think of it, there's a decent chance. They have shown the willingness to spend money, and while the team isn't a serious contender now, they were 80-81 last year and have a good group of young players.
Teams I don't think it could happen with despite chatter on the topic:
New York Mets - With all their financial issues related to Madoff, my feeling is the Mets can't make a run at Pujols like they normally might try to go after big free agents.
Atlanta Braves - Financially have the resources, but traditionally this organization doesn't go crazy and try to make huge moves.
Baltimore Orioles - Financially good resources, probably organizationally could make the move, but I have a funny feeling Albert Pujols wouldn't want to go to the AL East. The odds of making it to the playoffs ever again are just that much worse when the Yankees and Red Sox are in your division.
Texas Rangers - The fit is good, they could use an upgrade to first base, and they've shown the willingness to throw around money (Cliff Lee). However, I would assume they will go after pitching instead. They got so many good bats in that lineup that more offense isn't a concern.
Well, it'll be an interesting off-season. I'll update this post when we figure out the answer.
Update 12/8/11:
Well, my guesses were pretty on spot on. The push by the Miami Marlins was a tad unexpected, but the players involved were pretty well known. Albert Pujols got a little more many than my guesses, $254 million.
I think there are a few contracts to look at to really get a gauge of the type of contract Pujols can get.
Alex Rodriguez, Age 32, 10 year $275 million
Adrian Gonzalez, Age 28, 7 year $154 million
Mark Teixeira, Age 28, 8 year $180 million
Ryan Howard, Age 30, 5 year $125 million extension
Ryan Howard's extension was given to him after he had completed 1 year of a 3 year contract. So to some extent, the extension is really a contract for Ryan Howard at age 32, not 30.
First, lets look at the Adrian Gonzalez, Mark Teixeira, and Ryan Howard contracts. Together the three average about $23 million a year, with Ryan's howards $25 million/year the highest. I suppose we can use this as a measurement for what an elite first basemen has been able to obtain over the last few years. Albert Pujols is certainly in a class above these first basemen, so one can reason that he can obtain a premium above these players.
However, there are a few differences between Albert Pujols and these first basemen. Albert Pujols turns 32 in January 2012. Mark Teixeira and Adrian Gonzalez were able to obtain their lengthy contracts at an age 3-4 years younger than Albert Pujols. Ryan Howard's 4 year extension perhaps gives an indication of the hesitation teams may have in giving an older first baseman a 7-8 year contract.
On the other hand, Alex Rodriguez was able to receive his 10 year contract at the age of 32, the same age as Albert Pujols. At the time he received the contract, Alex Rodriguez was arguably the best player of his generation and had just won his 3rd MVP. So perhaps its Albert Pujols could get a similar contract?
I have scepticism Albert Pujols can obtain a contract of such magnitude. The baseball marketplace will be much different for Albert Pujols than it was for Alex Rodriguez. First, the two highest spending teams, the New York Yankees and Boston Red Sox, have already secured long term contracts to elite first basemen (Mark Teixeira and Adrian Gonzalez respectively). While its always possible those teams may attempt to move those players or attempt to sign Albert Pujols as a DH, the odds are low. With the Yankees and Red Sox presumably out of the picture, it takes two big spending teams off the market in the Albert Pujols sweepstakes.
In addition, the marketplace may not be willing to suffer giving a player in his early 30s a 10 year contract after baseball saw how injuries have affected Alex Rodriguez. In 2011, we saw Alex Rodriguez hit only 16 home runs over 99 games and eek out a measly .823 OPS. Certainly not the production you expect from a player you're paying $27.5 million for.
So taking into account the current "market rate" for elite first basemen, Albert Pujols' success, age, and the removal of the Yankees & Red Sox, it stands to reason that Albert Pujols can get a contract that is better than the other elite first basemen, but less than the Alex Rodriguez contract. If I had to guess, Albert Pujols will get a 8 year contract in the range of $210-$230 million. (As a note, it is rumored the Cardinals offer during the 2011 spring training was 9 years for about $190-$200 million.)
Naturally, that's a conclusion is based on some amount of logic and reason. What can't be determined is if some team will go crazy with a contract. That's the one thing that will be difficult to determine.
So where will Albert Pujols go? Well presumably, the team that signs him will:
A) Need a first basemen or could move their current first basemen
B) Has the financial resources to sign Albert Pujols
C) Has the organizational fortitude to offer such a contract
Based on these criteria, which are the teams that I think have the best shot?
California Angels - Could use a big upgrade over Trumbo. Have signed Torii Hunter and Vladimir Guerrero in past big moves.
Chicago Cubs - New ownership might like to make a splash and take away Albert Pujols from their rivals. Theo Epstein and crew are not shy to big signings. An issue for the Cubs is the lingering big contracts on their roster.
Los Angeles Dodgers - Assuming the financial issues of the owners is settled (it apparently is), could make a run.
San Francisco Giants - A team badly in need of offense. Their signings of Barry Bonds and Barry Zito show the willingness to make a big move.
St. Louis Cardinals - The question is how high will the rest of the league go. If Albert Pujols gets something crazy, its unlikely the Cardinals will bite.
Washington Nationals - When I was first told they could make a run at Pujols, I laughed. But now that I think of it, there's a decent chance. They have shown the willingness to spend money, and while the team isn't a serious contender now, they were 80-81 last year and have a good group of young players.
Teams I don't think it could happen with despite chatter on the topic:
New York Mets - With all their financial issues related to Madoff, my feeling is the Mets can't make a run at Pujols like they normally might try to go after big free agents.
Atlanta Braves - Financially have the resources, but traditionally this organization doesn't go crazy and try to make huge moves.
Baltimore Orioles - Financially good resources, probably organizationally could make the move, but I have a funny feeling Albert Pujols wouldn't want to go to the AL East. The odds of making it to the playoffs ever again are just that much worse when the Yankees and Red Sox are in your division.
Texas Rangers - The fit is good, they could use an upgrade to first base, and they've shown the willingness to throw around money (Cliff Lee). However, I would assume they will go after pitching instead. They got so many good bats in that lineup that more offense isn't a concern.
Well, it'll be an interesting off-season. I'll update this post when we figure out the answer.
Update 12/8/11:
Well, my guesses were pretty on spot on. The push by the Miami Marlins was a tad unexpected, but the players involved were pretty well known. Albert Pujols got a little more many than my guesses, $254 million.
Friday, October 28, 2011
John Kruk Interviews
Was wandering through YouTube looking at random baseball related videos when I came upon these two hilarious John Kruk interviews on Letterman. Classic Kruk ...
Wednesday, October 26, 2011
Android a stolen product? Yes and No
So after the death of Steve Jobs, a lot of his quotes from his biography have come out. One in particular stands out to me (this chunk is ripped from How Steve Jobs could haunt Android):
My parents asked me, "Do you think it's true?" My response was yes and no.
Yes, Android implemented some ideas from iPhone.
No, it's not a big deal and the issue is overblown.
There is a great quote I heard along time ago. I can't find it despite my Googling efforts, but it goes something like this:
"The vast majority of research and development is continual iteration and improvement on previous designs. There is very little innovation."
Was Apple Macintosh the first GUI based OS/computer? Nope. Multiple designs were done prior. In fact, there is evidence that Apple modeled Macintosh off of a previous Xerox computer.
Was iPod the first portable digital music player? Nope, there were tons before that played MP3s.
Was iPhone the first technology with a multitouch interface? Nope. It'd been done for years.
In my opinion, this is just what happens in the world of technology. Various companies "borrow" ideas from their competitors and they iterate and improve on them.
When did Facebook support newsfeeds? After Twitter became popular.
When did Google support +1 support? After Digg became popular.
When did Apple support multitasking in iOS? After Android released support for it.
We could go on and on ... This type of iteration has gone on forever. In my opinion, it's somewhat silly to suggest that Google "stole" from Apple, but Apple never stole from others.
To end, I'm reminded of this semi-famous scene in Pirates of Silicon Valley.
While this scene is fiction, I think the analogy is right on.
“I’m going to destroy Android, because it’s a stolen product,” Jobs told Isaacson. “I’m willing to go thermonuclear war on this.”
“Our lawsuit is saying ‘Google, you f---ing ripped off the iPhone, wholesale ripped us off.’” He also said he was willing to spend “every penny of Apple’s” then-$40 billion in cash to “right this wrong,” and he vowed to “destroy Android, because it’s a stolen product.”
My parents asked me, "Do you think it's true?" My response was yes and no.
Yes, Android implemented some ideas from iPhone.
No, it's not a big deal and the issue is overblown.
There is a great quote I heard along time ago. I can't find it despite my Googling efforts, but it goes something like this:
"The vast majority of research and development is continual iteration and improvement on previous designs. There is very little innovation."
Was Apple Macintosh the first GUI based OS/computer? Nope. Multiple designs were done prior. In fact, there is evidence that Apple modeled Macintosh off of a previous Xerox computer.
Was iPod the first portable digital music player? Nope, there were tons before that played MP3s.
Was iPhone the first technology with a multitouch interface? Nope. It'd been done for years.
In my opinion, this is just what happens in the world of technology. Various companies "borrow" ideas from their competitors and they iterate and improve on them.
When did Facebook support newsfeeds? After Twitter became popular.
When did Google support +1 support? After Digg became popular.
When did Apple support multitasking in iOS? After Android released support for it.
We could go on and on ... This type of iteration has gone on forever. In my opinion, it's somewhat silly to suggest that Google "stole" from Apple, but Apple never stole from others.
To end, I'm reminded of this semi-famous scene in Pirates of Silicon Valley.
While this scene is fiction, I think the analogy is right on.
Saturday, October 22, 2011
Albert Pujol's Other Epic Postseason Homerun
After Albert Pujols' epic night tonight (5-6, 3 home runs, 6 RBIs), I was reminded of his previous epic postseason home run. It wasn't in the World Series, but given the situation, it was perhaps more epic. It was game 5 of the 2005 NLCS. Houston was in the 9th inning at home on the verge of going to the World Series.
Brad Lidge was on the mound to close out the game. At this point in his career, Brad Lidge was nearly unhittable. In 2004-2005 Brad Lidge had a 2.07 ERA over 165.1 innings pitched and an insane 260:53 strikeouts:walks ratio. He was particularly effective in the playoffs and the Cardinals in 2004-2005. Prior to game 5 he gave up 1 run over 12 innings, striking out 18 against the Cardinals in the postseason.
Brad Lidge made quick work of the first 2 Cardinals in game 5, striking both of them out. So as you can imagine, the Astros fans were going nuts. They were one out away from going to the World Series and their Cardinals killer was on the mound. In the video below, you can even see George Bush Sr. and Barbara Bush in the first row behind home plate. Then David Eckstein eeked out a hit when the count was 1-2. Then Jim Edmunds worked a walked. Then this happened ...
Notice how Brad Lidge squatted down and realized it was a home run before even bothering to look at it. The ball was absolutely crushed.
While the Cardinals ended up losing game six and the Astros advanced to the World Series, people still remember this home run. Many feel that home run destroyed Brad Lidge's confidence and he was never really the same. He lost 2 games against the Chicago Whitesox in the World Series. In 2006 his ERA ballooned to 5.28 and he even lost his closer job in 2007. He was able to rebound with a great year in 2008 with the Phillies, but he never was ever quite the same again.
Brad Lidge was on the mound to close out the game. At this point in his career, Brad Lidge was nearly unhittable. In 2004-2005 Brad Lidge had a 2.07 ERA over 165.1 innings pitched and an insane 260:53 strikeouts:walks ratio. He was particularly effective in the playoffs and the Cardinals in 2004-2005. Prior to game 5 he gave up 1 run over 12 innings, striking out 18 against the Cardinals in the postseason.
Brad Lidge made quick work of the first 2 Cardinals in game 5, striking both of them out. So as you can imagine, the Astros fans were going nuts. They were one out away from going to the World Series and their Cardinals killer was on the mound. In the video below, you can even see George Bush Sr. and Barbara Bush in the first row behind home plate. Then David Eckstein eeked out a hit when the count was 1-2. Then Jim Edmunds worked a walked. Then this happened ...
Notice how Brad Lidge squatted down and realized it was a home run before even bothering to look at it. The ball was absolutely crushed.
While the Cardinals ended up losing game six and the Astros advanced to the World Series, people still remember this home run. Many feel that home run destroyed Brad Lidge's confidence and he was never really the same. He lost 2 games against the Chicago Whitesox in the World Series. In 2006 his ERA ballooned to 5.28 and he even lost his closer job in 2007. He was able to rebound with a great year in 2008 with the Phillies, but he never was ever quite the same again.
Friday, September 30, 2011
Getting Everyone On The Same Page
I was reading this article on TheDailyWTF.
http://thedailywtf.com/Articles/Get-to-da-COPPA!.aspx
Like many TheDailyWTF articles, it's a nice humorous story, but I love the last part of the story.
The short story is engineer Derek could not come to a reasonable compromise with engineer Steve on a solution to a problem. After many internal frustrations, Derek bypassed Steve's engineering team entirely, went to the software install team, and changed the install process for the software. The result? Derek implements his solution without ever involving the team that writes the software. The end of the article states, "Steve's team got to keep their constraint, and the customers didn't."
I love that last sentence.
"Steve's team got to keep their constraint, and the customers didn't."
The core engineering team will never see a setup (and will never know the setup for awhile) that the customers will always have. Long term, that can't be good.
While this is an extreme example, it got me thinking. How often do internal managers/staff not come to an agreement or get on the same page? As a consequence, staff begin doing whatever it takes to get the job done, bypassing teams, roles, procedures, etc. I think tiny versions of it happen all the time. Some amount of it we accept b/c we work with a lot of people, but how much of it can be made better?
http://thedailywtf.com/Articles/Get-to-da-COPPA!.aspx
Like many TheDailyWTF articles, it's a nice humorous story, but I love the last part of the story.
The short story is engineer Derek could not come to a reasonable compromise with engineer Steve on a solution to a problem. After many internal frustrations, Derek bypassed Steve's engineering team entirely, went to the software install team, and changed the install process for the software. The result? Derek implements his solution without ever involving the team that writes the software. The end of the article states, "Steve's team got to keep their constraint, and the customers didn't."
I love that last sentence.
"Steve's team got to keep their constraint, and the customers didn't."
The core engineering team will never see a setup (and will never know the setup for awhile) that the customers will always have. Long term, that can't be good.
While this is an extreme example, it got me thinking. How often do internal managers/staff not come to an agreement or get on the same page? As a consequence, staff begin doing whatever it takes to get the job done, bypassing teams, roles, procedures, etc. I think tiny versions of it happen all the time. Some amount of it we accept b/c we work with a lot of people, but how much of it can be made better?
Friday, September 16, 2011
Albert Pujols the Great
(Following up my post from earlier in the year.)
On May 29th, Albert Pujols saw his line for the year sit at
.257 BA, .326 OBP, .395 SLG, .722 OPS
Epicly awful for a man with a career line of
.330 BA, .424 OBP, .621 SLG, 1.045 OPS
at the time. Now it's September 16th. Albert Pujols just went 4 for 4 against the Phillies. His line for the year is now:
.301 BA, .372 OBP, .549 SLG, .921 OPS
This is simply stunning. After an brutally awful April & May (which likely included a hidden injury) Albert Pujols has performed well enough to get his batting average back up above .300 and have an OPS over .900. It's an incredible year by normal human standards, definitely subpar for Albert Pujols standards, but Albert Pujols' legend continues to grow.
On May 29th, Albert Pujols saw his line for the year sit at
.257 BA, .326 OBP, .395 SLG, .722 OPS
Epicly awful for a man with a career line of
.330 BA, .424 OBP, .621 SLG, 1.045 OPS
at the time. Now it's September 16th. Albert Pujols just went 4 for 4 against the Phillies. His line for the year is now:
.301 BA, .372 OBP, .549 SLG, .921 OPS
This is simply stunning. After an brutally awful April & May (which likely included a hidden injury) Albert Pujols has performed well enough to get his batting average back up above .300 and have an OPS over .900. It's an incredible year by normal human standards, definitely subpar for Albert Pujols standards, but Albert Pujols' legend continues to grow.
Friday, August 19, 2011
In twenty years, will I be the old timer that still programs in C?
I was speaking to someone at a party that told me COBOL programmers make a lot of money nowadays. Somewhat shocked, I asked how this was possible. His answer was simple. There's a ton of COBOL legacy software out there and very few out there who can work on it. Companies are paying up the wazoo to grab those few out there still remaining.
I recently participated in some interviewing events for recent college grads/soon to be college grad
s. It blew me away how few of the candidates had worked in C or C++. In fact, some barely even touched C/C++.
So I started wondering, will I be that rare C programmer in 20 years? I'll be the rare programmer who knows the ancient art of working with pointers?
I recently participated in some interviewing events for recent college grads/soon to be college grad
s. It blew me away how few of the candidates had worked in C or C++. In fact, some barely even touched C/C++.
So I started wondering, will I be that rare C programmer in 20 years? I'll be the rare programmer who knows the ancient art of working with pointers?
Tuesday, July 5, 2011
How It Should Have Ended
Sometime ago I came upon this series of hilarious clips on YouTube. The series is called "How it should have ended". Basically, it's how movies should have ended if the characters in the movies acted like smart human beings. Or if you the viewer stopped suspending disbelief. The following are my favorites:
Saturday, July 2, 2011
Paul Simon and George Harrison
Sometime ago I came upon these performances from Paul Simon and George Harrison on SNL. They're absolutely incredible.
Sunday, May 29, 2011
Puzzle/Brain-Teaser Interview Questions
I came upon an article (here) on Techcrunch about CS recruiting. There's this quote in it:
I remember reading a similar comment/article on theDailyWTF (here).
Although I personally don't like to give these kinds of questions in interviews, I personally do not think the brain-teaser questions are as bad as most people think they are. What they are is bad if executed improperly. I think most interviewers, at Microsoft or otherwise, do not know how to execute the question, the interview and judge the answers from candidates. Some examples:
A) Many interviewers want the right answer from the candidate, and will reject a candidate if they can't solve it. This is the wrong attitude. The question is trying to judge how a candidate thinks through a problem to solve it. Even arriving at the wrong answer is acceptable if the plan of attack was acceptable.
B) The question is also meant to judge your communication ability. Can you talk about how you model the problem, or want to plan to attack the problem, etc. Compared to normal programming questions, you have to speak out of your element.
C) The question also judges your ability to work under pressure and/or show your willingness to not give up. Some candidates may (do?) break down in interviews. Is this the type of employee that will break down in front of a client, partner, or co-workers if presented something difficult or stressful?
D) The brain-teaser/puzzle questions should be given along with other normal technical questions and behavioral questions. It's shouldn't only be brain-teaser/puzzle questions. I interviewed with a company straight out of college that gave me around 10 C programming "puzzle" questions. I probably got 6-7 right, which was enough for them to understand that I really knew C well and got to the next round of interviews. I've known of other people that have been given ONE C puzzle question, and that one question determined if they knew C well enough or not for the job. It's a good example of how not to balance the interview.
Update (12/6/11)
One additional thought. There are also good puzzle/brain-teaser questions and bad ones. Some, such as "Why is a manhole cover round?", are terrible questions. There is little ability to get the candidate to think through the problem and reason it out. A question such as, "How many golfballs can you fit inside a school bus?" isn't that bad.
Like many of the hangovers that haunt modern software engineering, this is ultimately mostly Microsoft’s fault.2 Back when they were the evil empire where everyone secretly wanted to work, they were famous for their “brain-teaser” interview questions – Why are manhole covers round? – and, of course, they asked new university graduates about computer science theory; “Write me a binary search."
I remember reading a similar comment/article on theDailyWTF (here).
Although I personally don't like to give these kinds of questions in interviews, I personally do not think the brain-teaser questions are as bad as most people think they are. What they are is bad if executed improperly. I think most interviewers, at Microsoft or otherwise, do not know how to execute the question, the interview and judge the answers from candidates. Some examples:
A) Many interviewers want the right answer from the candidate, and will reject a candidate if they can't solve it. This is the wrong attitude. The question is trying to judge how a candidate thinks through a problem to solve it. Even arriving at the wrong answer is acceptable if the plan of attack was acceptable.
B) The question is also meant to judge your communication ability. Can you talk about how you model the problem, or want to plan to attack the problem, etc. Compared to normal programming questions, you have to speak out of your element.
C) The question also judges your ability to work under pressure and/or show your willingness to not give up. Some candidates may (do?) break down in interviews. Is this the type of employee that will break down in front of a client, partner, or co-workers if presented something difficult or stressful?
D) The brain-teaser/puzzle questions should be given along with other normal technical questions and behavioral questions. It's shouldn't only be brain-teaser/puzzle questions. I interviewed with a company straight out of college that gave me around 10 C programming "puzzle" questions. I probably got 6-7 right, which was enough for them to understand that I really knew C well and got to the next round of interviews. I've known of other people that have been given ONE C puzzle question, and that one question determined if they knew C well enough or not for the job. It's a good example of how not to balance the interview.
Update (12/6/11)
One additional thought. There are also good puzzle/brain-teaser questions and bad ones. Some, such as "Why is a manhole cover round?", are terrible questions. There is little ability to get the candidate to think through the problem and reason it out. A question such as, "How many golfballs can you fit inside a school bus?" isn't that bad.
Wednesday, May 25, 2011
Definition of Poll
So I was talking with a colleague the other day about my initial confusion over the function ibv_poll_cq() in Infiniband verbs. I initially thought/assumed that the function operated similarly to the poll() syscall and was a tad confused on where/how a timeout could be specified to ibv_poll_cq(). As I worked through things, I later realized the ibv_poll_cq() does not iterate, sleep, or wait for an event to occur. It returns immediately if any events are ready or not. It's similar in action to poll() with a timeout of 0.
My colleague and I then got into a discussion of the definition of "poll". My colleague comes from a bit more of a hardware background and considered "poll" to mean a singular check of a state (such as in a register). I on the other hand, perhaps coming from more of a generic systems background, had always considered "poll" to imply both the check of state and some waiting system with it (may it be via sleep, busy-wait, etc.). I asked my colleague how he would say he wants to check a state multiple times? He said, "That's a poll loop."
Another way to think of it, is suppose I had some generic function like:
poll_for_event()
Would the initial assumption be that this function blocks or does not block?
So I was curious about the definition and how it is used in the broader community. I started with an assumption that the term "poll" in Computer Science comes from "poll" in relation to voting. According to Websters the definition of poll is:
Now, "poll" can be twisted when moved into a different field (such as a "bug"). When I initially thought of the syscall poll(), I was thinking predominantly about how it returns to the user after a specified timeout and returns event statuses. However, perhaps it is not named "poll" for this reason. Perhaps it is named "poll" due to its management of multiple file descriptors. In some respect, poll() gathers the "opinions" of each of the file descriptors and records them. So it sort of matches the classic voting definition of poll above.
But this doesn't help our discussion. Lets go back to the case where we're talking about "polling" a state or status. Wikipedia says:
So does "poll" refer to a singular check or an active sampling? In all liklihood different niches of the technical community eventually came up with their own definitions/meanings. It's one of those funny things that just happens (Perhaps I'll write someday of the confusion I've had with colleagues over magic numbers). I bet it comes down to common programming scenarios and expectations. Lets go back to my imaginary function:
poll_for_event()
In some communities, such as network programmers or GUI programmers, the assumption might be that the function blocks. The reasoning is simple. Under most circumstances, there's not much to do until the function returns (e.g. http request arrives, GUI item is clicked). So a person in this community who says, "poll", you are likely to believe that you wait until an event occurs.
Then perhaps you have people in the kernel community, where you have many other things you would rather be doing if an event isn't ready. So the natural assumption is the function won't block.
My colleague and I then got into a discussion of the definition of "poll". My colleague comes from a bit more of a hardware background and considered "poll" to mean a singular check of a state (such as in a register). I on the other hand, perhaps coming from more of a generic systems background, had always considered "poll" to imply both the check of state and some waiting system with it (may it be via sleep, busy-wait, etc.). I asked my colleague how he would say he wants to check a state multiple times? He said, "That's a poll loop."
Another way to think of it, is suppose I had some generic function like:
poll_for_event()
Would the initial assumption be that this function blocks or does not block?
So I was curious about the definition and how it is used in the broader community. I started with an assumption that the term "poll" in Computer Science comes from "poll" in relation to voting. According to Websters the definition of poll is:
"a sampling or collection of opinions on a subject, taken from either a selected or a random group of persons, as for the purpose of analysis."The question is, can "poll" be applied to a single individual or must it be applied to a group? For example, can you say, "I want to poll a person about this vote?" Naturally, I have no background in linguistics or philology, so I'm just going on a guess here. When speaking of "poll" and voting, I think it is synonymous with gathering the opinions of multiple people and the singular case makes no sense. Otherwise, a "poll" accomplishes nothing towards determing majority vote/opinion. So in my opinion, this might lend the definition of "poll" to include the waiting/loop/whatever instead of a single status check.
Now, "poll" can be twisted when moved into a different field (such as a "bug"). When I initially thought of the syscall poll(), I was thinking predominantly about how it returns to the user after a specified timeout and returns event statuses. However, perhaps it is not named "poll" for this reason. Perhaps it is named "poll" due to its management of multiple file descriptors. In some respect, poll() gathers the "opinions" of each of the file descriptors and records them. So it sort of matches the classic voting definition of poll above.
But this doesn't help our discussion. Lets go back to the case where we're talking about "polling" a state or status. Wikipedia says:
"Polling, or polled operation, in computer science, refers to actively sampling the status of an external device by a client program as a synchronous activity."and
"Polling is sometimes used synonymously with busy-wait polling (busy waiting)."Here, it is implied that "poll" implies active multiple-checking and not a singular check of a status. However, I notice that in the above definitions from Wikipedia it is "polling" and "polled", but not "poll". In fact, as I look around the web, virtually every definition or description of "polling" in reference to this topic is listed as "polling". With rare occasion is this topic discussed using "poll" or "to poll" or "polls" (discounting the situations where it appears people are referencing poll() specifically).
So does "poll" refer to a singular check or an active sampling? In all liklihood different niches of the technical community eventually came up with their own definitions/meanings. It's one of those funny things that just happens (Perhaps I'll write someday of the confusion I've had with colleagues over magic numbers). I bet it comes down to common programming scenarios and expectations. Lets go back to my imaginary function:
poll_for_event()
In some communities, such as network programmers or GUI programmers, the assumption might be that the function blocks. The reasoning is simple. Under most circumstances, there's not much to do until the function returns (e.g. http request arrives, GUI item is clicked). So a person in this community who says, "poll", you are likely to believe that you wait until an event occurs.
Then perhaps you have people in the kernel community, where you have many other things you would rather be doing if an event isn't ready. So the natural assumption is the function won't block.
Tuesday, May 3, 2011
What is wrong with Albert Pujols?
Everyone that knows me knows I love Albert Pujols. He's the greatest baseball player of his generation and he plays for the St. Louis Cardinals. But what is wrong with him? Is he just in a prolonged slump? Look at these numbers through May 2nd.
.241 BA, .310 OBP, .438 SLG, .747 OPS
Compare to his career average of:
.330 BA, .424 OBP, .621 SLG, 1.045 OPS
I know in 2007, he started off the season very slowly hitting:
.250 BA, .343 OBP, .489 SLG, .832 OPS
but this is ridiculous. Is the pressure of his free agent year getting to him? If you take out the first 10 games of the season, where he was just awful, Albert Pujols is hitting:
.291 BA, .358 OBP, .500 SLG, .858 OPS
which is more reasonable. I suppose even the greatest players of all time will have slumps, look at what happened to Frank Thomas in 1998:
.265 BA, .381 OBP, .480 SLG, .861
This was after he hit:
.330 BA, .452 OBP, .600 SLG, 1.053 OPS
from 1990 to 1997.
I can only assume it's a slump, and it happens. If he wasn't hitting any home runs or getting any hits, then I suppose it'd be more concerning. But it appears even Albert Pujols can have a bit of a down year.
Update:
This blog entry (via Rob Neyer, via this post) suggests that Albert Pujols was injured and not letting on that he was injured. It's a good argument.
After 27 games without a home run (and hitting only a measly 4 doubles, seeing his slugging percentage drop from .512 to .409), Albert Pujols hit a home run on May 23. And then he hit 4 home runs between May 30th and June 4th. It's looking like that hamstring injury is all healed up.
.241 BA, .310 OBP, .438 SLG, .747 OPS
Compare to his career average of:
.330 BA, .424 OBP, .621 SLG, 1.045 OPS
I know in 2007, he started off the season very slowly hitting:
.250 BA, .343 OBP, .489 SLG, .832 OPS
but this is ridiculous. Is the pressure of his free agent year getting to him? If you take out the first 10 games of the season, where he was just awful, Albert Pujols is hitting:
.291 BA, .358 OBP, .500 SLG, .858 OPS
which is more reasonable. I suppose even the greatest players of all time will have slumps, look at what happened to Frank Thomas in 1998:
.265 BA, .381 OBP, .480 SLG, .861
This was after he hit:
.330 BA, .452 OBP, .600 SLG, 1.053 OPS
from 1990 to 1997.
I can only assume it's a slump, and it happens. If he wasn't hitting any home runs or getting any hits, then I suppose it'd be more concerning. But it appears even Albert Pujols can have a bit of a down year.
Update:
This blog entry (via Rob Neyer, via this post) suggests that Albert Pujols was injured and not letting on that he was injured. It's a good argument.
After 27 games without a home run (and hitting only a measly 4 doubles, seeing his slugging percentage drop from .512 to .409), Albert Pujols hit a home run on May 23. And then he hit 4 home runs between May 30th and June 4th. It's looking like that hamstring injury is all healed up.
Wednesday, April 20, 2011
A guilty pleasure ...
Back in college, I was a huge fan of the WWE and professional wrestling. Characters like Stone Cold Steve Austin, Kurt Angle, and the Dudley Boyz were hilarious. However, no one could top The Rock. To this day, it still amazes me how a character like The Rock was able to "electrify" (one of his catch phrases) and completely energize a crowd. Take a look at this clip:
(One of Booker T's catchphrases is to say "Sucka" all the time, so part of the lines above are mocking Booker T.)
It's amazing in the video above to see how The Rock compares to Chris Jericho. Chris Jericho has pretty good stage presence and is a pretty good speaker, however he isn't even in The Rock's league. It's no surprise he was able to translate it into a successful Hollywood career.
So I don't watch the WWE as much as I used to, but I still like to catch an episode of WWE Raw here and there. When I mention to my friends or colleages that I still like to watch wrestling once in awhile, they always tease with a remark of "Al, you know it's fake?"
It got me thinking of why I began liking the WWE in college. Part of it was the comedy, as the shows the WWE put on were entertaining by itself (it's not as good nowadays, characters like The Rock and Stone Cold were epicly good). However, a significant reason was the respect I gained for professional wrestling.
Just because wrestling is theater/an act, doesn't mean it's easy. It takes many of these guys years of training to perfect their craft to put on a good show. In fact, the WWE has a developmental league (i.e. a minor league system) for wrestlers before they can come up to the big time. In addition, just because professional wrestling is "not real", doesn't mean it doesn't hurt. Many of the moves and much of the "theater" still causes pain on wrestler's bodies. While many of the moves, when properly done, limit pain on the body, it doesn't eliminate it. When someone get's body slammed, they aren't falling on soft padding. A quote I heard once was something like:
"There's a trick to avoid a lot of pain/injury when getting hit by a steel folding chair. The trick is to use a steel folding chair instead of a baseball bat."
In other words, the steel folding chair is chosen because it won't cause serious damage. Things like baseball bats would cause actual injury.
Update
I found these videos of the Rock too, it's an amazing stage presence:
(One of Booker T's catchphrases is to say "Sucka" all the time, so part of the lines above are mocking Booker T.)
It's amazing in the video above to see how The Rock compares to Chris Jericho. Chris Jericho has pretty good stage presence and is a pretty good speaker, however he isn't even in The Rock's league. It's no surprise he was able to translate it into a successful Hollywood career.
So I don't watch the WWE as much as I used to, but I still like to catch an episode of WWE Raw here and there. When I mention to my friends or colleages that I still like to watch wrestling once in awhile, they always tease with a remark of "Al, you know it's fake?"
It got me thinking of why I began liking the WWE in college. Part of it was the comedy, as the shows the WWE put on were entertaining by itself (it's not as good nowadays, characters like The Rock and Stone Cold were epicly good). However, a significant reason was the respect I gained for professional wrestling.
Just because wrestling is theater/an act, doesn't mean it's easy. It takes many of these guys years of training to perfect their craft to put on a good show. In fact, the WWE has a developmental league (i.e. a minor league system) for wrestlers before they can come up to the big time. In addition, just because professional wrestling is "not real", doesn't mean it doesn't hurt. Many of the moves and much of the "theater" still causes pain on wrestler's bodies. While many of the moves, when properly done, limit pain on the body, it doesn't eliminate it. When someone get's body slammed, they aren't falling on soft padding. A quote I heard once was something like:
"There's a trick to avoid a lot of pain/injury when getting hit by a steel folding chair. The trick is to use a steel folding chair instead of a baseball bat."
In other words, the steel folding chair is chosen because it won't cause serious damage. Things like baseball bats would cause actual injury.
Update
I found these videos of the Rock too, it's an amazing stage presence:
Monday, April 11, 2011
gcc extensions ...
Despite doing C programming for so many years, once in awhile some extension or really weird code makes me go "Huh?" I learned about a ternary operator extension the other day. The ternary operator is normally:
d = a ? b : c
but gcc allows
z = x ? : y
When I saw this, my immediate reaction was, "Uhhh, will that even compile?" What this extension allows is for x to be returned when the condition is true. So it's pretty much identical to:
z = x ? x : y
However, if x is an expression, it is only evaluated once. So there are some circumstances it could be quite useful. I felt sort of dumb when I didn't know it, but I felt better when multiple other co-workers didn't know this extension :-)
d = a ? b : c
but gcc allows
z = x ? : y
When I saw this, my immediate reaction was, "Uhhh, will that even compile?" What this extension allows is for x to be returned when the condition is true. So it's pretty much identical to:
z = x ? x : y
However, if x is an expression, it is only evaluated once. So there are some circumstances it could be quite useful. I felt sort of dumb when I didn't know it, but I felt better when multiple other co-workers didn't know this extension :-)
Sunday, April 10, 2011
Hmmmm ...
I saw an ad off LinkedIn for Saint Mary's College ...
It looked really familiar, then I realized it ...
Hmmm ...
It looked really familiar, then I realized it ...
Hmmm ...
Thursday, March 24, 2011
Wednesday, March 23, 2011
Ocarinas
By some happenchance I wandered onto this video on YouTube the other day.
I thought it was pretty awesome. I like this other video game themed performance as well.
I noticed the ads on the video for stlocarina.com. I start clicking around, and sure enough, the website is partly owned by an old friend of mine in college, and her husband is playing the violin in the videos. It's a small world sometimes.
I thought it was pretty awesome. I like this other video game themed performance as well.
I noticed the ads on the video for stlocarina.com. I start clicking around, and sure enough, the website is partly owned by an old friend of mine in college, and her husband is playing the violin in the videos. It's a small world sometimes.
Sunday, March 20, 2011
Mac vs. PC vs. Linux
A number of years ago, Novell released a series of Mac vs. PC vs. Linux commercials parodying the Mac vs. PC commercials. I think the commercials are awesome.
There are so many subtle meanings to quotes in the commercials. My favorite is:
Linux: "I keep up with the latest trends."
PC: "And people just share that stuff with you?"
It's an obvious reference to the open-source nature of Linux and how many people contribute technology to it for free.
There are so many subtle meanings to quotes in the commercials. My favorite is:
Linux: "I keep up with the latest trends."
PC: "And people just share that stuff with you?"
It's an obvious reference to the open-source nature of Linux and how many people contribute technology to it for free.
Thursday, March 17, 2011
Vork!
I recently came upon the web series The Guild, it's absolutely hilarious. It follows a group of MMORPG players and their lives after meeting each other in real life. The writing is absolutely hilarious and delves well past the typical geek humor of most video game-centric humor. I especially love the character of Vork. He's overly frugal, constantly analyzing the cost of everything possible, and loves to operate by a strict set of rules. He's also always cooking food right next to his computer (toast, eggs, tator tots, etc.). Here are some of this best quotes: (Oh and some of these videos have bad language. So POSSIBLE NOT SAFE FOR WORK.)
Season 1 Episode 5
At 2:50 you see Vork's excellent mathematics. "Cheese Gouging!"
Season 3 Episode 2
I love Vork's commentary on the formation of a "line" at 1:25.
Season 3 Episode 10
At 3:10, just nonsense.
Season 2 Episode 6
As an added bonus, from 3:45 to 4:10 is my favorite quote in the entire series. I just can't get over it.
"I don't participate in shoddy craftmanship! Use the stencil! Do it!"
Season 1 Episode 5
At 2:50 you see Vork's excellent mathematics. "Cheese Gouging!"
Season 3 Episode 2
I love Vork's commentary on the formation of a "line" at 1:25.
Season 3 Episode 10
At 3:10, just nonsense.
Season 2 Episode 6
As an added bonus, from 3:45 to 4:10 is my favorite quote in the entire series. I just can't get over it.
"I don't participate in shoddy craftmanship! Use the stencil! Do it!"
Sunday, March 13, 2011
Ann Coulter vs. Al Franken
I was at dinner with friends last night and somehow Ann Coulter came up. It reminded me about perhaps my favorite YouTube video of all time.
There are so many subtleties to the video that I love. I love how Ann Coulter trys to twist the original question into a political message. Al Franken jumps on the twist with a way better answer. You can tell Al Franken uses his comedic background well. He adds the appropriate pauses and facial expressions to make the answer come out so much more hilarious. I also love the look on Ann Coulter's face at 0:54 in the video. You can tell she is just p*ssed.
There are so many subtleties to the video that I love. I love how Ann Coulter trys to twist the original question into a political message. Al Franken jumps on the twist with a way better answer. You can tell Al Franken uses his comedic background well. He adds the appropriate pauses and facial expressions to make the answer come out so much more hilarious. I also love the look on Ann Coulter's face at 0:54 in the video. You can tell she is just p*ssed.
Friday, March 11, 2011
Roundpegg
I just learned about a company called Roundpegg, that is (as called by Techcrunch) the "eHarmony for jobs". They give you a personality test and use that to fit you to different companies/jobs with different types of corporate culture. Similar to my discussion about Codility, these kinds of websites bother me.
It's not that Roundpegg isn't a good company. I think their personality test is probably very good and would be very useful for companies and candidates. Many companies use similar tests when employees apply for a job (Zappos comes to mind). The issue is that there is a strong likelihood such a systemcould be abused will be used poorly. The best way to use such a system is to use it to weed out the absolute worst candidates, not to find the best candidates. (Similar to the argument in my Codility argument.)
Update (3/15/11):
I suddenly had a thought. Similar to my comments in my Codility comments, how does Roundpegg recommend candidates to companies? Do they give a score like 0-100%? Or like many dating websites, do they give broad "strong match" vs. "maybe match" vs. "no match" grades? I suppose a more subjective grading criteria like the later might make a Roundpegg less susceptible to poor use.
It's not that Roundpegg isn't a good company. I think their personality test is probably very good and would be very useful for companies and candidates. Many companies use similar tests when employees apply for a job (Zappos comes to mind). The issue is that there is a strong likelihood such a system
Update (3/15/11):
I suddenly had a thought. Similar to my comments in my Codility comments, how does Roundpegg recommend candidates to companies? Do they give a score like 0-100%? Or like many dating websites, do they give broad "strong match" vs. "maybe match" vs. "no match" grades? I suppose a more subjective grading criteria like the later might make a Roundpegg less susceptible to poor use.
Tuesday, March 8, 2011
Monday, March 7, 2011
Bret the Hitman Hart the programmer
I saw this video clip around 10 years ago on a now defunct website, and I remember it for one line in the video.
For those who don't know about him, Bret the Hitman Hart is a legendary WWF/WWE professional wrestler (Wikipedia entry). He's known as the "Excellence of Execution." He is so talented, that he's also awesome programmer. Check out his skills at the 1:54 mark in the video below.
I love thinking about the staff putting together this video. At some point in time, they probably approached the programmers and asked them "Give us a line for Bret Hart to say." I'm sure they came up with all sorts of phrases:
Alas, the producers selected the best line he could say, "You're dereferencing a NULL pointer."
For those who don't know about him, Bret the Hitman Hart is a legendary WWF/WWE professional wrestler (Wikipedia entry). He's known as the "Excellence of Execution." He is so talented, that he's also awesome programmer. Check out his skills at the 1:54 mark in the video below.
I love thinking about the staff putting together this video. At some point in time, they probably approached the programmers and asked them "Give us a line for Bret Hart to say." I'm sure they came up with all sorts of phrases:
- "You have an off by 1 bug"
- "You have a buffer overflow"
- "You're using a single equal sign instead of a double equal sign."
Alas, the producers selected the best line he could say, "You're dereferencing a NULL pointer."
Friday, March 4, 2011
How did I end up a software engineer?
One day, I began to think about how I became a computer scientist/software engineer for a career. How did I get here? Here's what I recall.
Gradeschool
My dad purchased several computers when I was younger. I can't remember all of them, but there was atleast one Apple II and one Commodore. At this relatively young age, these were mostly just for my sister and I to play games on. I have faint recollections of playing Stickybear, a Conan game, and some game related to cleaning teeth.
Perhaps the most important thing I learned with these early computers was how to touch type (a skill I learned through a program purporting itself to be a game). It's a skill that I now realize was useful for becoming a great programmer, because you weren't wasting time figuring out how to type.
I also was taught very beginning BASIC programming on the Apple II. (Again, I think through an educational program purporting itself to be a game.) I didn't understand much of it, but I technically did write my first code on it.
At some point late in gradeschool my parents also got our first machine w/ Windows 3.1. This was key because ...
Junior High
Thanks to my friend Brian Soucy in junior high (where are you Brian, I've lost track of you) I began BBSing and participating in the local St. Louis BBS community (and later setting up my own BBS). This was the first time I began fiddling with computers in earnest and participating in an online community. I opened up a computer for the first time and installed a modem. Later I installed a soundcard because I wanted to play some games with better sound (non-NPD software, I swear!). Through BBSing I was learning more things about computers and figuring out many tiny things about them. Things like meddling with autoexec.bat, stacker, and defrag.
Highschool
I was quite fortunate. A lot of schools didn't offer programming classes in my area, but thanks to Mr. Hottelman, my highschool did. I was able to take BASIC I, BASIC II, Visual BASIC, and C in highschool. I didn't learn any advanced algorithms or anything. My recollection was only learning bubblesort. I remember learning about pointers in the C class and thinking it was really dumb (for any recruiter reading this, I no longer think they are dumb :P).
The highlight of my work in these classes was a program I wrote in BASIC that displayed the periodic table of elements. You could move your arrow keys around to select an element and bring up details on the element. It was technically useless (any book could have given you the same information) but it looked neat and awesome. I believe the code is still sitting in a 3.5 diskette in my parent's basement.
Looking back, the coolest thing I ever did in this periodic table project was my intellectual "creation" of functions. I was never taught how to do functions in BASIC, I was only taught about gosubs (I was still young enough in my programming life that the concept of a function was not fully there). With so much repetitive code in my periodic table program, I wanted to condense code so I wasn't cutting and pasting all over the place. I eventually created a system where I would set global variables (I wasn't knowledgeable of local vs. global variables yet either, everything was global) to certain values. The globals were generically named things like val1, val2, val3, etc. I would set them and then call common gosub-routines that would know what globals to read and how to operate on them. I'm quite proud of the fact that I was able to figure out this way to condense code. (Note: My recollection is that gosubs in BASIC don't take parameter arguments. If they do, then the above technique was obviously very dumb. But I'm still quite proud of my ability to condense code this way.)
At some point, I also made a webpage for myself. Not something crappy like on Geocities, but a real hosted one. I made some fan pages for my favorite St. Louis sports icons like Ozzie Smith and Brett Hull. My Ozzie Smith homepage actually got some references in newspapers and sports magazines. All these pages are gone now, but I was able to find my homepage on the internet archive (Most of this was written when I was 15/16 years old, don't laugh!). While I didn't understand how the internet worked and how the pages I uploaded to some server would magically appear at a web address, this was my first introduction to FTP, Unix, and the chmod command (at the time, I had no idea why I had to type 'chmod 644' on these files).
Picking A Major
Well, with interest in the internet, making a homepage, liking programming classes in highschool, and hearing computer people made good money, it was easy for me to pick "computer something" for my career. The "computer something" was a tough choice though. I remember reading the descriptions for "Computer Engineering" or "Computer Science" and not knowing the difference. I think I ended up picking "Computer Science" because I didn't consider myself a hardware guy (other geek friends of mine liked to build computers, but I wasn't as into it). I got accepted to several schools and ended up chosing UIUC.
Final Thoughts
In hindsight, there were a lot of lucky circumstances along the way. What if I had never met Brian and installed a modem in Junior High? What if my dad never got an Apple II? What if my highschool never taught a programming class? Would I even have this career? What would I be doing if I didn't major in Computer Science?
Gradeschool
My dad purchased several computers when I was younger. I can't remember all of them, but there was atleast one Apple II and one Commodore. At this relatively young age, these were mostly just for my sister and I to play games on. I have faint recollections of playing Stickybear, a Conan game, and some game related to cleaning teeth.
Perhaps the most important thing I learned with these early computers was how to touch type (a skill I learned through a program purporting itself to be a game). It's a skill that I now realize was useful for becoming a great programmer, because you weren't wasting time figuring out how to type.
I also was taught very beginning BASIC programming on the Apple II. (Again, I think through an educational program purporting itself to be a game.) I didn't understand much of it, but I technically did write my first code on it.
At some point late in gradeschool my parents also got our first machine w/ Windows 3.1. This was key because ...
Junior High
Thanks to my friend Brian Soucy in junior high (where are you Brian, I've lost track of you) I began BBSing and participating in the local St. Louis BBS community (and later setting up my own BBS). This was the first time I began fiddling with computers in earnest and participating in an online community. I opened up a computer for the first time and installed a modem. Later I installed a soundcard because I wanted to play some games with better sound (non-NPD software, I swear!). Through BBSing I was learning more things about computers and figuring out many tiny things about them. Things like meddling with autoexec.bat, stacker, and defrag.
Highschool
I was quite fortunate. A lot of schools didn't offer programming classes in my area, but thanks to Mr. Hottelman, my highschool did. I was able to take BASIC I, BASIC II, Visual BASIC, and C in highschool. I didn't learn any advanced algorithms or anything. My recollection was only learning bubblesort. I remember learning about pointers in the C class and thinking it was really dumb (for any recruiter reading this, I no longer think they are dumb :P).
The highlight of my work in these classes was a program I wrote in BASIC that displayed the periodic table of elements. You could move your arrow keys around to select an element and bring up details on the element. It was technically useless (any book could have given you the same information) but it looked neat and awesome. I believe the code is still sitting in a 3.5 diskette in my parent's basement.
Looking back, the coolest thing I ever did in this periodic table project was my intellectual "creation" of functions. I was never taught how to do functions in BASIC, I was only taught about gosubs (I was still young enough in my programming life that the concept of a function was not fully there). With so much repetitive code in my periodic table program, I wanted to condense code so I wasn't cutting and pasting all over the place. I eventually created a system where I would set global variables (I wasn't knowledgeable of local vs. global variables yet either, everything was global) to certain values. The globals were generically named things like val1, val2, val3, etc. I would set them and then call common gosub-routines that would know what globals to read and how to operate on them. I'm quite proud of the fact that I was able to figure out this way to condense code. (Note: My recollection is that gosubs in BASIC don't take parameter arguments. If they do, then the above technique was obviously very dumb. But I'm still quite proud of my ability to condense code this way.)
At some point, I also made a webpage for myself. Not something crappy like on Geocities, but a real hosted one. I made some fan pages for my favorite St. Louis sports icons like Ozzie Smith and Brett Hull. My Ozzie Smith homepage actually got some references in newspapers and sports magazines. All these pages are gone now, but I was able to find my homepage on the internet archive (Most of this was written when I was 15/16 years old, don't laugh!). While I didn't understand how the internet worked and how the pages I uploaded to some server would magically appear at a web address, this was my first introduction to FTP, Unix, and the chmod command (at the time, I had no idea why I had to type 'chmod 644' on these files).
Picking A Major
Well, with interest in the internet, making a homepage, liking programming classes in highschool, and hearing computer people made good money, it was easy for me to pick "computer something" for my career. The "computer something" was a tough choice though. I remember reading the descriptions for "Computer Engineering" or "Computer Science" and not knowing the difference. I think I ended up picking "Computer Science" because I didn't consider myself a hardware guy (other geek friends of mine liked to build computers, but I wasn't as into it). I got accepted to several schools and ended up chosing UIUC.
Final Thoughts
In hindsight, there were a lot of lucky circumstances along the way. What if I had never met Brian and installed a modem in Junior High? What if my dad never got an Apple II? What if my highschool never taught a programming class? Would I even have this career? What would I be doing if I didn't major in Computer Science?
Sunday, February 20, 2011
Expectations When You Support Open Standards
I've spoken about this topic with many engineers, managers, sales folks, etc. So I decided it might be interesting to post about this topic and my experience with it.
Organizations/vendors often advertise support for software or protocols based on open standards. However, I've had many experiences where it does not appear vendors understand the consequences of that advertisement. The following is an example of something I've encountered in my work.
I'm the co-author and present maintainer of FreeIPMI. If you're not familiar with what IPMI is, you can read about it in the FreeIPMI FAQ. For this discussion, the most important part to understand about IPMI is that it is an open standard which you can download here.
The IPMI standard supports many things, one of which is the ability to read sensors off a motherboard. For example, it supports the ability to read CPU temperatures and report them back to the user in Celsius (e.g. 50 degrees Celsius). The types of sensors that could exist on a motherboard are very large and cannot always be handled by IPMI. So the IPMI specification supports the ability for vendors to add OEM extensions to read non-standard sensors. For example, I've encountered a motherboard where a CPU temperature sensor was not reported in Celsius, but instead reported by flags indicating "low", "medium", "high", or "overheat." This type of sensor is not defined by the IPMI specification and is specific to just one manufacturer's motherboard.
Normally, I (as potential motherboard customer) do not know how to read and interpret an OEM specific sensor. The question is, is it fair or unfair for a vendor to keep information about an OEM specific sensor closed/hidden/secret? Is it fair or unfair to only allow an OEM specific sensor to be readable by a vendor's software instead of third-party software?
In my opinion, it depends on the sensor. In the case of a OEM CPU temperature sensor above, I believe hiding this information to be unfair. A CPU temperature sensor is a standard IPMI supported mechanism. An OEM specific CPU temperature sensor is what I call a "minor permutation" from the specification. A user/customer of IPMI would expect they could read CPU temperature sensors using third-party IPMI software.
In contrast, suppose that a sensor on the motherboard supports the ability to read a sensor quite different than what is supported in the IPMI specification (i.e. it is not a "minor permutation"). In this case, I do not believe a user/customer would have reasonable expectation for third-party IPMI software to read the sensor. So in this case, I would consider it fair to keep the information closed/hidden and only readable by vendor software.
Now, you might ask, what are reasonable expectations of a customer/user? In my opinion, it comes down to how the product is advertised. Does the product brief say that you can read motherboard sensors via IPMI? Or does it say you can read them via software X? If a vendor says the former, they should be prepared to deal with questions from customers about third party software. If they say the later, I believe customers cannot have expectations of support for third-party software.
Why is this a conversation that always comes up for me? You may have guessed it by now, but many vendors do not wish to open up and share their OEM extensions with me for inclusion in FreeIPMI. As an example, the following are several IPMI standard mechanisms.
Despite the fact that they are standard mechanisms, due to minor implementation differences, they have also been implemented as OEM extensions by some vendors (see ipmi-oem). The first two (configuring MAC and IP address) are particularly egregious OEM extensions, because the OEM extension (and possibly vendor specific software) are now required for basic setup and configuration of IPMI (let alone using all the features of IPMI). [1]
Hopefully, this illustrates the expectations a user/customer/software developer would have when a vendor supports an open standard. As an addendum, I do not wish to imply that companies with IPMI OEM extensions are being evil by keeping some of their OEM extensions hidden/closed/secret. Many companies I have worked with on IPMI have been very gracious in (eventually) opening up their OEM extensions for addition into FreeIPMI (see FAQ). I believe that initial resistance from vendors is often due to poor communication rather than evil intent. For many vendors, I am a strange corner case in their customer base. Support staff folks just aren't prepared to handle the kinds of support requests I make, so their initial reaction is naturally "No, we can't do that."
[1] - As an interesting aside, I once reported to a vendor that their standard IPMI MAC address configuration functionality was broken in their firmware. The vendor responded that it was working with their software, and the bug must of have been in FreeIPMI. After much back and forth, I was able to determine that their vendor specific software was configuring the MAC address using an OEM extension, not the standard mechanism. So in this particular case, the vendor support staff was completely unaware that their software used an OEM extension. Ugh ...
Organizations/vendors often advertise support for software or protocols based on open standards. However, I've had many experiences where it does not appear vendors understand the consequences of that advertisement. The following is an example of something I've encountered in my work.
I'm the co-author and present maintainer of FreeIPMI. If you're not familiar with what IPMI is, you can read about it in the FreeIPMI FAQ. For this discussion, the most important part to understand about IPMI is that it is an open standard which you can download here.
The IPMI standard supports many things, one of which is the ability to read sensors off a motherboard. For example, it supports the ability to read CPU temperatures and report them back to the user in Celsius (e.g. 50 degrees Celsius). The types of sensors that could exist on a motherboard are very large and cannot always be handled by IPMI. So the IPMI specification supports the ability for vendors to add OEM extensions to read non-standard sensors. For example, I've encountered a motherboard where a CPU temperature sensor was not reported in Celsius, but instead reported by flags indicating "low", "medium", "high", or "overheat." This type of sensor is not defined by the IPMI specification and is specific to just one manufacturer's motherboard.
Normally, I (as potential motherboard customer) do not know how to read and interpret an OEM specific sensor. The question is, is it fair or unfair for a vendor to keep information about an OEM specific sensor closed/hidden/secret? Is it fair or unfair to only allow an OEM specific sensor to be readable by a vendor's software instead of third-party software?
In my opinion, it depends on the sensor. In the case of a OEM CPU temperature sensor above, I believe hiding this information to be unfair. A CPU temperature sensor is a standard IPMI supported mechanism. An OEM specific CPU temperature sensor is what I call a "minor permutation" from the specification. A user/customer of IPMI would expect they could read CPU temperature sensors using third-party IPMI software.
In contrast, suppose that a sensor on the motherboard supports the ability to read a sensor quite different than what is supported in the IPMI specification (i.e. it is not a "minor permutation"). In this case, I do not believe a user/customer would have reasonable expectation for third-party IPMI software to read the sensor. So in this case, I would consider it fair to keep the information closed/hidden and only readable by vendor software.
Now, you might ask, what are reasonable expectations of a customer/user? In my opinion, it comes down to how the product is advertised. Does the product brief say that you can read motherboard sensors via IPMI? Or does it say you can read them via software X? If a vendor says the former, they should be prepared to deal with questions from customers about third party software. If they say the later, I believe customers cannot have expectations of support for third-party software.
Why is this a conversation that always comes up for me? You may have guessed it by now, but many vendors do not wish to open up and share their OEM extensions with me for inclusion in FreeIPMI. As an example, the following are several IPMI standard mechanisms.
- Configure MAC Address
- Configure IP Address
- Get firmware version
- Get product name/serial number
- Set LED
Despite the fact that they are standard mechanisms, due to minor implementation differences, they have also been implemented as OEM extensions by some vendors (see ipmi-oem). The first two (configuring MAC and IP address) are particularly egregious OEM extensions, because the OEM extension (and possibly vendor specific software) are now required for basic setup and configuration of IPMI (let alone using all the features of IPMI). [1]
Hopefully, this illustrates the expectations a user/customer/software developer would have when a vendor supports an open standard. As an addendum, I do not wish to imply that companies with IPMI OEM extensions are being evil by keeping some of their OEM extensions hidden/closed/secret. Many companies I have worked with on IPMI have been very gracious in (eventually) opening up their OEM extensions for addition into FreeIPMI (see FAQ). I believe that initial resistance from vendors is often due to poor communication rather than evil intent. For many vendors, I am a strange corner case in their customer base. Support staff folks just aren't prepared to handle the kinds of support requests I make, so their initial reaction is naturally "No, we can't do that."
[1] - As an interesting aside, I once reported to a vendor that their standard IPMI MAC address configuration functionality was broken in their firmware. The vendor responded that it was working with their software, and the bug must of have been in FreeIPMI. After much back and forth, I was able to determine that their vendor specific software was configuring the MAC address using an OEM extension, not the standard mechanism. So in this particular case, the vendor support staff was completely unaware that their software used an OEM extension. Ugh ...
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.
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.
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).
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?
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?
(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.
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.
"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.
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.