Language Matters

1. 语言对新手很重要

每当听到其他人说 “***是世界上最好的语言”,都不免换来一阵嘲讽和讥笑。毕竟在程序员的世界,菜鸟才谈语言,高手都聊架构和方法论。

回想笔者几年前还在学校苦熬时间的时候,常常为了毕业找工作愁上心头。二流学校的二流专业,老师会的东西都是陈芝麻烂谷子的技术。导师非要我们用 C# 来开发那些个 toy project,而我更早接触的是 Java,彼时阿里巴巴已经通过 Java 技术栈跻身三巨头之一。

我该学什么语言呢?我该学什么框架呢?抱着这个疑问,我把目光投向了我的师兄们。

大师兄务实地告诉我:C# 的用途大多在 Windows 的图形化桌面开发。C# 有优势的特定领域是地理信息系统(GIS),但是他估计彼时 C# 和 Java 的岗位的招聘比例大概是 1:5。

另一位师兄开始告诉我那句著名玄而又玄的话:“语言到最后是相通的,只要一门语言学精通了都一样”。当时我就有些疑惑,按照师兄的说法各大公司招聘为什么还限定语言呢?

本着校训“求真务实”,我还是参考了大师兄的意见,选了 Java 作为我的主语言。

一晃五年过去了,笔者也从小菜鸟成长为独当一面(自封的)的工程师了,心里只有一句“老子信了你的邪”想送给第二位师兄。

回想以前上编译原理的老师曾经说过:“等你们工作久了以后,你们的价值不在于你们的技术,而在于你们在这个行业的知识的积累”。但是结合我的工作经历,我还想加一句,作为技术工作者你从事的领域往往是和你所拥有的技术是相关的。

对于新手来说,你选择的主语言在相当长时间内会决定你从事的技术领域。

现在互联网行业所使用的计算机技术是如此复杂,核心技术都不是单个小团队能承载和维护的了。“背靠社区好乘凉”已经成为了工程师的共识。在这种背景下,跨个人、跨团队、跨公司甚至跨国籍的团队协作就成了趋势。

你和外国人交流第一个考虑的是什么?

语言!

2. 收敛技术栈是一种好的工程实践

和人沟通都要看语言,更何况写代码呢?

对于开发者来说,每一种语言都意味着巨大的学习和维护成本,降低项目的开发和运维成本是每一个工程师基本需求。

对于公司来说,收敛技术栈可以降低各种基础服务的成本。举个例子,代码的测试、上线、部署、监控、第三方组件的管理等服务,运维成本与语言数量成正相关。

对于 HR 来说,收敛的技术栈可以降低招人的难度。要找一个精通单一语言的人远比找一个熟悉多门语言的人简单的多。

3. 语言有各自擅长的领域

当前开源世界显现出一个新的趋势:特定的语言更容易在特定的领域发挥出光彩。

比如当红炸子鸡 Go 语言,凭借协程的特性在高并发场景下独占鳌头。我等 Javaer 还在为多线程苦恼的时候,Goer 已经在业务领域攻城略地。

但是反观大数据领域:Hive、Spark、Presto、Flink 等一众计算引擎都是构建在 Java 或者 Scala 这些基于 JVM 的语言,Go 在大数据领域似乎没有什么存在感。

php 在部分领域也许的确是“世界上最好的语言”,但是你要是告诉我用 php 写一个操作系统,不用细想我也知道你不靠谱。

目前国内的公司似乎都没有培养员工的耐性,开箱即用是基本要求,新手在切换技术领域的时候很难跨过这第一步。在用人单位看来:使用的语言都不一样,那更不会有相关领域的积累了。

4. 选择领域而不是语言

在我看来与其选择语言,不如选择技术领域和方向。

作为一个 Java 的使用者,作为一个大数据方向的从业者,我对一直对 Java 抱有信心。

首先,这是中国最主流的语言,背靠阿里巴巴和强大的社区生态。往上浮,可以去做业务 CRUD;往下沉,可以去研究各种中间件和大数据引擎的源代码,Java 是大数据领域的语言霸主毋庸置疑。语言总在相互学习、相互借鉴中发展,比如 Java 8 引入 Lambda 表达式和 Stream API 之后基本就重塑了整个 Java 语言。

悲伤的是,工程师往往需要工作几年之后才有足够的知识和经验去判断哪一个方向值得进行挖掘和探索,这又与上文探讨的问题的初衷又形成了一个悖论。

不过好在现在的年轻人接触前言技术越来越早,我读到研究生一年级还在为语言摇摆不定,对比现在的孩子在大二已经开始基础大数据和机器学习了。真是长江后浪推前浪,前浪死在沙滩上。