# 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)  #    
# Monday, 26 November 2007

Michael Easter posted his own personal and opinionated list of the seven most wonderful programming languages of all time. Generally he gives points for changing the world and influencing generations of developers. Perhaps you would choose your wonders based on what you can do with them today, in which case I guess Fortran wouldn’t make your list. But the wonders of the ancient and modern worlds didn’t have to hold up to scrutiny like how many bathrooms they have or whether they’d be hard to clean, and I think that should be true for languages too.  If they’ve inspired us, why not recognize it? Michael chose Fortran, Lisp, Smalltalk, C, Python, Java, and JavaScript. His commenters add plenty more!

Kate

Monday, 26 November 2007 15:26:08 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 25 November 2007

I stopped blogging this fall because I had just too much on my plate. Most days I never found a peaceful half hour, and those days I did find it, I chose not to spend it blogging. But I have a lot of “stuff to blog” saved up, and it’s time to clear out that file and get this habit back on track. For those of you reading the feed, it will be a bit of a deluge. For the rest of you, I’m going to spread these out dated one a day because that makes them easier for me to manage later.

Kate

Sunday, 25 November 2007 15:24:44 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 06 August 2007

Recently I got an email, sent to a largish list of semi-anonymous people (the sender knows us all, but we don't know each other and aren't a "community"), asking "can you give me some advice about why I don't have a job yet?". Having now received several more requests and questions from this same person, it's pretty clear to me that the answer is "because you really need a job right now." The sad truth is, you can't get a job when you NEED a job. The most desirable candidates are the ones who can pick and choose, and who are coming to an employer because that employer is their very best fit. The least desirable candidates are the ones who might not enjoy the work or have career plans that involve that employer for decades or even years, but have a rent payment due so they have to take SOMETHING and this is the only thing going.

This little irony or paradox is not confined to job hunting. Say you want to borrow some money because you lost your job, your SO left you and you have to pay all the rent by yourself, and your car broke. You  NEED the money, and not a bank in the world will lend it to you. But if you just finished high school, have no income other than the student loans you expect to receive, and no plans to work within the next few years, you can have an unsecured credit card. You don't need the money, and that's what makes it safe to lend it to you. Here's a tip for young people: when you first get a job, and have a nice income, but no mortgage or other payments, borrow 5 or 10 thousand dollars. Put it in a savings account, make the payments like clockwork using the money from the savings account, and you will have a lovely credit rating, because you borrowed money and paid it back. Better still, put it in your retirement savings and make the payments out of your income -- you'll get a lovely credit rating and a lump of retirement savings that can compound for the next 40 years. It's not just money that follows the "it's better not to need it" rules -- most of us learned in high school that lonely people make very few friends and go on very few dates, but the popular people get invited to everything and never sit alone.

The only way around the paradox is to act less needy than you feel. The simplest rule to describe this is "give before you take." Before you ask someone for something, give them something - typically information. In many cases, you can give them "I am a terrific candidate for your job". Just changing your attitude from "please please I need you to give me this" to "you are lucky today because I am just what you need" makes a huge difference. I blogged about that over three years ago, with some specific advice about knowing what you want.

Give before you take can extend into so much else as well. Do you call people and say "what are you doing tomorrow?" That makes me really uncomfortable. I am always doing SOMETHING - even lying around on the couch and watching TV - and if I say "nothing" then I may have accepted an invitation sight-unseen. So before you take information about my plans, give me information about why you're asking. "I've got a spare Jays ticket for tomorrow, would you like to come?" or "I have to move on short notice and I need friends to help load the van" or "I'm by the side of the road and need someone to come and get me" work fine all by themselves without the dance of "are you doing anything right now / tomorrow night / this weekend ?" preceding them. Sales guys call me up and say things like "so, does your company accept credit cards?" and while it's not a secret or anything (we do) it rankles me that they want that information but I don't know why I should give it to them. I'd be way happier with "I represent a credit card processing company, and we <whatever they do.> We can save you money if you already take credit cards, or get you set up if you don't. Do you accept credit cards already?"

I try to give before I take in everything I do. Before I ask a new client for a deposit or a commitment, I give them a proposal. Before I ask questions of the candidate in a job interview, I tell them a little about us. I do good deeds where I can and rarely ask for favours. On mailing lists, forums, newsgroups, or active blog comment threads, I answer other people's questions before I ask one of my own. And I blog, which is a form of giving information to many many people at once. Some day I may ask you a question, and if you read my blog you'll remember that I gave before I asked.

Kate

Monday, 06 August 2007 17:24:41 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 05 August 2007

I am generally loving Vista and have no intention of going back. I keep a few VPCs of older OS'es around, for various reasons, and some of the machines in my firm haven't been updated, mostly single-purposes boxes like a file-and-print server that isn't hurting anyone, or a machine dedicated to running our accounting software. But I won't pretend there haven't been annoyances - there have. And one of them has been opening a folder full of files and getting these weird columns like Date Taken and rating and the like:

Scott Hanselman showed me how to fix it. Do this in the root of C if you like, and apply to all subfolders. I have a "working" folder, with subfolders under it for each client, and I did it there. Aaaah, relief.

Kate

ps: Still filing Scott under RD for a little while until the assimilation takes full effect :-)

Sunday, 05 August 2007 08:06:07 (Eastern Daylight Time, UTC-04:00)  #