Monday, September 28, 2009

Integrated vs. open: what's more "free"?

OK, first of all, don't get me wrong.  I am totally an open-source advocate.  I worked in open source a lot at Sun, and I make use of a lot of open source in my day job.

But I also have a Mac and an iPhone.  As a matter of fact, many developers in the open source community have Macs and iPhones.  But Apple is the King of Proprietary.  So what's going on?

I recently got a comment on my Facebook page when I mentioned I was trying to unlock my wife's iPhone, basically warning me to stay away from proprietary systems that try to lock you in.  Now, I don't believe phones should be locked, or that you should have to revert to a downloaded software tool that hacks into the phone to unlock it.  But this comment did get me thinking: why do I use the iPhone even though it's proprietary and does try to lock me in, as does my Mac?

The problem with Apple's stuff is, it's just so gawdawfully easy to use.  My wife observed the same thing I did three years ago: "hey, this stuff just works!".

Apple can do this because they're proprietary and closed - they can build a completely integrated system and not worry about having to build something that works when it's pieced together by different vendors with different configurations.  The can focus on their configuration and just make it work.

So, when it comes down to it, I'll take proprietary over open when it offers such incredibly obvious advantages as the Mac and iPhone do.  Have I sold myself to the Devil in a Black Turtleneck?

In the midst of those ruminations, Tim Bray tweeted a link to this article in the Economist, that compares Mac vs. PC with our banking and health care systems.
Like Microsoft operating systems, America's health-insurance system is incoherent, hard to understand, often dysfunctional and bloated by obsolete legacy systems. (Though unlike Windows machines, it's not cheap.) Different parts fail to operate properly with each other, and the whole thing is incomprehensible to most users, patients and doctors alike. But try to set up a central authority like MedPAC to make decisions about how to fix Medicare, or to mandate that policies cover a set of basic conditions, or to make end-of-life counseling available to seniors so they don't go through their final weeks in a blizzard of legal confusion—try to fix any of this stuff, and you'll be accused of "taking the control of health care out of the hands of patients and their doctors." This rhetoric is often driven by vested commercial interests. Medical-industry groups don't want a panel of experts making decisions about Medicare because it reduces their ability to buy concessions through congressional lobbying.

The same goes for the banking and credit-card industries, where small-print legal confusion is used as a tool to extract money from customers, and efforts to ban such practices are attacked as restrictions on consumer freedom. In health insurance or credit cards, freedom's just another word for not understanding what's in your contract. A perfect illustration, from Republican congressman Jeb Hensarling: "The ironically named Consumer Financial Protection Agency (CFPA) would have the power to strip from consumers their freedom of choice and restrict their credit opportunities in the midst of a financial recession—all in the name of 'consumer protection'. Positively Orwellian."

What's Orwellian is describing your credit-card company's ability to arbitrarily raise the interest it charges you on past debt to 35% as "freedom". More broadly, we need to move away from the Orwell "1984" paradigm. It was a brilliant description of the most important threats to freedom in the middle of the 20th century, but it no longer describes the most important threats to freedom today*. It was already clear how creaky the paradigm was in 1984, when the Mac ad came out; it's only gotten creakier over the past 25 years. Orwell didn't pay much attention to the problem of an oppressive blizzard of "choices" designed to take advantage of the consumer or citizen by manipulating asymmetries of information. But that is the way the American commercial and political landscape feels much of the time

Definitely something to think about. What is the true freedom here? And, in terms of health care and other social services, who is benefiting from this 'freedom'?

Friday, September 25, 2009

Why I didn't want to do Test-Drive Development - and why I like it now

I've been thinking about why I didn't do Test-Driven Development for so many years (in particular, writing tests first), and why others don't.

You can be shown lots of books. You can be told it's important. But you still don't do it.

I think it's about discomfort. You're being asked to change. For years, the way I coded was: I did some analysis, thought about the design, and then started coding the design as I saw it, either from my head or from some basic UML.

TDD doesn't let you do that. You have to (ick) write a test first. Why on Earth would I ever want to do that? I'm trying to implement my design, not muck around with tests! So as much as I appreciated from afar the values of TDD, I just never get around to doing it, because it's just not how I did things. It's almost like you're coding naked or with a keyboard with a different layout - it's awkward, uncomfortable, and just feels wrong.

So I came up with all sorts of justifications for not doing it - I don't have time; I'm already writing tests, writing them first seems like overkill; I'm already overwhelmed with things I need to deal with; people who that are just anal design-freaks, and so on. But I think ultimately it came down to - that's just not how I do things.

But recently I finally forced myself to start doing it. I slowly started becoming more comfortable with this approach, and started to see the benefits.

To me the key thing is this concept of letting the design emerge rather than trying to impose a design. It's similar to starting with use cases first, and regularly validating your product with the customer, rather than building a technology and hoping they'll come.

Once I got used to letting the design emerge, I started really enjoying TDD. It was an act of discovery as much as an act of creation. And I truly believe the best creations are done that way - as an act of joyous discovery.

And yes, by the way, you get much better code coverage when you do TDD, because you ensure that each "piece" you build is tested, rather than writing a bunch of code and then trying to figure out how to test it.

And yes, by the way, you get designs that are much less coupled and more cohesive.

But to me my favorite part of it is that joyous process of discovery.

Why make methods small and do one thing?

I've been reading the ObjectMentor blog, and it's got some fun stuff in it. The one I particularly liked is how do you know when a function does "just one thing" - the answer - extract methods until you can't extract any more.

Now, I know there is the feeling of - why should I waste all this time writing lots of tiny little functions? But after trying it for a bit, I'm convinced, for two main reasons (although I am sure there are more):

Readability
When you write small functions, each one is eminently readable.  You look at it, and in an instant you understand what it does and its intent.  You don't have to "decode" the method to understand the intent - it just tells you.  I think this is essential - when you understand a code's intent, you can also understand if it is doing what you want it to.

Discovering New Classes
When you extract functions, sometimes you run into this situation where you are passing umpteen (meaning more than two) parameters into the function.  To me, particularly when the list of parameters is long, this indicates the need to extract a class which encapsulates all this data you're passing around.

And I often find once I've extracted the class, it clarifies the design for me.  You have an idea of a design, but you should really let the design reveal itself to you, and this is one of the great ways I have found that happening.

Also, often once a class is extracted, I can see how it can be used elsewhere - I have a new unit of reusability.

Anyway, I recommend keeping an eye on the ObjectMentor blog, there's good stuff there.

Thursday, September 24, 2009

You should like what you do

I was sitting down for dinner last night, after having grilled some chicken kabobs.  I mentioned that I thought I had cooked them long enough but they seemed undercooked.

My 9-year old daughter, Ariel, after a pause, said "You should like what you do."  I looked at her, confused.  "You're always saying something bad about what you do.  I get tired of it.  And it makes me not want to eat what you make."

She really stopped me in my tracks.  She was right!  And I told her so, "you're absolutely right, Ariel."   The words "never apologize!" from Julia Child's book "My Life in France" came back to me.  She tells a story of making a horrific dish, but she and her guests just shouldered through the dish as best as they could, and Julia never apologized and the guests never complained. 

I was so touched by Ariel's sentiment: "you should like what you do."  It was an admonishment, yes, but more than that, an encouragement - I believe in you, and you should too.

I spent some time looking at myself, and saw that indeed, yes, I have an underlying idea of myself as "not good enough."  We could go back into my history to understand how this happened, but I'd rather work with the present moment.  How can I work with this now?

"You should like what you do."  I see this in two ways.  First of all, whatever I do, take pride in it.  Yes, it may not be "perfect" but all the same take pride in it.  It is a creation from the heart.  Secondly, I should like what I do, rather than wish I were doing something else.  This is the key to a happy life.  "It is not doing the thing we like to do, but liking the thing we have to do, that makes life blessed," said Goethe.

So, I'm not rash enough to believe I can change my underlying perception of myself in a flash, but it's something to practice and be aware of.  When I find myself being overly critical or unhappy with something I'm going or have done, I can remember, "you should like what you do" and be happy about it.  Always room for improvement, but it's great the way it is.  My cooking is great.  My code is great.  My pictures are great.  My words are great.  My nose is great.  I am great.

Friday, September 18, 2009

A balance between flux and immutability

A fun blog post by John Rose about the delicate balance between the world of flux (e.g. volatile memory) and our attempts to enforce immutability through functional languages like Erlang.  Immutability is great, is helps rationalize and simplify your logic, but it just doesn't play well with the notion that "you don't step into the same river twice."  His overall conclusion - work with a language that encourages immutability but allows for in-place mutation where it is needed.  You know a craftsman at work when he sees the issues of software from the perspective of ancient philosophy :)
But we know from common sense (that trusty yet abused helper) that we live somewhere between the fluxy world of Heraclitus and the timeless world of Parmenides. In the days of Plato, it was his student Aristotle who balanced the claims of the two accounts, picking a middle way between the two. In short, the formal ideas we perceive and know inhere (in a way real though bound) in the mutable, moving reality around us. Object identities (what he called "substances") are real, though temporal. If Aristotle had marketers like we do, he might have called his account a hybrid paradigm (more Greek, actually, though to him "hybrid" would mean "having hubris") of flux and form. I think it's likely the story will end similarly for us, in our professional difficulties with software, with some sort of middle way.

Just to speculate wildly, maybe those hybrid functional-and-object-oriented languages (like Scala and F#) can provide a sort of dictionary and grammar of useful terms and constructs. These would somehow describe computations as immutable in most places, and manageably mutable in those few aspects needed to model real-world transitions. (Or to implement localized compute engines, like a quick-sorter.

Thursday, September 17, 2009

Racism in America? Shocking!

What?!  Racism still exists in America?!  I am shocked!  And some of the media and politicians are trying to use this to get attention and money?!  Doubly shocking!

I like Obama's approach: we all know racism exists, let's move on and focus on doing our job: fixing health care, fixing the economy, dealing with global warming, and so on.  I suspect he's done that all his life.  Why waste your time putting energy and attention into something that is divisive and ultimately gets you nowhere.  I've never met someone who stopped being racist because someone said "you're a racist!" to them.

I suspect that underlying all of this is not racism per se but a fear of the unknown.  If we work together create a country where each individual feels safer - in terms of their job, their health, and their overall prospects in life - then there will be less hate-filled speech and actions.

Tuesday, September 15, 2009

Time out on timeouts

A very interesting (and somewhat tragic) article about the long-term damage caused by withholding attention and affection as a way to discipline children. 

The most common tool in this toolbox is "time-outs".  My wife and I just didn't feel comfortable with this - it felt humiliating and mean - and the research seems to be confirming it's not the best approach
The studies found that both positive and negative conditional parenting were harmful, but in slightly different ways. The positive kind sometimes succeeded in getting children to work harder on academic tasks, but at the cost of unhealthy feelings of “internal compulsion.” Negative conditional parenting didn’t even work in the short run; it just increased the teenagers’ negative feelings about their parents.

What these and other studies tell us, if we’re able to hear the news, is that praising children for doing something right isn’t a meaningful alternative to pulling back or punishing when they do something wrong. Both are examples of conditional parenting, and both are counterproductive.

...

In practice, according to an impressive collection of data by Dr. Deci and others, unconditional acceptance by parents as well as teachers should be accompanied by “autonomy support”: explaining reasons for requests, maximizing opportunities for the child to participate in making decisions, being encouraging without manipulating, and actively imagining how things look from the child’s point of view.

The last of these features is important with respect to unconditional parenting itself. Most of us would protest that of course we love our children without any strings attached. But what counts is how things look from the perspective of the children — whether they feel just as loved when they mess up or fall short

Monday, September 14, 2009

Health care is the new sexy

This is very funny.  BTW, anyone know why I can't embed this video?

http://www.youtube.com/watch?v=XCw_UoRhTUk

Monday, September 07, 2009

Color photographs of Russia from 100 years ago

Go look at these amazing photos on Newsweek.
Between 1907 and 1915, Prodkun-Gorskii rode through even restricted parts of revolutionary Russia in his specially fitted darkroom rail-car, shooting color photos ... by a method of his own invention
Really quite stunning. So used to seeing black-and-white photos of these times, and here it is, the turn of the century in living color.

Color photographs of Russia from 100 years ago

Go look at these amazing photos on Newsweek.
Between 1907 and 1915, Prodkun-Gorskii rode through even restricted parts of revolutionary Russia in his specially fitted darkroom rail-car, shooting color photos ... by a method of his own invention
Really quite stunning. So used to seeing black-and-white photos of these times, and here it is, the turn of the century in living color.

Monday, August 31, 2009

Blocking health care key to GOP's survival

A great article via Tim Bray on USA health care politics.
Michael F. Cannon, a pundit at the libertarian Cato Institute, has written a blog post that highlights the importance of what I believe will be one of the most important issues in play once Barack Obama assumes the U.S. presidency. "Blocking Obama's health plan," he writes, is "key to the GOP's survival."
Note this was written in December, just after Obama's election. Very prescient, and it explains a lot.

Britain serves as an important political lesson for strategists. After the Labor Party established the National Health Service after World War II, supposedly conservative workers and low-income people under religious and other influences who tended to support the Conservatives were much more likely to vote for the Labor Party when health care, social welfare, education and pro-working class policies were enacted by labor-supported governments. ...

Sunday, August 30, 2009

Whence Obesity?

I'd be interested in real invesigative research into the causes of obesity, but here are my suspicions: it's a combination of economics and modern life - but mostly economics.

Corporations selling food like money (it's a corporation's job to make money, as much as possible)
  • The more people eat, the more food they buy
  • Agribusinesses like this, it makes them money
  • Agribusinesses encourage you to eat more (and fight tooth and nail any government policies intended to get people to eat less - read Marion Nestle for some shocking data on this).
  • People who eat more get fat
Corporations selling food like high margins (make more money)
  • Corn is subsidized by the government
  • Thus corn is unnaturally cheap
  • Thus you can make a lot of money selling things made with corn - high margins
  • In particular, corn syrup - it's in everything. Particularly the cheap things.
  • Poor people buy stuff with lots of corn syrup because its sweet and cheap
  • Processed sugars, including corn syrup, makes you fat.

Maybe at some point the health care costs will change our policies, but I think agribusiness will be dragged into accepting this kicking and screaming. Health care costs are there, but they really don't affect their bottom line enough for them to want to change their behavior.

If I Were King, I would find a way to include the cost of disease based on overeating into the costs of foods, so there is a motivation by businesses not just to sell more food but also to keep people healthy. Also, we need to stop subsidizing large farmers and certain crops like corn. That's just incredibly counterproductive, and is based on very old rationales having to do with struggling family farmers, not agribusiness.

But I don't believe these kinds of changes can get very far as long as business runs government, because politicians need money. I would love to find a way for politicians to get their word out and get votes without the poisoning need for money. Solve that problem, and a whole slew of other problems solve themselves. I know it's not simple - even if the politicians themselves don't spend the money, "political action committees" and specially-funded "positioning ads" will do the job for them. I don't have good answer, but I do think this is a key problem.

P.S. At the Santa Cruz boardwalk they were selling (and people were in line for) deep-fried cheesecake and deep-fried Twinkies. OMG.

P.P.S. Just after I posted this I read Paul Krugman's editorial on health care:
We tend to think of the way things are now, with a huge army of lobbyists permanently camped in the corridors of power, with corporations prepared to unleash misleading ads and organize fake grass-roots protests against any legislation that threatens their bottom line, as the way it always was. But our corporate-cash-dominated system is a relatively recent creation, dating mainly from the late 1970s.

And now that this system exists, reform of any kind has become extremely difficult. That’s especially true for health care, where growing spending has made the vested interests far more powerful than they were in Nixon’s day. The health insurance industry, in particular, saw its premiums go from 1.5 percent of G.D.P. in 1970 to 5.5 percent in 2007, so that a once minor player has become a political behemoth, one that is currently spending $1.4 million a day lobbying Congress.

That spending fuels debates that otherwise seem incomprehensible. Why are “centrist” Democrats like Senator Kent Conrad of North Dakota so opposed to letting a public plan, in which Americans can buy their insurance directly from the government, compete with private insurers? Never mind their often incoherent arguments; what it comes down to is the money.

Friday, August 28, 2009

Things to See and Do In Berkeley

Chris Anderson from the CouchDB community just landed in Berkeley, astonishingly near my house.  I had a nice cuppa with him yesterday and realized there was a list of fun things to do, and particularly great eating places, in Berkeley.  So I sent him my list of the Best of the Best, and thought I'd post it here too:

Places to See
  • I mentioned Tilden Park and Lake Anza.  There is also a working farm where you can visit and feed the animals, an old-fashioned merry-go-round, and a real working scale-size steam train you can ride on.  
  • Walk in the North Berkeley Hills.  There's a book around that gives you a bunch of walks to take
  • Fourth Street in West Berkeley, a street of nice (albeit pricey) shops and restaurants just N of University
  • Solano Avenue, particularly at the Colusa intersection
  • Rockridge shopping area at the Rockridge BART station - a nice place to stroll, browse stores, have a cuppa.  Lots of nice restaraunts.
  • Ashby and College is also a very nice walking shopping area.
  • The Bone Store on Solano.  Just check it out, it's weird and interesting :)
  • Botanical Gardens up Strawberry Canyon behind the University
  • Berkeley Rose Garden is a pretty stroll, but dog must be on leash I think
  • Briones Park on the other side of the hill is a stunning set of rolling hills with trails, I think it's dog-friendly.
  • Swimming at the El Cerrito Pool.  It's a salt water pool, affordable, they have hours for "fun" and for laps.  There's also King Pool right up Hopkins from Monterey.
  • At some point you might want to stroll around Bay Street mall - an outdoor mall, much less offensive/oppressive than other malls.  They have an Apple Store! :)  And of course a big movieplex.

Restaurants:
  • Lalime's on Gilman - really nice "night out" California Cuisine
  • Rivoli on Solano - even nicer
  • Cesar - a great tapas bar on Shattuck
  • Cha Am on Shattuck - Thai food
  • Cha Ya on Shattuck - veggie sushi
  • Acme Bakery on Cedar and San Pablo - incredible, delicious fresh bread and pastries
  • Cafe Fanny on Cedar and San Pablo - really good, pricey French cafe
  • Vik's Chaat Cafe in West Berkeley (forget exact location) - excellent, cheap Indian "fast food".  Indians from all over the Bay Area know of this place and swear by it
  • Ajanta on Solano for nice Indian
  • A lot of people like Breads of India on Sacramento and Dwight.  I've never been there
  • Picante Mexican - wow, *excellent* Mexican food, very affordable.  We go there all the time.  6th street south of Gilman.
  • La Farine Bakery on Solano - chocolate croissants to die for
  • Barney's Hamburgers on Solano - fun, delicious gourmet burgers, veggie available
  • Jimmy Bean's on Gilman and 6th - excellent cafe, delicious sandwiches, fries, etc.
  • Zachary's Pizza on Solano - you *must* try their stuffed spinach/mushroom pizza.  Bay Area award winner for years
  • A lot of people like The Cheese Board pizza, I don't care for it
  • Gioia Pizzeria on Monterey and Hopkins - New Yawk pizza by the slice with fresh California ingredients. The real deal.  Another regular haunt for our family.
  • Loard's Ice cream in El Cerrito Plaza - not the best ambiance, but definitely the best (affordable) ice cream around
  • If you want good, expensive gourmet ice cream, there's a little place on 4th street (thou must check out 4th street, a fun walkable set of stores, 4th N of University)
  • Homemade Cafe on Dwight and Sacramento - nice breakfasts, although I haven't been there in a while
  • Cafe Mediterranee at Ashby and College - excellent Greek/Mediterranean food

Groceries/Markets
  • Wine store on Cedar and San Pablo - my wife swears by their help and selection
  • Berkeley Natural on Gilman
  • Monterey Market on Gilman and Hopkins - cheap, fresh, delicious, local produce
  • Farmer's Market Saturday mornings in downtown Berkeley between MLK and Milvia.  There are others around town during the week.
  • The Country Cheese Shop on Hopkins/Monterey.  While you're there, check out the fish market and the butcher (and of course Gioia Pizza and Monterey Market).  A real gem of a corner.

Enjoy!

Friday, August 21, 2009

What is "Erlang Style Concurrency"

In my spare time I continue to try to slowly educate myself about the new concurrent programming languages like Erlang and Scala.  I ran into this article by Ulf Wiger on What Is Erlang-Style Concurrency? which I thought was an excellent overview of what's there and why it's important.

I loved the bit about the value of process monitoring - the system itself takes care of watching processes and if one crashes restarts it.  Serious fault tolerance, embedded in the language runtime.  Cool.

Monday, August 10, 2009

SDD - Scenario Driven Design

The engineering leadership here at Symantec has a strong commitment to TDD - Test Driven Development.  I have been enjoying practicing this approach and experiencing its benefits.

Through this process I have also seen a similarity between TDD and an approach to design that I have applied, which I shall now moniker "Scenario-Based Design" or SDD.

One approach to design is to get a sense of the requirements from a functional spec, and then put together a design that looks like a good fit.  You come up with a set of initial abstractions and then go from there, using TDD to refactor as needed.

Although that approach works, you can commit yourself to a lot of rework if your initial design is off the mark.  You can still get to a good design, but it takes time, and who has time these days?

So I think it behooves to apply TDD principles to design. 

First of all, identify the scenarios you want to support.  Your functional spec should describe the scenarios as use cases.  Even if you're designing an API for a service rather than a user-visible feature, your functional spec should still describe use cases.

At the first draft, just write out all the use cases as one or two sentences, following the principle of "actor- initial condition - goal"  For example "A developer is using the IncidentManager and wants to find out how many incidents exist for a given resource" or "A system administrator has a system which is CPU bound and wants to find out which processes have the highest CPU usage."

Identify which higher-priority scenarios you think will have the biggest impact on design.  Normally this is fairly easy to determine.

Start with the first scenario, and come up with some abstractions that seem reasonable for that scenario.  You can do this with CRC cards or just on a whiteboard or a piece of paper.  Exercise the abstractions with the scenario, refine as needed.  You're looking for a high-level design, don't define the signature of each method; save that for your TDD.

Then go to the next scenario, and repeat.  Normally you'll find that you have to rejigger things a bit to address the new issue.

I recommend thinking about some of the more common error conditions, work through them too.

The value of this approach is similar to TDD - you design only what you need, and you do it based on real-world scenarios, not on your own concepts of what makes sense.  Personally it's quite fun to watch the design evolve on its own.  

This approach reminds me of stories of two great artists/designers in other fields.

When I was in Florence, I went to the museum that had the statue of Michelangelo's David, which is wonderful, but in the same building were a series of unfinished sculptures by Michelangelo.  It was immediately clear that the sculpture was "born" out of the stone - he wasn't forcing his own ideas onto the stone, but was letting the image evolve out of the nature of the stone itself .  When I read his biography later, my impressions were confirmed.  He says "Every block of stone has a statue inside it and it is the task of the sculptor to discover it."[1]

The other story (perhaps apocryphal) [2] is of a woman who was the architect for a huge college in England.  She had the entire campus built, but without any pathways.  When asked about this, she said, "wait until the first snow."  Then when the snow came, she took pictures of all the paths carved out in the snow by the students, and placed the pathways there.  Genius.


[1] http://www.brainyquote.com/quotes/quotes/m/michelange386296.html
[2] Steward Brand, How Buildings Learn

Monday, August 03, 2009

Lies, damn lies, and statistics - health care rescission

Great article by Taunter Media about the damn lies behind the quote from insurance exec Don Hamm that "Rescission is rare. It affects less than one-half of one percent of people we cover. Yet, it is one of many protections supporting the affordability and viability of individual health insurance in the United States under our current system."

When you really do the math, it's clear that that small percentage is actually a very very large percentage of people who have expensive illnesses.  Here's Taunter telling us the disturbing facts around this number:
If the top 5% is the absolute largest population for whom rescission would make sense, the probability of having your policy cancelled given that you have filed a claim is fully 10% (0.5% rescission/5.0% of the population). If you take the LA Times estimate that $300mm was saved by abrogating 20,000 policies in California ($15,000/policy), you are somewhere in the 15% zone, depending on the convexity of the top section of population. If, as I suspect, rescission is targeted toward the truly bankrupting cases – the top 1%, the folks with over $35,000 of annual claims who could never be profitable for the carrier – then the probability of having your policy torn up given a massively expensive condition is pushing 50%. One in two. You have three times better odds playing Russian Roulette.
If we suspect that the insurance industry targets rescission against those people who have expensive illnesses, then it's not an accident, it's very intentional, and basically tells you that you get to have insurance only until and when you really need it, then you're on your own. So we Mr. Hamm says health insurance is affordable, I can only assume he means for his company, not for those who are seriously sick.

But hey, let's let the free market decide who should be covered and how.  The government is only going to get in the way - of making money, that is... 

Saturday, July 18, 2009

Sexuality at camp: this is normal?

My nine year old daughter just came back from a week of sleep-away camp.  She came back swearing.  She told stories of camp counselors doing the bump-and-grind during the camp dance.  They watched sexy PG-13 movies on the bus to camp. As she talks to us about the little vignettes of her time there, there is overall a sense of a "party" atmosphere that is more appropriate for college kids than eight- and nine-year-olds.  I am not sure what I expected, but I didn't expect this. 

For years I've noticed that our culture has become more and more anesthetized to sexuality, and in particular I have noticed kids being exposed to stuff that just seems way too mature for them.  When I see little girls in princess outfits doing hip-grinding moves on the dance floor at dance recitals and Club Med for kids shows including scenes from Cabaret and other adult films, it just seems Wrong.  We don't do TV, but I catch it from time to time, and I can only imagine what it's like for a kid growing up watching what's out there. Somehow I am not surprised girls are reaching puberty earlier and earlier - being exposed to all this sexual energy has got to kick hormones into gear.

Is this really what we want for our kids?  Aren't we confusing them?  Are we doing right by them by providing absolutely no boundaries or guidance around this?  Does anyone even care any more?

I hear myself, and I wonder, jeez, am I just being a prude?  But I don't think so.  I think there is a time and place for everything.  Intuitively I sense that there is a sacredness to childhood, that you are in a certain place emotionally and otherwise, and that this is not the time to be exposed to sexuality.

One of the signs of a dynsfunctional family is kids being forced into adult roles - it is abusive and confusing for the child.  This overexposure to sexuality feels like an form of sexual abuse -- boundaries are being crossed that should not be crossed and leave kids feeling more "adult" than they should. 

What's upsetting is that many parents and adults in general don't seem to think much of it.  It's not that they have explicitly chosen to expose kids to sexuality, they just don't seem to think much about it one way or the other.  Whatever.

The sexual revolution of the sixties brought us a lot of great things.  I think it's healthy for adults to talk about and experiment with sexuality.  I think it's wonderful that people are learning not to be ashamed of their sexuality.  But let's keep it with adults.  I think the sexual revolution also has been misinterpreted by many into "anything goes" attitude, and I also think this is being taken advantage of by advertisers, musicians, and anyone else with something to sell to sell products through sex, and if it exposes kids to inappropriate sexuality, well, that's just collateral damage.  And over time it's just becoming more and more the norm.

I don't have an answer, sometimes you're just in a sea of culture that is moving in a certain direction, and you just have to manage as best you can.  But I do feel the need to say something, as in this case it feels like silence is a form of consent.  I do live in this culture, but this aspect of it, I don't agree with. 

And no, Ariel is not going back to that camp next year.

Thursday, July 09, 2009

James Strachan: Scala is the new Java

I've been hearing about Scala for a while now, and have been contemplating digging into it a bit, trying to write some code and get an idea of its strengths and weaknesses.

I think James Strachan's blog post just put me over the edge.  I'm not sure when I'll find the time, but learning Scala has just moved high up on my "things to do to expand my knowledge" list.

What particularly kicked me into high gear was that James is the author of Groovy, from all I've heard an excellent language in its own right.  In his post he says I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.

Wow.  That's some statement.

James' salient points:

  • Scala has type inference - and that's a good thing: "it makes code comprehension, navigation & documentation much simpler"
  • Scala has high order functions and closures "so you can write beautifully concise code"
  • Scala has mixins (called "traits") "so you don't have to muck about with AOP wackiness to get nice modular code"
James summarizes "the beauty of Scala soon becomes apparent; its simplified so many of the gremlins in the Java language, allows you to write very concise code describing the intent behind the code rather than the implementation cruft - together with providing a nice migration path to elegant functional programming which is awesome for building concurrent or distributed software"

Time to get Odersky's book and give it a spin. 


Monday, June 29, 2009

Shut up and write those tests

One of the things I love about my new job is that this team is committed to the craft of software development, and is introducing me to Deep Testing.  I was pointed to this excellent book, Working Effectively with Legacy Code by Michael Feathers, and to this amazing little toolkit called Mockito.


Working Effectively with Legacy Code assumes a Test-Driven Development attitude and philosophy, and then tells you how to go into a hairball of existing code and get it to be testable.  Chapter titles include "I Can't Get This Class into a Test Harness" and "I Don't  Understand the Code Well Enough to Change It," and includes techniques for breaking that bugaboo of unit testing, hard-coded dependencies, like "Extract and Override Method Call," "Introduce Instance Delegator" and "Subclass and Override Method."  Excellent stuff.

Mockito is a mocking framework that is just insanely easy to use.  Here is a piece of code I wrote where the class to test had a large number of dependencies, and I just mocked out all but the relevant ones.  This took me about ten minutes to write, and it was an excellent way to test impact of the changes I was making:

Checkpointable mockCheckpointable = mock(Checkpointable.class);
CrawlerContent mockCrawlerContent = mock(CrawlerContent.class);
List crawlerItems = new ArrayList();
crawlerItems.add(mockCrawlerContent);

ContentStream mockContentStream = mock(ContentStream.class);

when(mockCheckpointable.getItems()).thenReturn(crawlerItems);
when(_mockCrawlerContent.getContentStream()).thenReturn(mockContentStream);

_messageManager.sendCheckpoint(mockCheckpointable);

verify(_mockContentBuffer).handleContentFromCrawler(mockContentStream, mockCrawler);
verify(_mockWalkUpdater).handleCheckpoint(mockCheckpointable);

With tools like this in hand, plus an attitude of commitment to excellence, I now firmly believe you can wrestle your code to the ground and get it into a unit test framework and start improving not only the testability and quality but overall architecture of your code.  I don't care if your code is full of massive, crufty code you can't understand, with lots of accesses to the network and the database, you can write unit tests that test modules independently. 

So shut up and write those tests.  You have no excuses.

Friday, June 26, 2009

Ayatollah you so - Daily Show

Very funny clip, and sweet too, of the Daily Show in Iran