My Ego is Bigger than your Ego

February 24, 2009

There’s no doubt that ego plays a part in software development.  We’re all in competition with each other.  Not just for work, but in terms of “geek points”.  I am unashamedly egotistical when it comes to software development.  I love to point out how clever I am and tell people about this crappy wonderful little class I just wrote, or how I found a bug in so-and-so’s code that made a really big issue go away.  I can say this safe in the knowledge that I probably cause as many problems as I fix.  I know that never a day goes by when one of my colleagues in either this or a past life comes across some code I wrote and sighs quietly to themselves before taking a sip of a caffeine-infused drink and “refactoring” it.

Much as I’d like to be, I’m not the world’s greatest software developer.

I am, however, a geek.  This is where the competition and virtual chest thumping really comes from.

There are loads of ways to earn geek points.  Having a blog is one way but a bit obvious.  Better is to use Twitter or FriendFeed.  How about an account on StackOverflow.com?  You might have an iPhone* or contribute to an open source project.  Hell, you might even have a “There’s no place like 127.0.0.1” t-shirt in a different colour for each day of the week.  You should also use the word grok a lot.

An ego in software development, like competition in any other area, is a good and healthy thing.  It’s what drives us to create something better, cooler, faster, more reliable than our peers.  Developers love nothing more than to write software for developers.  I believe this is both because we are writing it for ourselves, but also because we know that other developers are the only people who will really grok (+1 point) what we’ve done, and appreciate what it took to get there.  Other developers are the ones that will spot the bits where the mouse pointer didn’t turn to a wait cursor.  They’ll notice if your app becomes unresponsive and suggest clever things like multithreading and BackgroundWorkers.  You respond by saying “yeah, this is just the first version – that’s all part of the plan”.  We want our peers to say things like “Dude, that is so cool”.

This attitude isn’t necessarily what our employers are looking for, however.  There are those out there that can afford to let developers experiment, of course (Google is probably the best known for this), but most companies need to earn money.  They’re not interested in your implementation of Castle Windsor or ASP.NET MVC, and will struggle to be sympathetic with your reasoning.  “Because it’s so cool” doesn’t cut it.

Also, when you have multiple egos in a team, it can be mildly unproductive.  Software developers are intelligent people for the most part but that in itself can be the problem.  Put some together in a room and most will have their own variation on the solution.  At some point someone needs to step up and say “Okay, that’s all great stuff, and we’re going to do it like this…”.  Bear in mind that this doesn’t have to be the right solution.  Software and opinions can be changed.  You just need an agreed spokesperson or lead to make the decision so you can break the tie and each get back on with developing.  Of course, secretly knowing you had the best idea all along…

* And for bonus points you should have a 2G *and* a 3G version.


I want on the netbook bandwagon!

February 19, 2009

I really want a netbook.  I think I first heard about them on Dave Winer’s site, scripting.com, but dismissed them at first.  However, having seen them “in the flesh” in the shops, I’ve totally fallen in love.  They perfectly fill the gap between what I can accomplish on my phone (I don’t have a fancy smartphone) and what I need to be in front of a PC for. 

  1. Great battery life.  I’ve heard of getting over 5 hours on one charge.  That’s great!  I don’t know if those figures are for HDD/SSD and whether they include wi-fi usage, but they’re still impressive.
  2. Size and weight.  These things are seriously small.  I’m a fully-paid up member of the man-bag club.  I tend to have my rucksack with me most of the time because I carry a camera, moleskine and diary most places.  A netbook would fit perfectly in a man-bag (or handbag, of course), just waiting for those visits to the local Starbucks for a coffee and a bit of blogging.
  3. Usable keyboard.  Phone keyboards are crap.  Palm top keyboards are crap.  I’ve not used it but the lack of tactile feedback means the laser projection keyboard is probably crap, too.  There just aren’t any solutions for mobile keyboards, but while the netbooks are small, they seem to have usable keyboards.  You’re not going to get the same words-per-minute rate as on a full-size keyboard, but it won’t be too bad once you’ve had a practice.
  4. Wi-fi.  How cool to go shopping, see stuff you like, and go online to check the prices on Amazon?  Check your email while you drink your coffee, Sir?
  5. Fast boot time.  I don’t know how this is achieved.  Even if they’re cheating and using some sort of hibernate functionality I don’t care.  These things need to go on and off really, really quickly.  You want to sit down, take it out, open it, use it, shut the lid and put it away again.  You want 95% of that time to be using it, not waiting for it to boot.  It needs to be as close to opening/closing a browser on your PC as possible.
  6. Price.  Cheap, cheap, cheap.  Well, reasonable.  For “cheap” you can get a netbook, but don’t expect XP, SSD or a big screen (for small values of big).  For around £300 you can get a decent spec device.  To be fair, the Linux-based ones look okay.  They seem to come with OpenOffice and FireFox.  I only want more because I’m a Windows guy and software developer.  I will want to see what I can get it to do for me.

So, I’m saving up for one.  It’s my birthday in March so I’ll be saving any pennies I get towards a netbook.  I just hope it’s not a case of “never meet your heroes”…


GTD – Outliners for thoughts

February 3, 2009

I think in trees.  I relate almost everything in one way or another in terms of some sort of hierarchy.  Trees and hierarchies feel elegant to me, and it shows in the way I make notes.  It’s really a more orderly way of displaying a mind-map.

I’ve always made my notes in a standard A4 notebook.  Meeting notes for me look something like this:

Outline Notes

Outline Notes

The trouble is written notes is that they aren’t typically very editable.

It occurred to me that computers are pretty good at this sort of thing, so I looked for a software outliner.  I tried a few desktop software options including Dave Winer’s opml Editor, and the supremely awful free version of NoteCase. but quickly decided that the web was the way to go.

I’ve used Evernote, but it was actually too complex for my needs.  It focusses on each note being like a rich text document.  I want the tree structure to *be* the notes, just like in my A4 book.  It does have tagging though which would be nice in the future when I have many notes.

I’ve tried various mind-mapping options, but the outliner tree style is much easier for me than a sprawling spiders web with the ideas on.  They’re really the same thing, just laid out differently.

Todoist was good, and one of my final two choices.  They have the indenting support, but in the end it was keyboard navigation that let it down.  You *can* move things around with the keyboard, but it wasn’t quite as slick as my final choice: Checkvist.

Despite a few teethinc troubles (a friend of mine lost a document because of a bug) it is very, *very* fast to add, edit and manouvre items around the tree.  The keyboard support is excellent, and there are very few actual features to bog it down.  It’s a simple, clean interface that feels and works like an editable notepad.  I might actually break my habit of “no laptops in meetings” to take electronic meeting notes…


Nobody builds bridges any more!

January 27, 2009

Once upon a time we had this thing we call the Industrial Revolution.  We did amazing things during this time.  We built steam engines, railways, bridges and canals.  These were massive projects that took years of blood, sweat and tears.  In the 20th century we had what some call the second industrial revolution.  The automotive industry appeared and began to thrive, information technology appeared and began to grow.

Watt Steam Engine

Watt Steam Engine

That was the revolution.  Since then there’s been some evolution of those existing ideas, but relatively few new genuinely ones.

No-one is building those fantastic railways and the amazing bridges that took them over seemingly impassable territory.

Why?

It could be funding, but where did the money come from in the old days?  Do we no longer have men like Brunel who will put everything on the line and strive to make these things happen?

Have we had the next revolution already?  If so what will the next iteration look like?  Will we even have one?  Are we instead going to maintain the current gentle evolution from one new idea to the next.  Assembly, C, C++, Java, .NET, JSP, ASP.NET, (N)Hibernate, ASP.NET MVC, jQuery and so on.   Building blocks built on building blocks.  Walls taken down, put up a different way.  An organic system where the latest trends flow and follow the current thinking the way a shoal of fish move together in the sea.

Computers as we know them appeared first with valves, then transistors, and progressed to microchips.  Then the microchips started getting smaller and faster.  But still microchips.  Now, I’m only 27, but I’m not convinced that computers have really fundamentally changed in the past 20 years or so.

In terms of software, the main operating systems as we know them today, and the companies that built them, were the last revolution.  We as software developers are really just building new trains to run on that old railway.  There’ll come a limit to what we can do, so while that’s a little way off, what’s the next “big leap” to take us onto greater things?  Let’s build a new railway that’ll cross new cravasses and take us new places.  Who’s the Brunel of our time?


Tip for debugging console applications in C#

January 20, 2009

Sometimes in a C# console application, you want to output text to the console window for release builds, meaning Debug.WriteLine() is out of the question.  Maybe you also want the output in some sort of log file?  It would also be handy to be able to indent the output to make it clearer what your application is doing.  This makes simple Console.WriteLine() impractical, too.

If it’s an enterprise application you’d probably look at Log4Net or similar, but if it’s just a little something you’ve knocked up, then that might be overkill so try this at the start of your application:

Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

The documentation for Trace and Debug gives more detail, but the great thing with this approach is you can now format your logging output in a more clear way:

Trace.WriteLine("Starting loop...");
Trace.Indent();
foreach (string name in names)
{
	Trace.WriteLine(name);
}
Trace.Unindent();
Trace.WriteLine("Completed loop");

Like I said, I’m not proposing it as best practice for large-scale production systems, but for those occasions when you need to see into your application without debugging it, it might prove useful.


Undo, UNDO!

January 13, 2009

There is little more frustrating when using a computer than message boxes.  Technical people ignore them because we think we know they don’t mean anything, and non-technical people just use a rule of thumb (always yes or always cancel).  No-one ever reads the small print.

There’s not much point asking users if they’re sure before letting them do something. They will be absolutely positively sure.  Until shortly after they’ve actually done it.  Instead, we should accept that users make mistakes.  Rather than blame them for blindly clicking OK on our message boxes, we should embrace the human condition and strive to try and provide rollback with *all* functions in our applications.

Instead of

“Are you sure you want to book 3000 items of stock in?”

try

“3000 items of stock booked in.” and offer CTRL+Z to simply remove those 3000 items again instantly.

This is a hard thing to get people to come round to.  It’s so ingrained to rely on confirmation *before* the action.  Maybe we should be more forgiving and provide a means to recover from their mistakes, rather than having them hit our call centre in a panic when something goes wrong?

UPDATE:

Note that I’m not saying you should never use messageboxes.  I’m just suggesting that the “Are you sure?” concept in particular be avoided.


Synergy

January 6, 2009

For a short while I had two PCs on the go – my old development laptop, and my shiny new desktop PC.

To ease the transition period and be able to use both PCs at once with one keyboard and mouse, I installed Synergy.  Similar to multi-monitor setups, this uses the network and a kind of remote-access solution to control the mouse and keyboard input of other machines.

One tip, if you find that you’ve set it up according to the documentation but find that the mouse moves to the slave machine and won’t move back, check that you’ve set up *both* directions of movement on both machines involved.

I.e:

  • Rule 1: Laptop is to the left of Desktop
  • Rule 2: Desktop is to the right of Laptop

This caught me out and took a while to find the cause of the mouse getting stuck on the secondary screen.  Hope the tip helps someone :) .


Facebook’ll see your FriendFeed, and raise you…

May 27, 2008

http://blog.facebook.com/blog.php?post=17720842130

Facebook now does FriendFeed.  They’re doing the same things, so now it’s down to the implementation…


Afraid to Upgrade?

May 9, 2008

I have often found that when I’ve written a funky new piece of functionality, that replaces or augments existing functionality, that people aren’t often eager to use it. Often this is because they are used to the way it works, for better or for worse, and prefer the devil they know. In addition, loads of new features isn’t what everyone wants, and contrary to popular (developer) belief, people aren’t going to dive into all the new configuration options you’ve added.

So are people scared of change? I think they are, myself included. I think there are two reasons people resist change.

Reason number 1

I believe change can put people outside their comfort zone. I’ve experienced it – upgrading to Vista, installing those new graphic card drivers, starting a new job. It’s not unfounded, either. The reason I’m always worried about it is because when it comes to computers, I get burned all the time.

In the context of computing, it’s fair to say that PCs do burn us all the time, it’s probably only reasonable to expect people to be wary and prefer to stick to what they know. It’s worrying to think that we as developers are basically at fault, too. If our software worked faultlessly all the time, people would always want the new version, and wouldn’t worry that it might make things worse.

Reason number 2

Often the reason to not change isn’t because things will get worse for them, but because it takes effort to change, and there’s no compelling reason or tangible benefit to do so. Hands up those who are still using Windows XP or Office 2000/2003? I assume I don’t stand alone?

It’s why when I write software I try to make some perceivable change for the user. Users don’t really care about a minutely better algorithm or better error handling. They care that it does what they want, without being too complicated. Any PC has a job to do, and if it does it already, why change that?

Cost is another factor. Essentially, for an upgrade to be worth it, the following must be true:

cost * effort < perceived benefit

It’s exactly why there are still so many IS400 machines out there running EGA terminals doing back-office applications. It works, people know how to use it, they’ve learned the quirks, it hasn’t changed since 1990, and it does the job. So why bother?

A solution?

Automatic updates is one way to push new software out there. It’s a good way of making sure that people get the bugfixes they didn’t know about even though they’re in the “reason 2″ category.

You have to be careful not to push things that don’t work though. For example, I wasted an hour or so yesterday trying to get AVG Free to update from version 7 to version 8. Although it had been asking me for a week or so to do so (via an annoying popup that I couldn’t disable – how dare they!), it screwed up. I ended up having to delete the Program Files\Grisoft folder and registry entries and hoping a clean install worked.

Fortunately for me, this time I got it working, but how is my situation better than it was before? I have virus protection (sort of) now, and I did before. Where’s the benefit? Was it worth it?


Searchable Discussions

April 25, 2008

I work from home, and in addition to a company mobile phone and email, my colleagues and I use Skype to keep in touch.  Not so much the voice, but the IM capability.

Now, I’m not a bad typist, but I do find four main problems with IM when discussing fairly complex subjects:

  • I can’t type as fast as I can think (and even that’s not very fast sometimes).
  • You can get the words across, but not the tone.  This sometimes leads to confusion, requiring even more typing (or resorting to a phonecall) to sort out.  You get a similar problem with SMS/text messages on mobile phones.
  • You can easily end up with multiple IM windows open at the same time, diluting your attention.
  • People don’t think for a second before popping up Skype and sending an IM, whereas before making a phonecall usually people will typically make sure it’s a good reason.

Sometimes I find I’m reaching for the phone when an IM chat goes overboard, but more often than not I stick to IM because it has some tangible benefits in the workplace:

  • You can put IM on “Do not disturb” mode, and give “callers” an insight into whether you’re likely to be able to receive them.
  • You can copy and paste information into IM.  For example in my job I deal a lot with barcodes, and I can tell you from experience that it’s soo much easier to copy and paste than try to read out a 24-digit numeric barcode or serial number.  Also, for developers sharing titbits of SQL code or hyperlinks, it’s invaluable.
  • Most importantly: conversations are searchable.  I know there are services out there that can transcript a telephone conversation, but that’s several orders of magnitude more complex than IM.

There are some excellent improvements that could be made to IM.  For instance, replacing the concept of Available/Unavailable status with the ability to “walk in and out” of a “room” would be an interesting new way of looking at things.

However as you can tell, I’m most interested in the ability to search.  My memory is awful, and to get the exact same detail from a conversation I had months ago is invaluable.

Trouble is, the only IM client that I’ve seen support searching properly is Google Talk.  GTalk chats are stored in your Google account alongside your email, and are searchable with the ubiquitous Google search engine. This is especially handy because you can search from anywhere in the world.  You don’t even have to be at your PC.

Skype has an incremental search facility, but the data is stored locally on your PC and is only available in a chat window, and the text in that window.  If you want to search for something said in a conversation a month ago, you’re going to have to get it to load all the conversation history.  To be fair Skype do offer a workaround for this but while it goes some way to blocking the gap, it’s not perfect.

So, the point of this post is that the main benefit of IM in the workplace is recorded and searchable conversations.  It’s no small wonder why IM client developers aren’t tapping into the power of this information by providing a more suitable mechanism.

So imagine my surprise, that while researching for this article I found a Skype plugin for Google Desktop Search.  Since I’ve only just found it I’ve not had chance for more than a quick go, but it’s a good start.

‘Till then, happy chatting!