实际上,这是一个老生常谈的话题。类似的问题还有:技术的深度与广度,哪个更重要?标题之所以问如何取舍,而不问哪个更重要,是因为作为衡量技术的二个不同维度,如果脱离使用技术的人的实际情况以及特定的时代背景,是很难说清楚哪个更重要的。就像在没有任何前提条件的限定下,你很难回答手跟脚哪个更重要一样。但有一点可以肯定的是,一个人的时间和精力终究是有限的,你很难兼顾技术的深度和广度,所以探讨二者如何取舍,也许会更有现实意义。
先说说技术的深度。什么是技术的深度?这其实是相对于技术的广度而言的。如果我们谈论的技术仅仅局限于计算机科学领域,那么相对于全栈技术而言,精通后端技术便是所谓技术的深度。如果我们讨论的范围是后端技术,其中又囊括了数据存储、高并发、分布式、编程语言等子领域,那么在这些子领域有所造诣,也可以算作是技术深度的体现。
技术的深度一个最重要的特点是其是为解决某类特定的有边界的问题而生的,你很难将某个领域的知识经验迁移到另一个垂直的领域,也就意味着其具有很强的业务绑定性和平台依赖性。打个比方,同样是web开发,后端技术跟前端技术就大相径庭,你很难将后端技术直接迁移到前端领域,至少在“术”的层面上,两者的重叠性是很小的,几乎没法复用。二者的关联仅仅在于编程思想这些“道”的层面,只能说会了后端技术,你学起前端来会相对容易而已,但是具体到技术的细节,你不得不从头来过。
从思维层面上来讲,技术的深度体现的是“士兵思维”。士兵只需要负责执行将军的命令就行了,至于为什么要这样执行,出现特殊情况该如何处理,这些问题一般都不在士兵的考虑范围之内。此外,士兵往往只专注于某一个领域,如果让一个负责开炮的士兵去攻城,那么这个士兵大概率是没法胜任的。因为炮兵和攻城兵是二个不同工种,他们对士兵技能的要求是截然不同的,除非这个士兵具有很强的悟性和随机应变能力,否则仅凭一腔热血,可能城池还没攻下来,自己就沦为炮灰了。
反观技术的广度,则更侧重于解决没有边界或者边界比较模糊的不确定性较大的问题。这类问题不像1+1等于几一样直观明确,甚至连标准答案也没有,所以解决这类问题,需要比较广阔的视角和丰富的经验,技术的专业度反倒是其次的。与之相对应的思维则是“将军思维”。将军不需要知道怎么开炮、如何攻城,在专业熟练度上,他甚至可以比不上一个普通的士兵,但是他需要知道炮火应该怎么配置最合理,往哪个方向发射杀伤力最大,剩下的事情就交给士兵去执行就可以了,而将军的职责则是总揽全局。
以软件开发为例,如果是写业务代码,那么技术总监的熟练度不一定比得上一个初级工程师,但是如果是系统架构或者疑难杂症的诊断,则技术总监的视野以及经验就派上用场了。再举个历史上的例子,论攻城略地,刘邦比不上韩信,论运筹帷幄,则张良更胜一筹,但是最终坐上龙椅的则是刘邦。如果刘邦把时间跟精力用来和韩信比赛带兵打仗,或者跟张良竞争出谋划策,那么也许开辟新朝代的人就不会是他。
所以归根到底,技术的深度与广度到底该如何取舍,取决于你的屁股坐在哪一边。如果你是一位一线开发人员,那么技术的深度会更为重要,因为没有几家公司会同时要求一个初中级开发人员既能做web开发,又hold得住大数据,同时还对人工智能得心应手。大多数公司对初中级开发人员的要求都会更看重技能的专业度,因为这类开发人员的定位就是为解决特定问题而生的,至于这些特定问题之外的其他问题,则有与之相对应的其他专业人才去解决,每个人只需要做好手头的事情就可以了。而如果你是高级开发人员,或者已经晋升到了管理层,则对技术的广度的要求会高于技术的深度。因为对于技术管理者而言,需要处理的是没有明显边界的问题,如果没有广阔的技术视野和丰富的开发经验,难免会捉襟见肘。
当然,技术的广度离不开在某个领域的深耕细作,否则就成了只会泛泛而谈的半吊子,迟早会露馅的。
我们再把这个问题扩展开来,到底是精通技术重要?还是在技术过得去的前提下,对业务、产品、运营这些领域有所涉猎更加重要?这其实是关于“专才”与“通才”的讨论,答案同样取决于你的屁股坐在哪里,或者说你的屁股想坐在哪里。
如果你的职业规划是在企业里步步高升,那么专注某个领域,并且努力成为那个领域的专家,会更符合企业对人才的要求。而如果你的志向在于体制之外,则各方面都懂一点,眼观六路耳听八方,时刻保持警惕,才是在残酷的大自然中繁衍生息的不二法则。