第一次作业
第一次阅读和准备作业
这个作业属于哪个课程
https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1
这个作业要求在哪里
https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2713
我在这个课程的目标是
深入学习软件工程的原理与开发过程并从中积累经验找寻自身的不足
这个作业在哪个具体方面帮助我实现目标
为我提供了能深入理解软件工程的平台与机会
一.建立博客并介绍自己
博客地址:https://www.cnblogs.com/Ysml/
自我介绍:我是西南石油大学软件工程17级的学生刘琪,是大千世界中微小而又平凡的一员。但每个平凡人的背后都有属于自己的闪光点与骄傲。我喜欢阅读,每个月都会去购买纸质书,然后找个安安静静的地方,静下心来去细细品味,去感受作者所向我们表达的感情与处世的态度。其次我也像他们一样,向往自由,不拘于约束。当然,我也喜欢电影与音乐,喜欢它们给我带来的轻松与愉悦。但是在我自己看来,我自己最大的闪光点却是对世事无常而我却能泰然处之的随和心态。
二.阅读与思考
阅读以上材料,并回答下面几个问题:
(1)回想一下你初入大学时对软件工程专业的畅想
当初你是如何做出选择软件工程专业的决定的?
当初选择软件工程专业是根据我自己的兴趣爱好而决定的,当初我是对计算机的是十分的感兴趣,想要编写出属于自己的小程序,因此选择了软件工程专业。
你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?
我认为过去两年接触到的课程基本上满足了我对软件工程的期待。首先,接触到的课程为我打开了软件工程的大门,使我对其有了一个初步的了解。其次,让我掌握了一些基础的编写能力,能够自我编写一些小程序。让我的综合能力有了一个提高。
你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?
在目前看来,说个实话,我觉得软件工程不是我喜欢的领域,不知道为什么我会时不时对它产生一种抵抗的心理,但是有时候解决了难题,带来的喜悦却是其他无法相比的。可是,它的一部分却是我擅长的领域,而另外的几部分却不是我所擅长的。
将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
将来我可能不会从事软件开发的相关工作。因为,我想从事的工作是电子科技技术与软件工程结合。如果是单单的软件开发,我可能会忍受不了关在房间一直敲代码的无聊。
(2)即将大三的你,对照前人们走过的路和描述未来发展,现在的你
自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?
自我感觉我所具备的专业知识、技能和能力只是粗浅的一部分,比如Java、 C、C#、Mysql并且对Python有了初步的了解,刚刚达到学校所要求的标准吧。已写过的代码没有计算过,但是应该还是蛮多的。
离成为一个合格的软件工程专业本科毕业生,在专业知识、技能、能力上还差距哪些?
我认为我在专业知识还需要更加深入的学习,需要将各种知识融汇贯通,更加透彻的理解。在技能上,需要有所提升,缺乏练习。在能力上,缺乏社会实践经验,缺乏个人自主培养。
(3)大三是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
对照以上你阅读的前人们的经历,你的选择是什么?
我的选择考研。学海无涯,学无止境,并且现在的大学生越来越趋向于考研,在我看来,通过考研可以让自己审视到自己到底在这大学学到了什么,然后将自己所学的东西有了一个总结与综合。并且我认为考上研后,对找工作会更加有帮助,毕竟社会的现实就是物竞天择,适者生存。当大学生和研究生一起去竞争一个岗位时,我想研究生更有优势吧。
在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
通过考研,我能够深入学习知识,相比其他同学知识储备更广,提高了在将来步入社会的竞争力。
劣势:我认为相比其他同学,我们的社会经验是空白的,无实战经验。
针对你的选择,你给自己的大三设定的规划安排是什么?
我大三的规划是:加深知识储备,参加各类比赛,并且增加社会经验。还要为考研做准备。
一个优秀的回答模板如下
博客D[1]的作者认为“企业要的应届毕业生就是一张白纸,这些白纸吸墨能力的高低决定你能否找到好的工作,而吸墨能力高则主要是基本功扎实、自学能力强的体现,并非我一直以为的丰富的‘实习经验’。”,我对此有一个问题:实习经验对本科生是否重要?
对于这个问题:首先,我同意作者强调的“基本功扎实、自学能力强”。同时,我也经过学长了解到部分公司,如依图科技的CEO也认为:“我不需要你有什么项目经验,本科生的经验是相当有限的”。但是,大多数企业招聘时都会强调“有过xx开发经历者优先”。另外,从本科生个人发展的角度考虑:博客K[2]的作者认为“在大学的时候尽量多地进入公司参与实际工作,一方面积累工作经验,另一方面,提前认识工作和自己,以便毕业时更准确地把握自己的方向。”
所以,实习经验确实是很有用的,不管是对于应聘还是个人的发展。但是企业招聘看重的真的是“实习经验”吗?
博客M[3]的作者就在博客中提到了他曾经完成的大小项目,并打趣地说他能进微软是因为他把这些经历写进了简历。所以综合上述观点,我认为,企业在面试时看重的并不是全实习经验,而是实践能力,实践能力自然也就包括了一开始提到的“自学能力强”等。
但是我还是有疑问:“完成一个类C文法的编译器”这样的作业的含金量有多少呢?
[1] https://www.cnblogs.com/xiaozhi_5638/p/4485805.html
[2] http://blog.csdn.net/haoel/article/details/1688104
[3] https://www.cnblogs.com/geniusvczh/archive/2011/12/16/2290808.html
三.提有质量的问题
快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。注明是哪一章哪一节。要有观点、有证据或分析。字数不是直接的考核标准,但是要求篇幅长到能把观点表述清楚。
(如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html,以及在互联网时代如何提问题。 还有这些要点:
在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文。
列出一些事例或资料,支持你的提问 。
说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
一个模板可以是这样:
我看了这一段文字(引用文字),有这个问题(提出问题)。我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。
【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。
d. 大学生应该能写出自己的思考, 而不是摘抄书本内容。
e. 提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。)
问题一
来源;《软件工程构建之法》4.4.4(p73) 为什么非得做代码复审不可,难道是认为开发人员没有能力写出代码?回答是:代码复审中发现的问题,绝大多数都是可以由开发者独立发现。
我的问题:竟然代码复审发现的问题,很多都是可以由开发者独立发现,那么为什么不让开发员自己去测试寻找,还要去找复审者,这样做岂不是加大了开发的成本吗?并且代码复审者对同一代码的理解不一样,难道不会错上加错吗?
我的思考:不管多么厉害的开发者都会或多或少的犯一些错误,如果有问题的代码已经签入到产品中,再要把所有的问题找出来就会更加困难,并且越是后期发现的问题,修复的代价就会越大。代码复审可以在早期发现问题并修复问题,提高了软件开发的效率。
问题二
来源:《软件工程构建之法》5.1非团队与团队章节中主要描述了团队模式对于非团队模式的优势,并认为非团队的七八个人是“乌合之众”,各自完成任务就领钱走人,在后续的特点总结中又说道“非团队成员,每个人想搬多少就搬多少,不想干了就结算工钱走人”。
我的问题;那非团队模式在企业的软件开发过程中是不可以使用的吗?
个人思考:文中所涉及的团队与非团队概念可以提升到以企业作为个体的层次上来看,在实际的具体的企业内部团队中,使用团队开发是更加好的选择,但是非团队开发其实在现实中也是有体现的。因为非团队成员也是以利益为驱动目标的,所以从企业层次来看,是存在非团队模式的,即各取所需,同时,企业之间也是可以存在团队模式的。
问题三
来源:《软件工程构建之法》16.1.6 IT届的人士有时候会把“功能的增加“和”技术的创新“等同起来。
我的问题 :功能的增加和技术的创新为什么会被IT届的人士等同起来,二者明明是两个不同的方面吗,难道他们之间有什么联系吗?
个人思考;技术的创新是为了提高软件的质量与性能,用户能够更加方便快捷的使用软件,而用户在使用软件时往往会找自己想要而软件中却没有的功能。这就使二者有了一个桥梁,IT人士可以通过功能的增加、改进来对技术进行创新。
四.了解和调查源程序版本管理工具
问题四:
来源:《软件工程构建之法》8.3 4用户调查问卷 用户调查问卷,看啥容易,其实大有门道,还会出现一些常见的错误。比如:问题定义不准确,使用含糊不清的形容词、问题带有引导性等
我的问题:为什么一个简简单单的用户调查问卷还会经常出现问题呢,并且出问题的一方还是提供问题的一方,难度在发放调查时,不能先经过仔细思考和审查吗?
个人思考;定义不准确的问题会让用户困惑,我们也许能收集到很多答案,但仍然无法准确了解用户的想法,其次不同的用户对相同调查的理解不一样,这样就造成了对问题上理解的差异。
问题五
来源:《构建之法》15.1.6招数:砍掉功能章节中写到某模块无法在截止时间前达到预期的设计需求,那三个愿望(便宜,好,快)中只能满足两个怎么办?
我的问题:相比较砍掉功能来说,弱化功能是否是个好方法?
个人思考:
某模块无法在截止时间前达到预期的设计需求,所以才会导致出现三个愿望只能满足两个,但是是否有办法,或者说有比较明确的标准可以去弱化无法完全实现的功能需求,把弱化功能在短时间内实现,使得沉没成本得到一部分的体现。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,列举至少三个或以上的版本管理软件各有什么优缺点? (提示:搜索一下Microsoft TFS、Git、Mercurial、GitHub、Bitbucket、Trac、Bugzilla、Rational,Apple XCode)
Git
优点: 适合分布式开发,强调个体
离线工作
速度快、灵活
公共服务器压力和数据量都不会太大
缺点:资料少,学习周期相对而言比较长
不符合常规思维
代码保密性差
GitHub
优点:GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。
在GitHub页面,你可以直接开始,而不需要设置主机或者DNS。
缺点:将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
他可能不是捕捉创意过程和记录创意点子的最佳工具
Bitbucket
优点:免费支持私有的仓库,这一点无可比拟。
同时支持hg/git
从界面还是功能上,跟GitHub没什么缺点