21

一个程序猿应该具备哪些能力?

 4 years ago
source link: https://xie.infoq.cn/article/ea930fa4773d523f92d15b6c9
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在IT圈混迹多年,代码写了很多,也读了不少。同时,也接触了很多程序猿同行,稚嫩的新人,技艺娴熟的高手,已入化境的高高手,还有在“孜孜不倦”挖坑的... ...

那如何才能脱离挖坑大队,成为一名高手,甚至是高高手呢?解决这个问题的前提得先思考清楚:一个优秀的程序猿应该具备哪些能力?方向清楚了,你才能定目标,你的努力才能事半功倍。

接下来就来看下一个优秀程序猿的能力模型是怎样的。

eeMbQru.jpg!mobile

如上图五星模型所示,能力模型概括为:需求分析能力、业务建模能力、方案设计能力、开发编码能力以及基本职业素养 五个方面。

一、需求分析能力

程序猿日常接收的开发需求,可以分成两大类:产品需求和技术需求。技术需求主要指性能优化、架构演进此类的需求,这个不做讨论,只聊产品需求。而产品需求自然是产品经理给的,这里就从产品经理的分类开始讲需求分析能力。

从前后台两个维度,将产品经理分为两大类:前台产品和后台产品。前台产品主要是指设计用户使用功能界面以及交互的,而后台产品主要是指设计支撑前台产品所需的后台逻辑架构的(比如阿里大中台)。大多数情况下,前台产品主要关注的是产品的原型和交互,较少关注后台的逻辑架构。

那请程序猿琢磨下,你当前合作的产品经理,是属于哪一类?如果是后台产品的话,一般情况下,产品经理会输出完整的逻辑架构以及原型,程序猿基本接收需求就可以按逻辑开发了。而如果是前台产品的话,一般情况下,产品经理只会输出原型以及简单的逻辑说明,程序猿没法直接进入开发,还需要做大量业务逻辑梳理的工作并与产品反复确认。

搞清楚这个状况后,程序猿就不用再盲目的纠结抱怨:为什么产品狗不能把逻辑写清楚,这样的产品方案存在一堆逻辑疑点,根本没法做... ...然后程序猿和产品狗的关系越来越紧张。

与前台产品的协作,程序猿就需要具备需求分析的能力,搞清楚产品做这个需求的目的是什么,这么做背后涉及的整个业务逻辑架构是怎么样的,把潜在的问题、风险、成本、建议等,及时整理输出与产品沟通确认。

二、业务建模能力

不管是前台产品还是后台产品输出的产品方案,都是需要经过程序猿的分析、翻译,才能形成可开发落地的技术方案。这个分析、翻译的过程就是业务建模的过程。那业务建模主要是指什么呢?

这里的业务建模主要指两方面:流程建模和数据建模。说的直白点,就是把产品方案涉及的流程图和数据模型ER图都整理出来。

怎么画流程图和数据模型ER图就不需要赘述了,重点是要重视起业务建模这个环节以及输出流程图与ER图。现实情况是,很多程序猿直接忽略了... ...

三、方案设计能力

技术方案设计往大了讲是指技术选型,搭建整个系统架构基架;往小了讲,是指在已经搭建好的框架内,完成产品方案的实现落地。这里讲小的,就是在需求分析、业务建模完成的基础上,做详细设计方案。

详细设计方案的内容包括但不限于以下几项:组件图、类图、时序图、数据库DDL以及缓存设计等。

  • 组件图旨在描述清楚当前模块与其他模块的关联,从微服务划分的角度看,要识别微服务的业务边界,控制好微服务的粒度

  • 类图旨在描述清楚当前模块涉及的类以及类之间的关系。在类设计的过程中,合理的使用设计模式,可以极大的提高代码的可复用、可维护性。

  • 时序图是流程图的另一种表现形式,可以清晰的展现整个代码的执行流程

  • 数据库DDL重点关注的是表结构和索引的设计是否合理

  • 缓存设计重点关注的是数据类型以及更新机制

以上列举了几项,看起来很简单,但实际开发中,很多程序猿同样是不够重视。如果叫你画下抽象工厂的UML类图示例,能画出来么?

不管你会不会,建议都好好学习下设计模式和UML。

四、开发编码能力

掌握一门开发语言(Java、PHP、Go...),这是程序猿最基本的能力了。至于使用同样一门语言,能写出什么的代码,这个真的因人而异,跟写作文一样。不过业界基本的开发规范还是可以借鉴的,比如Java开发要参考《阿里巴巴Java开发规范》。

建议多读高质量的代码,然后多写。

五、基本职业素养

前面扯了这么多,那作为一个职场人的基本职业素养的问题,各位程序猿有没有想过?可能有些同行,是没有考虑过这个问题的。以下是个人对基本职业素养的一点见解:

  • 实事求是,认真负责

  • 积极主动,勇于承担

  • 沟通协作,强力执行

  • 遵纪守规,自我约束

. 意思浅显易懂,但是各位程序猿,过往有做到么,未来能做到么?当然了,做不到不等于你不优秀。只不过做事虚头巴脑、责任心不够、被动、沟通协作能力差、执行力差、缺乏自我约束的人,估计没什么人喜欢。

IT圈子很小,坏事传千里,各位程序猿要注意积累自己的口碑。

以上只是针对需求分析能力、业务建模能力、方案设计能力、开发编码能力和基本职业素养五个方面泛泛而谈,希望对大家有点益处。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK