近期看了一篇文章,大意是软件开发者即将成为下一代的蓝领工人。查了一下wikipedia,蓝领工人的含义是:
In English-speaking countries, a blue-collar worker is a working class person who performs non-agricultural manual labour. Blue-collar work may involve skilled or unskilled manufacturing, mining, sanitation, custodial work, oil field work, construction, mechanical maintenance, warehousing, firefighting, technical installation and many other types of physical work. Often something is physically being built or maintained.
想象一下,就是在生产线上的装配工人,建筑工地的水泥工,油漆工。这一群工种不需要创造力,只需掌握某一种技能(如:给iPhone上一颗螺丝钉),而这种技能有很强的可替代属性。现在Tesla工厂很少使用汽车装配工人,完全机器化的厂房预示了这些“Blue-collar”可能会很快消亡。
好了,程序员怎么会成为下一代的蓝领呢?提起程序员这个词,可能首先会想到《社交网络》中的扎克伯格,打小就把软件卖给IBM的比尔盖茨,堪称创造了商业神话的天才们。然而,书本上的,电影中的只愿告诉我们最戏剧化的故事,现实却是那么平淡和无趣。之前媒体上经常提到一个词汇:范式转移(Paradigm Shift)。从工业时代到信息时代,程序员很可能就是新生的“工人”群体。
首先,大家的受教育程度普遍增加,与计算机相关的领域知识不再像过去那样难以理解,加上对于软件开发的市场需求有增无减,那么,有大批量新生力量涌入这个市场。不管是美国对于STEM(Science, Technology, Engineering, Maths)的政策扶持,还是大量打着“30天速成移动开发”的机构涌现,“程序员群体”在数量上即将壮大为一个“工人群体”。
其次,程序员所做的事情真的那么神秘?真的难以理解吗?像Mr. Robot美剧中,主角仅凭一己之力,在一个屏幕上敲打很多神秘字符,一场网络入侵就这么平息了。现实中,随着软件开发供给端人数越来越多,分工必然越来越细,伴随着越来越细的分工,一个程序员的工作可能就是保证一个登录页面正常运行,如果有问题,直接百度啊。也许这就能解释HackerNews中有人会问:Do we really need a CS degree to get a Software Developer job? (我们真的需要一个计算机科学学位来为软件开发工作做准备吗?) 从这个意义上来讲,这就和“蓝领工作”太相似了,学好一门技能,然后养家糊口。
在现在的互联网商业社会,技术是一种实现商业目的的工具,在量级比较小的公司,靠技术本身不太可能创造壁垒,换言之,我们都在学习和应用技术,只要找到学习能力好,对商业愿景稍微认同的人,这事情都能做成。“蓝领工人”和“码农”大部分都处在执行层。
这意味着:软件开发的工作更多会和“重复性劳动”,“步骤化”以及“结构化”联系在一起。当然了,这些属性意味着这种工作在不久的将来是可以被替代的。这种迹象,在“第X代编程语言”和“Serverless”等概念身上看到些影子。真正热爱这个行业的人,我们应该怎么提升自己的价值,保证高“不可替代性”?
1. 有广度;“广”意味着基本功扎实,基本功肯定不是“30天速成”能教给自己的,技能的学习无非是照猫画虎,而基本功需要长时间琢磨理解以及反复尝试,我理解的基本功包括:算法与数据结构,计算机网络,计算机系统,数据库等。静下心来想想,这个市面上出现了很多流行的技术词汇,有了这些基本功,面对这些新鲜词汇至少心不慌。
2. 有深度;“深”意味着在这个市场中的相对优势,从市场机制来讲,也只有你的某项能力优于市场平均水平才有议价的可能性。任何一个技术方向,我敢说只要一个学习能力差不多,也有一定好奇心的人,Google几个关键词,总能很快入门。真正的专家和小白的区别就在于经验,而经验这东西就是在一个问题领域不断折腾后才有的,肯定不能速成。
上面说的是一些硬实力,当然还有很多软实力,这些软实力不分行业,比如:交流沟通能力,有效计划和执行的能力,成熟的心智模式(瞬间重温了一下Teaching As Leadership)。举个例子:之前做老师的时候,我分享过一个老师一天可能要作出上百个微决策,而做决策是需要花精力的,而不断决策不断反思会帮助一个老师更好地成长;同样作为程序员,我们应该给自己更多作出独立决策的机会,决策 -> 执行 -> 反思。这种在复杂环境下的决策和权衡能力,是很难被某项技术替代的。
事实上,软件开发行业会变得门槛越来越低,但同时天花板越来越高,但在数量上呈一个三角形。能够被替代的永远都是底层的单一技术输出者。不由得给自己立下一个小目标:夯实自己的广度,精深某一方面的技能,刻意培养自己的软实力。