I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

October 23, 2008

You're Reading The World's Most Dangerous Programming Blog

Have you ever noticed that blogs are full of misinformation and lies? In particular, I'm referring to this blog. The one you're reading right now. For example, yesterday's post was so bad that it is conclusive proof that I've jumped the shark.

Again.

Apparently, according to one Reddit commenter, the information presented here is downright dangerous:

Jeff Atwood has always held the distinction of having the most dangerous programming blog, in that some young or aspiring developers may actually listen to some of his "advice", but now he's somehow managed to snag the achievement of having the most inane programming blog as well.

To put it in more frank terms Jeff: What you've just written is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having read this post. I award you no points, and may God have mercy on your soul.

I enjoyed the Billy Madison quote, but I'm not sure my blog has earned that particular distinction yet. If this blog is the most dangerous content that young, inexperienced developers have ever read then, well, I'd have to seriously question whether or not they've ever actually used this thing we call the "world wide web".

Allow me to illustrate with an example.

Today I happened across this blog entry from Mads Kristensen. In it, Mads explains that Deflate is faster than GZip.

First I tested the GZipStream and then the DeflateStream. I expected a minor difference because the two compression methods are different, but the result astonished me. I measured the DeflateStream to be 41% faster than GZip. That's a very big difference. With this knowledge, I'll have to change the HTTP compression module to choose Deflate over GZip.

This was a surprising result to me, because the two compression algorithms are very closely related. On the other hand, we use GZip extensively and heavily to cache HTML fragment output strings on the Stack Overflow server, as Scott Hanselman explains. If Deflate really is that much faster, we need to switch to it!

But, like any veteran internet user, I never take what I read on a blog -- or any other site on the internet, for that matter -- as fact. Rather, it's a germ of an intriguing idea, a call to action. I fired up my IDE and built a small test harness to test for myself: is Deflate faster than GZip?

public static class StopwatchExtensions
{
    public static long Time(this Stopwatch sw, Action action, int iterations)
    {
        sw.Reset();
        sw.Start();
        for (int i = 0; i < iterations; i++) { action(); }
        sw.Stop();
        return sw.ElapsedMilliseconds;
    }
}

class Program
{

    static void Main(string[] args)
    {
        string s = File.ReadAllText(@"c:\test.html");
        byte[] b;
        var sw = new Stopwatch();

        b = CompressGzip(s);
        Console.WriteLine("gzip size: " + b.Length);        
        Console.WriteLine(sw.Time(() => CompressGzip(s), 1000));
        Console.WriteLine(sw.Time(() => DecompressGzip(b), 1000));

        b = CompressDeflate(s);
        Console.WriteLine("deflate size: " + b.Length);
        Console.WriteLine(sw.Time(() => CompressDeflate(s), 1000));
        Console.WriteLine(sw.Time(() => DecompressDeflate(b), 1000));
    }
}

The results were surprising: on my box, GZip is just as fast as Deflate. For giant strings, for medium strings, for small strings. In every possible testing combination I can think of, Deflate is nowhere near 40% faster.

gzip size: 3125
242
171

deflate size: 3107
225
149

That's not exactly what Mads' blog entry tells me should happen. Do I think Mads is an idiot for posting this? Well, no. I don't.

  • The original blog entry was posted in late 2006; since then new versions of the .NET framework have shipped and hardware has gotten faster. Perhaps there was some significant change in either that produces this different outcome.
  • My test is a bit different than Mads' testing. I use a random HTML file as the compression target; I can't tell exactly what he's compressing in his benchmark. I also tried with small, medium, and large strings. The tests are similar, but they're not the same.

Is this the type of dangerous misinformation that blogs are vilified for? Should I be angry at Mads for posting this? Not at all. I learned a bit more about Deflate and GZip. It provided an opportunity for me to refactor my compression code some. I even learned how to benchmark using lambda syntax. If I hadn't read this post, if it hadn't provided that impetus of an idea for me to ponder, I wouldn't have bothered.

I am a better programmer for having read that blog post. Even though, near as I can tell, it's offering inaccurate advice.

Update: I got a bit more curious about this, so I ran some more tests on different machines. Here are the results, in milliseconds, for a thousand runs each using the Google homepage HTML as the target (it's about 7 Kb):

gzip vs. deflate graph

How much faster is Deflate than GZip?

Core 2 Duo
3.5 Ghz
Core 2 Quad
1.86 Ghz
Athlon X2
2.1 Ghz
Compress8% faster8% faster50% faster
Decompress15% faster17% faster37% faster

There's the 40% Mads was talking about. That is a little shocking when you consider that GZip is simply Deflate plus a checksum and header/footer! (You can download the source code for this test and try it yourself.)

So my point -- and I do have one -- is this: when you say that the information presented on a blog is "dangerous", you're implying the audience is too dumb or inept to read critically.

I, for one, have too much respect for my audience to ever do that. I am continually humbled by the quality of the comments and discussion on the blog entries I post. In fact, I'd say that has been the single most surprising thing I've learned in my four plus years of blogging: the best content always begins where the blog post ends. My audience is far, far smarter than I will ever be.

On second thought, maybe what I promote on this blog is dangerous: thinking for yourself.

But I'm pretty confident you can handle that.

Posted by Jeff Atwood    View blog reactions
« The One Thing Every Software Engineer Should Know
The Web Browser is the New Laptop »
Comments

Jeff, there is a big difference between Mads Kristensen' s blog and this blog. There are a lot more readers for this blog.

Many readers will take what you write as the last word in programming.
You ought to write more responsibly.

Thats it.

Niyaz PK on October 24, 2008 5:07 AM

Was the Happy Gilmore (as opposed to Billy Madison) reference a joke pointed at the "misinformation" you're talking about? =)

Sammy Larbi on October 24, 2008 5:08 AM

You are not resetting the Stopwatch so EllapsedMilliseconds continues to grow with each Start/Stop

Shaun on October 24, 2008 5:14 AM

> Many readers will take what you write as the last word in programming.

I do not think any programmer should ever do that for anything he or she reads, even if it's Knuth. And I am far, far from Knuth.

Jeff Atwood on October 24, 2008 5:14 AM

I completely disagree Niyaz. A blog is an author expressing his or her thoughts/ideas, nothing else. If readers take what is written on a blog for a fact, well frankly that is not the authors fault.

It's as with every other type of media. Don't believe it just because you read/hear it. Think for yourself.

Tchami on October 24, 2008 5:15 AM

> Was the Happy Gilmore (as opposed to Billy Madison) reference a joke pointed at the "misinformation" you're talking about? =)

Heh, you give me too much credit. I'm not that clever. Fixed the post.

> You are not resetting the Stopwatch so EllapsedMilliseconds continues to grow with each Start/Stop

Look more closely, or, try it yourself and see.

EDIT: of course you're right. Doh. Remember when I said the community was smarter than me? Proof! Corrected.

Jeff Atwood on October 24, 2008 5:19 AM

I don't know which made me feel worse: discovering that there's a Stopwatch class in the .NET Framework, or realising that it's been there since version 2.0.

And there I was using Timers. Doh.

The Mighty Borkon on October 24, 2008 5:28 AM

Hmm... I really don't see how you can seriously compare a blog entry about a verifiable technical issue and a blog entry that can affect a person's life and can only be validated over the course of a career.

Also, you didn't pick the most salient criticism from the reddit discussion:
http://www.reddit.com/r/programming/comments/78vq3/jeff_atwood_finally_jumps_the_shark/c05zp1u

"The thing with articles like this is, it's basically boosterism for the term "Marketing". It starts with the (shocking) claim that "marketing" isn't so bad - actually we should all be good at it. Then it says, Actually by "marketing" we really mean "basic communication skills", so don't be frightened of this term "marketing" or of being good at it!

What irritates the shit out of me is that it conflates these two, falsely. What Atwood really means - what he can ONLY mean - in this conflation is that "marketing" is more important than "programming" in a programmer. Normal communication is not the same thing as selling yourself or selling what you've been up to lately. And the conflation is a totally "Marketing" attitude. To Marketing, everything is marketing. You know what guys? It's a good idea not to be a shrinking violet, and to have some conversation skills. And yes, the boundary between non-manipulative communication and manipulative communication is hazy. But telling programmers that they should all practice a more or less professional salesmanship, because they are (apparently) all social misfits, is insulting, and fucking annoying."

joe on October 24, 2008 5:28 AM

Tchami,
I will not take whatever written here for a fact; nor will you.
But that does not relieve Jeff from writing responsibly. This blog is high up in Google for many search terms and there are a lot of visitors to this blog. You cannot run away from that fact.

If Jeff can do something to stop WTF programmers from made, that is to write excellent programming articles that can be used as a fact rather than whining about the fact that this is 'just a blog'.

'Just a blog' applies to my blog where there are only a handful of readers. The 'just a blog' excuse cannot be used for a very popular blog like this for giving incorrect information.

Niyaz PK on October 24, 2008 5:30 AM

Jeff, the point for me is revealed in this sentence of yours:

"But, like any veteran internet user, I never take what I read on a blog -- or any other site on the internet, for that matter -- as fact. Rather, it's a germ of an intriguing idea, a call to action."

Many many programmers (or internet users in general) believe what they see - without doing the investigation first. I disagree with "Niyaz PK" above - users who do not do the extra fingerwork to verify what they read will be burnt by their lazieness sooner or later - and that's a good thing. You can only write about what you know - even if in the due course of events that turns out to be incorrect. Scientists have been working this way for hundreds of years. To suggest that we (as bloggers) start writing about nothing but the absolute truth is patently absurd (besides, some people will argue that trut is subjective rather than objective).


Keep up the good work.

Thomi on October 24, 2008 5:30 AM

See what ? that the timings always increase because you do not /reset/ ? You do start and stop, but /reset/?

bahbar on October 24, 2008 5:31 AM

"Jeff Atwood has always held the distinction of having the most dangerous programming blog ..."

The arrogant, angry and hysterical will always be with us. I hope so. They're so CUTE!

PaulG. on October 24, 2008 5:33 AM

Jeff,
Normally, it is the just the nature of media that people belive what they read,hear or watch. However, in your niche, people who are reading this blog, are genreally intelligent people, who should verify what they reas. Also a blog is meant to stimulate the thoughts, and should not be taken as absolute jugdement. Also, if you keep a lot of people's interest in your mind, it kills the creativity.

Varun Mahajan on October 24, 2008 5:34 AM

Jeff, I've seen quite a few comments/posts on Reddit bashing you lately.

Mostly it's just people who need to get over themselves and realize they have better things to do with their time.

I've often found your blog very educational, and your writing style pleasant too.

You bring up lots of topics that are useful reading, but might be unknown to many of your readers (like me).

As for all the bashing, I think should just ignore it all.

Besides, saying something like "What you've just written is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought" is just one of the most insanely idiotic things I've ever heard.

Somewhere on the Internet, a typical redditor just creamed himself and felt an urge to post "CCC-C-C-C-COMBO-BREAKER!1!".

Considering Blogs Harmful Considered Harmful Considered Harmful Considered Harmful..

shiranaihito on October 24, 2008 5:36 AM

sw.Start() should be sw.StartNew(), Mr. Dangerous.

pingpong on October 24, 2008 5:38 AM

How can GZip be faster than Deflate? GZip uses the exact same compression algorithm as Deflate (the deflate algorithm), but adds a header and a footer and calculates a CRC-32 checksum. Because of this, it should ALWAYS be slower than Deflate.

The fact that in your test GZip comes out faster might be because of the garbage collector or some other external factor. I suggest you change the order of your code: first test Deflate and then test GZip. If GZip is still faster, I'll retract my words.

Tommy Carlier on October 24, 2008 5:38 AM

> You are not resetting the Stopwatch so EllapsedMilliseconds continues to grow with each Start/Stop

Sorry to say this Jeff, but I'd agree... MSDN states that the call to Stopwatch.Stop() does not reset the counter, and calling Stopwatch.Start() will continue from the previous time.

It seems to fit your data too. Looking at the differences between values,

GZip - Compress = 243, Decompress = 163
Deflate - Compress = 231, Decompress = 157

Not much in it really. Probably what I would expect considering the similar processing involved.

P.S. I'm with you on the "dangerous" principle though Jeff. Never just believe anything you read/hear - always ask youself - do I agree? Does this make sense?

Andy Wilkinson on October 24, 2008 5:39 AM

So, fixing the reset:
Gzip size: 3125
243-000=243
406-243=163

deflate size: 3107
637-406=231
794-637=157

They are close to each other, and decompressing takes less time than compressing... Much more sensical.

bahbar on October 24, 2008 5:40 AM

> a blog entry that can affect a person's life and can only be validated over the course of a career

At the risk of really distasteful name dropping and speaking on behalf of other people, I'm 99.9% sure that Steve Yegge and Joel Spolsky would all agree with the point of yesterday's post: Learning a little bit about marketing will make you a better programmer.

So, based on the sum of *our* careers, that is one thing we have all learned and would like to share with other programmers.

> what he can ONLY mean - in this conflation is that "marketing" is more important than "programming" in a programmer

Never said that, of course, and I don't believe it.

Jeff Atwood on October 24, 2008 5:41 AM

Thomi, Varun Mahajan, Jeff
What I can understand from your points:

It is OK to write whatever you FEEL like writing in a programming blog. The readers are supposed to be intelligent (if not, they are doomed. isn't it?) and so they ought to search and find the correct information from somewhere else.

Is that it?

I mean, I seriously cannot understand this. What is the need for reading all these blogs if I should verify every single word you write?

Also, tell me guys, where am I supposed to get the CORRECT information from?
Some other programming blog? What is the guarantee that it will be correct?
Some programming website? What is the guarantee that it will be correct?
Wikipedia?

What is the guarantee that the information in the WWW is correct if everybody thinks like you guys?

You try your best to write a correct article. Mistakes may happen; acknowledge and update. That is what I would suggest. (Rather than telling people will verify whatever crap you will write)

Niyaz PK on October 24, 2008 5:45 AM

> You do start and stop, but /reset/?

Of course you're right.

> sw.Start() should be sw.StartNew(), Mr. Dangerous.

Yep. :P I hope no young, inexperienced programmers were reading that! Corrected.

Jeff Atwood on October 24, 2008 5:45 AM

Well....maybe Jeff, but you gotta admit this is a great quote.
>No, he's more like those girls in elementary school who were really >good at jumping rope, and would jump the two opposite-ways-spinning >ropes during recess for minutes at a time.
>Only with sharks.
>Wow, that's bad-ass!

WOW!!! how do you get them to bend like that?...I mean I know they're mostly cartilage and all but still. And I'm assuming the tail is easy to hold on to but what about the other end with all the pointy-bits? what do you hold on to there?

Love the show.

Keng on October 24, 2008 5:46 AM

Jeff,

From the doc it does seem like, Reset() is required in the stopwatch, haven't used the class so don't know what the actual semantics are.

But fits nicely into the pattern that you describe, 2x improvement for larger strings and smaller for smaller files.

Sijin on October 24, 2008 5:50 AM

So Mads was correct then, after all?
Bad testing is worse than not testing at all.
You're still wrong though: GZip is not as fast as Deflate. It's ALWAYS slower. How much slower depends on the situation. GZip just uses Deflate for its compression, but it also calculates a CRC-32 checksum and adds a header and footer to the compressed data.

Tommy Carlier on October 24, 2008 5:52 AM

Hi Jeff.

I don’t think that you should write “more responsibly”. This is your blog, yours and no one else’s. You have total freedom to write whatever you want, the way that you want.

The ones that should act more responsibly are us. We must think for ourselves, we must not take whatever we read as the whole truth. We are developers; we claim to be smart people. If we are that smart, then we shouldn’t be around taking anything that we read for granted.

Regards,

Arturo Martnez.

Arturo Martinez on October 24, 2008 5:53 AM

I don't know much about the inner workings of the Stopwatch, but how do you know that it is showing the exact time it is used to run your code? What if there was some context switching in between?

I think that is what happened to Mads' calculation.

Niyaz PK on October 24, 2008 5:53 AM

I was wondering which site the trolls all had gone off to. Surely a story with 25 comments on reddit doesn't really warrant a blog post? Not that it wasn't a good read.

Could you enlighten us on why the stopwatch code works? I'm not a .NET programmer and trying to navigate msdn makes me want to stab myself.

wds on October 24, 2008 5:53 AM

I don't think I walked away feeling like everything he said was the truth; but I did walk away with a valuable and accurate lesson from yesterday's blogpost. We DO need to learn to market ourselves better. It may not be the most valuable thing, but it will certainly separate you from the mediocre. Also, the DND reference was kind of (albeit sort of unnecessary) accurate.

At any rate, I think you guys are coming down too hard on him. People shouldn't walk away taking everything implicitly to heart, but rather get the gist of his point, see if it's applicable to their scenario, and apply it if so.

William on October 24, 2008 5:54 AM

Jeff - I enjoy and appreciate your blog, keep it up and many thanks.

Michael Foord on October 24, 2008 5:56 AM

> You're still wrong though: GZip is not as fast as Deflate. It's ALWAYS slower. How much slower depends on the situation.

Like I was saying:

"the best content always begins where the blog post ends. My audience is far, far smarter than I will ever be."

Jeff Atwood on October 24, 2008 5:56 AM

Jeff,
It's ironic that the people who could benefit the most from your idea are the one's who reject it the most forcefully. I could find fault with the post if I was so inclined, but that is true of almost everything, and this isn't a marketing blog anyway. I would rather see more ideas in imperfect posts than fewer ideas in perfect posts.

The best way to approach most writing is to try to figure out what the big idea is and then move on. The big idea in that post was that persuasion is important for technical people. If you really want to piss them off, do a post on the importance of networking for technical people.

It really sucks that many technical decisions are affected by non-technical considerations and that it's not enough to simply have the best technical solution. It really, really sucks. However, that's the way humans are wired and that's the way the world works. If we want to make a contribution, we have to figure out how to get others to accept our ideas and our work, and that involves persuasion. Or coercion, but that's probably the next post.

Thanks for the blog.

Matt

Matt on October 24, 2008 5:59 AM

Jeff,
bahbar is absolutely right. Just change the order of tests (deflate first, gzip second) and you will see.
So in reality you got:
gzip:
243
163
deflate:
231
157

Lamoth on October 24, 2008 6:00 AM

<sound of us all falling for your link bait ;)>

It's intentional right? The headline "The One Thing Every Software Engineer Should Know" is straight out of How to Write Link Bait Headlines 101 (see CopyBlogger http://www.copyblogger.com/).

I'm sure you can see why some people don't like posts like that. The headlines are definitive and you are forcefully opinionated. It's like saying "Fact: Deflate IS Faster than Gzip" because it is a better headline than "Deflate is faster than Gzip when you run this bit of code I hacked up, on my machine, when the whole string is zeros".

There are people out there that look up to you and will parrot what you say. People of more experience will take out what is useful and ignore the rest. But some of the less experienced in your 114,000 readers are at risk of Atwood disease.

In the case of Mads post, I would wager that way more than 50% of the readers of that post would take it as fact that Deflate was faster. And how did Mads post make you a better programmer? All it did was pique your interest. The post itself gave you nothing but that. With your argument me writing any old crap about a subject you happen to be interested in would have made you a better programmer.

It is your blog and your write want to. I bet you could not believe your luck that someone gave you the opportunity to write the headline "You're Reading The World's Most Dangerous Programming Blog"! ;)

Ben Taylor on October 24, 2008 6:01 AM

> With your argument me writing any old crap about a subject you happen to be interested in would have made you a better programmer.

Writing about subjects you enjoy will make *you* a better programmer, is the point.

> The headline "The One Thing Every Software Engineer Should Know" is straight out of How to Write Link Bait Headlines 101

"I blog to help others and also to learn. As it turns out both are aided by getting folks to actually read the stuff. Please pardon the necessary devices."

Jeff Atwood on October 24, 2008 6:05 AM

I've seen the attitude of "your blog sucks because it talks about marketing instead of insert-programming-language-here" many times, even in fields as remote as finances (is the kind of reaction the guy who wrote "Rich dad, poor dad" adresses). Maybe it's just me, but I tend to associate it with "code-monkeys", those who think that just by writing code you can create Google and be rich and successful.

Personally, I always considered this blog's orientation towards human factors what makes it different (and better) from other sites with the "trick for making insert-task-here faster in Visual C#++ .Net" focus, but being an uncommon point of view, this kind of hostile reaction doesn't surprise me. Is already hard enough to find not only programmers, but employees in general who can write and communicate ideas in a clear way, and you pretend a programmer to learn marketing, too? That's crazy talk! :)

Martin on October 24, 2008 6:06 AM

I have nothing to worry about; I know PHP and Bash scripting, which according to every other "programmer" and/or "developer" I've ever talked to, neither of which qualify me as a programmer/developer.

So I guess I'm safe reading your blog. Good thing, too, the trolls had me worried that the end of my career in computers was nigh at hand!

*rolls eyes*

Point is this; the trolls that will tear in to you for taking a holistic approach to development (including marketing, technical writing, copy editing, graphic and interface design, all the things that are needed to make a good program a GOOD PROGRAM) are the same trolls who will tear in to you for your choice of language or, even, your choice of text editor.

Todd on October 24, 2008 6:10 AM

Exactly. If you are too stupid to recognize most situations when something is "not right", or too naive to realize that people can be wrong, or too fucking lazy to bother looking into it for yourself, then you have NO business writing programs that others will depend on. You are lazy, slow, and ignorant, and I would rather never have to deal with you, especially for support issues.

Take some god damn responsibility for yourself and stop expecting everyone to hold your hand and spoon feed you, and then blaming others when your own ignorance and stupidity gets you into trouble.

It's called being a mature and responsible adult. Learn when you can. Recognize when you screw up. Get over it.

Wolter on October 24, 2008 6:11 AM

Keep up the good work, Jeff. The fact you're inspiring such impassioned comments only means that you've got some attention, and you have people scared.

I think the problem is that most programmers have entirely missed the point of programming. I'm a big proponent of technology as a tool, and as a means, but not an end in itself.

Everyone gets scared when their way of life is questioned. That's essentially what you did on the post that inspired that comment. Too often I see programmers and other technologists fall into a sort of tunnel vision where they begin to worship their trade, and completely ignore the purpose of what they're doing.

While I do think that in many ways programming can be an art form. There is beautiful and elegant code. When it comes down to it the only people that will ever care about that are other programmers. I think it's safe to say that in the vast majority of cases other programmers are not your customer, or your user. If you've lost focus on who is going to be using your software, and what they're going to be doing with it then you're just involved in self gratification.

Alex on October 24, 2008 6:15 AM

Cheers. I've learned tons from you. Recently discussing about your article about XML and why we shouldn't take it for granted.. among another things I have learned :) Keep up the good work bud

Sameer Alibhai on October 24, 2008 6:18 AM

I was, just a few short months ago, of the opinion that Jeff had a greater responsibility to post carefully because of his large readership. Almost every post where he mentions this is the most important or this isn't very important really, I cringe. What if some naive automaton interprets Jeff literaly? My god, we could be overwhelmed by marketing guys who only use VB, won't learn xml and don't unit test!

I now believe that if you spend the whole article trying to be completely correct and careful on all points, you really can't make a point. Would you write 4000 lines of carefully constructed code to avoid a condition where the server would have to be on fire for the error to occur? Could you imagine the size of your favorite coding book with examples if every example had to be completely secure, run on and be optimized for the absolute best performance on every platform (especially those not invented yet), and be a shining example of idealistic ivory tower code? Oh and simple and understandable, that's crucial right?

It's just like when you hand off your favorite tome of programming knowledge to an impressionable new hire: "This is a good book, but use your head."

I still worry a little about the introverts and conformists. There's an awful lot of those kind of programmers and they certainly aren't going to call Jeff out or dare to disagree. And what if Joel has a conflicting opinion? Maybe marketing is safer, much stronger herd mentality there...

SteveJ on October 24, 2008 6:18 AM

On second thought (after reading the comments) just do what Joel does and turn off the comments lol

Sameer Alibhai on October 24, 2008 6:19 AM

That's kinda' crazy. Blogs (esp technical ones) promote discussion and invite readers to take up the challenge of proving or disproving ideas if they so desire. In no way should anyone take a blog entry as "fact".

Of course, I'm not stating anything most people don't already know.

Scott Marlowe on October 24, 2008 6:19 AM

Jeff

I've been a long time reader and love the fact that your posts don't just focus on technical issues. I don't always agree with what you say, but the fact that it has me thinking about the issues and about another possible point of view is what keeps me coming back.

As a developer in a very small software house (only three of us), I couldn't agree more that an understanding of marketing is a very useful tool. It may not improve the quality of my code, but it enables me to focus on the aspects of the application that matter to our current and potential users, and allocate my time more appropriately. At the end of the day, my job is to create software that sells, and anything that will help me achieve that is a welcome addition to my skill set.

Don't let the nay-sayers get to you and keep on posting.

Tim Greaves on October 24, 2008 6:24 AM

After reading all those blog posts... okay, i only read the first twenty or so. Anyhow, after reading, I realized something.

<b> The people who most needed to gain something from your last post are the very people who would refuse to accept any of it.</b> Their attitudes as purists is reminiscent of those who believe in "art for arts sake". It doesn't matter if you get paid, or if anyone understand your work. It doesn't matter if anyone cares. It just matters that you did something cool and *you* know it, and if no one else understands, then that's clearly a sign of failure on their part.

I collaborated with a guy like that on a current project. While he is smart, and his architecture was useful, I will NEVER share a contract with him again. In the end the time I had to spend convincing him to humble himself by explaining or documenting his genius, much less proposing ideas to me or *gasp* the client, cost me more than the fractional savings from his "cool and innovative" design.

The famous inventors and researchers you hear about in history, no matter how hated, all did marketing. For every one of them, there were usually five to twenty others doing exactly the same thing. The others just couldn't convince anyone to listen.

Yes "programming" is just writing code. However saying a "programmer" just "programs" shows a vast ignorance. Any baseball player who only showed up to "play baseball" would quickly find himself back in the minors. Or has everyone forgotten a pitcher who despite being great at "playing baseball" got booted for bad marketing?

Russ on October 24, 2008 6:25 AM

SteveJ,
Good points. I agree.

Niyaz PK on October 24, 2008 6:28 AM

Not only was the benchmark messed up, but there is at least one invalid assumption here. IIS has its own implementation of Deflate, so depending on where in the pipeline you apply compression, this benchmark may not even be relevant.

And it's a good thing that it has its own implementation, because the .NET implementation is absolutely horrible.

For a bit of background, deflate is a data encoding format, not a compression algorithm (RFC 1951). The implementation of deflate has a lot of leeway in how clever it wants to be in trying to compress the data. The inflate (decompression) process, on the other hand, is quite well-specified. The compression implementation can do pretty much whatever it wants as long as you get back the original data when you pass it through the standard decompression algorithm. GZip is a wrapper around deflate -- it just adds a small header and a CRC check at the end (RFC 1952). A "ZLib" stream is another kind of wrapper around deflate, adding a small header and footer around the raw deflate data (RFC 1950).

In any case, the .NET Inflate algorithm (decompress data that has been previously compressed) is generally adequate. It follows the algorithm correctly and can decompress anything from any deflate library. (It isn't as smart as it could be when dealing with the three formats raw/zlib/gzip, but I can deal with that.)

On the other hand, the .NET Deflate algorithm (create compressed data from uncompressed data) is terrible. In nearly all cases, it does not compress as well as most other deflate implementations (such as WinZip, InfoZip, or GZip). In some cases, the "compressed" data will be up to 60% larger than the decompressed data, even though a well-written Deflate implementation should be able to limit data growth to less than 1%. The problem is that the .NET compression algorithm always uses a specific method to try to compress the data, even though the deflate file format allows for several different methods so that the best method can be chosen for specific data. This could be fixed in a future .NET framework, but it is still a problem in the current versions.

Doug on October 24, 2008 6:29 AM

programmers who take everything they read on the web at face value are dangerous. Programmers need to carefully evaluate information they read on the web, otherwise they could conceivably cut and paste dangerous code into their own programming environments. This would be just as bad as irresponsibly running as administrator or root any executable they find.

patrick on October 24, 2008 6:30 AM

Don't let the bastards grind you down!

Joe Zack on October 24, 2008 6:34 AM

Jeff, you jumped the shark so hard that my head exploded.

Let's collaborate at some cool project in the future.

Lorenzo on October 24, 2008 6:34 AM

Option A: Retaliate with an equally wasteful post.
Option B: Rise above this obvious failpost and be the bigger man.

So someone posted a blog that was chock full of flame bait, and you bit? Seriously, what is this, high school? Ohhhh its the intarweb, I forgots (sic). You might try just taking a big, long, deep breath, chalking this guy's post up to something you dont agree with, and move on. Might as well just drop a 'your mom' in there somewhere for good measure.

But then I guess you couldnt rally support and get that endorphin kick :P

Andrew Powell on October 24, 2008 6:36 AM

For those who didn't have the opportunity to hear the wisdom of the ages from my Grandma Smith: "The paper holds still, and you can write anything you want on it."

The corollary from Ronald Reagan: "Trust, but verify."

Of course, being foolish takes much less effort...

David Smith on October 24, 2008 6:50 AM

"But telling programmers that they should all practice a more or less professional salesmanship, because they are (apparently) all social misfits, is insulting, and fucking annoying."

Well, if you read it like that then I can see how it would be annoying.

But there's no harm in being able to sell yourself and your ideas to other people and if there's something that can help you with that, then having it brought to one's attention can't be a bad thing, can it?

There's even a logical way that's not particularly insulting and that's this: Marketer's are rarely going to bother to learn how to program, but programmers should have little difficulty in learning how to market (at least enough to get themselves across).

Paul Herzberg on October 24, 2008 6:50 AM

So they think a blog is authoritative? These are the same people who complain about Wikipedia being wrong?

A blog is a blog - it the authors thoughts (and on a good one some informed and interested peoples reactions to those thoughts) and as you say the comments and reaction are usually more interesting than the original blog

Most information from one source I have ever seen has had mistakes in it (some more than others) I too check and verify what I read (read widely, not narrowly)

Untested programming ideas are often wrong (or at least have bugs), bad testing may give you the wrong answer but at least you made an effort, no testing will not tell you anything

I still thing a programmer needs to know a little about marketing - they have to write stuff that people will actually buy (unfortunately) and they have to be able to sell themselves (to an employer, and to their colleagues - to convince them they really do know what they are doing)

Jaster on October 24, 2008 6:50 AM

Lord, Jeff, how flattering it must be to be labeled "dangerous"! It's like when Paul Newman got put on Nixon's "enemies list" -- he said it was one of his proudest achievements!

How amusing that the post about learning to market yourself was you "jumping the shark." I thought that sort of thing was pretty common knowledge amongst people who wanted to be able to work on their own projects someday, rather than punching a timecard for someone else's dream.

If it makes you feel any better, Jeff, even though I am not a professional programmer, I don't always believe what you say anyway! I take it as an interesting opinion, and often disagree with much of it! That's right -- I have an independent opinion and am able to make judgments on my own! I thought you'd be proud -- a reader who doesn't always agree, but doesn't think that you're "dangerous"! Though it must be more fun to be dangerous...

Now I'm off to find a shark to jump of my own...

Shmork on October 24, 2008 6:51 AM

A lot of the comments on this blog post illustrate a real ignorance and lack of understanding about what "marketing" means. Marketing is NOT "sales". I think a lot of the people on here and reddit take offense to being told they need to be better "marketers" because they believe that means they need to be better "salesmen". However, that is an extrememly limited, and non-professional view of what marketing is.

Marketing, as defined by the American Marketing Association is:

"...an organizational function and a set of processes for creating, communicating and delivering value to customers and for managing customer relationships in ways that benefit the organization and its stakeholders." - from Wikipedia.

More precisely, marketing involves "the 4 P's":

- Product - for programmers, this means things such as: Are your skills valuable? What skills do you need to learn to make yourself more valuable? What is my "product advantage" over other programmers?

- Price - I have run into far too many programmers in my day that have no idea what their skills are worth, and so they end up getting paid 50% of what they should be paid. So this part of marketing relates to doing research and studying what the "price" of your skills should be, i.e. - are you charging enough?

- Promotion - this P includes the "sales" part that most people think of when they think of marketing. But it also includes things like establishing relationships, branding, etc. So for a programmer, it means branching outside of your development group at your office and hob-nobbing with folks from HR, Finance, and other groups, and also creating a "brand" for yourself within your firm. For instance, are you the project plan master? Are you the go-to guy for debugging?

- Placement - this is the "where" of marketing. What area are you attempting to distribute your product in? For programmers, this comes down to are you working in a town that has a decent IT industry? Should you relocate? Should you telecommute?

There are of course a dozen other questions you could ask yourself for each of these.

The bottom line is programmers getting all bent out of shape because they're told they should be better marketers smells an awfully lot like a non-technical project manager getting pissed off when he's told he needs to brush up on his computer skills. Get over it or be passed up.

Sam Schutte on October 24, 2008 6:52 AM

So they think a blog is authoritative? These are the same people who complain about Wikipedia being wrong?

A blog is a blog - it the authors thoughts (and on a good one some informed and interested peoples reactions to those thoughts) and as you say the comments and reaction are usually more interesting than the original blog

Most information from one source I have ever seen has had mistakes in it (some more than others) I too check and verify what I read (read widely, not narrowly)

Untested programming ideas are often wrong (or at least have bugs), bad testing may give you the wrong answer but at least you made an effort, no testing will not tell you anything

I still thing a programmer needs to know a little about marketing - they have to write stuff that people will actually buy (unfortunately) and they have to be able to sell themselves (to an employer, and to their colleagues - to convince them they really do know what they are doing)

Jaster on October 24, 2008 6:52 AM

Blogs are just not that important. Especially ones that assert that some other blog is dangerous, i.e., important.

Chris Noe on October 24, 2008 6:55 AM

Jeff,

I agreed with your marketing post completely. Too many times I've seen really sharp, intelligent programmers - WAY MORE TALENTED THAN ME - get their ideas rejected simply because they had no idea how to get their point across in a manner that is going to make upper management or a customer's eyes do anything other than glaze over. Then they get demoralized because "Nobody ever listens".

A colleague once said, "The difference between a good software engineer and a great software engineer is that the latter uses a word processor as well as he does a compiler." And he wasn't just talking about documentation or something inane like that, but about being able to write in a way that marketed ideas so that they would be adopted.

Keep up the good work.

Jim on October 24, 2008 7:03 AM

I have to admit, I love this blog for the simple reason that you don't act like a supreme being of unnatural intellect and power....and don't expect everyone to swallow the pill and accept it as truth.

Keep up the critical thinking point of view, it's refreshing.

Mat on October 24, 2008 7:08 AM

If the content on this site is dangerous and irresponsible then what can we say about the responsibility of Wikipedia content? Or any website? Or any information that is presented to us in any form of media that is biased by the nature of humanity. Pretty sure we need to think for ourselves in all cases... Even old text-books have incorrect content over the passage of time.

JohnM on October 24, 2008 7:12 AM

Jeff, I read you blog precisely because it is the most radically dangerous one I can find. (I used to up the ante by reading it while holding a live bear cub in my lap, but the county came and took away the cub and its mother.)

By the way, blogging has jumped the shark. It's not just you.

--
Dave

Dave C. on October 24, 2008 7:13 AM

Funny. I agreed with the marketing post. Does that make me "dangerous"? Can I put that on my resume?

A. Lloyd Flanagan on October 24, 2008 7:16 AM

Danger is my *middle* online alias.

Pete on October 24, 2008 7:26 AM

Jeff,
Two points:

1. Your post on marketing was spot on. Some may disagree because they might not operate in an environment where this is as obvious. However, I believe that the majority of seasoned programmers would eventually come to the same knowledge: people won't use what they don't know about. And how are people going to know about something unless it is "marketed" to them?

2. You're big these days. When you write something that is read by more than a small group you're just going to have people that disagree with you. There's no way around it. I think perhaps you're a little too worried about what everybody is thinking (ie. writing a whole post defending your last one). As long as you're successful, your detractors are only going to become louder. It isn't necessarily a bad thing...

Anonymous Coward on October 24, 2008 7:26 AM

I rarely comment here, but this article is spot on.

Julio Capote on October 24, 2008 7:31 AM

I've been really surprised at how brutal the comments in Reddit can be. It's sad because the people trying to help, like you, are getting drown out by those with just negative contributions.

A blog isn't a professional industry journal, posts aren't sent through peer review, and there isn't even a process in the industry to valid a fraction of what people are saying. Occasionally you'll get it wrong, or it will be debatable, or not what people want to hear, but that's exactly what is *good* about a blog. It's a discussion, and in our messy industry, it is an important one.

Personally, I've given up on reading all of the negative stuff. If people want to contribute in a positive way, that is great, but if they're just venting their frustrations at the wrong people then it's sad. I remember a book titled "Don't let the turkeys get you down". It's appropriate for this topic.

Paul.

Paul W. Homer on October 24, 2008 7:48 AM

Bravo Jeff!

One of the reasons I have your RSS feed in my shortlist —and since a long time ago— is because you write in your own voice and with your own opinions.

Writing neutrally is an exceptionally reliable way to loose readers, underestimating them has an even more noticable result.

Dirk Stoop on October 24, 2008 7:52 AM

Jeff - Woody Allen said, "If you aren't failing once in awhile, it probably means you're playing it safe." By fair analogy, if you aren't being flamed on the Web once in awhile, it probably means you aren't doing something good. For your critic, flaming is probably a habituated behavior. Here's a project for your to research in your blog: CRT (and LCD?) screens are known to activate the primitive areas of the back brain in preference to the prefrontal cortex, where focus, initiative, positive attitudes, perseverance, etc., are localized. Thus, children and adults can stare blankly at the tube for hours. It would be interesting to find how many hours, on average, flamers spend gazing at their screens, vs. how much PFC activation they show, etc. Not coincidentally, the PFC doesn't become fully activated until age 30. Flamers, I suspect, simply haven't grown up.

George Beinhorn on October 24, 2008 7:57 AM

you dont like it here ? Go somewhere else. Tell your frieds to go somewhere else. Stop bugging us.

Maverick on October 24, 2008 7:58 AM

Marketing is important and Jeff is very good at it. Look at all the negative comments on Reddit about the Marketing related post he made. Apparently, they would like to swallow every idea Jeff has and when they can't, they complain!

I just don't get one thing.. Marketing is to buy your preference on a certain product, but it's you, who is supposed to think before making the choice..Why do you expect Jeff to do that for you?

We code. We market. We buy you to survive. Bear with that!

Saj on October 24, 2008 8:04 AM

I notice that some of your critics ideas aren't going over too well.

Perhaps they need to market them better.

;)

Rich on October 24, 2008 8:06 AM

Jeff,
Having wirtten programs for more than 15 years, I can not see how your last blog post could be considered dangerous by anyone. Unless they believe that playing dungeons and Dragons is social suicide. I must admit that I do enjoy reading your blog because you are a constant source of "brain food". I tend to look at what you write, do some research on topics I am not normally interested in, and then make a decision as to weather I agree with you or not. Many times I disagee. I think that anyone who believes this blog to be dangerous is a mindless drone. How can anyone seriously believe that forcing programmers to think about ay concept is dangerous? Is that not how programming came to be in the first place?

Mike Brown on October 24, 2008 8:13 AM

Women love a dangerous blogger.

Darren Kopp on October 24, 2008 8:23 AM

I read this blog because DailyWTF has gone down hill lately. ;)

Tim on October 24, 2008 8:39 AM

I am an engineer by training and only an occasional programmer, far from an application developer. I do read this blog because it is interesting and informative! I don't believe or embrace all of what I read here. But it often makes me think, and that's a good thing.

Every post I read is modest and often self-effacing. Jeff writes conviction, but the modesty will prevent the blog from being dangerous.

Bad programmers can make anything they read dangerous.

Jason B on October 24, 2008 8:43 AM

There's a reason why people who ignore the heard get ahead in life. Keep it up Jeff. Reminds me of a great poem by Robert Frost:

TWO roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth; 5

Then took the other, as just as fair,
And having perhaps the better claim,
Because it was grassy and wanted wear;
Though as for that the passing there
Had worn them really about the same, 10

And both that morning equally lay
In leaves no step had trodden black.
Oh, I kept the first for another day!
Yet knowing how way leads on to way,
I doubted if I should ever come back. 15

I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I—
I took the one less traveled by,
And that has made all the difference.

Iconoclast on October 24, 2008 8:44 AM

Jeff,

So someone on Reddit said you were dangerous. That's impressive. But you have yet to earn the Florida tag on Fark so keep trying.

I'm jealous.

twmcneil on October 24, 2008 8:45 AM

You can't please all the trolls all the time. Just ignore 'em. I think people are angry because you were successful with SO despite their predictions of failure and accusations of stupidity. They don't like you either because you aren't a champion for LAMP, RoR, or whatever other tech they worship. They don't like you because you have occasionally non-geeky moments. It's OK, the louder they shout, the dumber they look.

To the folks who think Mr. Dangerous is corrupting our programming youth: calm down, it's just another blog, get over yourselves. People without critical thinking skills are probably spending time looking at porn, not reading programming blogs.

Full disclosure: I'm not a MS fan-boy. I prefer the LAMP stack. However, I prefer decent writing, and despise blow hards and religious zealotry which is why I read here.

steve on October 24, 2008 8:45 AM

While I agree that this is "just a blog" and "everything you read on the Internet" should be taken with a grain of salt, this whole discussion only highlights a much deeper problem with the IT industry: it lacks a lot in terms of fundamentals and core education.

That the majority of programmers do not have a solid background and education (not necessarily formal education) in what they are doing leads to the current situation of this blog, wikipedia, forums, etc. being the most "authoritative source" readily available for newbies.

Its hard to imagine say a civil engineer readily believing some informal article in a trade magazine because we assume civil engineers have a much deeper and solid background to stand on...otherwise we wouldnt want them designing our skyscrapers and bridges. Similar with medical doctors (those who are quick to peddle some anecdotally effective cure we tend to call them quacks...or snake oil salesmen..or new age practitioners ;-)).

The biggest value of Jeff's blog for me is not necessarily in the content, but in its ability to gather minds in a discussion. Its like a water cooler... it might be just an ugly dumb appliance but some of the best discussions happen there.

Omen on October 24, 2008 8:52 AM

I especially like the fact that the "the most salient criticism from the reddit discussion" author found swearing the only effective way to communicate his annoyance. Perhaps just a *little* marketing savvy wouldn't be so bad? No?

John Lopez on October 24, 2008 9:01 AM

Jeff,

I program in PHP and JAVA, you blog about .NET. I read your blog because you have short articles on general programming concepts and how they apply to your current project. The best way to learn programming is to have real world examples and situations. Its easier to see a problem or solution when it applies to something tangible. When you get specific about .NET I cannot use those specifics towards my own projects in JAVA, but I can take away some tid bits of programming concepts as discussion points and food for thought.

That is how a blog should be taken. If you are looking for truth, you should read the api and official documentation.

As well, I hardly see an article talking about improving communication skills and the overall ability to convey the worth of your project as dangerous. Now if you were preaching against best practice standards and had a loyal zombie army of programmers, then yes you are dangerous to newbies. But anyone who would view you as dangerous for just expressing an opinion on personality traits, they themselves have to question their expertise.

Cracky J. Squirrel on October 24, 2008 9:06 AM


Your blog was one of the top 100 web sites in the current edition of PC Magazine. Congratulations!

Abdu on October 24, 2008 9:06 AM

Jeff, I thought yesterdays post was spot on. Unfortunately, many of the "Grandma's Boy" people just don't get it.

Mark S. on October 24, 2008 9:07 AM

Very much agreed. If people come here just looking for validation of their already ingrained notions, then why on earth are they even reading your blog?

As for (new?) programmers who might take everything you write as gospel, that sounds like a personal problem to me. Someone forgot to learn how to think critically, and one can only hope they learn (perhaps even from your blog--oh, irony!) before they do too much damage. I'm not holding my breath on that one, but I still fail to see how you are the problem there.

Anyway, thanks for the great work!

Nathaniel on October 24, 2008 9:07 AM

You told people what they need to hear rather than what they wanted to hear.

People will always hate you for that.

However, the other half will be improved for it.

"Reprove not a scorner, lest he hate you: rebuke a wise man, and he will love you. Give instruction to a wise man, and he will be yet wiser."

Thus the opposing responses to yesterdays post.

Practicality on October 24, 2008 9:09 AM

I like how the comments totally prove your point. The fact that people considered the comment so insulting just proves how true it is. I love the way they take offense while at the same time making it perfectly clear that you are right. A little marketing never hurt anyone. Get over it, stop being insulted, and learn to talk to regular people.

Jasmine on October 24, 2008 9:14 AM

"I am a better programmer for having read that blog post. Even though, near as I can tell, it's offering inaccurate advice."

No... you're a better programmer because of what you did after you read it. Most people are not like that... they want the blog itself to do the magic - they don't want to work for it. Those people will never be good programmers anyway and it doesn't matter what blogs they read - they are lacking a basic skill and desire that is required for this job.

Jasmine on October 24, 2008 9:27 AM

The person that was that flamed yesterdays blog post needs to get their keyboard out of their ass and get out to have a broader view of the real world. You are absolutly correct in that every budding developer needs to understand marketing. Almost as moch as they need to understand coding.

Creating the best piece of software or website is nothing more than wasting time unless people know about it and use it. In other words MARKETING! Take 2 sites one great, the other mediocre. Guess which one is going to be successful - the one that ranks in Google. In other words MARKETING.

The really successful developers will be the ones who understand the business of software and the web. I hate to break it to all the young developers out their but it's equally about sales and marketing as it is about software. Read Seth Godin's blog - Learn to be exceptional - it's equally as important as the latest coding blog.

I would hire a marginal developer who understands Marketing over a propeller head wiz kid who only knows code any day of the week.

Keep up the great posts Jeff!!!

Mark on October 24, 2008 9:29 AM

Jeff, You didn't "jump the shark". If the full analogy is taken from the Happy Days origins, it would mean you turned off so many readers your blog is dead. Far from it!

Most good programmers have the ability to think critically and skeptically. You can't be very good at maintenance programming without a little critical/skeptical thinking. Give us readers a little credit!

So, don't worry about jumping sharks. We won't drink all the kool-aid. We'll just mix the metaphors!

Charles on October 24, 2008 9:33 AM

Hey Jeff,
Maybe I'm just off my game today, but I cannot, to save my soul, get your code listed there to compile as is. Does it require VS 2008 and .NET 3.0/3.5 or can it be done unmodified in VS 2005 and .NET 2.0?

Sorry, C# is not my strongest language so I hope no one is put off if the answer to this is blindingly obvious.

Meis on October 24, 2008 9:34 AM

Jeff,

Thanks for writing the "most dangerous programming blog"!

Many of us need some extra danger in our lives, so keep up the good work!

Phil S. on October 24, 2008 9:36 AM

Jeff--

I only read one programming blog- yours. Keep up the great work.

--Rich

Rich on October 24, 2008 9:37 AM

No worries, Jeff - I still love the blog. I first found it when I did a Google Image Search for the "CODING HORROR" emblem from Code Complete a few years back, and have been hooked ever since.

One of the benefits- you got me hooked on Crazy Aaron's Thinking Putty.

Joe Attardi on October 24, 2008 9:41 AM

Jeff,

Not everything you post is "correct" (as if matters of opinion can be "correct" or or "incorrect" at all). That's not why I'm here, and that's not what I like about this blog. If being incorrect means you've jumped the shark, then you've done it many times in the past and will do it many times in the future. I'll still come back anyway.

What I like about this blog, is that you are not afraid to admit that you don't know everything. You are trying to better yourself, through code and through writing. And that learning process means making mistakes, discussion, and forming new opinions. It also means being humble about what you do and do not know.

Programmers are the biggest group of arrogant, know-it-all jerks. It's refreshing to see someone bucking that stereotype. We could all learn a little bit of humility from you in this regard, even if we don't agree on all technical matters.

Anonymous on October 24, 2008 9:49 AM

PEDANTIC COMMENT:
Stopwatch.StartNew() is static, so you'd need to refactor your code a little bit, more than just s/Start/StartNew, if you wanted to use it.

Me, I just created a static class called MeasureDuration, with a static method called Of(), which returns a TimeSpan. Uses a Stopwatch internally, but I don't think the caller should care. Anyway it ends up looking like

var time = MeasureDuration.Of(() => x.DoStuff(123));

John on October 24, 2008 9:49 AM

I personally read Jeff's blog because like him I want to open my mind towards different approaches to solving problems, I also read Jeff's blog because he is humble and knows his shortcomings.

I absolutely do not agree with people who say that bloggers should be held responsible for their post's, if you are looking for easy solutions through blogs and just copy+paste the code that is posted, it is your fault that you believed in it and not the poster's.

Also the "responsibility" was handed over to Jeff involuntarily, people assumed that whatever Jeff would post will be the word of god and the only way to go.

Programming blogs are more like diaries where you put your thoughts out with the added benefit of having a healthy conversation started with like minded people, they are not reference materials to be used by other developers to use blindly.

Amit on October 24, 2008 9:54 AM

Jeff has no responsibility to keep things accurate. I mean, nobody's going to toss him in jail if he claims three is bigger than two. But if he starts publishing garbage, his popular blog will quickly become an unpopular blog. The reason we stick around is because his stuff is generally accurate, and often prompts a rethink of how we do things professionally.

Izzy on October 24, 2008 10:02 AM

Dangerous? I'll admit that your blog can sometimes be random and obscure, and you frequently give a one-sided opinion - but isn't that the definition of a blog?

I have enjoyed your blog for years - keep up the good work!

Mark on October 24, 2008 10:05 AM

I think that the government, who invented the internet, would be outraged to know that Jeff Atwood is not doing our thinking for us. I imagine that God, who invented the government, would be pretty outraged too.

I am going to vote Jeff Atwood out of office. I'm sure that whoever replaces him will be much more interested in the well-being of his audience, and demonstrate it by self-censoring and doing our thinking for us.

Good lord, I sound like a slashdot newbie post desperate for upmods. Sorry. I'm not usually this bad.

Trav on October 24, 2008 10:31 AM

... and I've really been enjoying the fact that this comment thread is still part epistemology and part code review ...

Trav on October 24, 2008 10:34 AM

@Trav "and I've really been enjoying the fact that this comment thread is still part epistemology and part code review ..."

Wholeheartedly agree. I love this blog.

SteveJ on October 24, 2008 10:41 AM

So when you jumped the shark, were you wearing Fonzie's leather jacket? Is there video?


It seems to me that this is all about assumptions.

Jeff: (repeated frequently in different ways) "I write what interests me, on any topic, as long as it relates in some way to programming or the business of programming. Sometimes the posts are focused, _to make a point_, at the expense of even-handedness, but you folks are plenty smart enough to handle it. And if I'm way off in something, I know you'll let me know--I value that. If you want a full picture of the topic in any given post, read the comments."

Some annoyed readers: "This is a programming blog, and as such it's supposed to look the way I think a programming blog should look. It doesn't. So Jeff has lost it for me. Because a lot of programmers think they way I do, he's lost it for all of us--and with this one post that annoys me, he has jumped the shark and is now past it."


People sail right past you telling us exactly what you're trying to do, then get ticked because you've just done exactly what you've told us.

They want a different blog. This isn't the blog they want it to be, they're affronted, and they can't figure out why you don't turn it into the blog they want.

Me, I'm just amused....

El on October 24, 2008 10:45 AM

Look at it this way - if you're in the public spotlight, someone is going to hate you. Just look at the comments present in any of the thousands of forums (fora? The grammar nazi part of me just woke up...) and news sites all over the internet that draw a substantial readership. I can guarantee an overwhelming majority of them are from lamers who post mindless flamebait drivel because it directly conflicts with their narrow viewpoint on the world; if you need an example, just look at any article on ZDNet from Mary Jo Foley.

Point being - whatever criticism you draw, it's because someone read your posts and felt compelled enough to tell other people about it. The ensuing bitch-off is really a discussion about the merits and demerits of what you wrote, which is the entire point of writing it.

Props and peace.

James on October 24, 2008 10:52 AM

lame post in the last year. last blogs were advertisement for stackoverflow (links) and very sporadic. haven't you written a blog entry were you have said the most important thing on writting a blog is constant effort?

you lost & get kicked from my start page.

offler on October 24, 2008 10:54 AM

People, if you are unsatisfied with the product then you should ask for your money back. Er .... never mind.

JB on October 24, 2008 11:04 AM

I'm one of these young inexperienced programmers who is, aparently, in danger.

I have to admit, I'm not really feeling it.
I read Jeff's blog because I respect Jeff's opinion, An opinion which he formulates from his experience.

After reading yesterday's post, I didn't burn all my programming referance books and enrol myself on a marketing course, but now I am aware of a potential problem that I can put my own thoughts into.

I'm glad to see that Jeff is unphased by such comments against him, as I like to hear Jeff's opinion but if he worries about what he is saying we will never hear his opinion, just what he feels safe talking about.

Chris on October 24, 2008 11:08 AM

Sometimes Jeff is full of baloney. Sometimes Jeff says something interesting. Such is the nature of reading blogs on the internet.

If you read blogs because you want people to provide the last word on programming topics, you are a novice mouthbreathing WTF generator. Read blogs, process the information, and test it if it seems interesting.

Sitten Spynne on October 24, 2008 11:27 AM

This is a dangerous idea, "Think for yourself". I think I'd rather let "Reddit" do the thinking for me and just come here and flame you for yet another dangerous blog post. ;)

Haacked on October 24, 2008 11:28 AM

It has taken me 8 years as a professional developer to learn the hard way that marketing is extremely relevant to my happiness as a developer.

Developers tend to have a severe blind spot when it comes to marketing. The blind spot persists despite painful evidence to the contrary because of strong idealistic emotions that tell us that marketing is evil and the brilliance of our work ought to manifest itself entirely through our code. To suggest otherwise makes us very angry. But I'm here to tell you that it is 100% true.

If you want to continue working on stuff you care passionately about, you have to sustain the management and team mindshare that sustains your ability to continue working on it without being undermined.

If you and a team member have a difference of technical opinion or a different direction in mind for the product, your ability to market (not just sufficiently explain) your viewpoint is crucial.

In my opinion, understanding the importance of marketing (and other soft skills) is a sign of maturity in a developer.

AC on October 24, 2008 11:37 AM

The nature of your blog has changed, as all do.

But you should really blog about the art of building a readership, learning how to leverage that with an understanding of how SEO, self-linking, and *MOST* importantly -- posting topics that appear contraversial so that people can't wait to get their 2 cents in.

You've become something of an internet whore (will this get filtered)?

Pardeep on October 24, 2008 11:38 AM

This blog is one of the best sources of development wisdom I have ever seen. That doesn't mean I always agree with everything. It means that the blog reflects many of the non-obvious lessons I've learned -- the hard way -- over decades of programming. It means I'm always learning new things from it, even with those decades of experience. It means I recognize that Jeff GETS IT, unlike so many programmers, who are full of opinions and religiosity, but generally clueless about anything deeper than the zits on their nose -- ignorant of their own ignorance, in other words.

I'd list some examples here of my fairly broad and deep experience since 1975, to lend some credence to this opinion, but the little pinheads that are determined to diss Jeff wouldn't believe it anyway (or understand the significance).

Keep up the good work, Jeff -- you're doing it EXACTLY RIGHT.


Jeff R. on October 24, 2008 11:54 AM

I felt this post (and in fact, your followup comments) came off as more than a little defensive.

That was all I had to add today.

Justice~! on October 24, 2008 11:54 AM

"Many readers will take what you write as the last word in programming. You ought to write more responsibly."

In my opinion that is the same as calling the post "dangerous." As Jeff said, "you're implying the audience is too dumb or inept to read critically."

A couple of points to commenters like this...
1) The readers of this blog are people (JUST. LIKE. YOU.)
2) Those people aren't stupid

JT on October 24, 2008 12:08 PM

Criticism of the marketing post aside, I do like this blog and it's comment community and wouldn't comment from time to time if I didn't think it was worth adding to.

Keep up the good!

Clark on October 24, 2008 12:12 PM

You know, if it were me (and it has been) I'd just sigh and move on.

To put it bluntly, the more popular your blog, the more of this you will see. As my blog has increased in popularity, I've been amazed at how childish many people are.

It's your blog, post what you want.

Dave on October 24, 2008 12:31 PM

What the hell are you doing reading Reddit or any other hip fad websites? Sheez. Just keep writing, I will keep reading and make what I want out of it.

Thank you for being you.

John A. Davis on October 24, 2008 12:50 PM

> I felt this post (and in fact, your followup comments) came off as more than a little defensive.

Defensive? Why do you say I'm defensive? I'm not defensive! You're defensive!

Jeff Atwood on October 24, 2008 1:06 PM

Wow, a lot of fanboys that couldn't wait to bend over and kiss Jeff's ass!

(Will I get a lot of replies to that? Does that make me dangerous? Does it make me a great blogger because I can piss people off?! By the way, I've left comments kissing his ass when *I* think he's right.)

Jeff's seems like a pretty good guys. He often rights interesting stuff. Some of it turns me off but I just ignore it. I would honestly prefer if he stuck to the business of programming (his forte on the blog) rather than the business of being a programmer (his views can not be applicable to everyone's situation). In his definition, I guess I am not a "programmer" because I do not have interest in "marketing". Interesting word "marketing" because it can mean a lot of different things to a lot of different people. I grokked the meaning of his post, but soured on his ability as a writer in choosing better language. It would have been much less inflammatory (yes, Jeff could be accused of using the blog as his own flamebait) if he talked about communication, or just referred to it as "selling your ideas". Personally, I have seen way to much "marketing" that is highly political and destructive.

Keep up the good work Jeff.

IAmNotAFanboy on October 24, 2008 1:08 PM

I think I'll put this disclaimer on my future software products: I am not responsible for this software. Jeff Atwood, Steve Yegge, and Joel Spolsky are. As well as Mads Kristensen and various Reddit commentors.

This blog is a resource, and last I checked, Steve Atwood isn't writing my code for me. That means that I am responsible for the information I get from this blog and how I use it. That means that before I use or adopt a recommended approach, I should have invested some time to understanding the recommended approach, why it was used, similarities and differences between my situation and his, correctness, and so on. Many times, one or more of these aspects aren't clear in the article, but reader comments (and writer responses) are especially useful for more detailed understanding.

After all, God said, "Thou shalt not use goto statements." So, better leave it at that, right?

Doug B on October 24, 2008 1:20 PM

I frequently read your blog and I think you do well to write, because you're good at it. But I don't think devoting whole blog entries to defend previous ones in such a wise choise. It doesn't really have any point. You write what you think, so if you document it properly the first time, there's no point in returning to it again just because some people voiced their disagreement. Some will always disagree, and be loud about it. That's internet for ya.

mikeman on October 24, 2008 2:09 PM

As a software development manager, I find the whole idea of my guys turning to a single guru and blindly following his/her advice ridiculous. I don't want automatons writing code; I want intelligent, thoughtful, and broadly educated people writing code.

People. Well-rounded ones at that. I have no desire to hire people who cannot market their ideas to teammates and/or our projects to customers.

We can quibble as much as we want over the definition of marketing, but I don't think that was the goal of the referenced post. The imaginary D&D programmer that he rolled was good at programming, no doubt, but he could also do all of the tasks that help teams and individuals function.

I am of the mind that even the Superstar Programmer pundits would agree that Superstars don't get to the Ivory Tower of Awesomeness by raw coding power alone. I also think they would say that you cannot teach Superstar Programming Skills to a marketer, but you can teach marketing skills to the Superstars.

The rest of us just become managers ...

gemils on October 24, 2008 2:28 PM

Welcome back, Jeff. I was starting to get concerned after going several days without a new post here. And I agree with your point -- I rarely agree with 100% with every blog that I browser regularly, yours included.

MoffDub on October 24, 2008 2:32 PM

Eh, I'm a 'nothing' on the grand scale of computer programmers. I've been working as a full-time developer for about 2.5 years now. I'm not particularly smart or gifted and while I'd love to spend lots of free time learning more about computer programming; I'm at a stage in my life where it takes a backseat to other things. Having said that, I don't have kids or a wife, so I don't see that changing anytime soon.

So, take my opinion with a grain of salt...

From what I've seen and learned as a developer (as an IT Consultant specifically) is that appearance REALLY is important. In my past job, dealing with clients, as well as some on-the-side contract work I've done the people who write my check don't understand computers. They certainly don't understand programming. When a client requests a feature they really have no idea or understanding of the scope of that change.

When people don't understand *what* you do and can't very well measure how well you do it (Spagetti code in 4 hours that works or excellent code in 5 hours - what looks better to a client who doesn't know anything about development and who pays you $100 an hour. Hint, they'd rather have it done in 4 - most of them anyway).

When I read the post about marketing, it reminded me of my consulting days. Days when the whole team (five of us, staffed at the corporate headquarters of a large retail chain) all had to show up 25 minutes early - so that, even if there was traffic and we were running 20 minutes late - we'd make it on time. Days when even if you worked through lunch, you couldn't leave until 5.

I was a fresh out of college kid at the time and I didn't understand why it mattered. I'll code just as good from 7:30am - 5:00pm as I would from 8:30am-6:30pm. But the fact of it is, being there early and never leaving early left a real nice impression on all the workers.

That's just one tiny example, but there was a WHOLE LOT more to being a good consultant than doing a great job writing code. If the customer understood code - they probably wouldn't have hired us. That meant helping the client understand how easy or how hard something was. That meant, having visibility to the client. Interacting with the client. Making them think you were generally a nice, honest person who wasn't going to screw them over. If you could go even a little further and seem friendly, well, that was all the better.

Looking back, I didn't see why it should matter...and maybe for some of the amazing hot-shot programmers who land jobs at Google on their amazing technical merit - it doesn't. But for a guy like me...well...I can use all the help I can get.

RobDude on October 24, 2008 2:35 PM

I'm a 16-year-old developer, and I have cited your posts in the past to some of my ex-workmates.

oops.

Andrew Chase on October 24, 2008 2:44 PM

I love reading your blog, and I'm a young, relatively inexperienced developer. I don't agree with everything, and sometimes I take things at face value. If I screw up using an idea from here, I won't blame you. I appreciate the nuggets of thought you give me to chew on. Keep up the good work.

JJ on October 24, 2008 3:04 PM

I think that the number of reponses to comments Jeff has made says a lot about what he is trying to get across. You learn by accepting (constructive) criticism and not by bicker.

I've not always agreed with what Jeff has posted, but I read and try to understand HIS viewpoint first before I interject mine. I think that by doing so then, and only then, can you really have ground to counter his opinions.

It's kinda like the current election; does Obama have a better platform than McCain, or vice versa? Which actually has a majority of beliefs that agree with yours? You can take this same principle and apply it to Jeff's posts and the comments to his posts. Once you gather those facts and start to compile them into a solid grounding into how to define YOUR principles and beliefs, you become a better programmer, and possibly a better person overall.

When you read one of his posts then dig into the comments, do you find that you start to understand the overall post better? Even coming up with counterpoints that you feel actually have merit? Then Jeff has done what he has set out to do. MAKE YOU THINK!

There's a particular phrase that isn't just for a particular race, but for all of mankind: "A mind is a terrible thing to waste." Be it a programmer or otherwise, don't just focus on one thing and one thing only. Look at the big picture and see what there is to see from someone else's perspective.

Thanks for all the (mis)information, Jeff! You certainly have made me think more times than I can remember!

John Baughman on October 24, 2008 3:10 PM

I think it's a very safe rule to not take any Redditor Microsoft-related comments that seriously. That group is serially against all things MS, as evidenced by the consistent anti-Atwood comments there and bigotry against MS technologies and developers. It's just a foregone conclusion there. The truth is, Jeff could say anything, and they'd find some criticism to make. It's part of their culture and identity. Even responding to them gives them too much credit. To wit, don't reward bad behavior.

I don't take much truck with generalizing about an entire population of users, but the evidence is overwhelming. While Reddit users are comparatively one the smarter groups on the web, they are also the most guilty of deep-seated bias and rampant group-think.

Of course this blog isn't dangerous to programmers. The supposition is as stupid as it is preposterous. Not only is it not a very technical blog, but it's also just that - a blog. And I disagree that Atwood has a larger responsibility than any other blogger. The onus falls to each individual developer to analyze information sources themselves.

T. Morgan on October 24, 2008 3:22 PM


Hi.


I wanted to sign up for StackOverflow but couldn't use my (probably still) existing Yahoo OpenID.

Then I wanted to leave a suggestion for improving a certain aspect of the site, but couldn't because I wasn't signed in.

You might want to consider letting users sign up with a good old fashioned username & password -combo too.

OpenID just isn't all that appealing.

Someone on October 24, 2008 3:23 PM

I agree critical thinking should be applied to everything you read, especially if it is online. I also agree that is is a reasonable expectation to have for almost everyone.

However experience and knowlege about a topic make a huge difference in how effectively someone can use their criticial thinking skills to form their own opinions on a particular issue.

A entry level programmer might not have the necessary background to see the drawbacks of a more advanced developer's approach, not because they don't evaluate it critically, but because they don't have suffecient context to have anything other than a "trust-based" conclusion.

This is isn't necessarily bad, it's part of human development.
I think it does mean that who offer advice have to be aware that those less advanced may be have to form some of their opinions in using little more than technotrust, simply because they haven't learned more.

N. Owens on October 24, 2008 3:52 PM

Your writing is excellent Jeff. You stir thought into the minds of people who are too comfortable at being as good as they already are.

Of course a good reader should take what is published on the internet with a grain of salt, and to me that is a very good defense against the slander that people will label you with.

I always get something out of your articles whether or not I agree with them!

Keep it up dude.

genghis on October 24, 2008 3:54 PM

This is a great blog post. I know that for sure, when I've disagreed with you, I've learned something for myself by figuring out exactly what I disagreed with you on, or how to express it.

-Max

Max Kanat-Alexander on October 24, 2008 3:56 PM

Disagreement is the only way to learn anything! Or am I missing something? The only times I learn -- about programming or anything else -- are when my opinions about what's true or possible are challenged, changed or expanded. Even expansion is a form of disagreement.

If I read something and just accept it as true without trying to poke holes in it then I learn nothing -- I'm just being lazy.

The point made above about experienced vs. novice programmers is interesting, but I don't think it gives enough credit to beginning developers -- even novices must take responsibility for evaluating different advice and techniques. A good way to do this is to absorb and synthesize information from a variety of sources. Sure, experience counts -- but I have more often seen "experienced" coders doing things in weird, wonky ways than "inexperienced" ones. Sometimes one's clutter of experience must be flushed to see a problem anew.

-Matt

Matt Perry on October 24, 2008 5:12 PM

Marketing is either promoting fear or sex to the appropriate audience.

Programmer Audience:
Fear - that other code would never work
Sex - look at this class hierarchy

Manager Audience:
Fear - that other code will take 4 weeks to develop/fix
Sex - look at the expected low TR rate because of this

Customer Audience:
Fear - that other code is unreliable and expensive
Sex - this code is reliable and cheap

Okay, so do I get a marketing_skill++? ... didn't think so. This article appears to be marketing something too to someone.

charlie on October 24, 2008 5:13 PM

Jeff,

You write your thoughts and your believes, and I thank you for that!

In the land of the blind, the one-eyed man is king -- Desiderius Erasmus

I am the blind. You, Spolsky, and others are kings to me.

I am smart enough to understand your vision is not perfect, and may stumble and fall. But I am sure as hell that I am better off following your advice that I would be on my own.

If you tell me to turn right, I will. I will also extend my arms to fell any obstacles I may encounter.

Let these fools complain about your lack of a perfect vision. But please, I beg you: Do not let them take your advice away from me!

I do not hold your responsible for my safety. I just thank your kindness.

...and yet, I am stubborn enough to sometimes go in the opposite direction.

Ricardo C on October 24, 2008 6:15 PM

@Niyaz PK

Programmers, of all people, should never take anyone's word for everything. We deal with wrong/misleading/incomplete information all the time; why would we ever take something we read on the net at face value?

Jeff writes about his experiences, he makes no guarantees that his interpretation of what happened in his experiences are 100% correct; he simply talks about them so that you can be that much further ahead when you encounter the same experience.

Anyway, yayyyyyyy Jeff is posting regularly again!

Gio on October 24, 2008 6:48 PM

What's with this crap about Jeff having any "responsibility" to others? The only person he's responsible to with this blog is him self. We're all just along for the ride.

Hell, what happened to the reader's personal responsibility to discern and question what they read?

Frankly it’s hilarious to see comments pushing the former on a post advocating the latter.

Keep it up Jeff. The links with-in your posts alone make you a worthwhile read.

Lucas Goodwin on October 24, 2008 7:31 PM

I don't think you should be using the StopWatch class to measure time.
It has a major flaw when being used on a PC with multiple cpu's.
You should use Process.TotalProcessorTime.

http://kristofverbiest.blogspot.com/2008/10/beware-of-stopwatch.html

Donny V. on October 24, 2008 8:22 PM

It's funny. I've read your blog for years and I *often* disagree with you, but yesterday's post was very good. In a lot of ways, it's just a different spin on "don't go dark".

I think the issue for some people is that they can't pull their head far enough out of their code to realize that the coding isn't nearly as important as the social aspects around it.

But the good thing is that those people aren't all that competitive in the real world.

JPLemme on October 24, 2008 8:28 PM

@ Ricardo C on October 24, 2008 06:15 PM

Excellent put!

Bjrn on October 24, 2008 8:29 PM

Do any one of those trolls on reddit have a blog? Why don't we all have a look at what they've written, and try to pick apart every thing that they've ever written. Forget about those guys - they're absolutely pathetic in my opinion...

Matt on October 24, 2008 10:22 PM

Well, the flamebait got a big whopper for sure! :)

anonymous on October 24, 2008 11:43 PM

Jeff,
Freedom of speech is good.
Freedom of thought is more useful.
Freedom to ignore is most apt.

Let me put it in his language and style:
"Naysayers have always held the distinction of being the most dangerous users of the WWW, in that some young or aspiring developers often actually listen to some of their "warnings", but now they've somehow managed to snag the achievement of becoming the most repulsive users as well.

To put it in more frank terms Mr.Naysayer: What you've just written is one of the most blatantly vitriolic things we have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational justification. Everyone in this room is now dumber for having read your comment. I award you no points, and may God have mercy on your soul."

There, fixed it for ya! :-P

I've had my share of disruptions with these people.
It is possible that they produce no content of use on the web or outside it.
It is possible that they do not contribute to any technical wikis.
It is possible that they do not distribute opensource or freeware programs.
It is possible that they do not write positive inspirational blogs.
It is possible that they do not write opensource or freeware code.
It is possible that they do not donate to good causes or opensource projects.
It is possible that they dont even play word games to help feed poor people for free.
Well, I speak only when I can say with proof that I do these things.
Mr. Naysayer, do you do any of the above?
If yes, do you do those by your own willing choice?

Even more dangerous are naysayers in positions of power.
Best strategy: Ignore most of them.
However, practcially, you cannot ignore trolls or naysayers in the boss/chief-stupidity-officer/chief-manipulation-officer category.

JoeBelowAverage on October 24, 2008 11:57 PM

Regarding your code blurb, did it occur to you to pub deflate before gzip? the results may surprise you. One of the reasons deflate seems faster is that the data is already cached from the gzip pass.
This is hardly the right way to conduct scientific experiments. shame on you.

Shy on October 25, 2008 1:51 AM

oh btw, RobDude, +1.

JoeBelowAverage on October 25, 2008 3:01 AM

The most common theme in your blog postings since I've started reading them is that you always enourage a developer to think on it's own. Test the code mentioned in blogpostings (wether it is coding horror or any other blog). Never just use code posted on the internet but think about what the code is doing and preferably test the applicability of the posting / code to you're own programming problem.

So I wonder how someone can declare you're blog postings 'dangerous' if they don't consider the advice given by you in most of you're postings.

Just my two cents

RobDin on October 25, 2008 3:09 AM

If you knew anything about marketing, you'd start calling this, "the most dangerous programming blog."

roger on October 25, 2008 5:20 AM

> "What you've just written is one of the most insanely idiotic things I have ever heard"

Once again, I think someone has fallen into the same usual bug: Trying to undestand a concept by reading words literally.

Jeff said "The One Thing Every Software Engineer Should Know", he explained it was marketing, and someone understood: Jeff says there is *no other" important thing to know beyond marketing!!!!

We all know this man was not able to (or didn't want to) grasp the wider meaning of the phrase. If I say "This box is black", many of us will understand it is "very dark grey", because "black" doesn't exist as such in our universe. However we accept "This box is black" as a valid phrase without telling "You are idiot, dumb, etc". We must read far from the literal meaning of words... It's so strange to recall such a well known truth...

Just for fun, look at these 2 words in his phase: "What you've just WRITTEN is one of the most insanely idiotic things I have ever HEARD". If we play his game of literally reading, how can be said you *heard* something that was *written*? He should apply his own rules (discovering he is also idiot!), and start to write/speak properly, if he wants other people as refined as him to understand. The rest (we almost all) will understand anyway, without insulting anyone, as our mind seems to be more flexible.

When the wise man points the moon, the dumb man looks at his finger. It will always happen, sadly.

oscar on October 25, 2008 5:39 AM

Responding to people who blog bad things about you? Your ego may be spirling out of control. Keep up the good work. =)

Patrick on October 25, 2008 8:44 AM

Jeff,

Just wanted to say I love reading your posts. Ignore people who take potshots at you. I am sure for every person who hates / criticizes your blog there are at least 10 people who love it. So keep up the good work.

BTW: "hear it spoken" for the captcha is a nice touch.

Anon on October 25, 2008 8:58 AM

Since you didn't provide your implementation of your compress / decompress methods, I wrote my own. They are probably slightly different as I don't want to time things like creating the byte array from the file - after all, we're trying to measure compression/decompression, not System.IO.

I used this blog post's HTML for input, and get:
deflate gzip delta
compress 13962.66667 15211.33333 -0.089428953
decompress 5815.333333 6952 -0.195460277

No where near 40%, but no where near the identical numbers you put up, either. Would you care to share the complete program so other people could run it and see what results they get?

Donny V.:
The issue you point out in Stopwatch in reality only hits few systems. Unless on your specific machine you get strange results from Stopwatch or QueryPerformanceCounter (which Stopwatch is just a wrapper for) it's perfectly reliable.

Bill Wert on October 25, 2008 9:40 AM

When we're misunderstanding each another: I like being viewed as dangerous!
So fellow Coding Horror reader's: You're dangerous!!!

Marko on October 25, 2008 10:48 AM

Jeff, once you get to a certain level of authority no matter what you write, it is widely interpreted in multiple ways. I think your message that readers should look at things critically has a lot of merit. I've seen so many times people blindly copying code snippets from internet and using them without understanding what they actually are doing. It would have save a lot of trouble if they first used their brains a bit :)

Keep up with the posts Jeff, even though I see you like to be controversial and in some cases just spread a lot of manure. Fair enough! Nobody is perfect sometimes your blogs have some pearls of wisdom in them, sometimes not.

Anders on October 25, 2008 11:29 AM

Your posts always rock (stackoverflow-induced silence notwithstanding.) Keep up the good work and /ignore "t3h c0derZ!!"

Gavin on October 25, 2008 12:02 PM

Maybe you need a disclaimer on the bottom of each post.

"Warning: Reading this blogpost might be dangerous and will make you dumber than you already are."

igge on October 25, 2008 1:33 PM

I read many blogs, and reference sites in the course of trying to learn various aspects of software development, and I don't take ANY as being 100% accurate. (Not even MSDN, and similar)
I look for ideas and information to try out and more often than not, I find the information either not suitable, inaccurate to my situation, or irrelevant. BUT occasionally I find things that get me thinking and I'll try things out for myself, get a different view on the situation!

ProgramIT on October 25, 2008 2:31 PM

I'm terribly confused here. Was this entire post some sort of proof that we should never trust what we read? Did you deliberately try to defame another blog in order to prove a point, that your readers are smarter than other blogs' readers?

I, for one, will not be returning here.

Will on October 25, 2008 3:41 PM

> Would you care to share the complete program so other people could run it and see what results they get?

Sure thing, here you go. Visual Studio 2008, C# project:

http://www.codinghorror.com/blog/files/deflate-vs-gzip-vs2008-solution.zip

> Did you deliberately try to defame another blog in order to prove a point, that your readers are smarter than other blogs' readers?

Um.. no? Did you read the same blog post I wrote, above?

http://www.codinghorror.com/blog/archives/000549.html

Jeff Atwood on October 25, 2008 11:20 PM

This post, with the graphs, is just as ridiculous as the original mentioned post.
gzip is deflage with a header and a checksum footer. period. end of discussion. Only extra overhead of gzip is the time to generate the header and calculate the CRC32 checksum. No fancy benchmarks and graphs necessary...

Tony BenBrahim on October 26, 2008 1:55 AM

Jeff - long time reader, first time caller.

When I read the post in question, it made me think of my current position. One of our products is no longer as competitive in its niche market as it once was. You can be the world's best application developer, but if you can't get your program installed on someone else's computer, what's the point?

Chuck on October 26, 2008 4:33 AM

Unfortunately, you also implicitly promote 'leaping to wrong conclusions.'

Witness where you assume SQL Server engineers know less about databases than you.

You write, "I can't tell exactly what he's compressing in his benchmark." You, sir, are incompetent. Not only is it in the source code, you didn't even read the (only ten, prior to your pingback) comments on that blog! (It's 5000 byte array of clean memory, for what it's worth.)

(It beggars my mind that you seriously considered a blog post where the third comment is "Are you serious? You're writing 1000 times 1000 zeros and call this a benchmark for compression methods?" Sheesh, "Mads Kristensen" is as bad as you - and notice that Mads doesn't disagree with 'bfg' when this is pointed out?)

Yes, you are a salesman; blustering through and portraying yourself as having all the answers and speaking authoratitively - even when you don't actually know. It's what sales people do - and it's why they don't get any respect from engineers.

Amused on October 26, 2008 5:27 PM

Hey Jeff, would just like to say that if it wasn't for your 'dangerous' blog that I started reading three years ago, I would never be choosing to study Computer Science at University; I would never have got my first job working as a small network admin; I would never have landed a years work in a junior position at a local web-dev company.

Coming to blogs looking for empirical truth seems to me flawed from the outset. But if you come to blogs looking for ideas, looking for topics to make you think and experiment and appreciate the numerous facets of the world of programming... well, I hardly think you could classify Coding Horror as 'dangerous'.

Many thanks, and keep up the good work!

Peter Hughes on October 27, 2008 1:36 AM

One of my favorite comments in the Reddit thread:

"This is Computer Science damn it, not Computer Philosophy." :)

Tim on October 27, 2008 2:04 AM


Well, I am happy and glad there are salespeople being able to market my products.

I assume those who doesn't respect salespeople are the one doing the selling of their products/skills.

Keneth on October 27, 2008 6:51 AM

Hello!

I am a bit new to C# so I was wondering what 'this' does in the following line:

public static long Time(this Stopwatch sw, Action action, int iterations)

VS2005 thinks it's an error, in fact.

All the other fuss... I care not so much. I find almost any post on here at least interesting, and as you mention yourself, they often give me incentive to try out things myself, to double-check facts and give me ideas that go beyond what I could have thought of myself. The comments are normally great as well... so keep up the good work!

Bucket on October 27, 2008 7:22 AM

-- Human being's make mistakes --

*doh*

What on earth goes through your head that you would go and read a blog like it's the word of god. Last I checked... Jeff neither claimed his god, nor acted like it. And neither do I :D

TrXtR on October 27, 2008 9:30 AM

Bucket
It is new for C# 3.0.

Jeff
Saying that something is 108% faster implies that it is over twice as fast. So, if GZip took 425(ish)ms, then Deflate would take 178ms.

Shawn on October 27, 2008 9:43 AM

Keep jumping that shark Jeff.

Your mistake was you did not "pls give dem teh codez", could not copy paste marketing stuffzors.

Reddit can be taken just as seriously as digg and 4chan

seanb on October 27, 2008 1:58 PM

"I, for one, will not be returning here." - Will

And the sun fell from the sky and mountains of fire rose from the earth...

Ash on October 27, 2008 8:28 PM

The percentages table doesn't seem to match the chart...

If Deflate is over 100% faster, I'd expect the graph to show bars half the size.

Gunther on October 27, 2008 8:31 PM

Is "dangerous" supposed to be a bad thing?

According to the best, albeit unofficial, maxim of marketing and popularity: "Any publicity is 'good' publicity" - I'd say the writer who assigned the "Dangerous" moniker makes you (and your blog) a "Must Read!"

Keep up the good work.

SammyB on October 28, 2008 5:38 AM

Jeff said:

"That is a little shocking when you consider that GZip is simply Deflate plus a checksum and header/footer! (You can download the source code for this test and try it yourself.)"

Checksumming is NOT cheap - checksum algorithms can be cheap but the process involves visiting every byte/word in a payload to calculate a checksum.

For a cheap checksum algorithm (e.g. CRC32), the hit is almost the same as a memory copy (which from my experience is anywhere from 5% to 20% hit).

For instance, all your IP packets you send via UDP/TCP need to have checksum computed by the OS/kernel - where the kernel offloads this work to your Network Card.


Kashif on October 28, 2008 6:02 AM

I have a bit of a problem with your use of percentages. I don't think that you can say that something is "150% faster" than something else, unless some kind of time travel is involved.

Not A Mathematician on October 28, 2008 8:50 PM

@igge

I think you mean the top of the post - most of the dumb ones won't read it to the end...

HB on October 29, 2008 6:22 AM

"I have a bit of a problem with your use of percentages. I don't think that you can say that something is "150% faster" than something else, unless some kind of time travel is involved.

Not A Mathematician on October 28, 2008 08:50 PM "

You really need to read this wikipedia article ao you can understand more how percentages work.
http://en.wikipedia.org/wiki/Percent
A 150% increase is totally valid. 3 *(1+1.50) = 7.5

o.s. on October 29, 2008 7:02 AM

@o.s.

Perhaps if I put it this way...

Task A takes 10 seconds. 150% of A is 15 seconds.

If B is "150% slower" than A then it will take 10 + 15 = 25 seconds.

If B is "150% faster" than A then it will take 10 - 15 = -5 seconds!

Not A Mathematician on October 29, 2008 4:37 PM

Wow... you really ruffled some feathers with this.

Well done. You got your readers thinking...

Jonathan on October 30, 2008 1:03 AM

Didn't Kathy Sierra run this "you're not a programmer - you're a marketer" thing about a year ago?

Andrew on October 30, 2008 4:38 AM

@Not A Mathematician
Oh man you didn't read the Wikipedia link did you? Come on all those calculations you presented are wrong based on what Jeff was describing in the blog.
When someone says "150% faster" they mean a 150% increase. How do you calculate a 150% increase? x * (1 + x%/100)
x = the number you wish to increase
1 = represents 100% of the number to be increased.
x% = this is the percent increase(in this case 150). Dividing it by 100 converts it to decimal.
When you said "Task A takes 10 seconds. 150% of A is 15 seconds."
You actually did this 10 * 1.5 = 15
All you've done here is multliply 10 times 150%(converted to decimal). This IS NOT a 150% increase.
Your calculation should instead look like:
10 * (1 + 150/100) = 25
Wondering about a percent decrease? x * (1 - x%/100)

o.s. on October 30, 2008 8:28 AM

Oops. Not A Mathimatician looks like you were right. On your final calculation a -5 doesn't make since for units measured in time. One of the first statements in your comment didn't seem to tie in with a percent decrease my fault. I tried for several diffent numbers and all of them lead to negative results so a 150 percent increase can work but 150 percent decrease doesn't seem right for time.

o.s. on October 30, 2008 8:57 AM

Oops no. 2 "percent faster" should've been percent decrease.

o.s. on October 30, 2008 9:05 AM

Amused writes:
"You write, "I can't tell exactly what he's compressing in his benchmark." You, sir, are incompetent. Not only is it in the source code, you didn't even read the (only ten, prior to your pingback) comments on that blog! (It's 5000 byte array of clean memory, for what it's worth.)

(It beggars my mind that you seriously considered a blog post where the third comment is "Are you serious? You're writing 1000 times 1000 zeros and call this a benchmark for compression methods?" Sheesh, "Mads Kristensen" is as bad as you - and notice that Mads doesn't disagree with 'bfg' when this is pointed out?)

Yes, you are a salesman; blustering through and portraying yourself as having all the answers and speaking authoratitively - even when you don't actually know. It's what sales people do - and it's why they don't get any respect from engineers."

Amused +1.

Also, when you "fixed" your C# code (except for the remaining bug :), you left the numbers in the following table alone. Grep for "108%" and "137%" in the post, and then fix them. Or leave them; it's pretty obvious you don't care about correctness anymore (ever since you discovered Marketing).

Anonymous Cowherd on October 30, 2008 12:24 PM

How could this blog be "the most dangerous programming blog" I think idiot ideas must be called just like that IDIOT. A blog is essentially an open book to new ideas the richest part of this blog is that Jeff generates ideas and the participation of visitors contributes to generate new knowledge, knowledge will never be dangerous in our profession.

If more people try to emulate Jeff work trying to share knowledge and honest opinions, creating communities, etc, we would have a better software and better people to making software.

Keep on the right track Jeff "Danger" Atwood

Rulas on October 30, 2008 1:48 PM

@Not A Mathmatician

Aha! I think I found why the phrase "150% faster" is so confusing to use. Its just a matter of the terminology used to report the comparision being imprecise.

"How much faster is Deflate than GZip?

Core 2 Duo 3.5 Ghz Core 2 Quad 1.86 Ghz Athlon X2 2.1 Ghz
Compress 108% faster 108% faster 150% faster
Decompress 115% faster 117% faster 137% faster"

Since we now know that any percent decrease greater than 100% to be impossible for time units it makes more since to flip the terms to use "slower" rather than "faster". Therefore:
slower = percent increase in time units
faster = percent decrease in time units

So if we say Gzip is 150% "slower" than Deflate then the mathematics make since and we get rid of the negative results.


o.s. on October 30, 2008 2:24 PM

Oop^2: "since" => "sense" :-)

o.s. on October 30, 2008 2:28 PM

@o.s.

Exactly!

I'm happy with Jeff's maths. I was just objecting to his careless use of terminology.

It's not just him of course, you see this kind of mistake with percentages a lot.

Not A Mathematician on October 30, 2008 8:28 PM

I'm so living on the edge right now, reading your posts and all.
Awesome!

n3wjack on November 6, 2008 4:45 AM

I completely disagree Niyaz. A blog is an author expressing his or her thoughts/ideas, nothing else. If readers take what is written on a blog for a fact, well frankly that is not the authors fault.

It's as with every other type of media. Don't believe it just because you read/hear it. Think for yourself.

furkan on November 7, 2008 7:38 PM

you people that hang around in programming blogs like these are probably the most boring programmers i've ever read from! [i was reading your text if you don't understand] you obviously program boring programs with boring code that do boring things. . . .ha the boring programmers of this world, you are the "popular" kind of programmers, all you do is sit around probably coding pranks, [if you even know how to do that] and mock people who don't know how to code, whereas we the real programmers. that sit at PCs all day and learn about new software make better versions, and most probably make programmers like you think. . ."FUCK! wher the fuck does this guy get these ideas from?!" cos you don't really understand the code even though you've learnt it, and you never thought a program like that could be made. all you people do is your work! like people filling gaps in the industry just code a program and get paid! why don't you guys code your own compressing program and see whos one works the best, then you guys can try reverse searching my IP and we'll play a bit of hack-n-crack.

don't reply cos i won't be back on this sad site ever again.
[i bet you stupid ass fucks are still going to reply]

mr-smiles on November 13, 2008 4:03 AM

Keep posting your opinion Jeff. That's all that matter.

I can't believe that someone in the 21 century labels information as "dangerous"... if you see flawed logic, you counter it with arguments, not with primitive terms like "dangerous information" or insulting the author.

Blogs are not supposed to be collage text books, so everybody should cut the crap.

Demian on January 5, 2009 6:26 PM

What the article reveals is that while people have developed good tools for not doing most of these things, the current practice is that software in the wild still ships with stupid, silly mistakes that can cause a lot of problems. What's more is that consumers are fine with this.

The stupidity of some of these "dangerous errors" shows that something needs to change with the way people produce and consume software.

Go-Gulf on April 12, 2009 12:27 AM

http://www.watchmvp.com/Breitling.html Breitling watches

zeng on August 12, 2009 4:37 AM

I am not professional in programming and this stuff blow my mind.
IN case to create a websites I am using website builders like www.site2you.com

Leon Dudovich on August 23, 2009 2:25 AM
Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.