2017 年 4 月 24 日
你使用 Clojure 或 ClojureScript 多久了?
Empear 於 2015 年推出,我們從一開始就使用 Clojure。在此之前,我已在一些個人專案中使用 Clojure。Clojure 是自然而然的選擇。我已經是 Lisp 的忠實粉絲長達十年,能夠將 Lisp 與 JVM 生態系統結合在一起,這點很吸引人。
你們團隊中有多少人使用 Clojure 或 ClojureScript?
我們目前有三位開發人員,並尋求擴編。我們所有人每天都使用 Clojure 編寫程式碼。我們還有一些小元件是用 Haskell 和 Python 編寫的。
你使用 Clojure 或 ClojureScript 正在建構什麼產品或服務?
我們的產品主打 CodeScene。CodeScene 是一款工具,可協助軟體專案透過辨識和優先處理技術債務來提升效率。我們採用不同的軟體分析方法,因為我們是根據行為和社交資料來得出結果。
我們的資料來源主要是版本控制儲存庫,CodeScene 將其視為開發人員如何與程式碼庫互動的行為記錄。這表示我們可以根據系統的成長方式來設定優先順序,並納入程式碼的社交面向,讓我們的客戶能夠找出團隊生產力的瓶頸,並節省入職和離職成本。
我們維護兩個版本的 CodeScene。一個是我們的雲端版本 https://codescene.io/,這是以服務形式提供的分析。另一個是 CodeScene 的內部部署版本,我們的客戶會將其安裝在自己的資料中心。
你最喜歡使用哪個 Clojure 或 ClojureScript 函式庫?
Clojure 的本質及其與 Java 的緊密整合,使得使用 Clojure 函式庫更像是一種可選擇的便利性。我們喜歡使用的一些高品質函式庫包括 Carmine、Timbre 和 Cheshire。我們也發現 Ragtime 對資料庫遷移很有幫助。此外,我們使用多個函式庫進行統計和機器學習,儘管我們通常會自己實作核心演算法。
使用 Clojure 或 ClojureScript 為你帶來最大的價值是什麼?
Clojure 最有價值的一面是,這門語言讓你專注於問題領域。「資料看起來像什麼?在傳遞資料之前,我們應該如何過濾和轉換資料?讓我們在 REPL 中執行這個,看看會發生什麼事。好,現在將其放入函式中。為其撰寫規格,並使用測試來穩定它。」這個工作流程與人類的解決問題方式非常契合。在實務上,它讓我們能夠快速實作新功能。
Clojure 或 ClojureScript 中你最喜歡的功能是什麼?
最重要的功能是 Clojure 的持久不變資料結構。它們消除了整類問題。不再需要擔心其他東西會變更你的資料。
我們也喜歡 Clojure spec。在 spec 之前,我們已經到達一個地步,某些函數在孤立的情況下很難推理。這表示我們必須查看呼叫內容,找出程式碼運作的資料結構以及實際執行的動作。這當然是所有動態型別語言都會遇到的問題,但由於 Clojure 鼓勵高度抽象,因此這個問題似乎更為明顯。spec 透過讓程式碼更容易推理來提供很大的幫助,而在我看來,這是軟體開發中最重要的最佳化面向。
你的堆疊是什麼?
我們的網路系統使用基於 Ring 和 Compojure 的傳統堆疊。大部分的呈現使用 Selmer 在伺服器端進行,並在上面加上一層薄薄的 JavaScript。我們使用 D3 進行視覺化。我們的雲端解決方案在 Amazon Web Services 上執行。
為什麼使用 Clojure 或 ClojureScript 對你的業務有價值?
有兩個主要原因。首先,當我們開始時,我是唯一的程式設計師,我知道我們必須快速反覆運算才能建構出有用的東西。這表示我必須盡可能有效率地使用我的時間。Clojure 是一個促成因素,它允許我快速建構新想法的原型、評估它,然後反覆運算,直到我們找到穩定的解決方案。這是 Clojure 的一個面向,我們在使用我們的分析探索新領域時仍然受益於它。
第二個原因完全不是技術性的。我選擇 Clojure 作為 Empear 的主要原因之一,是因為這門語言看起來很有趣。而有趣在軟體產業中是一個被低估的動機;有趣幾乎可以保證事情會完成。
如果你想分享你的 Clojure 故事,請 填寫此表單。