初级程序员学习Scala合适吗?

11

我们正在考虑在公司内启动一个新项目,计划使用Scala语言。我们有一些只有PHP知识的初级程序员,我们担心他们是否能够掌握Scala。您有何看法?有人说:“Scala很复杂!” 也有人说:“一旦掌握了,它就很容易。” 或许有人有实际经验可以分享?


6
你怀疑这是因为他们是初学者(经验较少),还是你怀疑他们的潜力(也许编程不是他们最好的长期职业选择)?你的策略是“我什么都不知道,但我学得很快,让我们开始吧!”与“哇,我刚刚对这个有点熟悉,为什么你要搞混我?”非常不同。 - Rex Kerr
你不能用一般化的方法来处理这个问题,你必须检查他们知道什么,不知道什么,他们是否喜欢函数式编程范式?自从他们接触到它以来过了多长时间?他们是否只使用旧的、过时的和略有脑损伤的编程语言? - ZJR
13个回答

18

"我的同事们不会理解Scala" 同时夸大了它的难度并侮辱了你的同事。

  • Scala并不那么困难,它只是另一种编程语言。初级程序员在Scala上遇到的任何麻烦都会和在其他语言上遇到的问题差不多。

  • 你的同事很聪明。当然,我不认识他们,但这是一个相当安全的打赌,除非你的公司是那种雇佣愚蠢的人的组织,在这种情况下,你有更大的问题。

话虽如此,在我们公司中有一些核心产品是用Scala开发的,我们发现人们使用Scala并没有比Java更加困难。代码通常更清晰、更简洁,更容易推广和重复使用等等。


14

我认为 Scala 可以作为“初学者”语言使用。尽管它背后有一些棘手的想法,但在开始阶段不需要使用/解释它们。如果用 Scala 解释纯面向对象编程,我认为这是直截了当并且容易理解的。由于 Scala 减少了其他语言的很多代码开销,因此使用 Scala 学习概念甚至可能比使用 Java/C++ 更容易。

我认为 Scala 作为初学者语言的一个主要缺点是缺乏文档。不要误会,官方Scala文档非常好,那些少数可用的书籍也相当有用,可以了解到该语言的细节,但这些书籍并不是为初学者编写的。例如,在Java中,你会发现有数百本书的标题类似于“使用Java学习面向对象编程”,但对于Scala而言,你找不到这样的书籍,这可能成为阻碍。

正如Hannes所提到的,只应将新语言引入研究项目中,而不是生产或甚至旗舰项目中。如果你有一些初学者,那么情况就更好了,拿出一些内部工具,您一直想要并且需要,并让他们在一个研究项目中创建它。这也是尝试不同开发流程的好机会。你的初学者很可能喜欢接受挑战,并将提供一个良好的原型和非常好的证明,以确定Scala是否可作为初学者语言使用。


2
《Scala编程》绝对是为初学者编写的。而且,你在使用Java时学到的大多数东西都可以直接应用到Scala中。事实上,你可以以几乎完全相同的方式使用所有你喜欢的Java库。 - Apocalisp

7

我相信大多数转向Scala的人都是经验丰富和热情洋溢的程序员。在为初学者提供指导的策略之前,建议您先与高级程序员一起参与Scala项目以获取内部经验。我还建议您只涉及那些渴望加入的人。


4

我会推荐使用Scala。但前提是您必须对团队可接受的语言特性有明确的指导方针。例如,主要采用命令式编程风格(这对于接受Java培训的人来说很熟悉),或者限制递归或闭包的使用。

此外,计划让资深人员指导初学者。这可以采取任何组合形式:配对编程、代码审查、信息会议、定期讨论论坛等等。

Scala为JVM带来的巨大改进机会太过重要,不容错过。当您的资深人员开始使用它时,我不会感到惊讶,如果他们找到了开发的新热情。当你的初学者开始使用它时,他们将从一开始就学习最佳实践的JVM开发。


4
如果您选择这条路线,也许他们会发现使用Scalate框架比像Lift这样的更传统的框架更容易,因为它允许将HTML与Scala混合使用,就像PHP一样。

3

Scala是一种非常“普通”的编程语言。任何程序员都应该能够学习这种语言。那些在学习Scala时遇到困难的人大多数已经有使用命令式语言的经验,对函数式概念感到惊讶。因此,没有经验的程序员可能会更快地学习它。在我看来,将其分配给初级开发人员应该不成问题。从管理角度来看,我会将初级开发人员和高级开发人员组成一个团队(或根据项目规模增加人数)。


1

我最初的想法是Scala对他们来说可能太重了,但是我猜因为Scala是一种面向对象/命令式/函数式混合语言,可以先介绍他们到Scala的面向对象/命令式部分直到他们适应,但是由于Scala的作者大多更喜欢函数式风格而非命令式风格,所以他们可能会在Scala中保留不好的PHP习惯。

所以,虽然可行,但我只会将其用于研究项目,绝对不会用于旗舰项目。

编辑:或许还应该说一下:像Scala这样的函数式/面向对象混合语言似乎越来越受欢迎,特别是因为函数式语言在并行处理方面的处理方式与我们所知道的诸如Java之类的语言有所不同。芯片中的核心数量正在迅速增加,这一点很重要。然而,提到PHP,似乎你正在开发Web服务器脚本,线程性能不那么重要。PHP甚至没有线程。

这引出了另一个问题。你是否想要开发Scala Web应用,比如Lift。如果是的话,你需要面对的学习曲线会加倍,这也应该考虑到。


1

我认为这取决于你更看重什么。如果你想尽可能多地了解面向对象编程和标准知识,那么这是一个不好的主意。

但是,你真正给他们的是学习一些非常酷和独特的东西的机会。这可能是很好的动力。Scala 有很多很酷的东西。如果你能掌握 Scala,你也能掌握很多其他的东西。

与程序员(所有人)交谈,并告诉他们为什么你想使用 Scala。问问他们是否有动力去做和学习不是每个人都能做到并且超越常规的事情?

如果他们有动力,就去试试吧!


1

想象一下,如果你选择了Java并问他们是否能够处理Java,如果你的答案是可以,那么他们可能也能够处理Scala。

Scala只是因为以下原因略微更加困难:

  • 没有很好的IDE支持。支持范围从差到好不一定对PHP程序员造成问题。
  • 文档不如Java丰富

Java和Scala都对PHP程序员提出了新的挑战(JVM、新库、编译语言、静态类型)。

我认为Scala并不是一个复杂的东西,但你需要理解一些语法糖和设计原则,这在学习Java时也是正确的。


1

是的,如果...

  • 公司已经做出了选择使用Scala的战略决策
  • 公司可以承受从陡峭的学习曲线中带来的财务和时间压力。

不,如果...

  • 没有高级Java、C#或C++程序员能够参与项目
  • 找不到Scala程序员担任领导角色
  • 程序员没有耐心学习Scala或处理一个库(Jars)分散在各处而不像PHP一样集中在一两个整洁的包中的语言。

*注意:如果初级程序员是C++、C#或Java软件工程师而不是PHP,那么我的答案会有所不同,比如,去试试吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接