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

欢迎!请参阅 关于 页面以了解如何使用本网站的更多信息。

0
Meta

我是编程新手。我开始学习 C++,甚至一些 Python。
我的背景是经济学。我在数学和经济学方面有很强的量化背景,我懂得 STATA。

总的来说,我想用编程来做:
(1) 为经济领域的 ML/AI 以及其他实用程序,如网络爬虫和其他数据驱动分析
(2) 为此,我认为匹配平台需要金融服务

特别地,我最近才意识到我爱编程。我年纪不小(35岁)才开始入门,但我给自己定了个目标,到 40 岁时成为一个全能的程序员……希望到时候我能够熟练掌握两种语言。

如果有工作机会,我可以转行,尽管我还是喜欢我的职业道路。我总是可以为我的工作,一家初创公司,或者成为一名全能的程序员而利用我的编程技能。

在线研究让我认为,Clojure 可能是一个值得专注的极好语言,因为它被称为快速开发(如果我想用它来创办一家初创公司,做一个孤岛开发者),数据驱动(经济和机器学习)的绝佳语言,并提供了一条成为优秀程序员的路径。

我的顾虑是Clojure并不像 Python 那样广泛使用,可能在使用机器学习项目时遇到很少的库(例如与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编辑器
工作流程就像与您的程序对话一样

其他语言鼓励您像死鱼一样编辑、编译和发送您的程序

如果您能尝试并与经验丰富的Clojurians交流他们在Slack上的工作流程

感谢这些提示!
+1

我认为Clojure作为一门入门语言非常出色。这很容易说,但要支持这种说法却很困难 —— 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]]

最终,我们想要编写让计算机表现出我们期望行为的代码。我认为立即看到你编写的代码执行结果是一个比在同一文件中用两种语言编写代码更好的验证行为的方法,其中一种基本语言是用于编译器与你进行对话(类型签名),另一种是用于计算机执行(函数调用)。噪音更少,认知负荷更小,更多关注于问题,更快、更有用的反馈 = 精彩的第一语言,我想:)

顺便说一句,我可以继续关于使用maps和泛型函数与类和方法的数据处理,但现在我没有时间。在Clojure中更加简单和简洁!

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

如果你已经有一些从Python中基本编程思路的想法,那么你学Clojure会很有优势。

我认为在学习的开始,重要的是要少投入多得回报,因此我总是试图一开始就限制未知量的数量。

Clojure需要宿主语言来运行,这实际上是一个了不起的特性,因为它受益于巨大的覆盖范围和最丰富的库生态系统。但对于初学者来说,这意味着在编写程序时,你将不得不在一定程度上学习Java或JavaScript。这可能会导致开始时的额外摩擦,因此我的建议是避免这种情况,直到你对核心语言有了一定的信心。

Clojure 同样受益于出色的工具,但如果你只是想入门学习,对初学者来说可能略显复杂。

为了学习这门语言,我认为一个好的开始方式是通过使用在线 REPL 和这本书:《无畏真 Clojure》。我会复制粘贴示例代码并对其进行分析,以测试你对所阅读内容的理解。

当你觉得你对其理解得足够深入可以对自己的能力进行进一步测试时,你可以尝试一个小挑战: Clojurescript Koans

希望现在你对 Clojure 有了基本的了解,并想编写一些程序。

通常的做法是安装 Java 并遵循入门指南

https://clojure.org/guides/getting_started

你可以先了解“REPL 驱动的开发”以及设置一个文本编辑器以获得快速反馈,在你开发的同时(Clojure 的一大乐趣)。

另一种可能的方式是获取 Babashka 二进制文件的副本,这是一个包括了(数量庞大的)Clojure 零部件的子集,我提起它是因为它非常简单易安装,允许你在无需进行大量设置的情况下编写真实程序。然而,如果你需要使用某些库,则需要使用 JVM 的 Clojure 来实现。

有许多资源可以帮助你学习 Clojure,先从核心语言和 REPL 开始,然后逐渐探索到你感兴趣的领域:)

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