RSS 2.0
Journal / Blog
Thursday, December 04, 2008
Fun With Twitter
I think of Twitter as a mash up of instant messaging, IRC, and the web. It's a great tool for keeping abreast of the global technical sphere and a great place to connect with people from your local community. The flexibility of Twitter, it's growing user base, and it's APIs are probably what has accelerated its use.

A couple neat examples of the flexibility of Twitter that I've seen are:
What innovative uses of Twitter have you seen or do you use?

Wednesday, December 03, 2008
The Best Teacher I Ever Had: An Ode to Stephan Regoczei
The most interesting courses at school were my non Computer Science courses (the comp sci courses were pretty easy since the instructors depended heavily on code samples and textbooks), and Stephen Regoczei's course on Digital Multimedia tops my list for being the most interesting and inspirational course.

I usually picked my summer course while tree planting since most of the course syllabuses were online, but Regoczei's course (aside from a vague 200 word blurb that the course digital multimedia related topics) had little information.

I emailed Regoczei requesting a syllabus and received a reply along the lines of:
"Due to socioeconomic reasons, I do not respond to my email."
His course was ironically about communicating, the internet, and digital media, but yet he wouldn't respond to email?! This was weird! I signed up for his course, I was intrigued.

On the first day of class, I sat near the front - but not in the front row (I was trying really-really hard not to be too geeky). Like most students in the class - I was clueless to who this Regoczei character was. Ten minutes after the class was scheduled to start we still didn't have a professor, and students started leaving. Minutes later, a man who looked like he could be our professor walked through the door, but he then sat down among the students took off his jacket, took off his shoes, and the class waited a couple more minutes. The man who could have been our professor, started striking conversations with those around him, then stood up and walked to the front of the class, and introduced himself in a strong foreign accent as Stephan Regoczei - he was our professor.

With a series of five chalkboards available to him, and a full class, Regoczei would start jotting his notes on the middle black board, he'd then move left (not right as one might expect) to the next board, then back to the middle board. Then to the bottom left corner of the middle board, to the top right corner, filling in any empty space with his notes. He never touched the left or right most blackboards, but instead created a jumbled nest of notes that were impossible to follow if you hadn't been taking notes. Regoczei often hedged around answering assignment / test related questions, instead he assured us that we would either "get it" or "not get it", but he would say that he felt we were smart enough to "get it". Over the first few weeks students would occasionally storm out of the class as they were obviously frustrated with his unconventional approach to teaching. When students did storm out he'd giggle and make funny remarks like "I guess they won't 'get it', they must have been in the wrong class".

The marking structure for this class was as unconventional as his teaching style - which had many students griping (I think some were on the verge of starting a petition to try and have him fired). The assignments weren't hard, but they were extremely open ended which made you think. One assignment was along the lines of "present four topics in the Media that you found interesting". Submissions in the form of a four page essay consistently scored lower than a single sheet of paper filled with bullet points and hand drawn color pictures. At the end of the course most of the students that "got it" had abandoned their pens and computers for paint, scissors, and pencil crayons. On my final exam I used a pair of scissors to turn my exam book into a pop-out, and had answered every question with a different colored pencil crayon.

In retrospect Regoczei really forced his students to think outside the box in a conventional setting - if we didn't think outside the box we received a poor mark. For me, he demonstrated that if you understand the constraints of your environment, then you can play within these rules and thrive as you change the rules. Today I'd label Regoczei as a heretic.

Regoczei's course also promoted a great sense of community - the first 45 minutes of his class were dedicated to a media show-and-tell where students could show an exciting product, or bring up an article for discussion. In a couple discussions we debated whether the oil slicks (highways) covering our country were worse than the oil spilling into the oceans and the emissions in our air, or how antiques featured on the antique road show can maintain value whereas mass produced replicas were cheapening our world, and we had ongoing conversations on quality vs quantity. In addition to the discussions, his extremely open ended assignments forced the class to come together and compare their marks and assignment strategies in an effort to figure out his bazaar marking scheme.

Today I think Regoczei's main points were (but I'm not sure, and every student walked away with different ideas):
  • You need to think outside the box in order to be successful
  • We should question everything
  • People that can get beyond conventional thinking will never need to look for a job, because the jobs will always find them
  • There is a world of difference between "Kiddie" computing (Microsoft based PCs) and "Grown up" computing (unix, linux, macs, anything else)
This course along, with my discussion based English seminars were the most exciting, inspirational, and though provoking courses at Trent University. These were the courses that really taught me how to learn, inspired me, and left me hungry to continue learning, reading, writing, thinking, and growing.

This quote from Arden's book reminded me of Regoczei's approach to teaching:
Good marks will not secure you an interesting life.
Your imagination will.
- Paul Arden, Whatever You Think, Think the Opposite
What inspirational teachers have you had in the past?

Tuesday, December 02, 2008
I WANT MEANS if I want it enough I will get it.
I WANT MEANS if I want it enough I will get it.
Getting what you want means making the decisions you need to make to get what you want.
Not the decisions those around you should make.
Making the safe decision is dull predictable and leads nowhere new.
The unsafe decision causes you to think and respond in a way you hadn't thought of.
And that thought will lead to other thoughts which will help you achieve what you want.
Start making bad decisions and it will take you to a place where others only dream of being. - Paul Arden, Whatever You Think, Think the Opposite
In one of my previous posts I said that I wanted more passion in my work - I want to be a happy satisfied developer (to use the tools, editors, frameworks, computers, and languages of my choice). After publishing those thoughts, I wondered if I was being self centered - I kept thinking: "maybe I should just be happy with where I am? People are in worse situations right?" Then Arden comes along and offers that bit of encouragement.

We only live once, happiness and passion is important, I can't settle for mediocracy. I continue to want.

Friday, November 28, 2008
Bad Advice: If you don't have anything nice to say, don't say anything at all
"If you don't have anything nice to say, don't say anything at all" is bad advice and here's why.

During the process of discussing something not nice we develop a vocabulary to express our discomfort with the item in question. Once we've developed this vocabulary we can then communicate our concerns within our community - the chances are, others probably share these concerns / frustrations, but they might not have developed the vocabulary. The community discussions might result in a resolution to the problem, or may be ignored, but at least you can feel satisfied that you tried.

It's kind of like that one person during a lesson / presentation / lecture that asks the exact same question you were thinking, when the question is presented a whole new slew of questions are asked as the class engages in discussion.

Conversely, saying nothing, does nothing, you remain isolated, and your concerns / questions / frustrations are permanent.

Speak your mind, you only live once, and most of us can accept that your ideas today will differ in the future - we change. More companies / people / organizations should take feedback as a compliment and encourage discussion.

Thursday, November 27, 2008
MVC is a Welcome Addition to ASP.NET, but.... MVC Frameworks, like Ruby on Rails are More Mature
The Model View Controller (MVC) pattern is a great addition to ASP.NET. The MVC pattern was first described in 1979 by the SmallTalk community - those crazy SmallTalk guys!

Today Wikipedia lists 80 different web frameworks that use MVC - with Java and PHP topping the list for the languages with the most MVC web frameworks. MVC enforces a separation of responsibilities: Markup / CSS / JavaScript, Domain Objects / Containers, and Actions / Controls are broken up into their respective directories. In addition MVC provides the ability to test most of your code and is more intuitive with how the web works (REST like, based on URIs, plays nicer with the browser, and not dependent on POST backs).

Finding good resources specifically for ASP.NET MVC is impossible at this time, but the books covering Ruby on Rails (RoR) are invaluable. RoR has been around since 2005, it uses the same basic MVC approach, similar routing, similar control structure, has a mature community, a large collection of plug-ins, and well established tools (anyone claiming that ASP.NET MVC can't do what WebForms can, should look to Rails as an example). Gasp! It's almost like ASP.NET MVC has copied Rails!! :)

Anyhow; the more I learn about Rails and Ruby, the more I realized that the communities like RoR (SmallTalk, and even some of the PHP world) are years ahead of my native .NET community. At this point I'm considering abandoning .NET in favour of Ruby / Rails / RSpec or at least Merb / Ruby / RSpec. In the future when ASP.NET MVC and IronRuby are more mature or when the corporate world starts using ASP.NET MVC (read never ever!) or when I'm approached to work on an ASP.NET MVC project I might move back into ASP.NET. In the mean time I'd like to contribute to IronRuby as I work towards jumping my current technology stack. I've armed myself with Textmate (the E Text Editor) and a MacBook Pro is in my future. I'll get back to you on how this goes. :)

Monday, November 24, 2008
Passion, Quality Over Quantity, Domestic Failure: Microsoft, Ford, GM, Chrysler?
Steve Ballmer (the CEO of Microsoft) made this comment during Mix '08 during his interview with Guy Kawasaki:
GUY KAWASAKI: Okay. ... so it was like in the ashtray of your Lexus?
STEVE BALLMER: I'm a Ford guy, and I'm slightly offended by that. My father who worked for Ford would be offended, but nonetheless ...

Fair enough, Ballmer likes Ford, but what kills me is that he apparently made his choice by association. Like Ballmer, my extended family are (were) also employed by Ford in the US Rust Belt. However, I still value quality and the economics of a purchase over my family affiliations. Of course, this is a broader issue - many people favour historical affiliation / brand loyalty over critical thinking and this may never change, but Ballmer is the CEO of Microsoft!

Now Ford, GM, Chrysler are on the verge of bankruptcy, and while many factors contribute to their situation. I think most people agree that these automakers kept making poor decisions for short term revenue gains - they kept making bigger expensive, less efficient cars, they were inward focuses and failed to look at possible future scenarios (like a global economic recession, skyrocketing oil prices, doomsday, blah-blah-blah). Basically, the big three automakers have been out of touch with the rest of the world. People like me (and probably you too) have never owned a domestic car. For myself, imports offered better value for my money (better fuel efficiency, a higher resale value, and a longer life). In addition, imports felt safer, sturdier, and were more aesthetically pleasing. Imports offered quality over quantity, and they looked nice too - imports made me a happy satisfied consumer.

Like the big three automakers, Microsoft (or Ballmer at least) is out of touch with their community (their developers). For myself, the community oriented / collaborative communities outside Microsoft are continually drawing me in. The openness of these communities and their open solutions is one part of the interest, but I'm also growing tired of working in an ecosystem (and with developers) that literally lag years behind the rest of the software world. Down here in the trenches Microsoft centric developers bear a striking resemblance to the unionized American autoworkers - inflexible, arrogant, and inward focused.

I want a development stack I can be proud of, that embraces quality over quantity, to work with developers that share my values, and an environment that offers more aesthetics. In short I want to be a happy satisfied developer.

In all fairness, it's great how Microsoft is opening up (i.e. IronRuby, IronPython, MVC, etc...), but there are already more open established and mature communities outside Microsoft. I also really like C#, WCF, ASP.NET MVC, and Server 2008, but it's all the baggage associated with the Microsoft ecosystem. It's also fair to mention that the ALT.NET community is making great strides, but it is fundamentally discouraging that ALT.NET had to be formed in the first place. I mean, where are all the ALT.Rails, ALT.Ruby, ALT.Linux, ALT.Java communities?!

Saturday, November 22, 2008
Do Great Developers Cluster Away From Microsoft?
According to popular developer consciousness:
good programmers tend to cluster in some organizations, and bad programmers tend to cluster in other organizations ... (Demarco and Lister 1999). - Steve McConnell
Can we draw the corollary that:
Good programmers tend to cluster away from traditionally closed development ecosystems like Microsoft, and bad programmers tend to cluster toward Microsoft like ecosystems?
Following Robert Glass's train of thought:
The most important factor in software work is not the tools and techniques used by the programmers, but rather the quality of the programmers themselves. - Robert Glass, Facts and Fallacies of Software Engineering
Could we conclude that:
Good programmers tend to realize that an investment in their personal development is more important than learning the latest tools? Are product / tool based ecosystems like Microsoft's at direct odds with the core values of a good programmer?
My hunch is that exceptional developers are versatilists. These developers cluster around organizations that embrace knowledge over tools, open technologies, open communities, and these great organizations also embrace vernacular culture. What do you think?

Saturday, November 15, 2008
Blogs, Facebook, Twitter, the Internet, ... are White Noise

Unplug Your Friends (video source)

Try not to wast too much of your time reading [blogs, facebook, twitter, podcasts, and the like]. "Internet addiction" afflicts adults and teenagers alike. ... Keep it all in perspective. Not all, but most of this "stuff" just becomes noise in the massive global echo chamber. And when there is so much noise out there, it eventually turns into white noise. And white noise, as anyone who goes to sleep with the air conditioner on knows, is a kind of silence.
- The World Is Flat 3.0: A Brief History of the Twenty-first Century
Friday, November 14, 2008
Are you a Specialist, Generalist, or a Versatilist?
Thomas L. Friedman presents an interesting study in his book titled: The World Is Flat 3.0: A Brief History of the Twenty-first Century:
The Gartner study noted that "specialists generally have deep skills and narrow scope, giving them expertise that is recognized by peers but seldom valued outside their immediate domain. Generalists have broad scope and shallow skills, enabling them to respond or act reasonably quick but often without gaining on demonstrating the confidence of their partners or customers. Versatilists, in contrast, apply depth of skill to a progressively widening scope of situations and experiences, gaining new competencies, building relationships, and assuming new roles." Versatilists are capable of not only of constantly adapting but also of constantly learning and growing.
Friedman goes on to suggest that in order for knowledge workers to remain globally competitive we need to be versatile. "[We] can’t just be head down, eye on the glass", instead we need to be cultivating our core knowledge which can provide the versatility to transition through industries or technology, and we "have got to be able to see things from the business’, the customers’, and the market’s perspective.' He also makes the point that most corporate training policies are outdated in our post globalized world, and that we should be taking educational and training into our own hands.
technical aptitude will no longer be sufficient to secure their future in IT organizations. Skepticism toward the effectiveness of IT, the rise of IT automation, worldwide geographic labour shifts and multi-sourcing will lead to the emergence of a new breed of IT professional, the 'versatilist', who will have technical aptitude, local knowledge, knowledge of industry processes and leadership ability. - Gartner Says Technical Aptitude No Longer Enough To Secure Future for IT Professionals
For me, being a versatilist means embracing, higher level software design strategies, design / architecture patterns, management techniques, and honing communication / presentation skills.

Thursday, October 30, 2008
Vernacular Culture and Heretics: Humanity the Zen of Zen?
I found Art Kleiner's concept of vernacular culture interesting in his book The Age of Heretics: A History of the Radical Thinkers Who Reinvented Corporate Management.

Vernacular as described by Kleiner:
Despite the power of corporate practice, something desperately desirable has been lost in everyday corporate life, and without it, corporations could not truly perform. This lost quality, unnoticed and yet desperately needed, was the vernacular spirit of everyday life ...

there is no better word than vernacular for the quality of relationships and culture that dominated community life before the advent of the industrial age ...

Vernacular life was the way of life that still exists in these villages of our dreams ... In a vernacular culture the best things in life are free, economic and personal life are mixed together ... and every exchange of goods is not just an economic transaction but an expression of the community's spirit ...

the builders of industrial culture didn't have to reject vernacular culture; they merely ignored it or destroyed it in passing, while the power of finance and operations, the power of the numbers culture, undermined the relationships that vernacular culture depended on.
There's strong parallels to the vernacular culture, the Agile / Lean movement, open source, buying locally, the Toyota Way and an innate human need for community and contribution. Today, many of the institutes that have been built on industrial culture (GM, Ford) seem to be faltering, whereas those that have been built on vernacular culture (Toyota, Google) seem to be succeeding.

Through the book the author suggests that heretics are often responsible for transforming industrial cultured institutes to ones that embrace vernacular culture.

Kleiner describes a heretic as:
someone who sees a truth that contradicts the conventional wisdom of the institution to which he or she belongs and remains loyal to both entities - the institution and the new truth.
One of the concepts that is continual presented within this text is that conventional wisdom and institutions are often incorrect, as individuals we can change our situation, our work environment, and our world, but in order to make change we need to identify, verbalize, and seek out new ideas and approaches.

I don't know how I was recommended this book, but I'm really enjoying it!

Monday, October 27, 2008
Everything I Ever Needed to Know About Software I Learned Somewhere Else, Like Tree Planting
Tree planting is a common job for university / college students in Canada. For those unfamiliar with tree planting, the connotation often conjures images of hippies and tree huggers, but in reality it's grueling work most often embraced by entrepreneurial minded individuals - most tree planters are trying to pay their way through school or save up some fast cash for traveling. Over the years I have found some strong parallels between my experience tree planting and the software realm.

An Quick Introduction to Tree Planting
The tree planting season begins when the Canadian ground is soft enough to stick a shovel into it (in BC this could be as early as May) and ends in late July or August. As a planter you spend your summer living in bush camps (out of tents) close to remote cut blocks (your workplace) - my furthest camp was 5 hours from the nearest town via logging roads. Bush camps rarely have amenities, you dig your own bathrooms, and shower from the closest puddle. err... water source. As a tree planter your daily job involves getting up hours before sunrise, making lunch, going to a cut block, then spending most of the daylight hours running around desert like wastelands (clear cuts) as you try to plant 3,000 or more trees.

As a tree planter you're replacing the trees that lumber mill have cut down, the trees you're planting are a crop that will be harvested in the next 60 years. You're paid either by piecework, or on a per tree basis. One tree was worth about $0.12, but the tree / fixed piece price depended on the complexity of the land - for example when teetering on the side of a mountain you could expect $0.30+ per tree (along with the great view). As a student the pay was great, if you planted 3,000+ a day you were making $360 plus a remote allowance based. On top of this you were living in the bush making it difficult (never impossible) to spend your money.
How Tree Planting Relates to Software
Quality, Quantity, and Economics: Tree planters have to meet quality standards - periodically through the day a tree checker validates your work and provides quality feedback. As a planter you need to meet prescribed density requirements (you might need to have at least 8 trees in a 6 meter diameter), you need to meet specie requirements (you might need to have one fir tree for every 20 spruce trees), and you also need to meet planting requirements (the tree needs to be green side up, standing straight, the roots in soil, and the roots can't be 'J' rooted). Usually there is a 10% leeway for poor quality (for every 10 trees you plant a single bad tree), this leeway is granted since it impossible to find a suitable planting site for every tree. As a planter you're consistently working to keep quality in balance with quantity (since your income depends on your production) - an overly dogmatic approach to quality could mean you didn't make much money while losing your mind as you searched for a suitable planting site on a rock face. On the other side if you placed too much emphasis on quantity (production) you risked forfeiting a day of work as you painfully pulled and replant (reworked) all of your trees. Occasionally there were severe imbalances between a contract's quantity and quantity expectations, in these situations we could often negotiate a higher rate, and it wasn't unheard of to have an entire crew go on strike. Similarly, in software we're constantly balancing quality, quantity, and the economics of the project.

A Process Unsuitable for Automation: On the surface tree planting (like software development) appears to be automatable. A tree planters job boils down to some core tasks (make hole with shovel, bend over, plant tree, close hole, rinse and repeat 3,000 times a day!). Attempts have been made to automate the process, but the wide variation of terrain coupled with the constantly changing tree specifications are no match for an automated machine - the wide variation in terrain could require riding in a helicopter to a mountain top, riding in a rolligon the next week, or hiking for kilometers through the bush loaded down with trees for days. In the software realm automation is perceived as highly desirable (and some think it's inevitable), but software, like tree planting is too complex for wide scale automation. Human agility, resourcefulness, and adaptability continues to succeed widespread automation.

The Quest for Continual Improvement: In order to improve as a tree planter you need to be self aware and reflective as you hone your skills daily. Ideally you're searching for techniques that conserve energy and increase productivity while allowing you to stay in your flow. On my first day I made $-15 dollars in a 10 hour day - I planted about 100 trees, and there was a $25 daily cost for food. By the the end of the summer I was planting 3,000 trees. In the software development realm there is a constant quest for self improvement and enhancing your productivity.

Motivation: Your income depends directly on your motivation. Similarly in the software realm, if you're not motivated to maintain and augment your skills, then you soon discover your rate and opportunities directly reflect your motivation level.

Team Work: You spend four months in bush camps with the same group of about 35 people, the camps are further subdivided into crews - with each crew containing 10-15 people. You work with the same people in your crew day-after-day and get to know them in EVERY way - you probably interrupted them taking a sh*t in the middle of a clear-cut, or took shelter in a crummy as a hail storm moved through. When working in a small finite team you quickly learn that it's not possible to choose your members and that making (and maintaining) healthy relationships with your team members makes everyone's life easier - and might even keep your sanity. Often times (like when bears are in the area) you work in groups or teams, side by side on a single piece of land. While pair planting you get to know the style of your partner, you can predict where they probably forgot to plant a tree and how they keep track of their line of planted trees. During the day you informally compete with your partner, and cajole each other for fun. Pair planting (cluster planting) relates nicely to paired programming and the importance of team work in the software realm.

Organizational Composition: As a tree planter you are a self employed contractor, you're responsible for your own equipment, and lining up jobs with multiple companies to bring you through the summer. The composition of each tree planting company varies. Some companies will hire anyone and heavily recruit (these companies typically underbid on land, offer lower prices, and have a high turnover rate), whereas other great companies hire planters based on referrals and experience (these companies are known to have dependable annual contracts and a better environment). The best companies give their crews autonomy, respect, and adequate resources to get the job done. Again this transfers into the software realm.

Communication and Responsibility: Living in remote camps on dangerous logging roads requires additional safety. Communicating with your team is often necessary for survival. Not only are you responsible for yourself, but those around you. Tree planters have been known to be forgotten over night on remote cut blocks hours away from camp because no one knew where they were, or if they even came to work that day. Similarly, software teams should be taking collective ownership of a project, you are responsible for your code as well as the code base as a whole. Communication is essential.

Machoism in the Work Place: Most tree planters would cite their job as being THE MOST physically and mentally demanding job, planting is supposedly equivalent to running a marathon daily, and apparently it's been rated as one of the top 10 most difficult jobs in North America (I'm not really sure about these claims, and I can't find any sources). In addition, the nature of planting (living in remote inward facing groups of people for months) contributes to this machoistic mentality. Planting comes along with it's own lingo (shnarb, screef, cluster f**ks, cache breaks...), and rookies (n00bs) generally go through an initiation process until they prove them self. This form of machoism is exhibited in the software world too, I think most developers (whether they say it or not) regard their job as being one of THE MOST complex job, in addition we have our own industry specific lingo, and often times teams (or entire organization) will exhibit elitist / machoistic tendencies.
I planted trees in British Columbia, spending most of my time in the triangle between Smithers, Grand Prairie, and Bella Coola where I worked for Blue Collar, Summit, Coast Range, and Shas Mountain. For me tree planting affirmed that anything is possible provided you put your mind to it. I was also an eye opener to the unsustainable environmental havoc our society is placing on our world.

What odd jobs have you taken to get you through college / university? How do you find they relate to the software realm? Have you ever planted trees?

Thursday, October 23, 2008
Project Failure is not Personal Failure: Emotional Buy-in to Projects, Languages, and Frameworks is Bad
I was at the point where I could visualize the project's code, the team had gelled, and we only had a couple remaining issues. This was after almost a year of over time and personal sacrifices. From our perspective (the developers) everything was great. Then for reasons beyond our control, the project was canceled. I was DEVASTATED! Somewhere over the course of this project I had lost my personal life and began equating my personal success to the project's success. When the project came to a screeching halt, so did I.

Listening to Yegge, Spolsky, and Atwood really brought up this uncomfortable memory of projects past.
[Yegge] some people ... they can't handle [a failed project]. They're out on the ledge, you have to talk them down real slow, it's usually more junior people.

[Spolsky] I don't know about junior, but ... that they identified with the project, and that is kind of important. ... People are going to be ... devoted to a project that they identify with.

[Yegge] ... identifying with anything so strongly that it starts to give you emotional reaction is really bad. You never know when your language is going to be obsolete or your project is going to get canceled or your favorite framework is going to be replaced.
- Steve Yegge, Joel Spolsky, stackoverflow podcast #25
I can certainly relate.

My experience was a lesson learned, which resulted in a couple personal changes:
  • No overtime at the expense of personal life or prior commitments.
  • A quest for a more outward facing perspective on projects and the industry in general.
  • A need for remaining emotionally detached from the project - as well as the frameworks, technologies, and the languages that I use.
  • An aversion towards organizations that encourage the type of situation I had gotten into.
  • Skepticism towards company loyalty, brand loyalty, etc...

Tuesday, October 21, 2008
Going Ergonomic
I went ergo this year. I upgraded to dual monitors, got a monitor stand, an ergonomic keyboard, and then the ergo mouse - then threw out my original right handed ergo mouse so I could mouse goofy (use my left hand for mousing).

The ergo keyboard was the hardest to master. I unfortunately learned how to type while enthralled with mIRC and ICQ - this was well before the touch typing classes of high school. Since I never really learned how to type, I had evolved a pseudo typing approach. Sure, I always kept my hands on the home row, but they were always off by one vertical row of keys - my left hand would reach for the Y,H,N keys which should normally be controlled by the right hand. My pseudo typing speed was average, but using the new ergo keyboard was a huge challenge - my left hand kept trying to straddle the gap to reach the Y,H,N keys. Relearning touch typing on the ergo keyboard was frustrating, but it now feels natural and I'm surpassing my old average typing speed.

The ergo mouse was pretty straight forward, within a week I was feeling confident with my precision.

Switching hands and using a left hand ergo mouse was more difficult. I often catch myself reaching for my left mouse, like reaching for the stick shift in an automatic car after driving standard. My precision is still off a little, but the position on the left is closer to my keyboard and more natural for my arm and shoulder. Since I try to use my mouse as little as possible, switching hands was also an incentive to learn more keystrokes.

Kudos to Steven Rockarts for suggesting I mouse goofy, if it wasn't for his suggestion I would have cut the left side of my keyboard off! :)

Ergonomics are important for a sustainable and physically tolerable career in computers. 

A couple great post on the subject:
Do you use any ergonomic products?
Monday, October 20, 2008
Mouse Gestures Vs The Five Button Mouse
Opera's native mouse gesture capabilities originally introduced me to gestures (mouse gestures basically let you control functionality through mouse button click combinations and mouse strokes). I used Firefox's mouse gesture plug-in for a while, but after acquiring a five button mouse and using browsers with five button support I find mouse gestures useless.

In a browser (and some versions of Windows Explorer) with a five button mouse you get:
  • Back and Forward capabilities (the left and right most buttons)
  • Open in new tab capabilities (clicking the scroll wheel)
  • The standard functionality via the remaining buttons
Do you use mouse gestures or a five button mouse?

Sunday, October 19, 2008
On Teams: Dysfunction
One of the risks to a project's success is a dysfunctional team. It's common for team morale to fluctuate as a project moves through its life cycle - project politics, bureaucracy, challenging overtime demands, etc, can all take their toll on a team. A team under stress can take a couple of diverging roads - from what I've experienced a team can rise to the challenge (like a family) and grow stronger, or digress into a winner-takes-all environment (like Survivor).

There is no "I" in "T-E-A-M". A team falls apart when members begin participating in backstabbing, which often results in negative alliances being formed between members - while a sense of self preservation and distrust creeps around the otherwise neutral team members. Soon the team digresses into a group of individuals operating in silos. I don't think it's possible to put a finger on the catalyst for the entire process, but it could boil down to a combination of: an overly cynical team member, a preexisting alliance between team members, lack of leadership on the project, a team member with an unexplainable need for political control (perhaps lack of confidence in their abilities), a dysfunctional working environment, or human nature?...
No individual is a success who hurts the team, and no individual is a failure who helps it.- Software Project Survival Guide
How can we cope? Bottom line: RESPECT ALL YOUR TEAM MEMBERS. Treat your team as family, recognize that everyone has different strengths and weaknesses. Don't participate in backstabbing, be transparent and honest, if you have an issue with a team member then make it a point to discuss your concerns with that member. Anyone participating in backstabbing is hurting the team.
Nobody on the team should feel unappreciated or ignored. This ensures high level of motivation and encourages loyalty toward the team, and the goal of the project.  - Respect, Extreme Programming Values
A project's success hinges tightly on the team. Being a team player and having great interpersonal skills can be more important than technical skills - most people can rapidly learn new technical skills, but being able to function within a team might be an ingrained personality characteristic.

Page rendered at Friday, December 05, 2008 12:55:03 PM (GMT Standard Time, UTC+00:00)