<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/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>Rick Minerich's Development Wonderland : fp</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx</link><description>Tags: fp</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>F# and You! - New Hampshire User’s Group and Beyond</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx</link><pubDate>Mon, 26 Oct 2009 16:24:49 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19518</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19518.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19518</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19518</wfw:comment><description>&lt;p&gt;I’ve been working for a while on a new presentation which I was finally able to give last week at the &lt;a href="http://www.nhdn.com/DNN/"&gt;New Hampshire .NET User Group&lt;/a&gt;.&amp;#160; &lt;em&gt;F# and You!&lt;/em&gt; focuses on painting the big picture about F# instead of the off-putting details like having to learn new syntax.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/rickm/functional_5555AB42.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="functional" border="0" alt="functional" src="http://www.atalasoft.com/cs/blogs/rickm/functional_thumb_6BAB5087.png" width="504" height="379" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For this new presentation I start by discussing the adoption of functional programming on other platforms by using Scala, Erlang and Haskell as examples.&amp;#160; I then continue on to how the algorithmic programmers are moving to functional languages while UI developers are moving towards declarative. &lt;/p&gt;  &lt;p&gt;This then naturally raises the question of why programmers would choose a specific style of programming for a specific task.&amp;#160; The answer, of course, is that when you work close to a domain you can build things more quickly and with a lower error rate.&lt;/p&gt;  &lt;p&gt;This then transitions easily into the specific beneficial properties of functional programming (and F#).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;General Overview:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The Separation of UI and Back End&lt;/li&gt;    &lt;li&gt;What is Functional Programming? (Functional Concepts)&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Pure functions&lt;/li&gt;      &lt;li&gt;Immutability&lt;/li&gt;      &lt;li&gt;Lambda Expressions&lt;/li&gt;      &lt;li&gt;Higher Order Functions&lt;/li&gt;      &lt;li&gt;Recursion&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The Benefits of Functional Programming&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Code Compression&lt;/li&gt;      &lt;li&gt;Parallelism&lt;/li&gt;      &lt;li&gt;Robustness&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Proof is in the Pudding&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;TrueSkill&lt;/li&gt;      &lt;li&gt;Grange Insurance Rating Engine&lt;/li&gt;      &lt;li&gt;MSN adCenter&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Wrap-up&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’ve also found that it is useful to show the latest circulating version of the &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/04/25/10-hours-in-fsharp-exploring-concurrency-through-an-ant-colony-simulation.aspx"&gt;Ant Colony simulation I wrote over a year ago&lt;/a&gt;.&amp;#160; I found a version in &lt;a href="http://blogs.msdn.com/dsyme/archive/2009/10/10/f-tutorial-code-and-slides-jaoo-2009-edition.aspx"&gt;Don Syme’s JAOO Talk code samples&lt;/a&gt; but am not sure who has been keeping it up to date.&amp;#160; A big thanks to whoever that person is.&amp;#160; It provides some sweet eye candy to dull the bitterness of the technical Functional Concepts section.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Planned (and Past) “F# and You!” Locations:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;11/10/2009 – &lt;a href="http://ctdotnet.org/default.aspx"&gt;CT .NET Developers Group&lt;/a&gt; (Farmington, CT)      &lt;br /&gt;10/28/2009 – &lt;a href="http://www.technologyusersgroup.org/"&gt;Technology Users Group&lt;/a&gt; (Charleston, SC)      &lt;br /&gt;10/21/2009 – &lt;a href="http://www.nhdn.com/DNN/"&gt;New Hampshire .NET User Group&lt;/a&gt; (Nashua, NH)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;See the new &lt;a href="http://fsug.org/OtherEvents/tabid/67/Default.aspx"&gt;Other Events&lt;/a&gt; section of our &lt;a href="http://fsug.org/Home/tabid/37/Default.aspx"&gt;F# User Group site&lt;/a&gt; for information on other upcoming F# talks.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Downloads:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/files/folders/19516/download.aspx"&gt;Latest Slides&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.atalasoft.com/cs/files/folders/19517/download.aspx"&gt;VS2008 Code Samples&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;subject=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19518" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Code+Camp/default.aspx">Code Camp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/talks/default.aspx">talks</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional+programming/default.aspx">functional programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/parallelism/default.aspx">parallelism</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/erlang/default.aspx">erlang</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/robustness/default.aspx">robustness</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/code+compression/default.aspx">code compression</category></item><item><title>Image Processing as Sets of Transformations</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx</link><pubDate>Tue, 28 Apr 2009 00:21:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:18366</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/18366.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=18366</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=18366</wfw:comment><description>&lt;p&gt;In the image processing world, like most computational problems, we often think our work is composed of only two basic ideas: representation and transformation.&amp;nbsp; Of course, one may have many layers of both representations of transformations and transformations of representations which can make things appear quite complex at times. &lt;/p&gt;  &lt;p&gt;However,&amp;nbsp; the problem is much more simple than it appears.&amp;nbsp; This is because a representation can be considered as a transformation from a zero or identity state.&amp;nbsp; Thus, in writing a symbolic language for image processing, we are left with only a single idea to consider:&amp;nbsp; transformations.&amp;nbsp; By composting layers of transformations we can apply image processing techniques in way which is not only bidirectional and platform agnostic but also comes along with a host of other benefits.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Let us consider a simplified example of processing an image:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1) We read in a file (representation) and use a codec (transformation) to convert it into a format understood by our API (representation).&lt;/p&gt;  &lt;p&gt;2) We then perform some type of algorithm on that data (transformation) which results in some type of output (representation).&lt;/p&gt;  &lt;p&gt;3) Finally, via another codec (transformation), another file is saved to disk (representation). &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;In most cases there are a great number of intermediate representations.&amp;nbsp; Each is a full copy of the previous iteration with whatever changes have been so far applied.&amp;nbsp; Essentially, the same information is copied over and over again in memory.&amp;nbsp; We do allow for some kinds of in-place processing, however, this is bad as when the operation has been completed, the previous representation has been destroyed.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Instead, what if we batched up sets of transformations?&amp;nbsp; This could have many benefits:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1) The most obvious benefit is that of parallelization.&amp;nbsp; Even at the simplest level of functional composition, these transformations could be handed off to a cluster for asynchronous processing or saved for a later batch processing job.&lt;/p&gt;  &lt;p&gt;2) With an intermediate symbolic transformation language, processing algorithms could potentially be combined and reduced to produce a single transformation out of many.&amp;nbsp; This would significantly reduce the processing overhead as well as the number of intermediate memory representations.&lt;/p&gt;  &lt;p&gt;3) An intermediate symbolic language which encompassed both codec and processing may make it possible to push the processing transformation through the codec transformation and in so doing no longer need to have any intermediate memory representation.&amp;nbsp; This could provide significant memory and processing speed time benefit.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;4) The intermediate symbolic language could be saved into the files themselves thus removing the need for the codec to be present on the end machine.&amp;nbsp; Admittedly, the user would also need the image language interpreter. &lt;/p&gt;  &lt;p&gt;5) Instead of applying simple image processing algorithms to an image, the symbolic representation could be appended to the end of the file.&amp;nbsp; This would be quite similar to layers in practice.&amp;nbsp; In this way it would be possible to view the image at all stages of transformation. &lt;/p&gt;  &lt;p&gt;6) For large or proprietary transformations, the representation could be kept on the internet and either be downloaded or, in the case where the owner did not want to expose their algorithm, a flattened representation could be sent out and a processing delta could be sent back.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Conclusion &lt;/b&gt;&lt;br&gt;&lt;/p&gt;  &lt;p&gt;Of course, when I speak of data I don’t only mean the image itself.&amp;nbsp; This technique could also be applied to many classes of data or algorithm.&amp;nbsp; Most notably for us, image metadata.&lt;/p&gt;  &lt;p&gt;My initial goal is to build a basic codec representation along with some simple transformations.&amp;nbsp; Currently, I am researching bidirectional, reversible and declarative languages as examples.&amp;nbsp; With F# as a base language I believe it will be possible to build something portable to other ML variants. &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;subject=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;title=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;title=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;title=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;title=Image+Processing+as+Sets+of+Transformations&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18366" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/programming/default.aspx">programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/simplicity/default.aspx">simplicity</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/ideas/default.aspx">ideas</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/research/default.aspx">research</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/abstract/default.aspx">abstract</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/image+processing/default.aspx">image processing</category></item><item><title>F# for Testing and Analysis at Code Camp 11 New England</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx</link><pubDate>Fri, 27 Mar 2009 22:36:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17818</guid><dc:creator>RickM</dc:creator><slash:comments>3</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17818.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17818</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17818</wfw:comment><description>&lt;p&gt;At this Saturday’s Code Camp I’ll be giving a brand new presentation on using F#.&amp;#160; The goal of this presentation is to have those attending leave with an idea of &lt;strong&gt;what F# can help them achieve today&lt;/strong&gt; as well as instill a desire to know more.&amp;#160; This post contains my presentation materials as well as links to additional information on the topics covered.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;font size="4"&gt;Presentation Details &lt;/font&gt;&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;F# for Testing and Analytics&lt;/strong&gt; will be held in the &lt;strong&gt;TBC&lt;/strong&gt; (Technical Briefing Center) at &lt;strong&gt;10:30am&lt;/strong&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cbowen/archive/2009/03/23/code-camp-11-the-schedule.aspx"&gt;New England Code Camp 11 Information&lt;/a&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:60cbd848-f0c1-4d46-acd8-db07498ae2eb" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;p&gt;&lt;div&gt;Download Presentation Slides: &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/F_forTestingandAnalysis_004EBB79.pdf" target="_self"&gt;F# for Testing and Analysis.pdf&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;I’ve been thinking quite a lot lately &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;on the best way to get developers excited about F#&lt;/a&gt;.&amp;#160; By focusing less on the language’s details and more on what the language can help achieve I hope to impress upon those attending why F# is worth the effort.&amp;#160; The preliminary structure of the talk is as follows::&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Introduction&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Announcing the New England F# User Group&amp;#160; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Why F#?&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Time Savings &lt;/li&gt;        &lt;li&gt;Readability &lt;/li&gt;        &lt;li&gt;Code Exploration &lt;/li&gt;        &lt;li&gt;Robust Software &lt;/li&gt;        &lt;li&gt;Power &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;F# Testing Toolbox&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;xUnit.NET &lt;/li&gt;        &lt;li&gt;TestDriven.NET and NCover &lt;/li&gt;        &lt;li&gt;NaturalSpec &lt;/li&gt;        &lt;li&gt;FsCheck &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;A Real World Example&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Exploring the Problem Space &lt;/li&gt;        &lt;li&gt;Collect, Analyze, Report &lt;/li&gt;        &lt;li&gt;Visualizing Data &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Presentation Influences      &lt;br /&gt;&lt;/strong&gt;John Hughes’s Paper: &lt;a href="http://www.math.chalmers.se/~rjmh/Papers/whyfp.html"&gt;Why Functional Programming Matters&lt;/a&gt;     &lt;br /&gt;John Hughes’s Talk: &lt;a href="http://video.google.com/videoplay?docid=4655369445141008672"&gt;FP – A Secret Weapon for Software Testing&lt;/a&gt;     &lt;br /&gt;Matthew Podwysocki’s 7 Part Series: &lt;a href="http://weblogs.asp.net/podwysocki/archive/2009/01/29/functional-programming-unit-testing-part-7.aspx"&gt;Functional Programming Unit Testing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;font size="4"&gt;Announcing the New England F# User Group&lt;/font&gt;&amp;#160; &lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;I’m proud to announce that &lt;strong&gt;we will be holding our first New England F# User Group meeting on Monday April 6th, from 6:30pm to 8:30pm&lt;/strong&gt;.&amp;#160; It will be held at the aptly named &lt;a href="http://research.microsoft.com/en-us/labs/newengland/"&gt;Microsoft NERD center&lt;/a&gt;.&amp;#160; I hope to see you there.&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Visit the &lt;a href="http://fsug.org/"&gt;F# User Group Homepage&lt;/a&gt; for more information.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;font size="3"&gt;xUnit.NET&lt;/font&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“About a year ago it became clear to myself and Brad Wilson that there were some very clear patterns of success (and failure) with the tools we were using for writing tests. Rather than repeating guidance about &amp;quot;do X&amp;quot; or &amp;quot;don't do Y&amp;quot;, it seemed like it was the right time to reconsider the framework itself and see if we could codify some of those rules.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.NET Homepage&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Learn More about xUnit.NET      &lt;br /&gt;&lt;/strong&gt;Matthew Podwysocki’s &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2008/05/29/the-unit-testing-story-in-f-revisited.aspx"&gt;The Unit Testing Story in F# Revisited&lt;/a&gt;     &lt;br /&gt;Jim Burger’s &lt;a href="http://nervoustych.com/blog/PermaLink,guid,fc3a3974-2284-43e1-a58e-f8a6af4cca4d.aspx"&gt;Unit testing in F# with xUnit.NET&lt;/a&gt;     &lt;br /&gt;Harry Pierson’s &lt;a href="http://devhawk.net/2007/12/12/Practical+F+Parsing+Unit+Testing.aspx"&gt;Practical F# Parsing: Unit Testing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;font size="3"&gt;TestDriven.NET and NCover&lt;/font&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“TestDriven.NET is a zero friction unit testing add-in for Microsoft Visual Studio .NET. The current release of TestDriven.NET supports multiple unit testing frameworks including NUnit, MbUnit and MS Team System and is fully compatible with all versions of the .NET Framework.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; &lt;/a&gt;&lt;a href="http://testdriven.net/"&gt;TestDriven.NET Homepage&lt;/a&gt; (Includes a free version of NCover)   &lt;br /&gt;&lt;a href="http://www.ncover.com/"&gt;NCover Homepage&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Learn More about TestDriven.NET and NCover      &lt;br /&gt;&lt;/strong&gt;Matthew Podwysocki’s &lt;a href="http://weblogs.asp.net/podwysocki/archive/2008/12/04/f-testdriven-net-xunit-net-win.aspx"&gt;F# + TestDriven.NET + xUnit = Win&lt;/a&gt;&amp;#160; &lt;br /&gt;Matthew Podwysocki’s &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2008/12/21/functional-programming-unit-testing-part-4.aspx"&gt;FP Unit Testing Part 4 – Code Coverage&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;font size="3"&gt;NaturalSpec&lt;/font&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“The idea of NaturalSpec is to give domain experts the possibility to express their scenarios directly in compilable Unit Test scenarios by using a Domain-specific language (DSL) for Unit Tests. NaturalSpec is completely written in F# – but you don’t have to learn F# to use it. You don’t even have to learn programming at all.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; &lt;/a&gt;&lt;a href="http://code.google.com/p/natural/"&gt;NaturalSpec Homepage&lt;/a&gt;&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Learn More about NaturalSpec      &lt;br /&gt;&lt;/strong&gt;Steffen Forkmann’s &lt;a href="http://www.navision-blog.de/2009/02/23/getting-started-with-naturalspec/"&gt;“Getting Started” with NaturalSpec&lt;/a&gt;     &lt;br /&gt;Steffen Forkmann’s &lt;u&gt;&lt;font color="#0101df"&gt;&lt;a href="http://www.navision-blog.de/2009/03/01/testing-quicksort-with-naturalspec/"&gt;Testing QuickSort with NaturalSpec&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;     &lt;br /&gt;Steffen Forkmann’s &lt;a href="http://www.navision-blog.de/2009/02/23/using-naturalspec-to-create-spec-for-c-projects/"&gt;Using NaturalSpec to create a spec for C# projects&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;font size="3"&gt;FsCheck&lt;/font&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“FsCheck is a tool for testing .NET programs automatically. The programmer provides a specification of the program, in the form of properties which functions, methods or objects should satisfy, and FsCheck then tests that the properties hold in a large number of randomly generated cases.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; &lt;/a&gt;&lt;a href="http://www.codeplex.com/fscheck"&gt;FsCheck Homepage&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Learn More about FsCheck      &lt;br /&gt;&lt;/strong&gt;Claudio Cherubino’s &lt;a href="http://www.fsharp.it/2008/12/28/random-testing-in-f-with-fscheck/"&gt;Random testing in F# with FsCheck&lt;/a&gt;     &lt;br /&gt;Matthew Podwysocki’s &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2008/12/11/functional-programming-unit-testing-part-2.aspx"&gt;FP Unit Testing Part 2 – QuickCheck and FsCheck&lt;/a&gt;     &lt;br /&gt;Kurt Schelfthout’s FsChecking dnAnalytics &lt;a href="http://fortysix-and-two.blogspot.com/2009/02/fschecking-dnanalytics.html"&gt;Part 1&lt;/a&gt;, &lt;a href="http://fortysix-and-two.blogspot.com/2009/02/fschecking-dnanalytics-part-2.html"&gt;Part 2&lt;/a&gt; and &lt;a href="http://fortysix-and-two.blogspot.com/2009/03/fschecking-dnanalytics-part-3.html"&gt;Part 3&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;font size="3"&gt;FsStory&lt;/font&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“FsStory is a library for writing executable user stories in F#. FsStory enables the developer to write user story scenarios (in Given/When/Then form) in F# code.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; &lt;/a&gt;&lt;a href="http://www.codeplex.com/fsstory"&gt;FsStory Homepage&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;Learn More about FsStory      &lt;br /&gt;&lt;/strong&gt;Gustaf Nilsson Kotte’s &lt;a href="http://coffeedrivendevelopment.blogspot.com/2009/02/fluent-language-in-fsstory.html"&gt;Fluent language in FsStory&lt;/a&gt;     &lt;br /&gt;Gustaf Nilsson Kotte’s &lt;a href="http://coffeedrivendevelopment.blogspot.com/2009/02/announce-fsstory-executable-stories-in.html"&gt;FsStory, executable stories in F#&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx&amp;amp;;subject=F%23+for+Testing+and+Analysis+at+Code+Camp+11+New+England" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx&amp;amp;;title=F%23+for+Testing+and+Analysis+at+Code+Camp+11+New+England" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx&amp;amp;title=F%23+for+Testing+and+Analysis+at+Code+Camp+11+New+England" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx&amp;amp;;title=F%23+for+Testing+and+Analysis+at+Code+Camp+11+New+England" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx&amp;amp;;title=F%23+for+Testing+and+Analysis+at+Code+Camp+11+New+England&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/27/f-for-testing-and-analysis-at-code-camp-11-new-england.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17818" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Code+Camp/default.aspx">Code Camp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/conference/default.aspx">conference</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/beautiful+code/default.aspx">beautiful code</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/testing/default.aspx">testing</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsug/default.aspx">fsug</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional+programming/default.aspx">functional programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/presentations/default.aspx">presentations</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/code+analysis/default.aspx">code analysis</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/xUnit.NET/default.aspx">xUnit.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/NaturalSpec/default.aspx">NaturalSpec</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/FsCheck/default.aspx">FsCheck</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/NCover/default.aspx">NCover</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/FsStory/default.aspx">FsStory</category></item><item><title>Discoveries This Week 03/20/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx</link><pubDate>Sun, 22 Mar 2009 20:09:43 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17764</guid><dc:creator>RickM</dc:creator><slash:comments>6</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17764.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17764</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17764</wfw:comment><description>&lt;p&gt;This week there seems to be quite a bit of video and audio content to share.&amp;#160; We have a dramatic depiction of the benefits of Units of Measure, Luke Hoban on F#’s feature, Ted Neward talks about F# under the hood and finally a discussion on operator type inference. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Video Blog – &lt;a&gt;Could F# have saved the Mars Climate Orbiter?&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;A fantastic example of how static dimensional analysis of scalar values could prevent an entire class of bugs.&amp;#160;&amp;#160; In the past, &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/10/03/avoiding-ambiguous-types-in-c.aspx"&gt;I’ve talked about what a huge fan I am of the Units of Measure package for F#&lt;/a&gt;.&amp;#160; I’m glad that others also see how revolutionary units of measure are.&amp;#160; &lt;/p&gt;  &lt;p&gt;Would you want to work in a building or live in a house in which the engineers who built it did not keep track of units?&amp;#160; I don’t think anyone would answer yes.&amp;#160; Similarly, we should not entrust our lives or livelihoods to software in which these very same things are not kept track of.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Podcast – &lt;a href="http://www.se-radio.net/podcast/2009-03/episode-129-f-luke-hoban"&gt;SER Episode 129 - F# with Luke Hoban&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this podcast Luke Hoban, the F# program manager, discusses about various aspects of F#.&amp;#160; &lt;/p&gt;  &lt;p&gt;Some highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Mutability comes along with .NET Framework support.&lt;/li&gt;    &lt;li&gt;Statically Typed means strong guarantees and so robust systems.&lt;/li&gt;    &lt;li&gt;FP design in the small for concurrency&lt;/li&gt;    &lt;li&gt;OO design in the large for scalability&lt;/li&gt;    &lt;li&gt;Explorative programming via interactive window&lt;/li&gt;    &lt;li&gt;Influenced heavily by Haskell&lt;/li&gt;    &lt;li&gt;FP as a technique, not a class of languages&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Video Blog – &lt;a href="http://www.bestechvideos.com/2009/03/18/dnrtv-show-136-ted-neward-introduces-f"&gt;dnrTV Show #136: Ted Neward Introduces F#&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://blogs.tedneward.com/"&gt;Ted Neward&lt;/a&gt; gives an in-depth presentation on both how F# works under the hood and the general benefits that stem from FP in general.&amp;#160; The examples used are simple but Ted covers them in a very exhaustive way.&lt;/p&gt;  &lt;p&gt;Beyond the language and concepts therein, he also has a number of insightful comments about teaching people to use F#.&amp;#160; In particular the idea that F# syntax will be easy to teach but functional programming technique will take years really struck home with me.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog – Kalani Thielen’s &lt;a href="http://blog.lab49.com/archives/2895"&gt;The F# overload-o-phone&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In his post Kalani points out a small but significant logical inconsistency in F#’s type inference system.&amp;#160; The issue seems to stem from the way type inference is handled for basic operators.&amp;#160; Instead of working generically, they each have default types.&lt;/p&gt;  &lt;p&gt;From his post:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;gt; (+);;     &lt;br /&gt;val it : (int -&amp;gt; int -&amp;gt; int)      &lt;br /&gt;&amp;gt; 3.2 + 5.4;;      &lt;br /&gt;val it : float = 8.6      &lt;br /&gt;&amp;gt; let twice x = x + x;;      &lt;br /&gt;&amp;gt; twice 9.4;;      &lt;br /&gt;stdin(2,5): error FS0001: This expression has type      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; float but is here used with type int.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;To get around this, he then goes on to build a function which takes an operator and both arguments.&amp;#160; However, this workaround is completely unnecessary.&amp;#160; You need only to annotate the function’s input and it works without issue.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;gt; let twice (x: double) = x + x     &lt;br /&gt;val twice : double –&amp;gt; double      &lt;br /&gt;&amp;gt; twice 9.4;;      &lt;br /&gt;val it : double = 18.8&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, it’s important to note that this version of the twice function won’t accept an integer.&amp;#160; &lt;a href="http://cs.hubfs.net/forums/thread/5970.aspx"&gt;In fact, it was a conscious design decision to disallow function overloading in F#&lt;/a&gt;.&amp;#160; In both F# and C# all kinds of overloading must be qualified by type.&amp;#160; That is, type methods support argument overloading but free floating functions do not.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx&amp;amp;;subject=Discoveries+This+Week+03%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx&amp;amp;;title=Discoveries+This+Week+03%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx&amp;amp;title=Discoveries+This+Week+03%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx&amp;amp;;title=Discoveries+This+Week+03%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx&amp;amp;;title=Discoveries+This+Week+03%2f20%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/22/discoveries-this-week-03-20-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17764" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/oo/default.aspx">oo</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/optimization/default.aspx">optimization</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/microsoft+research/default.aspx">microsoft research</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/units+of+measure/default.aspx">units of measure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/type+inference/default.aspx">type inference</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/types/default.aspx">types</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/units/default.aspx">units</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/overloading/default.aspx">overloading</category></item><item><title>As a FP Ambassador - F# for Testing and Analysis at Code Camp 11</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx</link><pubDate>Thu, 19 Mar 2009 16:00:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17731</guid><dc:creator>RickM</dc:creator><slash:comments>5</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17731.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17731</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17731</wfw:comment><description>&lt;p&gt;Over the last six months I’ve given variations on the same F# presentation on six separate occasions.&amp;nbsp; Each time I’ve gotten a similar response: enthusiasm from a small percentage of the audience and glazed-over stares from the majority.&amp;nbsp; In retrospect it seems obvious that I’ve been missing one of the major tenets of making great presentations, know thy audience.&amp;nbsp; It’s time for a new approach.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Information Overload&lt;/h3&gt;  &lt;p&gt;When thinking about how to get people excited about F# &lt;b&gt;I immediately jumped to the learning format that I found the most exciting&lt;/b&gt;.&amp;nbsp; There was no time in my life when I was as overwhelmed by information like I was working on my Computer Science degree at UMass Amherst and I loved every minute of it.&amp;nbsp; When I started out, it seemed that using a university lecture as a model was the best possible format for sharing this kind of information.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;I’ve since come to realize that this style of soaking the audience with “a fire hose of information” is a poor format for Code Camps.&lt;/b&gt;&amp;nbsp; While using this technique, I could see people turning off one by one as they became overloaded with information.&amp;nbsp; This is not in the spirit of code camp which aims to be a much more laid back kind of experience.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;As a FP Ambassador&lt;/h3&gt;  &lt;p&gt;Let’s invert perspectives and think about what an audience member would want.&amp;nbsp; &lt;b&gt;When a person comes to a Code Camp presentation, it’s likely to be one of their first times being exposed to the topic being presented.&lt;/b&gt;&amp;nbsp; They don’t want to be taught as if they were in a classroom.&amp;nbsp; Instead, they want to be exposed to new and exciting information.&amp;nbsp; &lt;b&gt;If their interest is piqued, they will seek details later.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;So, instead of focusing on the details of F#, this new presentation will be built around the goal of instilling five key ideas to the audience:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://tryingthisagain.com/2008/04/16/c-vs-f-some-parallel-refactoring-and-generalization/"&gt;F# will save you time&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2009/01/02/functional-programming-unit-testing-part-5.aspx"&gt;F# will help you become a better programmer&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://themechanicalbride.blogspot.com/2009/01/f-sharpest-of-sharps.html"&gt;F# is beautiful&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspx"&gt;Immutability is next to godliness&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/fsharp/default.aspx"&gt;You can start using F# right now&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It must be understood that almost every Code Camp attendee will have had little or no exposure to functional programming.&amp;nbsp; &lt;b&gt;To many attendees, to be presenting on F# is to be an ambassador from the strange and nebulous functional programming world.&lt;/b&gt;&amp;nbsp; Instead of building walls of information, the goal should be to instead focus on connecting with the audience on the benefits of functional programming.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Planned Talk Structure&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Depending on an Audience Poll, Broad Concepts&lt;/li&gt;    &lt;li&gt;Testing with F#&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;nUnit Examples (as a baseline)&lt;/li&gt;      &lt;li&gt;xUnit Examples&lt;/li&gt;      &lt;li&gt;FsStory Examples&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Analysis with F# (A Real Example From Atalasoft)&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Using The F# Interactive Window To Build Tests&lt;/li&gt;      &lt;li&gt;Data Collection&lt;/li&gt;      &lt;li&gt;Visualizing Data&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Why F#?&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;More details will follow soon.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx&amp;amp;;subject=As+a+FP+Ambassador+-+F%23+for+Testing+and+Analysis+at+Code+Camp+11" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx&amp;amp;;title=As+a+FP+Ambassador+-+F%23+for+Testing+and+Analysis+at+Code+Camp+11" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx&amp;amp;title=As+a+FP+Ambassador+-+F%23+for+Testing+and+Analysis+at+Code+Camp+11" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx&amp;amp;;title=As+a+FP+Ambassador+-+F%23+for+Testing+and+Analysis+at+Code+Camp+11" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx&amp;amp;;title=As+a+FP+Ambassador+-+F%23+for+Testing+and+Analysis+at+Code+Camp+11&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/19/f-for-testing-and-analysis-at-code-camp-11.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17731" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Code+Camp/default.aspx">Code Camp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/talks/default.aspx">talks</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/beautiful+code/default.aspx">beautiful code</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/testing/default.aspx">testing</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional+programming/default.aspx">functional programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp+ambassador/default.aspx">fp ambassador</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/presentations/default.aspx">presentations</category></item><item><title>What Would You Want From a F# User Group?</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx</link><pubDate>Thu, 12 Mar 2009 13:39:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17655</guid><dc:creator>RickM</dc:creator><slash:comments>4</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17655.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17655</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17655</wfw:comment><description>&lt;p&gt;&lt;a href="http://www.scrumalliance.org/profiles/2363-michael-de-la-maza"&gt;Michael de la Maza&lt;/a&gt;, &lt;a href="http://talbottc.spaces.live.com/"&gt;Talbott Crowell&lt;/a&gt; and I are all very excited about finally getting our F# User Group off the ground.&amp;#160; However, as F# groups are currently few and far between, we are very interested in finding out what attendees would want from such a group. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Where and When?&lt;/h3&gt;  &lt;p&gt;In terms of broad time frame, we are looking at having our first meeting in April.&amp;#160; We currently have a few options open in terms of which day of the month.&amp;#160; If you are interested in attending, head on over to our &lt;a href="http://www.doodle.com/v4hxr9fnzsz865pr"&gt;doodle poll&lt;/a&gt; and tell us which days would be best for you. &lt;/p&gt;  &lt;p&gt;The group will be held at the &lt;a href="http://blogs.msdn.com/cbowen/archive/2009/02/16/learn-about-the-new-england-research-development-nerd-center.aspx"&gt;new Microsoft NERD center in Cambridge&lt;/a&gt;, Massachusetts.&amp;#160; A big thanks to &lt;a href="http://blogs.msdn.com/cbowen/"&gt;Chris Bowen&lt;/a&gt; for helping us find such an exciting place to hold our meetings.&amp;#160; I know that I’m not the only one hoping that some of the &lt;a href="http://microsoftcambridge.com/People/tabid/56/Default.aspx"&gt;Microsoft research NERDs&lt;/a&gt; will have time to come down to our meetings.&amp;#160; &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Online Content?&lt;/h3&gt;  &lt;p&gt;We are planning on recording each meeting and putting the videos up online.&amp;#160; We don’t have the hosting solution for this firmly pinned down yet,&amp;#160; however there are a large number of different options available.&amp;#160; Our criteria are support for video of at least two hours in length and high resolution.&amp;#160; Ideally, we would like to use a Microsoft-based solution.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Types of Meetings?&lt;/h3&gt;  &lt;p&gt;While most .NET user groups seem to be primarily presentation based, they are often much more broadly scoped and targeted at an audience with deeper topical knowledge.&amp;#160; For these reasons we are considering a number of different formats for the group.&amp;#160; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;F# Boot Camp -&lt;/strong&gt; The focus of this type of session would be getting developers who were new to F# and/or FP started. This might include a small presentation, some group activity work and, finally, an open discussion forum. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Presentations&lt;/strong&gt; - We are working on bringing in F# experts to present on related topics.&amp;#160; This will be via both physical presence and remote conferencing. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Competitions&lt;/strong&gt; - I love competitive coding and I think that there’s no better way to get people excited about a topic.&amp;#160; These competitions would likely be web-based and open to all F# users. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Our goal is provide interesting content for both those new to F# as well as those with some experience.&amp;#160; As F# is a fairly new language, it’s reasonable to assume that news attendees will have a low level of previous exposure to the language.&amp;#160; Due to this, our current thinking is that it would generally be best to start with the basics and work our way up to more advanced topics over time.&amp;#160; &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx&amp;amp;;subject=What+Would+You+Want+From+a+F%23+User+Group%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx&amp;amp;;title=What+Would+You+Want+From+a+F%23+User+Group%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx&amp;amp;title=What+Would+You+Want+From+a+F%23+User+Group%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx&amp;amp;;title=What+Would+You+Want+From+a+F%23+User+Group%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx&amp;amp;;title=What+Would+You+Want+From+a+F%23+User+Group%3f&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/12/what-would-you-want-from-a-f-user-group.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17655" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/groups/default.aspx">groups</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsug/default.aspx">fsug</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/nerd/default.aspx">nerd</category></item><item><title>Why OO may not suck, or, Take a ride on the Falsus Omnibus</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx</link><pubDate>Wed, 11 Feb 2009 11:00:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17448</guid><dc:creator>RickM</dc:creator><slash:comments>10</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17448.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17448</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17448</wfw:comment><description>&lt;p&gt;This post is in response to Joe Armstrong’s &lt;a href="http://www.sics.se/~joe/bluetail/vol1/v1_oo.html"&gt;Why OO Sucks&lt;/a&gt;.&amp;#160; While I feel that Joe’s post reads more like an sermon than a stream of rational thought, it does bring up a number of misconceptions I feel many people in the functional programming world share and which need to be discussed openly if it and the object oriented world are to come to terms and work together. &lt;/p&gt;  &lt;p&gt;The main issue here is that, in the minds of many functional programming advocates, the concept of an object is inseparable from the amalgamation of 30 years of different, and sometimes contradictory, object oriented programming ideologies.&amp;#160; &lt;/p&gt;  &lt;p&gt;Perhaps they don’t understand that when binding these ideas together for the sake of argument they are simply constructing a straw man.&amp;#160; Similarly, to say that we must either have all of the history of object oriented design or pure functional programming, is a false dichotomy.&amp;#160; We can have either, neither, both separately, or any number of combinations of ideas from both groups.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, lets address each of Joe’s objections from a somewhat more moderate perspective.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In Response to “Objection 1 – Data Structure and functions should not be bound together.”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I disagree with Joe’s logic here.&amp;#160; It does not follow that because functions and data structures are “different animals” that they should “not be kept in the same cage”.&amp;#160; Wouldn’t having functions be first class citizens be locking them in the same cage with data structures as well?&amp;#160; The fact that they do share some fundamental similarity is manifest in that most functional programming languages do not treat function and data structure in a fundamentally different way.&amp;#160; &lt;/p&gt;  &lt;p&gt;Also, I have seen no compelling reason as to why it is wrong to couple transformations with the data structure that they are able to be applied to.&amp;#160; When transformations often have to be tailored specifically for a particular data structure, why would we not keep them strongly associated with said data structure.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In Response to “&lt;/strong&gt;&lt;strong&gt;Objection 2 – Everything has to be an object.”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As I discussed in my introduction, this is simply not true in all languages which support objects.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In Response to “&lt;/strong&gt;&lt;strong&gt;Objection 3 – In an OOPL data type definition are spread out all over the place.”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First of all, it should be immediately obvious to anyone who works on even medium sized projects that having many types defined in the same file is a very bad thing.&amp;#160; The core of the issue is that it makes group collaboration quite difficult.&lt;/p&gt;  &lt;p&gt;Secondly, any system that has ubiquitous data structures can’t be very large otherwise the namespace would become quite cluttered.&amp;#160; In large systems this cannot be mitigated by simply saying “more functions, fewer data structures”.&lt;/p&gt;  &lt;p&gt;Finally, to state that any object which operates on another must inherit from it is a completely incorrect statement.&amp;#160; In the modern object oriented world it is common to have objects which exist solely to build, process or interface with other objects.&amp;#160; Also, as I mentioned above, it’s entirely possible to have stateless objects which are simply data structures which are bundled with a collection of predefined transformations.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In Response to “&lt;/strong&gt;&lt;strong&gt;Objection 4 – Objects have private state.”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First of all, state is not the root of all evil.&amp;#160; While it may be harmful to concurrency and static analysis, there are many stateful algorithms which perform much better than their stateless counterparts.&lt;/p&gt;  &lt;p&gt;Secondly, it’s entirely possible to have immutable objects.&amp;#160; Perhaps in these objects some state is hidden for the sake of representing ideas in a simple manner, perhaps not. &lt;/p&gt;  &lt;p&gt;Finally, as to information hiding in general, in large systems it’s very easy to be overwhelmed by the quantity of information.&amp;#160; If you can say via testing “I can trust this structure over here” it means it’s entirely possible to ignore that and focus work on another piece of the system.&amp;#160; It’s also important to note that functional programming languages often have information hiding systems of their own.&amp;#160; In the most base case, calling other precompiled functions amounts to information hiding and comes along with all of the negative things stated in this section.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In Response to “&lt;/strong&gt;&lt;strong&gt;Conclusion – Why OO was popular.”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It seems to me here that if you removed all instances of “It was thought” this would be a somewhat correct summarization.&amp;#160; &lt;/p&gt;  &lt;p&gt;In reality, the industry has been using object oriented programming for many more reasons than what has been listed here.&amp;#160; A particularly strong reason is that it supplies an organizational framework for data structures and functions which simply does not have an equivalent in the pure functional programming world. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;I must apologize to Joe here.&amp;#160; I don’t intend to pick on him in particular.&amp;#160; However, I had never previously seen a post in which the the most common misconceptions around object oriented programming were so plainly stated.&lt;/p&gt;  &lt;p&gt;To say that the concept of an object and that the collections of ideologies used commonly to construct programs using objects are somehow inseparable is completely false.&amp;#160; To further state that the only reasonable choice is to instead move to pure functional programming bears no additional truth.&amp;#160; Yet they are both pieces of constantly perpetuated misinformation.&amp;#160; &lt;/p&gt;  &lt;p&gt;The fundamental idea that data and function can be bound for the sake of organization still holds and does not inherently violate any of the tenants of functional programming.&amp;#160; In terms of the organizational structure of our programs we have gained much from objects.&amp;#160; Why then should we abandon them without sufficient reason?&amp;#160; It seems to me that it would be a mistake to dismiss all of what we have gained for baseless ideological reasons alone.&amp;#160; &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx&amp;amp;;subject=Why+OO+may+not+suck%2c+or%2c+Take+a+ride+on+the+Falsus+Omnibus" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx&amp;amp;;title=Why+OO+may+not+suck%2c+or%2c+Take+a+ride+on+the+Falsus+Omnibus" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx&amp;amp;title=Why+OO+may+not+suck%2c+or%2c+Take+a+ride+on+the+Falsus+Omnibus" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx&amp;amp;;title=Why+OO+may+not+suck%2c+or%2c+Take+a+ride+on+the+Falsus+Omnibus" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx&amp;amp;;title=Why+OO+may+not+suck%2c+or%2c+Take+a+ride+on+the+Falsus+Omnibus&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/11/why-oo-is-not-so-bad-but-could-be-better.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17448" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/object+oriented/default.aspx">object oriented</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/oo/default.aspx">oo</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Blogs/default.aspx">Blogs</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/pure/default.aspx">pure</category></item></channel></rss>