16|一切皆概念:程序的“好”是指什么?
李云

你好,我是李云。这一讲我想和你聊一聊什么是好程序。
在 15 讲我们聊如何提高编程水平时,你可能就留下了“什么是好程序”这个疑问。也是,如果我们一边讲如何提高编程水平,一边却不知什么是好程序,那提高水平这事就缺了目标感。在进一步讨论什么是好程序前,我想先问你一个问题:你认为编程的本质是什么?
编程的本质
当我在公开课和企业内训课上问学员这个问题时,得到的答案无外乎“为了实现功能”和“为了满足需求”,不知你是否也这么认为呢?不过,基于你的生活经验,但凡包含“本质”这两个字的问题,你的经验会告诉自己,提问人想要的回答没那么简单。
对于这个问题,我给出的回答是:编程的本质,是为了实现程序员与计算机,以及程序员之间的交流。你乍一听到这个观点,可能觉得有新意,也可能有疑惑,特别是针对更重要的后半句。什么,后半句还更重要?
前半句很好理解,程序员与机器交流的结果,就是“实现功能”和“满足需求”。不过,这个本质并不会给人带去太大的困扰,就是功能实现错了或没有满足需求,也是容易发现的,咱也大概率会采取修正的行动。
为了方便理解,后半句还可以表达为:编程的本质是程序员之间基于编程语言的交流。换句话说,程序员所写的程序不只是给机器读,还得考虑到他人也得读。与前半句不同的是,后半句的背后隐含了程序员之间无意识的相互折磨,甚至可以说,由此造就了程序员在职场所面临的最大痛苦和无力感——再乱的代码也得硬撑着维护下去。程序员所共同信仰的代码,最后却摧毁了彼此的信任。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《工程师个人发展指南》,新⼈⾸单¥59
《工程师个人发展指南》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- pyhhou“高内聚,低耦合” 让我想到了另外一个衡量程序好坏的概念——正交,这两者类似。两个相互正交的模块在功能和逻辑上均无重叠,对一个模块的修改不会影响到另一个模块,并且也没有重复代码,利于维护,模块和模块的职责也非常清晰,出了 bug 也可以快速定位问题。 正交这个概念用在团队管理上也是一样的,如果团队成员之间负责的事情不重叠,做的事情不重复,职责清晰,这样相互之间交流都会很清晰,合作也会顺畅。反过来,假设一个成员负责 A,B,C,另外一个成员负责 B,C,D,做一个项目成员之间相互依赖,这样职责混乱,很难管理不说,也很难高效做事。 最后,感谢老师的分享,老师有没有什么关于软件设计和写好程序的书籍推荐?感觉写好代码还得多读多练
作者回复: 你好, “正交”这个词也是我在工作中比较喜欢使用的,看来咱可是想到一块了。对于你讲到的团队管理方面的内容,你想表达的是事情要落实到责任人吧,这样当出现问题、需要协调时,有责任人就容易将事情给落下去。 软件设计方面可以试着读《设计本原》《实现领域驱动》《设计模式》这些书,而写好程序可以读读《代码大全2》《代码整洁之道》。另外,我觉得读开源软件是很好的一种方式,比如,如果你的工作语言是C++的话就可以读Chromium的源代码。具体哪一个开源软件,可以基于你日常所使用的主要编程语言去找,而且得找那些规模庞大的开源项目的代码来读,因为足够大才会有更大的复杂度,对软件设计和编程能力的要求也更高。当然,做这事可不简单,需要花相当的精力且坚持才行。
2024-04-23归属地:美国24
6点无痛早起学习的和尚
看到老师对“pyhhou”留言的回复,有个疑问了,那在职业不同的发展阶段,如果权衡软件设计能力、写好程序能力的占比呢?比如职业前期、中期、后期等等作者回复: 你好, 这个占比确实很难给出,但我想说的是,构建良好的软件设计能力和编程能力是工程师永远不能停下来的事,因为背后其实是概念能力和洞察力的培养,也是软件工程师核心竞争力(参见17讲)的落脚点,是贯穿职业的前、中、后期的。 大体上,我认为职业的前期会更多发挥个人的编程能力,后期会更多发挥个体的软件设计能力。
2024-06-18归属地:北京2
浅歌随风“高内聚,低耦合”是恰当切分概念的结果,降低了程序的修改风险。结合恰当地塑造概念,可使程序即易读,又好修改。作者回复: 赞!
2024-04-16归属地:上海1
收起评论