Monday, January 26, 2009

Developing Extreme Talent

Thanks to Jason Yip's blog entry: On chess grandmasters and the expert mind for pointing me to this fascinating article - The Expert Mind: Studies of the mental processes of chess grandmasters have revealed clues to how people become experts in other fields as well - from Scientific American.

From the Scientific American article:

"K. Anders Ericsson of Florida State University argues that what matters [toward improving one's chess playing skill] is not experience per se but "effortful study," which entails continually tackling challenges that lie just beyond one's competence. That is why it is possible for enthusiasts to spend tens of thousands of hours playing chess or golf or a musical instrument without ever advancing beyond the amateur level and why a properly trained student can overtake them in a relatively short time. It is interesting to note that time spent playing chess, even in tournaments, appears to contribute less than such study to a player's progress; the main training value of such games is to point up weaknesses for future study."

The concept of effortful study essentially suggests that you grow only when you push yourself. As a very-practiced and accomplished pool player (before I had a family and other commitments), I know that I only improved when I played better players. Seeing this article expanded my thinking on the topic into other areas... such as programming talent and general education (I have four young children).

"The preponderance of psychological evidence indicates that experts are made, not born. What is more, the demonstrated ability to turn a child quickly into an expert--in chess, music and a host of other subjects--sets a clear challenge before the schools."

This points to difficulties in making our educational system effective: teachers who are responsible for 15 or 20 students cannot possibly tailor the education to push the envelope for each child. Even with five children, a common lesson plan loses the ability to maintain that tension between comfort and discomfort that leads to the kind of discovery that keeps up with a student's need to push forward. This is precisely why parental involvement is necessary ... to maintain that tension and to challenge our children - not just in maintaining the necessarily dictated classroom pace, but in tapping into the wellspring of talent and desire living within our children. I see it so clearly now.

"Laszlo Polgar, an educator in Hungary, homeschooled his three daughters in chess, assigning as much as six hours of work a day, producing one international master and two grandmasters--the strongest chess-playing siblings in history. The youngest Polgar, 30-year-old Judit, is now ranked 14th in the world."

Perhaps Laszlo's ability to adapt the level of effort required for each child helped. I'm interested in learning more about how much of his lesson plans were chess oriented and how much were geared towards general education. There's also the genetics argument; if he was good at chess, perhaps he passed on the chess genes.

"[...] success builds on success, because each accomplishment can strengthen a child's motivation. A 1999 study of professional soccer players from several countries showed that they were much more likely than the general population to have been born at a time of year that would have dictated their enrollment in youth soccer leagues at ages older than the average. In their early years, these children would have enjoyed a substantial advantage in size and strength when playing soccer with their teammates. Because the larger, more agile children would get more opportunities to handle the ball, they would score more often, and their success at the game would motivate them to become even better."

This argument for driving towards early success is somewhat orthogonal to the "effortful study" thesis, but bears import to the parenting issue (and perhaps the programmer development issue as well). Positive reinforcement and successful results early-on can provide the confidence that children and programmers need to continue pushing forward.

If you are a parent, or a mentor of a young programmer (or any other professional I would think), these concepts bear consideration.

Thursday, January 22, 2009

Non functional requirements - a tale of two cities

I've been thinking about non-functional requirements lately. Ilities, some might say. It occurred to me that there are two classes of non-functional requirements: those that are visible to the user and those that are hidden.

Performance and usability are examples of non-functional attributes of the application that are visible to the user. I classify these as being "in front of the curtain"... or "part of the performance" (to use theatrical terms). Though attention to these issues is sometimes delayed to the end of the release, they occupy a high level of importance in delivery priorities.

Other non-functional requirements are backstage, and pretty much lead to efficiencies (or inefficiencies) for the development team. Examples include testability, supportability, maintainability and extensibility. These non-visible requirements bleed into visibility in some sense... for example, extensibility problems lead to delays in releases which impact follow-on release timelineness; poor testability leads to gaps in test coverage, which leads to bugs. But the impact of these issues often occurs long after the "current administration" has moved on.

I suggest that the order of priorities can be interpreted as 1) functionality, 2) speed of delivery, 3) visible non-functional requirements, and 97) non-visible non-functional requirements. Speed of delivery takes precedence.

Beware the "speed smell": sacrifices at the alter of speed, to the detriment of long term health of the system. In particular, beware these sacrifices being made by an administration that is poised to move on.

Wednesday, January 21, 2009

Good programmers: nature or nurture?

From where do good programmers sprout? Do they come from top-notch collegiate computer science programs? Do they stem from a gene correlated with good problem-solving abilities and ability to think in higher level abstractions? Where does the balance lie between nature and nurture?

There's a difference here between good programmers and simply competent programmers. Competent programmers are good at coloring between the lines. Good programmers are good at defining where those lines belong, understanding when the lines need to move and when coloring outside the lines is appropriate. They could be good architects, but choose not to lose their relevancy by moving from code to box diagrams.

I don't know where good programmers come from. I have some observations though.

A college degree is not necessary. I'm not saying it's not useful, just that it's not necessary.

Curiosity is necessary. A BS in Computer Science with on the job training in programming and domain, but with no curiosity, will last a graduate 2-3 years, after which s/he will professionally stagnate. This mode is fine in a stable economy where these programmers can amass domain or technology knowledge with their current employer and become domain-sticky (e.g. the few who know why the business rules are structured as they are) or technology-sticky (the few who have been with the code base so long as to know the nooks and crannies of obtuse design and coding decisions). Lack of curiousity and experimentation - in learning new domains and skills - significantly reduces the shelf life of non-curious developers. In the current economy, this domain and technology stickiness are no longer sufficient safety nets to protect your jobs.

You don't have the time to address your curiosity? Make time. Many licensed professionals (e.g. medical professionals) require continuing education in order to keep their licenses. Software development professionals should have even higher requirements; our profession changes very quickly. Even if your employer doesn't have the budget to send you off to a conference, you should be able to negotiate some set-aside time to focus on sharpening the saw. Or spring for that conference attendance cost yourself if your company is unwilling to invest in you (and update your resume while on the plane). You should also be able to answer the question in an interview - "how do you keep your skills current?".

In the coming technology landscape: meta-programming, crossing-the-chasm from statically typed object-oriented languages to dynamic and functional languages, and solving more and more complex business problems requires more than just a basic understanding of Java and the list of standard Java-based acronyms. Beyond curiosity, the new landscape requires discipline (to understand before coding - and to keep from strangling yourself with the new rope that these new technologies provide). It requires persistence in teasing out the subtleties of the new technologies to fully understand them. It requires an ability to think in more abstract terms... in some ways, it requires returning to the Computer Science textbooks.

In sum - to improve your programming skills, cultivate and follow your curiousity, think more deeply about how to solve the problems at hand, try some of the newer (sic) languages (F#, Haskell, Lisp, Ruby, etc.) and practice thinking in more abstract terms. Be persistent. And find a smart, curious, thoughtful, persistent programmer who takes keeping his/her skills sharp seriously. Pair with him/her. Ask questions. Become a sponge.


Just ran across a profile of an ex-colleague who had abbreviations following his name on a networking site.

We should all be proud of our educational accomplishments and certifications, and they certainly hold a place in the job-search process. But I find the addition of these attributes to be out of place in many environments (e.g. Linked-In, Facebook, and resume titles).


Let's remove the certification crutches and talk about what you're doing and how you add value.

- Cranky

Friday, January 16, 2009

defenestration hotel ads

Looked up defenestration on the web ( in order to provide the link to someone. I found the ads an interesting mix.

I can understand ads for hotels in Prague, given the defenestration of Prague, but I'm curious about any heretofore unreported defenestrations in Orlando.

Tuesday, January 06, 2009

Peeling potatoes

I had an interesting conversation with an enlightened product manager recently. We love to converse in analogies, and a recent one surrounded the difficulty of completing the required scope of our release plan in the timeframe allotted. So, out sprung the analogy... trying to fit 10 pounds of potatoes into a one-pound [capacity] bag.

The extension to the analogy is that peeling the potatoes to make them fit is an insufficient approach. It may be appealing in the sense that you're making progress, but the order of magnitude difference required to make the potatoes fit will never be satisfied by a peeling approach.

A similar analogy might be suggesting to folks on the Titanic that they pick up a bucket and start bailing.

When great change is needed, great courage is required to make game-changing differences in approach. Otherwise, you're just postponing your date of failure.

Thursday, January 01, 2009

Path to Passion

I had an interesting dialog with a colleague recently. He left a long, multi-year consulting stint a few months ago to join a start-up in Silicon Valley. He's absolutely loving it. The excitement and passion are prominently on his sleeve.

Many of us have probably felt this excitement on certain jobs or certain assignments. A year ago I had a job/assignment where, on occasion, I would wake up on a weekend, think about getting ready for work, and feel disappointment upon the realization that it was not a work day. What a wonderful sensation. I've worked on other projects where I've felt similar passion.

Of course, I have also been in jobs where I've been so sapped of energy and enthusiasm that it seems, in hindsight, that I simply marched like a lemming in the proposed direction. I remember trying to change things and meeting more resistance than I could surmount, and then, sad to say, submitting. I was professionally... dead. I can blame it on my youth I suppose. The last time I can recall being severely numb was around '94 or '95. I never wish to experience that again. More to the point, I will never allow that to happen again.

As a consultant, I get to spend time with different companies of different sizes in different industries. I really enjoy the work - particularly in the first month or two as I learn about the client, domain, people, challenges, and ... opportunities. As I spend time in these new places, I find some people who are passionate about what they are trying to achieve. This always gives me hope; it is typically these people to whom I gravitate. But I also see many who seem to be marching or strolling along, without passion, desire, or commitment. I find this frustrating.

Of course, we don't all have to draw deep satisfaction from our work; other priorities can make up for the lack career excitement. But here's the thing... if you have to spend 40 hours a week doing something that doesn't get your motor running, why not find something that does? It doesn't necessarily mean you quit your job for another, but at least make progress towards that other thing that excites you. If you're a musician and would rather be playing in a rock band than doing corporate tax returns, practice, go out and meet other rockers, attend open mike nights, etc. Make some progress.

Don't accept a job you're not passionate about unless you can find a path to passion. And if you're in a job with no path to passion... snap out of it man !