我做软件开发的核心思想考量

要持续提炼思想和方法论的核心。

做一件事,就是持续不懈地追求道领悟道的过程,是要坚持持续不懈地去提炼思想和方法论的。

之前,我写过几篇文章,比如 "软件开发:组织大规模逻辑的技艺""软件开发之道:结构化技艺""谈谈程序员应当具备的技术思维"。这些文章汇聚和提炼了我十年来的最重要的软件开发经验和领悟,使我在软件开发活动中有据可依、有章可循、做事有分寸有尺度。

那么,当我重新回顾自己的软件开发活动时,有哪些思想在我的工作中起着提纲挈领、举足重轻的核心地位呢?

简洁清晰至上

越来越喜欢追求简洁清晰。

简洁清晰的首要是语义清晰,绝不含糊。写代码以语义为导向,而不是以技巧为导向。主流程要足够清晰,步骤明确。每一步采用什么手段来构建,很容易理解。

例子:

  • 命名要贴切,尽可能表达出意图和业务语义。
  • 用字符串表示枚举,而不是用数字代号【除非有排序要求】;
  • 状态和行为要分开,比如不要用隔离动作来表达已隔离的状态;
  • 尽力避免拐弯抹角的表达和实现。
  • 努力做到代码自解释。

这仍然是我努力在持续追求的目标。

写出健壮可靠的代码

有人奔着学习屠龙之术而去,而我只想写出健壮可靠的代码。

代码即修行。写出一次好代码,就是一次修行。代码是程序员技能品格的最佳证明。只有对代码精敲细作,才能写出牢固可靠、值得信赖的代码。

健壮性和必要的日志信息是最基本的要求。其次是性能和稳定性,然后是可复用性、可扩展性、可配置性。最后,安全性是最不可忽视的代码质量属性。而可维护性,则是改动成本的衡量尺度,是一个综合的代码评价。

要写出好代码,需要相当丰富的知识,一次次的实战磨炼, 还需要持续不断地做代码重构。在代码重构中持续提升编程技艺。

不过,我现在并不推崇过度高质量代码了,要求:能用、健壮、容易排查问题、性能过关。人生还有很多珍贵的事物值得追求。不必要把全部精力都投入在代码上。

系统设计观

在一定程度上能够写出好代码之后,就需要培养系统设计观,具备 Build System 的能力。

系统设计,需要从系统整体上审视系统,系统的模块、组件及关联关系,系统模块、组件的联动,从框架层面上保证系统的可靠而高效的构建。复杂系统,往往有复杂的联动关系,如果不从系统整体上综观,作出有效的权衡取舍,就可能像跷跷板一样,这里解决了BUG,那里又出错了。剪不断理还乱。

系统整体主要包括:系统的基础设施;系统的模块设计及技术方案;系统模块的关联设计;系统可用工具箱;系统的监控预警等。

培养系统设计能力,一个很关键的点是模块化和解耦。模块化是指将紧密关联的组件放在一起,解耦是将有关联但并不紧密的组件用合理的方式连接(通信)起来,尽量不受对方变化而影响,减少改动和出错成本。因此,培养系统设计能力,可以从模块化设计上着手,先努力做出好用的模块,再上升到系统层面。

要做到解耦,则需要做到良好的关注点分离。关注点分离是最基本又最核心的软件开发思想之一。分离状态和行为,分离视图、控制与模型,分离技术设施与业务逻辑,分离意图不同的逻辑,分离维度不同的实体,分离不变与变化等。

集中管理与一致性

要做到可维护性,集中管理与一致性必不可少。

  • 同一类事物,要放在一个枚举里;
  • 同一类操作,尽量采用一致的做法;
  • 一致的命名与错误处理风格。

一致性的一个重要体现是,避免写重复代码。涉及多段重复代码改动时,很容易改漏。

可复用、可扩展、可配置化

从显而易见的层面来看,编写可复用、可扩展、可配置化的代码,其目的就是在完成相似需求时,能够省事省力,提升开发效率,降低开发成本,也是管理者喜闻乐见的;从个人技能层面来看,编写可复用、可扩展、可配置化代码,对个人的设计、编程能力都有更高的要求,也更能锻炼程序员的思维能力。可谓是一举两得。

要编写可复用、可扩展、可配置化的代码:

  • 经常性地提炼公共逻辑、通用逻辑,可以培养可复用的编程思维和能力;主要技术手段是泛型+函数式编程。
  • 经常性地思考变化、在做需求的过程中密切关注需求有哪些方向上的变化,思考应对的方法,尝试去写一些简易框架来应对一类相似的需求,可以培养可扩展的编程思维和能力;主要技术手段是接口+设计模式。
  • 关注可配置化的思路和技术实现,尝试去做,可以培养可配置化的编程思维和能力;主要技术手段是脚本引擎和规则引擎。

在未来,可复用、可扩展编程思维是基础,可配置是软件开发的方向。低代码 + AI ,就是一个明证。

性能与稳定性

鉴于性能和稳定性是很多程序员都追求的目标,也是软件工程所注重的重要指标,这里就不赘言了。

  • 性能: 大数据量的查询和更新、大规模的计算;主要技术手段是缓存、并发、批量、索引、减少不必要的计算。
  • 稳定性:突发大流量的承载能力;主要技术手段是限流、熔断、削峰。

小结

简洁清晰、写出健壮可靠的代码、系统设计观、集中管理与一致性、可复用可扩展可配置化、性能与稳定性的考量,可以说是目前我做软件开发(仅从技术层面来看)的最核心的考量了。有了这些核心思想的引领,接下来就是技能和方案层面的事情了。

posted @ 2024-06-23 06:43  琴水玉  阅读(21)  评论(0编辑  收藏  举报