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

欢迎!请查看 关于 页面以获取有关这个平台更多信息。

0
Meta

我是编程新手。我开始学习 C++,甚至学习了一些 Python
我的背景是经济学。我拥有强大的数量基础(数学和经济),并且我知道 STATA。

总的来说,我想用编程
(1) 在经济学主题的 ML/AI 和其他工具,如网络爬虫和其他数据驱动分析
(2) 为此,我希望在 Fintech 匹配平台上工作

特别是,我最近发现我对编程很感兴趣。我已年迈(35岁),但是我想在40岁之前成为一名合格的程序员……希望那时我能够掌握两门语言。

如果那时有机会,我可以转换职业,尽管我喜欢我的职业道路。我可以用编程技能为工作、创业或成为一名全职程序员。

在线研究让我觉得 Clojure 可能是值得关注的优秀语言,因为它被认为是快速开发的绝佳选择(如果想用它进行创业,独立开发者使用),数据驱动(经济和 ML),并提供成为优秀程序员的途径。

我的顾虑是 Clojure 并非广泛使用,可能在处理 ML 项目时缺乏库(与 Python 相比),以及未来的就业前景等...

无论如何,我欢迎任何见解/建议/技巧。

先谢了,
Baye

4 个回答

+1

如果你需要使用 Python,你可以使用

https://github.com/clj-python/libpython-clj

https://github.com/gigasquid/libpython-clj-examples

从 Clojure 中使用 Python 库

Clojure 对你的学习要求很高
但我想它在实用方面有很多东西可以教授

对于很多人来说,它让人们重拾编程的乐趣

我建议尽早安装clj-kondo,并尽快熟悉它在编辑器中的使用。
通过使用丰富的注释将表单发送到您的REPL。

目前还没有什么能超过一个快速高效的REPL编辑器。
这种工作流程就像在和你自己的程序进行对话一样。

其他语言鼓励你像死鱼一样编辑、编译并发布你的程序。

如果你能尝试了解在Slack上经验丰富的Clojurian们的流程。

谢谢你的建议!
+1

我认为Clojure作为入门语言很棒。虽然这很容易说,但要证实这一点却不那么容易 — Clojure并不是我的第一语言,我之前学过Java。

我认为编程在整体上有一个相当陡峭的学习曲线,因为文本文件中的代码到执行时程序行为的映射非常复杂。作为软件开发者,你需要在脑海中运行一个虚拟机,它可以执行你编写的代码。从编写代码到看到执行结果的反馈循环越长,你的心理虚拟机的负担就越大,进展就越困难。其他主流编程语言试图通过类型系统和IDE来解决这个问题,但我认为它们在这一点上做得还不够好,因为

  • 类型系统引入了复杂性,并要求你始终编写关于类型的代码,而不仅仅是关于你的问题;
  • 类型系统是初步的,它们只检查类型中可以表达的内容,因此它们只能帮助你在组合事物时不要出错(例如,它们可以防止你将字符串和数字相加),但不能帮助你的代码在执行时的行为(例如,它们无法防止你想要将值添加到列表的开头时,却在末尾添加)。

为了帮助你写出正确的代码,类型系统变得越来越复杂。你可以看看Idris如何通过类型驱动的开发来帮助编写矩阵转置:https://youtu.be/mOtKD7ml0NU?t=1607
以下是Idris中矩阵转置的类型签名,没有任何实现:

transpose : Vect n (Vect m a) -> Vect m (Vect n a)

如果有一个允许实际实现比这个签名更短的程序,那会很棒。

(defn transpose [xs] (apply mapv vector xs))

如果你能立即尝试这段代码并看到它的行为,那会怎么样?

(transpose [[1 2] [3 4]])
=> [[1 3] [2 4]]

最终,我们希望编写出能让计算机按我们期望的方式运行的代码。我认为立刻看到你编写代码的结果是一种比在同一个文件中使用两种语言、一个用于与编译器对话(类型签名),另一个用于计算机执行(函数调用)更好的行为验证方法。更少的噪音,更少的认知负荷,更多的专注于问题,更快速、更有用的反馈,我认为这是一个美妙的第一语言:

(附言)关于使用映射和泛型函数与类和方法进行数据处理,我可以继续讨论,但现在我没有时间。Clojure 的表达方式更加简单和简洁!

感谢你的见解!
+1
感谢提供链接!
+1

如果你对 Python 的一些基本编程概念已有了解,那么你学习 Clojure 就有了良好的基础。

我认为在学习任何事物之初,重要的是以少量的努力获得大量回报,本着这个想法,我总是会尽量在最初限制未知量的数量。

Clojure 需要主语言才能运行,这实际上是一个非常好的特性,因为它受益于巨大的影响力和最丰富的库生态系统。但是对于初学者来说,这意味着在编写程序时,你迟早需要学习 Java 或 JavaScript 至少到一定程度。这可能导致最初时增加额外的摩擦,因此我的建议是基于在你对核心语言有了信心之后再避免这种情况。

Clojure 同样受益于出色的工具,但对于一个只想深入学习的初学者来说,设置起来可能有点困难。

我认为学习该语言的一个好方法是使用在线 REPL 和这本书:[Clojure for the brave and true](https://www.braveclojure.com/do-things/)。《Clojure for the brave and true》。我会复制粘贴示例代码,并对其进行操作,检验你对所学内容的理解。

一旦你觉得你对它足够了解,可以尝试一个小挑战:[Clojurescript Koans](http://clojurescriptkoans.com/)

希望到这时你已经有了一些了解,并想要编写一些程序。

规定的做法是安装 Java 并遵循入门指南

https://clojure.org/guides/getting_started

你还可以开始了解“REPL 驱动的开发”并设置一个文本编辑器,以便在开发过程中快速获得反馈(Clojure 的一个巨大乐趣)。

另一种方法可能是获取一个 [Babashka](https://github.com/borkdude/babashka) 二进制文件的副本,这是一个包括大量 Clojure 的二进制子集。我之所以提到它,是因为它安装非常简单,它允许你编写真正的程序而无需进行太多设置。但即便如此,如果需要使用某些库,你仍然需要使用 JVM Clojure 来实现。

网络上有很多关于学习 Clojure 的资源,从核心语言和 REPL 开始,逐步扩展到你感兴趣的所有领域。

感谢您的时间和宝贵建议!
...