1. 程序员为什么要学深度学习
费良宏:程序员为什么要学深度学习?
深度学习本身是一个非常庞大的知识体系。本文更多想从程序员的视角出发,让大家观察一下深度学习对程序员意味着什么,以及我们如何利用这样一个高速发展的学科,来帮助程序员提升软件开发的能力。
本文根据费良宏在2016QCon全球软件开发大会(上海)上的演讲整理而成。
前言
1973年,美国上映了一部热门的科幻电影《WestWorld》,三年之后又有一个续集叫做《FutureWorld》。这部电影在80年代初被引进到中国叫《未来世界》。那部电影对我来讲简直可以说得上是震撼。影片中出现了很多机器人,表情丰富的面部下面都是集成电路板。这让那时候的我觉得未来世界都是那么遥远、那么神秘。
时间到了2016年,很多朋友可能都在追看HBO斥巨资拍摄的同一题材的系列剧《WestWorld》。如果前两部电影还是局限在机器人、人工智能这样的话题,2016年的新剧则在剧情和人工智能的思考方面有了很大的突破。不再渲染机器人是否会威胁到人类,而是在探讨“Dreamsaremainlymemories”这一类更具哲理的问题。
“记忆究竟如何影响了智能”这个话题非常值得我们去思考,也给我们一个很好的启示——今天,人工智能领域究竟有了怎样的发展和进步。
今天我们探讨的话题不仅仅是简单的人工智能。如果大家对深度学习感兴趣,我相信各位一定会在搜索引擎上搜索过类似相关的关键字。我在Google上以deeplearning作为关键字得到了2,630万个搜索的结果。这个数字比一周之前足足多出了300多万的结果。这个数字足以看得出来深度学习相关的内容发展的速度,人们对深度学习的关注也越来越高。
从另外的一个角度,我想让大家看看深度学习在市场上究竟有多么热门。从2011年到现在一共有140多家专注人工智能、深度学习相关的创业公司被收购。仅仅在2016年这种并购就发生了40多起。
其中最疯狂的是就是Google,已经收购了 11 家人工智能创业公司,其中最有名的就是击败了李世石九段的 DeepMind。排名之后的就要数 Apple、Intel以及Twitter。以Intel 公司为例,仅在今年就已经收购了 3 家创业公司,Itseez、Nervana 和 Movidius。这一系列大手笔的并购为了布局人工智能以及深度学习的领域。
当我们去搜索深度学习话题的时候,经常会看到这样的一些晦涩难懂的术语:Gradient descent(梯度下降算法)、Backpropagation(反向传播算法)、Convolutional Neural Network(卷积神经网络)、受限玻耳兹曼机(Restricted Boltzmann Machine)等。
如打开任何一篇技术文章,你看到的通篇都是各种数学公式。大家看到如下左边的图,其实并不是一篇高水准的学术论文,而仅仅是维基网络关于玻耳兹曼机的介绍。维基网络是科普层面的内容,内容复杂程度就超过了大多数数学知识的能力。
在这样的背景之下,我今天的的话题可以归纳成三点:第一,我们为什么要学习深度学习;第二,深度学习最核心的关键概念就是神经网络,那么究竟什么是神经网络;第三,作为程序员,当我们想要成为深度学习开发者的时候,我们需要具备怎样的工具箱,以及从哪里着手进行开发。
为什么要学习深度学习
首先,我们谈谈为什么要学习深度学习。在这个市场当中,最不缺乏的就是各种概念以及各种时髦新技术的词汇。深度学习有什么不一样的地方?我非常喜欢AndrewNg(吴恩达)曾经用过的一个比喻。
他把深度学习比喻成一个火箭。这个火箭有一个最重要的部分,就是它的引擎,目前来看在这个领域里面,引擎的核心就是神经网络。大家都知道,火箭除了引擎之外还需要有燃料,那么大数据其实就构成了整个火箭另外的重要组成部分——燃料。以往我们谈到大数据的时候,更多是强调存储和管理数据的能力,但是这些方法和工具更多是对于以往历史数据的统计、汇总。
而对于今后未知的东西,这些传统的方法并不能够帮助我们可以从大数据中得出预测的结论。如果考虑到神经网络和大数据结合,我们才可能看清楚大数据真正的价值和意义。AndrewNg就曾经说过“我们相信(神经网络代表的深度学习)是让我们获得最接近于人工智能的捷径”。这就是我们要学习深度学习的一个最重要的原因。
其次,随着我们进行数据处理以及运算能力的不断提升,深度学习所代表的人工智能技术和传统意义上人工智能技术比较起来,在性能上有了突飞猛进的发展。这主要得益于在过去几十间计算机和相关产业不断发展带来的成果。在人工智能的领域,性能是我们选择深度学习另一个重要的原因。
这是一段Nvidia在今年公布的关于深度学习在无人驾驶领域应用的视频。我们可以看到,将深度学习应用在自动驾驶方面,仅仅经历了3千英里的训练,就可以达到什么样的程度。在今年年初进行的实验上,这个系统还不具备真正智能能力,经常会出现各种各样的让人提心吊胆的状况,甚至在某些情况下还需要人工干预。
但经过了3千英里的训练之后,我们看到在山路、公路、泥地等各种复杂的路况下面,无人驾驶已经有了一个非常惊人的表现。请大家注意,这个深度学习的模型只经过了短短几个月、3千英里的训练。
如果我们不断完善这种模型的话,这种处理能力将会变得何等的强大。这个场景里面最重要的技术无疑就是深度学习。我们可以得出一个结论:深度学习可以为我们提供强大的能力,如果程序员拥有了这个技术的话,无异于会让每个程序员如虎添翼。
神经网络快速入门
如果我们对于学习深度学习没有任何疑虑的话,接下来就一定会关心我需要掌握什么样的知识才能让我进入到这个领域。这里面最重要的关键技术就是“神经网络”。说起“神经网络”,容易混淆是这样两个完全不同的概念。
一个是生物学神经网络,第二个才是我们今天要谈起的人工智能神经网络。可能在座的各位有朋友在从事人工智能方面的工作。当你向他请教神经网络的时候,他会抛出许多陌生的概念和术语让你听起来云里雾里,而你只能望而却步了。
对于人工智能神经网络这个概念,大多数的程序员都会觉得距离自己有很大的距离。因为很难有人愿意花时间跟你分享神经网络的本质究竟是什么。而你从书本上读的到的理论和概念,也很让你找到一个清晰、简单的结论。
今天就我们来看一看,从程序员角度出发神经网络究竟是什么。我第一次知道神经网络这个概念是通过一部电影——1991年上映的《终结者2》。男主角施瓦辛格有一句台词:
“MyCPUisaneural-netprocessor;alearningcomputer.”(我的处理器是一个神经处理单元,它是一台可以学习的计算机)。从历史来看人类对自身智力的探索,远远早于对于神经网络的研究。
1852年,意大利学者因为一个偶然的失误,将人类的头颅掉到硝酸盐溶液中,从而获得第一次通过肉眼关注神经网络的机会。这个意外加速了对人类智力奥秘的探索,开启了人工智能、神经元这样概念的发展。
生物神经网络这个概念的发展,和今天我们谈的神经网络有什么关系吗?我们今天谈到的神经网络,除了在部分名词上借鉴了生物学神经网络之外,跟生物学神经网络已经没有任何关系,它已经完全是数学和计算机领域的概念,这也是人工智能发展成熟的标志。这点大家要区分开,不要把生物神经网络跟我们今天谈到的人工智能有任何的混淆。
90年代中期,由Vapnik等人提出了支持向量机算法(Support Vector Machines,支持向量机)。很快这个算法就在很多方面体现出了对比神经网络的巨大优势,例如:无需调参、高效率、全局最优解等。基于这些理由,SVM算法迅速打败了神经网络算法成为那个时期的主流。而神经网络的研究则再次陷入了冰河期。
在被人摒弃的十年里面,有几个学者仍然在坚持研究。其中很重要的一个人就是加拿大多伦多大学的Geoffery Hinton教授。2006年,他的在着名的《Science》杂志上发表了论文,首次提出了“深度信念网络”的概念。
与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。在他的论文里面,他给多层神经网络相关的学习方法赋予了一个新名词— “深度学习”。
很快,深度学习在语音识别领域崭露头角。接着在2012年,深度学习技术又在图像识别领域大展拳脚。Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千个类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了将近11个百分点。
这个结果充分证明了多层神经网络识别效果的优越性。从那时起,深度学习就开启了新的一段黄金时期。我们看到今天深度学习和神经网络的火热发展,就是从那个时候开始引爆的。
利用神经网络构建分类器,这个神经网络的结构是怎样的?
其实这个结构非常简单,我们看到这个图就是简单神经网络的示意图。神经网络本质上就是一种“有向图”。图上的每个节点借用了生物学的术语就有了一个新的名词 – “神经元”。连接神经元的具有指向性的连线(有向弧)则被看作是“神经”。这这个图上神经元并不是最重要的,最重要的是连接神经元的神经。每个神经部分有指向性,每一个神经元会指向下一层的节点。
节点是分层的,每个节点指向上一层节点。同层节点没有连接,并且不能越过上一层节点。每个弧上有一个值,我们通常称之为”权重“。通过权重就可以有一个公式计算出它们所指的节点的值。这个权重值是多少?我们是通过训练得出结果。它们的初始赋值往往通过随机数开始,然后训练得到的最逼近真实值的结果作为模型,并可以被反复使用。这个结果就是我们说的训练过的分类器。
节点分成输入节点和输出节点,中间称为隐层。简单来说,我们有数据输入项,中间不同的多个层次的神经网络层次,就是我们说的隐层。之所以在这样称呼,因为对我们来讲这些层次是不可见的。输出结果也被称作输出节点,输出节点是有限的数量,输入节点也是有限数量,隐层是我们可以设计的模型部分,这就是最简单的神经网络概念。
如果简单做一个简单的类比,我想用四层神经网络做一个解释。左边是输入节点,我们看到有若干输入项,这可能代表不同苹果的RGB值、味道或者其它输入进来的数据项。中间隐层就是我们设计出来的神经网络,这个网络现在有不同的层次,层次之间权重是我们不断训练获得一个结果。
最后输出的结果,保存在输出节点里面,每一次像一个流向一样,神经是有一个指向的,通过不同层进行不同的计算。在隐层当中,每一个节点输入的结果计算之后作为下一层的输入项,最终结果会保存在输出节点上,输出值最接近我们的分类,得到某一个值,就被分成某一类。这就是使用神经网络的简单概述。
除了从左到右的形式表达的结构图,还有一种常见的表达形式是从下到上来表示一个神经网络。这时候,输入层在图的最下方,输出层则在图的最上方。从左到右的表达形式以AndrewNg和LeCun的文献使用较多。而在Caffe框架里则使用的则是从下到上的表达。
简单来说,神经网络并不神秘,它就是有像图,利用图的处理能力帮助我们对特征的提取和学习的过程。2006年Hinton的那篇着名的论文中,将深度学习总结成三个最重要的要素:计算、数据、模型。有了这三点,就可以实现一个深度学习的系统。
程序员需要的工具箱
对于程序员来说,掌握理论知识是为了更好的编程实践。那就让我们看看,对于程序员来说,着手深度学习的实践需要准备什么样的工具。
硬件
从硬件来讲,我们可能需要的计算能力,首先想到的就是CPU。除了通常的CPU架构以外,还出现了附加有乘法器的CPU,用以提升计算能力。此外在不同领域会有DSP的应用场景,比如手写体识别、语音识别、等使用的专用的信号处理器。还有一类就是GPU,这是一个目前深度学习应用比较热门的领域。最后一类就是FPGA(可编程逻辑门阵列)。
这四种方法各有其优缺点,每种产品会有很大的差异。相比较而言CPU虽然运算能力弱一些,但是擅长管理和调度,比如读取数据,管理文件,人机交互等,工具也丰富。DSP相比而言管理能力较弱,但是强化了特定的运算能力。
这两者都是靠高主频来解决运算量的问题,适合有大量递归操作以及不便拆分的算法。GPU的管理能力更弱一些,但是运算能力更强。但由于计算单元数量多,更适合整块数据进行流处理的算法。
FPGA在管理与运算处理方面都很强,但是开发周期长,复杂算法开发难度较大。就实时性来说,FPGA是最高的。单从目前的发展来看,对于普通程序员来说,现实中普遍采用的计算资源就还是是CPU以及GPU的模式,其中GPU是最热门的领域。
这是我前天为这次分享而准备的一个AWS 上p2的实例。仅仅通过几条命令就完成了实例的更新、驱动的安装和环境的设置,总共的资源创建、设置时间大概在10分钟以内。而之前,我安装调试前面提到的那台计算机,足足花了我两天时间。
另外,从成本上还可以做一个对比。p2.8xLarge 实例每小时的费用是7.2美元。而我自己那台计算机总共的花费了是¥16,904元。这个成本足够让我使用350多个小时的p2.8xLarge。在一年里使用AWS深度学习站就可以抵消掉我所有的付出。随着技术的不断的升级换代,我可以不断的升级我的实例,从而可以用有限的成本获得更大、更多的处理资源。这其实也是云计算的价值所在。
云计算和深度学习究竟有什么关系?今年的8月8号,在IDG网站上发表了一篇文章谈到了这个话题。文章中做了这样一个预言:如果深度学习的并行能力不断提高,云计算所提供的处理能力也不断发展,两者结合可能会产生新一代的深度学习,将带来更大影响和冲击。这是需要大家考虑和重视的一个方向!
软件
深度学习除了硬件的基础环境之外。程序员会更关心与开发相关的软件资源。这里我罗列了一些曾经使用过的软件框架和工具。
Scikit-learn是最为流行的一个python机器学习库。它具有如下吸引人的特点:简单、高效且异常丰富的数据挖掘/数据分析算法实现; 基于NumPy、SciPy以及matplotlib,从数据探索性分析,数据可视化到算法实现,整个过程一体化实现;开源,有非常丰富的学习文档。
Caffe专注在卷及神经网络以及图像处理。不过Caffe已经很久没有更新过了。这个框架的一个主要的开发者贾扬清也在今年跳槽去了Google。也许曾经的霸主地位要让位给他人了。
Theano 是一个非常灵活的Python 机器学习的库。在研究领域非常流行,使用上非常方便易于定义复杂的模型。Tensorflow 的API 非常类似于Theano。我在今年北京的QCon 大会上也分享过关于Theano 的话题。
Jupyter notebook 是一个很强大的基于ipython的python代码编辑器,部署在网页上,可以非常方便的进行交互式的处理,很适合进行算法研究合数据处理。
Torch 是一个非常出色的机器学习的库。它是由一个比较小众的lua语言实现的。但是因为LuaJIT 的使用,程序的效率非常出色。Facebook在人工智能领域主打Torch,甚至现在推出了自己的升级版框架Torchnet。
深度学习的框架非常之多,是不是有一种乱花渐欲迷人眼的感觉?我今天向各位程序员重点介绍的是将是TensorFlow。这是2015年谷歌推出的开源的面向机器学习的开发框架,这也是Google第二代的深度学习的框架。很多公司都使用了TensorFlow开发了很多有意思的应用,效果很好。
用TensorFlow可以做什么?答案是它可以应用于回归模型、神经网络以深度学习这几个领域。在深度学习方面它集成了分布式表示、卷积神经网络(CNN)、递归神经网络(RNN) 以及长短期记忆人工神经网络(Long-Short Term Memory, LSTM)。
关于Tensorflow 首先要理解的概念就是Tensor。在辞典中对于这个词的定义是张量,是一个可用来表示在一些向量、标量和其他张量之间的线性关系的多线性函数。实际上这个表述很难理解,用我自己的语言解释Tensor 就是“N维数组”而已。
使用 TensorFlow, 作为程序员必须明白 TensorFlow这样几个基础概念:它使用图 (Graph) 来表示计算任务;在被称之为 会话 (Session) 的上下文 (context) 中执行图;使用 Tensor 表示数据;通过 变量 (Variable) 维护状态;使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据。
一句话总结就是,TensorFlow 就是有状态图的数据流图计算环境,每个节点就是在做数据操作,然后提供依赖性和指向性,提供完整数据流。
TensorFlow安装非常简单,但官网提供下载的安装包所支持的CUDA 的版本是7.5。考虑到CUDA 8 的让人心动的新特以及不久就要正式发布的现状。或许你想会考虑立即体验CUDA 8,那么就只能通过编译Tensorflow源代码而获得。目前TensorFlow已经支持了Python2.7、3.3+。
此外,对于使用Python 语言的程序员还需要安装所需要的一些库,例如:numpy、protobuf等等。对于卷积处理而言,cuDNN是公认的性能最好的开发库,请一定要安装上。常规的Tensorsorflow的安装很简单,一条命令足矣:
$ pip3 install —upgrade https://storage.233.wiki/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-cp35m-linux_x86_64.whl
如果想评估一下或者简单学习一下,还可以通过Docker进行安装,安装的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多优点。首先,目前为止,深度学习的开发框架里面TensorFlow的文档做的最好,对程序员学习而言是非常好的一点。第二,TensorFlow有丰富的参考实例,作为参考学习起来非常容易。
第三,开发者社区活跃,在任何一个深度学习的社区里,都有大量关于TensorFlow的讨论。第四,谷歌的支持力度非常大,从2015年到现在升级速度非常快,这是其他开源框架远远达不到的结果。
参考TensorFlow的白皮书,我们会看到未来TensorFlow还将会有巨大的发展潜力。让我特别感兴趣是这两个方向。第一,支持跨多台机器的 parallelisation。尽管在0.8版本中推出了并行化的能力,但是目前还不完善。随着未来不断发展,依托云计算的处理能力的提升这个特性将是非常让人振奋的。
第二,支持更多的开发语言,对于开发者来说这是一个绝大的利好,通过使用自己擅长的语言使用TensorFlow应用。这些开发语言将会扩展到Java、Lua以及R 等。
在这里我想给大家展示一个应用Tensorflow 的例子。这个例子的代码托管在这个网址上 https://github.com/anishathalye/neural-style。白俄罗斯的现代印象派艺术家Leonid Afremov善于用浓墨重彩来表现都市和风景题材,尤其是其雨景系列作品。他习惯用大色块的铺陈来营造光影效果,对反光物体和环境色的把握非常精准。
于是我就找到了一张上海东方明珠电视塔的一张摄影作品,我希望通过Tensorflow 去学习一下Leonid Afremov 的绘画风格,并将这张东方明珠的照片处理成那种光影色彩丰富的作品风格。利用Tensorflow 以及上面提到的那个项目的代码,在一个AWS 的p2类型的实例上进行了一个一千次的迭代,于是就得到了下图这样的处理结果。
这个处理的代码只有350行里,模型使用了一个成名于2014年ImageNet比赛中的明星 VGG。这个模型非常好,特点就是“go depper”。
TensorFlow 做出这样的作品,并不仅仅作为娱乐供大家一笑,还可以做更多有意思的事情。将刚才的处理能力推广到视频当中,就可以看到下图这样的效果,用梵高着名的作品”星月夜“的风格就加工成了这样新的视频风格。
可以想象一下,如果这种处理能力在更多领域得以应用,它会产生什么样的神奇结果?前景是美好的,让我们有无限遐想。事实上我们目前所从事的很多领域的应用开发都可以通过使用神经网络和深度学习来加以改变。对于深度学习而言,掌握它并不是难事。每一个程序员都可以很容易的掌握这种技术,利用所具备的资源,让我们很快成为深度学习的程序开发人员。
结束语
未来究竟是什么样,我们没有办法预言。有位作家Ray Kurzweil在2005年写了《奇点临近》一书。在这本书里面他明确告诉我们,那个时代很快到来。作为那个时代曙光前的人群,我们是不是有能力加速这个过程,利用我们学习的能力实现这个梦想呢?
中国人工智能的发展
人工智能的时代无疑已经到来,这个时代需要的当然就是掌握了人工智能并将其解决具体问题的工程师。坦率的说,市场上这一类的工程师还属于凤毛麟角。职场上的薪酬待遇可以看得出来这样的工程师的抢手的程度。人工智能这门学科发展到今天,就学术自身而言已经具备了大规模产业化的能力。
所以说,对于工程师而言当务之急就是尽快的掌握应用人工智能的应用技术。当下在互联网上关于人工智能的学习资料可以说已经是“汗牛充栋”,那些具备了快速学习能力的工程师一定会在人工智能的大潮当中脱颖而出。
中国发展人工智能产业的环境已经具备。无论从创业环境、人员的素质乃至市场的机遇而言完全具备了产生产业变革的一切条件。与美国相比较,在人工智能的许多领域中国团队的表现也可以说是不逞多让。就人工智能的技术层面而言,中国的工程师与全球最好的技术团队正处于同一个起跑线上。
时不我待,中国的工程师是有机会在这个领域大展身手的。不过值得注意的是,要切忌两点:一是好高骛远,盲目与国外攀比。毕竟积累有长短,术业有专攻,我们要立足于已有的积累,寻求逐步的突破。二是一拥而上,盲目追求市场的风口。人工智能的工程化需要大量的基础性的积累,并非一蹴而就简单复制就可以成功。
中国的科研技术人员在人工智能领域的成就有目共睹。在王咏刚的一篇文章里面,他统计了从2013年到2015年SCI收录的“深度学习”论文,中国在2014年和2015年超已经超过了美国居于领跑者的位置。
另外一让我感到惊讶的事情,Google的JeffDean在2016年发表过一篇名为《TensorFlow:Asystemforlarge-scalemachinelearning》的论文。文章的22个作者里面,明显是中国名字的作者占已经到了1/5。如果要列举中国人/华人在人工智能领域里的大牛,吴恩达、孙剑、杨强、黄广斌、马毅、张大鹏……很容易就可以说出一大串。
对于中国来说目前的当务之急是人工智能技术的产业化,唯有如此我们才可以讲科研/智力领域的优势转化为整体的、全面的优势。在这一点上,中国是全球最大的消费市场以及制造业强国,我们完全有机会借助市场的优势成为这个领域的领先者。
硅谷创新企业
硅谷虽然去过许多回,但一直无缘在那里长期工作。在人工智能领域的市场我们听到的更多是围绕Google、Apple、Intel、Amazon这样的一些大型科技公司的一举一动。但是在美国市场上还有一大批小型的创业企业在人工智能这个领域有惊艳的表现。仅以硅谷区域的公司为例:
Captricity,提供了手写数据的信息提取;
VIVLab,针对语音识别开发了虚拟助手服务;
TERADEEP,利用FPGA提供了高效的卷积神经网络的方案;
还有提供无人驾驶解决方案的NetraDyne。
这个名单还可以很长,还有许许多多正在利用人工智能技术试图去创造历史的团队正在打造他们的梦想。这些团队以及他们正在专注的领域是值得我们去学习和体会的。
2. 2023闆峰啗骞村害婕旇插叏鏂囷细鍙链夎ょ煡镄勭獊镰达纴镓崭细链夌湡姝g殑鎴愰暱
2023骞撮浄鍐涘勾搴︽紨璁诧细鎺㈢储璁ょ煡绐佺牬镄勬櫤鎱т箣镞
8链14镞ワ纴绉戞妧宸ㄥご闆峰啗鍦ㄥ寳浜锲藉朵细璁涓蹇冧互钬沧垚闀库濅负涓婚桡纴灞曞紑浜嗕竴鍦烘繁鍒荤殑婕旇层备粬浠ヨ嚜宸辩殑姝︽眽澶у︾粡铡嗕负寮曪纴璁茶堪浜嗗备綍鍦ㄤ袱骞村唴瀹屾垚锲涘勾璇剧▼锛屾垚锷熷厠链嶉夎鹃毦棰樸佺嫭绔嫔︿範鍜岃惧爞浜掑姩镄勬写鎴樸傚湪闾f垫棩瀛愰噷锛屼粬鏀惰幏浜嗗疂璐电殑缁忛獙锛
闆峰啗濮嬬粓鍧氭寔缁堣韩瀛︿範镄勭悊蹇碉纴浠栧皢鐩镙囧畾涓烘垚涓轰竴钖嶅崜瓒婄殑绋嫔簭锻桡纴阃氲繃瀹炶返鎻愬崌缂栫▼鎶鑳姐傜紪绋嬬殑阆撹矾涓婏纴浠栫粡铡呜繃鍑屾櫒镄勫疄楠屽ゃ佸埢鑻︾殑缂栫▼璁缁冿纴鐢氲呖灏濊瘯涓绾у︽姤鍙戣〃璁烘枃锛屼笌寮犲痉钖戞暀鎺堢殑浜ゆ祦浣夸粬鍒濇″皾鍒颁简瀛︽湳鎴愭灉镄勭敎澶淬
鍒涗笟鍒濇湡锛岄浄鍐涜よ瘑鍒板洟阒熺殑锷涢噺锛屼笌鐜嫔叏锲界瓑浼欎即鍏卞悓鍒涚珛锷犲瘑杞浠讹纴杩欐电粡铡呜╀粬棰嗘偀鍒伴瓌锷涘拰姊︽兂镄勫姏閲忋傜劧钥岋纴鍒涗笟璺涓婄殑镟叉姌锛屽侭ITLOK椤圭洰鍜屼笁镩插叕鍙哥殑璧疯惤锛岃╀粬镒忚瘑鍒板嗳澶囩殑閲嶈佹с傚皬绫崇殑鎴愮珛鍜岄珮绔鍖栫殑鎺㈢储锛屽敖绠″厖婊¤𡒄杈涳纴浣嗕篃淇冧娇浠栦笉鏂鎴愰暱锛岃よ瘑鍒颁釜浜鸿兘锷涚殑灞闄愭у拰锲㈤槦鍗忎綔镄勫繀瑕佹с
鍦ㄥ皬绫13镄勭爷鍙戣繃绋嬩腑锛岄溃瀵瑰汹闅惧拰鎸戞垬锛岄浄鍐涘洟阒熷潥鎸佸搧璐ㄤ笌鍒涙柊锛屾渶缁堢剧害寰曞崱骞舵彁鍗囧洟阒熻ょ煡銆备骇鍝佹垚锷熶笂甯傚悗锛屼粬浠寮哄寲浜嗕綋楠屼紭鍏堢殑鐞嗗康锛岃〃鏄庤ょ煡绐佺牬瀵规垚闀跨殑鍐冲畾镐т綔鐢ㄣ傞浄鍐涚殑鍒嗕韩榧揿姳鎴戜滑浠ュ疄璺靛拰鍧氭寔绐佺牬璁ょ煡锛岃剼韪忓疄鍦伴溃瀵规垚闀夸腑镄勫汹闅俱
婕旇茬殑缁揿熬锛岄浄鍐涘瘎璇澶у讹细钬沧効浣犱滑镄勬ⅵ𨱍虫垚鐪燂纴姣忎竴娆℃写鎴橀兘鏄涓娆℃垚闀跨殑链轰细銆傗濅粬镄勬晠浜嫔憡璇夋垜浠锛屽彧链夐氲繃璁ょ煡镄勭獊镰达纴镓嶈兘鐪熸e疄鐜颁釜浜虹殑椋炶穬涓庢垚闀裤傚叧娉ㄦ垜浠镄勫姩镐侊纴锷犲叆鎴戜滑镄勬妧鑳芥彁鍗囩兢锛屽叡钖屽紑钖鏅烘収涓庢ⅵ𨱍崇殑镞呯▼銆
3. 2022程序员年终总结与展望
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具。下面我给大家带来2022程序员 年终 总结 与展望,更多程序员年终总结可点击“ 程序员总结 ”查看。
2022程序员年终总结与展望1
一年的时间,每当自己在总结它的时候,感觉是那么的短暂—弹指一挥间、而也就是在这一挥间,承载着太多太多,有收获与成就,有失败与不足、回头看看20__年的足迹,伴随着自己一年的是学习与坚持。
20__年伊始是通过分销资源计划系统(DRP)拉开序幕、此次项目是一个相对比较完整的Java Web项目,从最基础的业务介绍,到需求分析,数据库分析与设计,页面设计,代码编写…直到整个项目的完成,通过这个项目学到了很多新的知识,同时对很多已经学过的知识进行很好的摩擦和补充、因为在其中还穿插着其他的内容,所以用了有半年左右的时间、具体总结可以参见博客:DRP项目总结、
从4月初到5月末,准备并进行软件设计师的考试、这是我第二次参加软件设计师考试、通过两次考试的对比可以明显的发现产生在自己身上的一些改变和进步、具体可见无经历,不成熟—软件设计师考试后总结
但是最终的考试结果是没有通过,和第一次一样,差两分、虽然成绩的结果没有通过,但是通过这次软件设计师的复习考试,很给力的给自己补充了计算机基础方面的知识,同时也解了自己很多的疑惑,真正的学到了很多的知识、回顾自己整个的复习过程,收获是很大的,不仅仅是计算机基础,更是一种面对失败的心态收获、而这种心态将会在自己未来的路上会起很大的作用、
后半年进入SSH项目的实践和学习。
SSH为struts+spring+hibernate的一个集成框架,是目前较流行的一种轻量级Web应用程序开源框架。
Struts就是一个MVC的架构,在控制器,视图和模型方面都有其特定的组件,在SSH框架中,更多的是利用了Controller这个组件。
Spring实现了反转控制(Inversion ofControl)和面向方面编程(Achievement-OrientedProgramming)。Spring框架的能实现应用的分层架构,在应用中要使用的对象可以被一个简单的_ML文件连在一起,这个_ML文件含有到像事务管理器、对象工厂、包含业务逻辑的服务对象、和数据存取对象这些对象的引用。
Hibernate是一种ORM映射工具,它不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库,使用Hibernate,可以大大减少操作数据库的工作量。
通过对SSH框架的学习,认识到框架给我们开发所带来的便利,更重要的是在框架形成的过程中所包含的原理和思想、收获都在一篇篇的博客中。
2022程序员年终总结与展望2
我是一名程序员,在过去的一年里,软件研发部团结协作,以及在公司这充满奋斗的环境下,我以严肃认真的工作态度和百折不饶的精神,努力的完成了公司的各项工作,在软件研发、团队协作和个人成长上也取得了一定的成绩。在公司一年的工作已经结束,特向 公司总结 过去一年的工作如下:
一、软件研发
根据公司的安排,项目的需要。在自身的努力、伍经理的帮组,团队的合作下,克服重重技术困难,增长了工作 经验 ,收获丰盈:以前我在其他公司也做过一些开发,但是底层和架构与页面样式我都是没有涉及到的。通过这一年在本公司的的这些项目程序中的锻炼,我成长了,我学会了很多很多。
面向对象语言的收获。对于当前编程的主流思想是对象,任何事物都可以用对象来表示。以前理解这些话很费解都是从表面上理解,没有从深入的体会,通过这次__项目的深入,不管是数据还是外部一些条件我们都可以抽象成对象,都可以用对象来表示,具体可以用语言中的类方等。
具备独立完成__ 知识方面的能力。以前没有做过__ 的东西,加上这次深入的做,这次涉及到的领域也非常广,常用的重要的都有涉及,并且还补充__ 实际操作中空白的部分。通过这一年的开发,在__ 方面我能胜任这方面的工作,能独立完成这方面的工作。__ 方面存在一些不足。通过这次软件的开发,也发现自己的不足,如基础知识掌握不牢,缺乏编程整体思想。这些都是需要在工作中完善和改进的。
二、数据库开发
数据库是伴随着项目以来用的最多最平凡的技术。以前对数据库只是会一些简单常用的操作,经过这一年项目的实战,对数据库的操作增加了一些丰富的经验。为以后的工作和经验的积累都奠定了坚实的基础。同时在项目中还用到了__数据库,这是我最大的收获。
能熟练的运用数据库技术进行开发。特别是对__ 数据库的操作,经过这么长时间的积累,基本上能合理的设计和新建数据库,同时在数据结构上也加强了对数据库的理解。通过项目的实践现在能熟练使用和编写多种__ 语句。还掌握了一些关于数据库优化__ 语句优化的 方法 ,能进行一些简单的优化。数据是一门比较先进的技术,并不是你会写一些__ 语句,能建几个数据库你就是数据库工程师。要成为一个好的数据库管理员是要经过长时间的工作积累。针对自己的不足,在以后的工作和学习中多接触,多运用新的知识点。充实自己的经验和知识储备。
三、团队协作
上面的成功与收获,除了自身努力外,以及公司的支持。是这个团队铸造了我。我们这个团队也是因为有了我们这些拼搏协作的队员,使得它成为一个具有务实、拼搏、创新精神的团队。我与软件研发小组是一个整体,这里的团队总结也就是我在这个团队中的收获。公司下发的任务,下发的工作,件件都是用心去做的。我们这个团队中没有一个人在工作的时候做了工作以外的事情,都是实实在在的做跟工作相关对公司有益的事情。相信在伍经理的带领下现在是这样,以后同样也是这样。公司给的每一个任务不管它多难,如果工作没有完成我们会晚上加班,也要尽可能的完成当天的工作。如果工作实在忙,为了赶进度我们放弃周末休息时间也要尽可能的使项目提前。
现在我们开始项目的时候都会进行研讨,一般都会进行一个效率和逻辑的分析与讨论,保证程序正确的前提尽可能的提高程序的效率。我们小组内只要任何一个人出现技术或 其它 的问题,我们都会彼此都会尽可能的去帮助他。不会因为某一个人而拖住整个项目滞后。我们在项目中会及时沟通自己的收获,特别是一些针对性的技术问题。这样可以省了很多重复研究的时间,这是一笔很可观的时间。在交流中只要我会的,我懂的,我不会去吝啬。我会积极的去与你交流,我的团队 名言 “人强团则强,人弱团则削”。
通过公司这快一年的锻炼与学习我真的进步了很多,不管从技术上还是做事上,都不像以前那样了。我在公司学到的懂得的使我飞速成长。
2022程序员年终总结与展望3
时光如水,岁月如梭。
快乐的时间总是短暂的,今年过得很快。
工作四年了,保持着每年写一份总结的习惯。
我很希望总结有一个醒目的名字,比如从__ 到__ ,或者薪水从____ 到____ 这样。可惜什么都没有,我的职位依然是软件开发,薪水依然是那么多。现在经济萧条,估计也没什么希望涨钱了。
对于怀有远大抱负的同学,这份总结应该是份反面教材。
记得去年写总结的时候心情很差,抱怨了很多当时的工作以及领导"花生",那个时候的愿望是找一份新工作。没想到刚进入12月我就找到了。
不得不说这一次求职我是认真的把它当作一个工程去做,客观得对自己进行了定位,而且非常重要的是明确我想要的工作到底是什么样的。我需要的是让我每天的8小时能够享受工作的快乐。
投 简历 面试 的过程非常折磨人,尤其是我的处境(每天很大压力,完全是自我打磨的阶段)。
我清楚地记得面试现在这份工作那天是某个周六,我的经理"娃娃"和技术主管t同意我周末面试。一共4个小时,那绝对是一个互相争取的过程。他们对于工作的热情打动了我,觉得和这样的团队合作一定可以有火花。
真是幸运,当我正视错误,用行动做出改变的时候,找到了一份我要的工作。 入职 三周已经和团队磨合得很好了,用同事的话说就是觉得我已经加入很久了。
这里不得不说一句我们的团队,一个老中青结合富有战斗力的集体,而且还不乏八卦调节生活。每个人都特别,合作也会有摩擦,但是整体运作非常协调,开发速度和效率都高。从他们身上我看到不同的工作态度,生活态度。这些对我的 职业规划 都有着潜移默化的影响。领导“娃娃”也非常合适我目前阶段对于领导的需求。如果说几年前我初出茅庐需要的是一个有时间且肯耐心带我的领导的话,现在的我需要的是一个可以给予我充分信任的上司。“娃娃”信任我,从刚进入公司就如此。在熟悉产品阶段我提出的问题和建议他都认真的听了,而且给我时间让我按照自己的想法作出修改。后来我也喜欢把新想法跟他说,当我们带着创意去和老板谈的时候他是我坚强的后盾。
这一年下来我在纯技术上的提高并不多,我们所面向的客户并不要求尖端的技术。经验主要体现在理解需求上面,如果说前两年我还需要领导把需求说得很明白,还会为"马后炮"而耿耿于怀。那么今年应该算是个分水岭。现在的我不需要领导花很久时间来讲需求,也不用每一步都需要认可再做接下来的工作。总的来说就是技术和业务之间的距离越来越近,而且还可以想到客户将来会需要什么(我曾经的领导应该很欣慰,他培养的人终于达到他说的big picture了)。
也许这也是我一年来少来csdn的缘故吧,不会有什么特别没有头绪的问题需要上来发问。可以把所掌握的技术灵活的运用到实践中去。
其实把需求抽象建模还是很麻烦的,很多时候在最初阶段客户自己都不知道自己要的是什么样的方案。对于需求很明确的客户实在太少了。这个不断修改的阶段耗时耗力,关键是还不一定能争取下来拿到单。我们单位有个很好的传统,当争取到新的客户后。售前和销售都会对我们开发人员作一次演讲,分析客户特点(一般客户都比较有名没啥说的)以及我们的解决方案中哪些部分是最打动客户的,也就是"利润"点。每一次这样的会议都会伴随着很久的讨论余波,开发者在讨论的时候又会产生新的想法,我是100%享受这样的流程。
实在要说技术点上面,第一个接手的工程是提速,大量数据快速插入数据库(我找到的.net的bulk,vb6的string class+union all ),开始大面积接触sql server __ ,写很多存储过程,.net写一些winform的东西,不是特别高深。但是很好的对于结构的锻炼vb6跟不同版本的cad及其衍生物结合(这个一直在做,不过越做越高深),最后就是我每年都会写的"细节与规范",现在身边立着几个榜样,我需要时时刻刻鞭策自己。
工作上还不那么顺畅的是"协调"。数据库和代码的协调,开发时间的协调,开发和安装的协调,版本之间升级的协调。有些是不得已而为之,但有些是可以通过方法避免的。而且不同的人有不同的做事方法,这个上面值得我学习的还很多。
关于加班,今年是我加班时间最长的。会有连续几星期都在10点左右下班的时候,不过还是很快乐。因为是自己想把东西做好做精。当然还有的时候是友情加班,陪兄弟们共患难。
我代表开发部参加了单位的活动组织小组。这个小组就是组织大家每个季度公款fb一次,还有年会。参加这个挺有意思的,多些机会认识不同部门的同事。另一方面也让我开朗健谈些,这些年越来越安静了,不知道算不算好事。
还有一点今年深刻的体会就是虽然我是做技术的,大部分时间跟机器打交道。但是我还是作为一名员工在部门和公司中的。自己的个性或者对事物的看法也影响着身边的同事。今年中国发生了好多事情,有愤怒,有自豪,有震惊,有悲哀。记得某大使说过我们需要中西方更多的沟通,从来没有哪一年让我觉得有如此重的责任感与使命感。
圣火传递的时候我把搜集来的资料群发,地震的时候募集捐款,奥运的时候穿着爱国t。今年给了我很多话题,自己也更有意识的把一些信息传递给身边的同事。
最后说生活上:
满意的事: 完成了又一个旅行梦想,
自豪的'事: 参与组织了爱国学生运动,这辈子没操过那么多的心。10天没写一行代码,还请假(幸亏那阵子不忙),
期待的事情: 年底回家,
低头做事,抬头做人。
2022程序员年终总结与展望4
我来公司已经近_个月了,在这_个月中,我随着对公司的逐步了解,更加坚定了我进公司前面试时候“找个能够长期发展的公司”的想法,我对公司的前景充满希望;通过两个月与同事的接触,我对他们的技术水平很佩服,因而对物流软件的前景也充满信心。
在此期间,我认真积极的工作,并且在同事的积极主动而又诚恳的帮助下完成了领导给我分配的工作。
1、熟悉了物流软件的业务流程,在将来的工作中我将更加明细的知道各个业务的具体功能和实现方法,更好的为公司服务。
2、完成了计费部分的需求分析,概要设计、数据库设计
3、完成了机器登录(主要功能:搜索整个局域网,用比较高效的方法能够快速的获取每台电脑的主机名、IP地址、网卡物理地址MAC,并且把他们应用的系统登录w_login的校验中去)、商品信息(主要功能:商品信息查看、一次录入、二次录入、修改、匹配、维护、历史商品信息查看、商品信息匹配列设置)、静态数据维护(主要功能:基础数据查看、录入、维护、设计全局函数,方便在数据窗口中把基础数据作为下拉子数据窗口调用)、版本查询的新增开发;跟罗宇宙翔一起完成了系统日志(修改日志窗口、修改保存日志的全局函数,从而把以前的6个类似函数统一起来,并且把这个函数应用到部分窗口)。 使自己对物流业务、文档书写、ORACLE存储过程、图形化界面、动态菜单有了进一步的认识。虽然整个项目组的人都在努力工作,但是项目进度比预期的推迟了一段时间,现在时间紧迫,我会更加努力工作,希望能尽自己能力帮助物流组按时完成项目
1、尽早完成领导交给我的工作,完成之后主动向领导要工作
2、写好说明便于阅读维护、写好工作日志便于领导掌握我的工作进度
3、抽空看同事的设计档和程序,一方面提高自己,另一方面向同事提供建议,从而增强整个系统的质量。请领导和同事考核我、关怀我、团结我、激励我,共同为高效、高质量完成这个项目而努力。
2022程序员年终总结与展望5
时间一晃而过,转眼间到公司已经半年多了。这是我人生中弥足珍贵的一段经历。在这段时间里各级领导在工作上给予了我极大的帮助,在生活上给予了我极大的关心,让我充分感受到了领导们“海纳百川”的胸襟,感受到了大发人“不经历风雨,怎能见彩虹”的豪气。在对公司各级领导肃然起敬的同时,也为我有机会成为公司的一份子而自豪。 在这半年多的时间里,在领导和同事们的悉心关怀和指导下,通过自身的努力,各方面均取得了一定的进步,现将我的工作情况作如下汇报。
一、通过培训学习和日常工作积累使我对____公司有了一定的新的认识。
在5月中旬我来到了____ 公司信息科技有限公司参加招聘,经过几轮面试和笔试,终于能够有幸加入了____ 公司这个大家庭,在我进入公司时我拿到的第一份资料就是公司介绍和新员工入职说明,当时只是觉得公司很正规,很强大。在和部门领导以及项目经理交流后,感觉公司很亲切,很温馨。对其它方面就不太知道了,特别是对视频监控几乎一无所知。通过三个月的亲身体会,对智能交通和公司有了一定了解。公司的理念在平时的工作
以及项目开发时体现的淋漓尽致,本人对公司的理念非常认同。公司发展不忘回报社会的壮举,令人敬佩。公司以人为本、尊重人才的思想在实际工作中贯彻,这是____ 公司能发展壮大的重要原因。在十年左右的时间实现跨越发展的确很不容易,在智能交通行业深入发展是____ 公司的雄心壮志,也是凝聚人才的核心动力。现在公司在视频监控以及安防行业起到了举足轻重的地位,今后还将更加辉煌。
二、遵守各项 规章制度 ,认真工作,使自己素养不断得到提高。
爱岗敬业 的职业道德素质是每一项工作顺利开展并最终取得成功的保障。在这半年多的时间里,我能遵守公司的各项规章制度,兢兢业业做好本职业工作,半年来从未迟到早退,用满腔热情积极、认真地完成好每一项任务,认真履行 岗位职责 ,平时生活中团结同事、不断提升自己的团队合作精神。一本《细节决定成败》让我豪情万丈,一种积极豁达的心态、一种良好的习惯、一份计划并按时完成竟是如此重要,并最终决定一个的人成败。这本书让
我对自己的人生有了进一步的认识,渴望有所突破的我,将会在以后的工作和生活中时时提醒自己,以便自己以后的人生道路越走越精彩。
三、认真学习岗位职能,工作能力得到了一定的提高。
根据目前工作分工,我的主要工作任务是
(1)参与公司软件项目的开发与测试;
(2)负责安徽省路警联合指挥中心软件系统的维护工作。通过完成上述工作,使我认识到一个称职的开发人员应当具有良好的语言表达能力、扎实的技术能力、较强的逻辑处理能力、灵活的应变问题能力、有效的对外联系能力。在参与项目开发的过程中,发现很多看似简单的工作,其实里面还有很多技巧。
四、不足和需改进方面。
虽然加入公司这个大家庭已经半年有余,对开发技术掌握的还不是很深,对发现问题的处理还不是很全面,对分工的工作还没有形成系统的计划。随着对公司和工作的进一步熟悉,我也希望能够在今后的工作中更加迅速的提升自己的业务能力以及技术能力,我觉得多做一些工作更能体现自己的人生价值。“业精于勤而荒于嬉”,在以后的工作中我要不断学习业务知识,通过多看、多问、多学、多练来不断的提高自己的各项业务技能。学无止境,时代的发展瞬息万变,各种学科知识日新月异。我将坚持不懈地努力学习各种知识,并用于指导实践。在今后工作中,要努力做好开发人员的本职工作,把自己的工作创造性做好做扎实,为项目的开发以及公司的发展贡献自己的力量。
五、 工作计划 暂时做出以下几点规划:
1、要提高工作的主动性,做事干脆果断,不拖泥带水;
2、工作要注重实效、注重结果,一切工作围绕着目标的完成;
3、要提高大局观,是否能让其他人的工作更顺畅作为衡量工作的标尺;
4、把握一切机会提高专业能力,加强平时知识总结工作;
5、精细化工作方式的思考和实践。
6、虚心请教比我做的优秀的其他同事,向他们学习技术或经验。其实作为一个新员工,所有的地方都是需要学习的,多听、多看、多想、多做、多沟通,向每一个员工学习他们身上的优秀工作习惯,丰富的专业技能,配合着实际工作不断的进步,不论在什么环境下,我都相信这两点:一是三人行必有我师,二是天道酬勤。 在参加工作的这短短的一个半月中,我深刻的体会到,把自己所有的精力都投入进去,技术工作都不可能做到完美程度,毕竟技术工作太繁杂,项目多而人手少,但多付出一些,工作就会优化一些,这就需要认认真真沉下心去做事情,就是公司所提倡的企业精神:职业做事,诚信待人
2022程序员年终总结与展望相关 文章 :
★ 程序员2022个人工作总结安排10篇
★ 程序员个人年终工作总结10篇
★ 2022程序员年终总结个人
★ 2021程序员年终工作总结范文10篇
★ 2022程序员年终工作总结
★ 2022年企业软件销售工作总结5篇
★ 程序员试用期工作总结2022
★ 2022年程序员个人转正申请书
★ 个人年终工作总结(个人通用)50篇
★ 年终总结模板大全【10篇】
4. 如何理解Linus Torvalds的“什么才是优秀程序员”的话
Linux的创始人Torvalds在一次演讲中有一段涉及“什么才是优秀程序员”的话:
“烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。”
这句话听起来很直白,但未必所有人都能理解其内在的涵义。在国外知名的问答网站stackexchange上有人对这句话提出了自己的困惑:
■ 对这句话应该如何理解?
■ 如何学习和应用其中的道理?
能问出这样的问题需要勇气,提问的人自己也自嘲的说:我不理解这句话也许不是一个好的征兆。但同一句经典言论,100个阅读会得到100种不同的领悟,正像stackexchange网站上各式各样不同的回答一样。下面我们来看看最被认可的一种理解吧。
如果看一下Torvalds在此句话之前说的话,可能会对我们理解它有帮助:
git的设计其实非常的简单,它的数据结构很稳定,并且有丰富的文档描述。事实上,我非常的赞同应该围绕我们的数据结构来设计代码,而不是依据其它的,我认为这也是git之所以成功的原因之一[...]依我的观点,好程序员和烂程序员之间的差别就在于他们认为是代码更重要还是数据结构更重要。
他说的意思是,好的数据结构设计能使代码更容易设计和维护,而再好的代码也不能弥补糟糕的数据结构带来的危害。
如果你不理解他举的git的例子,我再解释一下,很多的版本控制软件都会有规律的修改它们的数据格式来支持增加的新特征。当你升级软件来获得新功能时,你通常需要一些工具来转换到相应的数据库格式。
举个例子,当分布式版本控制系统刚刚开始流行时,很多人不知道,为什么相对那些集中式的版本控制软件,分布式模式下的代码合并会如此的干净整洁。答案无它,分布式的数据结构更适合这样的任务。我相信集中式的合并算法也在快速的改进,但它需要很长的时间才能赶上,因为老的数据结构限制了他们使用的某些算法,而新的数据结构破坏了很多现有的代码。
相比较而言,git里的新特征在不断涌现,但它底层的数据结构几乎没有什么变化。先考虑数据结构,你的代码会自然的整洁起来。