请教一下有没有比较好的软件工程实践,比如如何梳理流程图、拆分架构之类的

2023-11-23 13:52:44 +08:00
 xloger
这一年来我养成了开发功能前先梳理思路的习惯,比如新需求来了,我会先梳理清楚逻辑是啥样的,我大概要拆成几个模块,然后每个模块的职责是什么样的,写好对应的接口或者类图。
然后对于某个业务逻辑,也习惯先画个流程图方便沟通和避免跑偏。都是在 Markdown 里用 mermaid 画的,很方便。

这种习惯对我的帮助是比较大的,但是比较野路子(大学学的软件工程早忘了,而且实用度也不高)。我比较想系统地学习一下,对我们程序员来说,一个新功能的开发,怎么样的步骤可以辅助我们写出高质量的代码,效率也更高。
比如我目前的流程是:
根据需求,确定有哪些能力才能实现,并且考虑到将来的拓展;
将这些能力,拆分成不同的模块,大致定好接口和数据结构;
在接口和数据结构写得差不多的情况下,根据心情把想写的模块先写了,逐个实现。
然后在优化某个功能时,也会考虑让优化前后的逻辑是“可回滚、可比较”的,这样可以量化,也可以更方便检查 Bug 。

上述流程中可能会画一些流程图、类图、状态图来辅助我梳理思路。
但是既然是我自己琢磨和学一些零散知识的(比如“可监控、可回滚、可灰度”、TDD 之类的思路对我挺有帮助的),我相信市面上肯定有很多资深的大佬有这方面的经验分享(比如陈皓...),学习他们的经验意识是进步最快的方式。
希望有 V 友可以分享一些类似方面的资料或者书籍或者博客。(我怀疑我的用词不准确,搜到的资料不是很有用)
2368 次点击
所在节点    程序员
15 条回复
MyComputer
2023-11-23 13:56:21 +08:00
问问 chat gpt 4.0
tool2d
2023-11-23 14:36:05 +08:00
感觉挺难的,不同软件项目差异巨大。

因为开发需求不同,别人项目的痛点,对你来说可能并不是。

对我自己来说,能做好模块分层和解耦已经很不错了,代码量一旦堆到某个程度,想做点什么都会复杂化。
jones2000
2023-11-23 14:40:58 +08:00
来需求, 先跟提需求的业务人员沟通,了解为什么要加这个需求,用户的痛点在哪里, 然后找竞品,看其他家是怎么做的, 然后在开始动手设计。
sordidclown
2023-11-23 15:00:40 +08:00
取之于 V ,用之于 V:《面向对象分析与设计》
xuanbg
2023-11-23 15:19:51 +08:00
理不清思路,画思维导图。遇事不决,也能画思维导图。总之,画思维导图就对了。
sleepm
2023-11-23 15:24:09 +08:00
《大象:Thinking in UML 》 不是特别推荐,因为太多了,而且现在还有函数式编程,面向切片编程,但是感兴趣可以看看
《你的灯亮着吗? : 发现问题的真正所在》
没有捷径,看书,看代码,敲出来,实验,理解
模拟一个需求,拆分,先实现个 MVP 最小可行产品
完善/加功能,优化,继续搭积木
再复盘,理解本质,优化的时候也会思考,哪些可以复用,有哪些实现方式,优缺点是什么
测试,灰度,架构,高可用,链路,那些可以像打怪样的一级一级来
sleepm
2023-11-23 15:24:36 +08:00
工欲善其事必先利其器
xloger
2023-11-23 16:13:20 +08:00
@MyComputer 嗯我问了一下,它的回答是:

《代码大全》:这是一本非常经典的软件开发书籍。从需求分析、设计到编码实现,再到测试和维护,书中都有深入的讨论。书中还强调了代码质量的重要性,给出了很多实用的代码优化技巧。

《重构:改善既有代码的设计》:这本书主要讲解如何通过重构技术改善已有代码的设计,使其更易于理解和维护。书中提供了很多重构的实例,可以帮助你进一步理解和掌握重构技术。

《敏捷软件开发:原则、模式与实践》:这本书从原则和模式两个角度介绍了敏捷软件开发方法。书中讲解了很多设计模式和编程原则,可以帮助你更好地设计和实现代码。

《软技能:代码之外的生存指南》:这本书讲解了很多软件开发之外的知识,包括职业发展、学习方法、人际交往等。这些知识对于提升你的软件开发水平也非常有帮助。

阮一峰的网络日志:阮一峰是国内知名的程序员,他的博客中有很多关于软件开发的文章,包括编程技巧、设计模式、前沿技术等,都非常值得一读。

陈皓的博客:陈皓是 CSDN 的创始人,他的博客中有很多关于软件开发的文章,从软件开发的基本原则到设计模式,再到软件开发的最佳实践,都有涉及。你可以从他的博客中学到很多实用的知识。

这几本书我觉得不太适合我的地方在于:
前两个,我这其实不是代码层面的技巧了,而是靠一些“工程意识”去辅助写代码。而敏捷开发的问题在于,我改变不了整个项目的开发流程,我只能也只打算管好我自己,那这些需要配合的策略不适合我。
那本软技能就是一些面试之类的其他技巧,有点偏了。
xloger
2023-11-23 16:37:35 +08:00
@tool2d 是啊,我也觉得很难,不同项目、岗位的差异都是很大的。所以我的思路是学习后取其对我有用的,比如“可监控、可回滚、可灰度”,这里面我身为 Android 客户端开发,是完全没有回滚灰度需求的(靠版本控制而不是代码控制了)。
但是我觉得这种意识对我的平常开发帮助还是很大的。如正文所说,我会在开发时有意识让我的代码是“可回滚”,可以方便地切换新旧逻辑供调试(而不是频繁切换 Git ),“可监控”就是让我有意识地让代码的逻辑完整,比如对一些不可能的逻辑不直接 if xxx return ,而是会加个埋点,如果真的发生不该走的逻辑能及时发现。

模块分层确实是永远的难点,这个我就确实不指望能学到啥就能一劳永逸了,只能靠经验分析,成长。这个我当初看到过一个文章对我的帮助还是挺大的:<https://www.maguangguang.xyz/layered-architecture>



@jones2000 嗯是的,这些目前是有的,不过侧重点在产品那边。我司现在的产品他们需求分析做的挺好,竞品对比也很完整,不用我太操心这些。我现在困扰的地方在于需求到代码之间的这个桥梁,如何用更好的工具和文档辅助。


@sordidclown 谢谢,大概扫了一眼,很全面很理论。书应该是好书,我努力看看能不能看下去吧


@xuanbg 我个人(个人观点)一直不太习惯思维导图,因为我感觉思维导图承载的信息量有点小,我个人更习惯 h1 、h2 、h3 这样的一个一个列下来,然后顺着目录看也挺方便。当然我们的思路是一致的,靠工具来辅助自己梳理思路,工具适合自己习惯就行。
xloger
2023-11-23 17:13:08 +08:00
@sleepm #6 好的,谢谢,那本 UML 我看了下目录,有部分章节应该对我有帮助,我到时候挑着看看。
《发现问题的真正所在》这本不错,对日常分析问题估计也有帮助,我仔细看看。
是的,您说的这些是实在的锻炼方式,我也在这样努力。然后就感觉自己分析的时候如果没有更优质的经验学习,那往哪个方向就不太明了了。就像我刚毕业那几年自己会琢磨怎么写代码比较好,直到某次阅读了 Effective Java 惊为天人,很多我苦苦思索也不知道哪样更好的东西,它清晰完整地解释出来了。
路肯定是要自己一步一步走的,但有前人的经验肯定能走得更好。
当然,对我来说如果有这么一个理想的能让我受益匪浅的资料是惊喜,没有那我也还是慢慢锻炼总结吧。
niceyuri
2023-11-23 17:55:44 +08:00
强烈安利《 the Object Primer 》,作者 Scott W.Ambler 就是 UML 的发明者。这本书应该能解决你所有疑问。、
py2ex
2023-11-23 21:21:44 +08:00
"大学学的软件工程早忘了,而且实用度也不高"
翻来翻去你会发现大学大部分讲过的,直接找国外大学软件工程的公开课来看吧
johnhuangemc2
2023-11-23 21:38:42 +08:00
LBLK
2023-11-24 01:20:35 +08:00
架构整洁之道 ddd
xloger
2023-11-24 11:02:06 +08:00
@niceyuri 好的,我昨晚搜了一下这本书,看着确实很适合。不过完全没啥电子版不能先预览一下,不过我看当当京东有卖,到时候买来看看,但又要考虑凑单好烦...


@py2ex 虽然软件工程的内容我忘得差不多了,但是当初我上课的回忆还在脑海:
教我们各种图怎么画,继承用这种箭头,组合用这种箭头,实现用这种箭头。然后论文这里写啥那里写啥,每个类你要写个表格把属性返回值全列上。
甚至整个流程都是在我写完了代码后对着代码画出来的。我觉得是完全起不到辅助我改善代码质量的作用。
当然,我知道这更可能是我这个辣鸡学校的问题,国外的公开课应该会好一些。但是我个人担心这类又太基础(面向的都是学生),不能针对我的痛点“程序员自身希望能靠学习些工程知识辅助我更好地编写高质量代码”。
相比之下我觉得楼上推荐的那些书籍的部分章节应该会对我有帮助,因为面向的本身就是程序员。
当然也谢谢你的建议,等我先看看那几本书,之后再找点公开课查漏补缺。


@johnhuangemc2 谢谢,目前简单看了一下,似乎对模块拆分之类的很有帮助,我之后仔细了解一下。


@LBLK 谢谢,这确实是一本知名的但是我还没看的书。刚刚瞄了几眼面向对象和函数式相关的阐述,确实很透彻,加深了我对一些做法的理解。比如可变性的隔离和事件溯源。

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

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

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

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

© 2021 V2EX