《构建之法》第一次作业——阅读与准备工作
||||||||||
|:--|:--|
|这个作业属于哪个课程|课程链接|
|这个作业要求在哪里|作业要求|
|我在这个课程的目标是|学习现代软件工程思想,体验软件开发的过程,以及开发过程中文档的撰写|
一、建立博客并介绍自己
我是来自四川攀枝花市的沈墨,与以阳光充沛水果香甜的家乡相比,我是一个有些自卑,信心不足的人,但我想我还是有很多闪光点的。
因为性格内向,所以网络是让我表达自己的平台。语文成绩不好的我,作文却从不得低分,这得益于我过去常常在论坛、贴吧上的发帖。倾述自己的观点,与网友交流意见的过程中,我接触到了各种各样的人,理解他们的想法让我看待事物的时候非常客观。虽然我并不懂使用华丽辞藻,但我却总是可以保持写作的热情。进入大学便加入了学生会后开始的工作就是作为学院微信公众号的小编,现在仍然在为辅导员的公众号提供编辑排版的服务。当我想要学一件事情的时候,我会非常用功的去学习,还记得大一入校为了加入团队,军训期间就开始从变成小白到C语言的学习,更是在国庆节被拉出去旅游回家后,花3天学完了教材前八章的内容。还有我现在的一大爱好——篮球,我身体很不结实却喜欢上了这个身体接触激烈的运动,即使因为意外右手骨折而留下了后遗症,我也锻炼出了左手投篮继续打球。总结,我的闪光点就是“热情”,无论是学习中为了更上一层楼的刷题,还是准备球赛每顿4两饭的增重,不惧困难去挑战就是我的闪光点。淋不到雨的地方,也沐浴不到阳光。纵使强风起,人生不言弃。
二、阅读与思考
(1)回想一下你初入大学时对你所在专业的畅想
当初你是如何做出选择你所在专业的决定的?
填报志愿是非常让我头疼的,因为在高考结束前我都没有考虑过自己究竟想上什么学校。在综合考虑了学校和专业以后,最终我还是决定选择填报自己想做的事。我曾经在小学到初中时期迷上了一款叫Minecraft(MC)的游戏,激发了出了我的许多潜力。创造力、动手能力以及管理能力,都在这过程中得到锻炼。我曾在MC的中文论坛上,发布过多篇浏览量破万的帖子,还召集朋友建立一个曾经达到50人同时在线的游戏服务器。最终随着中考来临,迫于学业的压力关闭了服务器。这样的经历让我对计算机产生兴趣,在听说了软件与游戏相关后,便出于兴趣爱好选择了软件工程专业。但真正来到这里后才发现,我要学习的没有我想象得那么简单。
你认为过去一(两)年中接触到的课程是否符合你对你自己所在专业的期待,为什么?
因为在团队学习的原因,大一的专业课在上课之前我已经学了很多,加上老师要照顾全班的进度,课堂上我的收获不多。但到了大二,进入卓越班之后的学习才发现自己学习的内容远远不够,走在自己前面的同学非常多,课程的内容也超出了我的想象。按部就班的学习是不存在的,需要自己不断的去开拓新的领域,学习新的知识。
将来你会选择从事和你专业相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
我对未来的工作有很多想法还不确定,可能留在成都加入一家理想的公司慢慢成为一名工程师,也有想法回到学校做一个计算机专业的教师。目标的大公司可能会是一些游戏公司,或者像运营今日头条、抖音、B站等运营自媒体的公司。
(2)对照前人们走过的路和描述未来发展,现在的你
自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
目前,除了已经学习过的课程以外,涉猎过的语言非常多,但是都没有太深入的研究。写过的代码量不多,可能只有5000行多点。没有印象特别深刻的项目,非要说的话就是在做团队项目的时候,常常在开始阶段感到寸步难行,沟通不足遇到的麻烦非常多。
离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
大三这一年要选择一门语言精进,练习算法能力,继续积累项目开发的经验。目前看来我离本科毕业生的差距还有很多,需要继续精进。
(3)目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
对照以上你阅读的前人们的经历,你的选择是什么?
我会选择先就业再考虑考研,因为我希望自己能够先做到经济独立,再去考虑自己的未来的进步空间。我认为将来能够上升到什么高度并不是在学校可以决定的事,也就是学历和工作经验之间的比较。博客[J]中谈到了职业规划的问题,我同意他的一条建议“从毕业开始到毕业后至少5年内,踏踏实实地专研技术,这是一个积累过程,千万不要把心思放在钱和职位上”。
在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
优势:这样的选择是符合我学习方法的,在学院中没有人施加压力,往往容易迷失自己,得不到的预计的收获。而工作中能得到的实践经验对我的帮助可能更大。
劣势:学历低意味着选择少,机会少,太年轻不被看好等。未来考研难度上升,自己可能失去考研的机会。
针对你的选择,你给自己的大三设定的规划安排是什么?
参加团队的项目开发积累经验,精进自己的技术,踏踏实实的研究技术,为工作做好准备。有硬本领才能让公司选择我。
你对于实现自己的梦想已经做了或者计划做什么样的准备?
我没有什么大的梦想,能幸福的生活就好了,因此经济是最关键的因素,所以一步步走进公司工作挣钱就是我的计划吧。
三、提出有质量的问题
1.性格在结对编程过程中遇到的问题
第四章末尾提出了性格对合作的影响。那么选择同伴一起结伴编程的时候,是不是把性格放在第一位,还是说应该更应该根据双方的水平和擅长领域来,我想知道哪一个优先级要高一些,对开发更有帮助。
2.“让人惊喜的功能,会极大提高用户的满意度”
第八章第五节,提出了这个观点。我并不同意这样的观点,在游戏上的表现最为明显,现在有许多游戏每年都会推出续作,例如NBA2K等体育类游戏,每年最大的改动和新的功能都体现在用户体验上,但尝试很多,但往往只惊不喜,或者从预告的惊喜到实际体验的不满。还有任天堂公司在游戏手柄上添加了心率测试器,当在游戏进行到激动人心的点时,玩家的心率会同时反映在屏幕上的图标中,但实际上玩家对此也没什么感觉。这些功能在没有对比的时候很难显示出它的厨师,但往往这些功能有了前后对照之后就可以体现出,那么在新类型的软件开发时,是不是可以有一些“藏着掖着”,即把原本想到且可以做出来的功能藏着?只做出基本的功能满足需求,当出现竞争对手作为对比时再搬出来体现自己的独特。
3.软件服务是否要考虑满足少数人的要求
第十二章用户体验中,谈到了阿汤哥拍摄电影的花絮。用户的需求多种多样,很多软件都会选择退出自定义模式,让用户自己的来设置自己想要的效果。但是往往在设计的过程中,有一些需求往往是相对的,就好像左撇子和右撇子。中国人和日本人的阅读习惯不同,那么当中国人使用漫画软件阅读日本漫画时,有没有必要退出将漫画的布局反转,而文字却不会反转的功能。这个功能虽然可以改善用户的体验,但一个小小的漫画软件却要使用图像识别技术来完成这一功能,明显是不合理的。
4.牺牲质量来提升用户体验度是否合适
12章中通过韦尔奇核磁共振机的故事体现了用户体验的重要性,而当我看到了16章中键盘的起源时,便发现了这里出现就出现牺牲用户体验来提升质量的例子。Dvorak键盘布局可以比现在的键盘拼写6倍之多的常用单词,为什么没有人使用呢。这一切的关键在于技术,键盘的取舍是无奈于技术的不足,只能抛弃用户体验,而韦尔奇的专家也是因为因为技术不足担心影响质量,而没有第一时间推出宽通道设备。在技术进步的今天,我认为也许受到技术影响的质量是可以被牺牲的,因为将来可以补上,但如果没有了用户体验,失去了用户可能就没有将来了。我想知道这样的想法是不是正确的。
5.关于专和精的关系,一点自己的看法。
浏览教材第二遍的时候看到了第三章第三节中,作者把“单人乐队”比作为“全栈工程师”,在我看来还不完全合适。这让我想到了音乐家和演奏家之间的区别,只要你稍微懂一点乐理知识,随后有好的引导,再加上自己刻苦的训练,你就完全可以成为演奏家。而成为音乐家,首先必须是一个演奏家,一个指挥家,一个作曲家等等,有时还要是一个哲学家。我认为“全栈工程师”就是演奏家到音乐家的过渡,一门专而精的能力是我们向高平台的敲门砖,如果没有一门精通的技术,那么就会变成“街头卖艺的单人乐队”,无法走进真正的音乐殿堂。因此对于和我一样都是大学才慢慢开始接触计算机的同学,我认为都应该先成为一名“演奏家”,专精一项技能作为自己的敲门砖。
四、了解和调查源程序版本管理工具
1.Github
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。 --百度百科
优点:
1.功能强大,
2.开源项目多,
3.将项目存档,可以分享交流,并让其他用户帮助你一起完成这个项目。支持多人共同完成一个项目,因此你们可以在同一页面对话交流。
4.适合分布式开发,强调个体;
缺点:
1.界面不太友好,初学者不易搞懂功能
2.开发发生冲突后可能会有很麻烦问题
3.代码保密性差
2.Git
Git是分布式版本控制系统。追踪计算机文件的变化的工具,也是一个供多人使用的协同工具。
Git是目前世界上最先进的分布式版本控制系统。Git是免费、开源的。最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper
官网地址https://git-scm.com
优点:
1.免费、开源。
2.每个参与开发的人都拥有完整的项目,不用担心项目丢失。
3.可以离线操作。
4.强大的分支管理功能。
缺点:
1.git没有严格的权限控制,一般是通过系统设置文件的读写权限来做权限控制。
2.工作目录只能是整个目录,而svn可以单独checkout某个有权限的目录。
3.Apple XCode
优点:
1.自动创建分类图表。
2.提供自动各种强大的功能,且无需编写编码,减轻开发负担。
3.开发IOS和Mac特别方便
4.便捷的代码管理器,自动生成类关系图、函数方法列表等
缺点:
1.不稳定,容易出现插件丢失
2.只提供调试功能。
3.局限于ios和mac