软件设计是怎样炼成的(7)——细节决定成败(详细设计)

软件设计 同时被 2 个专栏收录
17 篇文章 2 订阅
16 篇文章 9 订阅

摘要:

当我们需要考虑类、类的内部细节、类之间的关系时,这时我们已经开始做详细设计了。详细设计不一定是一份文档,也不一定是Word文档,详细设计也不一定叫“详细设计”,有时候“编码就是设计”也是未尝不可的。对于MIS类型系统来说,架构设计和数据库设计做好的前提下,详细设计的难度其实是比较小的了,但MIS系统会有一些特殊的需求点,我们需要识别出来并想清楚应对办法。如果你做的软件是高技术含量的非MIS系统,情况将会更加复杂。


大纲:

1.什么是优秀的设计?
2.优秀的设计能节省项目工作量
3.优秀设计从分析需求开始
4.软件系统不是木桶型的
5.软件设计的“大道理”
6.规划系统骨架——架构设计
7.打造系统的底蕴——数据库设计
8.细节决定成败——详细设计
9.用户感觉好才是真的好——用户体验设计
10.持续提升设计水平


本文章是系列文章之一,如果你还没有看过之前的文章,建议先看完前面的文章再看本篇,这样效果更好。



8.细节决定成败——详细设计



8.1 什么是详细设计?

当我们需要考虑类、类的内部细节、类之间的关系时,这时我们已经开始做详细设计了。详细设计不一定是一份文档,也不一定是Word文档,详细设计也不一定叫“详细设计”,有时候“编码就是设计”也是未尝不可的。下面是我的一些最佳实践:

实践一:模块设计
我早期的一些项目会写一份详细设计文档,但后来的项目我会将详细设计文档分拆为N份模块设计文档了,这样做的两大好处是:
1)一份详细设计文档太大,不利于阅读,不利于指导编码工作,分拆后就好多了;
2)N个模块设计的任务可以分派给不同的软件设计师(或程序员)来负责。

实践二:代码就是设计
有时候我会“偷懒”,我觉得没有必要再写什么设计文档,直接在开发工具中定义好类,写好类的公开接口,写好注释等等,这时我其实就是在做详细设计的工作,我将代码框架写好后,才写具体的实现代码。这种工作模式其实就是将详细设计与编码实现融合在一起了,效果和效率更好!当然不是说不再需要写Word文档格式的详细设计了,对应比较复杂的详细设计,一般还是需要通过另外的文档来描述一下比较好。
但可能会有一种比较详见的“特殊”情况:你可能会遇到开发人员死活写不出Word文档格式的详细设计,你和他沟通多次后,他还是写不出有质量的Word文档格式的详细设计,这时你不如让他直接写代码,先写个框架看看,然后你通过评审代码来修正他的设计。

实践三:Demo就是设计
设计逻辑复杂时,可能需要文档来应对,但文档毕竟是纸上谈兵,可能最切实的办法是做一个 Demo 实现你的算法和设计思路。只要 Demo 是 Work 的,就可以将这个 Demo 的代码重用到实际的项目中。
举一个例子:曾经某项目中需要写代码解决判断一个点是否在多边形内,算法有点麻烦,光写文档说算法没有实质的价值,于是我用了半天时间写了实现的代码和测试的代码,将这个Demo提交给项目组。

实践四:“无”详细设计
无详细设计的意思不是真的不考虑详细设计了,而是对于这种情况我们已经驾轻就熟了,几乎是闭着眼睛都会做了,所以我们就“无”详细设计直接编码了。


8.2 详细设计的基础

我曾经评审过一份设计文档,该文档内容详细、思路清晰,清楚描述了某些技术环节的实现办法,而且实现办法都是可行和有效的,这个文档可以算是一份比较好的详细设计文档了。但可惜的是,整个项目只有这样的一份设计文档,从全局来看这个文档只解决了局部问题,缺失了一些核心内容:
1)没有架构设计的的内容;
2)没有数据库设计的内容;
3)系统的需求很复杂,大部分的需求没有对应的设计考虑。

前面的文章曾提到,我做过的项目一般至少会有一份概要设计文档,详细设计文档不一定是必须的。详细设计固然重要,但针对整个系统的全面考虑更加重要,详细设计之前应该具备以下条件:
1)应针对全部需求(包括功能性和非功能性的需求),系统需要有整体上的考虑,也就是前文提到的架构设计。
详细设计需要考虑 类、类的内部细节、类之间接口 等,这些是需要符合系统的总体架构和分层架构的。
2)应有数据库设计。
如果没有数据库设计,建筑在数据库之上的代码是很难写的。当然如果你是用“由中间到上下”的设计方法 的话 (什么是“由中间到上下”?请参考前面的文章),数据库设计没有,只要有中间层的建模的话,表现层和逻辑层的代码还是可以写的,但数据库操作层的代码还是依赖于数据库设计的。
3)部分情况下,还应该有部分或全部的用户体验设计(用户体验设计下一篇会分享)。
用户体验设计主要考虑的是软件的表现层,最能充分体验“由顶而下”的设计思路,将会直接影响具体的代码实现。

一般情况下我们应该在架构设计和数据库设计的基础上进行详细设计,否则 很可能会让我们仅仅关注了局部的问题,而没有抓住其他更加重要的问题和全局的问题。如果没有架构设计和数据库设计,直接详细设计是不是一定不可行呢?有以下的一些特殊情况 (不限于此噢)
1)如果果你的情况是在原有系统上升级改造,系统原有的架构和数据库设计基本不变,那么直接进行详细设计是合适的做法;
2)有时候有些局部问题虽然很“局部”但又相当特殊或重要,哪怕没有来得及完成架构设计和数据库设计,也可以先进行详细设计的。
后文我们先从正常思路介绍详细设计,也就是先有架构设计和数据库设计再有详细设计,然后再分享一些上面第2)点的情况。


8.3 详细设计是架构设计的延续

前文的架构设计提到我们要对系统进行两个层次的拆解,分别是:
第一层拆解: 思考系统需要开发什么软件和数据库等;
第二层拆解:考虑 组件(Component)、代码包、某个分层等等,可能是“物理分拆”也可能是“逻辑分拆”。
不太记得或者看不懂的朋友,请先看看前面的文章啦。
而详细设计其实就是:
第三层拆解:进一步细化出类、类对外接口、类的内部细节等。

通常我会用UML的顺序图(Sequence Diagram)来表达“第三层拆解”,请看一个简单一点的图,了解一下顺序图。


图8.1 详细设计-顺序图1

我们通过这个图了解两个事情:
1)顺序图的基本语法;
2)顺序图如何表达详细设计。

这个图表示的是用户在某个查询页面输入查询内容、点击查询按钮等这些用户交互及背后的程序设计。通常顺序图最左边画的是用户,仅次之是软件的表现层的某个页面(界面),用户与表现层的之间的交互,会导致表现层后面的类的一系列动作。这个图还算比较简单,请看下面这个我在N年前完成的某项目中的其中一个顺序图:


图8.2 详细设计-顺序图2

架构设计需要考虑全部需求后设计出来,也就是说”全部需“求驱动架构设计,当然某些特殊的需求点需要特别关照;数据库设计主要是业务概念模型驱动的,业务建模及进一步提炼可以帮助我们设计出更有弹性的设计。那详细设计是不是仍然需要”需求驱动“呢?这是必须的!
我们可能用用例(UseCase)、用户故事(User Story)或者是功能点等方法表示需求,不管怎样的表示办法,最终都会拆解为一条条比较细的需求。每一条需求具体如何实现呢?顺序图就是表达这个实现方法的好工具!图8.1 和 图8.2 分别说明的都是某个需求点的实现方法,图8.1 是查询用例的详细设计, 图8.2 是修改材料设备信息的详细设计。一个系统的详细设计,就可以用类似图8.1和图8.2的图逐一表示出来。

我们通过下图再充分理解一下需求如何驱动详细设计:

图8.3 详细设计-顺序图3

上图红色框框部分的内容是需求,用户和系统界面之间的交互设计是对需求的进一步细化;蓝色框框部分是在需求驱动下的程序实现,此图实现部分比较简单,大部分的程序实现逻辑都会比上图复杂,会涉及到逻辑层、数据操作层还有一些共用模块之间的调用等等。详细设计除了要需求驱动,同时也要需要符合架构设计,代码也需要基于已有的数据库设计,换句话说就是详细设计是需求、架构设计及数据库设计三者同时驱动的。

本小节所列举的详细设计的例子都是MIS类型系统的例子,基本上围绕数据库的增删改查进行,设计难度其实并不是很大。前面已经提到,如果对于已经很熟悉的情况,你没有必要再用顺序图来画一次了,直接可以”无”详细设计;但如果你的团队成员还不是很熟悉数据库的增删改查,或者实现逻辑比较复杂,这样就很有必要进行详细设计了。

本小节的例子比较“常规”,老鸟可能觉得没啥难度,下小节的难度将会增加。


8.4  详细设计是解决局部问题的良方

前面提到,有些局部问题虽然很“局部”但又相当特殊或重要,哪怕没有来得及完成架构设计和数据库设计,也是需要先进行详细设计的。
举三个例子:

案例1:针对网络负载平衡的特殊考虑
某客户的Web服务器采用网络负载平衡,有两台Web服务器,这与我们惯常的一台Web服务器场景很不一样。我们打算使用公司的框架来开发这个系统,但这个框架的其中一个地方很可能会出问题。框架使用了静态变量用来记录数据库中ID的最大值,当增加一条记录时就 ID_Max = ID_Max + 1,将新的 ID_Max 作为新增加记录的ID。这样在两台Web服务的场景下,就会有两个静态的 ID_Max,两边都很可能会出现不准确的情况,导致数据插入到数据库中时出错。本身这个修改并不算复杂,但我们需要同时考虑兼容框架,因为这个框架是同时支持 SQLServer 和 Oracle 数据库的,我们的首席设计师很厉害,在框架层面解决了这个问题,不仅可以继续保持框架的兼容性,还扩大了框架的适应面。

案例2:点是否在多边形内的求解
这个几何问题是由业务问题转化而已来的,这是一个某移动通讯公司的系统,先简单介绍一下业务。
我们的手机是通过基站进行通讯的,如果附近没有基站,就会出现手机没有信号的情况。我们所居住的城市当中,一般会有上百成千的基站,保证我们通讯畅通。 基站与基站之间形成的通讯网络,会划分为以基站为中心的多个“多边形”,形成一个好像蜂窝的样子,这就是我们经常听说的蜂窝网络。但有可能会出现某个地方打电话有问题的情况,这个出问题的地“点”位于哪个“多边形”呢,系统需要通过点的坐标找到这个点在哪个多边形范围内,进一步定位到是哪个基站可能出问题。 
上述就是原始的业务背景,我们将这个需求演化为一个几何问题,当时我参考了“放射线”的算法,直接通过“Demo法”来完成这个设计。前文的”实践3:Demo就是设计“中提到的例子,就是这个例子了!

案例3:让程序支持 Undo 和 Redo
如果要求你的系统支持 Undo 和 Redo,不知道你会如何考虑呢?支持 Undo 和 Redo 是非常酷的,但难度是相当之高的,你会先完成架构设计和数据库设计才考虑吗?23设计模式中的命令模式可以帮助我们,但命令模式仅仅是给出了解决问题的框架而已,你还需要演化为更实际的内容,否则又犯了”放之四海而皆准“的毛病了。命令模式很有难度,但很有意思和很有用,我们这里不详解命令模式,大家可以参考我的设计模式方面的文章。
这里举这个例子是想说明:某些需求看上去好像是仅仅很小的一个点的要求,有可能影响面很大,你可能需要先针对这个点去思考详细的实现办法,然后才能帮助你想清楚架构设计及数据库设计。

小结一下详细设计解决局部问题的两种特殊情况:框架未确定之前的技术预研,案例1、3属于这个情况;框架确定与否都不影响的局部问题求解,案例2属于这个情况。一般认为详细设计是概要设计之后的,大部分情况确实如此,但通常我们进行概要设计之前还很可能需要针对某些需求点进行技术预研,这些技术预研是需要用详细设计的程度来进行。

需要补充说明的是:某些技术难点的设计,通常仅仅靠顺序图是搞不定的,甚至不能用顺序图,我还会用到类图、对象图、活动图和状态机图等等,类图用到的机会最大,你看看23设计模式,设计思路基本上都是用类图来表达的。UML图仅仅是一种工具,前文提到的“实践二:代码就是设计”和“实践三:Demo就是设计”,对于难度高的详细设计是经常需要用到这两招的。


8.5 需要从详细设计中提炼出需要全局考虑的内容

前文提到”详细设计是架构设计的延续”,其实还需要补充的是“详细设计需要持续完善架构设计”。详细设计过程中,我们会发现很多共性的内容,需要提炼为整个程序需要遵循的设计规范。下面是一些例子:
1)用户体验设计;(下一篇再详细介绍)
2)输入合法性判定;
3)批量数据的传输约定;
4)实体类的生命周期;
5)逻辑类的生命周期;
6)并发冲突的处理原则,包括判定办法、提示办法;
7)连接打开、关闭原则;
8)采用事务的原则;
9)异常处理机制;
10)日志记录机制;
……


8.6 详细设计小结

对于MIS类型系统来说,架构设计和数据库设计做好的前提下,详细设计的难度其实是比较小的了,你可以用顺序图来完成设计,注意做到需求驱动详细设计,注意要满足架构设计和数据库设计。不过不少MIS会有一些特殊的需求点,我们需要识别出来并想清楚应对办法,某些特殊的需求点还需要进行前期的技术预研。
如果你做的不是MIS类型的系统,而是设计难度很高的软件,比方说技术含量很高的CAD软件、人工智能很牛逼的某些家用游戏,要解决这些软件的详细设计,你需要设计模式、工程绘图、数学、物理、人工智能等很多知识支撑才能搞得掂了!


本文是系列文章的其中一篇,要做软件设计师一点都不简单啊,请留意后续文章!



活动信息:

我们即将在深圳举办的一个活动“敏捷遇上UML,为你分享需求分析软件设计的最佳实践。

详情请猛点这个链接:http://blog.csdn.net/fireball1975/article/details/19550771

本活动已经在CSDN社区活动发布,详见:http://huiyi.csdn.net/module/meeting/meeting/info/706/community




作者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》作者

www.umlonline.org创办人

  • 8
    点赞
  • 11
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p style="text-align:left;"> <span> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-family:"color:#E53333;font-size:14px;background-color:#FFFFFF;line-height:24px;"><span style="line-height:24px;">限时福利1:</span></span><span style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;">购课进答疑群专享柳峰(刘运强)老师答疑服务。</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <strong><span style="color:#337FE5;font-size:14px;">为什么说每一个程序员都应该学习MySQL?</span></strong> </p> <p class="ql-long-24357476"> <span style="font-size:14px;">根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。</span> </p> <p class="ql-long-24357476"> <img src="https://img-bss.csdn.net/202003301212574051.png" alt="" /> </p> <p class="ql-long-24357476"> <span style="font-size:14px;">使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。</span><br /> <br /> <span style="font-size:14px;">学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!</span> </p> <span></span> <p> <br /> </p> <p> <span> </span> </p> <h3 class="ql-long-26664262"> <p style="font-size:12pt;"> <strong class="ql-author-26664262 ql-size-14"><span style="font-size:14px;color:#337FE5;">【课程设计】</span></strong> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;font-size:14px;">在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。</span> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="font-weight:normal;font-size:14px;">本课程包含3大模块:</span><span style="font-weight:normal;font-size:14px;"> </span> </p> </h3> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">一、基础篇:</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;">主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">二、SQL语言篇</span></strong><span class="ql-author-26664262" style="font-size:14px;">:</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;">本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,</span><span style="font-size:14px;">学会熟练对库表进行增删改查等必备技能。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">三、MySQL进阶篇</span></strong><span style="font-size:14px;">:</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。</span> </p> <span><span> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span><img src="https://img-bss.csdn.net/202004220208351273.png" alt="" /> </p> </span></span>
本套餐将包括两个重磅性的课程与一个赠送学习的课程,分别为SpringBoot实战视频教程与RabbitMQ实战教程跟SSM整合开发之poi导入导出Excel。目的是为了让各位小伙伴可以从零基础一步一个脚印学习微服务项目的开发,特别是SpringBoot项目的开发,之后会进入第二个课程:RabbitMQ的实战,即消息中间件在实际项目或者系统中各种业务模块的实战并解决一些常见的典型的问题!核心的知识点分别包括 一、SpringBoot实战历程课程 (1)SpringBoot实战应用场景的介绍与代码实战 (2)发送邮件服务、上传下载文件服务、Poi导入导出Excel (3)单模块与多模块项目构建、项目部署打包、日志、多环境配置、lombok、validator以及mybatis整合实战跟多数据源实战 (4)Redis缓存中间件的实战与缓存雪崩跟缓存穿透等问题的解决实战 (5)RabbitMQ消息中间件在业务模块异步解耦、通信、消息确认机制以及并发量配置等的实战 二、RabbitMQ实战教程课程 (1)RabbitMQ的官网权威技术手册拜读,认识并理解各大专有名词,如队列,交换机,路由,死信队列,消息确认机制等等 (2)RabbitMQ在业务服务模块之间的异步解耦通信实战,如异步记录日志与发送邮件等 (3)商城系统抢单高并发情况下RabbitMQ的限流作用与代码实战 (4)消息确认机制与并发量配置并用来实战商城用户下单 (5)死信队列深入讲解与DLX,DLK,TTL等概念的讲解并用来实战 “支付系统用户下单后支付超时而失效其下单记录”实战 详情,各位小伙伴可以查看两个课程的目录。相信学完该套餐相关课程后,你的实战能力将大大提升!涨薪将不再遥遥无期! 最后,赠送的SSM整合开发之POI导入导出Excel目的是为了让各位小伙伴也可以学习Spring+SpringMVC+Mybatis整合开发的项目,让大家一对比SpringBoot与SPring的项目开发流程以及复杂程度!!! 相信学完之后,你会对SpringBoot爱不释手!!
近年来,物联网的发展势不可挡,将很快成为下一个革命性的技术变革,改变人们的生活方式。而嵌入式linux相关技术则是物联网技术中的核心部分(感知层和传输层全部依赖嵌入式技术的支撑),想要在物联网技术中有所建树嵌入式linux是绕不开的一道坎,因此为广大相关专业大学生和相关行业工程师所关注。然后传统的线下培训班学习方式却有着诸多缺陷:费用高昂(4个月16800元左右)、时间和空间成本高昂(必须全日制集中式脱产学习、学习和生活成本高)、效果差(老师水平、责任心、教学管理水平参差不齐)等,让人望而却步、“嵌入式,想说爱你不容易”。 本课程是从零开始完整系统的学习嵌入式linux技术的完全教程,因此学习是分为几个阶段的,每个人应当根据自己的情况选择合适的学习起始点(譬如有基础则可不必从头开始)和学习重点安排(譬如有些人应该重点看C,而有些人要重点看裸机等)。 但是总的来说,大部分同学的基础和学习能力都相差不大,因此我下面给出的完整学习路径和建议适合99%的同学。这个学习路线也是朱老师课程录制和顺序,也是朱老师自己认为的合理的学习进阶路线,建议大家参考该路线学习,以大限度提升学习效率。 第0阶段:试学阶段 本阶段要学习的课程是《0.基础预科》中的3个课程。学习顺序为: 先学习《0.1.嵌入式软件工程师完全学习指南》。本课程是对物联网技术的介绍,和朱老师整个物联网相关课程的大规划(嵌入式linux核心课程属于朱老师整个物联网课程体系的一部分,其他部分还有诸如Android扩展、物联网传感器扩展等)。学完本课程可对物联网的概念和应用有更深的理解,尤其适合根本不理解何为物联网的小白学习。(现在很多大学都开设物联网专业,但是都大二大三了都还不知道何为物联网的人一大堆,甚至学校老师都说不清到底什么是物联网) 然后学习《0.2.朱老师带你零基础学Linux》,本课程是对linux系统的基本使用。因为之后的所有开发都是在linux系统(具体的说是ubuntu,更具体点是基础预科里用的是ubuntu10.04,后面其他课程里用的是ubuntu14.04)中进行的,因此要开始学习必须先会使用linux发行版系统,所以这个课必须先学。 后是《0.3.嵌入式linux C编程基础》,这个课程是非常非常基础的讲C语言的课程(其实还只讲了一半,是线下实体课堂的实录,因为当时课上到一半开班了所以就没继续讲了)。这个课程C语言讲的非常仔细,仔细到令人发指的程度。如果你C语言功底不行建议好好看这个课程,会有极大提升。当然如果C语言还可以,有一定功力(表现为看了这个课程后感觉太简单太容易了),那这个课程可以快进过去或者干脆跳过。 至此基础预科学习完毕,可以正式开启嵌入式linux学习之路了。 多说几句,整个《0.基础预科》部分的视频课程都是免费提供的。并不是说这部分课程没有含金量所以免费,相反这部分课程含金量很高(同学反馈的好评也多)。朱老师之所以将本部分定为免费课程,主要是希望大家能够零成本的开始学习,先通过这部分课程的学习检验自己的学习结果,搞清楚以下问题: 我到底能不能学会? 这个课程到底适合不适合我,这个老师的风格我到底喜欢不喜欢? 这个技术方向到底能不能吸引我?我是不是真的决定去学嵌入式了? 这老师行不行?值不值得花钱买他的课程? 把这个阶段定位为试学阶段,也是基于这点。试学,一方面试的是你自己,另一方面试的是我。试学阶段40小时左右的课程(其实本来可以短一些的)大家至少需要一周以上才能学完,这么久的时间就是希望大家能够想清楚,也能够看清楚自己的内心兴趣,同时也能充分检验朱老师的课程质量。 第1阶段:初级嵌入式软件工程师阶段 本阶段的学习内容包括《1.ARM裸机全集》和《4.C语言专题》这两个课程。学习顺序是以ARM裸机为主线,其中穿插C语言专题进行学习。 本阶段2个大课程加起来156小时,主体内容是嵌入式linux软件开发方向的各种零碎知识点和能力点,几乎可以认为是整个课程中重要的一个阶段(有些人说驱动重要?这两个阶段如果过不了驱动跟你半毛钱关系都没有)。 本阶段对大家重要还有个更主要原因就是:本课程中讲的东西都是各种嵌入式软件开发岗位技术面试笔试中常遇到的。所以如果是希望通过学习搞定面试找到工作,那本阶段的课程就要作为重点学(尤其是C语言专题)。 第2阶段:提升阶段 本阶段的学习内容包括《2.uboot和linux内核移植》和《3.linux应用编程和网络编程》。其中uboot和系统移植承接ARM裸机阶段内容,继续讲解uboot。这个课程也很精华,分为20个小课程一共92小时,学习本课程并且把课程中的练习都做下来后,整个人的程序编写和调试功能会极大提升,用已经学完的同学的话讲是“感觉整个人脱胎换骨了”。Linux应用编程和网络编程这个课程根据APUE这本书简化而来,面向实际用到的知识点和重点,学起来难易适中,相对轻松点。不过却是后面学习驱动的,想要写驱动必须得先会写应用,这个道理大家一定要遵从。 本阶段的2个课程之间没有先后顺序,大家可以根据自己的需要来安排。我讲课时是按照先uboot和系统移植,后linux应用编程和网络编程的。(主要是为了承接前后阶段) 第3阶段:驱动学习阶段 本阶段内容为《5.linux驱动开发》,本部分是整个课程里大家期待的部分,很多人是一上来就想学习驱动开发的。但是必须认识到,驱动是linux技术中集大成者,前面所有课程中学到的内容在驱动中都会用到,驱动编程和调试是让人抓掉头发都无从下手的麻烦事,所以建议大家学好前面的课程再来看本部分,否则你将什么都得不到。(就好像笑话里说的那种,前面4碗饭不吃,直接吃第5碗也是不可能饱的) 第4阶段:项目阶段 本阶段为大家安排了一个练习项目,该项目综合用到了前面课程中讲到的知识和能力,包括驱动和应用,编程能力、调试能力等。为了方便本项目并未用到额外的配件,课程配套的X210开发板即可直接完成项目。本项目只是个开胃小菜,用来给大家检验自己的学习成果的而已。 真正有用而复杂的项目,朱老师将在另一个课程体系(暂定名为:朱有鹏老师物联网项目库)中给大家一一道来。这些项目会从2016.8左右开始一直持续(直到朱老师退休······),朱老师的目标是将常见的各种物联网传感器、外设硬件模块、前端技术应用都囊括进来,使用我们嵌入式linux核心课程中学到的编程能力,结合这些软硬件模块来完成一个又一个大项目小项目。将来大家可以根据自己的兴趣爱好和工作需要,在其中选择合适的项目进行学习,并且即刻在实际中遇到这些项目(也是是为了毕业设计、也许是公司下一个产品···)
<p> <span> </span> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span style="color:#E53333;">92讲视频课+16大项目实战+课件源</span><span style="color:#E53333;">码+讲师社群闭门分享会</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-14 ql-author-32569780"><span style="color:#337FE5;font-size:14px;">为什么学习数据分析?</span></strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-14 ql-author-32569780"><span style="color:#337FE5;"><br /> </span></strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;">       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <br /> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;">       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 </p> <p style="font-size:11pt;color:#494949;">  <span style="font-size:11pt;"> </span> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span style="color:#337FE5;"><strong>本课程共包含五大模块:</strong></span> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-14 ql-author-32569780"><span style="color:#337FE5;"><br /> </span></strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">一、先导篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">二、基础篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">三、数据采集篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">四、分析工具篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。</span> </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <strong class="ql-size-12 ql-author-32569780">五、算法篇:</strong> </p> <p class="ql-long-32569780" style="font-size:11pt;color:#494949;"> <span class="ql-author-32569780">算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。</span> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006110958102443.jpg" /> </p>
<p> <span style="color:#494949;font-size:14px;"><br /> </span> </p> <p> <span style="color:#494949;font-size:14px;">为什么人人都要学Git?</span><span style="color:#494949;font-size:14px;">Git的由来可不简单,最初是由Linux之父-林纳斯.托瓦兹为了更好管理Linux内核代码而编写的,</span><span style="color:#494949;font-size:14px;">Git用于版本控制,可以说是开发日常必备,很好的解决了代码合并的问题,经得起频繁多人修改的考验!</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14.6667px;"><br /> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">庞大的项目从来不是一个程序员可以搞定的,多人合作时代码版本管理显的尤为重要,千辛万苦改的Bug代码一合并没了怎么办?</span><span style="font-size:14px;">Git如此重要,相信作为程序员的你一定需要学习,2小时从根本理解Git!</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-24357476" style="color:#494949;font-size:11pt;"> <span style="font-size:14px;color:#E53333;">学完即可轻松应对工作中 99% 以上的 日常代码管理 使用场景,实用性99.9999%!</span> </p> <p> <br /> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476"> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">这门课程,绝对不会让你觉得亏!</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <br /> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">Git基本用法+Git高级用法+Git原理+课程教辅</span> </p> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">本课程实用性极强,边学边用!<span style="background-color:#FF9900;">零基础</span>也能轻松入门~</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;color:#E53333;">在这门课中,我们保证你能收获到这些</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">1)Git最佳实践</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">2)版本管理</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">3)分支管理</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">4)标签管理</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">5)解决冲突</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">6)Git信息存储原理</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">7)深入理解Git三大分区</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-24357476" style="color:#494949;font-size:11pt;"> <br /> </p> <p class="ql-long-24357476" style="color:#494949;font-size:11pt;"> <br /> </p> <p class="ql-long-24357476" style="color:#494949;font-size:11pt;"> <br /> </p> <p class="ql-long-24357476" style="color:#494949;font-size:11pt;"> --------------------------------------------------------------- </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

张传波

打赏的朋友很帅噢!

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值