Well, this completely depends on the language and the compiler. Using the C# compiler that comes with the framework, it doesn't matter, as the IL output is the same. Here is a sample routine:
static void Main(string[] args)
{
// Create the instance.
MyClass instance = new MyClass();
if (null == instance)
{
}
if (instance == null)
{
}
}
The IL for the first comparison is as follows:
L_0007: ldnull
L_0008: ldloc.0
L_0009: ceq
L_000b: ldc.i4.0
L_000c: ceq
L_000e: stloc.1
L_000f: ldloc.1
L_0010: brtrue.s L_0014
L_0012: nop
L_0013: nop
And the second:
L_0014: ldloc.0
L_0015: ldnull
L_0016: ceq
L_0018: ldc.i4.0
L_0019: ceq
L_001b: stloc.1
L_001c: ldloc.1
L_001d: brtrue.s L_0021
L_001f: nop
L_0020: nop
As you can see, the output is virtually identical except for the ordering of the items on the stack. The operations are the same.
As mentioned before, it is a relic from the old C days where anything with a 0 value evaluated to false, and if you missed an equal sign, the assignment was evaluated as the conditional.
You don't have to worry about that in .NET, as conditionals will only accept boolean values, but if you are comparing against true/false, it might still be better coding practice to put the literal value first, so as not to accidentally evaluate an assignment.