课程介绍
极客时间·郑晔《软件设计之美》多一点设计,少一点问题
讲师介绍:
郑晔,网名 dreamhead,推文科技技术 VP,极客时间《10x 程序员工作法》专栏作者。
郑晔曾担任火币网首席架构师、ThoughtWorks 首席咨询师。作为一个沉浸在软件行业将近二十年的程序员,郑晔的人生目标是终身编程。
他热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式。
我们在开发一个软件时,曾经遇到过以下情况:
不断增加和删改,缺乏全局观,闷头写代码,埋下许多自己都不知道的坑;
制度出了问题,只能头痛医头,脚痛医脚,找不到引发问题的根本原因;
为一点要求,要在无数处细心地做各种微调,还被产品经理嫌弃改慢;
每一次开发用于需求更改的代码,都会产生无尽的错误,即使是那些原本还不错的代码模块也渐渐堕落;
将不同的代码堆在一起,当错误出现时,就像“所有人都来找茬了”一样,找出脑壳的痛。
事实上,出现这些问题,绝大多数都是因为一个原因——软件设计一开始没有做好。在根本上,软件设计的好坏决定了软件系统的质量。良好的设计,可以使系统更容易修改和扩展,不好的设计,却会让人吃不消。
虽然软件设计很重要,但学习它是很容易让人迷惑的。比如说,学习了这么多设计模式,发现可以使用的并不多;领域驱动设计的概念这么多,却不知从何入手。事实上,令人迷惑的,并非这些知识本身,而是缺少一个完整的结构来贯穿它们。软体设计学习的困难,不是一招一式,而是融合。
因此,通过本课程,郑晔老师将向您讲解软件设计中的核心思想,将纷繁复杂的软件设计知识融会贯通为一个整体的结构,帮助您在软件设计上建立一个全面的认识,切实地帮助您提高软件开发能力。在以后的工作中,您将感受到软件设计的魅力,并不断地追求最好的设计方案。
课件设计。
本课程分四大部分。
一:课前必读。
在正式学习软件设计之前,我们将首先理清软件设计的真正含义和意义,谈谈影响软件设计的两个不容忽视的因素:问题分离和可测试性。精通这些内容将为您的软件设计学习之旅打好基础。
二:了解一个软件的设计。
告诉你一种“三步走”的方法,不管是刚接触的一个项目,还是想要参考一个好的实践,都有一个可以遵循的框架,迅速抓住软件设计的精髓。与此同时,我们将深入探讨三个最有代表性的开放源码项目,让您在案例中加深对知识的理解。
三:设计一全软件。
在向您说明在设计软件时,您需要掌握的核心知识:
编程语言:跨语言的语言,使你不再局限于一种语言,而是根据应用场景,选择合适的语言,选择合适的人;
程序设计范例:几种最主流的编程范例被选中,包括结构化编程、面向对象编程和函数式编程,它们帮助你建立软件设计的基础;
设计原理和模式:介绍面向对象的主流设计原则,SOLID原理。同时也会分享一些设计模式学习心得,帮助您将设计模式的相关知识融入其中;
设计法:分析DDD设计方法,它是一个完整的、有效的设计方法,用于处理复杂的业务场景,包括从如何识别概念到如何建立模型。
四:巩固篇
本文从三个实践性课题出发,分析了如何设计一个程序库,如何构造可扩展模型,以及如何在现有项目中进行设计改进,将所学的软件知识融会贯通。
课程大纲
| ├──00 开篇词 软件设计,应对需求规模的“算法”.pdf 4.98M
| ├──00开篇词mp3 5.28M
| ├──01 软件设计到底是什么?.pdf 3.97M
| ├──01 软件设计到底是什么?mp3 6.04M
| ├──02 分离关注点:软件设计至关重要的第一步.pdf 3.53M
| ├──02 分离关注点:软件设计至关重要的第一步mp3 5.19M
| ├──03 可测试性: 一个影响软件设计的重要因素.pdf 3.80M
| ├──03 可测试性: 一个影响软件设计的重要因素mp3 5.89M
| ├──04 三步走:如何了解一个软件的设计?.pdf 3.88M
| ├──04 三步走:如何了解一个软件的设计?mp3 5.32M
| ├──05 Spring DI容器:如何分析一个软件的模型?.pdf 4.20M
| ├──05 Spring DI容器:如何分析一个软件的模型?mp3 6.44M
| ├──06 Ruby on Rails:如何分析一个软件的接口?.pdf 4.52M
| ├──06 Ruby on Rails:如何分析一个软件的接口?mp3 7.43M
| ├──07 Kafka:如何分析一个软件的实现?.pdf 4.35M
| ├──07 Kafka:如何分析一个软件的实现?mp3 6.47M
| ├──08 语言的模型:如何打破单一语言局限,让设计更好地落地?.pdf 3.90M
| ├──08 语言的模型:如何打破单一语言局限,让设计更好地落地?mp3 6.62M
| ├──09 语言的接口:语法和程序库,软件设计的发力点.pdf 3.61M
| ├──09 语言的接口:语法和程序库,软件设计的发力点mp3 5.70M
| ├──10 语言的实现:运行时,软件设计的地基.pdf 3.71M
| ├──10 语言的实现mp3 5.44M
| ├──11 DSLmp3 5.40M
| ├──11 DSL:你也可以设计一门自己的语言.pdf 3.97M
| ├──12 编程范式:明明写的是Java,为什么被人说成了C代码?.pdf 3.32M
| ├──12 编程范式:明明写的是Java,为什么被人说成了C代码?mp3 5.13M
| ├──13 结构化编程:为什么做设计时仅有结构化编程是不够的?.pdf 3.67M
| ├──13 结构化编程:为什么做设计时仅有结构化编程是不够的?mp3 5.89M
| ├──14 面向对象之封装:怎样的封装才算是高内聚?.pdf 4.06M
| ├──14 面向对象之封装:怎样的封装才算是高内聚?mp3 6.02M
| ├──15 面向对象之继承:继承是代码复用的合理方式吗?.pdf 4.43M
| ├──15 面向对象之继承:继承是代码复用的合理方式吗?mp3 5.36M
| ├──16 面向对象之多态:为什么“稀疏平常”的多态,是软件设计的大杀器?.pdf 4.18M
| ├──16 面向对象之多态:为什么“稀疏平常”的多态,是软件设计的大杀器?mp3 6.25M
| ├──17 函数式编程:不用函数式编程语言,怎么写函数式的程序?.pdf 4.55M
| ├──17 函数式编程:不用函数式编程语言,怎么写函数式的程序?mp3 6.17M
| ├──18 函数式编程之组合性:函数式编程为什么如此吸引人?.pdf 4.65M
| ├──18 函数式编程之组合性:函数式编程为什么如此吸引人?mp3 6.87M
| ├──19 函数式编程之不变性:怎样保证我的代码不会被别人破坏.pdf 3.33M
| ├──19 函数式编程之不变性:怎样保证我的代码不会被别人破坏mp3 6.11M
| ├──20 单一职责原则:你的模块到底为谁负责?.pdf 3.76M
| ├──20 单一职责原则:你的模块到底为谁负责?mp3 5.92M
| ├──21 开放封闭原则:不改代码怎么写新功能?.pdf 4.21M
| ├──21mp3 5.53M
| ├──22 Liskov替换原则:用了继承,子类就设计对了吗?.pdf 4.42M
| ├──22mp3 6.43M
| ├──23 接口隔离原则:接口里的方法,你都用得到吗?.pdf 3.54M
| ├──23mp3 6.54M
| ├──24 依赖倒置原则:高层代码和底层代码,到底谁该依赖谁?.pdf 3.65M
| ├──24mp3 6.24M
| ├──25 设计模式:每一种都是一个特定问题的解决方案.pdf 4.23M
| ├──25mp3 8.42M
| ├──26 简单设计:难道一开始就要把设计做复杂吗?.pdf 4.07M
| ├──26mp3 9.23M
| ├──27 领域驱动设计:如何从零开始设计一个软件?.pdf 3.86M
| ├──27mp3 6.23M
| ├──28 战略设计:如何划分系统的模块?.pdf 4.18M
| ├──28mp3 5.73M
| ├──29 战术设计:如何像写故事一样找出模型?.pdf 4.72M
| ├──29mp3 7.81M
| ├──30 程序库的设计 Moco是如何解决集成问题的?.pdf 4.76M
| ├──30 程序库的设计 Moco是如何解决集成问题的?mp3 15.01M
| ├──31 应用的设计:如何设计一个数据采集平台?.pdf 3.78M
| ├──31 应用的设计:如何设计一个数据采集平台?mp3 13.73M
| ├──32 应用的改进:如何改进我们的软件设计?.pdf 3.78M
| ├──32 应用的改进:如何改进我们的软件设计?mp3 11.14M
| ├──加餐 函数式编程拾遗.pdf 4.17M
| ├──加餐 函数式编程拾遗mp3 6.86M
| ├──加餐 再八卦几门语言!.pdf 4.63M
| ├──加餐 再八卦几门语言mp3 7.96M
| ├──结束语 那些没讲的事儿.pdf 4.45M
| ├──结束语 那些没讲的事儿mp3 11.41M
| ├──知识地图 一起来复习编译技术核心概念与算法.pdf 7.32M
| └──知识地图mp3 1.19M
声明:本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理,邮箱:502212423@qq.com。