Being Professional

Top 10 Mistakes to make in class

A recent post on Paul Randals blog lists the top 10 mistakes people make when attending a course:

  1. Take a phone call during class
  2. Sit at the back and do email/surf and then ask questions
  3. Persist with a tangential rat-hole
  4. Bring your smelly lunch into the classroom
  5. Come to a class where you don't understand the language it's being taught in
  6. Come to a class without the required experience and knowledge
  7. Don't take notes
  8. Ask questions to try to make it look like you know more than the instructor
  9. Argue that the instructor is wrong
  10. Come to class looking for "the answer"

Go read the entire list. Are you guilty of doing any of these? Do you want to change?

Specialist Classes

Sometimes, you can simplify a complex class by extracting out a specialist helper class to provide dedicated assistance. And, sometimes, old lessons turn out to be the most relevant.

Attack of the Lazy Coder

I'm having such a great time dealing with lazy code. Check out these gems I've found just today ...

var periodError 
    = string.Format(
        "The Survey Return does not contain a valid Reporting Period");

Why format something that with no parameters? I changed the code to this:

var periodError 
    = "The Survey Return does not contain a valid Reporting Period";

Simplicity

Listening to Udi Dahan on Deep Fried Bytes Episode 49, I heard Udi say something very simple, but very important.

When people hear the word "simple" they translate that in their head to easy. So when someone talks about "Keep it simple" they think the message is "Keep it Easy". But, keeping things simple is not easy at all.

Process Improvement

It's interesting to see how different people react to the idea of process improvement. Most people fall into one of two camps - I'll term these the Conservatives and the Radicals.

Conservatives don't see any need for change at all: "That's just the way we do things around here, we get the job done, and I've got work to do anyway." They put no effort into process improvement, and therefore realise no improvements. They never make things worse - but they never make them better either.

A Boys Club?

You don't have to go very far to see the extent to which women are underrepresented in the IT industry - especially as software developers. Recently, I've started to ponder the reasons why - and, to quote Walt Kelly: We have met the enemy, and he is us

Sometimes, the answer is simple

Saw something interesting at church the other morning, as the speaker was preparing her message.

A set of PowerPoint slides, for display alongside the message itself had been saved on a USB key, and needed to be loaded on to the A/V computer used during the service. However, when the key was inserted, it didn't appear under My Computer, making it kinda difficult to access the files.

The immediate response of the person driving the computer was to dive into the control panel, clicking things at random, looking for something wrong.

Software Craftsmanship

Here's something more serious - a manifesto for software craftsmanship:

Not only working software,
but also well-crafted software
Not only responding to change,
but also steadily adding value
Not only individuals and interactions,
but also a community of professionals
Not only customer collaboration,
but also productive partnerships

Also worth reading Why Software Development is a Craft.

The Art of Unit Testing

It appears there are those who think it's perfectly Ok to steal Roy Osherove's latest book, "The Art of Unit Testing".

Seems a bit rich to me - after three years of hard work, surely Roy deserves the small recompense he gets for each copy sold.

I wonder how many of those who cheerfully stole his work would be just as happy to have three years of their hard work stolen by people too lazy or too cheap to pay.

Two dangerous little words

There is a common two word phrase that needs to be purged from our vocabulary.

Best Practice.

Older Programmers

Just read an interesting article which included this comment:

There is also a belief that older programmers "lose the edge." That belief is mistaken in my opinion; older programmers may not burn as much midnight oil as younger ones, but that's not because they are old, but because they get the job done without having to stay up past midnight.
(Michi Henning, "API Design Matters", Communications of the ACM May 2009 Volume 52, Number 5)

Something to aspire to, perhaps ...

Quote of the Day

longCloud.png

Quote of the day, from Matthew Hintzen's presentation on LINQ, Lambda and Extensions at the Wellington .NET Usergroup CodeCamp 2009:

If the code's not elegant, we're not done.
Don't accept an Ugly Betty or a Homely Bob.

Like Matthew, I'm a real believer in elegant code. Given a choice between code that is ugly and difficult to read, and code that is simple and easy to read, I'll choose the easy to read version every time.

Stages of Competence

Well over 10 years ago I learned of the so called Four stages of competence.

In short, these four stages identify the progression of skill adoption:

Someone with Unconscious Incompetence doesn't even know that they don't know.

Someone who is Consciously Incompetent has some idea of what he doesn't know.

Someone who is Consciously Competent can get the job done, but has to work at it.

Listening time

Shorter than some, longer than many, my 1 hour commute to and from work each day used to be down time. Over the last three or four years, I’ve found that podcasts are a good way to fill the time.

Scott Hanselman has just posted Hanselman's Super Karate Death Car List of .NET and Software Podcasts and suggested that others do the same … here’s what occupies my commute.

Be A Better Developer

Leon Bambrick has an interesting post 8 ways to be a better programmer in 6 minutes. Even if you don’t agree with Leon’s tips, they’re interesting, and thought provoking.

In the same spirit, here’s some more tips for you … though some of these might take more than 6 minutes to do.

The importance of Attitude

I’m finding that attitude and intent make an important contribution to the code I write.

For example, though I currently use NUnit as my testing framework, and Rhino.Mocks for mocking, I’m not always using these to write tests or mocks.

Confused? Let me explain.

On NNPPs

Jay Fields has a recent post “The Cost of Net Negative Producing Programmers”, in which he laments the high impact of NNPPs and the lack of any industry structure that encourages them to leave the field.

I find it reasonably depressing to find that, in many ways, I agree with his argument.

Worse, I’d go so far as to suggest that a similar problem exists in other parts of the ICT industry.

Some examples from my own experience …

Being a Tidy Kiwi

Going through blog posts that I’ve flagged for follow-up, I found a gem from 2006, “On Graffiti and Broken Windows” by Stuart Caborn.

The psychological and sociological trends that Stuart references, from Malcolm Gladwells “Tipping Point”, as well as others I’ve read (such as “Freakonomics” by Stephen Dubner and Steven Levitt) all point to the value of taking the time to be tidy.

The right knowledge for each problem ...

A friend emailed me an interesting quote:

"... what little evidence we have about programmer productivity points to a productivity distribution that's skewed with a long tail of incompetence"

-- Larry O'Brien

However uncomfortable it might make you, I believe there's a certain amount of truth in this quote.

Foundations of Programming

foundationsCover.jpg

Karl Seguin, one of the CodeBetter bloggers, has written a book on programming fundamentals, covering topics from "YAGNI" and Unit Testing, to Domain Driven Design and Dependency Injection.

The book is well written, engaging and informative - recommended.

Creative Discipline

Over on 43 Folders, Merlin Mann has posted a thought provoking article Attention & Ambiguity: The Non-Paradox of Creative Work

Go read it. I'll wait here.

Merlin has written about a important distinction, one that is critical to all creative endeavours - and I include Software Development as a profoundly creative endeavour.

NUnit Best Practices

I'm always looking to do things better tomorrow that I did yesterday - and to that end, I find other peoples "Best Practices" posts endlessly valuable ... not that I always agree with them of course, but I do enjoy being challenged to think.

Go read NUnit Best Practices, a fairly recent post by Scott White.

How many of Scott's 7 NUnit practices do you agree with? How many do you follow? Why?

Attitudes to Change

I was reading today about the so-called "awesome bar" included in the upcoming release of Firefox 3 and was struck by the observation that many commentators seem to be simply complaining about change.

Dealing with constant (and accelerating) change is part and parcel of working in the IT industry.

Continuous Integration with TeamCity

I've been spending some time recently setting up TeamCity, the Continuous Integration server from JetBrains.

Why TeamCity and not CruiseControl.NET?

In my opinion, TeamCity is far more approachable and usable right out of the box. Configuration is through a polished web-based front end. Documentation is pretty good, but most of the time you don't need any docs at all because the UI walks you through the process.

Creative Passion

Perseverance

I was listening today to a recent Hanselminutes podcast, where Scott Hanselman and Carl Franklin were discussing the Joy of Development.

Comfortable Clothes

This week, I've been doing some maintenance work on a Delphi application. So I'm spending a lot of time back in the Delphi IDE - a place that used to be the centre of my comfort zone.

A few years ago, while making the transition from Delphi to .NET, I was pretty vocal about the "sharp corners" I found in Visual Studio - things that were oh-so-simple in Delphi that were hard work in Visual Studio.

Studying on the Move

A friend recently asked me what podcasts I listen to on a regular basis - and I figured to share the list here as well.

The Curse of Remembered Pain

Barring a few unusual individuals, all of us are very good at remembering moments of pain. For the most part, these memories serve us well, helping us to avoid danger and make good judgements. Sometimes, though, remembered pain can blind us to changed circumstances.

Spec#

Spec# is a C# based language from Microsoft Research. It extends the language by adding comprehensive support for Contract Based Programming, with new keywords such as assume, require and expose.

NAnt Naming

I'm a firm believer in making the computer work harder than I do. The Pragmatic Programmers call this Ubiquitous Automation - whatever can be automated, should be automated.

While I love the fancy sound-bite, to me the idea is one of common sense - if something has to be done the same way every time, a computer is going to be much more reliable and predictable than a human.

YAGNI is no excuse to be lazy

There's one thing that really really bugs me about Agile development ... well, ok, there are several things, but today I'm focusing on just one ... and that's the thinking around YAGNI.

In case you're not familiar with the acronym, it stands for You Ain't Gonna Need It.

What makes a Professional Developer?

I've been thinking a lot over the last year or so about the differences between beginner developers and experienced developers - what it means to be a professional developer, and what differences will you see in professionally written code.

A lot of people have talked about the importance of writing maintainable code - with extensive commentary about the importance of coding standards, naming conventions and the like. These things are important - but I think there is something more fundamental to consider.