# Tuesday, 04 December 2007

Have you been missing your fix of Ale Contenti at the whiteboard?  Are you unclear on the differences between try and __try? Or between exception handling and structured exception handling? Watch two guys who really understand how all this works and learn why not handling an exception can be as important as handling one.

Kate

Tuesday, 04 December 2007 16:10:53 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 03 December 2007

Everyone has UI woes. Users want more controls on the dialogs, or they want them simpler, or smaller, or larger, or combined, or split. The thing you think makes perfect sense they refuse to understand.  But it could be so much more complicated. Take this insightful post on the Shell Blog about one of the games that has come with Windows for as long as anyone can remember: Minesweeper. Some folks who use Windows don’t actually think that mines are funny things or that avoiding them is a game. Well, probably if you asked them, most people would agree that mines are bad, but for some people it's a far more personal and upsetting reality than for others. (BTW the mines in Minesweeper are apparently water mines, not land mines, but that doesn’t really increase the fun factor.)  So they changed it to give you an option to find flowers instead:

Be sure to read the whole post to understand why that was only the start of the work involved.

Kate

Monday, 03 December 2007 16:07:11 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 02 December 2007

There are plenty of webcasts on “what’s new in ProductName 2007” or “Introduction to XYZ Security” or various other technical topics. I’ve done my share and will continue to do so. But this is something a little different:

  • Becoming a Better Developer
  • Building Your Skill Set
  • Discovering Your Trusted Resources
  • Becoming Your Own Boss
  • Creating Your Own Start-Up Business

Some of the high flyers of the Canadian developer community are here... you want to watch these. The webcasts are available on demand and there are plenty of handy links as well for you to use as you’re following along.

Kate

Sunday, 02 December 2007 15:59:31 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 01 December 2007

I recently started reading Rands In Repose, a business blog of sorts that is full of advice I will never need (how to enjoy a gambling trip to Vegas) and plenty more that I find very useful. Take The Laptop Herring, for example. He argues strongly for the banning of laptops in meetings. Oh dear. I take my laptop to essentially every meeting. But he then goes to on to direct some good thinking towards WHY a person would sit in a meeting room and surf the web or check their email. Either you’re in the meeting or you’re not, right? Well, no, because most of us don’t have the power to say “that hour would be a waste of my time” so we have to go. I had a client whose meetings always lasted exactly an hour. People found a way to use up that time even if the decisions were all made at the 37 minute mark. Grrr. But whether or you not you can refuse to attend meetings that are a total waste of time, there is value in realizing that laptop use is a dramatic indicator of what people feel about the meeting they are in.

And from his comments, here’s a challenge for the brave. You want your laptop in the meeting because you’re taking notes / assigning work items / running queries / checking that against the requirements? No problem. Put it on the projector. That’ll keep you off email / IM / YouTube, won’t it?

Kate

Saturday, 01 December 2007 15:56:11 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 30 November 2007

My last post before my hiatus was Give Before You Take. Steve Clayton expressed a very similar sentiment while talking about making yourself, as an employee, high value and hard to replace. Worth reading, and follow his link over to a nice categorization of employee values and behaviours. It’s not enough to provide high value to your employers or customers – if you provide “commodity service” that others can also provide, you’re replaceable. And who wants to be replaceable?

Kate

Friday, 30 November 2007 15:52:53 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 29 November 2007

I’m a big Larry O’Brien fan, and a big DotNetRocks fan, so when you put the two together, I’m in! Then tell me they talked concurrency – one of my fave topics for a number of years now and I’m sure for a number of years yet to come. That makes this one a don’t miss for sure!

Kate

Thursday, 29 November 2007 15:41:47 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 28 November 2007

Nick Wienholt took over my column at CodeGuru several years ago, and has written roughly as many columns now as I did. Yet the URL for the column still has my name in it, a discrepancy he pretended to complain about in an August blog post. He has a nice look at the marshalling library ... something you’ll be hearing more about from me too.

Kate

Wednesday, 28 November 2007 15:40:15 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 27 November 2007

Eric Lippert talks about some choices that were made in creating C#. He emphasizes repeatedly that C# is not “C++ with the X parts taken out” – where X might be “stupid” or “complicated” or “reserved for smart people” depending on who you talk to. And I agree with him. C# is its own language with its own strengths. It enjoys a big advantage, too: it came from a blank page and wasn’t constrained by an existing code base. For example, one subtle source of bugs in C++ applications is that the order of subexpression evaluation is not enforced by a standard. If I write x=f(y) + g(z); it’s possible that one compiler (or one version of a compiler) might evaluate g(z) first, while another evaluates f(y) first. If these functions have side effects, this matters. I’ve always advised developers that if your functions have side effects, and you care what order they go in, split these expressions up into lines that happen in the order you want: x1= f(y); x2 = g(z); x = x1+ x2; for example.

Eric asks, “is there any benefit to the user of having this order of operations be unknown?” and of course there is not. The reason the order is unspecified in C++ is because there were compilers (from more than one vendor) before there was a standard. That’s not a constraint the C# team faced, so they laid down the law – subexpressions are evaluated from left to right. [Yes, I know some people claim it is a benefit to the user that the compiler is free to optimize by adjusting the order of evaluation. I just fail to see an optimization available by doing things in a different order.]

Two morals of this story. First, new languages can do some things older ones can’t, and that’s a good thing about those languages. Second, you really need to know how your language works, or some day it’s going to bite you.

Kate

Tuesday, 27 November 2007 15:36:58 (Eastern Standard Time, UTC-05:00)  #