此作业的要求参见 https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101
1. 建博客
在 cnblogs.com (博客园)建账号
博客地址:https://www.cnblogs.com/zwqhh/.html
2. 博客作业
(1)回想一下你曾经对计算机专业的畅想。当初你是如何做出选择计算机专业的决定的?
你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗?(注:不可以回答 "不是","是"。请把这当成以后工作时面试题,需要回答足够长度,提供足够信息,让对方了解你。比如,给出为什么。)
2014年在进行高考志愿填报时,我选择的学习方向是经济类,但由于分数的原因被调剂到网络工程专业,从此走上了学习计算机的道路。在没有正式学习计算机专业的时候,我心中所想象的计算机专业是通过学习我可以轻松的入侵各种系统。但是在正式学习过计算机专业的课程后,我意识到要想达到心中所希望的水平要付出巨大的努力。在本科入学后的新生大会上,系主任鼓励同学们在对网络工程专业进行初步了解后,根据个人喜好自主选择未来从事软件或硬件方向的工作。本科期间所学习的课程我十分喜欢,因为大一同时学习软件与硬件两个方向的课程,可以让我们在比较中选择自己未来工作所想从事的方向。所以在我发现编程对于我来说十分复杂的时候,我选择将本科的学习的重心放到硬件的学习上。计算机是我所喜欢的领域,因为计算机技术的出现让我们的生活发生了翻天覆地的变化。例如12306软件的出现极大的缩短了购票时间,方便了人们的出行。但计算机领域不是我所擅长的领域,尤其是在软件工程方面我还有很大的欠缺需要加倍努力。
(2)考取研究生,对照前人们走过的路和描述未来发展,现在的你自我感觉你已经具备的专业知识、技能、能力有哪些?离成为一个合格的计算机学生,在专业知识、技能、能力上还差距哪些?
因为在本科期间决定考研,所以我掌握了数据结构、计算机网络、计算机组成原理、数据库等课程,并且可以进行简单的网络路由搭建。在学习过的众多科目中,数据库方面的知识掌握的最为全面。数学方面也学习了线性代数、概率论等知识,具有一定的数学基础。
但距离成为一名合格的计算机学生还有很长的路要走。首先,在继续学习硬件方面的同时还要加强软件相关知识的学习。例如,软件系统开发、软件测试、软件维护。只有真正的学会编程技术并投入实际的软件编程中才能成为一名合格的计算机学生。同时,想要成为一名合格的计算机学生还需要重视英语的学习。因为学好英语不仅能学习国外的先进计算机知识,而且也有利于与其他计算机从业人员进行技术交流。在学习计算机相关技能的同时,我也要重视培养团队协作能力。具有良好的团队协作能力有利于在团队项目开发的过程中更好的与团队其他成员进行配合,顺利完成项目开发。
(3)每天都是一个人生选择的十字路口,学术研究、工程项目、社会实践 (?) ,不同的选择有不同的努力方向。对照以上你阅读的前人们的经历,你的选择是什么?在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?针对你的选择,你给自己的本学期的规划是什么?
我选择工程项目作为未来工作的方向,因为只有经过一个个项目的练习才能够真正的将知识融会贯通。
相较于其他同学我的优势在于我有很强的求知欲。我坚信只有对知识充满好奇心才会有学习的兴趣,并且让自己有迎难而上、克服学习中各种困难的动力。而且,我学过许多计算机专业基础课程,在从事工程项目开发时这些知识将会帮助我更顺利的完成工作。
我的劣势在于我虽然拥有一定的计算机专业基础但对算法缺乏研究,没有进行过项目设计,在进行项目设计时如果出现问题十分容易出现手足无措的情况。并且,由于我英语知识的薄弱导致我很难学习到最前沿的计算机技术。
在本学期我的规划是研读3遍邹欣老师的《构建之法》后参与一次项目设计,因为只有这样才能让书中的理论与实际操作相结合,并且在课余时间通过书籍等方式学习Java编程语言。当然,这学期我最主要的目标是顺利通过期末考试。
(4)你对这门课的期待是什么?你打算平均每周拿出多少个小时用在这门课上?
我在学习过老师的第一节课后,对于这门课程有了初步的了解。希望通过这门课程的学习,我可以对软件构建、软件测试、维护等领域有深入的学习,帮助我进行软件项目的开发,让我找到学习软件工程专业的兴趣。
如果想要完成老师所布置的各种作业,在保质保量的前提下我预计需要平均每周不少于10个小时进行这门课的学习,只有这样才能真正学习好这门课程。
3. 博客作业
通读《构建之法》,发布随笔1篇,要求列出5个问题,可以是读后不理解的,或者读后反对的。要有观点、有证据或分析。字数不是直接的考核标准,但是要求长到能把观点表述清楚。
在读过一遍《构建之法》这本书后,我有颇多的感触。感觉邹欣老师的这本书颠覆来我对于软件工程这门学科的认识的同时在一些地方也产生了疑惑。
问题一:书中提出在进行软件工程作业设计的过程中遵循OCP的代价是贵重的,这是什么意思?
在《构建之法》第三版第2.4节(第38页)中提出,开放—封闭原则是软件设计中一个重要的原则,并且说遵循OCP原则的代价很昂贵。根据书中的介绍可以知道,OCP原则具有允许扩展、不允许修改两个特点。我的理解是在想要进行软件扩展时,不能改动已有代码只能通过增加代码的方式进行。而要保证不改动代码,在设计这个软件时则需要花费更多的时间用于设计。并且,OCP原则如果想要在不改变代码基础上进行修改就需要用到抽象,而抽象也加大了程序运行时间,但我不知道我这样的理解是否正确。
问题二:书中在第三章软件工程师的成长中提出作为一个成熟的团队成员必须理性地工作,不能被情感驱动?(书中第47页)
首先,我认为情感驱动是必不可少的,一位没有灵感和激情的团队成员是无法设计出一个好的软件。在书中第5.3.5节(第105页)中,作者讲到第一版iPhone和iPad都是MBP(最强最美品牌)。如果当时的团队人员在设计iPhone和iPad时并没有灵感和激情,而是非常理性的按照一次又一次的模板进行设计,iPhone和iPad也不会成为MBP。由此可见,感情驱动对于软件工程师也十分重要。
问题三:new与delete运算符是什么?它们在使用时一定要成对使用吗?
书中第72页介绍了new、delete,new与delete都是用于对内存进行动态管理的运算符,用这两个运算符可以实现内存的分配与删除。new运算符在创建变量与运算后返回的都是指针。delete是调用析构函数实现删除变量的地址空间。我认为new与delete不一定要成对使用,因为如果是一个较为简单的小程序或者程序在运行一次后便退出则不需要配对使用。因为new使用结束后所分配的内存在过一段时间后系统会自动回收系统资源。但如果是复杂度较高的代码还是建议成对使用以免过度占用系统资源。但在许多书籍和网络资料中说new与delete在使用时一定要成对使用,对此我感到十分疑惑。
问题四:在软件项目开发中需要考虑哪些需求与任务之间的各种依赖关系?(书中第111页)
在书中第6.2节,作者提到在依赖关系中要注意优先级。例如在进行软件开发时,首先要根据用户的需求确定软件需求,再根据软件需求进行软件模块的设计,才可以开始进行编程。而且软件的测试、维护也一定要在软件编写结束后才能进行。除此之外,我认为还需要考虑这个软件在实际操作中是否存在对环境的依赖,如果有这种依赖在进行软件测试时要考虑用户所提供得环境设备使用时间。
问题五:书中第16章作者提出不但大众不喜欢创新,而且创新者也不喜欢创新,甚至恨创新?(书中第342页)
作者在书中讲述的几个大众所不喜爱的例子我认为有所偏面,一部分人因为创新而感到不开心是因为其他去惹不得创新影响到了他们的利益。以《王者荣耀》为例,《王者荣耀》今年一季度收约60亿,日活跃人数2000万以上。它之所以如此火爆就是因为制作团队勇于创新改变了传统手游模式,让游戏充值不再成为游戏胜负的决定性因素,于是吸引一大批玩家,成为目前最火的手游。这个例子说明了大众还是比较乐于接受创新。
4. 博客作业
很多人有不为大家所知的本事,而这个能力可以超过周围90%的人。
当看到这倒题目时,我经过仔细的思考发现我虽然动手能力极弱但却十分擅长讲述一件事情应该如何去做。例如,我在上本科的时候,我知道如何进行实验操作却无法得出实验结果,但按照我的叙述同学却可以顺利得出实验结果。这个能力不需要特别的培养,只需要多观察自己不懂的事情别人是怎么做的就可以。在观察时自己留心记下来,等有一天遇到相同的问题就可以凭借回忆叙述出来。
5. 博客作业
采访本课程往届同学(含外校和毕业生). 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队进行采访
我采访的是已经毕业一年的艾志诚学长,现在他在北京的一个互联网公司工作,针对于他开发的DIC(dealer information center)系统进行采访。
当时的项目有多少用户,给用户多少价值? 现在还有人用吗?
该系统的设计目的是管理奔驰经销商的人员信息以及一些日常的人员变动、月度报表等。该项目设计时便要求至少满足1000名用户的使用,并且现已投入使用。
这个项目能否给我们团队继续开发,源代码/文档还有么?
该项目不能进行继续开发,因为该项目签过保密协议,而且用于商业活动的所有相关资料都需保密。
项目开发有什么经验和教训?
在项目开发时首先要与用户做好需求沟通确保了解真正的需求,其次在写代码一定要条理清晰、格式规范。最后如果未来需要重复利用的代码,建议把它写成一个工具类,当再次遇到的时候就可以缩短不必要的时间浪费。
对学好软件工程有什么建议?
建议平时一定要多读专业课书籍并且学好英语,然后要多写代码只有熟练的掌握了各种代码在进行项目设计时才会得心应手。
6. 博客作业
以下统计精确到一百行。你目前的代码量是多少?你认为优秀的和一般的计算机专业学生,(根据你的理想选择以下两问中的一个)为了有资格入职软件公司/互联网公司,需要多少代码量?从事高校教学科研工作呢?你计划在本课程结束时,完成多少代码量?这些代码量分布在整个学期中,每周应完成多少代码量?
我目前的代码量为0,由于我本科时对于编程的重视程度不够,导致我没有什么代码的积累。我认为如果要以一名合格的计算机专业学生的身份入职互联网公司,需要大概8000的代码量。我计划在本门课程结束后,通过自己的努力学习代码量达到1000行左右。将这些代码量分布在整个学期,每周要完成100行左右,但每周具体代码量会随着学习的难度不同有所波动。
7. 阅读材料,写评论
(1)你为何要来上课并且认真参与
作者开篇便表达了自己的观点即大学生上课就是要认真听讲。
第一,作者提到认真听讲是一种能力,对此我表示十分赞同。认真听讲的能力需要一点点积累才能够做到。就像我刚刚上小学的时候,每堂课的注意力可能只有不到10分钟,后来经过一点点的积累等到高中时可以坚持认真听完40分钟的课程。但是,自从我踏入大学后,发现认真听讲变得越来越难。因为到了大学后我变得十分懈怠,习惯了散漫的上课,也导致在面临期末考试等重大事件时无法专注的学习。
第二,由于大学生还没有步入社会,在处理事情上视野可能会比较狭隘。一些在大学时感觉毫无益处的课程往往在工作中起着非常重要的作用。而一个老师之所以能够站在讲台上为我们传授知识就说明了他身上有优点、长处值得学生学习。所以,用学生的格局来评判老师讲的课程的好坏与学校课程设置的好坏是不负责任的。而且,在大学期间学生所要做到的就是适应所发生的一切,要明白社会的规则并不能轻易的改变,大学生需要尽自己最大的努力去提升自己的能力,这样才能更好的走向社会。
第三,毫无疑问,当一个学生认认真真的听完一节课时很容易发现他所吸收的知识量远多于他自己学习相同时间所收获的知识量。而且,在学习到知识的同时也学会了老师的逻辑思想与老师所总结的经验,这也是十分宝贵的收获。
最后,作者提到如果只是知道而没有做到是没有任何用处的,这句话十分重要。因为知道与做到之间有很大的差距。就以编程为例,我们知道一道算法的解题方法与我们真正做出来一道题之间的差距很大,如果是考试时这将会决定这道题你是否得分。作者从一个又一个的方面讲述了认真学习的重要性,并告诫我们要做到认真听讲,所以我决定从现在开始认真听好每一个老师所讲的每一堂课,让自己养成专心听讲的好习惯。
(2) 你在大学中体验到了哪种师生关系
在本篇文章的开始,作者提出教学的基础是师生关系,并阐述了几种较为普遍的师生关系。
在上大学以前,我所经历师生关系多为保姆/幼儿。那段时期,经常发生的一种现象就是老师指着黑板对学生们说:“看黑板,这道题考试一定会考,都记下来。”并且,老师还要每天事无巨细的操心。
但到了大学以后,师生关系发生了很大的改变,在很多时候师生关系变成了餐馆/食客。在选课前,很多的同学都会向自己的学长、学姐询问:某课程的某老师平时上课喜欢点名吗,会留作业吗,期末好过吗?这也就导致了那些用餐氛围轻松的“餐馆”更吸引学生的光临。然而,这也就会导致许多老师为了吸引学生选课只能一次又一次的降低课堂的标准,让那些真心想在课堂上有所收获的同学无法获得足够它们想学习的知识。
在大学中,老师和学生心照不宣一起应付的情况我觉得应该杜绝。举一个例子,我在上本科的一门专业课的第一节课时,老师就对我们说,这节课喜欢的同学就可以来上课,不喜欢的同学在我通知点名的时候来上课就好。于是,有一次我和室友去上那门课程时发现课堂上算老师一共四个人,下课后问另一个来上课的同学为什么来上课时,结果发现他也是今天心血来潮想看看这节课会有几个人来。由于,老师和我们一起应付,所以到课程的后半段连老师通知点名也不会有几个同学去上课。
我认为最适合的师生关系是健身教练/健身学员的关系,因为可以做到及时的反馈。在教学负担上,我觉得还是要因人而异。作者提出把压力转化为令人心情愉快的动力,但这件事实行起来并不容易。一个承受压力弱的人,在承受过多的压力后有可能直接崩溃,产生无法挽回的结果。而且,负担太重的课程很容易导致学生的离开。在本科时,有一门选修课由于老师要求每节课写作业并且可能有随堂小考导致第二节上课时人少了很多,因为很多人选择重新换一个老师。但我觉得大学生还是应该给自己一点压力,适当的压力有助于更好的面对职场生活。