程序员的自我进化:技术的广度与深度怎么权衡

程序员的自我进化:技术的广度与深度怎么权衡

工作2-3年了,如果你已经走在自己喜欢和感兴趣的技术路上,那么首先恭喜你了;如果你还在技术圈迷茫和困惑,也请保持微笑。无论你属于那种情况,对于绝大多数人来说,不妨停下脚步来看看,我们应该如何看待技术。我们都希望自己的技术既有广度又有深度,但事实上,鱼与熊掌不可兼得,在有限的时间和精力里,我们不可能掌握所有的技术,而且技术的更新速度很快。因此,我们需要有一个正确的态度来看待技术,更好的提高自己。

本篇文章,笔者从自身作为一名程序员的角度出发,通过认识技术的本质、技术与业务、如何做一个技术T型人才等方面,给出权衡技术广度与深度的意见,为程序员将来的发展起到引导辅助作用。

技术的本质是什么?

在《技术的本质》这本书中,著名的经济学家布莱恩阐明了技术的本质及其进化机制,其主要表达了以下三个核心观点:

1.几乎所有技术都来自于此前已经存在的技术,就好比C、Java语言就是调动了多个功能最终实现一个功能。

2.技术都是由技术形成的,这句话可能有点难以理解。举例来说,火车的发明其实包含了多种技术,比如蒸汽技术,但蒸汽技术又可以被分解为燃料技术、动力技术等等。

3.技术和生物一样都会进化,但是生物的进化多来自变异,而技术的进化则来自不同技术组合所发生的变化。

布兰恩强调,技术并不会凭空发生。莱特兄弟发明飞机之前花了大量的时间来研究制造飞机的各种可能性,研究了飞机的不同部件应该怎样组合。“没有一项技术是其发明者在洗澡时想到的。发明一项技术一定需要很长时间的积累。”

N.Wirth(沃斯)曾提出:程序=算法+数据结构的经典公式。其中,数据结构指的是数据与数据之间的逻辑关系;算法指的是解决特定问题的步骤和方法。

计算机技术,无论从前端还是后端,无论是过时还是被炒得很热,其本质技术都来自于此前已经存在的技术,都要求具备良好的算法和数据结构,在此基础上不断衍生出许多新技术。

这也是为什么很多公司都看重基础的缘故,良好的技术基础,才会带来技术的创新。

技术重要还是业务重要呢?

上面给出了技术的本质,对于大多数程序员来说,我们通常说的技术泛指开发程序的技术、技巧,目的是写出安全有效的代码。

对于业务来说,业务就是需要处理的各种事务,通常偏向指客户实际作业涉及的事务,业务最终的目的是完成工作所做的所有事务。比如取款就是一种业务,ATM 机内运转的软件,要解决的业务就是取款。再比外卖订餐也是业务,口碑、美团这样的APP就是为解决订餐业务服务的。

而业务和技术的关系则指用技术来解决现实世界中的业务,并给人们的工作带来便利。比如到餐馆吃饭,要下楼、排队、现金支付,又麻烦又消耗时间又浪费精力,而口碑、美团 App ,通过把订餐这种现实业务虚拟化,为人们省去了奔波、排队、找零、耗时的麻烦。

因此,软件是现实业务虚拟化的载体,技术最终是为了解决业务问题。从这个角度讲,所有的开发者,其工作最终都是指向某个特定业务问题的。没有业务,技术的存在就没有意义。技术不能解决实际问题,不能给人们带来便利,就没有价值。

但从另一方面来讲,技术是现实业务虚拟化的必要条件,没有技术,现实中的业务就无法被虚拟化。而且,同一种技术又可以实现多种业务的虚拟化。

关于业务和技术的关系,这里总结3点:

- 技术是为了解决业务问题的,只有在实现业务、给人们带来便利的前提下,技术的存在才有意义,所以,多数时候,是业务决定技术、业务统领技术;

- 没有技术,业务就无法被虚拟化,生产效率就很难有效提升;

- 业务和技术具有相互促进、相互依存的关系。

我们回到开发者身上来看,很多开发者会用割裂的眼光来看待业务和技术,比如把增删改查(CRUD)看作是无意义的业务代码,把实现 Redis 这样的框架看作是有技术含量的事情。事实上,写业务代码多一些,还是所谓的技术代码多一些,没有高下之分,只是个人取向和组织结构、职责分工的不同而已。

但是,作为刚入门1-5年的程序员,为了更好的职业发展机会,有2个建议:

1.刚入行时作为普通程序员,技术是基础,有技术才能实现业务,公司在招人时也以技术水平为门槛,从这点出发,一定要在短期内迅速提升技术。

2.工作了 3 - 5 年的熟练开发者,可以独自负责一个业务模块时,需要更好地理解业务,这样才能更好的从技术上实现,此时业务和技术并重。

如何权衡技术的广度和深度?

俗话说,技多不压身。对于一个想在事业上有所发展的人来说,你还应放眼未来,多学几门技艺,不把希望只押在一个地方,这才是明智的选择。如同犹太人有一个不把鸡蛋都放在同一个篮子里的道理,就是用此来分摊现实风险。

但是,随着社会分工日趋细致,技术日新月异,我们发现技术在广度和深度上越来越难以平衡。想深度发展自己的技术成为某领域专家,心里却不甘心亦或担心自己技术会被淘汰;想广度发展自己的技术让视野变大,却常常感觉精疲力尽,热门技术都懂一点却又不深入,感觉啥都会又啥也不会。

面对出现上述现象的程序员,笔者认为,让兴趣来引导自己,把本职工作做到公司无人替代的位置,而不止步于此,并在此基础上广度发展。

下面具体来说说要如何权衡自己的广度和深度:

1.广度为辅,深度为主。人生、时间有限,我们不可能精通所有的技术,但我们可以努力地精通工作相关的、有前景的、感兴趣的技术。

2.基础扎实,深入底层。只是解决工作上的问题是远远不够的,应该在工作之余去学习更底层的技术,所谓知其然还得知其所以然。比如说我们使用java做开发,仅仅会使用是不够的,我们还得再理解JVM的原理等,多多思考:为什么要这样用?怎么实现的?还有更好的办法去实现吗?

3.触类旁通,适度学习。学任何的知识都要形成一个体系,才能学得深,记得牢。

如何正确的做一个技术 T 型人才?

权衡技术的广度和深度,更需要有一个正确的学习方式,端正的态度,而目标是做一个技术 T 型人才。

那什么是T型人才呢?

T型人才是指按知识结构区分出来的一种新型人才类型。用字母“T”来表示他们的知识结构特点。“—”表示有广博的知识面,“|”表示知识的深度。两者的结合,既有较深的专业知识,又有广博的知识面,这类集深与博于一身的人才。

如何成为一个T型人才,大家常用的一种方式就是轮岗。轮岗的意思是,当你成为某一方面的专家后,跳出自己的舒适区,转而到一个新的技术领域从头学起。轮岗的意思绝不是在一个技术方向上三心二意,每一次转换技术方向,都应该是对前一个技术方向至少做到熟练掌握的程度才行,而我自己觉得,不经过1-2年的实践,很难称作熟练掌握。所以,轮岗的行为是低频的。

如何正确的做一个技术 T 型人才,这儿有一些建议:

1.制定自己的职业发展路线;
2.技术和兴趣结合;
3.选择热门、成熟的技术。

最后,借用莎士比亚的一句话:笨蛋自以为聪明,聪明人才知道自己是笨蛋。做技术先有深度,再有广度,然后脚踏实地的去做!

如果要放弃技术,如何优雅的从技术转产品呢?

对于产品经理和程序开发一职,在业内有一个生动的举例:“产品经理好比打车的人,知道要去哪儿,并且知道哪条路最短;哪条路绕一点但是最顺畅;如果哪条路限行了,该走另外一条路。那么,程序开发团队就相当于是司机。打车的可以不会开车,但是要知道目的地,知道如何可以省钱,省时间。司机可以接不同的人,走不同的路线,只要能走到目的地就行。

那么司机如何变为那个打车的人呢?

[转型产品经理必看 | 我是如何从程序员一步一步走向产品经理]一文中,作者提出来转变工程思维、功能思维、产品思维三个阶段,并指出思维决定心态和行动。

工程思维下的产品产出更像是一个工业品,而不是一个能站在人的角度解决现实问题的产出。它是技术产物或者说是科研成果,远离实际需求和场景,最后会发现,这样的产品投入市场后几乎处于不可用状态,这是非常严重的问题。

功能思维下的产品产出具备了一定的可行性,因为它结合实际需求,在功能思维下我对整个移动App的产品功能设计有了深刻的认识,从信息架构到产品交互设计和部分视觉设计都形成了自己的思维模式。

产品思维下,这个阶段关注更多的是业务价值和业务目标,在充分理解商业战略的前提下来完成产品定义和产品设计,通过充分了解产品所围绕的业务场景去提升产品的可用性和易用性,改善业务体验和产品体验,提升整体的用户体验。返璞归真,回归产品的本质。

如何优雅的从技术转产品呢?其实产品和技术一样,需要通过不断的学习和积累加上不断的思考才能突破才能破局,也要经历学习、理解、掌握、整理、思考、突破的过程。从开始的好奇、憧憬,到中途的迷茫、自我否定,直到慢慢开悟和真正理解产品。

整个过程也是心态的转变,正如:放下,是一种修行,对过去的珍重和告别;拿起,是一种历练,是对未来的信心和期待。

总结

前面我们分 5 个部分,分别阐述了技术的本质、业务和技术的关系、权衡技术的广度和深度、做一个T型人才、优雅的转身为产品经理等。

总结一下,关键的其实有 3 点:

- 几乎所有技术都来自于此前已经存在的技术,注重构建自己的知识体系,并在此基础上把自己打造成一个T型人才;

- 技术是手段,业务是目的。软件开发工作是以业务为导向的,但是没有技术又无法实现业务。

- 不管做什么岗位,做什么职业,最终都是人生态度的转变,放得下、拿得起。

参考文献以及推荐阅读:

1.《技术的本质》,作者:布莱恩·阿瑟。

2.[转型产品经理必看 | 我是如何从程序员一步一步走向产品经理]

(0)

相关推荐