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

工作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.[转型产品经理必看 | 我是如何从程序员一步一步走向产品经理]

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

  1. 程序员的自我进化——补上最短的那块情商木板

    程序员的自我进化--补上最短的那块情商木板 也许当微软的工程师们还在思考如何让聊天机器人快速进化的时候,万万没想到,刚刚上线一天,Tay就因在Twitter上言论不当而被强制下线.据说她不但辱骂用户, ...

  2. 程序员的自我进化:学习之道,如何更有效的学习

    不得不感叹,计算机技术更新迭代的速度太快了,作为程序员每天除了面对工作,就要学习新技术,笔者自己也不例外,近三年来,笔者自己的感觉是一直在为技术疲于奔命,直到现在,也不敢放缓脚步.学习对于程序员来说太 ...

  3. 程序员的自我进化:补上最短的那块情商木板

    也许当微软的工程师们还在思考如何让聊天机器人快速进化的时候,万万没想到,刚刚上线一天,Tay就因在Twitter上言论不当而被强制下线.据说她不但辱骂用户,还发表了种族主义评论和煽动性的政治宣言,事后 ...

  4. 程序员的自我进化:互联网公司套路多,如何避免自己被无偿辞退?

    从去年到今年,在裁员潮背景下,身边很多朋友都在抱怨被辞退.虽然在抱怨,但是他们的心情却不一样,有人拿到合法的补偿之后,发几声牢骚后便能迅速调整心情并投入到开始下一份工作的计划中,这当然是好事:但是也有 ...

  5. 程序员的自我进化:终于明白试图依靠跳槽和转行解决自身问题的,只会越来越差

    有一天你会明白,天下乌鸦一般黑,没有绝对的好与坏,不同时期,好与坏的程度也不一样,但是还是那句话,天下乌鸦一般黑,试图依靠跳槽和转行改变自己的,只会越跳越差,想不清楚自己的问题,解决不了实质性的问题, ...

  6. 程序员的自我修养--读阮一峰《如何变得有思想》有感

    前言 年前无意浏览到阮一峰的网络博客(链接),一发不可收拾,从那以后一直追着拜读其博客,并看到了其在网站上的广告(暂且称为广告)<如何变得有思想>,果断买来拜读,但是一直忙于各种事情,最近 ...

  7. 《必备干货!程序员的自我修养高效学习方法》观后笔记

    讲师介绍 7七月,全栈工程师,具有十年研发及团队管理经验,对程序员面临的各种问题深有体会:精通Python.Java.Node.js.JavaScript等语言,对Web的基础研发.高并发处理与分布式 ...

  8. java高深技术总结_一名25K以上的高薪Java程序员总结出的技术以及学习技能

    原标题:一名25K以上的高薪Java程序员总结出的技术以及学习技能 总所周知,Java是目前使用最为广泛的网络编程语言之一. 它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点. 一般 ...

  9. 阿里资深技术专家:在各阶段中,3年经验的程序员应具备哪些技术能力(进阶必看)...

    3年工作经验的Java程序员应该具备哪些技术能力,这可能是Java程序员们比较关心的内容.我这里要说明一下,以下列举的内容不是都要会的东西,但是你掌握得越多,最终能得到的评价.拿到的薪水势必也越高. ...

  10. 程序员的自我修养,好文

    很认真的聊一聊程序员的自我修养 本文正在筹备第二版,以下是第一版主要内容 首先要谈的是,今天的话题所聊的程序员包含哪些人? 在中国,写程序,不仅仅是一种兴趣,更多的时候,还是一种普通职业和谋生工具 大 ...

最新文章

  1. MyBatis 一对多、多对一的处理~
  2. 用Java实现Stream流处理中的滑窗
  3. jq控制div是否展示_选择控制台_调度台之前,这几点你应该要看!
  4. 红帽目录服务的数据导入导出
  5. ubuntu安装配置samba共享
  6. 腾讯研发效率领先的秘密:高效率的工具
  7. git 重新关联远程仓库地址
  8. sql server中创建数据库和表的语法
  9. java string转long报错_java.lang.Integer cannot be cast to java.lang.Long解决办法
  10. 沫沫金:PS快速扣头发丝【详细教程】
  11. 软考网络管理员学习笔记6之第六章互联网技术
  12. kubernetes入门(02)kubernetes的架构
  13. Python爬虫--urllib
  14. LINUX下载及编译libtool
  15. 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如 果该年没有举办世界杯,则输出:没有举办世界杯
  16. Centos7 上安装 FastDFS
  17. 教大家一个兼编辑和转换的快速看图软件免费使用方法
  18. 三态内容寻址存储器(TCAM)概念
  19. 学完大数据开发一般可以胜任哪些工作?
  20. vue实现二维码识别功能 读取二维码内容

热门文章

  1. 出差经历的人在囧途那一天
  2. Beta周王者荣耀交流协会第三次Scrum会议
  3. 俞敏洪-精彩绝伦的人生
  4. Android系统epub阅读器分享
  5. Java选择结构之switch
  6. 谷歌搜索语法(一)基本语法
  7. php微信银行卡rsa加密,企业付款到银行卡用RSA公钥加密银行卡号失败
  8. html表格宽度设置没效果,html表格宽度设置失效
  9. c++ ——二分查找函数
  10. python关系图谱_文本分析之制作网络关系图 Python