Marketing Weasels Who Write Code
secretGeek .:dot Nuts about dot Net:.
home .: about .: sign up .: sitemap .: secretGeek RSS

Marketing Weasels Who Write Code

code snippet form a microsoft ad

When I flick through a geeky book I'm more likely to browse the code snippets than the text.

Unfortunately, marketing weasels are aware of this. And hence, you see a lot of dumb ads that use Source Code to hook you in.

The amusing thing, for me anyway is that the code they use is always broken in some way.

Here's the code from a current microsoft ad i saw here:

Public Function ProjectCompletionTime() as String
  If DevTool <> "Visual Studio 2005" Then
    return "Sorry, I'm going to have to cancel tonight"
  Else If DevTool = "Visual Studio 2005" Then
    return "I'll meet you for dinner at 7pm"
  End if
End Function

Okay -- this is probably one of the better pieces of code i've seen in advertising. But there's still about five things wrong with it.

(Continues...)

Firstly -- you'd expect a function called 'ProjectCompletionTime' to return a DateTime. When you inspect the code you find that what it actually returns is a statement about your availability tonight. I'd recommend the function be renamed to 'AvailabilityTonight' -- or 'ExcuseForTheWife'

Secondly, the redundant logic is plain annoying. A C# rendering of this same logic would return the error that 'not all code paths return a value'

Personally, I'd use a 'guard clause' technique to reduce the nesting. I like guard clauses. YMMV.

Public Function ExcuseForTheWife() as String
  If DevTool <> "Visual Studio 2005" Then
    return "Sorry, I'm going to have to cancel tonight"
  End if
    
  return "I'll meet you for dinner at 7pm. You're paying. I blew all my money on Microsoft Tools."
End Function

Also, I wonder where this 'DevTool' variable is declared? And as a variable, I'd prefer to see it in camel case.

Strange too that it's just a string. You'd expect it to be an object, never mind. Let's pass it in as a parameter:

Public Function ExcuseForTheWife(devTool as String) as String
  If devTool <> "Visual Studio 2005" Then
    return "Sorry, I'm going to have to cancel tonight"
  End if
    
  return "I'll meet you for dinner at 7pm. You're paying. I blew all my money on Microsoft Tools."
End Function

Now the real thing that annoys me here is that they're clearly not using Visual Studio as their code editor.

The code does not have syntax highlighting! And the lower case 'as' and 'return' are also a dead give away.

I pasted my snippet into Visual Studio, and copied it back out using 'CopySourceAsHtml' (the excellent plug in from Colin Coller at JtLeigh.com). (I had to apply extra styles to give it a 2005 look... the plug in i have only works in 2003). Here's the result:

Public Function ExcuseForTheWife(ByVal devTool As String) As String

    If devTool <> "Visual Studio 2005" Then

        Return "Sorry, I'm going to have to cancel tonight"

    End If

 

    Return "I'll meet you for dinner at 7pm. You're paying. I blew all my money on Microsoft Tools."

End Function

Finally -- brevity is wit etc. While I do love VB, I think C# would be punchier and less wordy for the ad:

public string ExcuseForTheWife(string devTool) {

    if (devTool == "Visual Studio 2005") {

        return "Meet you at 7 PM!";

    }

    return "Can't make it tonight. Still fixing broken code.";

}





'jerry' on Thu, 25 May 2006 00:39:00 GMT, sez:

there are so many version of visual studio that this you need a CASE statement.

Select case devTool

case "Visual Studio 2005 Team Suite"
return "I'll be late because I have to work a second job to afford the license"

case "Visual Studio 2005 Team Edition for Software Architects"
return "it's not my job to write code. I'm too busy envisioning the solution to tonight's dinner"

case "Visual Studio 2005 Team Edition for Software Developers"
return "I'll be late because I haven't complied with the checkin policy"

case "Visual Studio 2005 Team Edition for Software Testers"
return "I'm a tester. They don't let me out of my cage for meals."

case "Visual Studio 2005 Standard Edition"
return "I'll be late because i can't run built in unit tests"

Case "Visual Studio Express"
return "I'll be on time because I'm an unemployed hobbyist programmers, but you'll have to pay for dinner cause I'm broke"

Case string.Empty
return "I'll be late because I can't decide which version of Visual Studio to buy."

...
insert your own insults here ;*)
...

J



'David Stone' on Thu, 25 May 2006 00:57:26 GMT, sez:

CopySourceAsHTML for VS 2005:
http://www.avocadosoftware.com/csblogs/dredge/archive/2006/01/10/544.aspx :)



'lb' on Thu, 25 May 2006 00:59:53 GMT, sez:

Thanks David! Brilliant!

cheers Jerry: looks like you put even more thought into this than me... and i thought *I* was a geek...



'Hermann Klinke' on Thu, 25 May 2006 18:18:33 GMT, sez:

I hope you have sent the corrected version to Microsoft to really embarrass the guys that made it. I demand that they get fired immidiately for not even using VS to create this code. It's so hypocritical...



'Jason Looney' on Fri, 26 May 2006 19:12:31 GMT, sez:

There's a chicken and egg problem here. Really, you need to use conditional compilation. Right? (This could get trippy...)

Side note: Why am I the only left who believes methods should have only one return statement? What happened to that rule? Am I dating myself here? And if so, should I ask myself to marry myself? (Hmm, more conditional compilation... )



'lb' on Sat, 27 May 2006 01:22:51 GMT, sez:

>methods should have only one
>return statement?

i was taught that way at uni, and i believed that for a long time too. then someone showed me a bunch of examples of using guard clauses, and using finally statements when one exit point is needed, and i haven't looked back.

my favourite advantage to 'guard clauses' is that they're the easiest way to avoid deeply nested 'if' statements.

but i'm not religious about it either. if a customer is going to end up owning the code and they insist on 'one return per function' then i'll fall into line.

lb



'Rob Williams' on Sat, 27 May 2006 14:28:52 GMT, sez:

Hoorah, a happy method for everybody :)

public string ExcuseForTheWife(string devTool) {

return (devTool == "Visual Studio 2005") ? "Meet you at 7 PM!" : "Can't make it tonight. Still fixing broken code.";

}



'Jason Hanford-Smith' on Thu, 01 Jun 2006 18:08:57 GMT, sez:

In answer to Rob's brilliant one-liner (not including the method-name, etc):

Firstly, what's with the C++ style brackets?
Second, surely we should all be using the Object model:

public string ExcuseForTheWife(string devTool)
{
return (devTool.Equals("Visual Studio 2005") ? "Meet you at 7 PM!" : "Can't make it tonight. Still fixing broken code.";
}



'Jason Hanford-Smith' on Thu, 01 Jun 2006 18:09:49 GMT, sez:

And then of course I miss a closing bracket!

public string ExcuseForTheWife(string devTool)
{
return (devTool.Equals("Visual Studio 2005")) ? "Meet you at 7 PM!" : "Can't make it tonight. Still fixing broken code.";
}




name


website (optional)


enter the word:
 

comment (HTML not allowed)


All viewpoints welcome. But the right to delete any post for any reason is reserved. Don't make me do it. Comments may be republished, emailed to your loved ones or printed and used as toilet paper. Who reads this legal bit anyhow?

TimeSnapper is a life analysis system that stores and plays-back your computer use. It makes timesheet recording a breeze, helps you recover lost work and shows you how to sharpen your act.

TimeSnapper won last year's Developer Competition at Larkware.com, and is used by over 10,000 people.

Articles

Alan Kay on 'The Camel has Two Humps' Alan Kay on 'The Camel has Two Humps'
is the music inside the piano? is the music inside the piano?
The Bluffer's Guide To Yegge: Business Requirements R Bullsh*t The Bluffer's Guide To Yegge: Business Requirements R Bullsh*t
Prototype Ready for Launch Prototype Ready for Launch
Idea: a poor man's eye-tracking heatmap for win forms Idea: a poor man's eye-tracking heatmap for win forms
'The Register' seems to have plagiarised Mary Jo Foley 'The Register' seems to have plagiarised Mary Jo Foley
A magic goal for software businesses A magic goal for software businesses
A to Z of Software Methodologies A to Z of Software Methodologies
TimeSnapper in Music! TimeSnapper in Music!
Fixing problems can give you a glimpse of something terrible Fixing problems can give you a glimpse of something terrible
Web Tablet: Toward Less Complexity Web Tablet: Toward Less Complexity
Do they store the code for TFS in TFS? Do they store the code for TFS in TFS?
Sudden TimeSnapper Discount! Sudden TimeSnapper Discount!
How Can Microsoft Beat Google? How Can Microsoft Beat Google?
TimeSnapper 3.1: Attack of the the Red/Green Stripes TimeSnapper 3.1: Attack of the the Red/Green Stripes
21 tools used in our MicroISV 21 tools used in our MicroISV
Lost Treasures of the DOS World: tree! Lost Treasures of the DOS World: tree!
The Virtual Machine Machine and the Virtual Virtual Machine The Virtual Machine Machine and the Virtual Virtual Machine
Should Linq To Sql Go Should Linq To Sql Go "Open Source"?
Redux: New Synchronisation Idea Overlooked By Microsoft Redux: New Synchronisation Idea Overlooked By Microsoft
New Synchronisation Idea Overlooked By Microsoft Live team New Synchronisation Idea Overlooked By Microsoft Live team
Visual Studio UX Taskforce, Office UX Taskforce... etc. Visual Studio UX Taskforce, Office UX Taskforce... etc.
How to be Jeff Atwood How to be Jeff Atwood

Archives .: secretGeek :: Complete Archives :.
25 steps for building a Micro-ISV 25 steps for building a Micro-ISV
3 minute guides -- babysteps in new technologies: powershell, JSON, watir, F# 3 Minute Guide Series
Top 10 SecretGeek articles Top 10 SecretGeek articles

Downloads

TimeSnapper -- Automated Screenshot Journal TimeSnapper.com    
Version 3.1: instant productivity profiles

ShinyPower (help with Powershell) ShinyPower
Now at CodePlex

Next Action NextAction
Managing the top of your mind



[powered by Google] 


World's Simplest Code Generator (html edition) World's Simplest Code Generator
Gradient Maker -- a tool for making background images that blend from one colour to another. Forget photoshop, this is the bomb. Gradient Maker
How to be depressed How to be depressed
You are not inadequate.



Recommended Reading

The Best Software Writing I
The Business Of Software (Eric Sink)

Recommended blogs

Jeff Atwood
Reginald Braithwaite
Joseph Cooney
Phil Haack
Scott Hanselman
Julia Lerman
Joel Pobar
Eric Sink
Joel Spolsky
Des Traynor

Aggregated Links

programming.reddit.com
dzone
dot net kicks

Human Link Machines

interesting finds
a continuous learner's weblog
arjan's world
n links today
new and notable
morning coffee
learning .net
weekly link post
(my del.icio.us account)

LinkedIn profile
 
home .: about .: sign up .: sitemap .: secretGeek RSS .: © Leon Bambrick 2006 .: privacy

home .: about .: sign up .: sitemap .: RSS .: © Leon Bambrick 2006 .: privacy