{"id":382,"date":"2010-04-27T17:07:47","date_gmt":"2010-04-27T21:07:47","guid":{"rendered":"http:\/\/mattfife.net\/wordpress\/?p=382"},"modified":"2010-04-27T17:07:47","modified_gmt":"2010-04-27T21:07:47","slug":"a-rant-on-some-of-microsofts-new-apis","status":"publish","type":"post","link":"https:\/\/mattfife.com\/?p=382","title":{"rendered":"A rant on some of Microsoft&#8217;s API development over the recent years"},"content":{"rendered":"<p>I&#8217;m becoming more and more tired of Microsoft&#8217;s mindset of how software  should be written.\u00a0 As an engineer, I can see exactly how they&#8217;ve gotten  to where they are design-wise &#8211; but think it&#8217;s time they took a step  back and take a look at exactly what they&#8217;ve gotten themselves into.<\/p>\n<p>I often frequent a MS insider&#8217;s blog who fields problems that  end-developers encounter using Microsoft&#8217;s interfaces and API&#8217;s (<a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/default.aspx\" target=\"_blank\">The New Old Thing<\/a>).\u00a0 Again and again I&#8217;m struck by  how un-developer friendly some of the newer API&#8217;s are.\u00a0\u00a0\u00a0 The API&#8217;s can be very  unforgiving and inflexible &#8211; and <a href=\"http:\/\/support.microsoft.com\/kb\/311339\" target=\"_blank\">confusing<\/a>.\u00a0 And the reply you usually get when confusion results of the  design decisions and logic are often condescending (actual clip from responses when users\/devs give feedback):<\/p>\n<p>&#8220;So, I&#8217;ve done everything according to the docs and it isn&#8217;t doing what it says it should &#8211; is the <tt>b<\/tt> operator broken?&#8221;<br \/>\nNo, the <tt>b<\/tt> operator is working just fine. The problem is that the <tt>b<\/tt> operator doesn&#8217;t do what you think it does.<\/p>\n<p>Back in their Win32 days &#8211; the API was relatively clean, pretty  understandable, and fairly easy to pick up.\u00a0 But now, with some of the  &#8216;programming features&#8217; in .NET stuff I&#8217;ve seen &#8211; it makes me glad I&#8217;m  still in good-old C++ land.\u00a0 Auto-initializers, massive use of <a href=\"http:\/\/www.mofeel.net\/61-microsoft-public-dotnet-framework-interop\/8239.aspx\" target=\"_blank\">custom data types with strange member functions for  interacting with the data<\/a>, metadata with your classes (Metadata  EVERYWHERE in fact), it&#8217;s very hard to know what&#8217;s really going on under  the covers or why the design ended up the way it did.\u00a0 Maybe I&#8217;m  old-fashioned or write things that don&#8217;t fit nicely into their wizards,  but I LIKE knowing what&#8217;s going on under the covers. Just &#8216;trusting&#8217; the  API to figure out what I&#8217;m trying to do has never done anything but get  me into mysterious corners that reason and logic can&#8217;t get you back out  of.<\/p>\n<p>What I <em>really <\/em>want as a developer is to be able to develop  QUICKLY.\u00a0 However, I think MS has misunderstood that term.\u00a0 QUICKLY  doesn&#8217;t mean getting &#8220;Hello World&#8221; up in the fewest number of mouse  clicks\/lines of code typed.\u00a0 Quickly doesn&#8217;t mean I can use some kind of  wizard. Speed of development depends firstly on how quickly I can LEARN  THE PHILOSOPHY AND DESIGN OF THE LANGUAGE I&#8217;M USING.\u00a0 If I understand  those two things &#8211; then when I hit a moment of saying &#8220;I need to do  operation X (which I currently don&#8217;t know how to do), I can REASON OUT  what it is I need to look for.\u00a0 However, if you say to yourself, &#8220;I need  to get the current working directory&#8221;, then find out that you need to  learn a special new kind of string class with all kinds of new struct  types for initializing\/interacting, a new kind of file system iterator,  etc &#8211; you find yourself spending 2 hours trying to learn how to interact  with the monstrosity of the language instead of developing real working  code.\u00a0 I could do the above operation in 1-2 lines in Unix c and Win32,  but some .NET and other MS API&#8217;s have becoming horribly confusing to  figure out.\u00a0 Why?\u00a0 Because the API&#8217;s seem so certain that you need lots  of help to write anything, they&#8217;ve re-worked every old data type and API  call you know and love. THIS kind of attitude is what slows development  to a crawl when working on new API&#8217;s\/languages.<\/p>\n<p>The final nail that makes it all disappointing as a developer is  knowing that NOBODY else is using the language that you&#8217;re now spending  all this time learning.\u00a0 You feel like you&#8217;re spending all this time as a  wasted effort in learning non-transferable knowledge.\u00a0 As a computer  scientist &#8211; I know the theory behind languages &#8211; I have the transferable  part of computational\/languages theory down.\u00a0 What I&#8217;m really doing is  learning the non-transferable parts &#8211; and I find myself doing that in  spades with some of Microsoft&#8217;s newer API&#8217;s and not in a good way that  helps my career along the path of inevitable growth and change.\u00a0 At  least it&#8217;s starting to get compacted down in C#; but it&#8217;s taken a LONG  road from Win32-&gt;MFC-&gt;COM to get us there &#8211; and I&#8217;ve forgotten  more of that stuff than I care to try and recall.\u00a0 But if I learn C or  Haskell or Java &#8211; at least it works cross-platform and I know I could  write it on a Mac\/Unix too.\u00a0 It&#8217;s a good use of my time.\u00a0 But I just  don&#8217;t get that feel with most modern MS stuff.<\/p>\n<p>It&#8217;s frustrating; but I don&#8217;t know what the right answer really is.\u00a0 Maybe this is the way things need to develop.\u00a0 Perhaps I should ponder and write up a bit about the comparison of how new platform solutions are designed by MS, open source, and Apple OS&#8217;s&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m becoming more and more tired of Microsoft&#8217;s mindset of how software should be written.\u00a0 As an engineer, I can see exactly how they&#8217;ve gotten to where they are design-wise &#8211; but think it&#8217;s time they took a step back and take a look at exactly what they&#8217;ve gotten themselves into. I often frequent a MS insider&#8217;s blog who fields problems that end-developers encounter using Microsoft&#8217;s interfaces and API&#8217;s (The New Old Thing).\u00a0 Again and again I&#8217;m struck by how&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/mattfife.com\/?p=382\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-382","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4WECr-6a","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts\/382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=382"}],"version-history":[{"count":0,"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts\/382\/revisions"}],"wp:attachment":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}