如何提高代码架构、设计、优雅的能力?

2020-10-28 19:36:23 +08:00
 DarkCat123

常常叹服折服于优秀的代码,觉得他们设计精巧,阅读流畅,需要的时候很多函数恰到好处送到了手边。

自己写的代码总是想一出是一出,耦合重,传参出参奇葩,职责不分,权责不明,东一榔头西一棒子。

在别人架构良好的代码上修修改改能做到不拖后腿,但是自己从头写一个新项目的时候,这个弊端暴露非常严重。

有什么文章、教程、书籍可以提高这方面的能力吗?

4610 次点击
所在节点    程序员
25 条回复
gowk
2020-10-29 10:26:07 +08:00
Learn By Doing
yixinlove
2020-10-29 21:48:09 +08:00
@DarkCat123 那你也是后浪了,我这种前浪只能被拍在沙滩上。
qinyusen
2020-10-30 09:44:11 +08:00
@DarkCat123
方法不绝对,我只是说其中之一,还有一个东西就是,提前写设计文档画 UML
我一般要求自己和带的人用 markdown + mermaid 反复画状态转移图, 和状态流程图,和业务流程图。

第一步 , 后先审图, 一般一个事情, 三图合一(互相验证没有明显看出来 bug 就基本 ok ),但是一般 3 年以内工作经验的, 都不用 review code,直接 review 这种图,就能发现一堆未考虑的点以及 bug,或者 case by case,抽象做的不好, 图巨大务必还很难看。 这是第一步。 把东西想清楚想明白。 一般都是 keep it simple (设计可读性 + 设计复杂度)的一个 trade off
新人 审 5 轮,老人审 3 轮。 防止出现设计完全是 bug,或者实现出来,没几天就推翻重写重设计(这个很多软件工程的书里都写的很明白,比如人月神话之类的,越早期的投入,越降低之后的投入,这里越少的投入,后面投入是指数级上升)

第二部, 写代码,写完代码 review, 一般来说 5 年以内的工程师,自己熟悉的领域不会出大问题( 3 年左右,还是会出现设计没考虑到实现不好做,或者写代码的时候发现欠考虑了),能做到设计文档和代码 1:1, 但是, 如果有新领域和跨部门配合,还是会出问题。 review 代码的时候,让其自己的设计文档和最后的代码实现进行 PK 。

一般来说,会出现几种情况(设计文档里命名和代码里不一致这种低级错误,推荐第一次提示,第 N > 3 次直接考虑劝退或劝跳槽, 态度问题无关工作经验,起名都没法 1:1,我怎么能信得过代码实现和设计 1:1 ?)
1. 手懒,实现的简单,设计了但是没实现或者弱实现
2. 想多了,代码实现的时候,过度设计
3.设计能力大于实现能力, 设计的很好实现不出来 =>增强一些奇淫巧技和代码套路的学习
4.实现能力大于设计能力, 代码里充满了奇淫巧技,做复杂了 , 很难和 2 区分,需要 review 的人个人能力碾压,才能识别出来, 这里需要考察代码 readable,更高维度的 readable 就是看了设计文档很轻松能对应上代码段, 这里一般是更高维度的 DRY, 因为他们 Repeat 的是之前的小范围的实现方式

12 其实是 34 的低级版本,其根源就是设计和实现阶段的脑力和体力的输出配比不均匀,我个人认为工程师代码讲究的是设计和实现的期间脑力和体力的持续稳定输出。 减少心血来潮,和状态不好的随意 /敷衍输出。

做到这点,基本上,代码这边儿就到头了(单纯字面意义的代码,不包含背后业务水平、管理水平、人力架构,项目架构(类似于怎么在合适的时间、合适的项目进度进入合适的人)这些东西)
DarkCat123
2020-10-30 13:13:34 +08:00
@qinyusen
"我一般要求自己和带的人用 markdown + mermaid 反复画状态转移图, 和状态流程图,和业务流程图。"
很感谢,我也经常用 md + plantuml,看来无意间做了正确的事情。
=====

后面几条非常好,帮助非常大这块。
我准备去实践了!!谢谢老哥!


---
我感觉有时候项目时间太赶,就搞的很难受,很多东西玩的不那么好。 —— 最近准备排期再多给点 buffer 试试。
e583409
2021-03-13 09:10:57 +08:00
好东西

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719560

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX