《构建之法》第一次作业
这个作业属于哪个课程 | <课程的链接> |
---|---|
这个作业要求在哪里 | <作业要求的链接> |
我在这个课程的目标是 | 学习、理解软件工程师的思考方式和开发方式,掌握软件开发必要的流程,学习集体项目的开发,从小白逐渐过渡到一个合格的程序员。 |
这个作业在哪个具体方面帮助我实现目标 | 找到了自己的学习重点,通过写博客的方式巩固自己所学内容。 |
个人博客主页 | 我的博客 |
一、建立博客并介绍自己
自我介绍: 什么都了解过,大部分浅尝辄止。心中常怀美好的愿景,却常未付诸实际行动。沉迷音乐(Indie Rock& Britpop), 不擅交际内心单纯(误),乒乓球天才(误),麦霸(误),SWPU唯一指定好源氏(确信)。
二、阅读与思考
(1) 回想一下你初入大学时对软件工程专业的畅想
a.当初你是如何做出选择软件工程专业的决定的?
第一是因为当时比较爱玩电脑,认为软件专业能更多的接触电脑。第二是因为有亲戚在高校从事计算机相关的教育工作,他强烈推荐我选择此类专业。
b.你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?
有符合的又不符合的,过去两年的学习中我对于软件工程有了全新的认识。我过去认为的软件工程专业的程序员就像电影里的黑客,看着满屏的字符敲着代码然后就黑入了敌方的系统。结果却更像是盖大厦的泥瓦匠和搬砖工。当然,本质还是对着电脑看个不停,敲个不停就是了。
c.你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?
软件工程是我喜欢的领域,但我还只是小白,不能也不敢说我擅长这个领域,因为在这个领域大佬实在太多了。
d.将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
在我还年轻的时候会选择从事开发工作。我希望就在成都工作,这里有我热爱的一切。我希望进入大厂,比如BAT,从事后端开发。
(2) 对照前人们走过的路和描述未来发展,现在的你
a. 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
说来惭愧,除了在平时课程中和暑期中的项目经历以外几乎没有值得一提的完整项目,很多都只是在学习技术的时候顺带实现的简单功能。之前一段时间学习过Unreal Engine(虚幻4引擎)和Unity,但都是半途而废。至今为止写的有意义的代码也就几千行吧。最复杂的项目和作业也就是两个暑期分别完成的音乐游戏和网上购物商场。
**离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
差的太多了,在做项目时就可以感觉出来,很多知识、技术没有了解过学习过,于是只能边做边学,而且需要大量的参考其他人的项目经验。
(3)目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
a.对照以上你阅读的前人们的经历,你的选择是什么?
鉴于目前自己的技术和实力水平以及学历,我认为参加工作并不是最好的选择,并且我个人的约束能力超级差,所以我严重怀疑我是否能踏踏实实的备考考研一年(不像我哥坐一年就考上中科大,鉴于我的情况,他也建议我不要考研)。因此我很可能会选择出国读研。
b.在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
我觉得我的英语水平还可以,而且对于西方、欧美文化比较有兴趣,所以应该对国外的环境比较适应。劣势在于人比较懒,约束性差,可能在学业方面会存在一些问题。
c.针对你的选择,你给自己的大三设定的规划安排是什么?
雅思考试至少达到7.0,同时抽出时间学习Python。
d.你对于实现自己的梦想已经做了或者计划做什么样的准备?
不要问,问就是大三大四冲就完事了。
(4)一些有质量的问题
一、"可以继续’效能测试,分析,改进,再效能测试’的流程,逐渐提高程序的效能和我们的编程水平。"(出自 2.2 效能分析工具 P34)
作者在书中举例了关于效能分析带来的巨大好处,毕竟所有的程序员都希望自己的程序跑得又快又好。但是我们是不是一定要去追求最佳、最优化的代码呢?我平时在写代码的过程中并没有着重注意这一点,都是只是简单的实现功能,我知道当程序规模庞大后如果不进行代码的管理和效能测试就会导致程序跑的很慢,但是我们是否有必要花费更多的时间进行过度的优化,投入和回报比例是否合理?比如一款游戏在同一台电脑上加载的时候,10秒进入游戏和11秒进入游戏的区别其实不大,更何况用户的电脑配置不同,运行时间天差地别,可能好的电脑5秒能进入,差的电脑需要30秒。这种情况下我们花费了大量时间对这个游戏软件进行的这点优化意义到底大不大?更何况硬件技术发展极快,哪怕是大神挖空脑子进行的神优化可能完全不如进行一次CPU升级来的效果好。过去的安卓手机应用程序就几MB,现在几乎全是几十甚至上百MB,某些应用程序也并没有增加很多全新的功能,那么到底是什么导致了应用程序体积的增加甚至臃肿,是否是程序员或者是软件公司不太重视代码的优化了?
二、"让人惊喜的功能,会极大提高用户的满意度"(出自8.5 功能的定位和优先级 P167)
作者通过举例以及图像化“各种不同投资的不同效果”说明了让人惊喜的功能和核心功能与投资力度的关系对于用户满意度的影响。令人惊喜的功能的大概意思就是让人不由自主地张开嘴轻轻地说出“哦牛批”三个字。这一点在去年苹果发布会发布APPLE WATCH SERIES 4时宣布 APPLE WATCH将具备医疗级的心电图(ECG)功能时得到了很好的体现。当时大多数人想的是终于可以随时监测心脏的状况了,但是仔细一想,APPLE WATCH 的功能肯定不如医院里的24小时心电图动态检测仪准确,也不能持续检查房颤,更不能直接检测心脏病发作、血液凝块、中风以及其他心脏相关状况,至少以现在的技术还无法做到。因此真正有心脏病的人还是得去医院看,也就是说用户真正的需求的还是得靠相关的专业软件解决。那么这种所谓的惊喜其实就是一种跨界(如同可以在IPAD上画些漫画,但绝大多数创作者都是采用更为专业的数位屏),这种跨界也许能在一定程度上抓住愿意尝鲜的用户,具有一定商业价值,但是是否值得花费大量的时间、金钱、社会资源跨界开发出相对于专业成熟软件而言的“半成品”呢?
三、"牺牲质量去追求用户体验么,用户能接受么?"(出自12.1.6 用户的体验和质量 P260)
作者在书中通过举例说明了用户体验和产品质量的取舍,但是同时产品质量本身也是最终决定用户体验的一个方面。下面这个图片反映了我们平时在使用WINDOWS时出现的一个情况,通常这个时候的用户的体验极差,但是更新最终也是为了确保用户体验。
有时系统更新是十分重要的,比如紧急补丁修复系统上存在的致命漏洞,又或是系统版本的重大更新,增加新功能,提升用户体验。很多时候用户选择否,但我们并不能确定他们是否是知道更新的重要性而出于某种原因选择不更新还是只是单纯的不懂,或随便选择一个,因此我们有必要再三确认,确保他们知道他们自己在做什么,但这确实能降低用户体验。同时作者在文中举出的例子只是在一个行业一个方面表明了用户体验大于质量,在其他领域,比如汽车领域,系着安全带开车感觉更拘束,用户体验较差,于是就可以放弃安全带么? 作者在文中并没有给出明确的回答,那么我在这里再问一次:牺牲质量去追求用户体验么,用户能接受么?
四、“大多数学校里的软件工程项目结束后大家都一哄而散,一些诺言像‘我一定会补上文档的’、‘我们还会继续开发的’……成了撤退的疑兵之计,等烟尘散去,同学们早就跑没影了”(出自15.3 发布之后——事后诸葛亮会议 P333)
在软件开发周期结束,产品发布后有一个对整个软件项目回顾的会议,总结经验,解剖问题,回顾得失。但这种会议往往如作者所说的一样过于形式化。特别是在学生时代,如果有老师参与评估,那么大家往往不会说出真实想法,隐藏一些自己在开发过程中的错误以及对项目开发造成的负面影响,换句话说,大家都不想背黑锅,给上级、领导留下不好的印象,这同样也是人性,不是每个人都愿意勇敢的暴露自己的弱点,承认自己的错误。而如作者在书中的举例,阿超和大牛作为上级没有参加会议,希望由此让大家畅所欲言。但事实上没有领导参与,这个会议有很大的可能变得非常随意,大家打个哈哈就结束了,通俗点说就是很水。所以说到底该如何让开发团队的成员(特别是在学生时代)勇敢地、自主地、有意义地开设项目回顾总结会议?
五、“但是为什么耍这么多花招?为什么不都当一回简单的P1呢?”(出自17.5 其实还是人的问题 P396)
在项目开发中,总有这些人存在这种情况
P=
作者在文章中阐述了可能的理由
人无完人,人非圣贤,总会犯错误,原因很多,有的是一念之差,有些是时间安排的问题,有的是有仿生学的原理,有的可以追溯到社会的潜规则或种种原因。
那么对于这些耍花招的人,我们有什么良好的办法可以规避或者惩罚呢?更好的问题可能是,如何从根源上杜绝这种耍花招的行为呢?
(5) 源程序版本管理工具
1.GIT
Git是目前世界上最先进的分布式版本控制系统。Git是免费、开源的。最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper。
特点
直接记录快照,而非差异比较。近乎所有操作都是本地执行。时刻保持数据完整性。多数操作仅添加数据
优点
适合分布式开发,强调个体。公共服务器压力和数据量都不会太大。速度快、灵活。任意两个开发者之间可以很容易的解决冲突。离线工作。
缺点
模式上比SVN更加复杂。不符合常规思维。代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
2.Microsoft TFS
提供源代码管理,报告,需求管理,项目管理(适用于敏捷软件开发和瀑布团队),自动构建,实验室管理,测试和发布管理功能。它涵盖整个应用程序生命周期,并支持DevOps功能。
优点
与Visual Studio无缝结合,方便开发者进行源代码管理,支持代码审阅与讨论,支持邮件通知,支持Web访问与管理,支持工作项以及BUG等管理,不会上传.NET开发时生成的垃圾文件,自带版本合并以及比较工具,支持数据库版本管理,自带很多管理工具(测试管理器、反馈客户端、界面设计工具等等)
缺点
能应用起来的团队、公司的数量极少。
3.GitHub
GitHub 是为开发者构建的一个开发平台。GitHub 是一个受开发者工作方式启发的开发平台,从开源到商业,能够在上面进行托管和查看代码、管理项目和数百万其他开发人员一起开发软件。
优点
GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。
缺点
可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
4.Apple XCode
Xcode是苹果公司向开发人员提供的集成开发环境,用于开发macOS、iOS、WatchOS和tvOS的应用程序。
优点
编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码。保护分支,分屏对比,按行评论等高级功能。并且整合了 CodeInsight,质量管理,演示平台等等开发工具,提升研发效率。
缺点
更新版本后,某个插件可能会失效。暂不支持导入外站的私有项目。