# Saturday, December 01, 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?


Saturday, December 01, 2007 3:56:11 PM (Eastern Standard Time, UTC-05:00)  #    
# Friday, November 30, 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?


Friday, November 30, 2007 3:52:53 PM (Eastern Standard Time, UTC-05:00)  #    
# Thursday, November 29, 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!


Thursday, November 29, 2007 3:41:47 PM (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, November 28, 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.


Wednesday, November 28, 2007 3:40:15 PM (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, November 27, 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.


Tuesday, November 27, 2007 3:36:58 PM (Eastern Standard Time, UTC-05:00)  #    
# Monday, November 26, 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!


Monday, November 26, 2007 3:26:08 PM (Eastern Standard Time, UTC-05:00)  #    
# Sunday, November 25, 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.


Sunday, November 25, 2007 3:24:44 PM (Eastern Standard Time, UTC-05:00)  #    
# Monday, August 06, 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.


Monday, August 06, 2007 5:24:41 PM (Eastern Daylight Time, UTC-04:00)  #