{"id":39,"date":"2008-01-16T00:23:20","date_gmt":"2008-01-16T05:23:20","guid":{"rendered":"http:\/\/steve.vinoski.net\/blog\/2008\/01\/16\/idls-vs-human-documentation\/"},"modified":"2008-01-16T00:23:20","modified_gmt":"2008-01-16T05:23:20","slug":"idls-vs-human-documentation","status":"publish","type":"post","link":"https:\/\/steve.vinoski.net\/blog\/2008\/01\/16\/idls-vs-human-documentation\/","title":{"rendered":"IDLs vs. Human Documentation"},"content":{"rendered":"<p><a href=\"http:\/\/pmuellr.blogspot.com\/2008\/01\/steve-vinoski-on-schema.html\">Patrick Mueller responded<\/a> to my <a href=\"\/blog\/2008\/01\/14\/lying-through-their-teeth-easy-vs-simple\/\">previous blog posting<\/a> on interface definition languages, and I wanted to comment on his response. Long ago Patrick was involved in defining the Smalltalk bindings for CORBA IDL, so he&#8217;s a CORBA veteran like me, and in the big picture we agree on many things. It&#8217;s nice having him cast a critical eye on this stuff.<\/p>\n<p>Note that Patrick mostly talks about data schemas, whereas my posting talks only of interface definition languages. These are two <em>very<\/em> different things, which I&#8217;ve noted in comments on his blog. In a reply comment he said they&#8217;re both metadata, which is true, but still, they&#8217;re very separable. REST depends heavily on data definitions, but it doesn&#8217;t require specialized interface definitions because it promotes a uniform interface. For data definition REST relies on and promotes <a href=\"http:\/\/www.iana.org\/assignments\/media-types\/\">media\/MIME types<\/a>, and the standardization of such data definitions is critical to allowing independently-developed consumers and providers to interact correctly. I doubt Patrick and I really disagree on this last point.<\/p>\n<p>One area where we apparently do disagree, though, is in the area of documentation. In my previous post I said that users of services ultimately rely on human-generated and human-readable documentation, not interface definition languages, to ensure their consuming applications interact correctly with those services. Patrick commented:<\/p>\n<blockquote><p><em>The documentation? What documentation? I&#8217;m picturing here that Steve has in mind a separate document (separate from the code, not generated from the code) written by a developer. But human generated documentation like this is still schema, only it&#8217;s not understandable by machines, pretty much guaranteed to get out of sync with the code, probably incomplete and\/or imprecise. Not that machine generated schema might fare any better, but it couldn&#8217;t be any worse.<\/p>\n<p>But there are more problems with this thought. The notion of hand-crafted documentation for an API is quaint, but impractical if I&#8217;m dealing with more than a handful of APIs.<\/em><\/p><\/blockquote>\n<p>I understand what Patrick&#8217;s saying here. Yes, documentation can get stale and out of sync. Still, I disagree. I&#8217;ve been near interface definition languages for at least 20 years now, and never once &mdash; <em>not even once<\/em> &mdash; have I seen anyone develop a consuming application without relying on some form of human-oriented documentation for the service being consumed. Such documentation might be as simple as a conversation with a developer across the hall, or reading comments in the definition language file itself, or might be from a README, email, a web page, a wiki, a Word document, a PDF, or a whole formal specification. I mean, what if the OMG had published only the ORB and Object Services IDL interfaces without the accompanying reams of human-oriented description and definition? Or if WSDL were enough, why the need for <a href=\"http:\/\/www.tbray.org\/ongoing\/When\/200x\/2004\/09\/21\/WS-Research\">so many pages of human-oriented WS-* documentation?<\/a><\/p>\n<p>Like I said in my previous post, interface definition languages exist for machines to generate code. They&#8217;re totally inadequate, though, for instructing developers on how to write code to use a service. The need for human documentation in this context isn&#8217;t quaint or impractical at all &mdash; it&#8217;s simply reality.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Patrick Mueller responded to my previous blog posting on interface definition languages, and I wanted to comment on his response. Long ago Patrick was involved in defining the Smalltalk bindings for CORBA IDL, so he&#8217;s a CORBA veteran like me, and in the big picture we agree on many things. It&#8217;s nice having him cast [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,45,49,24,48],"tags":[166,155],"class_list":["post-39","post","type-post","status-publish","format-standard","hentry","category-code-generation","category-corba","category-documentation","category-idl","category-wsdl","tag-documentation","tag-idl"],"_links":{"self":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/comments?post=39"}],"version-history":[{"count":0,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/39\/revisions"}],"wp:attachment":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/media?parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/categories?post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/tags?post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}