精华内容
下载资源
问答
  • 构建之法,运用之妙,存乎一心

    千次阅读 2014-12-31 17:27:32
    构建之法,运用之妙,存乎一心:读邹欣《构建之法》 1. 构建之法,存乎一心 史学理论与史学史,是把历史自己作为研究对象的学科,前者讨论历史本身所研究的内容,后者讨论历史研究本身的历史。这种对于抽象的...
    构建之法,运用之妙,存乎一心:读邹欣《构建之法》

    1. 构建之法,存乎一心

    史学理论与史学史,是把历史自己作为研究对象的学科,前者讨论历史本身所研究的内容,后者讨论历史研究本身的历史。这种对于抽象的抽象的研究,正符合计算机领域 meta... 这样的思想。当年 xml 刚出来时,不少计算机和图书情报的大学生照本宣科地提到,xml是关于数据的数据,是 meta-data。

    史学理论与史学史专家周老师在谈到史学理论的时候说到 (大意) ,学习史学理论与史学史,必先有历史的修养,要努力了解更多的史实,也就是先了解历史所研究的对象,然后才能涉及到以历史本身作为研究。

    我想,周老师的意思是,没有"肤浅的"认识之前,先不要着急讲深刻。

    一个例子事实与推论的例子。在网上在现实生活中,都有人跟我提到过,我国人民的善良与热爱和平;作为旁证,中国自古以来就没有杀战俘和屠城这样的事。这时,我愿意以一个建议结束讨论,就是请他去读一下五代十国那段历史。如果连基本史实都还缺乏,遽然得一结论过于草率了。

    在讲授软件工程类课程时,我也面临这样的难题,正如《构建之法》作者所说,是同学们对此毫无感觉,既不觉得有用,也不觉得有趣。这大致就是夏虫不可语冰的意思。很多同学在学到软件工程的时候,代码量总计可能不到1000行,单一项目最大代码量不到200行。如果去除语言类或算法课作业,代码量就更少得可怜。

    软件工程所讨论的是当代码量巨大、当涉及人数众多、当项目需求多变时所要解决的问题。而同学们在学习时根本就没有这样的需求。200来行的小程序,没有软件工程思想,也能完成,甚至更快捷。

    所以,《构建之法》的作者在教学中,要求学生完成大量的代码,让亲身的经验证实软件工程的手段是必要和有效的。除此以外,别无他法。

    在教学中,可能最大的问题还不是学生积累的代码量小,而是教师也是如此。作为实践类课程的教师,你又写过几行代码,读过几本软件工程著作呢。

    我的偶像YMH曾经考虑过一个问题,算法课该让哪些老师上呢。我提议:这个好办,找几道ACM题,凡是申请上算法课的老师在线答题,谁答得好谁上。偶像说,那有些老师不会编程序啊。我说:不会编程上什么算法课。偶像大笑。

    我坚信,一个优秀的将军,也许并非战场上最勇猛的那个战士,但是至少是合格的士兵。软件工程教学,教师须是身经百战,学生须亲力亲为,否则,玩具性质的项目、几行代码的实验课、走走过场不关心实用的工程,都是耍流氓而已。

    实践类课程,理论如何应用,只能以真实案例呈现 (如果需要规模,那就应该有规模),而无法用形成上学的方式推演--否则就意味着工程可以自动化,无须人的创造性参与。运用之妙,存乎一心。

    2. 阵而后战,兵法之常

    如果工程思想的教学只能依靠师傅带徒弟,口口相授,那么教材和经典著作还有什么意义呢?

    如果是这样,面对软件工程书,明白的就是明白了,不明白的还是不明白。已经受过苦的人,有过相同经历的,能会心一笑;没吃过苦没糟过罪的,仍然鲁莽行事,事后一拍大腿,"哎呀邹欣已经说过这事儿啦,我当时怎么没明白呢,古人诚不我欺啊"。事实上,即使事后诸葛亮,也是亡羊补牢,尤未晚也。我们有多少知识是本科的时候学了,毕业以后多年才发现,原来在某个意想不到的地方才能用到。与课本相印证,能告诉你,你的失败并非偶然,你的境遇并不孤独,未避免同样的悲剧再次发生打下很好的基础。

    它还会告诉你,所经历的痛苦,可以用更形式化的方法,或者"最佳实践"得以解决。这比你自己另搞一套,闭门苦苦钻研十年,一抬头发现古人早完成了要好得多。我本科的时候写过一个程序,打印出来,把打印纸抻开,比我还长。用的语言是 BASIC,用行号编辑出来的。随着程序的生长,我越来越为"某些功能在好几个地方用到"感到痛苦--我用的那版本里或者我当时的知识里,还没有函数和过程。后来我终于艰难地完成了那个程序,在读一本1980年代的书的时候,发现了"结构化程序设计"思想。如遇故人,如蒙大赦。没有先前的经验,固然不会让我体验这么深刻,如果没有读到前人的总结,我们就不过是一次次重复失败而已。

    我们一生,一共也完成不了几个项目。以岳飞之善战,据统计,他一生经历不过几十战役。他的经验或者理论,想来大多是熟读孙子兵法和分析别人的战例得来的。

    所以说,阵而后战,兵法之常。前人的总结,现有的理论,适合的技术,优秀的paradigm,能给我们一定程度的行为约束,帮助我们更好地解决问题。技术犹刀也,是我们手臂的延伸,而且那上面还附着前辈杀手的灵魂。

    3. 武穆遗书 有多厚

    教师在选择教材时,除了受自己学识所限,要考虑学生的专业基础预备知识,还有一个有些无厘头的压力。

    就是教材的价格。

    领导们说,教材太贵了学生买不起,教材太厚了学生就不看了。图书馆采购的时候,鲜有优秀的国外教材和经典著作,而多是高校教师混成果用的薄册子。问为什么不多买些 o'reilly 这样的优秀作品呢?答:太贵。

    同学们也不怎么买书,原因也是太贵。对于抱怨书贵的,侯捷颇有微词,书是用纸张还是用知识来衡量价值。最近,我还看到一个说法,深以为然:你的第一份工作的薪水,与你大学期间所买的技术书总价相抵。其实一本书能有多贵,一场电影,一顿大餐?这些都是过眼云烟,而好的知识,越早了解,受益时间越长,在你剩余的生命之中全都可以发挥作用。请邹欣讲一门课程需要多少钱,请K&R当面给你讲讲C语言,请SICP作者给你剖析一下lambda算子构造邱奇数需要多少钱?上网打游戏感受快乐,你的青春值多少钱?

    软件工程经典教材,《软件工程:实践者的研究方法》,还有《代码大全》,都非常厚,《构建之法》相对来说薄多了。我想,这是作者的一个妥协的选择。

    作为大学本科的软件工程,不如叫做软件工程导论更合适,因为受课时和此时学生的经验所限,能涉及的知识都是蜻蜓点水,不得深入。导论类课程,到底是应该罗列完整的概念,这些名词学生们都听说了,从而"知识完整性"得到保证,还是浅显地了解其中的思想 (也许用了完全不同的名字),还是把徒弟领进门,让有兴趣的同学自行继续深入,没兴趣的同学就此止步,从思路上得到此许受益。这种争议见仁见智。

    不过如果我是一个学生,我更愿意像读小说或者看电影一样,看到一些故事,以后用于类比,作为模板;而不希望接受高大上抽象的概念,如果能用非常好使,但是正如初高中背政治题,答案很清楚,唯独不知识该用在哪个问题上。

    如果教材还要再薄一些,我希望它们是科幻小说。我根本不关心这些方法如何具体实施,理论依据是什么,你就领我去看它绚烂的效果,让我亲眼见到它好使得不得了。剩下的,当问题横在我的面前,解决问题的迫切会让学习的艰难、参考书搜集、教材的价格、案例什么的,所有这一切困难迎刃而解,不复存在。

    这种效果的反面也正是现实,作为教师,你都不会编码,你都不会用软件工程的这些方法,怎么说服你的学生相信你学习你。所谓 learn from, 学生所学习的,不是教师的知识,而正是教师本人。

    4. 题外话

    从瀚哥开始,每届新同学都会问我一个问题:老师,你为什么这么关心项目的结果。

    我知道,言下之意也包括,你为什么不更关心对我们的教学。

    因为,我们以真实工程作为教学的工具。这是因为,没有人乐意做假的工程,仅仅为了学习目前还不确定是否有效的知识。这意味着,真实的工程必须存在,才可能用于教学,而真实工程不同于假的实验的是,如果它失败一次,以后就不会再有真实的工程了。也就不会再有真实的工程用于教学。

    训练猎人的时候,要求师傅把猎物捆个结实,为了防止学徒害怕或怜悯它挣扎,还要给猎物打上麻醉剂,再给学徒穿上防磕碰的盔甲防溅血的服装,你为什么不再戴上护心镜和老花镜躲到绣楼里去。

    所以,当你要求或接受真实工程训练的时候,你就给了我你的承诺。我把武器交给你,你要像我保护你那样保护你。无论这个承诺有多么的小,一旦你说出来,它就是我的,不再属于你;我有权放弃我的权利,你没有权利背弃你的诺言。

    你,你们,背弃对我的诺言,我非常失望。我知道你并不在乎我失望与否,我也并不在乎你给我造成的损失,我在乎的是我所面对的我所关心的,是这样的世界。如果承诺不可信赖,未来还有什么可以期待。

    ------------------------------------------

    博客会手工同步到以下地址:

    [http://giftdotyoung.blogspot.com]

    [http://blog.csdn.net/younggift]

    展开全文
  • 接触到《构建之法》是因为我在找两个答案,怎么规范一个软件开发的流程,以及怎么去管理一个技术团队完成软件开发中的一环。带着这两个问题,我开始拜读邹老师的构建之法。(开始 2017.2.16 pm16.40)

            接触到《构建之法》是因为我在找两个答案,怎么规范一个软件开发的流程,以及怎么去管理一个技术团队完成软件开发中的一环。带着这两个问题,我开始拜读邹老师的构建之法。(开始 2017.2.16  16:40)

            带着问题看书,代入情景去思考文中的知识点。构建嘛,从团队的构建,软件的的构建两个方面阐述:

            团队的构建:这和我想找的怎么去管理一个技术团队完成软件开发中的一环殊途同归,文中注重IC(individual contributor)。作为一个团队的贡献者,对你是一定要求的。

            1.交流

            2.说到做到

            3.接受团队赋予的角色并按照角色要求工作 

            4.投入团队

            5.流程  

            6.准备

            7.理性

            选对人是构建一个团队的开始,也是一个难点。PSP是组成TSP的单位。组件有了,选一个什么布局,选一个什么属性去组合他们。我们公司暂时可能是几个模式的结合体,一部分官僚模式,老板驱动;一部分交响乐团模式;更多的是功能团队模式,某一时间,某些具备不同的能力的人为解决一个共同的功能暂时联合,完成后解散重新组织或者重叠。模式没有对错,都是特定情况时间与经验的产物。

            软件的的构建:也就是规范一个软件开发的流程,文中也说了许许多多的流程,几乎每个流程都会推崇,交付增量。

            什么是交付增量,通俗的来说就是渐进。

            我们团队做的产品是一个敏感,善变的产品。我们更多的采用了写了再改的模式 code and fix。加上老板驱动流程。没有传统的瀑布,变化太快拖不起。没有采用敏捷开发,因为没人比老板更懂市场与竞争,加上团队的不成熟。我反倒觉得当下的流程没什么不好。

            但是不管是什么流程。必须强调几点:

            1.流程的每一步必须有结果  

            2.个体请使用成熟的技术

            3.珍惜数据,市场,反馈

            4.执行者出计划

            5.自我管理

            敏捷在我看来不是一种开发模式,更多的是一种态度。有需求随便提,哈哈,拥抱变化。产品,请不要把我们技术拥抱变化来掩盖你设计需求的不完善。

            文中也提供了成形的框架MSF。我总结他的原则应该就是多沟通,定目标,互相帮助而不是互相监督,责任,渐进,预期可变期望不变,长期的效率,踩坑,用户分析。

    (p142 2017.2.17  17:00)

    展开全文
  • 构建之法——现代软件工程

    千次阅读 2015-07-14 13:20:53
    构建之法——现代软件工程 《构建之法——现代软件工程》共分17章对照美国ACM/IEEE2013年新出版的计算机科学教学指导(ComputerScience Curricula 2013)中的软件工程相关部分,这本教材覆盖了其中大多数Core-...

    构建之法——现代软件工程


    《构建之法——现代软件工程》共分17章对照美国ACM/IEEE2013年新出版的计算机科学教学指导(ComputerScience Curricula 2013)中的软件工程相关部分,这本教材覆盖了其中大多数Core-Tier1和Core-Tier2的内容。可以说,全书对软件工程内容的覆盖不逊于任何一本现行的教材,同时讲述了...


    详细解读 和小伙伴们一起来吐槽

    展开全文
  • 现代软件工程的《构建之法

    千次阅读 2018-10-09 07:31:54
    要想了解世界,就必须亲自来打造它。—— 帕韦泽(Cesare Pavese)国庆假日期间,我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过15年,每每在被问...
        

    要想了解世界,就必须亲自来打造它。

    —— 帕韦泽(Cesare Pavese)


    国庆假日期间,我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过15年,每每在被问到给在校计算机专业大学生的学习建议时,我都会推荐这本在教育界引起广泛关注、旨在推动中国现代软件工程教育改革的教材。


    我当年没有机会接受这么有体系且现代的软件工程教育,这一定意义上成为了走向软件领域更高殿堂的阻碍,虽然有一些吃亏上当后长的见识和东一下西一点偷学来的、经常会相互打架的草莽经验,但邹老师写的这本书面世后,我如获至宝,曾经写下170多页的读书笔记,并给当时我所带领的研发团队及周围的朋友们分享,所以在我看来,它不仅仅在学校教育中有巨大的现实意义,对于很多像我们这样的已经走上工作岗位甚至工作很多年的人,也有很好的参考价值。

    640?wx_fmt=png

    构建之法是什么


    这本《构建之法》一版再版,可见其受欢迎程度之高。我有幸跟邹老师成为同事,但早在我加入微软之前,就因为看了他第一本书《移山之道》后主动写信讨教,承蒙不弃,后来也一直保持联系。


    640?wx_fmt=jpeg



    正如我在开头处引用的这句话 “要想了解世界,就必须亲自来打造它。”,我们所处的世界、我们自己(不管是物质层面还是精神层面),其实都是一点一点构建出来的。邹欣老师有超过20年、在世界顶级公司从事大型软件研发的经历,更是不可多得的既能传道授业、又深谙合作之道的人才,他通过三本书给我们构建了一个“如何构建开发复杂软件” 的知识结构。


    软件开发能力 = 软件工程能力+程序构造能力


    1. 移山之道。我第一次看到这本书的感觉就是:“哇,技术图书居然还可以这样写啊!”。这本书用多个丰富生动的角色,给读者呈现了一个虚拟的软件公司及其日常发生的故事。这本书我个人觉得是构建之法的雏形,只是当时在工具应用这个方面着墨较多。

    2. 编程之美。这是邹老师和几位同事一起编写的微软技术面试心得,干货满满,有大量的算法案例。这一本书,强调的是程序员的个人建设中最为核心的能力:算法和编程能力。

    3. 构建之法。这本书则是真正成体系的软件工程教材,他利用业余时间在数所高校进行了长达6年的软件工程教学实践,总结出了在16周的时间内让同学们通过“做中学(learning by doing)”掌握实用的软件工程技术的教学计划,得到了高校师生的积极反馈。在此基础上对软件工程的各个知识点和技能要求进行了系统性整理,形成教材。本书共分17章,对照美国ACM/IEEE 2013年新出版的计算机科学教学指导(Computer Science Curricula 2013)中的软件工程部分,这本教材覆盖了其中大多数Core-Tier 1和Core –Tier 2的内容。可以说,全书对软件工程内容的覆盖不逊于任何一本现行的教材,同时讲述了业界最新实践方法。




    构建之法是怎么构建出来的

    构建之法 已经不仅仅是作为一本书,更是现代软件工程教育的一个有益实践。2007年在清华大学首次实践后,从2009年至今,经过北京航空航天大学、福州大学、集美大学等三十余所学校的不断迭代与改进,现已形成了一套成熟的软件工程课程教学体系,覆盖了软件工程和编程语言的教学。该教学体系有下面的特点:

    1. 练习量大, 内容多:除了大量的代码练习,还有大量的博客写作练习。

    2. 结构紧凑:个人项目/结对项目/团队项目紧密配合, 能在16 周讲完,针对8或12周的教学长度,也有对应的配置与组合。

    3. 理论和实践相结合:讲现代理论,同时结合体现理论的工具,例如:要求所有代码使用Git和Github进行管理

    4. 真实的团队开发:要求使用原型设计工具设计项目,使用团队开发工具管理任务分配,使用燃尽图进行进度管控、等等一应俱全…

    5. 面向实战:强调“做中学” , 团队项目公开发布,使用用户数量与用户的真实反馈作为评价项目重要的标准。

    6. 学生助教+企业助教模式,学生助教熟悉课程,能够协助老师,与学生充分互动;企业助教则经验丰富,视野开阔,能使用工业界中的鲜活实例解答学生在实践中的疑问。

    7. 鼓励探索:鼓励学生 “动手实践,自己摸索,提出问题,解决问并总结, 从实践中,从同伴中,从思辨中学习” 。


    在2017年底的“第一届构建之法软件工程实践教学论坛”上面,邹老师分享了这十多年来的历程。


    640?wx_fmt=png


    我这里还想给大家分享一点我的观察。这本书以及它所倡导的软件工程教育改革目前所取得的一点点成功并不是偶然的,正如所有的大型、复杂软件的成功必有缘由一样。它至少拥有如下的成功要素


    1. 社会需求明显,改革适逢其时。任何的改革,都是讲究时机的,教育的改革尤其如此。当年是教育部和微软研究院合作的一个契机,邹老师作为特派的专家到清华开展软件工程的实践,由此找到了一个切入点,他通过不懈的努力,不仅得到了中国科学院院士及国务院学位委员会委员的支持和认可,更带动了一批同样有想法的老师和学生,得以持续把这个工作深化下去,星星之火渐成燎原之势。

    2. 核心架构师或主程的能力超强。如果拿开发软件来说,邹老师就是这整个工程的架构师或主程。虽然软件工程可以从一定意义上降低对“超级巨星”的依赖,确保大部分软件项目的水准在平均线以上,但毫无疑问,拥有一个能力超强的架构师或主程,则肯定会事半功倍,更何况邹老师的能力可不仅仅是软件工程呢。

    3. 项目团队强大,运营有方。我必须强调这一点,是因为我对于邹老师背后的策划、出版、运营团队也很熟悉。他们的口号是“服务能人中的忙人,忙人中的能人”,他们做了很多专业且细致的工作,让架构师设计的架构能真的得以实现。



    构建之法所带来的成效


    构建之法是一个为期16周的现代软件工程教程,要检验它的成效,就必须由学校老师和学生来发言。我找到一份材料,是北航计算机学院的罗杰老师在“第一届构建之法软件工程实践教学论坛” 上面所做的分享。


    640?wx_fmt=png

    罗老师分别从几个方面总结和展示了他们学院的课程改革成果。

    640?wx_fmt=png

    640?wx_fmt=png

    640?wx_fmt=png

    软件工程教育是一种综合素质培养,罗老师还特别总结了对学生的升学、科研、实习和工作等方面的影响。

    640?wx_fmt=png

    640?wx_fmt=png


    我对构建之法的展望与思考


    如果按照工程的方法去构建软件项目,则其成功的机会将远远大于没有采用软件工程的项目。构建之法是关于现代软件工程的知识体系,这本书必将在相当长的时间内对中国的软件工程教育产生积极和深远影响。


    另一方面来说,时代是在不断地发展,它也给我们提出了越来越多的新课题。我做如下的展望,同时也有一些思考,给邹老师及大家参考。


    当今的世界是一个技术驱动和数据驱动的世界,而人工智能(AI)大行其道也是很自然的。软件一方面要体现出来越来越易于使用的体验(对最终用户,或者对前端开发者),一方面则体现出平台层面尤其是底层后台会越来越复杂。


    软件服务模式的变化,随之而来,对于软件开发者来说的要求也会发生变化,总体来说,编写软件会越来越容易——至少看起来是这样——谁都可以马上写出一个“软件”来;同时,一个残酷的事实就是专业的程序员的门槛将越来越高。那么,这就提出了一个命题:对于这两类软件开发者,他们对于软件工程的需求是否有不一样?是否需要或者如果针对他们有不同的方案?


    如果以后有 AI 参与编程,对软件工程是否有什么新的挑战?


    不光是软件服务模式在发生变化,软件构建和交付模式也在发生一些变化。在《构建之法》中有对敏捷流程和MSF(Microsoft Solution Framework)的精彩阐述,而现在几乎所有的软件项目都在想办法DevOps了吧。不知道在新一版的构建之法中,是否会考虑这种变化?


    640?wx_fmt=png


    文末福利


    感谢你认真读完这篇文章,欢迎大家提出反馈意见。 希章原文的福利请阅读:现代软件工程的《构建之法》

    我的《Office 365 开发入门指南》的介绍,有机会请参考 《Office 365开发入门指南》上市说明和读者服务

    展开全文
  • 《现代软件工程:构建之法》读后感
  • 构建之法》阅读笔记目录

    千次阅读 2015-10-11 19:41:36
    摘至 邹欣《构建之法》一书,以作学习用 第一章 概论 大马哈鱼洄游模型 程序数据结构算法 软件程序软件工程 软件工程定义 软件工程三步曲 第二章 个人技术和流程 单元测试 个人开发流程 第三章 ...
  • 构建之法》读后感

    千次阅读 2016-03-25 19:53:13
    前段时间,我自学了《构建之法》的1,5,17章,并产生了很多自身的体会。  首先,在第一章中我大致了解了我可以在书中学到什么,如何落实学习。1.1节通过三个简短的对话,启发我对什么是程序,什么是软件,什么是...
  • 构建之法》第一章 概论

    千次阅读 2015-10-01 23:09:02
    摘至 邹欣《构建之法》一书,以作学习用 1. 大马哈鱼洄游模型 软件工程按照经典的瀑布模型 1. 需求分析 2. 设计阶段 3. 实现阶段 4. 稳定阶段 5. 发布阶段 6. 维护阶段 事实上在现实世界中,软件...
  • 软件工程《构建之法》悦读总结

    千次阅读 2014-11-16 18:08:59
    软件工程《构建之法》悦读总结 中国科学技术大学软件 + 万辉 (JG14225011) + 原创(其中部分摘自《构建之法》) 引子 很幸运的能够在学生期间读到这样一本中国作者写出来的好书,感谢孟老师,感谢让我知道这...
  • 这是我第一次接触软件工程这门学科,在最一开始,我以为软件工程是对IT的一个总称,其实并不是。软件工程专业以计算机科学与...在老师的教导下,我读了《构建之法:现代软件工程》这本书。首先让我感触颇深的是“软...
  • 构建之法》整理

    千次阅读 2019-04-01 10:02:16
    软件构建 平台的迁移 多语言接口 增量升级部分模块 实践 工作的细分 基本功能 拓展功能 高级功能 如何保证质量——回归测试 保证在加入新功能的过程中,已有的功能可继续工作,我们需要建立起一...
  • 解读Web2.0站点构建之法

    千次阅读 2008-03-10 16:25:00
    解读Web2.0站点构建之法辛佳雨 从1999年开始创建代码中国网以来,从事基于Web的应用开发已有近十年的光景。对于建立Web站点过程所涉及技术繁多深有所感。回想一下,真是太多的知识需要掌握。然而一直没有在市场上...
  • 微软邹欣老师著有《构建之法:现代软件工程》[https://book.douban.com/subject/26577755/]。第一版首版以前,我还不知道邹老师是哪一位,就在网上曾经看到过有人转引他的观点,感到说得太有道理了,一拍大腿的感觉...
  • 在《构建之法》的第一章就有醒目的黑体字写着『软件=程序+软件工程』。虽然这看上去是1+1的关系,但我在上学期软件工程概论这一门课的学习中就已经感受到,软件工程这一体系似乎比软件本身更加来得重要,用一个不...
  • 对于计算机相关专业的学生来说,我们学习了很多的专业课程,像编程语言、算法、数据结构、编译原理、软件工程等。很多学生都会有这样的疑问:我学... 继《移山道》、《编程美》之后,邹欣老师再推新作《构建之法
  • Y = X ± X ÷ N //注:Y是实际时间花费。中间的±表明
  • <action><result><object>
  • //this loop starts the i from0 to len, in each step, it // does SomeThing for (i =0; i < len; i++) { DoSomeThing(); }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 208,214
精华内容 83,285
关键字:

构建之法