Archive for the ‘Software’ Category

On Teams: Religious Debates Erode Respect

July 15th, 2010

“religious debates … consist largely of people expressing strongly held personal beliefs about things that can’t be proven. … they rarely result in anyone involved changing his or her personal view. … besides wasting time, these arguments create tension and erode respect among team members, and can often prevent the team from making critical decisions.” – Steve Krug, Don’t Make Me Think

There we have it, religious debates erode respect.

Author: Adam Kahtava Categories: Software, Team Work Tags:

We All Live In An Uncle Bob Dialog

May 31st, 2010

Robert C. Martin (affectionately known as “Uncle Bob” in the development community) has a number of great books demonstrating the benefits of OOD/OOP and good design principles. Those acquainted with his books will also be familiar with his generous use of conversation dialogs between developers.

A sample excerpt:

RCM: “Will you help me write a little application that calculated bowling scores?”
RSK: “… Sure, Bob, I’d be glad to help. … I used to be a pretty good bowler … “
RCM: “Let’s begin with scoring a single game …”
RSK: “OK, we’re going to need some test data. Let me sketch out a little picture of a scorecard …”
RSK: “Shall we start at the end of the dependency chain and work backward? …”
- A Programming Episode from Agile Principles, Patterns, and Practices

This dialog continues for some 40+ pages as we’re walked through a paired programming session demonstrating test driven development and refactoring techniques. Admittedly, while reading these dialogs, I initially thought they were a bit over-the-top (campy), but as I actively listen to the communication happening within my team I realize that these dialogs are happening all around me.

An excerpt from this past week:

Me: “Will you help me write a stored procedure to retrieve the customer’s cart items count and default lightbox items count?”
Dev: “Sure, Adam, I’d be glad to help.”
Me: “Cool! This will be more efficient than aggregating the data from multiple repositories …”

Pull yourself in, that’s right, a little closer to the campfire, now sing it with me, “We all live in a yellow submarine… errr… an Uncle Bob dialog, an Uncle Bob dialog.” :)

Author: Adam Kahtava Categories: Musings, Software, Testing Tags:

Please, Call Me Señor Developer Not Senior

April 20th, 2010

This March marked my fifth year of working in the software realm and five years since graduating University, and this year (according to industry standards) I’m now considered a Senior Developer.

Funny enough. Today, I don’t consider myself a Senior Developer, but a couple years ago I would have told you to “Call me Senior”. Back in those days I may have been a Senior Developer within the monocultured context of the domain, language, and environment I was working with, but certainly not within the larger context of the software realm. I had surrounded myself with homogeneous tools, like minded colleagues, and had fallen into the trap of thinking I was an expert when I wasn’t – we all thought we were Senior Developers.

“When you are not very skilled in some area, you are more likely to think you’re actually pretty expert at it … The converse seems to be true as well; once you truly become an expert, you become painfully aware of just how little you know.” – Pragmatic Thinking and Learning: Refactor Your Wetware

Over the years I’ve observed that Experts and true Senior Developers are collectively regarded as such by their peers, not by corporate credentials, not by job titles, or duration of employment. Experts and Senior Developers are more preoccupied with getting things done, improving themselves, improving their environments, and helping others – not worrying about job titles and status.

“The people who are best at programming are the people who realize how small their brains are. They are humble. The people who are the worst at programming are the people who refuse to accept the fact that their brains aren’t equal to the task. Their egos keep them from being great programmers. The more you learn to compensate for your small brain, the better a programmer you’ll be. The more humble you are, the faster you’ll improve.” – Code Complete: A Practical Handbook of Software Construction

Please, don’t call me a Senior Developer, I’m Mr. Developer or Señor Developer.

Author: Adam Kahtava Categories: Musings, Personal, Software Tags:

Chatting With a Flash Developer Turned Web Developer

November 30th, 2009

I was chatting with a Flash Developer turned Web Developer. When asked why he made the transition, he predicted that HTML 5 and the evolution of the web thereafter would lessen the demand for Flash Developers (possibly making them obsolete) and that moving towards a Web Developer / Generalist is an investment for the future. I thought that was an interesting perspective. It’s not far fetched to predict that the open web will replace proprietary browser plug-ins – in many cases digital content has already replaced print.

Author: Adam Kahtava Categories: Musings, Software Tags:

Behaviour Driven Development Frameworks are for Geeks and Crackpots

June 24th, 2009

Behaviour Driven Development (BDD) generally makes use of Mocks, Unit Tests, or specialized BDD Specification Frameworks like RSpec, MSpec, NSpecJBehave, NBehave. View the list of other BDD frameworks here and read more about BDD here: A New Look at Test Driven Development.

Now, I’ve been finding Behaviour Driven Development fascinating in a geeky kind of way (kind of like functional programming languages, and programming paradigm debates), but BDD has left a gnawing uneasiness in the back of my mind – generally this mind chewing begins when I’m missing the bigger picture or when something just isn’t right. I got a chuckle out of Spolsky’s writing as he discusses specification frameworks:

the geeks … focus on things they can see in the code, rather than waiting for the users to judge. They’re programmers, so they try to automate everything in their life, and of course they try to automate the QA process. This is how you get unit testing … In order to mechanically prove that a program corresponds to some spec, the spec itself needs to be extremely detailed. In fact the spec has to define everything about the program, otherwise, nothing can be proven automatically and mechanically. Now, if the spec does define everything about how the program is going to behave, then, lo and behold, it contains all the information necessary to generate the program! And now certain geeks go off to a very dark place where they start thinking about automatically compiling specs into programs, and they start to think that they’ve just invented a way to program computers without programming.

Now, this is the software engineering equivalent of a perpetual motion machine. It’s one of those things that crackpots keep trying to do, no matter how much you tell them it could never work.Talk at Yale: Part 1 of 3, Joel Spolsky

Hehehe… Anyhow; I need to cut this post short. My DIY Nuclear Fusion Reactor and perpetual motion machine are calling my name. Errrr… I mean, I need to continue working through the RSpec book and playing around with other specification frameworks, because there’s always value in learning something new.

Author: Adam Kahtava Categories: Software, Testing Tags:

Stop Refactoring

June 19th, 2009

Eric Evans provides this interesting commentary while he discusses refactoring targets:

When you encounter a large system that is poorly factored, where do you start? In the XP community, the answer tends to be either one of the these:

  1. Just start anywhere, because it all has to be refactored.
  2. Start wherever it is hurting. I’ll refactor what I need to in order to get my specific task done.

I don’t hold with either of these. The first is impracticable except in a few projects staffed entirely with top programmers. The second tends to pick around the edges, treating symptoms and ignoring the root causes, shying away from the worst tangles. – Domain Driven Design, Eric Evans

I can think of many times where developers (myself included) have really just been gold plating under the guise of refactoring, or other times when refactoring activities contributed superficial cosmetic changes while the real mess lies beneath – getting to the root of the problem requires significantly more time and work than we’re often allocated and the cosmetic changes give us a sense of motion without moving. Then there are the occasions where seemingly superficial refactorings lead to an insightful break through.

Of course Evans isn’t suggesting that we stop refactoring altogether, instead he suggests that we think about what we’re refactoring, and that we focus on the parts of our software that provide the most value – in the context of Domain Driven Design this would be our Core Domain.

Author: Adam Kahtava Categories: DDD, Software Tags:

Fun with Ruby: The RubyGem Package Manager and the Test-Unit Gem

February 2nd, 2009

Ruby is consistently placed as one of the ten most popular programming languages – see the TIOBE Programming Community Index for more language comparisons. Matz (the creator of Ruby) described his guiding philosophy for the language as one that’s “designed to make programmers happy”. While the Ruby language gets a lot of praise for its zen like qualities, its clarity, and terseness. The tools surrounding Ruby like the RubyGem Package Manager along with its active community and growing collection of Gems (view the list here) are often overlooked.

I like the RubyGem system just as much as Ruby, it makes a developer’s life easy.

For example, let’s say I want to design a new class:

  • Install Ruby
  • Install the Test-Unit Gem (along with a couple automatically installed prerequisites):
C:\>gem install test-unit
 Successfully installed test-unit-2.0.2
 Successfully installed hoe-1.8.3
 Successfully installed rubyforge-1.0.2
 Successfully installed rake-0.8.3
  • Create a new test.rb file along with a new class.rb file (alternately we could have used the Interactive Ruby Shell directly from the command line)
  • Run the test (test.rb):
C:\>ruby test.rb
 Loaded suite test
 Finished in 0.001 seconds.
 1 tests, 1 assertions, 1 failures, 0 errors
  • ???
  • Profit! :)

Contrasting this to the Java / C# world: I’d be installing a compiler (or slower yet an IDE), then installing / configuring a testing framework. I’d also probably be installing a build process tool (like ant / nAnt), then I’d need to create a build file.

Similarly if I wanted to install Rails at the command line I specify gem install rails or if I want to use  RSpec gem install rspec.

The Ruby tools, ecosystem, and community is fantastic.

Author: Adam Kahtava Categories: Programming Languages, RoR, Software Tags:

Do We Really Need Personal Data Backup Strategies?

December 29th, 2008

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?

Author: Adam Kahtava Categories: Musings, Software Tags:

The Law of Two Feet

December 19th, 2008

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 .

Author: Adam Kahtava Categories: Musings, Open Source, Personal, Software Tags:

Passion, Quality Over Quantity, Domestic Failure: Microsoft, Ford, GM, Chrysler?

November 24th, 2008

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?!

Author: Adam Kahtava Categories: Musings, Open Source, Personal, Software Tags: