请在2024年Clojure状态调查中分享您的想法!

欢迎!请查看关于页面了解更多关于该网站如何运作的信息。

+4
Clojure CLI
重新标记

这对于新用户入职尤其有用,包括那些安装额外工具非同寻常的用户。

从我的教学视角来看,如果能够仅用CLI工具就创建一个绝对最小的项目,那将真是太好了。“必须手动完成或者使用第三方工具”对一些学生来说是一个障碍,而这些障碍或许也对其他新用户有同样的影响。在上课的环境中,学生使用不同的机器和操作系统,有着不同的背景,一些开发者看起来微不足道的(如操作系统添加隐藏文件扩展名,编辑器编码文本,操作系统路径问题等)问题可能会产生大量的挫败感。

所谓的“绝对最小项目”指的是一个目录,其中包含一个空的deps.edn文件,还包含一个名为顶级文件夹的src文件夹,这个子文件夹再次包含一个名为顶级文件夹的单个文件(可以叫做core.clj),其中只包含一个最简单的ns表达式,命名空间名称与文件夹和文件名称匹配,除此之外没有其他内容。

我理解对于更一般的问题有很多需要考虑,比如CLI工具是否应该支持更强大的项目创建功能,如果是的话,应该创建什么类型的项目,如何组织等等。但这里的请求非常简单,我希望它能独立于更广泛的问题来考虑。我也希望这个最小项目创建功能能独立于更广泛的问题来考虑,因为我认为这将对一些新用户社区的入职带来显著的简化。

by
初步想法
将 `.config/clojure/tools/project.edn` 配置文件包含在 Clojure CLI 安装中,运行 seancorfield/deps-new 命令时将会执行 `clojure -Tproject create`。

这似乎提供了解决当前问题的解决方案,同时又没有把大量的代码设计引入 Clojure CLI。

或者该类可以克隆(或下载包含相关别名的用户配置的 zip 存档)以及提供这类工具而不需要专门为 Clojure CLI 设计项目工具

> 我假设 git clone 在范围内,因为有大量的方式可以通过桌面 UI、Web UI 等实现,因此这似乎不会超越原文档作者的预期受众(我已多次使用这种方法来帮助没有代码产品的用户)

理解极简项目的价值
我难以理解极端极简 Clojure 项目的价值,部分原因是我假设请求只是想要的东西,但没有详细定义其使用方式(课程计划的范围是什么)

详细说明 Clojure 的教学方式和所教内容的范围将有助于理解其价值。否则,它似乎非常具体于原作者的需求,而不是对社区有用的工具。

我的担忧如下

1. 依赖隐式的配置知识

拥有一个仅包含 `{}` 的项目配置文件,肯定会引发如何运作的问题,进而引出关于 Clojure CLI 如何引入 Clojure 依赖和添加 `src` 到类路径的讨论

2. 没有示例支持学习

包含一个极简的 `:paths` 和 `:deps` 配置可以通过简单的方式展示添加更多配置所需的语法(这可能超出了范围)

同样可以辩论包含别名的必要性,比如测试运行器

3. 为特定用途创建内容

在考虑更广泛社区需求的情况下,我认为在没有考虑更广泛社区需求的情况下(至少不是作为一个发布特性)引入项目创建工具到 Clojure CLI 中是不明智的。

4. 重复发明

clj-new 和 deps-new 已经提供创建项目的方法,并且一个极简的 scratch 模板似乎覆盖了原作者的需求(以我有限的了解)
https://github.com/seancorfield/deps-new#create-a-minimal-scratch-project

这可以成为课程安装说明的一部分(包括 Java 和 Clojure CLI),或者复制到学生电脑上的用户配置。

还有更多问题,但这完全取决于原作者请求的范围。

编辑了
关于“理解极简项目的价值”,我的当前用例是一个以Clojure作为编程语言的本科课程,但在这个课程中,Clojure和软件开发都不是课程的主要焦点。

我的当前课程是关于进化计算,但我在人工智能和其它课程中也做过类似的事情,我还知道其他计算机科学的教师在其他课程中也做了类似的事情。理想情况下,学生可以安装一个东西,然后就能够直接进入输入/编辑/评估/保存与我们所研究主题(在我的情况下是进化计算)相关的Clojure表达式。也许我们无法完全达到“安装一个东西”的理想境界,但将零基础写作/编辑/运行Clojure代码的路径缩短到最短是非常好的。我认为这对像我这样正在教授的课程的学生是正确的,也对可能在其他各种背景下独立接触Clojure的人是正确的。

如果deps.edn是一个支持的项目管理方法,并且确实有一个最小的“新文档”项目结构,那么如果你们目前进行的安装(CLI工具)能够给你们提供一个创建最小项目的途径,那就非常好了。

我的理解是我们只需要一个deps.edn文件,它必须包含一个映射,但是这个映射可以是空的。我们还需要一个src目录。由于单段命名空间被强烈反对,所以src目录下需要有一个文件夹。然后,我们新的文档(除了正确构建的ns表达式外为空)将位于这个文件夹中。

我意识到,一旦我们考虑其他任何东西,就会有很多选项,而且不清楚如何组织它们。但我不认为我建议的会涉及那个领域。

因为我们当前用于我课程的工具不具备创建项目的功能,我目前在课程的网站上分发一个最小的项目。但这不是理想的选择,原因有几个。首先,我必须给我的最小项目起一个名字,学生必须更改目录名称和文件内容才能更改它。对于不在我的班级中的学生(以及我怀疑来自各种视角、拥有各种背景和目的的人)来说,这也是在开始写作/编辑/运行代码之前需要找到和理解的东西。

关于John Stevenson的具体问题

1. 我班级里的学生不一定需要知道如何在deps.edn中使用{},或者CLI如何引入Clojure依赖,或者任何关于类路径的东西。如果他们最终需要了解任何这些,他们可以在以后学习。在任何情况下,如果知道这些知识不是开始编写/编辑/运行Clojure代码的必要条件,那就太好了。

2. 我同意,提供支持学习的示例是一个非常棒的想法。我希望看到更多。我最后一次检查时,我认为clojure.org上有关如何指定依赖的材料跳过了基本操作的详细示例,没有像我希望的那样清楚。但我认为这超出了本范围的讨论。



1 个回答

0
在此大胆推测...如果我们考虑特殊的用例“my-first-clojure-project”,而不是任何一般的项目创建,这可能是有趣的开始使用Clojure旅程的一部分。创建的项目可以像这个https://github.com/PEZ/clojure-zero, 没有基于Web的内容,也不是专门针对Calva。重点是这个项目可能内容很少,README可以提供下一步行动指南。我将提供一个示例以说明: https://github.com/PEZ/clojure-get-started-mini

创建项目的命令行可以支持一些小配置的选项,并且脚本可以跳入没有提供的选项的提示。选项可能包括
* 创建 Clojure 或 ClojureScript 或两者兼有的入门 starter 吗?
* 创建带有入门指令的 README 吗?
* 为哪个编辑器创建指令?Calva/CIDER/Cursive
* 在源文件中包括入门评论吗?
* 包含 <编辑器> 的入门材料吗?

入门材料的内容可以类似于Calva的入门材料: https://github.com/BetterThanTomorrow/dram(在配置方面需要更多的思考,但无论如何,我只想强调的是概念,而不是解决方案。)
by
虽然所有这些配置选项和入门材料可能都很棒,但哪些是正确的并不明显,包含可能让人困惑和不必要的许多提示/文本等,可能会适得其反。

如果我理解正确,所需的最小项目的争议很少。例如,我认为我定义的结构接近于Calva可以打开并让你工作的最小值,唯一不完全是必须的部分是避免单个段名称空间。

因此,如果CLI工具可以创建这类最小项目,那就太好了。所有的“入门材料”都可以在其他地方提供,然后如果人们对内容有不同意见,他们可以制作替代版本。在此期间,新用户可以在不获得单独的项目创建工具或从头创建项目的情况下开始使用Clojure。
by
不需要向用户展示很多选项。可以是项目类型选项,省略时提供一个提示信息。

1. 创建一个空的Clojure项目
2. 创建一个空的ClojureScript项目
3. 创建一个空的Clojure + ClojureScript项目
4. 创建 Beginners项目

这有点像在Pages或Keynote中创建新文档时的情况。它会打开一个对话框,让您选择创建空文档或模板文档。Google Drive就是这样做的

https://user-images.githubusercontent.com/30010/224144517-d9fce7d3-1feb-40ea-9c63-3de0f0ee1b70.png

只有您选择了非空选项,才会得到一些额外的提示。许多创建项目的工具都是这样工作的。在创建VS Code扩展时,建议使用`yo`,它允许您通过提示配置项目:[https://vscode.js.cn/api/get-started/your-first-extension](https://vscode.js.cn/api/get-started/your-first-extension)
...