这是来自Joshua Bloch的经典talk。Java里许多重要的API都是他设计的;Effect Java这本书也是他写的。我觉得,地球上每个自认为是程序员的人都应该把这个talk反复听几遍(至少把这个幻灯片精读几遍)。

好的API的特点:Easy to learn, easy to use, hard to misuse, easy to read & maintain code that uses it, sufficiently powerful, easy to extend, appropriate to audience(给不同领域的人用的API的命名就不一样,因为不同领域有不同的术语,比如金融、物理、生物等)。

公司内部需要适当地投资(但不要过度投资)一定的工程师时间来设计好的API、好的software abstractions。API本身是一种产品,一种给(公司内部或外部的)程序员用的产品;也要做MVP,设计出来后别急着去实现,先用看看(unit test、写几个范例试试看好不好用、咨询用户的反馈);现实一点,任何API设计完后都是要不断迭代、不断进化的。

API的设计就跟做产品一样,只做一件事,然后做到极致;尽量精简,如果你在犹豫该不该让你的API多支持一个函数、一个参数、一个类,“When in doubt, leave it out!” -- 如果真有必要,你以后还可再加回去;但如果你一开始就加了,以后就不能删掉了,因为别人已经开始用上你的API了。

分享到: