2024年Clojure调查!中分享您的想法。

欢迎!请参阅关于页面,了解更多关于它是如何工作的信息。

+4
Clojure CLI
重新标记

这适用于对新来的用户开展入门,包括那些安装额外工具非易事的情况。

从我的老师视角来看,如果仅使用CLI工具就可以创建一个绝对最小的项目,将会非常棒。“必须手动完成或使用第三方工具”阻碍了一些学生,以及其他新来者的进步。在课堂教学环境中,学生使用不同的机器和操作系统,以及不同的背景,一些看似微不足道的开发问题(如操作系统添加隐藏文件扩展名、编辑器编码文本、操作系统路径问题等)可能会产生大量的阻力和挫败感。

我所说的“绝对最小的项目”指的是包含一个只含{}的deps.edn文件的目录,并且包含一个名为与顶级文件夹相同的src文件夹,它又包含一个单个的子文件夹,这个子文件夹还包含一个名为core.clj的单个文件,该文件只包含一个简单的ns表达式,其名称与文件夹和文件名称相匹配,没有其他内容。

我明白在更广泛的问题上有很多需要思考的方面,比如CLI工具是否应该支持更完善的创建项目功能,如果应该,那么应该创建什么类型的项目,如何组织等。但我在这里的要求是如此之简单,我希望它可以在不涉及更广泛功能的问题的情况下被视为独立的问题。我也希望这个最小化项目创建功能可以独立于更广泛问题的考虑,因为我认为它将极大地简化一些新生用户团体的入门过程。

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

这似乎可以提供一个解决方案来立即解决问题,同时不会在Clojure CLI中引入大量的代码设计。

或者类可以克隆(或下载一个相关别名和工具的zip存档)用户配置,从而无需直接为Clojure CLI设计项目工具。

我假设git克隆在范围内,因为还有多种方式在桌面UI、Web UI等进行操作,所以这似乎并不会超出原帖贡献者的目标受众(我已经多次使用这种方法与使用无代码产品的人合作过)

理解超小型项目的价值:
我难以理解 极其简单的Clojure项目价值,部分原因是我假设因为请求的内容没有详细说明它的用途(什么是课程计划的范围)。

Clojure的教学方式和所授内容的范围将有助于理解这一价值的体现。否则,这似乎非常具体于原帖贡献者的需求,而不仅是一个对社区有实用价值的工具。

我的担忧是:

1.依赖于隐式配置知识

具有仅包含`{}`的项目配置文件无疑会引发疑问:它是如何工作的,进而引发关于Clojure CLI如何引入Clojure依赖并添加`src`到类路径的讨论。

2.没有例子来支持学习

包含一个简单的`:paths`和`:deps`配置将提供一种简单的方法来显示添加更多配置时所需的语法(这很难判断是否在范围之外)

同样可以通过包括别名,例如测试运行器来论证

3.为特定用例创建东西

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

4.重做

clj-new和deps-new已经提供了创建项目的方式,一个最小的毛坯模板似乎覆盖了原帖贡献者的需求(就我的有限理解而言)
https://github.com/seancorfield/deps-new#create-a-minimal-scratch-project

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

还有其他问题,但这完全取决于原帖贡献者请求的范围。
by
编辑 by
关于“理解超小型项目的价值”,我的当前用例是在一门以Clojure作为编程语言的大学生课程中,但Clojure和软件开发都不是课程的焦点。

我目前正在学习进化计算课程,但我已经为人工智能和其他主题的课程做了类似的事情,并且我知道其他计算机科学教师也在他们的其他课程中做了类似的事情。理想情况下,学生能够安装一个工具,然后就能开始编写/编辑/评估/保存与我们正在学习的话题(在我的情况下是进化计算)相关的Clojure表达式。也许我们无法完全达到“安装一个工具”的理想状态,但将零基础学习编写/编辑/运行Clojure代码的路径缩短至最短将是极好的。我认为这种情况不仅适用于我现在教授的课程的学生,也适用于可能以各种其他背景和环境独立接触Clojure的人。

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

据我所知,我们只需要一个deps.edn文件,它必须包含一个映射,但这个映射可以是空的。并且我们需要一个src目录。由于单段落命名空间被强烈反对,我们需要在src目录中创建一个文件夹。然后我们新的文档,除了一个构造良好的ns表达式外,将生活在那个文件夹中。

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

因为我们用于课程的工具现在不支持创建项目,我目前通过课程网站分发一个最小的项目。但这有几个原因并不理想。首先,我必须给我的最小项目起一个名字,而学生必须更改目录名称和文件内容来更改它。对于我的课程以外的学生(以及,我怀疑,来自各种视角和具有各种背景和目的的Clojure初学者)来说,这又是另一件事情,在能够开始编写/编辑/运行代码之前必须找到并弄清楚。

关于John Stevenson的具体关注点

1. 我班的学生不必 necessarily了解{}在deps.edn中的工作方式,或CLI如何引入Clojure依赖项,或任何关于类路径的事情。如果他们最终需要了解这些内容,他们可以在以后学习。无论如何,了解这些知识对于开始编写/编辑/运行Clojure代码并非必需。

2. 我同意示例支持学习是个好主意。我希望看到更多。我最后检查时,我以为clojure.org上的关于如何指定依赖项的材料跳过了复杂的示例,而没有像我希望的那样清楚地说明如何进行基本操作。但这超出了此处的范围。

3. 我不认为这是一个真正的特定用例。大多数文字处理器都有“新建文档”功能,尽管你可以说我所谈论的是为没有预存模板或单独软件创建新文档的人的“特定用例”,但我认为对于那些人来说,“新建文档”功能非常有用。由于许多Clojure编辑器和工具都需要项目,Clojure的“新建文档”功能将创建一个项目。在这个类比中,最小项目就像是大多数文字处理器中获得的空白文档。

4. 虽然有其他软件可以创建项目,但如果我们可以不使用其他软件创建最小项目,那就更好了。

1 答案

0投票
我在这里头脑风暴一下...如果我们考虑特殊情况,例如 my-first-clojure-project 而不是一般的创建任何项目,这可能是 clojure 入门旅程的一个很好的部分。创建的项目可以与此类似 https://github.com/PEZ/clojure-zero, 不包括基于网络的组件,并且不是针对 Calva 的。重点是它可能内容很少,README 可以提供下一步的指导。我将提供我的另一个入门级项目作为例子:https://github.com/PEZ/clojure-get-started-mini

用于创建项目的命令行可以支持一些小配置选项,且脚本可以将提示降级到未提供的选项。选项可能包括
* 创建 Clojure 或 ClojureScript 或同时创建入门级项目?
* 创建 README 并包含入门指令?
* 为哪个编辑器创建指令?Calva/CIDER/Cursive
* 在源文件中包含入门级注释?
* 包含 <编辑器> 的入门级材料?

入门级材料的内容可以用类似 Calva 入门级材料的方式众筹:https://github.com/BetterThanTomorrow/dram(在配置方面需要更多的思考,但无论如何,这只是我想强调的概念,而不是解决方案。)
虽然所有这些配置选项和入门级材料可能都非常好,但并不是显然应该选择哪些选项,并且可能包含过多可能会在某些情况下造成困惑和不必要的提示/文本等,可能会适得其反。

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

因此,如果CLI工具可以制作这样的最小项目将会很棒。所有的“入门材料”都可以在其他地方可用,然后如果人们对内容有异议,他们可以制作不同的版本。同时,新用户可以开始使用Clojure工作,而无需获取单独的项目创建工具或处理从头创建项目的问题。
by
无需向用户提供大量选项。可以是项目类型选项,如果省略将显示提示

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

这会让创建新文档时的感觉类似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)
...