<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jon Skeet: Coding Blog : C#, Speaking engagements</title><link>http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/Speaking+engagements/default.aspx</link><description>Tags: C#, Speaking engagements</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Awaiting CodeMash 2012</title><link>http://msmvps.com/blogs/jon_skeet/archive/2012/01/01/awaiting-codemash-2012.aspx</link><pubDate>Sun, 01 Jan 2012 20:43:10 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1804280</guid><dc:creator>skeet</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1804280</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1804280</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2012/01/01/awaiting-codemash-2012.aspx#comments</comments><description>&lt;p&gt;Happy New Year, everyone!&lt;/p&gt;  &lt;p&gt;I&amp;#39;m attempting to make 2012 a quiet year in terms of my speaking engagements - I&amp;#39;ve turned down a few kind offers already, and I expect to do so again during the year. I may well still give user group talks in evenings if I can do so without having to take holiday, but full conferences are likely to be out, especially international ones. This is partly so I can take more time off to support my wife, Holly, who has &lt;a href="http://www.amazon.co.uk/s/ref=sr_tc_2_0?rh=i%3Astripbooks%2Ck%3AHolly+Webb&amp;amp;field-contributor_id=B0034Q363U"&gt;her own books to promote&lt;/a&gt;. This year will be particularly important for Holly as she&amp;#39;s one of the &lt;a href="http://www.worldbookday.com/"&gt;World Book Day 2012&lt;/a&gt; authors - I&amp;#39;m &lt;em&gt;tremendously&lt;/em&gt; proud of her, as you can no doubt imagine.&lt;/p&gt;  &lt;p&gt;However, there&amp;#39;s one international conference I decided to submit proposals for: &lt;a href="http://codemash.org/"&gt;CodeMash&lt;/a&gt;. I&amp;#39;ve never been to this or any other US conference, but I&amp;#39;ve heard fabulous things about it. I&amp;#39;m particularly excited that I&amp;#39;ll be able to present alongside Bill Wagner, a fellow C# author (probably most famous for &lt;a href="http://www.amazon.com/dp/0321245660"&gt;Effective C#&lt;/a&gt; which I&amp;#39;ve &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2010/09/25/book-review-effective-c-2nd-edition-by-bill-wagner.aspx"&gt;reviewed before now&lt;/a&gt;). Bill and I have never met, although we&amp;#39;ve participated jointly on a &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=611"&gt;.NET Rocks show&lt;/a&gt; before now. I could barely hear Bill when we recorded that though, so it hardly counts :)&lt;/p&gt;  &lt;p&gt;The conference schedule for CodeMash shows Bill and I each giving two talks: two individual ones on general C# (&lt;a href="http://codemash.org/Sessions#C%23+Stunt+Coding%3a+I+Dare+You+to+Try+This+at+Home"&gt;C# Stunt Coding&lt;/a&gt; by Bill, and &lt;a href="http://codemash.org/Sessions#C%23&amp;#39;s+Greatest+Mistakes"&gt;C#&amp;#39;s Greatest Mistakes&lt;/a&gt; by me) and two sessions on the async support in C# 5... async &amp;quot;from the inside&amp;quot; and &amp;quot;from the outside&amp;quot;. Although these have hitherto been shown as separate sessions, everyone involved thought it would make more sense to weave the two together... so this will be a double-length session. Bill will be presenting the &amp;quot;outside&amp;quot; view - how to &lt;em&gt;use&lt;/em&gt; async, basically; I&amp;#39;ll be presenting the &amp;quot;inside&amp;quot; view - how it all hangs together behind the scenes.&lt;/p&gt;  &lt;p&gt;With any luck, this will be much more helpful to the conference attendees, as they should be able to build up confidence in the solid foundations underpinning it all at the same time as seeing how fabulously useful it&amp;#39;ll be for developers. It also means that Bill and I can bounce ideas off each other spontaneously as we go - I intend to pay close attention and learn a thing or two myself!&lt;/p&gt;  &lt;p&gt;It&amp;#39;s pretty much impossible to predict how it&amp;#39;ll all hang together, but I&amp;#39;m really excited about the whole shebang. I&amp;#39;ll be fascinated to see if and how US conferences differ from the various ones this side of the pond... but it does make the whole thing that bit more nerve-wracking. If you&amp;#39;re coming to CodeMash, please grab me and say hi - it never hurts to see a friendly face...&lt;/p&gt;  &lt;p&gt;(Note: Bill has a &lt;a href="http://billwagner.cloudapp.net/Home/Item/LookingforwardtoCodeMashInsideandOutside"&gt;similar blog post&lt;/a&gt; posted just before this one.)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1804280" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>Upcoming speaking engagements</title><link>http://msmvps.com/blogs/jon_skeet/archive/2011/09/02/upcoming-speaking-engagements.aspx</link><pubDate>Fri, 02 Sep 2011 16:53:17 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1798771</guid><dc:creator>skeet</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1798771</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1798771</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2011/09/02/upcoming-speaking-engagements.aspx#comments</comments><description>&lt;p&gt;It&amp;#39;s just occurred to me that I&amp;#39;ve forgotten to mention a few of the things I&amp;#39;ll be up to in the near-ish future. (I&amp;#39;ve &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2011/07/28/speaking-engagement-progressive-net-london-september-7th.aspx"&gt;talked about next week&amp;#39;s Progressive .NET session before&lt;/a&gt;.) This is just a quick rundown - follow the links for more blurb and details.&lt;/p&gt;  &lt;h2&gt;.NET Developer Network - Bristol, September 21st (evening)&lt;/h2&gt;  &lt;p&gt;I&amp;#39;ll be &lt;a href="http://dotnetdevnet.com/Meetings/tabid/54/EntryID/58/Default.aspx"&gt;talking about async&lt;/a&gt; in Bristol - possibly at a high level, possibly in detail, depending on the audience experience. This is my first time talking with this particular user group, although I&amp;#39;m sure there&amp;#39;ll be some familiar faces. Come along if you&amp;#39;re in the area.&lt;/p&gt;  &lt;h2&gt;Øredev 2011 - Malmö, November 9th&lt;/h2&gt;  &lt;p&gt;It&amp;#39;s a whistle-stop trip to Sweden as I&amp;#39;m running out of vacation days; I&amp;#39;m flying out on the Tuesday evening and back on the Wednesday evening, but while I&amp;#39;m there I&amp;#39;ll give two talks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://oredev.org/2011/sessions/async-101"&gt;Async 101&lt;/a&gt; (yes, &lt;em&gt;more&lt;/em&gt; async; I wonder at what point I&amp;#39;ll have given as many talks about it as Mads) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://oredev.org/2011/sessions/a-less-technical-talk-on-technical-communication"&gt;Effective technical communication&lt;/a&gt; (not a particularly technical talk, but definitely specific to &lt;em&gt;technical&lt;/em&gt; communication) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Last year I had an absolute blast - looking forward to this year, even though I won&amp;#39;t have as much time for socializing.&lt;/p&gt;  &lt;h2&gt;Stack Overflow Dev Days 2011 - London, November 14th - cancelled!&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;Update: &lt;a href="http://blog.stackoverflow.com/2011/09/devdays-2011-is-cancelled/"&gt;Dev Days has been cancelled&lt;/a&gt;. I&amp;#39;m still hoping to do &lt;em&gt;something&lt;/em&gt; around this topic, and there may be small-scale meet-ups in London anyway.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Two years ago I talked about &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2009/11/02/omg-ponies-aka-humanity-epic-fail.aspx"&gt;how humanity had let the world of software engineering down&lt;/a&gt;. This was one of the best talks I&amp;#39;ve ever given, and introduced the world to Tony the Pony. Unfortunately that puts the bar relatively high for this year&amp;#39;s talk - at least, high by my own pretty low standards.&lt;/p&gt;  &lt;p&gt;In a somewhat odd topic for a &lt;a href="http://pobox.com/~skeet/preaching"&gt;Christian&lt;/a&gt; and a happy employee of a company with a &lt;a href="http://investor.google.com/corporate/code-of-conduct.html"&gt;code of conduct&lt;/a&gt; which starts &amp;quot;Don&amp;#39;t be evil,&amp;quot; this year&amp;#39;s talk is entitled &lt;a href="http://devdays.stackoverflow.com/sessions/thinking-in-evil/"&gt;&amp;quot;Thinking in evil.&amp;quot;&lt;/a&gt; As regular readers are no doubt aware, I love torturing the C# language and forcing the compiler to work with code which would make any right-thinking software engineer cringe. I was particularly gratified recently when Eric Lippert commented on &lt;a href="http://stackoverflow.com/questions/7113347/c-assignment-in-an-if-statement/7113387#7113387"&gt;one of my Stack Overflow answers&lt;/a&gt; that this was &amp;quot;the best abuse of C# I&amp;#39;ve seen in a while.&amp;quot; I&amp;#39;m looking forward to talking about why I think it&amp;#39;s genuinely a good idea to think about nasty code like this - not to &lt;em&gt;use&lt;/em&gt; it, but to get to know your language of choice more intimately. Like last time, I have little idea of &lt;em&gt;exactly&lt;/em&gt; what this talk will be like, but I&amp;#39;m really looking forward to it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1798771" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Stack+Overflow/default.aspx">Stack Overflow</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Evil+Code/default.aspx">Evil Code</category></item><item><title>Speaking engagement: Progressive .NET, London, September 7th</title><link>http://msmvps.com/blogs/jon_skeet/archive/2011/07/28/speaking-engagement-progressive-net-london-september-7th.aspx</link><pubDate>Thu, 28 Jul 2011 20:29:40 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1796884</guid><dc:creator>skeet</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1796884</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1796884</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2011/07/28/speaking-engagement-progressive-net-london-september-7th.aspx#comments</comments><description>&lt;p&gt;Just a quick note to mention an event I&amp;#39;ll be speaking at in September. SkillsMatter will be hosting &lt;a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011/js-2399"&gt;Progressive .NET&lt;/a&gt;, a 3-day event set of tutorials on September 5th-7th in London. I&amp;#39;ll be speaking about C# 5&amp;#39;s async feature on the last day (9.30am-1pm) but there&amp;#39;s a host of other speakers too. Should be good. For my own part, with four hours or so to cover async, I should be able to cover both the high level stuff &lt;em&gt;and&lt;/em&gt; the implementation details, with plenty of time for the inevitable questions.&lt;/p&gt;  &lt;p&gt;This one isn&amp;#39;t free though, I&amp;#39;m afraid - it&amp;#39;s normally £425. Hardly pocket money, but pretty good value for three full days of deep-dive sessions. However, there are two bits of good news:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Readers of this blog can get £50 off using the promo code &amp;quot;PROGNET50&amp;quot; at the checkout. &lt;/li&gt;    &lt;li&gt;I have two free tickets to give away. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In an effort to make the ticket give-away fair, I&amp;#39;m thinking of a 32-bit number - mail me (&lt;a href="mailto:skeet@pobox.com"&gt;skeet@pobox.com&lt;/a&gt;) an Int32, and the two readers with the closest value will get the tickets. Please include &amp;quot;Progressive .NET&amp;quot; in the subject line of the mail so I can filter them easily :)&lt;/p&gt;  &lt;p&gt;Anyway, hope to see you there - please grab me to say hi.&lt;/p&gt;  &lt;h3&gt;Update (August 4th): and the winners are...&lt;/h3&gt;  &lt;p&gt;Congratulations to &lt;strong&gt;The Configurator&lt;/strong&gt; and &lt;strong&gt;Haris Hasan&lt;/strong&gt; who submitted the closest numbers to the one I was thinking of: -890978631.&lt;/p&gt;  &lt;p&gt;In fact, The Configurator guessed the &lt;em&gt;exact&lt;/em&gt; value - which is the result of calling &amp;quot;Progressive .NET&amp;quot;.GetHashCode() on my 32-bit laptop running .NET 4. (I can&amp;#39;t remember which versions have different hash algorithms, but as it&amp;#39;s pretty arbitrary, it seemed good enough...) I&amp;#39;m impressed!&lt;/p&gt;  &lt;p&gt;I&amp;#39;ll be emailing SkillsMatter to let them know about the winners - and thanks to everyone else who mailed me a guess. Hope I&amp;#39;ll see some of you there anyway!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1796884" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_+5/default.aspx">C# 5</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/async/default.aspx">async</category></item><item><title>Reflecting on presentation skills: The Guathon, August 13th 2010</title><link>http://msmvps.com/blogs/jon_skeet/archive/2010/08/14/reflecting-on-presentation-skills-the-guathon-august-13th-2010.aspx</link><pubDate>Sat, 14 Aug 2010 20:31:15 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1775964</guid><dc:creator>skeet</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1775964</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1775964</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2010/08/14/reflecting-on-presentation-skills-the-guathon-august-13th-2010.aspx#comments</comments><description>&lt;p&gt;(I apologise for the unstructured nature of this post. I honestly don&amp;#39;t know how to structure it. I&amp;#39;ve thought of a few ways of breaking it up by heading, and none of them really work. Particular apologies to &lt;a href="http://pubbitch.org/blog/"&gt;Simon Stewart&lt;/a&gt;, who has requested more brevity in my blog. Just for Simon, the executive summary is: Scott Guthrie is a really good speaker. I want to be more like him.)&lt;/p&gt;  &lt;p&gt;Yesterday I had the good fortune (well, good friends - thanks Phil!) to attend the &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/08/02/london-guathon-with-me-on-august-13th.aspx"&gt;Guathon&lt;/a&gt; in London. This was a free, day-long event with &lt;a href="http://weblogs.asp.net/scottgu"&gt;Scott Guthrie&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/mikeormond"&gt;Mike Ormond&lt;/a&gt;, talking about MVC 2 and 3, Visual Studio 2010, Windows Phone 7 and more. This was my encounter with Scott - and indeed the first time I&amp;#39;d seen him present. (I value videos of presentations, but rarely find time to actually watch them, more&amp;#39;s the pity.)&lt;/p&gt;  &lt;p&gt;Obviously I was interested in hearing about the technologies they were talking about, but I confess I was &lt;em&gt;more&lt;/em&gt; interested in watching how Scott went about presenting. (I&amp;#39;ve seen Mike present before - but clearly Scott was the &amp;quot;big name&amp;quot; here. No offence meant to Mike whatsoever, who did a great job talking about Windows Phone 7.) Scott is a legend in the industry, and as I&amp;#39;m very interested in improving my public speaking skills, I felt I had at least as much to learn in that area as anything else.&lt;/p&gt;  &lt;p&gt;I was really impressed. In some ways, Scott didn&amp;#39;t present in a way I&amp;#39;d expected him to... but what he did was so much better. Not having seen him before, I&amp;#39;d sort of expected an utterly polished sort of talk - almost like a Steve Jobs presentation. I was hoping to get some insight into what sort of polish I could add to my presentations: where does it make sense to have photos, where do simpler visuals work, where are words important? How do you present against an enormous screen without losing the audience&amp;#39;s focus? Do jokes enhance a presentation or detract from it?&lt;/p&gt;  &lt;p&gt;In retrospect, this was hopelessly naïve. I think Scott&amp;#39;s secret sauce is actually pretty simple: he knows what he&amp;#39;s talking about, and talks about it honestly and openly. He&amp;#39;s completely authentic, obviously passionate about what he does, good humoured (we had a few bits of mild Google/Bing banter), and interested in the audience.&lt;/p&gt;  &lt;p&gt;At almost every turn, Scott asked the audience how many of us had used a certain feature, or developed in a certain way. This was then reflected in the level at which he pitched the next section, as well as giving a few opportunities for jokes. There were questions throughout - particularly in Mike&amp;#39;s talk, actually - to the extent that I&amp;#39;d say a good quarter to a third of the time was spent answering the audience. This was a very good thing, in my view - I can&amp;#39;t remember finding any of the questions irrelevant or obvious (I should state for the record that I probably asked more questions than anyone else; apologies if other attendees found &lt;em&gt;my&lt;/em&gt; questions to be boring). Questions from the audience are always a good reality check, because they&amp;#39;re clearly addressing &lt;em&gt;real&lt;/em&gt; concerns rather than the ones in the speaker&amp;#39;s imagination. But the best thing about the questions was Scott&amp;#39;s way of answering, which could broadly be divided into three types of answer:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A known answer: &amp;quot;Yes, you can do X - and you can do Y as well. But you can&amp;#39;t do Z.&amp;quot;&lt;/li&gt;    &lt;li&gt;An unknown answer which was easily testable: &amp;quot;Hmm. I&amp;#39;m not sure. Let&amp;#39;s try it. Ah yes, the code does X.&amp;quot; (There were fewer of these, just due to the nature of the questions.)&lt;/li&gt;    &lt;li&gt;An answer which was unknown but needed further investigation: &amp;quot;Send me a mail and I&amp;#39;ll get back to you about it.&amp;quot;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The last one is most interesting - because I have absolutely no doubt that Scott &lt;em&gt;will&lt;/em&gt; get back to anyone who sent him a mail. (I&amp;#39;ve sent him two.) Now don&amp;#39;t forget that Scott is a Corporate Vice President (Dev Div). He&amp;#39;s clearly a busy man... but his openness and passion make an enormously positive impression, suggesting that he&amp;#39;s the kind of guy who doesn&amp;#39;t think of himself as being above such questions. Assuming this is what he says at all his presentations (and I suspect it is), I dread to think how much time he spends every day answering emails... but I also suspect that it&amp;#39;s of enormous benefit to the products for which he&amp;#39;s responsible, by keeping the executive level in touch with grass-roots developers.&lt;/p&gt;  &lt;p&gt;So, what have I learned from the whole experience, in terms of presentation skills?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can definitely give awesome presentations without fancy graphics. Content is king.&lt;/li&gt;    &lt;li&gt;There&amp;#39;s no substitute for knowing your stuff, and being honest about when you &lt;em&gt;don&amp;#39;t&lt;/em&gt; know the answer.&lt;/li&gt;    &lt;li&gt;Interaction with the audience is beneficial to everyone.&lt;/li&gt;    &lt;li&gt;Sitting down and just writing out code - particularly with audience participation to make the demo &amp;quot;belong&amp;quot; to them - is absolutely fine.&lt;/li&gt;    &lt;li&gt;Scott&amp;#39;s an incredibly nice guy, and it shines through very clearly. I really hope to see him again soon.&lt;/li&gt;    &lt;li&gt;If you speak clearly, speed doesn&amp;#39;t matter too much: Scott talks really fast, but is very easy to listen to.&lt;/li&gt;    &lt;li&gt;If you lose a vital file in the middle of a presentation, check the recycle bin. It&amp;#39;s the virtual equivalent of checking down the back of the sofa.&lt;/li&gt;    &lt;li&gt;Don&amp;#39;t worry if you have more material than you have time to present, particularly if that&amp;#39;s due to audience questions.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Whether I&amp;#39;ll be able to apply this myself remains to be seen... although I&amp;#39;ve already been acutely aware of how much more comfortable I am when presenting on &amp;quot;home topics&amp;quot; (e.g. C# language features) than areas where I have a lot less expertise (e.g. Reactive Extensions).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1775964" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>Degrees of reality in sample code</title><link>http://msmvps.com/blogs/jon_skeet/archive/2010/07/25/degrees-of-reality-in-sample-code.aspx</link><pubDate>Sun, 25 Jul 2010 20:58:03 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1774716</guid><dc:creator>skeet</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1774716</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1774716</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2010/07/25/degrees-of-reality-in-sample-code.aspx#comments</comments><description>&lt;p&gt;Yesterday I tweeted a link to an &lt;a href="http://csharpindepth.com/Articles/General/Overloading.aspx"&gt;article about overloading&lt;/a&gt; that I&amp;#39;d just finished. In that article, all my examples look a bit like this:&lt;/p&gt;  &lt;div class="code"&gt;&lt;span class="Namespace"&gt;using&lt;/span&gt; System;     &lt;br /&gt;    &lt;br /&gt;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; Test     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;static&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; Foo(&lt;span class="ValueType"&gt;int&lt;/span&gt; x, &lt;span class="ValueType"&gt;int&lt;/span&gt; y = 5)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&lt;span class="String"&gt;&amp;quot;Foo(int x, int y = 5)&amp;quot;&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;static&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; Foo(&lt;span class="ValueType"&gt;double&lt;/span&gt; x)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&lt;span class="String"&gt;&amp;quot;Foo(double x)&amp;quot;&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;static&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; Main()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Foo(10);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;} &lt;/div&gt;  &lt;p&gt;Each example is followed by an explanation of the output.&lt;/p&gt;  &lt;p&gt;Fairly soon afterwards, I received an email from a reader who disagreed with my choices for sample code. ere are a few extracts from the email exchange. Please read them carefully - they really form the context of the rest of this post.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;This is really not proper. When a method can do more than one thing, you might offer what are called &amp;#39;convenience overloads&amp;#39;, which make it easier for the consuming developer. When you start swaying away so much that you have wildly different arguments, then it&amp;#39;s probably time to refactor and consider creating a second method. With your example with &amp;quot;Foo&amp;quot;, it&amp;#39;s hard to tell which is the case.&lt;/p&gt;    &lt;p&gt;My point is, the &amp;#39;convenience overloads&amp;#39; should all directly or indirectly call the one REAL method. I&amp;#39;m not a fan of &amp;quot;test&amp;quot;, &amp;quot;foo&amp;quot;, and &amp;quot;bar&amp;quot;, because they rarely make the point clearer, and often make it more confusing. So let me use something more realistic. So let me use something more realistic. This nonsensical example, but hopefully is clear: [code snipped, but it was an OrderProcessor, referring to an OrderDetail class]&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;The point here was to make you aware of the oversight. I do what I can to try to stop bad ideas from propagating, particularly now that you&amp;#39;re writing books. When developers read your book and consider it an &amp;quot;authority&amp;quot; on the topic, they take your example as if it&amp;#39;s a model for what they should do. I just hope your more mindful of that in your code samples in the future.&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;Specific to &lt;em&gt;this&lt;/em&gt; overload issue, this has come up many times for me. Developers will write 3 overloads that do wildly different things or worse, will have 98% of the same code repeated. We try to catch this in a code review, but sometimes we will get pushback because they read it in a book (hence, my comments).&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;I assume your audience is regular developer, right? In other words, the .NET Framework developers at Microsoft perhaps aren&amp;#39;t the ones reading your books, but it&amp;#39;s thousands of App Developer I and App Developer II that do business development? I just mean that there are far, far more &amp;quot;regular developers&amp;quot; than seasoned, expert developers who will be able to discern the difference and know what is proper. You are DEFINING what is proper in your book, you become an authority on the matter!&lt;/p&gt;    &lt;p&gt;Anyhow, all my point was it to realize how far your influence goes once you become an author. Even the simplest, throwaway example can be seen as a best-practice beacon.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, this gave me pause for thought. Indeed, I went back and edited the overloading article - not to change the examples, but to make the article&amp;#39;s scope clearer. It&amp;#39;s describing the &lt;em&gt;mechanics&lt;/em&gt; of overloading, rather than suggesting when it is and isn&amp;#39;t appropriate to use overloading at all.&lt;/p&gt;  &lt;p&gt;I don&amp;#39;t think I&amp;#39;m actually &lt;em&gt;wrong&lt;/em&gt; here, but I wanted to explore it a little more in this post, and get feedback. First I&amp;#39;d like to suggest a few categorizations - these aren&amp;#39;t the only possible ones, of course, but I think they divide the spectrum reasonably. Here I&amp;#39;ll give example examples in another area: overriding and polymorphism. I&amp;#39;ll just describe the options first, and then we can talk about the pros and cons afterwards.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Totally abstract - no code being presented at all&lt;/h3&gt;  &lt;p&gt;Sometimes we talk about code without actually giving any examples at all. In order to override a member, it has to be declared as `virtual` in a base class, and then the overriding member uses the `override `modifier. When the virtual member is called, it is dispatched to the most specific implementation which overrides it, even if the caller is unaware of the existence of the implementation class.&lt;/p&gt;  &lt;h3&gt;Working but pointless code&lt;/h3&gt;  &lt;p&gt;This is the level my overloading article worked at. Here, you write code whose sole purpose is to demonstrate the mechanics of the feature you&amp;#39;re describing. So in this case we might have:&lt;/p&gt;  &lt;div class="code"&gt;&lt;span class="Namespace"&gt;using&lt;/span&gt; System;     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; C1     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;virtual&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; M()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&lt;span class="String"&gt;&amp;quot;C1.M&amp;quot;&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; C2 : C1     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;override&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; M()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&lt;span class="String"&gt;&amp;quot;C2.M&amp;quot;&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; C3     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;static&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; Main()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; C1 c = &lt;span class="Keyword"&gt;new&lt;/span&gt; C2();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c.M();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;} &lt;/div&gt;  &lt;p&gt;Now this is a reasonably extreme example; as a matter of personal preference I tend to use class names like &amp;quot;Test&amp;quot; or &amp;quot;Program&amp;quot; as the entry point, perhaps &amp;quot;BaseClass&amp;quot; and &amp;quot;DerivedClass&amp;quot; where &amp;quot;C1&amp;quot; and &amp;quot;C2&amp;quot; are used here, and &amp;quot;Foo&amp;quot; instead of &amp;quot;M&amp;quot; for the method name. Obviously &amp;quot;Foo&amp;quot; has no more real meaning than &amp;quot;M&amp;quot; as a name - I just get uncomfortable for some reason around single character identifiers other than for local variables. Arguably &amp;quot;M&amp;quot; is better as it stands for &amp;quot;method&amp;quot; and I could use &amp;quot;P&amp;quot; for a property etc. Whatever we choose, we&amp;#39;re talking about &lt;a href="http://en.wikipedia.org/wiki/Metasyntactic_variable"&gt;metasyntactic variables&lt;/a&gt; really.&lt;/p&gt;  &lt;h3&gt;Complete programs indicative of design in a non-business context&lt;/h3&gt;  &lt;p&gt;This is the level at which I would &lt;em&gt;probably&lt;/em&gt; choose to demonstrate overriding. It&amp;#39;s certainly the one I&amp;#39;ve used for talking about generic variance. Here, the goal is to give the audience a flavour of the purpose of the feature as well as demonstrating the mechanics, but to stay in the simplistic realm of non-business examples. To adapt one of my normal examples - where I&amp;#39;d &lt;em&gt;actually&lt;/em&gt; use an interface instead of an abstract class - we might end up with an example like this:&lt;/p&gt;  &lt;div class="code"&gt;&lt;span class="Namespace"&gt;using&lt;/span&gt; System;     &lt;br /&gt;&lt;span class="Namespace"&gt;using&lt;/span&gt; System.Collections.Generic;     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;abstract&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; Shape     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;abstract&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;double&lt;/span&gt; Area { get; }     &lt;br /&gt;}     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; Square : Shape     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;private&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;readonly&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;double&lt;/span&gt; side;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt; Square(&lt;span class="ValueType"&gt;double&lt;/span&gt; side)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Keyword"&gt;this&lt;/span&gt;.side = side;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;override&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;double&lt;/span&gt; Area { get { &lt;span class="Statement"&gt;return&lt;/span&gt; side * side; } }     &lt;br /&gt;}     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; Circle : Shape     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;readonly&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;double&lt;/span&gt; radius;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt; Circle(&lt;span class="ValueType"&gt;double&lt;/span&gt; radius)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Keyword"&gt;this&lt;/span&gt;.radius = radius;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;override&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;double&lt;/span&gt; Area { get { &lt;span class="Statement"&gt;return&lt;/span&gt; Math.PI * radius * radius; } }     &lt;br /&gt;}     &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; ShapeDemo     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;static&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;void&lt;/span&gt; Main()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; List&amp;lt;Shape&amp;gt; shapes = &lt;span class="Keyword"&gt;new&lt;/span&gt; List&amp;lt;Shape&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Keyword"&gt;new&lt;/span&gt; Square(10),     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Keyword"&gt;new&lt;/span&gt; Circle(5)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Statement"&gt;foreach&lt;/span&gt; (Shape shape &lt;span class="Statement"&gt;in&lt;/span&gt; shapes)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(shape.Area);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;} &lt;/div&gt;  &lt;p&gt;Now these are pretty tame shapes - they don&amp;#39;t even have a location. If I were really going to demonstrate an abstract class I might try to work out something I could do in the base class to make it sensibly a non-interface... but at least we&amp;#39;re demonstrating the property being overridden.&lt;/p&gt;  &lt;h3&gt;Business-like partial example&lt;/h3&gt;  &lt;p&gt;Here we&amp;#39;ll use classes which sound like they could be in a real business application... but we won&amp;#39;t fill in all the useful logic, or worry about any properties that aren&amp;#39;t needed for the demonstation.&lt;/p&gt;  &lt;div class="code"&gt;&lt;span class="Namespace"&gt;using&lt;/span&gt; System;    &lt;br /&gt;&lt;span class="Namespace"&gt;using&lt;/span&gt; System.Collections.Generic;    &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;abstract&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; Employee    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;private&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;readonly&lt;/span&gt; DateTime joinDate;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;private&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;readonly&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;decimal&lt;/span&gt; salary;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="InlineComment"&gt;// Most employees don&amp;#39;t get bonuses any more&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;virtual&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;int&lt;/span&gt; BonusPercentage { get { &lt;span class="Statement"&gt;return&lt;/span&gt; 0; } }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;decimal&lt;/span&gt; Salary { get { &lt;span class="Statement"&gt;return&lt;/span&gt; salary; } }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt; DateTime JoinDate { get { &lt;span class="Statement"&gt;return&lt;/span&gt; joinDate; } }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;int&lt;/span&gt; YearsOfService    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="InlineComment"&gt;// TODO: Real calculation&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get { &lt;span class="Statement"&gt;return&lt;/span&gt; DateTime.Now.Year - joinDate.Year; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt; Employee(&lt;span class="ValueType"&gt;decimal&lt;/span&gt; salary, DateTime joinDate)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Keyword"&gt;this&lt;/span&gt;.salary = salary;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Keyword"&gt;this&lt;/span&gt;.joinDate = joinDate;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}    &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;abstract&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; Manager : Employee    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="InlineComment"&gt;// Managers always get a 15% bonus&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;override&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;int&lt;/span&gt; BonusPercentage { get { &lt;span class="Statement"&gt;return&lt;/span&gt; 15; } }    &lt;br /&gt;}    &lt;br /&gt;    &lt;br /&gt;&lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;abstract&lt;/span&gt;&amp;#160;&lt;span class="ReferenceType"&gt;class&lt;/span&gt; PreIpoContract : Employee    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="InlineComment"&gt;// The old style contracts were really generous&lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="Modifier"&gt;public&lt;/span&gt;&amp;#160;&lt;span class="Modifier"&gt;override&lt;/span&gt;&amp;#160;&lt;span class="ValueType"&gt;int&lt;/span&gt; BonusPercentage    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get { &lt;span class="Statement"&gt;return&lt;/span&gt; YearsOfService * 2; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;} &lt;/div&gt;  &lt;p&gt;Now this particular code sample won&amp;#39;t even compile: we haven&amp;#39;t provided the necessary constructors in the derived classes. Note how the employees don&amp;#39;t have names, and there are no relationships between employees and their managers, either.&lt;/p&gt;  &lt;p&gt;Obviously we &lt;em&gt;could&lt;/em&gt; have filled in all the rest of the code, ending up with a complete solution to an imaginary business need. Other examples at this level may well include customers and orders. One interesting thing to note here: admittedly I&amp;#39;ve only been working in the industry for 16 years, and only 12 years full time, but I don&amp;#39;t think I&amp;#39;ve ever written a Customer or Order class as part of my job.&lt;/p&gt;  &lt;h3&gt;Full application example&lt;/h3&gt;  &lt;p&gt;No, I&amp;#39;m not going to provide an example of this. Usually this is the sort of thing which a book might work up to over the course of the complete text, and you&amp;#39;ll end up with a wiki, or an e-commerce site, or an indexed library of books with complete web site around it. If you think I&amp;#39;m going to spend days or even weeks coding something like that just for this blog post, you&amp;#39;ll be disappointed :)&lt;/p&gt;  &lt;p&gt;Anyway, the idea of this is that it does something genuinely useful, and you can easily lift whole sections of it into other projects - or at least the design of it.&lt;/p&gt;  &lt;h2&gt;Which approach is best?&lt;/h2&gt;  &lt;p&gt;I&amp;#39;m sure you know what&amp;#39;s coming here: &lt;em&gt;it depends&lt;/em&gt;. In particular, I believe it depends on:&lt;/p&gt;  &lt;h3&gt;Your readership&lt;/h3&gt;  &lt;p&gt;Are they likely to copy and paste your example into production code without further thought? Arguably in that case the first option might be the best: they may not understand it, but at least it means your code won&amp;#39;t be injuring a project.&lt;/p&gt;  &lt;p&gt;Simply put, didactic code is not production code. The parables in the Bible aren&amp;#39;t meant to be gripping stories with compelling characterization: they&amp;#39;re meant to make a point. Scales aren&amp;#39;t meant to sound like wonderful music: they&amp;#39;re meant to help you improve your abilities to make a nice sound when you&amp;#39;re playing &lt;em&gt;real&lt;/em&gt; music.&lt;/p&gt;  &lt;h3&gt;The point you&amp;#39;re trying to put across&lt;/h3&gt;  &lt;p&gt;If I&amp;#39;m trying to explain the &lt;em&gt;mechanics&lt;/em&gt; of a feature, I find the second option to be useful. The reader doesn&amp;#39;t need to try to take in the context of what the code is trying to accomplish, because it&amp;#39;s explicitly not trying to do &lt;em&gt;anything&lt;/em&gt; of any use. It&amp;#39;s &lt;em&gt;just&lt;/em&gt; demonstrating how the language or platform behaves in a particular scenario.&lt;/p&gt;  &lt;p&gt;If, on the other hand, you&amp;#39;re trying to explain a design principle, then the third or fourth options are useful. The third option can also be useful for the mechanics of a feature which is particularly abstract - like generic variance, as I mentioned earlier. That goes somewhere between &amp;quot;complete guide to where this feature should be used&amp;quot; and &amp;quot;no guidance whatsoever&amp;quot; - a sort of &amp;quot;here&amp;#39;s a hint at the &lt;em&gt;kind&lt;/em&gt; of situation where it could be useful.&amp;quot;&lt;/p&gt;  &lt;p&gt;If you&amp;#39;re trying to explore a technology for fun, I find the third option works very well for that situation too. For example, while looking at Reactive Extensions, I&amp;#39;ve written programs to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Group lines in a file by length&lt;/li&gt;    &lt;li&gt;Give the results of a UK general election&lt;/li&gt;    &lt;li&gt;Simulate the 1998 Brazil vs Norway world cup football match&lt;/li&gt;    &lt;li&gt;Implement drag and drop using event filtering&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;None of these is likely to be directly useful in a real business app - but they were more appealing than solely demonstrating a sequence of numbers being generated (although with an appropriate marble diagram generator, that can be quite fun too).&lt;/p&gt;  &lt;h3&gt;The technology you&amp;#39;re demonstrating&lt;/h3&gt;  &lt;p&gt;This is clearly related to the previous point, but I think it bears a certain amount of separation. I believe that &lt;em&gt;language&lt;/em&gt; topics are fairly easily demonstrated with the second and third options. &lt;em&gt;Library&lt;/em&gt; topics often deserve a slightly higher level of abstraction - and if you&amp;#39;re going to try to demonstrate that a whole &lt;em&gt;platform&lt;/em&gt; is worth investing time and energy in, it&amp;#39;s useful to have something pretty real-world to show off.&lt;/p&gt;  &lt;h3&gt;Your time and skills&lt;/h3&gt;  &lt;p&gt;You know what? I suck at the fourth and fifth options here. I can&amp;#39;t remember writing any complete, independent systems as a software engineer, and none of them have been in line-of-business applications anyway. The closest I&amp;#39;ve come is writing standalone tools which certainly &lt;em&gt;have&lt;/em&gt; been useful, but often take shortcuts in terms of design which I wouldn&amp;#39;t countenance in other applications. (And yes, I&amp;#39;m sure there&amp;#39;s some discussion to be had around that as well, but it&amp;#39;s not the point of this article.)&lt;/p&gt;  &lt;p&gt;You may think my employee example above was lousy - and I&amp;#39;d agree with you. It&amp;#39;s not really a great fit for inheritance, in my view - and the bonus calculation is certainly a dubious way of forcing in some polymorphism. But it was the best I could come up with in the time available to me. This wasn&amp;#39;t some attempt to make it appear less worthy than the other options; I really &lt;em&gt;am&lt;/em&gt; that bad at coming up with business-like examples. Other authors (by which I mean anyone writing at all, not just book authors) may well have found much better examples, either by spending more time on them, being more experienced with line-of-business apps, or having a better imagination. Or all three.&lt;/p&gt;  &lt;p&gt;I&amp;#39;m not too proud to admit the things I suck at :) If I spent many extra hours coming up with examples for everything I write about, I would get a lot less written. I&amp;#39;m doing this in notional &amp;quot;spare time&amp;quot; after all. So even if you would prefer the fourth option over the third, would you rather have that but see less of my (ahem) &amp;quot;wisdom&amp;quot;? Personally I &lt;em&gt;think&lt;/em&gt; everyone&amp;#39;s better off with me braindumping using examples in forms which I&amp;#39;m better at.&lt;/p&gt;  &lt;h2&gt;How to read examples&lt;/h2&gt;  &lt;p&gt;Most of this post has been from the point of view of an author. Briefly, I&amp;#39;d like to suggest what this might mean for readers. The onus is on the author to make this clear, of course, but I think it&amp;#39;s worth trying to be actively better readers ourselves.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Understand what the author is trying to achieve. Don&amp;#39;t assume that every example will fit nicely in your application. Example code often doesn&amp;#39;t come with any argument validation or error handling - and very rarely does it have an appropriate set of unit tests. If you&amp;#39;re reading about &lt;em&gt;how something works&lt;/em&gt;, don&amp;#39;t assume that the examples are in any way realistic. They may well be simplified to demonstrate the behaviour as clearly as possible without the extra &amp;quot;fluff&amp;quot; of useful functionality.&lt;/li&gt;    &lt;li&gt;Think about what may be missing, particularly if the context is an evangelical one. If someone is trying to sell you on a particular technology, then of &lt;em&gt;course&lt;/em&gt; they&amp;#39;ll try to show it in its best possible light. Where are the pitfalls? Where does it not stack up?&lt;/li&gt;    &lt;li&gt;Don&amp;#39;t assume authority means anything. I was quite happy to &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2008/10/08/why-boxing-doesn-t-keep-me-awake-at-nights.aspx"&gt;take Jeffrey Richter to task on boxing&lt;/a&gt; for example. Jeffrey Richter is a fabulous author and clearly a smart cookie, but that doesn&amp;#39;t mean he&amp;#39;s right about everything... and I really, really don&amp;#39;t like the idea of anyone appealing to &lt;em&gt;my&lt;/em&gt; supposed abilities to justify some bad decision. Judge any argument on its merits... find out what people think and why they think it, but then see how well their reasoning actually hangs together.&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;This was always going to be a somewhat biased look at this topic, because I hold a certain viewpoint which is clearly contrary to the one held by the chap who emailed me. That&amp;#39;s why I included a reasonable chunk of his emails - to give at least some representation to the alternatives. This post has effectively been a longwinded justification of the form my examples have taken... but does it ring true?&lt;/p&gt;  &lt;p&gt;I can&amp;#39;t guarantee to change my writing style drastically on this front - at least not quickly - but I would very much appreciate your thoughts on this. I&amp;#39;m reluctant to exaggerate, but I think it may be &lt;em&gt;even more important&lt;/em&gt; than working out whether &amp;quot;Jedi&amp;quot; was meant to be &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2010/07/01/how-many-jedi.aspx"&gt;plural or singular&lt;/a&gt; - and I certainly received a lot of feedback on that topic.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1774716" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Books/default.aspx">Books</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>Epicenter 2010: quick plug and concessionary tickets</title><link>http://msmvps.com/blogs/jon_skeet/archive/2010/06/07/epicenter-2010-quick-plug-and-concessionary-tickets.aspx</link><pubDate>Mon, 07 Jun 2010 18:58:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1771565</guid><dc:creator>skeet</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1771565</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1771565</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2010/06/07/epicenter-2010-quick-plug-and-concessionary-tickets.aspx#comments</comments><description>&lt;p&gt;Just a quick update to mention that I&amp;#39;m speaking at &lt;a href="http://epicenter.ie/"&gt;Epicenter 2010&lt;/a&gt; in Dublin on Wednesday, on Noda Time and C# Corner Cases. There are &lt;a href="http://epicenter.ie/2010_Jon_Skeet_Page"&gt;concessionary tickets&lt;/a&gt; available, so if you&amp;#39;re on the right landmass, please do come along. Don&amp;#39;t be put off by the fact that I&amp;#39;m speaking - there are some genuinely good speakers too. (Stephen Colebourne will be talking about Joda Time and JSR-310, in a session which I&amp;#39;m personally sad to miss - I&amp;#39;ll be talking about C# at the same time.)&lt;/p&gt;  &lt;p&gt;While I&amp;#39;m busy plugging events, I&amp;#39;m also extremely excited about &lt;a href="http://www.ndc2010.no/"&gt;NDC 2010&lt;/a&gt; next week in Oslo. Neal Gafter and Eric Lippert will be doing a C# Puzzler session, Mads Torgersen will be talking about C# 4, I&amp;#39;ll be presenting a wish-list for C# 5, and then all four of us will be doing a Q&amp;amp;A session. Should be heaps of fun. (I&amp;#39;ll also be presenting C# 4&amp;#39;s variance features, and Noda Time again.)&lt;/p&gt;  &lt;p&gt;As ever, I&amp;#39;m somewhat late in putting the final touches to all of these talks, so if you&amp;#39;ve got any suggestions for my C# 5 wish-list or any particularly evil corner cases which have caught you out, add them as comments and I&amp;#39;ll try to squeeze &amp;#39;em in.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1771565" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>Speaking of which…</title><link>http://msmvps.com/blogs/jon_skeet/archive/2010/03/10/speaking-of-which.aspx</link><pubDate>Wed, 10 Mar 2010 20:30:01 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1761414</guid><dc:creator>skeet</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1761414</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1761414</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2010/03/10/speaking-of-which.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m delighted to announce that I&amp;#39;m going to be speaking at the &lt;a href="http://www.ndc2010.no/"&gt;Norwegian Developer Conference 2010&lt;/a&gt; in Oslo in June. &lt;a href="http://blogs.msdn.com/grothaug/pages/jon-skeet-to-alter-the-future-at-norwegian-developers-conference-2010.aspx"&gt;Rune Grothaug announced this&lt;/a&gt; with the very modest claim that my talk (combined with a Q&amp;amp;A with Mads Torgersen afterwards) could &amp;quot;alter the future of C# altogether&amp;quot;. Well, I don&amp;#39;t know about that - but I&amp;#39;m very much looking forward to it nonetheless.&lt;/p&gt;  &lt;p&gt;As I&amp;#39;m doing quite a bit of this public speaking lark at the moment, I thought it might be worth keeping an up-to-date list of my speaking engagements - and what better way than to have a Google Calendar for the job? You can browse the embedded version below, or subscribe to the &lt;a href="http://www.google.com/calendar/ical/sdqq6bjhsvemtj6u1qgghiilrg@group.calendar.google.com/public/basic.ics"&gt;ical feed&lt;/a&gt; from your own calendaring system.&lt;/p&gt;  &lt;p&gt;I&amp;#39;ll try to keep this up-to-date, but you should be aware that some events may well be tentative - it&amp;#39;s probably best to check on the event&amp;#39;s web site, which will usually be linked in the description for the event.&amp;#160; Also note that I don&amp;#39;t always know which days I&amp;#39;ll be at an event - in order to keep a reasonable home life, I&amp;#39;ll often just be popping in for a day or two within a longer conference.&lt;/p&gt; &lt;iframe style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" height="600" src="http://www.google.com/calendar/embed?mode=AGENDA&amp;amp;height=600&amp;amp;wkst=1&amp;amp;bgcolor=%23FFFFFF&amp;amp;src=sdqq6bjhsvemtj6u1qgghiilrg%40group.calendar.google.com&amp;amp;color=%237A367A&amp;amp;ctz=Europe%2FLondon" frameborder="0" width="800" scrolling="no"&gt;&lt;/iframe&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1761414" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>Recent activities</title><link>http://msmvps.com/blogs/jon_skeet/archive/2009/09/04/recent-activities.aspx</link><pubDate>Thu, 03 Sep 2009 23:08:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1720570</guid><dc:creator>skeet</dc:creator><slash:comments>15</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1720570</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1720570</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2009/09/04/recent-activities.aspx#comments</comments><description>&lt;p&gt;It&amp;#39;s been a little while since I&amp;#39;ve blogged, and quite a lot has been going on. In fact, there are a few things I&amp;#39;d have blogged about already if it weren&amp;#39;t for &amp;quot;things&amp;quot; getting in the way.&lt;/p&gt;
&lt;p&gt;Rather than writing a whole series of very short blog posts, I thought I&amp;#39;d wrap them all up here...&lt;/p&gt;
&lt;h3&gt;C# in Depth: next MEAP drop available soon - Code Contracts&lt;/h3&gt;
&lt;p&gt;Thanks to everyone who gave feedback on my &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2009/08/05/tricky-decisions-code-contracts-and-parallel-extensions-in-c-in-depth-2nd-edition.aspx"&gt;writing dilemma&lt;/a&gt;. For the moment, the plan is to have a whole chapter about Code Contracts, but &lt;em&gt;not&lt;/em&gt; include a chapter about Parallel Extensions. My argument for making this decision is that Code Contracts really change the &lt;em&gt;feel&lt;/em&gt; of the code, making it almost like a language feature - and its applicability is almost ubiquitous, unlike PFX.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;may&lt;/em&gt; write a PFX chapter as a separate download, but I&amp;#39;m sensitive to those who (like me) appreciate slim books. I don&amp;#39;t want to &amp;quot;bulk out&amp;quot; the book with extra topics.&lt;/p&gt;
&lt;p&gt;The Code Contracts chapter is in the final stages before becoming available to MEAP subscribers. (It&amp;#39;s been &amp;quot;nearly ready&amp;quot; for a couple of weeks, but I&amp;#39;ve been on holiday, amongst other things.) After that, I&amp;#39;m going back to the existing chapters and revising them.&lt;/p&gt;
&lt;h3&gt;Talking in Dublin - C# 4 and Parallel Extensions&lt;/h3&gt;
&lt;p&gt;Last week I gave two talks in Dublin at &lt;a href="http://epicenter.ie/"&gt;Epicenter&lt;/a&gt;. One was on C# 4, and the other on Code Contracts and Parallel Extensions. Both are now available in a slightly odd form on the &lt;a href="http://csharpindepth.com/Talks.aspx"&gt;Talks page&lt;/a&gt; of the C# in Depth web site. I no longer write &amp;quot;formal&amp;quot; PowerPoint slides, so the downloads are for simple bullet points of text, along with silly hand-drawn slides. No code yet - I want to tidy it up a bit before including it.&lt;/p&gt;
&lt;h3&gt;Podcasting with The Connected Show&lt;/h3&gt;
&lt;p&gt;I recently recorded a &lt;a href="http://www.lyalin.com/Blog/archive/2009/09/01/connected-show-15-ndash-c-4-it-ainrsquot-that-complex.aspx"&gt;podcast episode&lt;/a&gt; with &lt;a href="http://www.connectedshow.com/"&gt;The Connected Show&lt;/a&gt;. I&amp;#39;m &amp;quot;on&amp;quot; for the second 2/3 of the show - about an hour of me blathering on about the new features of C# 4. If you can understand generic variance just by listening to me talking about it, you&amp;#39;re a smart cookie ;)&lt;/p&gt;
&lt;p&gt;(Oh, and if you like it, please express your amusement on &lt;a href="http://digg.com/microsoft/Connected_Show_15_Jon_Skeet_goes_DEEP_on_C_4_0"&gt;Digg&lt;/a&gt; / &lt;a href="http://www.dzone.com/links/connected_show_15_jon_skeet_goes_deep_on_c_40.html"&gt;DZone&lt;/a&gt; / &lt;a href="http://dotnetshoutout.com/Connected-Show-15-Jon-Skeet-goes-DEEP-on-C-40"&gt;Shout&lt;/a&gt; / &lt;a href="http://www.dotnetkicks.com/csharp/Connected_Show_15_Jon_Skeet_goes_DEEP_on_C_4_0"&gt;Kicks&lt;/a&gt;.)&lt;/p&gt;
&lt;h3&gt;Finishing up with Functional Programming for the Real World&lt;/h3&gt;
&lt;p&gt;Well, this hasn&amp;#39;t been taking much of my time recently (I bowed out of all the indexing etc!) but &lt;a href="http://manning.com/petricek"&gt;Functional Programming for the Real World&lt;/a&gt; is nearly ready to go. Hard copy should be available in the next couple of months... it&amp;#39;ll be really nice to see how it fares. Much kudos to Tomas for all his hard work - I&amp;#39;ve really just been helping out a little.&lt;/p&gt;
&lt;h3&gt;Starting on Groovy in Action, 2nd edition&lt;/h3&gt;
&lt;p&gt;No sooner does one book finish than another one starts. The &lt;a href="http://manning.com/koenig2/"&gt;second edition of Groovy in Action&lt;/a&gt; is in the works, which should prove interesting. To be honest, I haven&amp;#39;t played with Groovy much since the first edition of the book was finished, so it&amp;#39;ll be interesting to see what&amp;#39;s happened to the language in the meantime. I&amp;#39;ll be applying the same sort of spit and polish that I did in the first edition, and asking appropriately ignorant questions of the other authors.&lt;/p&gt;
&lt;h3&gt;Tech Reviewing C# 4.0 in a Nutshell&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2008/03/31/book-review-c-3-0-in-a-nutshell.aspx"&gt;I liked C# 3.0 in a Nutshell&lt;/a&gt;, and I feel honoured that Joe asked me to be a tech reviewer for the next edition, which promises to be even better. There&amp;#39;s not a lot more I can say about it at the moment, other than it&amp;#39;ll be out in 2010 - and I still feel that C# in Depth is a good companion book.&lt;/p&gt;
&lt;h3&gt;MoreLINQ now at 1.0 beta&lt;/h3&gt;
&lt;p&gt;A while ago I started the &lt;a href="http://code.google.com/p/morelinq/"&gt;MoreLINQ project&lt;/a&gt;, and it gained some developers with more time than I&amp;#39;ve got available :) Basically the idea is to add some more useful LINQ extension methods to LINQ to Object. Thanks to Atif Aziz, the first beta version has been released. This doesn&amp;#39;t mean we&amp;#39;re &amp;quot;done&amp;quot; though - just that we think we&amp;#39;ve got something useful. Any suggestions for other operators would be welcome.&lt;/p&gt;
&lt;h3&gt;Manning Pop Quiz and discounts&lt;/h3&gt;
&lt;p&gt;While I&amp;#39;m plugging books etc, it&amp;#39;s worth mentioning the &lt;a href="http://www.manning.com/popquiz/"&gt;Manning Pop Quiz&lt;/a&gt; - multiple choice questions on a wide variety of topics. Fabulous prizes available, as well as one-day discounts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monday, Sept 7th: 50% of all print books (code: pop0907)&lt;/li&gt;
&lt;li&gt;Monday, Sept 14: 50% off all ebooks&amp;nbsp; (code: pop0914)&lt;/li&gt;
&lt;li&gt;Thursday, Sept 17: $25 for C# in Depth, 2nd Edition MEAP print version (code: pop0917) + C# Pop Quiz question&lt;/li&gt;
&lt;li&gt;Monday, Sept 21: 50% off all books&amp;nbsp; (code: pop0921)&lt;/li&gt;
&lt;li&gt;Thursday, Sept 24: $12 for C# in Depth, 2nd Edition MEAP ebook (code: pop0924) + another C# Pop Quiz question&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Future speaking engagements&lt;/h3&gt;
&lt;p&gt;On September 16th I&amp;#39;m going to be speaking to &lt;a href="http://edgeug.net/"&gt;Edge UG&lt;/a&gt; (formerly Vista Squad) in London about Code Contracts and Parallel Extensions. I&amp;#39;m already &lt;em&gt;very&lt;/em&gt; much looking forward to the &lt;a href="http://stackoverflow.carsonified.com/events/london/"&gt;Stack Overflow DevDays London conference&lt;/a&gt; on October 28th, at which I&amp;#39;ll be talking about how humanity has screwed up computing.&lt;/p&gt;
&lt;h3&gt;Future potential blog posts&lt;/h3&gt;
&lt;p&gt;Some day I may get round to writing about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Revisiting StaticRandom with ThreadLocal&amp;lt;T&amp;gt;&lt;/li&gt;
&lt;li&gt;Volatile doesn&amp;#39;t mean what I thought it did&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;#39;s a lot more writing than coding in that list... I&amp;#39;d like to spend some more time on &lt;a href="http://code.google.com/p/minibench/"&gt;MiniBench&lt;/a&gt; at some point, but you know what deadlines are like.&lt;/p&gt;
&lt;p&gt;Anyway, that&amp;#39;s what I&amp;#39;ve been up to and what I&amp;#39;ll be doing for a little while...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1720570" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/General/default.aspx">General</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Books/default.aspx">Books</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_+4/default.aspx">C# 4</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Parallelisation/default.aspx">Parallelisation</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Stack+Overflow/default.aspx">Stack Overflow</category></item><item><title>OS Jam at Google London: C# 4 and the DLR</title><link>http://msmvps.com/blogs/jon_skeet/archive/2009/06/19/os-jam-at-google-london-c-4-and-the-dlr.aspx</link><pubDate>Fri, 19 Jun 2009 16:50:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695865</guid><dc:creator>skeet</dc:creator><slash:comments>19</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1695865</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1695865</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2009/06/19/os-jam-at-google-london-c-4-and-the-dlr.aspx#comments</comments><description>&lt;p&gt;Last night I presented for the first time at the &lt;a href="http://osjam.appspot.com/"&gt;Google Open Source Jam&lt;/a&gt; at our offices in London. The room was packed, but only a very few attendees were C# developers. I know that C# isn&amp;#39;t the most popular language on the Open Source scene, but I was still surprised there weren&amp;#39;t more people using C# for their jobs and hacking on Ruby/Python/etc at night.&lt;/p&gt;
&lt;p&gt;All the talks at OSJam are just 5 minutes long, with 2 minutes for questions. I&amp;#39;m really not used to this format, and felt extremely rushed... however, it was still a lot of fun. I used a somewhat different approach to my slides than the normal &amp;quot;bullet points in PowerPoint&amp;quot; - and as it was only short, I thought I might as well effectively repeat the presentation here in digital form. (Apologies if the images are an inconvenient size for you. I tried a few different ones, and this seemed about right. Comments welcome, as I may do a similar thing in the future.)&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image001" border="0" alt="First slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image001.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;Introductory slide. Colleagues forced me to include the &lt;a href="http://askjonskeet.com"&gt;askjonskeet.com&lt;/a&gt; link. &lt;/p&gt;
&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image002" border="0" alt="Second slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image002.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;.NET isn&amp;#39;t Open Source. You can &lt;a href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx"&gt;debug through a lot of the source code&lt;/a&gt; for the framework if you agree to a &amp;quot;reference licence&amp;quot;, but it&amp;#39;s not quite the same thing.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image003" border="0" alt="Third slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image003.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;.NET isn&amp;#39;t Open Source, but the DLR is. And IronRuby. And IronPython. Yay!&lt;/p&gt;
&lt;p&gt;And of course &lt;a href="http://mono-project.com"&gt;Mono&lt;/a&gt;&amp;nbsp;is Open Source: the DLR and Mono&amp;nbsp;play nicely together, and the Mono team is hoping to implement the new C# 4.0 features for the 2.8 release in roughly the same timeframe as Microsoft.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image004" border="0" alt="Fourth slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image004.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;This is what .NET 4.0 will look like. The DLR will be included in it, despite being open source. IronRuby and IronPython aren&amp;#39;t included, but depend heavily on the DLR. (Currently available versions allow you to use a &amp;quot;standalone&amp;quot; DLR or the one in .NET 4.0b1.) &lt;/p&gt;
&lt;p&gt;C# doesn&amp;#39;t really depend on the DLR except for its handling of &lt;code&gt;dynamic&lt;/code&gt;. C# is a statically typed language, but C# 4.0 has a new static type called &lt;code&gt;dynamic&lt;/code&gt; which you can do just about anything with. (This got a laugh, despite being a simple and mostly accurate summary of the dynamic typing support in C# 4.0.)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image005" border="0" alt="Fifth slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image005.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;The fundamental point of the DLR is to handle &lt;em&gt;call sites&lt;/em&gt; - decide what to do dynamically with little bits of code. Oh, and do it quickly. That&amp;#39;s what the caches are for. They&amp;#39;re really clever - particularly the L0 cache which compiles rules (about the context in which a particular decision is valid) into IL via dynamic methods. Awesome stuff.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m sure the DLR does many other snazzy things, but this feels like it&amp;#39;s the core part of it. &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image006" border="0" alt="Sixth slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image006.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;At execution time, the relevant &lt;em&gt;binder&lt;/em&gt; is used to work out what a call site should actually do. Unless, that is, the call has a target which implements the shadowy &lt;code&gt;IDynamicMetaObjectProvider&lt;/code&gt; interface (winner of &amp;quot;biggest mouthful of a type name&amp;quot; prize, 2009) - in which case, the object is asked to handle the call. Who knows what it will do?&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image007" border="0" alt="Seventh slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image007.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;
&lt;p&gt;Beautifully syntax-highlighted C# 4.0 source code showing the &lt;code&gt;dynamic&lt;/code&gt; type in action. The method calls on lines 2 and 3 are both dynamic, even though in the latter case it&amp;#39;s just using a static method. Which overload will it pick? It all depends on the type of the actual value at execution time.&lt;/p&gt;
&lt;p&gt;If I&amp;#39;d had more time, I&amp;#39;d have demonstrated how the C# compiler preserves the static type information it knows at compile time for the execution time binder to use. This is very cool, but would take far too long to demonstrate in this talk - especially to a bunch of non-C# developers.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="center"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Image008" border="0" alt="Eighth slide" src="http://pobox.com/~skeet/csharp/blogfiles/osjam_20090618/Image008.jpg" width="500" height="360" /&gt;&lt;/td&gt;
&lt;td valign="center"&gt;There were a couple of questions, but I can&amp;#39;t remember them offhand. Someone asked me afterwards about how all this worked on non-.NET implementations (i.e. Mono, basically). I gather the DLR itself works, but I don&amp;#39;t know whether C# code compiled in the MS compiler will work at the moment - it embeds references to binder types in Microsoft.CSharp.dll, and I don&amp;#39;t know what the story is about that being supported on Mono.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is definitely the format I want to use for future presentations. It&amp;#39;s fun to write, fun to present, and I&amp;#39;m sure the &amp;quot;non-professionalism&amp;quot; of it makes it a lot more interesting to watch. Although it&amp;#39;s slower to create text-like slides (such as the first and the last one) this way, the fact that I don&amp;#39;t need to find clip-art or draw boxes with painful user interfaces is a definite win - especially as I&amp;#39;m going to try to be much more image-biased from now on. (I don&amp;#39;t want people reading slides while I&amp;#39;m talking - they should be listening, otherwise it&amp;#39;s just pointless.)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695865" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_+4/default.aspx">C# 4</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Google/default.aspx">Google</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>List of talks now up on C# in Depth site</title><link>http://msmvps.com/blogs/jon_skeet/archive/2008/12/04/list-of-talks-now-up-on-c-in-depth-site.aspx</link><pubDate>Thu, 04 Dec 2008 22:28:38 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655843</guid><dc:creator>skeet</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1655843</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1655843</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2008/12/04/list-of-talks-now-up-on-c-in-depth-site.aspx#comments</comments><description>&lt;p&gt;I think I&amp;#39;ve now done enough public speaking to make it worth having a page with resources etc, so I&amp;#39;ve &lt;a href="http://csharpindepth.com/Talks.aspx"&gt;added it to the C# in Depth site&lt;/a&gt;. Where feasible, it will include slides, code and videos (and anything else suitable, really) from various events.&lt;/p&gt; &lt;p&gt;I haven&amp;#39;t got any more booked at the moment, although I&amp;#39;ve had a couple of invitations I really ought to sort out at some point. A couple of points of interest:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;I&amp;#39;ve included &amp;quot;before, during and after&amp;quot; code for the &amp;quot;LINQ to Objects in 60 minutes&amp;quot; presentation at DDD. The &amp;quot;before&amp;quot; code is just unit tests and shells of signatures etc. The &amp;quot;during&amp;quot; code is what I was able to get done during the event. The &amp;quot;after&amp;quot; code is a bit more complete - basically I implemented everything I already had unit tests for.&lt;/li&gt; &lt;li&gt;I&amp;#39;ve included a brief summary of each of the Copenhagen videos. The last two talks are the ones with the most &amp;quot;new&amp;quot; material for C# in Depth readers, although there are a few other nuggets scattered around the place. (Fun tip: if you download the wmv files, you can watch at 1.5x speed. It makes it look like I can type &lt;em&gt;really&lt;/em&gt; fast!)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The video from DDD isn&amp;#39;t up yet, but when it is I&amp;#39;ll edit the page.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655843" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>Copenhagen C# talk videos now up</title><link>http://msmvps.com/blogs/jon_skeet/archive/2008/11/19/copenhagen-c-talk-videos-now-up.aspx</link><pubDate>Wed, 19 Nov 2008 07:17:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1654528</guid><dc:creator>skeet</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1654528</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1654528</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2008/11/19/copenhagen-c-talk-videos-now-up.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;The videos from my &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2008/10/30/returning-from-copenhagen.aspx"&gt;one day talk&lt;/a&gt; about C# in Copenhagen are now on the &lt;a href="http://www.msdncommunity.dk/udviklere/webcasts"&gt;MSDN community site&lt;/a&gt;. There are eight sessions, varying between about 25 minutes and 50 minutes in length. I haven&amp;#39;t had time to watch them yet, but when I do I&amp;#39;ll submit brief summaries so you can quickly get to the bits you&amp;#39;re most interested in. (As far as I&amp;#39;m aware, they&amp;#39;re only available via Silverlight, which I realise isn&amp;#39;t going to be convenient for everyone.)&lt;/p&gt; &lt;p&gt;Feedback is very welcome.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1654528" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/CSharpDevCenter/default.aspx">CSharpDevCenter</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/CSharpDev/default.aspx">CSharpDev</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item><item><title>November 19th: London .NET User Group, Push LINQ!</title><link>http://msmvps.com/blogs/jon_skeet/archive/2008/11/07/november-19th-london-net-user-group-push-linq.aspx</link><pubDate>Fri, 07 Nov 2008 21:51:23 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1653448</guid><dc:creator>skeet</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/rsscomments.aspx?PostID=1653448</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/jon_skeet/commentapi.aspx?PostID=1653448</wfw:comment><comments>http://msmvps.com/blogs/jon_skeet/archive/2008/11/07/november-19th-london-net-user-group-push-linq.aspx#comments</comments><description>&lt;p&gt;On November 19th, I&amp;#39;ll be speaking at the &lt;a href="http://dnug.org.uk/"&gt;London .NET User Group&lt;/a&gt; about Push LINQ. I was quite pleasantly surprised by being able to explain it to some extent in Copenhagen, and this evening will be entirely about Push LINQ, so I&amp;#39;ll be able to go into a lot more detail. &lt;a href="http://skillsmatter.com/"&gt;Skills Matter&lt;/a&gt; will be hosting the event (near Farringdon station). It starts at 6.30pm, and &lt;a href="http://skillsmatter.com/event/open-source-dot-net/london-dot-net-ug-meeting"&gt;registration is now open&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Should be fun. Please come and heckle.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1653448" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/jon_skeet/archive/tags/Speaking+engagements/default.aspx">Speaking engagements</category></item></channel></rss>