IT行业技术人员的核心竞争力

本文作者从一个IT老兵的角度,讲讲自己对于IT行业的技术人员核心竞争力的看法。此处说的IT技术人员就是engineer(以开发为例)。立意在于普通员工。是作者从自身经历出发,总结的如何在此行业中长期保有饭碗的问题。如果读者的志向是成为高管,业内顶级专家,恐怕本文能提供的信息还相差甚远。

A. 核心竞争力

曾经,有位长辈很关心我的工作,特意语重心长的嘱咐:“你要小心,你会的东西千万不能教给别人。俗话说的好,教会了徒弟饿死了师傅。”

我知道,这位长辈真心是为了我好。在许多传统行业当中,也确实如此。而且,抽象层面,这番话的含义其实是:一定要保有自己在行业中的核心竞争力,才能够保有饭碗。这一点我是绝对同意的。只可惜,长辈提供的具体战术在IT的行业无效——IT行业是一个讲求分享的行业,业内也有一句话:If you can’t be replaced, you won’t get promoted.

这句话有点zhuangbility,不过换一句讲也没什么不同。在教育、网络资源空前发达的今天,一个靠在软件里敲代码创造价值的行业,实在没有什么“核心技术”是一个具备基本素质且能上网的年轻人获得不到的。其他行业从业者耗十几年心力一点点摸索掌握的窍门,对应到IT,多写几条query Google一下,从理论论文到工业实现到best practice code瞬间一网打尽。

那么什么是IT行业技术人员的核心竞争力呢?窃以为包括如下四点:

  • 沟通能力。
  • 学习能力。
  • 全局眼光和行业洞察力。
  • 创新能力。

I.沟通能力无需多言:和Peer沟通,和Lead沟通,和PM沟通,和客户沟通……;体察对方,表达自己,将需求转化为Design,将Task拆解为AI的能力。就IT领域而言,除了双向的理解和交流外,还应注意,尽量让沟通高效,节约他人和自己的时间。具体到细节,比如说:能google百度到的知识信息就不要问别人。沟通能力还包括宣讲/讲课和辅导他人的能力,越是资深员工对这方面的要求越高。

II.学习能力不仅包括字面意义上的,通过阅读、听讲等方式习得新的知识技术的本领。还包括(更重要的),从实际工作中总结提炼的能力,即将现实问题转换为经验,并举一反三推而广之的能力。

IT行业是当今世界发展最为蓬勃的行业之一,创新的旗帜集合了一群这个世界上最聪明最具活力的人在一起焚膏继晷地研发各种新技术——那种一旦被发明出来就可以让一群人失业的东西。在这样的行业里指望靠着大学时上的几年课和工作最初几年的经验就从此高枕无忧属于做梦。行业在变,作为其中的一员,但凡还想吃这碗饭,就只能随机应变。身在IT,拒绝学习==找死。

这两点,沟通能力和学习能力,是入门级核心能力。换言之,就是任何程度、级别的engineer必备的。

III.全局眼光和行业洞察力。即对本行业本领域前沿研究、工业实践的了解,以及以此为据通过理性分析获得的对于行业发展的前瞻性预测。

这一点,也是区分IT新手和老兵的试金石。一方面因为形成这种行业性的vision需要时间积累,另一方面也是因为,在一个日新月异的行业里,年轻人尚可凭借青春年华、无家庭拖累、天然的可塑性等,到变化已经发生后再做出改变。而年长者在丧失了年龄优势后和后来者竞争,则必须借助之前的积累。

相对于I和II;III提高了一步,应该算是中级核心能力。

IV. 创新能力则属于高阶核心能力。

创新一词一提出来,大家可能会想到原创。确实,无论任何年代,这个世界上的原创者都是当时人类中最具才智的一群人。

人类儿童期的东西方先贤哲人,原创了人类的思维体系;终结蒙昧时代的科学家,洞悉了宇宙运行的规则,原创了一套人类的符号系统及对自然界规律的描述方法;文学艺术上史留名的文豪大师们,原创了美和对美的欣赏……于本行业而言,那些著名算法、数据结构、开创性技术方向的发明人可谓原创者。信手拈来两个例子: e.g1:有一篇微信传疯了的文章:《世界上最美丽的女科学家》的主人公,发明了“扩频通讯技术”的好莱坞艳星海蒂拉玛。e.g2:Geoff Hinton ,DNN,DL概念的提出人和关键技术突破者。他提出的分布式概念表示技术到现在才刚刚开始工业应用,而这一理论是他在1986年提出的。

大部分成不了这样的人。如果不是追求成为顶尖高手,而只是追求在中老年还能作为一个solidperformer在IT行业吃口技术饭的话。其实也不必做到原创。但创新力还是至少要达到能和业内高手共振的能力,也就是能顺利理解和跟进。

以最快速度将他人原创应用到自己所从事的具体领域和正在实践的具体业务上,就是一种跟进式的创新。举个例子来说:比如做DataMining,用现有工具做已经成型的事情,只能叫学习;通过读论文将新兴算法、方法应用到当前业务上,就可以算是一种微创新。

B. 职业发展

以上,比较抽象的列举了IT技术人员的核心竞争力。下面说一下IT技术人员的职业发展路径。因为作者一直在外企工作,所以就以外资软件企业为例。不过根据间接了解,本土很多企业也与之类似。

一般而言,软件企业内部,技术人员在积累了一定的工作经验之后可以走两条路:技术和技术管理。做技术就继续深入钻研,做管理就转型项目经理,然后沿着管理路线上行。做管理一段时间后大多会和技术分离,慢慢会远离技术。不过也有一些企业不太一样。比如微软,Google,Facebook更甚,就是技术管理不分离,即使做到高级管理职位,日常还要写代码。

总体而言,技术相对更独立,所谓IndividualContributor。这倒不是说日常要一个人干活,沟通是必须的,不过,日常工作中“硬”技术的成分更多,所掌握的能力相对更通用一些。而管理路线相对和公司绑定更紧密,当然这些都是相对而言。

C.面试经验

下面说一下,engineer面试的内容。根据作者本人被面试和面试他人的经历整理,专指industry hire(社招)。

大多数面试分为2部分,phone interview和onsiteinterview,还有些只有后者。onsite就是到人家公司办公室去面试,一般都是多轮。最常见的,每一轮中interviewer和interviewee 一对一。但偶尔也会有几个interviewer一起面一个interviewee的情况。

具体形式就是口头提问和写代码两种。写代码的话,大多数情况是让求职者写在纸上或者白板上,模拟推演,也有个别让求职者直接上机编程的。但即使上机,也都是不联网的机器。

具体的面试问题很多样,不过大概可以分为两类:项目经验和通用技术问题。

项目经验就是针对求职者之前做过的项目进行提问,大概会覆盖项目目的、内容、求职者的具体工作,应用技术,遇到过什么难题之类。有些interviewer会让interviewee选一个印象最深的项目讲。这项考察,有可能是考察interviewee之前经验和未来工作的匹配程度;有可能是了解interviewee在原团队的地位和具体价值;也可能是以项目为实例了解求职者的技术能力;还可能是要了解求职者解决问题的能力。

技术问题可以很宽泛,一般来说,每一项求职者写在简历上说自己会的技术都可能被问到。但也可以笼统分为两种:具体技术细节,和算法。

具体技术细节问题可能很基础。以Java语言为例,大致说明一下。

Java技术细节,举个最简单的例子:Vector和ArrayList的区别是什么?static inner class和non-staticinner class的区别是什么?final,finally的区别是什么?等等。这些关于语言本身,属于最初级。略深入一点,一般会问线程同步的问题,例如:线程同步的方法有几种,分别怎么应用,有什么优劣?还有就是Collections,Collection,基本每次都会被用到。这些都是信手拈来的例子。

和Java相关的还有一类问题就是design pattern。这个其实不是语言问题,不过因为java特别适合写design pattern,所以很容易考到。

还有一类,就是JVM相关的,也算java相关。GC一般是必问的。或者会问一些优化参数,或者outofmemory了怎么办之类。

这类题属于“死”知识,背下来就行。虽然JVM调优这种没经验不太好应对,但总体是可以通过背记完成的。

与这类题相对的就是算法题——让考生现场实现一个算法。这类题属于“活”考。

算法题又可以分为定式题和模拟题。定式题是指那种有通用固定解的题,比如这个题需要一种特定的数据结构(平衡二叉树、堆之类的);或者这个题可以对应到一种经典排序、查询算法;或者这题是leetcode,topcoder原题。模拟题则是指没有以上那些固定解,一般是有一个具体的问题,然后针对这个问题写特定算法。现在大多数求职者都会事先准备,有些应聘者会提前很久去leetcode上刷题。在这种情况下,模拟题就看出效果了。

算法题要注意的是:1.完成功能的同时bug free;2. 时空复杂度。所有的算法题一定都关心时间复杂度,有些会关心空间。完成一个程序后,千万要保证bugfree,然后再看时间复杂度,如果是O(N2)或以上的复杂度,一般就没分了。算法题至少要在O(NLogN)级别,一般要O(N)或者O(LogN),能O(1)最好。另外,算法题一般不会限制语言,用最熟悉的语言就好。

以个人经历而言,大多数公司的面试中知识题相对多一些,算法题较少。但也有些公司的面试,基本全部都是算法题。知识题偏重考经验,主要想要考察的是被面试者是否使用过这项技术,以及精熟程度。而算法题,基本就是考基础理论和智商了。

从interviewer的角度来讲,考知识题很容易,因为题是自己出的,事先记住答案就好了。而算法题对于interviewer也是挑战。因为要迅速看出interviewee写的程序是否有bug,和时空复杂度是否合乎要求。如果在碰到自己不熟悉的语言,也会有点紧张的。

还有,对于比较资深的人员,一般会考察架构设计能力。有可能是通过之前的项目,问有没有架构相关经验,如果有,是怎么做的,这样问比较实际;如果没有,可以虚构一个系统,请面试者当场设计架构。架构能力是在总结项目经验和学习业界先进实践等过程中习得的。对应学习能力的第二层。

D. 从新手到老兵

前几天听到有个人抱怨,说都工作好多年了,怎么还考算法,什么是时间复杂度都忘了。但是实际上,算法考察的标的,是我刚才列出的第二条核心竞争力:学习能力。时空复杂度是一切程序的基础,真正被用户使用的应用程序,一定会关注性能。时空复杂度就是一切性能的基础。工作多年有家有业的人不可能长时间什么不干去刷题,遇到定式题和能搜索到的模拟题时,可能不如刚毕业的学生和新手熟悉,这个是客观存在的。但是在算法上,达到一个及格水平,是任何年龄的人做技术工作的一个根本。你可以忘了B树的构建,但是不能连quick sorting,binarysearch都忘了。而所有算法的时空复杂度,只要知道原理都可以现场推出来。以忘了来解释不知道时空复杂是不成立的。

这也引出了一个个IT技术人员的常见问题:有工作经验的engineer和学生相比的优势是什么?或言,老员工相对新手的优势是什么?

其实也很简单,优势在于:核心竞争力I,II的高阶部分(属于沟通能力的宣讲/辅导能力,属于学习能力的总结提炼能力和架构能力),以及III,IV两点。

这里再强调一下第三点:全局眼光和行业洞察力(对应的英语词汇为vision)——年轻人的学习能力虽然强,但是毕竟入行时间段,对于业界的总体vision,一定需要时间培养的。老员工建立这种vision,可以指导自己的学习,知道下一步应该学什么。而且也应该知道自己的弱点在哪里应该补什么。年轻人学习起来容易部分主次,不得要领。那么作为有经验的人,则应善抓重点,虽然能用来学习的时间比年轻人少,但是对于时间的利用应该更高效。另一方面,因为具体的技术工作总是在变,总是需要新的方法和工具,那么具备vision的员工也可以在团队的技术方向选择、工具平台选取上做出贡献。

E. 个人成长

如果作者可以穿越回十数年前的大学时代,我会给当时的自己提什么样的建议呢?我会这样说:

在本科时期一定要打好理论基础,数学和计算机科学理论的基础课程和经典书籍一定要学好。数学分析、概率统计、线性代数、数理逻辑,真是书到用时方恨少。

当年一堆看起来毫无意义就知道扭曲方程、矩阵的公式原来是从具体的实际问题求解中提炼总结引申出来的,也是现在解决实际问题的基础指导。之所以学起来那样枯燥艰涩是因为期间的求解过程跨越了数十、百甚至上千年,我们有幸直接获取了既往一代代天才毕生研究成果的结论,实在三生有幸,居然没记住,或者给忘了,岂止是该打!

计算机类的课程,应该专注在数据结构、编译原理、操作系统等理论性强的课程,语言并非当时的重点。计算机类的书籍应该读《Introductionto Algorithm》,《Art of ComputerProgramming》等的经典著作,而不是把时间浪费在XX天精通XX之类的速成书上。结合经典书籍练习算法远比做个炫酷的网页、动画有意义得多。

研究生时期,应该在实践编程的同时着力培养自己钻研的能力。虽然没有读博士,到了读研期间也有机会接触学术、理论。至少应该多读些领域内前沿的论文,并通过项目实现理论文章中描述的方法或技术。

工作的初期,则把重点放在coding本身。在最初两年内实现三万行以上的有效代码,才算是跨过了IT技术人员的第一道门槛。之后才能逐步把focus向上提升,指向架构层,同时不断总结个人经验,兼顾业界前沿技术和发展动向。

F.IT之幸与IT之殇

说到底,IT技术人员,其实就是产业工人,和传统制造业的一线工人没什么本质区别。不同之处在于我们处在一个尚且年轻,新技术还在不断涌现的行业里。行业的现状使得我们在拥有同样的资历、相似的能力时普遍比其他理工科系毕业的同学多拿了不少工资,但同时也的确承担了更多被淘汰出局的可能性。

任何一个行业,发展规律都类似。在初期急需大量人才,使得许多学习能力强的年轻人可以跨过很低的门槛涌进来。又因为行业本身正是社会热点,而为行内的从业者戴上了一圈既“专业”又“高薪”的光环。

随着行业向成熟发展,创新空间日益趋于狭小,行业壁垒逐渐稳定,而整体劳动的自动化比例会大大加强。行业成熟的过程,也就是挤压大量低层次labor的过程。当此之际,不求进取的结果也就不言而喻了。

原文发布于微信公众号 - 悦思悦读(yuesiyuedu)

原文发表时间:2015-04-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员维他命

《重来》- 读书笔记

本书作者从团队到个人,批判了很多陈腐的商业思维,尤其适用于互联网行业,是互联网从业人员必读书目。笔者读完本书甚有醍醐灌顶之感,深深地被作者明智的头脑,风趣的语言...

983
来自专栏java工会

java程序员工作一年,如何巧妙的和老板谈加工资

2086
来自专栏web前端教室

选择很多,怎么才叫“对”

这段时间,我拉黑了一些群成员,因为他们问的问题很low。问我是不是前端做的久了,不容易做到管理?我直接回复是的。跟我说什么,要不就去学后端,后端更容易转管理什么...

1935
来自专栏我是攻城师

如何在三个月内获得三年的工作经验?

47914
来自专栏Java学习网

怎样才能叫高级程序员

Stephen Tobolowsky 在定义联体三角形 “我真的开始对我在这里做的事情感觉不自信了。如果我们都不知道高级程序员到底是个什么样子,那我又该怎么朝这...

3326
来自专栏大数据文摘

Facebook谋杀“失控”机器人?一个常见bug引发的恐慌闹剧

1885
来自专栏章鱼的慢慢技术路

华栖云科技图形图像视音频算法岗面试经验

注:此经验写于工作半个月后,主要为想从事图形图像算法岗的应届毕业生提供一些面试经验参考。

1422
来自专栏程序员互动联盟

程序员小明的修炼之路

小明毕业以后从事程序员的工作,他很努力。每天下班以后还抱着各种计算机书籍:程序设计语言,算法分析与设计,操作系统与网络,啃到半夜。小明相信机会只垂青有准备的头脑...

3538
来自专栏Miguel三先生

【趋势红利】心得

1826
来自专栏凌帅的阅读思考与实践

荔枝分享逐字稿:凌帅被朋友11次震撼后的思考(398人收听)

这是凌帅最近在007班级做的分享,已经有近400人收听,分享出来,希望对大家有醍醐灌顶的启发(这是他们说的,不关我的事),荔枝分享链接:https://m.we...

1734

扫码关注云+社区