如何設計出使用者喜愛的API

2021-08-13 08:52:16 字數 3060 閱讀 7590

原文:user experience design for apis
編寫**不僅僅是人與電腦間的事。**也不只和電腦有關;還會影響到使用者。程式設計師編寫的**會被其他程式設計師閱讀、使用和維護。程式設計師只有使用順手的工具,心情舒暢的時候才會寫出更好更多的**。不幸的是,他們常常會被難用的工具、晦澀的錯誤訊息和不知所云的庫弄的心煩意亂。(不好的)工具會給程式設計師帶來痛苦,特別是在複雜的軟體工程中。

使用者體驗(ux)應該在應用程式介面(api)設計中處於核心地位。乙個設計優秀的api,會讓複雜的任務變得簡單,更會減少麻煩的產生。所以api使用者體驗設計完全不是多餘的。為什麼在程式設計師中缺少設計文化呢?

當程式設計師在電腦前編寫**的時候,使用者對於他們來說是個抽象的遙遠的概念。只有當他們和使用者坐在一起,看到使用者痛苦的使用自己編寫的api時,才會意識到使用者體驗的重要性。現在是要重視使用者體驗的時候了,儘管大部分程式設計師還從來沒做到。

另外乙個問題是所謂的「聰明程式設計師症候群」。程式設計師會以為終端使用者和他們一樣擁有豐富的背景知識。但是,事實上,終端使用者對api及其實現知之甚少。而且,聰明的程式設計師還會把問題搞得過於複雜,因為他們自己善於處理複雜問題。但是不夠聰明或者是缺乏耐心的人呢?這就決定了軟體不能太過複雜–超過特定的難度,就難以使用,使用者就會排斥使用轉而尋求更為清晰的方法。但是聰明的、有耐心的人呢?他們可以應付複雜事務,他們會不斷的構造科學怪物。結果是生產出最差型別的api。

最後乙個問題是一些程式設計師刻意使用敵視使用者(user-hostile )的工具,因為他們將這種超級困難視為一種榮耀,而把設計貼心的工具看成是「給菜鳥用的」。在深度學習社群中這種態度尤為突出,在那裡追求時髦和浮華。但是,這種自討苦吃的態度最後只會弄巧成拙。從長遠來看,良好的設計會占上風,因為好的設計會更有效率和影響力,會比敵視使用者的負設計(undesign)更受歡迎。好的設計是有傳染性的。

和大多事務類似,api設計並不複雜,只要遵循一些原則。而這些原則都源於乙個基本準則:應該關心使用者。所有的使用者,而不只是其中聰明的人,不只是專家。任何時候都要重視使用者。是的,包括那些首次使用的懵懵懂懂的使用者,他們只有有限的背景知識,耐心也很有限。每乙個設計理念都要從使用者出發

對於api設計,這裡有三個原則。

大多數的api開發者只關注單一的方法,而忽略了整體的流程。他們讓使用者自己摸索出完整的流程。由此產生的使用者體驗通常是一條長串的技巧,圍繞著在各個方法層面上看不見的技術限制。

為了避免此種情況發生,一開始就要列出api使用的最常見流程。這些場景是大多數人都關心的。最好自己演練一下,並做筆記。更好的方式:觀察新使用者的使用,找出不足之處,並進行改進。特別的:

-流程應該緊密對映到使用者關心的特定領域概念

如果設計的api用於烹飪漢堡,很可能是諸如「肉餅」、「乳酪」、「圓麵包」、「燒烤」等物件。如果設計深度學習api,核心的資料結構以及方法,應該對映到該領域使用者所熟悉的概念:模型/網路、層、啟動、優化器、損耗等。

在設計的完整流程中,應該減少使用者理解和記憶的負擔。使用者的負擔越少,在解決實際問題時就會使用的越多。—而不是花費精力去學習如何使用。特別的:

檢驗乙個api是否設計優秀可以通過如下方法:

如果乙個新使用者在第一天使用該流程解決問題(借助文件或者教學),第二天在稍微不同的環境中,解決相同的問題時,他們不檢視文件是否還能按流程進行?他們能否一次就記住流程?設計優秀的api中大部分的流程的認知負擔非常小,簡直可以過目不忘。

這個方法提供一種區分api好壞的方法,就是通過記錄普通使用者掌握某個流程過程查詢文件的次數。最差的是那些經過大量學習還總記不住的流程。

優秀的設計是互動的。好的api在使用時很少會依賴文件和教學–只簡單的按照直覺來嘗試並根據api的提示來操作。特別的:

例如:

- 在python中,下面就是個極壞的錯誤資訊:

assertionerror: '1 != 3'
(一般經常使用valueerror而避免使用assert)

- 同樣的壞資訊還有:

valueerror: 'invalid target shape (600, 1).'
valueerror: 'categorical_crossentropy requires target.shape[1] == classes'
下面是乙個好的例子,提示什麼通過了,期望是什麼以及如何修復問題:

valueerror: '''you are passing a target array of shape (600, 1) while using as loss `categorical_crossentropy`.

`categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes).

if your targets are integer classes, you can convert them to the expected format via:

--from keras.utils import to_categorical

y_binary = to_categorical(y_int)

--alternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets.'''

好的錯誤資訊會提高效率,也會撫慰使用者的情緒。

link

這些都是相當簡單的原則,遵循這些原則會有助於開發出使用者樂於使用的api。相應的,會有更多的人開始使用你的軟體,這會有助於提高在領域中的影響。

要牢記:軟體是為人而不是為機器服務的。任何時候都要把使用者放在心中。

Marty Cagan如何打造使用者喜愛的產品

marty cagan 對於這個話題,我總結為十條。徹底沉浸到使用者中去,成為毋庸置疑的使用者專家,但不要盲從於使用者。區分願景和假想的不同,通過與使用者面對面交流來驗證願景,虛懷若谷。成功的前提是你必須知道 要解決什麼問題?為誰而解決?如何解決?擁抱使用者體驗,因為使用者體驗通常比開發更重要 更困...

如何設計出正確的搜尋模式?

1.視覺線索 無論建立任何型別的使用者介面,為使用者提供快速掃瞄螢幕所需的工具是你設計的一部分。這樣做可以確保你的使用者知道在什麼地方找到他想要的東西,何時需要使用以及與其互動後會發生什麼。放大鏡圖示 使用放大鏡圖示,我無法保證這樣會加快了搜尋欄查詢的速度。但是圖示越簡單越好,較少的細節可以讓使用者...

如何設計出優美的Web API?

熱文索引,堅持原創不易,請小夥伴們不吝 推薦 支援 1.程式設計師必須掌握的效能調優 x y z 2.程式設計師必須懂的架構入門課 1 2 3 3.如何把單體式應用拆解成微服務?上 4.如何把單體式應用拆解成微服務?下 5.如何寫好產品幫助文件?web api的應用場景非常豐富,例如 將已有系統的功...