回想开学初对于软件工程这门课的期望,总结本课程对你带来的提升:
开学期望:
其实在开学的时候,对待这门课的态度大概就是:想通过这门课的学习了解一下如何去真正的去做一个软件或者一个网站等,了解这其中的每一步骤具体的工作是什么,其实对待这门课还是充满着好奇心。
课程带来的提升:
1.学习和使用的新软件:
在学习用例图时学习了Enterprise Architect;
在搭建网页原型时学习了AxureRP和MockingBot(墨刀)两个软件,但是墨刀没怎么使用,因为当时主要使用的是AxureRP这个软件;
在实际的搭建网站时学习了HBuilder这个软件。
2.学习和使用的工具:
HBuilder和Notepad(两个都软件,不过也是我在编写网站时所用的工具);
其实如果算上学习工具,那么在搭建网站时还用到了:菜鸟教程和慕课网。
3.学习和掌握的新语言、新平台:
在搭建网页的时候所用到的语言主要就是:html、css和JavaScript;
MFC(结对编程所用到的编程语言)等。
4.完成的代码量:
整个软件工程课程中的代码完成量大约1000行左右。
5.学习和掌握的新方法:
软件从构建到交付的总体的规划、与他人合作编程的方法和软件测试的方法等。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总结与展望
1.经验总结:
首先,在软件开发过程之前,必须首先构思最终成品的具体轮廓和大致的功能,并且对于这些功能模块进行工作量的合适分配,使得队伍中的每个人都了解自己该干什么?
在开发过程中,团队成员一定要互相交流,此时组长的任务尤其的重要,需要不断的检查团队中其他成员的工程进度,而且对于与团队最终成品有冲突的部分要提醒组员给予修改,这个过程会很漫长,需要组长有足够的耐心;
对于作品成型阶段,要分配组员进行合理的debug,以使得最终的成品趋于完美。(总的来说,团队人员之间的相互交流尤其的重要的!)
2.建议和告知:
没有什么建议,因为我本身就并不优秀,不敢轻易的给予他们适当的建议;但是可以告知他们一些事。
首先,要好好学些东西(趁着还有空闲的时间),可以在网上找些提供学习的网站,比如:菜鸟教程、慕课网、北风网、极客学院等,多了解一些;
其次,你不需要每门课都十分优秀,当然都很优秀就更好了,但是你可以做到对于一门语言精通,这就足够了!因为它能够让你懂得去学习,如何去学习,学习其他的语言就会事半功倍;
第三,不懂就问,不要将疑问都囤积起来,最后,不懂的东西越来越多,只会让你对于学习失去信心(个人感觉,软件工程这门课,告诉我们的最多的还是:要学会自己去学习)。还有一点,多动手,多实践,有些问题并不是想像中的那样,自己动手才知道其中的难点,才能知道自己能力不足!
3.团队协作的经验:
对于团队两大难题就是:交流和能力。交流就是让你的见解和想法让他人明白,他人的见解你也可以知晓,大家在工程的搭建上做到“互通有无”,交流真的很重要、很重要、很重要 !其次,对于一个团队中总是会有能力强和能力弱的组员,所以对于工作的分配一定要慎重!必须考虑个人能力问题。
4.个性发挥
其实呢,本人也是个呆呆的人,所有让我来个个性发挥,着实有些困难!最后来句话:其实意思你们都懂的!
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
个人总结的补充
请大家回顾我们软件工程第一次作业,通过本学期的学习,对第一次作业中的5个问题重新回答。
-
First, 突发奇想的问题——如果现在有一个团队,有5人构成,但是他们的编程水平各不相同,那么这个团队的“Boss”如何安排工作,以使得团队工作的正常运行?达到人员的各尽其用,各司其职?(个人感觉这是很多项目开发团队首要解决的事,对一个项目的领头人挑战很大!)。
该题和下面的第二题,有幸得到邹欣老师的解答,所以对这题的回答也就是对于邹欣老师的回答的理解和拓展。对于这一题来说,我认为一个团队确实存在能力程度不同的队员,但是对于一个正常的团队,这种差异可能是必要的,比如:首先组长对成员进行分配任务,此时能力强的组员就会得到相应难度的任务,对于能力稍弱的组员,他们的任务可能比较容易,此时他们完成自己的任务后,就能配合其他的人的工作,并且可以进行汇总工作进程,使得组长对于团队工程的进度有个大致的了解,以方便之后的任务分配,所有大家的工作量就能得到近乎均匀的分配,反而有利于团队工作的进行,反观能力都强的团队,每个人都想做核心的工作,此时反而没人做工作的总结,不利于整体工作的进行。而且,能力不一的团队,每个人都比较虚心学习,向他人请教,有助于相互的交流。
-
Second,学习上的问题——前段时间一直在学习用例图,类图和顺序图等的相关知识,但是最深的体会是:一千读者心中有一千个哈姆雷特。对于一个系统,其用例图每个人完全有自己的独特想法,所以画出来的自然不同,那么现在有一个问题,对于一个软件的构建来说,其初始用例图如何绘制?人数?人群?(学习中遇到的问题,觉得很有必要解决!)。
对于这个问题,确实邹老师的解答比较合理。在之后的学习过程中,又遇到了几次要求画用例图的问题,但是感觉无论画怎样的用例图,其中的核心元素大家都大致一样,从每个人的用例图中都能看到这样的元素,比如:一个学生信息管理系统,大家的用例图中都会包含:学生、老师、教务系统、学生的成绩(学生的属性)等的元素。即使相互的连接并不完全一样,但是主要的关系都会进行考虑,总的用例图结构和表达的意思都差不多。确实是一种抽象的过程,大家都考虑的元素和关系大概都是那些的,所以,最终通过抽象而总结得到的用例图也就是代表了所有人的想法了。
-
Third,书上的问题——P30页中有一段话:“在运行效能分析前,阿超让大家预计耗时最多的是什么函数,或者哪些语句。”看到这里我就有点疑问了:代码的实现不是越简洁越好吗?需要考虑复杂的情况吗?有何意义?
这个问题,感觉自己貌似有点钻牛角尖了,其实,可能我们写一段程序的时候,考虑的角度都不尽相同,但是此时最需要做的工作就是相互交流意见,采取自己在此时认为的最简算法,这样能够带来很多的好处:其一,肯定能够降低工程的代码量,达到程序的效能优化;其二,通过交流就能学习到他人的编程思想,顺便也能简化代码量,而且同时增加了编程的经验,下次遇到同样的问题,可以直接采用“改良版”的代码;其三,相互交流,必然带来的益处就是相互之间的关系没有那么的僵硬,相互学习对方的优点,团队的气氛也会特别的融洽等益处。其实阿超,可能本来就是从这些角度而言提出了这个要求的,所以我这个问题没有一点深度,比较惭愧。
-
Fourth,书上的问题——书中第2章第3小节:个人开发流程,一节中主要谈论的是PSP(Personal Software Process),其效能是衡量一个软件工程师的能力成熟程度,那么本人就很疑惑了,软件工程师在“需求分析”和“测试”两方面花了更多的时间,而大四学生在“具体代码”上花费的时间多一些,这个就能表明软件工程师的能力成熟程度高于大四学生吗?判断的依据是什么?而且后面也有提及:PSP依赖于数据,并且有时即使工程师的实现需求的效率很高,但是顾客觉得很不满意。那么这种情况下PSP模型的意义又在何处呢?
其实这个问题,就如经常所说的那样,“仅作为参考”的意思是一样的,模型只是用来了解程序员大致的水准,根本就不能作为衡量一个程序言优劣的唯一的确定准则,而且还有一个明显的问题就是,这个模型的适用范围的问题(当时,考虑比较片面,所以连范围都没有考虑,确实是极大的疏忽),这个模型既然存在,那么肯定就有其合理性,在同一个群体中,明显这个模型具有其合理性,可以衡量群体中每个人的能力的具体水平,两个不同的群体本来的基于点就不同,何来的比较一说。所以这个问题还是很“呆萌”的问题,现在看来当时提问题的时候,确实缺乏考虑很多的条件。
-
Fifth,书上的问题——在书中第3章第3小节提到了一个概念“精通”,三个层次的问题:低层次、中间层次和高层次。我的问题是:“精通”如何才能达到?
这个问题,其实“精通”于我们而言,并不是个具体的词,而是一种暂时的可能是代表我们技术水平的象征词,我们都知道“术业有专攻”,对于其他的行业顶尖人才,我们都可以用“精通”这个词来形容他们的能力,但是学习从来没有止境,尤其对于IT行业来说,技术的革故鼎新本来就是一件极其平常的事,所以“精通”只是相对而言的,因为极少的人能做到完全的掌握一门技术,即使掌握了,也需要时刻关注技术之中的变化不断更新自己的知识。由此而言,“精通”只是对于群体中一部分拥有远超其他人能力水平的极少数人而言的,我们肯定他们的技术,但是他们依旧还有很多知识要去学习和巩固。对于现在的我们而言,觉得最重要的目标还是:先入门,其他的并不是我们这个阶段所要考虑的事(这些话略显消极,其实实践中学习才是最快的方法,但是入门难,坚持不懈的练习更难,即使这样,送一句话与诸君共勉——事在人为!)。