{"id":30523,"date":"2006-07-13T10:00:12","date_gmt":"2006-07-13T10:00:12","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/2006\/07\/13\/glass-houses-are-great-places-to-throw-stones\/"},"modified":"2006-07-13T10:00:12","modified_gmt":"2006-07-13T10:00:12","slug":"glass-houses-are-great-places-to-throw-stones","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20060713-12\/?p=30523","title":{"rendered":"Glass houses are great places to throw stones"},"content":{"rendered":"<p>Whenever I write an article explaining that programs should avoid doing&nbsp;X, I can confidently <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/04\/04\/568100.aspx#568241\"> rely on<\/a> a comment saying, &#8220;<a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/02\/10\/529525.aspx#529729\">Well, Microsoft Product&nbsp;Q does this<\/a>!&#8221;&nbsp;as if to say, &#8220;<a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/05\/12\/596113.aspx#601425\">Gotcha<\/a>, <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/05\/12\/596113.aspx#601433\">you hypocrite<\/a>!&#8221;\n But they&#8217;re saying &#8220;gotcha&#8221; to the wrong person. Because, and I&#8217;m sure it&#8217;s a shock to many people to read this, I did not personally write every line of software Microsoft ever produced. (And even if I did write it, I may have written it as a younger developer, before I learned about said rule. Because, and I&#8217;m sure this is also a shock to many people, I was once a beginner, too.)\n If you find a Microsoft product breaking a rule, then <strong>go complain to that product team<\/strong>. Complaining to me won&#8217;t accomplish anything. I don&#8217;t have access to their source code, and even if I did, I certainly <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/06\/26\/647365.aspx#649293\"> don&#8217;t have permission to go in and make changes to their code<\/a>, nor do I have the time to go in and learn how their product works and figure out the right place to make the fix. Furthermore, and I don&#8217;t know if you all can handle three shocking revelations in one article, <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/06\/26\/647366.aspx#647798\"> product teams do not send me every line of code for review<\/a>.\n Indeed, one of the reasons I write here about things programs should or shouldn&#8217;t do is because I myself will see a Microsoft product breaking a rule! By discussing the problem here rather than in an internal mailing list, the information gets out to everybody. And maybe, just maybe, the product team will read the entry and say, &#8220;Oops, I think we do that.&#8221; Because (shocking revelation number four) not all Microsoft programmers are seasoned experts in Win32 user-interface programming.\n (Articles where I was consciously tapping my colleagues on the head include <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2005\/04\/28\/412574.aspx\"> my discussion of <code>CallMsgFilter<\/code><\/a>, <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2003\/11\/03\/55532.aspx\"> the long and sad story of the Shell Folders key<\/a>, and <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/04\/25\/583093.aspx\"> reminding you to pass unhandled messages to <code>DefWindowProc<\/code><\/a>. In fact, for every &#8220;do\/don&#8217;t do this&#8221; article, I&#8217;d say odds are good that with enough searching, you can find a Microsoft product that breaks the rule. And when you do, complain to that product team. Even the <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2003\/09\/10\/54831.aspx\"> difference between the tray and the notification area<\/a> was in part a response to all the other groups that perpetuate the misuse of the terminology.)\n So when I write something like, &#8220;Applications shouldn&#8217;t do this&#8221;, go ahead and insert the phrase &#8220;and this means all applications, including those published by Microsoft.&#8221; When I write, &#8220;some annoying programs&#8221;, go ahead and insert the phrase, &#8220;which might even include programs published by Microsoft&#8221;. I&#8217;m not going to insert those phrases into every sentence I write. I&#8217;m assuming you&#8217;re smart enough to realize that general statements apply to everyone regardless of who signs their paychecks.<\/p>\n<p> Of course, if the consensus of my readership is that I shouldn&#8217;t tell you not to do things until every last Microsoft product has been scoured to ensure that none of them violate that rule either, then I can abide by that decision. I&#8217;ll just stop posting those tips here and keep them on the internal mailing lists. It&#8217;s much less work for me. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Whenever I write an article explaining that programs should avoid doing&nbsp;X, I can confidently rely on a comment saying, &#8220;Well, Microsoft Product&nbsp;Q does this!&#8221;&nbsp;as if to say, &#8220;Gotcha, you hypocrite!&#8221; But they&#8217;re saying &#8220;gotcha&#8221; to the wrong person. Because, and I&#8217;m sure it&#8217;s a shock to many people to read this, I did not personally [&hellip;]<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[26],"class_list":["post-30523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-other"],"acf":[],"blog_post_summary":"<p>Whenever I write an article explaining that programs should avoid doing&nbsp;X, I can confidently rely on a comment saying, &#8220;Well, Microsoft Product&nbsp;Q does this!&#8221;&nbsp;as if to say, &#8220;Gotcha, you hypocrite!&#8221; But they&#8217;re saying &#8220;gotcha&#8221; to the wrong person. Because, and I&#8217;m sure it&#8217;s a shock to many people to read this, I did not personally [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/30523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=30523"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/30523\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=30523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=30523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=30523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}