January 2008

Monthly Archive

I just read Brian’s post titled “The art of science (or the science of art)“, which reminded me of certain discussions I had over dinner at the workshop in South Africa, particularly with Carli Deysel, from ThoughtWorks.

On the very first evening, as we were talking about our mutual aspirations to change the world and help people in our industry (!), she posed the classic question: Is code art? Is there code that can be considered as such?

She seemed surprised to hear that I categorically didn’t think so. After all, we were just talking very passionately about our profession and the creativity and skills it requires; so why not?

I quickly learned that if you try to debate with Carli, you better have a solid point. LOL, she easily crushed my weak attempts to make my case. Luckily, Andrea Provaglio joined the conversation and supported my view. He pointed out that we can certainly find beauty in code. But aesthetic appreciation alone is not sufficient to define something as “Art”.

In hindsight, my biggest grief with defining code as art, is that code has a functional purpose. It is born to be useful; it solves problems; it creates opportunities. Code is like any “how-to” books: it has a function and a limited time-span.

poetryPoetry, on the other side, is (functionally) totally worthless; we don’t “need” it. I can’t read a poetry book to learn how to do something. Yet, some of these books are simply immortal because they force us to reflect on who we are; they deepen our understanding of our human condition; they may even make us cry unexpectedly while truly touching our souls.

In other words:

If writing software is about problem solving, then code will never be art. At best, we (the developers) create beautiful hammers.

Add this post to: del.icio.us:Code Is Not Art digg:Code Is Not Art spurl:Code Is Not Art simpy:Code Is Not Art newsvine:Code Is Not Art blinklist:Code Is Not Art furl:Code Is Not Art reddit:Code Is Not Art Y!:Code Is Not Art google:Code Is Not Art technorati:Code Is Not Art stumbleupon:Code Is Not Art windowslive:Code Is Not Art

How do you define a work of art? That may seem like an easy question - just visit Michelangelo’s David in Florence, or view Caravaggio’s The Taking of Christ in Dublin. Read the first few chapters of Joyce’s modernist masterpiece Ulysses or explore a collection of Dorothea Lange’s incredible photography. That is real art and it’s unmistakable, you might say.

Federer Backhand

I wouldn’t argue (well, clearly I chose the above examples). But I’ve been thinking about a broader definition of art this week that includes pure craftsmanship or absolute skill in a particular domain. For example, would it be fair to say that Roger Federer’s liquid motion topspin backhand is a thing of beauty, truly artful in its own way? Certainly it is a master stroke that he has perfected over the years to devastating effect on his opponents. People often speak of Federer as an artist on the tennis court, a true genius and absolute master of form and technique - OK, so he was beaten in the semi-finals of the Australian Open last week, but even the greatest artists are fallible after all!

Think about some of your favorite buildings in the world - for example, when I look at the Flatiron building in New York I think of a masterful work of art. Certainly I consider it to be a dazzling feat of pure engineering skill; it’s an example of artistic and architectural harmony that I wouldn’t hesitate to call art.

What about software development as art, in that case? We’re not talking about oil on canvas, carved stone, or words on a page — but can programming reach the level of art? What distinguishes truly brilliant software from yet another mundane application shipped 2 years late and bloated with unnecessarily complex features? Certainly I think you can find art in simplicity throughout the software world. Reading Joseph Cooney’s blog, I was stunned to discover that 37 Signals created their ta-da list product with just 579 lines of Ruby code in 2005! Is creativity, innovation, and simplicity in programming enough to justify the label of “art”?

If this subject interests you, I’d also suggest taking a look at John Littler’s excellent article on Art and Computer Programming. John highlights this very germane quote from none other than Einstein himself:

“After a certain level of technological skill is achieved, science and art tend to coalesce in aesthetic plasticity and form. The greater scientists are artists as well.”

Several people have referred me to The Art of Computer Programming volume by Donald Knuth, so perhaps I’ll find some answers there. It’s always refreshing to find new examples of craftsmanship and pure skill in any creative domain. Perhaps we are too restrictive and old fashioned in our definition of what qualifies as art and the role that science and art play in that world (and vice versa). On that note, we all have our favorite applications that solve a troublesome problem with artful simplicity and effectiveness. Care to suggest a few from your experience? I’d really like to hear about software that moves you.

Add this post to: del.icio.us:The art of science (or the science of art)... digg:The art of science (or the science of art)... spurl:The art of science (or the science of art)... simpy:The art of science (or the science of art)... newsvine:The art of science (or the science of art)... blinklist:The art of science (or the science of art)... furl:The art of science (or the science of art)... reddit:The art of science (or the science of art)... Y!:The art of science (or the science of art)... google:The art of science (or the science of art)... technorati:The art of science (or the science of art)... stumbleupon:The art of science (or the science of art)... windowslive:The art of science (or the science of art)...

The software architecture workshop in South Africa has come to an end. Spending a few days in a beautiful game resort close to Sun City, I worked closely with a tiny group of new and old friends from different parts of the world. As in previous editions, we used the open space organizational framework.

bakubungAs usual, we voiced our opinions, listened, tried ideas and shared stories, occasionally challenging but also consistently helping each other.

On the closing comments at the end of the workshop, Jimmy tried to identify the main theme that seemed to emerge from the dialogs and suggested “cultural differences”. I can’t agree more. I was particularly touched by some extreme stories of titanic struggle while working with certain teams and customers due to differences in attitude, values, ethnic group and gender.

At first, I was vividly shocked. In the past, particularly while working as a consultant, I have been deeply involved in some seriously complex projects, where hostile customers, uncooperative teams and blaming cultures seemed to preclude any chance of success from day 1. Yet, I’ve somewhat always managed to reverse the “natural” course and helped teams succeed well beyond anyone’s expectations.

But these new stories forced me to dig deeper and question my own abilities once again. I thought over and over about what gave me strength in those situations. Why didn’t I just quit? Where those new stories all that different from mine?

Maybe. But, at the risk of sounding extremely preachy, here is a thought. There are no quick-fix solutions to these problems but there is a definite path. To get all the support you need, you have to lead by example, respecting each other’s skills and talents, fully trusting everyone and expecting them to meet that trust. Show integrity and passion, be determined to do what’s right and help others to get there as well. This has nothing to do with being nice. It takes a lot more than “being nice” to develop the will, knowledge and skills to move people for the greater good. I know now, more than I ever knew, that my strengths come from the inside, from being (or, rather, trying to be) principle centered.

When I mention how profoundly “The 7 Habits of Highly Effective People” helped me throughout my personal path, I often hear “Oh, yeah, I read that book” (btw: get the cd first, it is much more effective, imho). But I think most people may not reflect on the hundreds of hours I spent listening to the audio tapes, over and over, learning, teaching to others, and fundamentally reprogramming my behavioral scripts.

I am eternally grateful to those who shared their stories at the workshop; I really wish I could help. I hope to see you again next year, at the latest.

Add this post to: del.icio.us:Celebrating cultural differences digg:Celebrating cultural differences spurl:Celebrating cultural differences simpy:Celebrating cultural differences newsvine:Celebrating cultural differences blinklist:Celebrating cultural differences furl:Celebrating cultural differences reddit:Celebrating cultural differences Y!:Celebrating cultural differences google:Celebrating cultural differences technorati:Celebrating cultural differences stumbleupon:Celebrating cultural differences windowslive:Celebrating cultural differences

I’m just back from Sweden, where I met several folks from Microsoft and our really good friends and partners at Cornerstone. I really like going to Stockholm as people are really bright and welcoming over there!

Tomorrow I will be flying to participate to Jimmy Nilsson’s “European” Software Architecture Workshop…in South Africa!! I know, I know. I’m truly blessed.

2008As you may have already noticed, this year is looking really promising for me already, so I decided to break my stupid own rules and write down my New Year’s resolutions while the enthusiasm is still high.

 

Write more code

Last year I moved full steam into product management, release planning, agile coaching, strategic development, research, coordination and business development. In other words, I’ve been fighting like a lion, aiming at removing obstacles, mitigating risks, dealing with constraints, creating new ideas and pursuing new opportunities.
There is something horribly missing in this busy picture, however. I haven’t written much production code for the best part of the year. So that’s it? Years of hard work refining “the craft” have been totally thrown out of the window? Guess what, I’m not prepared to let go of it.
In my humble opinion, C# 3.0 absolutely rocks. I spent Christmas playing with Moq and parsing expression trees for a toy(ish) Linq provider I developed! If you just think that all of this is sad, leave this blog now…there won’t be anything for you to see here :-)

Therefore this year
Write tons of code. Production code. Learn, share, help and lead by example. As usual, strive for elegance and simplicity. Be humble, it will be easier to improve.

Simplify

But I also want to help people writing more meaningful code. We like to estimate, quantify, measure lines of code, complexity, coverage, we start the stopwatch, we really want to be faster. Some metrics are incredibly helpful; others are not that beneficial.
If there is one thing that I learned while working in the software development industry all these years however, is that we are so distracted by the details of the solutions that we offer, that we often fail to see that we end up trying to solve wrong problems in the first place.

Therefore this year
Strive for elegant simplicity, being more creative than ever… Simple solutions are often incredibly hard to find and may not be there at all. But do not to give up too quickly. Challenge the requirement definitions, as actual needs are almost invariably poorly understood and defined.

Be Focused

I want to be less reactive than I have been in past year. At times, I have been a slave of Outlook for the best part of my day. It is part of my evolving role, I guess. I tried lots of techniques and addins to cope with the ever increasing amount of emails and tasks that clutter my existence…I know, it is only an excuse.

Therefore this year
Stay alert and curious, but don’t get distracted easily. Be less committed and just involved, or simply let go of things that are not that important.

And finally…

Contribute!

I constantly learn things, from everything and everyone, but I sometimes feel that I’m not able to give much in return.

Therefore this year
Contribute more actively to the development community. Work on some meaningful open-source project, speak and write more often.

Happy 2008!

Add this post to: del.icio.us:Looking Backward, Moving Forward digg:Looking Backward, Moving Forward spurl:Looking Backward, Moving Forward simpy:Looking Backward, Moving Forward newsvine:Looking Backward, Moving Forward blinklist:Looking Backward, Moving Forward furl:Looking Backward, Moving Forward reddit:Looking Backward, Moving Forward Y!:Looking Backward, Moving Forward google:Looking Backward, Moving Forward technorati:Looking Backward, Moving Forward stumbleupon:Looking Backward, Moving Forward windowslive:Looking Backward, Moving Forward

It’s so easy to become disconnected from others in this increasingly ‘connected’ world. This is quite an irony — the more technology facilitates an always-on interconnected life, the easier it is to become an email hermit and avoid frequent human contact. Often I find that it’s better to pick up the phone and just talk to someone rather than craft the perfect email, spell checked and reviewed for clarity.

Working alone for long periods of time can be quite alienating too. While some people absolutely love the home office setup, I find it a struggle sometimes. So when I feel the walls of my home office closing in, I’ll make a break for Luva Java, one of the very best coffee shops I’ve found in San Francisco. The coffee is superb (so long, Starbucks), wireless access is free, and you can’t beat the ambiance. Sometimes you just need other people around to get things done.

I’ve no doubt that the same applies to software teams, where working together is the key to being successful. As Henry Ford said:

“Coming together is a beginning.
 Keeping together is progress.
 Working together is success.”

I believe that’s particularly true for software teams — the whole is often greater than the sum of its parts.

InnerWorkings Team Purchase

With our eyes fixed firmly on the success of your whole .NET software team, InnerWorkings has just released a new team purchase option on our website. Now you can buy our coding challenges for up to 15 members of your software team in a single transaction from our web catalog. Simply select the number of developers in your team from the drop-down list on our shopping cart and provide a list of their email addresses when prompted. After you checkout, each developer listed in your team will receive a setup email from us explaining who purchased their Drills and how to access their learning content right away. It’s that simple!

If your software team has more than 15 .NET developers, we can offer some enterprise discounts that may be more appealing to you. In this case, simply contact sales@innerworkings.com and our sales team will prepare a custom quote for your business. Either way, we’ve got you and your software team covered…

Add this post to: del.icio.us:For software teams, working together is success digg:For software teams, working together is success spurl:For software teams, working together is success simpy:For software teams, working together is success newsvine:For software teams, working together is success blinklist:For software teams, working together is success furl:For software teams, working together is success reddit:For software teams, working together is success Y!:For software teams, working together is success google:For software teams, working together is success technorati:For software teams, working together is success stumbleupon:For software teams, working together is success windowslive:For software teams, working together is success

Today I’d like to introduce the winner of our first Silverlight coding contest. At the risk of boring everyone, I’ll begin with a bit of history. The contest idea sprang from a meeting with Erik Gunvaldson in Microsoft’s Enterprise Partner Group. On our last trip to Redmond, Debbie and I met Erik in the lobby of some distant building on the outer boundaries of the Microsoft campus — somebody call a meeting about the lack of meeting rooms there! We spent about an hour thinking of creative ways to interest .NET developers in Silverlight and the InnerWorkings learning environment. Through the hum of lunchtime lobby traffic, we finally came up with the simple idea of holding a virtual Silverlight contest.

Why not get developers to engage with Silverlight in a fun and competitive environment? How about offering them some excellent prizes like an Xbox 360, Expression Studio, InnerWorkings subscriptions, or signed copies of Halo? We reckoned that Microsoft has the contacts and InnerWorkings has the developer platform with analytics to make it happen. Good idea, let’s do it! Inevitably, this enthusiasm was followed by a few weeks of planning, project management, and email flurries to relevant parties. To his credit, Erik called in his EPG managers and lined up a bevy of partners to participate in the private coding contests.

Under Michelle Follman’s watch, the first such contest started at Sogeti and involved participants across their worldwide development organization. We had almost 50 .NET developers sign up to compete for the grand prize (Xbox 360 and 1 year subscription to the InnerWorkings catalog) and the competition was intense. The contest ran from December 10th - 28th and developers had to complete two Silverlight coding challenges set by InnerWorkings. Our trusty code checking engine filtered the top contenders and when the contest closed, a very deserving winner rose to the top of the Silverlight coding pile.

Randy Magruder

And the winner is <drum roll> Randy Magruder from Sogeti’s Florida offices in Tampa. Don’t be deceived by Randy’s stoic demeanor in this photo, he’s really delighted to win the top prize (honestly)! Randy only joined Sogeti last November, so he’s already making quite an impact. We were singularly impressed by Randy’s definitive win. In fact, he logged a perfect score in our system by completing both coding challenges with a 100% score and a single judging attempt on each challenge. A few others came close with 100% scores, but nobody else could solve the coding challenges with just one attempt. Good work indeed, Randy — take a bow!

For the record, Randy is pretty impressed by what he’s seen with Silverlight so far:

“Regarding Silverlight, I am very encouraged to see Microsoft enter this space, as the work they are doing will hopefully bring a more mature toolset and development environment to rich web applications. It will also bring many experienced developers who will already be familiar with the development environment and language. This should help them to push the edges of the web application envelope much sooner than they might otherwise be able to do.”

Well said, sir…

We’ll be running a series of Silverlight coding contests with other Microsoft partners over the next few months, so stay tuned for details on future winners. And let me know if your company is interested in setting up a private coding contest on Silverlight or some other shiny new .NET technology.

Add this post to: del.icio.us:Announcing our Sogeti coding contest winner digg:Announcing our Sogeti coding contest winner spurl:Announcing our Sogeti coding contest winner simpy:Announcing our Sogeti coding contest winner newsvine:Announcing our Sogeti coding contest winner blinklist:Announcing our Sogeti coding contest winner furl:Announcing our Sogeti coding contest winner reddit:Announcing our Sogeti coding contest winner Y!:Announcing our Sogeti coding contest winner google:Announcing our Sogeti coding contest winner technorati:Announcing our Sogeti coding contest winner stumbleupon:Announcing our Sogeti coding contest winner windowslive:Announcing our Sogeti coding contest winner