编程语言不是工作
初学者高估这个决定的重要性的主要原因是,他们不了解程序员的工作。作为一个软件软件工程师,人们付给你钱不是因为你会使用编程语言,而是因为你可以通过教机器如何解决问题来创造价值。在你的职业生涯中,你会学习如何使解决方案更简单,当复杂性不可避免时,你会学习如何将其分解,将一个复杂的系统分解成更简单、更易于管理的部分。你还会学习如何在不增加理解难度的情况下向你的软件添加功能,最重要的是,如何让别人也可以这样做。
这些技能都是完全独立于任何编程语言的,它们完全取决于你是否能够理解软件需求、编写算法、将解决方案分解为更小的逻辑单元,以及理解软件是如何工作的,专注于这些方面,会让你的编程生涯走的更远。
一个良好的心态
我并不是说编程语言一点都不重要。我所主张的是一种心态,即把语言视为我们可以使用的工具,而不是你工作的全部,没有人会认为选择最好的手术刀是医生工作中最重要的部分,因为你绝对不会信任一个连手术刀都不会拿的心脏外科医生。
在选择第一门编程语言时,你几乎没有任何信息,因此这种心态就变得更加重要。人们往往害怕在错误的编程语言上浪费时间,然而他们没有看到的是,每个人都有选择错误语言的经历,而且这与他们的工作没有丝毫关系。
之所以会出现这种情况通常有以下两种原因:人们最终会了解一个之前都不知道的新领域(比如你可能在研究一年后,才对数据科学有所了解);他们学习了更多已知领域的信息之后,找到了会使数据科学更容易的Python库。
更换语言是工作的一部分
将语言视为工具的另一个原因是,你需要经常更换编程语言,在过去的几年里,每次我加入一个正在进行的项目,我都必须学习一些新的语法。在一个例子中,我的新产品的首要任务之一是修改一个每天被数千万用户使用的功能,该功能是建立在一个我完全没有听过的编程语言之上。
另外,即使你没有切换项目,对于团队来说,在活跃的代码库中添加新语言,从而需要团队成员学会新语法也是很正常的,因为某种新语言的出现可以减轻每个人的工作负担,或者是某个重要人物决定采用某种彻底改变行业格局的语言(比如苹果在完全由Objective-C主导的OS中添加了Swift的支持,Google在Android中添加Kotlin的原生支持)。
考虑到当今市场存在这么多编程语言,以及所处地区的发展动态,迅速掌握新语言的能力成为了一项不可或缺的技能有人甚至会说,一开始选择错误的语言对你有好处!
不同语言之间比你想象的更为相似
上一节描述的场景可能听起来非常令人难以接受,但别担心,我并不是说你每次都必须从头开始学习一种全新的思维方式,事实上,快速学习新语言并不难,因为编程语言往往遵循类似的模式,需要学习一次,就可以在其他地方使用。为了说明这一点,我们来看一看用以下两种完全不相关的语言实现同一个简单的算法。
Typescript实现查找最小值的算法
Kotlin实现
这只是一个例子而已,在现实世界中,代码库必须处理大量的概念,这些概念在这些代码片段中没有涉及。但是,这两种方法看起来非常相似——当你向代码中添加更高级的概念时,情况往往也是如此。
事实上,除非你一直在学习非常奇怪的东西,否则无论你在哪里,过渡到一门新语言都应该是很简单,尽管对于任何人来说,掌握一个新的编程语言可能需要一段时间,但一个有经验的开发人员应该能够在第一次使用一种新语言后几天内编写生产级代码。
如何选择编程语言
我们已经确定了语言并不是工作中最重要的部分,你大可不必因为选择第一个编程语言而纠结,但是,这仍然是你成为一名开发者之前所必须做的,那么,你如何决定呢?这里有一些建议:
(1) 选择适合领域的语言
有些人一进入计算机科学,就确切的知道他们想要构建什么样的软件,如果你属于这种类型,就选择该软件领域最常见的编程语言,如果你想成为一名Web开发人员,学习Javascript,如果你想成为Android开发人员,则可以选择Kotlin,如果想成为一名数据科学家,你可能更应该了解Python。
(2) 选择一些简单的语言
学习算法思维和解决问题的能力已经够难了,同样,编程语言应该是一种工具,因此,尽量选择低级语言像 C++ 这样的低级语言可能非常强大,而且很实用,但我建议你从 Javascript 或 Python 等脚本语言开始学习,它们的入门门槛极低,可以让你专心学习核心的编程概念,而不是处理内存管理和底层机器问题。
(3) 选择好找工作的语言
虽然ALGOL开发人员可能也有市场,但你更应该找一个可以被广泛采用的现代语言,如果不确定要选择哪一种编程语言,你就选择更流行的,这样一来,当你遇到问题时,有一个强大的社区支持你,同时也会让你更容易找到第一份工作。
结论
最后我想通过列举自己的编程语言史来结束这篇文章,认为这很重要,因为我的人生轨迹就是一个活生生的证明。我学的第一门编程语言是C++,其次是Java,这是两种非常好的语言,拥有庞大的用户基础和一些非常强大的项目。但说实话,在过去的10年里,我们没用它们写过一行代码,在我的目前的职业生涯中,我还没有在非学术环境中使用它们,尽管如此,我依然不后悔学习使用它们,它们是一种工具,为我提供了表达编程概念的方法。
因此,如果你是完美主义者,希望想清楚你应该学习哪种编程语言,那么最终答案是:随便选择一种即可。