2018 年 12 月 20 日
您使用 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 的架構,我們得以避免兩個主要的頭痛問題
並行性 - 我們的網路伺服器實例僅共用瀏覽器 Cookie 和 Datomic。我們的後端服務僅與網路伺服器共用 Datomic 資料庫。使用資料庫作為值進行編程,讓所有這些都變得令人愉快。
檢視快取 - 我們完全不必擔心這個問題,因為我們系統上的每個檢視都是從原始資料即時呈現的!
還有許多其他函式庫,我們每天都在使用並從中學習!
使用 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 故事,請填寫此表單。