专栏名称: Fundebug
Fundebug为JavaScript、微信小程序及Node.js开发团队提供专业的线上代码bug监控和智能分析服务。
51好读  ›  专栏  ›  Fundebug

一个程序员的自我修养

Fundebug  · 公众号  · 前端  · 2019-04-25 10:00

正文

  • 原文: 一个程序员的自我修养

  • 作者: 徐宏伟

一天晚上,我和老婆聊天,说部门要我写个“大咖谈软件”的文章,老婆斜了我一眼,淡淡地说: “Linus大神21岁就写出了Linux内核的雏形,缔造了一个自由主义的开源世界; 张小龙28岁写出了foxmail,在2000年就卖出了1200万的价格。 大咖,认识您这么久了,还不太了解您有什么杰出的成就? ”我讪讪地咽了口水: “好吧,我重新组织下语言,我需要写个谈软件的文章……”

回首过去这半年,软件总工、软件专家的任命,还有新年伊始任总《全面提升软件工程能力,打造可信的高质量产品》的发文,都让我们这些写了十多年代码的软件工程师激动不已。 我2006年进入公司,几乎参与了华为3G控制器产品的完整生命周期,见证了华为3G从起步、上升、灵魂深处的改进、巅峰、回落的波澜壮阔历程,并在35岁“高龄”有幸加入到5G开发部的大家庭。

十几年来,我一直坚持在编码岗位,经历了普通开发人员、TL、MDE、MDEL、SDM(云化团队)、Committer、软件专家等各种岗位。 然而我却深知,不算大牛的我,从事编码这个“高危”职业十几年而没有被拿去“祭天”,依靠的是一个程序员的自我修养——扎实的基础软件能力、如履薄冰的工作态度、对技术孜孜不倦的追求。

好代码长什么模样?

记得几年前部门第一次评选优秀代码,我成为“金码奖”获得者之一。 是因为代码很炫吗? 并不是。 我参与评选的代码,遵循着简单的原则: 简洁、逻辑清晰、函数职责单一、合理的数据结构设计。 并没有使用高深的编码技巧,也没有应用某某设计模式。 正如公司最新的C/C++语言编程规范,也是将编写简洁的程序放在首位。 简洁、逻辑清晰的代码,易于阅读和维护,这段代码后面也因需求变化而被修改,但却从来没有引入过网上问题。

当然,简单不代表没有思考,恰恰相反,更需要我们在写代码之前谋定而后动、三思而后行。 有一次项目组安排我做性能优化,通过反复分析热点函数、反复测试比对不同话务模型下的性能差异,前前后后花了3个星期的时间,我找到了引起性能恶化的最关键因素。 最终我决定采用修改备份机制、减小备份数据的优化措施。 这些方案代码改动都很小、很简单,但实际优化效果却很好,满足了未来几年业务发展的需求。

再来看另一个例子,某局点升级新版本后出现CPU负载上升的问题。 经过近两周的攻关,我最终定位是新版本在业务处理流程中新增了直接读取DB内核的操作。 直接读取DB内核,代码处理简单,也能正常实现业务功能,但是性能却非常差。 如果开发过程中能多想一步,采用缓存的方案,性能会有天壤之别,也是更好的代码。

人们常说唯一不变的就是变化,客户需求一直在变化,我们的代码也会被动或者主动地在变化。 设计出可扩展、自动适应客户需求变化的软件架构,是软件工程师永恒的追求。 这说说容易,做起来却很难。 需要我们不停积累业务知识,扩展知识面,勤于思考,识别技术未来演进趋势。 我们无法从一开始就做一个无所不能的架构,来包含未来的千变万化,即使能,交付节奏也不一定允许。 满足当前及未来一定时间内业务需要的设计,或许就是最合适的。

练好扎实的基本功

能写出好代码,更要能持续地写出好代码,需要我们深刻理解技术原理和业务逻辑。 前提是具备扎实的编程基础,即基础软件能力,如基础的数据结构和算法、编译原理等。

去年底,我跟部门几个软件高手一起,去外部参加了一次互联网架构大会。 AI、区块链、物联网、云、中间件等时尚、热点、风口相关的议题非常多。 但是我没想到,最火爆的却是一些基础软件设计、架构设计和演进之类的专题。 就像武侠小说写的一样,练好基本功、练好内功,后续无论什么精妙招式,都会信手拈来。

另外,一些编程习惯,如果坚持下去,对于编程修养提升也是非常有用的。 比如快捷键的使用、有效的代码注释、命名规则、代码风格等。 每次写代码除了追求好代码之外,我都会时刻去思考软件上的优化,能否能使用更少的内存,能否有更好的性能。 重视数据结构中的每一个字段,重视每一处小的代码优化,都有可能给我们带来意想不到的收获。 比如去年做性能优化,我们仅仅是将流程中的一处动态内存申请修改为静态内存池,却意外获得了30 CAPS(每秒呼叫次数)的性能提升。

一行代码引发的惨案

有人问,道理我都懂,为什么却依然写不出好代码?

很多开发人员,因为个人习惯、赶工期、外部要求不高等多种原因,在编程时特别随意,直接Copy-Paste。 我觉得程序员应当像追求生活品质一样,养成不将就的编程习惯、严谨的编程态度。

对于代码上库,我一直都是战战兢兢,如履薄冰。 上库前我会反复看自己修改的代码,看修改代码的上下文,并进行修改前后代码比对。 代码上库后再看几遍,确保都已按预期合入。 进入公司这么多年,自己从来没有多合、漏合、错合过任何一行代码。







请到「今天看啥」查看全文


推荐文章
教你看穿男人的心  ·  做自信女人,教你抓住男人心!
8 年前
家庭祷告室  ·  真神与什么样的人同在
7 年前