我的2011-2012学年
这一学年总体上在和一样东西打交道,那就是软件工程(包括B/S部分)。期间穿插着许多其他重要内容的学习,如:自考的学习,时间管理的学习。此外还有与技术学习并重的英语学习。
软件工程不仅是一门学科,更是一种思想,一种用工程学的方法来解决软件制造的思想。这种思想最终浓缩为以下几部分:
【软件工程概论】 这部分主要讲了一些软件工程中的一些基础性和概括性的知识,主要有:
软件开发的生命周期:可行性分析、需求分析、软件设计(概要设计、详细设计)、编码、运行测试、维护。软件工程中的文档:软件=程序+数据结构+文档;文档是软件的重要配置项,在整个软件开发周期中起着重要的作用(交流、规范),文档的数量和质量直接决定着最终软件的质量面相对象的编程方法:面相对象的方法是相对于传统的面相过程的方法提出来的,面相对象的方法不仅指使用面相对 象的语言,而是在整个软件开发过程中都要遵守的一种思想,包括面相对象的分析、面相对象的设计、面性对象的语言实现。软件工程管理:这部分主要讲了软件工程中涉及到的一些管理事项,如:质量管理、配置项管理、开发管理。其中也 讲到了一些关于CMM(软件能力成熟度模型)的知识。
我觉得软件工程概论就是为以后的学习内容打基础,带着软件工程中的思想去学习后续的内容
【UML建模】UML建模就是用UML中的9种图来给软件开发的各个阶段建模,9种图从不同的视角来描述待开发的系统。在这9种图当中,用例图是最重要的,其它8种图都是以用例图为核心的。因为用例图描述了用户的需求,最终的软件是否合格,关键在于是否全部实现了用例图中规定的用例。其它8种图也是为了实现用例图中的用例而服务的。这九种图分别是:
用例图:描述用户的需求类图和包图:描述待开发系统的静态结构,其中包图可以描述系统的架构设计,类图描述系统内用到了哪些类,以及 类之间的关系对象图:描述系统运行的某一时刻都有哪些对象参与状态图:描述对象在其生命周期内的状态变化活动图:活动图可以用来描述某一算法,它与面向过程中的程序流程图的区别是:支持并发动作的描述组件图:描述最终的系统由哪些组件(.exe或.dll 也包括源文件)构成。部署图:用来描述系统的硬件物理分布结构时序图:通过对象之间的消息传递来完成某一用例,强调消息的时序性协作图:与时序图的功能等价,只是它强调对象之间的消息传递,而不强调消息的时序性
UML在面向对象的分析和设计中是非常实用的,基本是UML图画好了,系统的代码差不多也就有雏形了。它是在软件开发中用的最多的工具。
【C#】这部分的内容主要是为后面的《大话设计模式》做准备,因为这本书里面的源码都是用C#写的。另一方面,从C#开始,我们才真正接触到完全面相对象的语言,也开始接触.NET。从此我们知道了面向对象的三大原则:继承、封装、多态 具体是怎样用代码实现的,以前只是有一个感性的认识,而现在可以从实现的角度去认识它,记的当时我理解了多态以后,特别兴奋。 其实学了C#之后,再学其它的一些面相对象的语言将是一件非常简单的事。
【设计模式】这一部分最主要的参考资料就是《大话设计模式》这本书,这本书用三个字来形容:“碉堡了”。在这本书中,每一个设计模式都是由一个小故事引起的,真正的做到了大道至简。从此开始认识到编程是一门艺术,是一项技术活。在后面的“机房收费系统”中会用到这里讲到的一些模式,使软件的设计高内聚低耦合。
【三层架构】从“三层架构”开始我们接触到了软件架构的一些知识。这部分的学习和以前不一样了,学习这部分内容时我们的大脑中要有这样一个概念:“亲身经历比被直接告诉更重要”。我们没有现成的资料,需要我们自己去上网查,上网学习。因为这部分内容是需要自己去好好理解的,只有自己经历了这个过程,我们才能真正理解什么是三层架构,怎样去灵活运用三层架构。假如我们直接看老师给的资料,那么我们的大脑中对三层架构的概念只有:UI、BLL、DAL和Model,根本就不明白为什么要分层,怎样分层才是合理的。
这是一次重要的尝试,尝试自学的能力,尝试从鱼龙混杂的互联网中找到我们所需的知识。
【VB.NET】 这是继C#之后学的第二个.NET框架下的语言,这部分主要是掌握VB.NET的一些语法和功能,以前学过VB6.0,所以VB.NET学习来会比较容易一点。其中比较重要的一块内容是ADO.NET,理解了这部分内容,才能进行C/S的开发。 在这里,我认识到了.NET的底层运行机制:CLR(包括垃圾回收器)+BCL,这和Java的核心机制非常相似,所以二者都是跨平台的。
【用VB.NET+三层架构+设计模式重构机房收费系统】 这块分为两部分:个人版的和合作版的
在个人版的机房收费系统中,将上面所学的知识都实践了一把,包括UML建模、三层架构、设计模式、软工文档和VB.NET。这次的开发过程中学到了许多其它知识,比如:用数据库三范式建表,学会使用存储过程,用正则表达式验证用户输入。这个项目做完后,感觉自己进步了不少。
在合作版的机房收费系统中,我是组长,所以学到的知识也是很多的,包括:SVN的使用,合作版文档的编写。自己做的不是很好,但正是因为自己做的不是很好,所以才会反思,才会学到更多的知识。这次项目开发,最重要的就是要学会如何进行合作开发。
在项目验收的时候,自己又认识到了自己的很多不足之处,开始反思,开始重新认识UML图的画法和文档的重要性。验收工作让我对以前所学的知识又有了新的认识,然后付诸实践,修改自己的不足
至此,C/S部分的内容就算是告于段落了,从2012年的暑假正是进入了B/S的学习
B/S的学习和C/S的学习很不一样,B/S中包括的内容又多又杂,所以做好总结显得非常重要,而且这部分内容需要我们多思考。如果没有总结+思考,这部分的内容等于白学了,我们将会一直停留在C/S水平的阶段。
暑假主要学了三部分内容:《新闻发布系统》、《HTML》和《ASP.NET》
【新闻发布系统】 这个系统作为B/S学习的入口内容很简单,但也很重要。从这个系统开始,我们了解到了HTML、JS、AJAX等内容,明白了B/S系统开发的一般流程。这个系统让我对B/S的学习产生了很大的兴趣,正是因为这个兴趣,让我以后的学习“痛并快乐着”。 从这个系统开始,正式接触了ASP.NET
【HTML】 学习《新闻发布系统》的时候,页面的编写都用的是HTML语言,当时遇到什么标记不明白就上网查,对HTML有了一个大概的认识。 学习了《孙鑫HTML》之后,对HTML有了一个系统和详细的认识,对表单这个概念也有了一定的了解。
【ASP.NET】 这块内容主要包括《天轰穿ASP.NET》和《青鸟ASP.NET》。这两部分都是在讲述ASP.NET中的对象和控件。看完这两部分内容后对《新闻发布系统》中遇到的问题有了更深一层的认识。对B/S架构的运行机制有了更近一步的认识,感觉B/S系统比C/S系统要灵活的多,客户端只要有浏览器就可以了,除了一些浏览器脚本以外,剩下的代码都是在Web服务器上运行的。
这部分有两块知识我感觉特别重要1、数据绑定2、系统对象
数据绑定主要是通过ASP.NET数据列表控件实现的,比如:Repeater、GridView、DataList等控件。具体在代码中绑定是通过Page类的保护(Protected)方法Eval()或者是通过DataBinder类的静态方法DataBinder.Eval()实现。
系统对象主要有:Application、Server、Session、Request、Response、ViewState等,这些对象都是在Web程序运行时自动生成的,他们的作用域是不同的。而且这些对象都有点像HashTable,会使HashTable,就会使这些对象了。
英语学习是与技术学习并重的内容,暑假对英语学习的地位和方法又有了新的认识,认真读了SLA的文档,将四个阶段的具体要求抽了出来,让自己的学习更有方向。 这个暑假是我对英语学习坚持的最好的一次,除非开会等事情占用时间,基本每天都能坚持4个小时。学英语的时候为了防止自己犯困,用到了番茄学习法,这样可以保证整个学习的连续性,不至于厌烦。
暑假接近尾声的时候,米老师给我们上了几次自考的课。其实自考课学知识是一方面,更重要的是要学会学习的方法,学会时间管理,让自己的学习变得高效、无压。GTD和番茄学习法就是比较好的学习方法,另外要学会看书,练习快速阅读。
这一学年知识学的很充实也很踏实,更重要的是开始意识到学习方法和时间管理的重要性,因为要想成为精英,要想脱颖而出,就必须学会如何学习,如何总结,如何管理自己的时间,让自己的学习变得高效无压、有条不紊;要想成为精英,就要学习最新、最先进的知识,而这些知识大多都是以英文出现的,所以英语学习显得格外重要;想成为精英就要严格要求自己,不要把自己当普通老百姓对待。