<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Neuroning: On API Design Guidelines</title>
    <link>http://neuroning.com/articles/2006/11/19/on-api-design-guidelines</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>My mind workout on Software Development</description>
    <item>
      <title>On API Design Guidelines</title>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/em&gt; Good news! Jaroslav Toulash emailed me that he published a book on &lt;a href="http://www.amazon.com/gp/product/1430209739?ie=UTF8&amp;amp;tag=neuroning-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1430209739"&gt;Practical API Design&lt;/a&gt; !!! &lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Looks like Brian McAllister may be preparing a talk on &lt;a href="http://kasparov.skife.org/blog/src/talks-i-want-to-give.html"&gt;Designing Elegant APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've been very interested in good API design for a long time. But I could
never find a single book on the subject. Many design and programming books provide good advice and guidelines that are essential for designing good APIs, but none of them tackles the matter directly.&lt;/p&gt;

&lt;p&gt;I reviewed &lt;a href="http://www.pragmaticprogrammer.com/titles/kpiod/index.html"&gt;"Interface Oriented Programming"&lt;/a&gt;
a few months back with disappointment. It may not be a bad
book, but I felt it was quite basic and superficial. May be my
expectations were too high, and too focused on API design.&lt;/p&gt;

&lt;p&gt;Over time, I collected some links on the subject and
&lt;a href="http://kasparov.skife.org/blog/src/api-design-refs.html"&gt;shared some with Brian&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://video.google.com/videoplay?docid=-474821803269194441"&gt;Best Practices in Javascript Library Design&lt;/a&gt; (via &lt;a href="http://www.artima.com/forums/flat.jsp?forum=276&amp;amp;thread=214061"&gt;John Resig on JavaScript API Design&lt;/a&gt;) - A good presentation given by the author of &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=488&amp;amp;page=1"&gt;API: Design Matters&lt;/a&gt; - Article by Michi Henning, ZeroC, for ACM Queue magazine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://lcsd05.cs.tamu.edu/slides/keynote.pdf"&gt;How to Design a Good API and Why it Matters&lt;/a&gt; - Excellent deck from Joshua Bloch. There's also a &lt;a href="http://www.infoq.com/presentations/effective-api-design"&gt;video&lt;/a&gt; of his presentation at JavaPolis 2005.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.artima.com/interfacedesign/"&gt;Interface Design&lt;/a&gt;, Best
Practices in Object-Oriented API Design in Java, by Bill Venners -
This one is a Book in progress!. Unfortunately, the last updates
seem to be from 2002 or so. I'm not sure if the project is still
alive. Anyway, it contains many good articles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://openide.netbeans.org/tutorial/api-design.html"&gt;How To Design a (module) API&lt;/a&gt; -
A great page on good design practices for writing APIs.  It's tailored for
NetBeans module writers, but is still pretty general and gives very valuable guidelines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-6218.pdf"&gt;How to Write APIs That Will Stand the Test of Time&lt;/a&gt; -
A session I attended at JavaOne 2006. Presented by Tim Boudreau and
Jaroslav Tulach, members of the NetBeans team. It focuses on API
evolution and compatibility, but also covers usability and other
guidelines. I guess they are the main guys behind NetBeans'
&lt;a href="http://openide.netbeans.org/tutorial/api-design.html"&gt;How To Design a (module) API&lt;/a&gt;
page linked above.&lt;/p&gt;

&lt;p&gt;I had the chance to speak with Jaroslav after his session and
suggested he should write a book on this topic. I emailed him the
references I had, and he said he would try to draft something by
the end of year.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.codeproject.com/gen/design/APIUsabilityArticle.asp"&gt;API Usability&lt;/a&gt; -
Focused on making APIs easy to use. The article applies general
usability principles (commonly used in GUI design) to the design of
APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.gotdotnet.com/team/brada/APIUsability.pdf"&gt;Measuring API Usability&lt;/a&gt; -
An interesting article by a usability engineer at Microsoft,
published on Dr. Dobb's. It favors the use of scenario-based design
to achieve usable APIs, and explains the use of their "cognitive
dimensions" framework for measuring API usability. He also &lt;a href="http://blogs.msdn.com/stevencl/"&gt;blogs&lt;/a&gt; about API usability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/kcwalina/archive/2005/12/20/APIDesignLaws.aspx"&gt;Krzysztof's Laws of API Design&lt;/a&gt; -
From another &lt;a href="http://blogs.msdn.com/kcwalina/default.aspx"&gt;Microsoft blogger&lt;/a&gt; on API design.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.artima.com/forums/flat.jsp?forum=106&amp;amp;thread=142428"&gt;Java API Design Guidelines&lt;/a&gt; - A
good article from a developer who was also surprised by the lack of
a book about API design. He collected some advice and additional
links.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.cafeconleche.org/slides/javapolis/xom/index.html"&gt;XOM Design Principles&lt;/a&gt; - Some design "principles" followed by XOM (an XML parsing library).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.aristeia.com/Papers/IEEE_Software_JulAug_2004.pdf"&gt;The Most Important Design Guideline?&lt;/a&gt; -
A short article by C++ guru Scott Meyers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.martinfowler.com/bliki/HumaneInterface.html"&gt;Humane Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/MinimalInterface.html"&gt;Minimal Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/DesignedInheritance.html"&gt;Designed Inheritance&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/DslBoundary.html"&gt;DSL Boundary&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/DuckInterface.html"&gt;Duck Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/FluentInterface.html"&gt;Fluent Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/ieeeSoftware/published.pdf"&gt;Public vs. Published Interfaces&lt;/a&gt; -
Some of the many great writings from Martin Fowler. These selection is
on specific topics that are relevant to API design. Most of them
are quite recent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=317"&gt;Programmers are People,  Too&lt;/a&gt; - An article by Ken Arnold for ACM Queue magazine: "Programming language and API designers can learn a lot from the field of human-factors design."&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, let's hope Brian gives his talk at a big conference, signs a
contract with a big publisher and fills the void.&lt;/p&gt;</description>
      <pubDate>Sun, 19 Nov 2006 22:31:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:232f03ee-615e-411a-8597-d812da9283cc</guid>
      <author>F</author>
      <link>http://neuroning.com/articles/2006/11/19/on-api-design-guidelines</link>
      <category>Java</category>
      <category>Books</category>
      <trackback:ping>http://neuroning.com/articles/trackback/48</trackback:ping>
    </item>
    <item>
      <title>"On API Design Guidelines" by Brian</title>
      <description>:-)</description>
      <pubDate>Mon, 20 Nov 2006 14:54:39 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:274454d4-08c0-4e11-a1c5-46e826cdc9f9</guid>
      <link>http://neuroning.com/articles/2006/11/19/on-api-design-guidelines#comment-49</link>
    </item>
  </channel>
</rss>
