首页 > 编程语言 >程序员修炼之道:从小工到专家阅读笔记06

程序员修炼之道:从小工到专家阅读笔记06

时间:2024-06-17 11:35:29浏览次数:35  
标签:改动 06 语言 重复 小工 正交 程序员 文档 代码

程序需要遵守的实用主义原则。

 

重复的危害:如果某个事物在代码中重复多次,就可能会在维护过程中带来问题,因为改动了一处而忘记改动另一处造成自相矛盾。这加大了维护难度。要遵守DRY原则,即Don’t repeat yourself。

重复通常由这些东西引起:

强加的重复,由文档或用户需求决定。这通常可以依照情况消除。需要重复表示的信息可以用元数据schema与代码生成器消除重复。注释与代码会重复,但实际上这种重复没有必要:注释不应重复代码中显而易见的东西,而应该表达更高级的东西。文档与代码也会重复,可以利用文档生成工具。有些语言会强加一些重复,这比较难解决,只能依情况而定,一些基本的技术是cpp中不要在其他文件中引用函数,而应该使用头文件。

无意的重复,由设计的疏忽造成,需要积极的检查和重构。如果为了性能需要违反DRY原则,记得将重复本地化,不要泄漏到模块外,并保持模块内行为良好。

无耐性的重复,可能造成远大于一时麻烦的痛苦后果。程序员要学会约束自己。

开发者之间的重复,需要加强开发者之间的沟通。

 

正交性:指系统各同层次的组件之间没有依赖关系,改变一个不影响另一个。如果系统不符合正交性,测试与维护会非常痛苦。而正交性的系统在出问题时更容易隔离修复,进行拓展时也不必改动已有模块,增加了生产力。

为了达到正交性,需要将团队分为几个清晰的小组分别工作,对系统进行模块化的设计。可以通过询问“讨论某个改动时需要设计多少人”判断小组分工是否正交,通过询问“改动某个模块背后的需求,会有多少模块受到影响?”判断系统设计是否正交。

引入第三方库时可能会破坏正交性,要小心不要使第三方库对整体代码造成改动。如果第三方库的接口存在问题,可以将第三方库用适合自己代码的方式进行封装。

编码也有可能破坏正交性,需要注意:使代码保持解耦,除了需要的功能不要暴露其它细节。避免使用全局数据。避免编写相似的函数。

对项目进行测试与debug也可以检查项目的正交性。如果测试或修正一个小模块会带来许多其它的影响,那么系统不够正交。

正交性同样适用于文档,文档内容与表达形式应该解耦。这让我想到了markdown……

 

可撤销性:许多需求会改变,许多政策会改变,所以编写项目时任何决策都应该可以撤销。项目结构应该保持灵活,不要依赖某个已有决策。

 

曳光弹:这个比喻有点晦涩。作者介绍了一种方法,编码之初先搭建一个大致框架,然后慢慢填充编码。这样既可以方便编码,又可以随时与用户沟通项目是否符合他们的需求。假如现有成果不符合需求,可以立马进行修改,而不必等代码基本固定时候再进行重构。

 

原型与便笺:不同于曳光弹,曳光弹在使用之后继续保留,只是逐渐“生长”成更完整的系统。原型是为了分析某个功能或需求建立的简化模型,将细节遮蔽以方便分析,用来找到最好的实现方式,然后便丢弃不用。如分析UI需求时先用绘图板确定最合适的UI,再用编码实现。

 

领域语言:任何领域都有自己的语言,如用于配制的语言,用于文档的语言,用于描述需求的语言。可以发展一种小型语言。小型语言分两种,配置语言方便解析但难以阅读,命令语言相当于小型的脚本语言,更近似于自然语言,但解析难度更高。小型语言可以是独立的语言,也可以嵌入高级语言的代码,方便直接执行。

标签:改动,06,语言,重复,小工,正交,程序员,文档,代码
From: https://www.cnblogs.com/xscya/p/18252045

相关文章

  • 程序员修炼之道:从小工到专家阅读笔记05
    程序员所应该遵循的实用主义原则。 我的源码让猫给吃了:出现错误时,要诚实,不要推诿或者找借口。要提供各种可能的解决方案与后果并与他人沟通,而不是提供借口。 软件的熵:这是著名的破窗户原理。项目中一个小的、无人料理的问题可能带来后续编码时的懈怠,从而造成更大的问题。不......
  • PHP 程序员转 Go 语言的经历分享
    大家好,我是码农先森。之前有朋友让我分享从PHP转Go的经历,这次它来了。我主要从模仿、进阶、应用这三个方面来描述转Go的经历及心得。模仿是良好的开端,进阶是艰难的成长,应用是认知的提升。希望我的经历对大家能有所启发。模仿著名艺术家毕加索说过「模仿是人类一切学习的......
  • 失败的程序员生涯系列(3)——第一次搭建商业化系统
             拿着800月薪的编辑岗,干了俩天的编辑活,开始接手开发团购网站。从现在的角度上来讲,有点不可思议,但这确实就是入门技术的起点。我之前在学校里面的技术基础,都是asp的网站居多,ASP网站最大的好处就是没有mysql概念,直接就是ACCESS,在OFFICE套装里面,是可以直接勾选这......
  • 失败的程序员生涯系列(2)——最低的工资
            当我获得了我人生的第一份工作,我的心态和情绪直接稳定下来。可能很多人觉得800的月薪很少。确切的说,确实很少,做一个横向对比,我的大学同班同学毕业去比亚迪的3500左右,拿到了美的offer的4500左右。        但是工作最大的价值有俩个,第一点,哪怕是一份非......
  • 云动态摘要 2024-06-16
    给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。最新优惠与活动[低至1折]腾讯混元大模型产品特惠腾讯云 2024-06-06腾讯混元大模型产品特惠,新用户1折起!云服务器ECS试用产品续用阿里云 2024-04-14云服务器ECS试用产品续用最新产品更新......
  • 06人月神话阅读笔记之三
    未雨绸缪 软件系统开发需要一个实验性的工程,这个工程的丢弃和重建都是可以接受的,而系统结构发生变化也会导致开发团对结构的变化;软件发布后,随着时间推移,需要的维护工作会逐渐增加干将莫邪 软件开发需要通用的工程技术,否则会导致沟通效率的降低,需要考虑到机器、编程语言等部分......
  • [240615] X-CMD 发布 v0.3.11,增加对 elvish 的支持
    目录X-CMD发布v0.3.11,增加对elvish的支持,并优化对nushell,fish,xonsh,tcsh的支持✨co模块-copilot✨elv模块✨hubX-CMD发布v0.3.11,增加对elvish的支持,并优化对nushell,fish,xonsh,tcsh的支持✨co模块-copilot新增功能:现在可以在--co|,子命......
  • [转]32th@深入解析C++并发编程:从多线程到现代C++并发库@20240616
    深入解析C++并发编程:从多线程到现代C++并发库你有没有想过,为什么C++在多线程并发编程方面如此强大?C++11标准的发布,为并发编程带来了哪些革命性的变化?本文将深入探讨C++并发编程背后的技术原理,带你领略现代C++并发库的强大之处。文章将结合代码片段,为你揭示C++并发编程的精髓。1.......
  • 冲刺06fragment_reg_chi_fil_inf.xml
    <?xmlversion="1.0"encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent&......
  • [转]32th@探索C++的模板元编程:揭秘零运行时开销的高性能编程技术@20240616
    C++的模板元编程是一种强大的编程技术,它能够在编译时进行计算,生成高效的代码,而且不需要任何运行时开销。这种技术被广泛应用于高性能计算、游戏开发、金融等领域,是C++程序员必须掌握的技能之一。本文将深入探讨C++模板元编程的原理和实现方式,并通过代码案例来展示其强大的功能。相......