RSS 2.0
Journal / Blog
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.

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...

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.

Wednesday, October 15, 2008
The Machine
Living inside a machine ultimately leads to deep inbred malaise and resentment, the atrophy of creativity and productivity, and the propensity to sabotage. - The Age of Heretics, Art Kliener
At some point, I think we all experience life in the machine.

Monday, October 13, 2008
Winforms / Webforms Can Make You Obsolete: Framework or Metaphor Lock-in is a Liability For Your Career
I've always been uncomfortable with the ASP.NET Webform / Winform metaphor - it's probably because I moved to ASP.NET from ASP 3.0 / PHP with no prior Windows development experience. The Webform / Winform metaphor was alien to me, but the code behind model and the ability to re-use controls drew me in. The Webform metaphor then became a tolerated evil. Today ASP.NET MVC and the announcement that Microsoft has embraced jQuery keeps me interested.

As developers, limiting ourselves to a single metaphor, framework, or programming language is a liability to our career. In order to remain employable and engaged with our work, we need to understand the higher level concepts surrounding our chosen development arena - if you're working in the webspace this means knowing CSS, JavaScript, HTML, and more than one server-side language. Then beyond technologies and languages we should be looking at transcending principals like design patterns, and good design practices. By understanding the higher level concepts we can maintain our ability to get that job at Google, Yahoo, or Microsoft.
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 favorite framework is going to be replaced. ... I would love to see everybody learn a bunch of languages because it does make you a better programmer. ... Most people will never switch languages. - Steve Yegge, stackoverflow podcast #25

Tuesday, September 30, 2008
The Three-step Sequence: Incorrect Assumptions and Experience
the obvious ... is never seen until someone expresses it simply. - Kahlil Gibran
The preface of Object Oriented Software Construction literally introduced me to the three-step sequence:
the well-known three-step sequence of reactions that meets the introduction of a new methodological principle:
(1) "it's trivial";
(2) "it cannot work";
(3) "that's how I did it all along anyway".
(The order may vary.) - Bertrand Meyer
Naturally people consider themselves smart, which sometimes translates into knowing everything, and these three reactions are probably a manifestation of thinking you're overly enlightened. If we put ego aside - along with our natural predisposition for being lazy (trying to avoiding learning new things) - we often change our views altogether.

Looking back at my technological naivety: I was once wrongly convinced that client-side languages would never work and server-side languages / frameworks would dominate (until I really learned JavaScript), I had also mistakenly assumed that I was already doing TDD (until being introduced to the concept of Mocking), and I even thought that HTML table based design was the future (until I really learned CSS). With a little bit of knowledge and some experience I changed my views altogether.

Reflecting on these incorrect assumptions and decisions promotes growth - with every experience we grow. Which of my latest assumptions / reactions will change over time?

Wednesday, September 24, 2008
Notes on Software Creativity 2.0 by Robert Glass
Software Creativity 2.0 by Robert Glass (as the title implies and you might expect) is centered around creativity in the processes, methodologies, organizations, and people responsible for producing software. I concur with Steve McConnell's glowing review (Landmark Book, On a Par with People Ware and Mythical Man-Month).
Robert Glass has given the software world many gifts during his 50 year career in software development. This book stands above his other contributions as his magnum opus. I cannot recommend it highly enough. - Steve McConnell
There’s no need for my personal review, but I will say that if Robert Glass had a blog this book would no doubt be his best of.

Interesting excerpts from Software Creativity 2.0:
"When I began working in industry. I was appalled to find that nothing I had learned in graduate school bore the slightest relationship to what I was asked to do on the job."

"Practice often precedes and helps form theory"

"The more a creative person knows about the subject of focus, the less the need for creativity."

"In order to think originally, we must familiarize ourselves with the ideas of others"


Notes about the Creative person’s traits:
"They are especially observant …"

"They see things as others do, but also as others do not."

"They are by constitution more vigorous and have available them an exceptional fund of psychic and physical energy."

"They usually lead more complex lives, seeking tension …"

"The creative person is both more primitive and more cultured, more destructive and more constructive, crazier and saner, than the average person."

Keep in mind I've omitted some of Robert's earth shattering excerpts since I've read a couple of his other books (see this older post for details) - my chosen excerpts don't do justice to the book. Read it yourself! :)

Monday, September 22, 2008
Satisficing: Getting Things Done
"satisficing" (finding a solution that works and is supportable), not "optimizing" (finding the best possible solution)
- Robert Glass, Software Creativity 2.0
The term satisficing has been with us for quite some time and is primarily applied outside the software realm. Inside the software realm as developers working under constraints we make satisficing decisions on a daily basis. A satisficing solution would be one that solves the immediate problem with the least amount of resources and effort. The opposite of satisficing might be to expend resources researching, architecting, and then eventually solving the problem with an optimal solution. Satisficing like most things is not a one-size-fits-all approach, should be practiced in moderation (is not an excuse for being lazy), but is a necessary tool for getting things done. In one of my earlier posts (Necessary Skepticism: Skepticism is not Pessimism) I was skirting around this notion of satisficing without having a proper term for it.

From Wikipedia:
Satisficing (a portmanteau of "satisfy" and "suffice") is a decision-making strategy which attempts to meet criteria for adequacy, rather than to identify an optimal solution. A satisficing strategy may often be (near) optimal if the costs of the decision-making process itself, such as the cost of obtaining complete information, are considered in the outcome calculus

Example: One's task is to sew a patch onto a pair of jeans. The best needle to do the threading is a 4 inch long needle with a 3 millimeter eye. This needle is hidden in a haystack along with 1000 other needles varying in size from 1 inch to 6 inches. Satisficing claims that the first needle that can sew on the patch is the one that should be used. Spending time searching for that one specific needle in the haystack is a waste of energy and resources.
- Wikipedia, Satisficing

Saturday, September 13, 2008
Everyone Is Special, I Wish I Was Special
I had x-ray vision as a child - that's right, I could see through walls, clothes, and presents. I was convinced I had super eyesight and my friends thought they had similar enhanced sensory powers - we thought we were super heroes.  In high school I was a wizard (one of a handful of computer enthusiasts).  University, College, and my first job were similar experiences - I felt special because most of my colleagues were fresh graduates void of the lifelong passion for computers.

Through all these experiences I was convinced that I was unique. Then I started becoming part of the bigger conversation. While engaging online I began learning that there were thousands of people like me: weened on computers, interested in good software design, and passionate about what they do.

Imar Spanjaars' signature always reminded me of this lesson:
Everyone is unique, except for me.
Yegge's recent post brought up this thought again:
people like to think they're unique and special, and that their tastes aren't necessarily widely shared by others. This is what drives fashion: the need to differentiate yourself from "the crowd", by identifying with some smaller, cooler crowd. ... The reality is that for any given dimension of your personality, there are oodles of people just like you. - Business Requirements are Bull****
David Heinemeier Hansson reiterates this:
it's somewhat counter intuitive ... for a lot of developers ...  it's counter intuitive for humans in general to think they're not that special, but when they do think they're special ... they kind of get these assumptions that they need very unique and special tools that will only work for them ... We as programmers aren't really unique or that special. - David Heinemeier Hansson, 37signals: "Friday Keynote"
Remember you're not really special. :)

Saturday, September 06, 2008
Noisy Work Environments are Counterproductive, But Compensating With Music Negatively Effects Creativity
Working in a noisy work environment and listening to music is counterproductive for intellectual demanding work. For example: we don't write exams in busy cafeterias, or write resumes through loud movies, and Libraries are quiet for a reason. Noise; whether it be music or background noise does negatively affect your ability to get things done.

DeMarco and Lister (in Peopleware) present the results of an interesting experiment:
During the 1960s, researchers at Cornell University conducted a series of tests on the effects of working with music. ... They put half of each group together in a silent room, and the other half of each group in a different room equipped with earphones and a musical selection.  Participants in both rooms were ... given a programming problem ...
They discovered that the majority of the people working in the silent room could pick out a pattern in the programming problem and could come to a quick clever creative solution. Whereas the people working with music playing were able to solve the problem, but didn't make the creative leap.

They go on to explain:
Many of the everyday tasks performed by professional workers are done in the serial processing center of the left brain. Music will not interfere particularly with this work, since it's in the brain's holistic right side that digests music. But not all of the work is centered in the left brain. There is that occasional breakthrough that makes you say "Ahah!" and steers you toward an ingenious bypass that may save months or years of work. This creative leap involves right-brain function. If the right brain is busy listening [to music], the opportunity for a creative leap is lost.
In their book they also make the point that open space work environments and cubical farms are not conducive to knowledge work, and that all employees (or at least groups of employees) should have the ability to close their door. Great companies do follow these guidelines, but many of the smaller companies or transitional companies (at least the ones I've worked in) tend to air on the dilbertesque side (the noisy cubical farms / open concept).

To compensate for the noise in the work place I've resorted to wearing noise canceling earphones without music. These earphones double as a metaphoric door - it indicates to those around me that I'm hard at work and not to be disturbed. Noise canceling earphones let me create my own personal audio walls, but eventually I become the weird guy with the earphones that aren't plugged into anything guy.

As a lowly developers it's hard to make the case to management for a quieter work environment (let alone an office with a door), but we can keep our eyes out for companies that share these values, start our own company, or take opportunities that let us work from home. In the meantime thank goodness for ear plugs (err.. I mean earphones).

Wednesday, September 03, 2008
Thoughts on Blogging: "Turn Up The Good, Turn Down The Suck"
The factors described in this post loosely determine which types of blogs I've been subscribing to.

Quality over quantity: Some blogs adhere to rigid posting schedules. I've never paid attention to a blog's schedule and wonder if anyone (beside the author) does. I find scheduled blogs result in diluted content and that their posts become daunting to sift through. Eventually I start skimming all their content and might unsubscribe altogether.

Consolidated feeds are bad mmmm-kay: Occasionally blogs consolidate posts from multiple authors, or group similar topics into a single feed, this results in excessive noise with no granular filtering capabilities. I won't subscribe.

Personality is important, Professionalism is dull: Personality should permeate your posts. Software development is kind of boring, live it up, inject some originality, show your true colors, try to be funny, take the risk. We're all human, your readers aren't robots and zombies. As a subscriber I'm more interested in getting to knowing you (the developer) than how professional you're trying to be. Professional flavoured blogs run the risk of being too sanitary - a lesson learned the hard way *yawn*.

Easy on the code: I look at code every day. I'd rather read something funny, inspiring, thought provoking, philosophical, or related to the human factor of software development. Code in blogs can often come across as filler, if I really needed more code I'd head down to Google CodeCodePlex, and download one of the many projects (take a look at Chrome). With code, there's a million ways to do the same thing, if you're code isn't in my specific problem domain, then I'm falling asleep already.

Subscribing and reading blogs is important for software developers and knowledge workers in general. Blogs offer cross pollination of ideas between problem domains, organizations, and people. What factors determine the blogs you read?