OCaml 平台的使用者角色

本節概述 OCaml 生態系統中不同的使用者角色,並重點介紹他們獨特的目標、動機和挑戰。

定義這些角色的目的是建立一個框架,以指導 OCaml 平台的發展藍圖,確保它能滿足每個原型的獨特需求。透過理解並滿足每個角色的特定特徵,我們可以為 OCaml 生態系統的成功做出貢獻,同時賦能使用者實現他們的個人目標。

(U1) 應用程式開發者

建構 OCaml 應用程式以解決實際問題

使用 OCaml 的應用程式開發者專注於建構解決實際問題的方案。他們非常關心應用程式的穩定性、可靠性、效能和可擴展性。一些應用程式範例包括使用 Js_of_ocaml 為瀏覽器建構 Web 應用程式、使用 MirageOS 建構 Unikernels,以及使用 Owl 建構影像分類器。

  1. 應用程式穩定性和可靠性:應用程式開發者關心其最終使用者的體驗。向使用者發佈穩定可靠的應用程式對於提供正面的使用者體驗並最大限度地減少故障或停機時間至關重要。穩定性還使開發人員能夠降低維護成本,並專注於改進而不是錯誤修復或技術債。遵循當今的最佳實務包括可重現的建置,以避免移動依賴項的影響、保持對依賴項的嚴格控制以隨時掌握潛在的安全風險,以及使用工具來實施測試、強制執行最佳實務或執行持續整合。
  2. 效能和可擴展性:大多數應用程式都有需要遵守的效能限制,以實現可擴展性或提供良好的使用者體驗。可擴展性也是需要預期不斷增長的使用者群或資料集的應用程式開發人員普遍關注的問題。為了提高應用程式的效能,開發人員依賴儀器工具、效能分析器或基準測試。最佳化應用程式效能的另一種常見方法是支援對效能密集型程式碼部分進行平行處理。
  3. 發佈和部署:簡單的發佈或部署流程對於應用程式開發人員來說至關重要,他們可以持續將其應用程式交付給使用者。可以幫助開發人員簡化發佈工作流程的事項包括跨平台建置、CI/CD 管道、自動產生安裝程式、與跨作業系統的分發平台(Apple Store、Windows Store、Docker Hub 等)整合;產生目標平台資產(例如 JavaScript、iOS、Android 等)的工具;以及與提供簡化部署方案(如 Docker 或 Nix)的第三方系統整合。
  4. 安全性和合規性:應用程式開發人員優先考慮安全性,以保護敏感資料並維持使用者信任。他們可能必須遵守產業安全標準,例如維護軟體物料清單,並遵守法規。公司通常會組織安全審計,以主動識別和解決潛在問題。個別開發人員通常遵循不太嚴格的流程,依賴其套件管理員或漏洞掃描器的安全功能。為了進一步控制依賴項並增強安全性,開發人員可能會 Fork 和供應商函式庫,使他們能夠快速回應安全問題並自訂依賴項以符合其特定需求。
  5. 全面的文件和資源:存取文件和學習資源對於所有經驗水準的開發人員都至關重要。鼓勵與社群驅動的資源(如論壇和知識庫)互動也有助於建立一個支援性的生態系統,開發人員可以在其中獲取和貢獻知識。

(U2) 函式庫作者

建構可重複使用的 OCaml 元件,而非直接可執行

函式庫作者編寫由其他開發人員使用的程式碼,同時使用其他人的函式庫來建構自己的程式碼。他們專注於確保其函式庫設計良好、文件完善且易於使用。函式庫作者通常必須管理依賴項、版本控制、發佈和測試。他們可能會為各種目的建立函式庫,例如 Web 開發、資料處理或機器學習,並將其貢獻給 opam 儲存庫,供 OCaml 社群使用。

  1. 套件發佈:在套件儲存庫上發佈套件是函式庫作者分享其工作的主要方式。他們希望此過程盡可能直觀且無摩擦,以便他們可以專注於建構函式庫、編寫文件和吸引社群。
  2. 程式碼重複使用性和模組化:函式庫作者關心他們設計的 API 的可組合性,這些 API 易於使用且與其他函式庫協同工作良好。他們專注於建立簡單的 API 並遵循常見實務,以確保他們的函式庫讓開發人員感到熟悉。他們還會注意相容性,仔細選擇其他依賴項的 API,並權衡使用不同套件的優缺點。
  3. 互通性和可移植性:在某些情況下,函式庫支援特定的目標平台(作業系統、架構等),但在大多數情況下,函式庫作者希望使其函式庫盡可能多地提供給使用者。為此,他們依賴工具在不同的平台上測試他們的函式庫。支援函式庫作者的工具包括 CI 系統和跨平台建置系統。
  4. 程式碼品質和可維護性:當他們發佈函式庫時,函式庫作者會接受因語言和生態系統不斷發展而產生的維護成本。語言或函式庫依賴項中的每次重大變更都會產生摩擦。他們希望此工作量保持盡可能少,理想情況下不受生態系統任何變更的影響,僅在需要時才接受更新函式庫的維護成本。相反,他們希望知道發佈對使用者的影響:依賴他們的应用程式或其他函式庫。
  5. 文件和範例:分享他們工作的一個重要方面是確保使用者可以輕鬆使用他們的函式庫。為此,函式庫作者關心為其使用者提供良好的文件和其他資源以減少學習曲線,例如程式碼範例。此文件和資源需要與函式庫變更和改進保持同步,以便它們不會成為作者的負擔或與使用者無關。
  6. 社群參與和支援:函式庫作者努力與社群其他成員分享他們的工作。他們關心生態系統的健康和成長。他們也重視與社群的聯繫,在論壇和社交媒體上宣傳他們的套件、收集使用者的回饋,甚至促進對其函式庫的貢獻。
  7. 支援應用程式開發人員:最終,函式庫作者希望幫助應用程式開發人員 (U1) 取得成功。他們關心效能、安全性以及可維護性等層面,以確保他們的函式庫為建構應用程式提供堅實的基礎。透過專注於這些領域,他們使開發人員能夠使用其函式庫建立穩健且高效的實際解決方案。

(U3) 發佈管理員

致力於維護 Debian 或 RedHat 等 Linux 發行版

發佈管理員致力於維護 Unix 發行版,例如 BSD、Debian 或 Red Hat,並確保 OCaml 應用程式、函式庫和工具與其發佈政策相容。他們關心套件管理、共同安裝以及與外部(非 OCaml)依賴項的緊密整合。發佈管理員通常必須決定在其發行版中包含哪些 OCaml 元件,並確保它們受到良好支援且安全。

  1. 套件選擇和包含:發佈管理員負責為其發行版選擇正確的 OCaml 函式庫和工具。他們需要考慮長期支援、穩定性、相容性和功能可用性等因素。他們還需要確保一組一致的可共同安裝的套件,並管理出現的任何依賴項衝突。透過最大限度地減少套件不相容和重大變更的風險,發佈管理員為開發人員創造了一個可靠且使用者友好的環境。因此,與外部(非 OCaml)套件的無縫整合是發佈管理員的首要任務。
  2. 安全性和長期支援:發佈管理員需要隨時了解其發行版中包含的套件中潛在的安全問題,因為他們負責及時發佈熱修補程式和安全更新。他們還為選定的 OCaml 函式庫和工具提供長期支援,例如 Debian 的 5 年 LTS 支援,因此他們需要確信包含函式庫不會為發行版帶來額外的維護負擔。
  3. 套件管理和工具:發佈管理員不是依賴特定於語言的工具,而是使用其發行版的現有套件管理基礎架構。為了簡化其發行版的發佈流程,發佈管理員關心如何輕鬆將特定於語言的套件移植到其發行版套件管理員。

(U4) 新手

學習語法和語言功能

新手是剛接觸 OCaml 或有興趣為個人或教育目的學習該語言的人。他們通常會因為 OCaml 強大的類型系統、函數式程式設計範例以及豐富的工具和函式庫生態系統而被吸引。新手通常最關心的是輕鬆設定開發環境、擁有易於存取的學習資源以及獲得 OCaml 社群的指導。

新手們的背景各不相同;有些人可能嘗試過其他程式語言,而對其他人來說,這可能是他們第一次接觸電腦科學。學習 OCaml 的方式取決於個人的偏好和先前的經驗。他們通常最關心的是如何輕鬆建立開發環境、擁有容易取得的學習資源,以及獲得 OCaml 社群的指導。他們可能會從實驗簡單的 OCaml 程式開始,例如命令列計算機,或使用輕量級框架建立基本的 Web 應用程式。

  1. 設定 OCaml 環境:設定環境是新手學習 OCaml 的第一步。他們需要有全面的文件,引導他們完成簡單的安裝流程。如果他們在入門過程中的任何時候遇到錯誤,他們也需要能夠輕鬆理解問題所在。縮短安裝時間也很重要:透過盡量減少開始使用 OCaml 的時間,新手可以專注於學習和實驗該語言。並非所有人都需要在他們的系統上安裝 OCaml:使用線上 IDE、Playground 或 Docker 容器可以簡化想要盡快開始編寫 OCaml 的用戶的設定。
  2. 學習 OCaml:有些新手是有其他程式語言經驗的開發人員,有些則是將 OCaml 作為他們的第一種語言學習。考量到學習需求的巨大差異,新手需要能夠取得詳盡的文件和資源庫來學習 OCaml,包括指南、教學課程、語言手冊、套件文件。所有這些都需要滿足沒有經驗的開發人員的需求,同時也為有經驗的開發人員提供全面的資訊。新手也希望透過使用 Playground、互動式練習或適合初學者的內容,使他們的學習體驗愉快。
  3. 探索生態系統:一旦新手設定好他們的環境並開始學習該語言,他們將需要與生態系統互動,無論是透過使用 OCaml 套件、在論壇上提問、閱讀文件等等。向新手提供對生態系統如何組織的良好理解至關重要:如何找到問題的答案、最佳實務是什麼、兩種替代套件的優缺點是什麼等等。新手希望有他們可以重複使用的範例來執行特定任務,例如建立 Web 伺服器或命令列介面。
  4. 社群支援和指導:一個歡迎且支持的社群對於新手學習 OCaml 至關重要。學習一種新的語言和探索一個生態系統可能會讓人感到氣餒,新手可能會尋求社群的支援。社群中更有經驗的開發人員可以透過在論壇、聊天室、GitHub 和其他平台上回答問題,來幫助創建一個積極的學習環境。

(U5) 教師

教授 OCaml 語法和語言特性,或使用 OCaml 來教授其他電腦科學原理。

教師是負責向學生教授 OCaml 程式語言的個人。這可以包括教授 OCaml 的語法和語言特性,或使用 OCaml 作為工具來教授其他電腦科學原理。教師通常必須支援多個作業系統(例如 Mac、Unix 和 Windows),以便為他們的學生提供順暢的入門體驗。教師關心的是創建引人入勝的教育內容、確保學生的順暢入門體驗,以及將 OCaml 與 Jupyter Notebooks 等教育工具整合。

  1. 為學生提供順暢的設定體驗:教師需要支援學生使用的多個作業系統上的各種環境。他們希望盡可能簡化和統一學生設定開發環境的過程。為了做到這一點,他們希望能夠引導學生使用單一平台,該平台提供簡化的安裝體驗,例如 VSCode 擴充功能、線上編輯器等。他們還會為他們的學生製作逐步指南和教學課程,包括設定他們的環境,以及安裝和使用函式庫。
  2. 吸引學生:教師會盡量滿足不同的學習方式和學生的背景。他們會創建引人入勝的教材,並使用 Jupyter Notebooks 等工具來支援互動式學習體驗。他們會聽取學生的回饋、嘗試不同的教學方法,並在此基礎上不斷改進他們的學習教材。
  3. 與課程和學習目標一致:除了教授 OCaml 之外,教師還需要與相關課程(例如電腦科學、演算法、系統程式設計等)保持一致。教師設計課程和專案,以展示 OCaml 在這些主題上的實際應用。

(U6) 資料科學家

將 OCaml 用於短期專案,通常用於科學建模或資料分析

研究人員將 OCaml 用於科學建模、資料分析和其他短期專案。他們可能是學術界人士、研究人員,或是在包括政府和企業部門在內的各個行業工作的專業人士。

與應用程式開發人員不同,他們不一定專注於長期的軟體穩定性和部署。他們可能會開發用於一次性分析或快速發展模型的程式碼,其中靈活性、迭代速度和表達性至關重要。然而,與應用程式開發人員一樣,他們關心的是擁有高效的工作環境,並獲得資源來解決他們獨特的問題。

  1. 快速原型設計和靈活性:研究人員通常處理需要快速原型設計和不斷迭代的專案。他們重視允許快速變更和輕鬆測試的程式設計環境。
  2. 豐富的科學函式庫和工具:存取支援科學計算和資料分析的函式庫對於研究人員至關重要。同樣地,視覺化資料和分析結果的能力在他們的工作中通常至關重要。研究人員通常處理大型資料集,因此他們需要有效的工具來進行資料操作、清理和處理。他們通常還需要支援各種資料格式和資料庫。
  3. 與其他語言和工具的互通性:由於他們通常在更大的資料科學工具生態系統中工作,因此與其他語言(如 Python 或 R)和工具(如 Jupyter Notebooks 或 TensorFlow)的互通性可能很重要。這可能涉及從這些語言呼叫 OCaml,反之亦然,以及與其他資料科學工具整合。
  4. 可重複性:確保其他人可以重複他們的工作通常至關重要,尤其是在學術或研究環境中。這涉及追蹤依賴性、版本和環境,以及記錄他們的工作,以便其他人可以理解和複製它。

仍然需要幫助嗎?

協助改進我們的文件

所有 OCaml 文件都是開放原始碼。看到有錯誤或不清楚的地方嗎?提交 pull request。

OCaml

創新。社群。安全。