譯:UI 工程的要素 - The Element of UI Engineer from Dan Abramov

・14min

翻譯自:Dan Abramov - The Elements of UI Engineering,所有著作相關權利歸原作者 Dan Abramov 所有,如有任何問題歡迎透過留言或透過 email 聯繫。

#本文

在我上一篇文章,我談到承認我們的知識上的差距。你可能認為我建議你安於平庸。但並非如此,這是一個相當廣泛的領域1

我相信不需要依照任何特定順序去學習任何技術,你可以從「任何地方」開始。但我也同時相當重視專長的發展。個人而言,主要關注於建立使用者介面2

我一直反覆思考什麼是我知道且有價值的。沒錯,對於一些技術我十分熟悉(例如:JavaScript 和 React),但一些更重要的體會是難以言喻的。我從未將其付諸言辭,這是我第一次嘗試將其歸納並描述。


有無數關於技術、以及庫的「學習藍圖」。哪個庫會在 2019 開始流行?那 2020 呢?我應該學習 Vue、React 還是 Angular?Redux 還是 Rx?我應該學習 Apollo 嗎?那 REST 還是 GraphQL 呢?在之中迷失是非常容易的,如果作者的建議有誤怎麼辦?

我生涯中最大的成長並無關乎任何特定的技術,反而是在琢磨特定的 UI 問題中學習到最多。有時我會尋找一些有幫助的庫或者模式,有時候則會想出自己的解決方案(不論是好是壞)。

正是這種理解問題、嘗試解決方案、應用不同的策略的組合,帶給我人生中最有價值的經驗。這篇文章將關注在這類的問題。


如果你也投入於使用者介面,你可能也曾經處理過一部分的挑戰 - 不論透過自己實作、或者是使用一些庫來解決。不論如何,我會建議建立一個不依賴任何庫的小專案,嘗試重現並解決這些問題。每一個問題都沒有所謂的標準答案,學習的收穫來自於探索這些問題的範疇,以及對於不同方案取捨之間的嘗試。



當然,有許多問題是我沒有提到的。這個清單中的項目還不夠全面!例如我還沒提到設計師以及工程師之間的合作,以及除錯還有測試。如果未來有機會的話。

使用特定的 view library 或者特定的 data fetching library 來理解這些問題是非常誘人的。但我建議假裝這些庫並不存在,並從這些角度再次重新理解。你會如何解決這些問題?在小型的的應用中試著動手看看吧(我很樂意在 Github 上看到你的嘗試,歡迎透過 twitter 分享給我)

更有趣的是,這些問題幾乎會在各種規模的應用中出現。不論是在 Typeahead 或 Tooltip 的小部件中,又或是在大型的應用像是 Twitter 或是 Facebook。

想想你喜歡的應用中某個複雜的 UI 元素,然後仔細審視清單上的問題。你能夠清楚的敘述開發人員做了哪些取捨嗎?試著從頭重現並模仿他們的行為。

透過小型應用中,嘗試不使用任何庫而解決這些問題的過程中,我學習到很多關於 UI 工程的知識。我推薦給任何想要對於這些介面工程上的取捨想要有更深理解的人

#後記

這篇文章大概在一年多前就已經拜讀過(基本上整個 Dan 的部落格都翻過了),一直到現在,這篇文章還是影響自己非常深遠且一直記憶猶新的一篇,很少看到資訊對所謂 UI 工程有這樣完整的見解。投入前端開發一段時間,有時候也會懷疑這是不是個缺乏深度的領域?但這篇文章總是會點醒自己:你所知道的還只是冰山一角罷了。

翻譯文章也是件有趣的事。在這個 AI 當道的時代,人工的翻譯的價值還剩下多少?親自去翻譯一篇文章後才知道,字裡行間中還是有很多細節需要注意的。用字遣詞要怎麼表達出原文的帶來的情緒?不同文化的表達應該如何轉換?要怎麼在幾個同義詞中選出最適合的語境的那個?如果你要的只是「資訊」,直接餵給 AI 肯定是最快的方法。但字裡行間承載的從來不只有資訊,即使是訴諸理性的技術文章,也能感受到作者的性格以及傳達的意念,這些抽象的感受只能透過親身體會。就連人工的翻譯,也僅僅是「盡可能」的傳達而已。但這些抽象的「感受」,比起純粹的「資訊」,總是會引發更多的思考。

最後,我不是專業譯者,也相信還有很多詞不達意的地方,對內容有問題或想要更深的理解,還是推薦閱讀原文

#Footnotes

  1. 譯註: 這裡指的是上一篇文章中提到的領域,大部分圍繞著網頁前端開發

  2. 譯註:參照教育部翻譯

  3. 原文 screen,翻譯成「頁面」

  4. 原文 frame,翻譯成「影格」

  5. 原文 spinner,翻譯成「載入動畫」

  6. 原本 staleness,翻譯成「時效性」

  7. 這裡我想用原文會清楚很多,所以保持英文

  8. 同樣 bundle size 維持原文會比較清楚

  9. 這一句翻的不是很好,這裡列出原文:Sometimes you can rank the contenders on a shared scale of “importance”, like the CSS z-index property.

# Comments