Clojure

Cognician

2018 年 12 月 20 日

Cognician

您使用 Clojure 或 ClojureScript 多久了?

從 2012 年初開始。

當時,Cognician 花了幾年的時間證明我們有值得建立事業的基礎,然後我們必須實際建立該事業。

我們之前的堆疊是一個 Flash/AIR 應用程式(還記得嗎?)搭配 PHP/SQL 後端。我已經建立了足夠多這類型的應用程式,知道自己不夠聰明或技術不夠好,無法建立可良好擴充的大型 OO 專案。我知道我需要一個新的觀點。

感謝 clojurebook.com 和 Rich 的幾場精彩演講,以及 Clojure IRC 頻道和 Google Groups 中的優秀人士,我獲得了足夠的支援來轉換範例並重新學習程式設計。

將近七年過去了,我完全相信如果我們選擇了更傳統的東西,我們就不會繼續經營事業了。

您使用 Clojure 或 ClojureScript 的團隊有多大?

10 人定期將 Clojure/ClojureScript 提交至 Git,但我們幾乎所有 40 人都知道 EDN。 :-)

您使用 Clojure 或 ClojureScript 建置什麼產品或服務?

Cognician 旨在為全球工作領域的人們提供令人愉悅、改變人生的學習體驗。

該平台及其所啟用的學習體驗建立在這樣的想法之上:當人們的行為受到強大思想和深刻情感的激勵時,他們能夠成就偉大的事情。

Cognician 的核心是一個數位教練 SaaS 平台。您可以將其視為「大規模的蘇格拉底方法」。

我們建立了一個學習體驗目錄,這些體驗的組成部分,以及一個平台,讓我們能夠根據客戶的學習需求來配置這些體驗。

您最喜歡使用哪個 Clojure 或 ClojureScript 函式庫?

Datomic 在學習、使用和教學方面都非常有趣。它非常適合它所解決的問題的設計,而且使用起來非常愉快。

感謝 Datomic 的架構,我們得以避免兩個主要的頭痛問題

  1. 並行性 - 我們的網路伺服器實例僅共用瀏覽器 Cookie 和 Datomic。我們的後端服務僅與網路伺服器共用 Datomic 資料庫。使用資料庫作為值進行編程,讓所有這些都變得令人愉快。

  2. 檢視快取 - 我們完全不必擔心這個問題,因為我們系統上的每個檢視都是從原始資料即時呈現的!

還有許多其他函式庫,我們每天都在使用並從中學習!

使用 Clojure 或 ClojureScript 對您來說最有價值的是什麼?

Clojure 的資料導向強迫您正確處理命名,這反過來又強迫您深入了解您的網域。其可組合的特性讓您可以決定何時使用支援資料定義的工具,而不是行為的實作,而不是強迫您使用「唯一正確的方法」。

能夠在各個地方都使用單一語言思考,例如瀏覽器、伺服器、網路和資料庫,具有極大的價值。這感覺有點像可以選擇自己的物理學。在這樣工作一段時間後,會發生一些有趣的事情,你會停止看到語言,而直接看到領域。這有點像能夠理解駭客任務。 :-)

在人員方面,Clojure 吸引了一些最棒的創作者和問題解決者,我們有幸與他們共事,而且未來還會繼續有!

Clojure 或 ClojureScript 中你最喜歡的功能是什麼?

使用 REPL 進行程式設計會改變人生。它非常適合使用軟體解決當今現實世界問題的業務。

此外,Clojure 有兩種方法可以減輕其動態特性的缺點。一種是 解構,它可以幫助你明確說明如何使用手邊的資料,另一種是 spec,它有許多不同的槓桿點可以享受(全部都可選擇加入!),只需相對較少的初期投資。

為什麼使用 Clojure 或 ClojureScript 對你的業務有價值?

這是關於我們使用它時的執行速度。使用 Clojure 讓我們能夠

應對快速的變更速度,在我們的歷史中有很多關鍵時刻,我們必須能夠「立即轉彎」並徹底改變我們的做法。一開始程式碼越少越好,但也不必在我們使用的語言、資料庫或某些架構中對抗假設,這有助於我們「一筆勾銷」並重新開始。

快速建立一個運作系統,由於其動態、不可變和 Lisp 的特性,你不需要撰寫大量的 Clojure 程式碼就能讓某些東西運作。一旦需求明確,建立系統的速度就會很快。

以下是有趣的兩個小知識

  • 我們有大約 10 萬行生產用 Clojure/ClojureScript 程式碼。考慮到此程式碼執行的所有事項,這非常少。

  • 在我們的資料庫中,大約 1600 個 Datomic 識別碼中有 400 個被標記為已棄用,這有助於說明我們建立了多少東西,並在之後捨棄。

你的堆疊是什麼?

我們定期使用 Clojure、ClojureScript、Datomic 和 Sass 進行開發。

我們有一個衍生資料 SQL 儲存庫,用於 BI 工具進行互動。

我們在 AWS 上託管,使用他們的「鋪路」:Route 53、EC2、ALB、S3、CloudFront。沒有什麼驚喜!

我們使用 Buildkite 進行 CI,使用 Datadog 進行監控,使用 Sentry 進行錯誤記錄。

我們的堆疊中最有趣的事情可能是我們的 CI 系統——我們投入了大量精力,讓它更容易做正確的事情。我們有基於通用配置程式碼的重複環境,我們可以為 git 分支建立測試伺服器,我們可以將生產資料還原到沙盒中進行測試——所有這些都可以在按一下按鈕時使用。

我們可以在 15 分鐘內讓新程式碼上線,有時只需要 5 分鐘。對於需要更快速周轉時間的情況,我們有一個遠端 REPL。 :-)

如果您想分享您的 Clojure 故事,請填寫此表單