RSS 2.0
Journal / Blog
Monday, December 29, 2008
Do We Really Need Personal Data Backup Strategies?
Some people advocate frequent backups - and some go so far as to suggest making use of offsite storage, duplicating their DVD/CD collections, and so on. This fixation on personal data redundancy seems multi-compulsive for an individual or a family (running a company is obviously a different situation).

I personally do NOT have a data backup plan - aside from online storage like Google Docs, Flickr (for photos and videos), and source control. I HAVE lost years worth of files a number of times, and every time my hard drive comes screeching to a halt, I feel that burning pit of anxiety deep in my stomach, but guess what? It doesn’t last long. Seriously, over the years there has never been a case where I lost something that I absolutely needed (again, personal pictures and videos are an exception). After losing data, I find myself pining for a couple recently created / used files, I then recreate the files in a quarter the time it took me to do the first version, then I forget about the heaps of digital baggage I was hording over the years.

Personal data loss might be part of a natural regeneration process - like a forest fire, it makes way for new growth and forces us to focus on the present.

Stop fighting nature, forget about a data backup plan, involuntary random data purging might be good for all of us. Perhaps a digital natural disaster is in order for you? :)

Can you let go of your bits? What is your backup strategy? Why do you backup?

Saturday, December 20, 2008
The Law of Two Feet
The Law of Two Feet is just as applicable to life, as it is to Open Spaces.

The Law of Two Feet:
If at any time during our time together you find yourself in any situation where you are neither learning nor contributing, use your two feet. Go to some other place where you may learn and contribute. - Open Spaces, Wikipedia
By applying this philosophy to software development (programming languages, operating systems, and development ecosystems), I've really been been re-igniting my passion as a software developer. I am foremost a software developer and the tools and products I choose are secondary, but I lost sight of this over the past couple years. I was buying into being a [insert your choice of ecosystem, language, operating system here] developer. Anyhow; this isn't to say I won't be raising my concerns (running away), I'll continue to make noise (because I believe it has value), but when change doesn't manifest. I will (like so many people before me) use my own two feet and move towards a situation where I can continue to learn, contribute, and be the change I'd like to see .

Friday, December 19, 2008
Big Design Up Front is Good
Like a horse with blinders on, avoiding some degree of Big Design Up Front (BDUF) can force your team and project into tunnel vision.

I worked on a project where we attempted evolutionary design (avoiding Big Design Up Front) while taking an Agile approach. We used Continuous Integration, and Test Driven Development. Looking back, our attempt at trying to avoid Big Design Up Front was fatal for our project's success and probably our biggest mistake. The funny thing is, the only reason we avoided BDUF was because it seemed non-Agile (note the capital 'A' in 'Agile' read Yegge's post Good Agile, Bad Agile for the reference). As a development team we were inexperienced Agile (eXtreme Programming) teenagers and somewhere along the way we exchanged our brains for dogma.
eXtreme Programming [is at odds with] “Big Design, Up Front” (BDUF) – Because “Ya Ain’t Gonna Need It” (YAGNI) ... [but this is often] taken as permission to not do any planning - Gerard Meszaros' Alberta TechFest slide deck '07
In the past Big Design Up Front (BDUF) was associated with large inflexible architectural solutions that are designed upfront (before development begins) - like the waterfall methodology. However; BDUF (like most techniques / methodologies / tools) are quite useful when used with a sprinkle of common sense and moderation. BDUF can be a productive lightweight tool for fleshing out the high level overview of a system. It is important to note that I'm not advocating Big Architectural Design Up Front which is often composed of reams of documents, UML, ERDs, diagrams, and other unneeded artifacts. Instead I'm advocating for paper based story boards, wire frames, paper prototypes, user stories - anything that is easy to create, destroy, and recreate. These techniques provide the foundation of the final product, they start to verbalize the common product goal and can start to draw out the language, metaphors, and model that will eventually compose the project.

Avoiding Big Design Up Front was a mistake for our project. As a team we were trying to cope with the complexities of our domain under very tight deadlines. Our code became increasingly brittle, we had overlooked obvious shared functionality that a high level overview would have fleshed out. At the same time we had segregated our application into sprint sized silos with no clear relationships - each sprint was essentially a two week tunnel, and disconnected.

Without some form of BDUF it was difficult to:
  • maintain conceptual integrity, a common goal, a consistent user interface
  • estimate the whole product cost
  • have a successful project
We should have headed Steve McConnell's words:
people were claiming,  "I don't have to do requirements or design because I'm using object-oriented programming." That was just an excuse. Most of those people weren't really doing object-oriented programming—they were hacking, and the results were predictable, and poor. Right now, people are saying "I don't have to do requirements or design because I'm doing agile development." Again, the results are easy to predict, and poor - Steve McConnell, Code Complete
Or perhaps Martin Fowler's suggestion:
the planned design approach has been around since the 70s, and lots of people have used it. It is better in many ways than code and fix evolutionary design. But it has some faults. - Martin Fowler, Is Design Dead?
Not doing some variation of Big Design Up Front is probably another excuse for being sloppy, but what do you think?

Thursday, December 11, 2008
By three methods we may learn
By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest. - Confucius

Tuesday, December 09, 2008
The Case for a College / University Education
In the IT world the debate over the value of formal education vs the school of hard knocks (real life experience) has been waging for a long-long time. I'm biased towards the education side of the debate to some degree, and here's why I think having a formal education is important.

It's easier to work or migrate to foreign countries
With a University education (regardless of discipline) it's easier to obtain work and long stay Visas in foreign countries. Candidates with a formal education can move through the Visa process quicker and in some cases those without degrees are bared entirely from obtaining a Visa. While I don't think these restrictions are fair, unfortunately it seems to be the global statuesque.

Job security, and increased marketability
When an employer chooses between two candidates for a position, experience often trumps education, but an educated candidate with experience can trump both - education and experience is the best of both worlds. In addition, as an junior / intermediate some employers will bill you out at a higher rate based on education, and some clients feel more confident with certificates and education - both factors increase your marketability.

A strong core, a long term personal investment
I attended Community College before University. While attending Community College some of my friends were enrolled in Computer Science at the University level. These friends would talk of fascinating things like: assembly language, processor registers, paging tables, and abstract data types. Sure my Computer Science friends were immersed heavily in theory, but I was immersed in the practical side of programming (without the theory) - I felt that I was missing out and was envious of their University education. After completing University, I found that the process of working through University helped me cultivate my ideas, understand the basics of computation, draw other disciplines into my work, and relate with the larger world. Today, I think of my University education as the center (hub) of a bicycle wheel - all the spokes branch out, but they all start at the center (this center being the core, the theory of the computer / software world). Sure, we can learn the theory on our own, but working through a conventional program with assignments and with instructors that continue to push you, enforces rigor and promotes personal growth (for myself anyways).

There are no recipes for success and formal education is not the end all - although every advantage helps in our increasingly globally competitive world. To this day, I've only been asked for proof of my education on two occasions: once while applying for a Japanese Working Visa, and the other while considering a position in the US (I'm a Canadian). To anyone considering a B.Sc in Computer Science or going to University, I recommend it over experience - it is a long term investment.

Saturday, December 06, 2008
Twitter on PowerShell
Adam Geras originally wrote a script in PowerShell that saves all the Twitter posts for a specific user into a file (view Mr. Geras original post here).

I built on his script and extended it to:
  • Post messages to Twitter
  • Retrieve Twitter replies
  • View my Twitter friends conversations
  • Display the classic Twitter Fail Whale when an error occurs

Screen Shots

Sending a Twitter message:

Viewing my friends conversations:

The classic Twitter Fail Whale:

There's something beautiful about the classic green console on a black background - I think it's about being closer to the metal. :) What do you think?

If you'd like to provide some design guidance, fix a bug, or request a feature, then visit (or join) the project on Google Code.

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 that make me happy). 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.

Page rendered at Tuesday, January 06, 2009 2:09:12 AM (GMT Standard Time, UTC+00:00)