女程序员肺腑之言:请停止美化不必要的复杂情况 - Sarah Drasner ‏

19-07-09 banq
              

我听过人们无数次吹嘘其他人要了解他们的工作需要多长多长时间,依我看情况正好相反。你应该吹嘘人们能够多快地理解你所写的内容。

当我看到那些能够以让别人可以简单理解的方式创造表达复杂事物的人时,我会对他留下非常深刻的印象。这需要的技能比人们想象的要多得多。

众说纷纭:

任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员编写人类可以理解的代码。Martin Fowler,2008。

乔布斯:“简单可能比复杂更难:你必须努力工作才能让你的想法变得简洁。但它最终是值得的,因为一旦你到达那里,你就可以移山。“ (banq注:愚公不能移山,将复杂性简单化才能移山,这才是真正的毫毛重于泰山!)

复杂的代码永远不值得骄傲。它不会让你聪明或比别人更好。编写清晰易读的代码只是优秀程序员可以做的事情。

以“硬”的方式做事并不能证明你更聪明......

我过去曾经这样说过这样的事情。大多数情况下,它来自生存偏见。

“我写这封信的时间比平时长,因为我没时间缩短它。” - 帕斯卡尔

简单的代码很难做到。它需要清晰的思考和对问题的了解。

你如何区分简单的极简主义(没有隐藏的复杂性)和简单的抽象(易于理解但很难重新创造)?在很多情况下(但不是全部),我发现自己更喜欢极简主义而非重抽象。

少量聪明的代码也很难推理,所以我也不一定意味着极简主义。

简单心理模态的捷径可能是极简主义,但这意味着剥离宝贵的灵活性/功能。我只喜欢一致的代码(规则没有例外),可预测和熟悉。所以感觉就像一个模式。

如果你不能用简单的术语来解释某些事情, 实际上表明你自己都不明白。

我的代码太复杂了,连电脑都不懂

简单性要困难得多。因此,事情往往会汇聚成复杂的解决方案

我正在处理一个复杂的遗留系统。我总是对项目中的新人说:它很complex复杂(有很多组件,交互的),但不complicated复杂(单个组件很容易理解)。

 

              

1
banq
2019-07-10 09:04

这个话题涉及复杂性的定义,需要对复杂这个词语再进行详细细分,但是中国词语只有“复杂”一个,不容易分析复杂,也许中国人对复杂不是很敏感?,我们使用对应英文中两个单词:Complex和Complicated,这两个词语都有复杂的意思,Complex是Simple的反义词,而Complicated是Easy的反义词。如果某事物复杂,意味着其内部结构不简单(Simple),可能由很多组件或部件组成,Complex复杂代表事物内部本身具备天然的复杂性;而某个事物Complicated复杂,代表其不容被使用,这已经和人的主观有关,牛人觉得一些工具不复杂,而新人觉得复杂,这种复杂可能因人而异,但是,软件工程中消除的是这种Complicated复杂,包括你的解决方案和代码,编写得要让别人更容易读懂,当然这涉及一堆针对复杂性的模式化处理,模式因为是大家都明白的套路,如同武术中基本套路一样,这样大家交流看起来就容易得多。

对于业务领域中客观存在的复杂性,我们需要将其用Complex复杂的组件结构来表达,一辆汽车的配件可能有成千上万,但是分而治之,每个人完成几个部件组装,且不相互影响。

所以,针对复杂性,两种办法:拆解成松耦合的组件 + 容易让人明白的套路表达出来。