V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xloger
V2EX  ›  程序员

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

  •  1
     
  •   xloger · 358 天前 · 2266 次点击
    这是一个创建于 358 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这一年来我养成了开发功能前先梳理思路的习惯,比如新需求来了,我会先梳理清楚逻辑是啥样的,我大概要拆成几个模块,然后每个模块的职责是什么样的,写好对应的接口或者类图。
    然后对于某个业务逻辑,也习惯先画个流程图方便沟通和避免跑偏。都是在 Markdown 里用 mermaid 画的,很方便。

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

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

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

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

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

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

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

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

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

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

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

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



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


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


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


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


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


    @LBLK 谢谢,这确实是一本知名的但是我还没看的书。刚刚瞄了几眼面向对象和函数式相关的阐述,确实很透彻,加深了我对一些做法的理解。比如可变性的隔离和事件溯源。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1257 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:50 · PVG 07:50 · LAX 15:50 · JFK 18:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.