关于服务
翻译我在 Clojure 和 ClojureScript 上开发后端和数据处理系统,利用语言提供的一切:函数式风格、不可变数据和在 JVM 上的安全并发。我以 REPL 驱动的模式工作——以小的经过验证的步骤逐步构建系统,因此当一个函数准备好时,我已经看到它在实时数据上运行。这种习惯使代码既富有表现力又可靠,这就是为什么我的服务通常在生产环境中安静运行,而不是在午夜唤醒值班工程师。
我的主要关注点是服务器端:HTTP 和 JSON API、流和事件管道、后台工作者,以及必须在负载下交付的集成。我将数据建模为简单的不可变值,并用规格描述它们——这将一整类错误转变为响亮的早期崩溃,而不是安静的数据损坏。对于真正的并行任务,我使用原子、引用、代理和 core.async 通道来保持并发作为一种能力,而不是一种赌博。
你将获得可读的代码,几个实时的 REPL 会话,让你看到系统的运行,以及一个不令人害怕的扩展解决方案。告诉我哪些保证重要——我会将其转化为稳定、可维护的软件。
— 在 Clojure/ClojureScript 上的后端、API 和数据管道
— 使用 clojure.spec 和完整测试的 REPL 驱动开发
— 使用 core.async、原子、引用和代理的并发
— 在 JVM 上的部署、性能分析和稳定支持
我的主要关注点是服务器端:HTTP 和 JSON API、流和事件管道、后台工作者,以及必须在负载下交付的集成。我将数据建模为简单的不可变值,并用规格描述它们——这将一整类错误转变为响亮的早期崩溃,而不是安静的数据损坏。对于真正的并行任务,我使用原子、引用、代理和 core.async 通道来保持并发作为一种能力,而不是一种赌博。
你将获得可读的代码,几个实时的 REPL 会话,让你看到系统的运行,以及一个不令人害怕的扩展解决方案。告诉我哪些保证重要——我会将其转化为稳定、可维护的软件。
— 在 Clojure/ClojureScript 上的后端、API 和数据管道
— 使用 clojure.spec 和完整测试的 REPL 驱动开发
— 使用 core.async、原子、引用和代理的并发
— 在 JVM 上的部署、性能分析和稳定支持