# 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)  #    
# Sunday, August 05, 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.


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

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

Jon Udell posted recently about a compelling graphic in the New York Times:

This is a very intruiging graph that immediately gets you thinking about survival rates, about whether new cases are rising or falling, and the obvious contrasts between, say, prostate and pancreatic cancers. But Jon then goes on to link to a post about how to make graphs like this yourself featuring your own numbers (sales? expenses? bug rates? time spent?) in Excel. I am consistent amazed at what Excel will do for people who know what they're doing. Check it out.

Saturday, August 04, 2007 7:54:08 AM (Eastern Daylight Time, UTC-04:00)  #    
# Friday, August 03, 2007

Andrew Clifford has a slightly controversial blog post in which he makes this claim: real programmers don't test. Well, on further investigation, what he really says is that really good and experienced programmers don't have a separate testing step at the end. And even in that diluted form, I'm not sure I agree. My developers think of tests before they code, and they test as they go, but on large development projects (and some small tasks for that matter) I still have a tester take a run through the system to make sure there is nothing that we would cringe if the client were to find :-).

The Braidy Tester has a way of thinking that may scare you a bit and a huge list of tests that you need to run at the end in his "you are not done yet" lists for testers and developers. The first item on the developer list is the most important to me -- when you find a bug, ask yourself why it didn't turn up earlier. Why did we wait until we were 90% complete to test with their old data? Why did nobody print this before? Why has it been three months since anybody tried adding a customer record before using this screen? "Why" questions tend to hurt a bit, but they prevent pain in the future. And folks who test as they go, who test in their minds before they design or code, can fly through a "you are not done yet" list and say "yes I am!"


Friday, August 03, 2007 7:43:17 AM (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, August 02, 2007

Another tip from Steve Clayton, this one about Hotmap, which aggregates local.live.com searches and maps, letting you know what places people are asking for maps of - where they want to go. Steve did an England map, but I did Ontario and surrounding areas. The darker red squares have had more map requests:

To a certain extent it just correlates with population, but also with Internet use, how visited a place is, and perhaps a certain Microsoft-vs-Google demographic as well.


Thursday, August 02, 2007 9:10:39 PM (Eastern Daylight Time, UTC-04:00)  #