第一次作业:阅读与准备作业
第一次阅读和准备作业
这个作业属于哪个课程 | <课程的链接>
这个作业的要求在哪里 | <作业要求的链接>
我在这个课程的目标是 | <更好地理解软件工程这个专业>
这个作业在哪个具体方面帮助我实现目标 | <让我改变了之前的一些想法>
一丶 My Blog Introduce
--我的博客地址
--自我介绍
我是来自计算机科学与技术2018级的汪思朋,在写这个作业之前我回顾了一下自己之前所学的课程和代码量,我发现自己要完成这个作业是非常的吃力,至于为什么,后面会一一介绍。其实在上大学之前我没有任何的爱好,自己唯一的闪光点可能就是能够在放学后按时回家,当然这是对于其他孩子的家长来说的。
上了大学之后,出于各种机缘巧合发现自己喜欢跑马拉松,打羽毛球,打打游戏等等,其实谈不上爱好吧,但是还比较喜欢。比较擅长的马拉松(其实最多跑了半马)从一开始的2KM,到5KM,10KM,21KM,怎么说呢,就是一点点地坚持过来的,谈不上有什么不容易地地方。不过在将来,我会继续坚持我的爱好,拉拢周围的人一起运动,并不断提升自己。
二丶 Reading & Thinking
1.当初是如何做出选择现在专业的决定的
我是从土建院转专业过来的,原来的专业叫建筑环境与能源应用工程,因家里是做建筑装饰的,想着学这个可能有点优势,不过去了之后发现根本不喜欢。于是转专业到了计算机科学与技术。
至于为什么转到现在这个专业。
一是自己在高中经常鼓捣班上那台电子白板,对它有着浓厚的兴趣。
二是社会对计算机专业的评价都挺高的。
基于以上两点,我来到了现在的专业,写着这篇博客。
2.过去一年是否符合专业期待,为什么
说到这个,我想先分享一下我在微博上看到的一个故事。一个朝气蓬勃的高中生高考后进入了他喜欢的网络安全专业,他兴致勃勃的想要创造网上那些网络安全神话,不过四年后他仍然碌碌无为,他这时恍然大悟,原来自己感兴趣的不是网络安全专业,而是网络安全故事。
对比这个故事和所学的知识,我发现我感兴趣的其实不是计算机专业敲代码开发软件,而是在于用计算机的软件所带来的快乐。我相信大部分人都有这样的专业认识偏差。
不过后来能看着自己写代码的在编译器上通过编译运行,这就像是自己在和计算机对话,让他跟随自己的指令做事,也让我慢慢地爱上了这个专业。
3.你觉得你所在的专业是你喜欢的领域吗,它是你擅长的领域吗?
上一个问题已经回答了我现在确实喜欢这个专业,不过说擅长是不太可能的。一是计算机科学所包含的范围太广,二是自己所学的确实不多基础不太扎实。
4.将来你会选择从事和你专业相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
我选择了这个专业就是奔着以后想要从事计算机相关工作来的,至少我现在是这么想的,能做自己喜欢的工作的感觉真是太棒了。
其实我很喜欢成都,如果毕业后能留在成都也是个非常不错的选择,个人倾向于去做web前端工程师,想去字节跳动这家公司,因为它开发出了我最喜欢的APP今日头条。
5.自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
数据结构、编译原理、操作系统、汇编语言、计算机原理、计算机系统结构、离散数学、概率论、计算机网络、数据库、单片机、算法设计、数理统计、高级语言程序设计、面向对象程序设计这些计算机专业必学课程到现在只学了几门,也不太精通,写过不超过一万行代码,写过最复杂的作业就是程序设计实践做贪吃蛇游戏,我还得多加练习。
6.离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
离成为一个合格的本科生至少在学龄上有差距。专业知识没有学完,没有专一稳定的技能,能力还有待提升。
7.对照以上你阅读的前人们的经历,你的选择是什么?
说到选择,我对上面有篇文章的那句话很有感触最让一个人感到最有成就的事情,不是他做成了什么,而是他选择了什么
在《对程序员职业的一些建议》这篇文章中,提出了这样一个质疑:当你在想要付出努力提出类似于“你能推荐几本书么?”丶“有易学易懂的视频么?”,能不能稳住,问问自己,我真的热爱编程,我真的热爱学习么?科班的,非科班的选择汇聚到计算机这个行业,我想大概都是因为热爱。所以我的选择就是热爱并去做。
8.在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
热爱并坚持去做,我想我的优势是坚持吧,毕竟半程马拉松都跑下来了。劣势就是自己的基础薄弱
9.针对你的选择,你给自己的大三设定的规划安排是什么?
我在大三的时候会好好规划自己。争取参加尽可能多的比赛,获得好的名次,刷GPA。
10.你对于实现自己的梦想已经做了或者计划做什么样的准备?
我现在所作的准备就是认真上课,认真完成每一次的作业。思考自己哪些做得不足需要改进。不管结果怎么样每一个结局,我都能承受,不算破釜沉舟,但绝对全力以赴
三丶My Question
Q1:各个需求和任务之间是有种种复杂的依赖关系的,除了优先级之外,还要考虑相互的依赖关系,怎样在计划中体现依赖关系呢?
Q1来自于《现代软件工程-构建之法》P111敏捷流程
A1:
活动之间的依赖关系取决于实际工作的要求,不同活动之间的依赖关系决定了活动的优先顺序及其重要性。活动依赖关系是确定项目关键路径和活动浮动时间的必要条件,定义活动间依赖关系的目的是确定每一项活动所需的输入、输出关系。我认为我们应该从任务的规模丶复杂程度丶紧急性丶对任务的细节掌握程度等方面下手来在计划中体现相互依赖的关系。小项目应采用简单的进度计划方法,大项目为了保证按期按质达到项目目标,就需考虑用较复杂的进度计划方法。如果项目进行过程中有一、两项活动需要花费很长时间,而这期间可把其他准备工作都安排好,那么对其他工作就不必编制详细复杂的进度计划了。
Q2:有了好的想法,伟大的创新就会紧随其后吗?
Q2来自于《现代软件工程-构建之法》P340IT行业的创新
A2:
相信大家在学高中化学的时候都读过苯环是由凯库勒做梦发现的,我感觉他的运气真好,做个梦就能解决难题。其实我原来也都一只是这么想的,只要有了一个好的点子,你就是创新型人才。如果卢瑟福不用a粒子攻击金箔,那他会发现中子吗?如果法拉第不用铜线圈,那他会发现电磁感应吗?这看起来好像是他们都有不错的点子,然后创造了创世纪的发现,我自己也有很多不错的点子,那为什么我不能成为他们那样的人呢?看了这本书,慢慢思考才发现原来这些科学巨人在顿悟之前已经在相关学科打下了深厚的基础,同时他们也对这些问题进行了长时间的思考,那些看似神奇的时刻才会光顾他们!所以我们有了好的想法,还要去做,才能由伟大的创新。
Q3:那市面上有那么多不完美的产品,软件团队为什么还要把这些不完美的软件发布出来呢?为什么不能等到它们完美之后再发布?
Q3来自于《现代软件工程-构建之法》P15概论
A3:
我认为问题的发现是相互的。世界上没有一个事物是完美无缺的。做一个完美的软件,需要耗费大量的人力,物力和财力,在软件行业日新月异的今天,时间是最能衡量一个团队效率的指标,如果一个团队做软件做得很久,势必不能很好的在市场上生存。
同时,一个不完美的软件发布出去,肯定会得到用户的反馈,然后程序员根据反馈再来修改软件的功能,BUG。因为他们虽然是软件的第一用户,但是很难发现自己软件的问题,这就需要用户的反馈了。一千个人里有一千个哈姆雷特,就算已经有100个开发者认为这个软件已经改不出问题,也总会有101个人发现问题或者想出更好的方法,如果要十全十美再发布,不可能实现。
Q4:作为软件工程学习团队,适合用什么模式?
Q4来自于《现代软件工程-构建之法》P91团队和流程
A4:
首先要明确什么是团队。团队主要包含有以下特征:
1.团队成员有一致的目标
2.团队成员各有各的分工,互相依赖,相互合作,共同完成任务。
我认为作为学生学习,最好的模式是窝蜂(Chaos Team),这是一个欢乐而随意的模式,但这种模式最开始有点混乱,,不过随着团队的成熟和环境的变化,团队会逐渐演变成其他的模式。
Q5:计算机科学和软件工程有什么区别?
Q5来自于自己思考
A5:
一丶计算机科学与技术和软件工程区别为:涉及领域不同、软硬件不同、就业领域不同
1、计算机科学与技术:涉及大数据技术导论、数据采集与处理实践(Python)、Web前/后端开发、统计与数据分析、机器学习、高级数据库系统、数据可视化、云计算技术、人工智能、自然语言处理、媒体大数据案例分析、网络空间安全、计算机网络、数据结构、软件工程、操作系统等方面
2、软件工程:涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面
二、软硬件不同
1、计算机科学与技术:既有软件技术,也包括硬件技术。
2、软件工程:偏向软件技术
四丶Source program version management tools
1.Microsoft TFS
优点:
1.任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用
2.集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM
3.能与 VS 无缝接合
缺点:
搭建、维护tfs比较复杂,硬件要求也比较高。
2.Apple XCode
优点:
更快捷的使用如rename这样的功能。
缺点:
不直接列出ERROR,不便于在编译时发现问题。
3.GitHub
优点:
1、管理代码历史纪录
2、可以克隆笔记,搭建博客,个人网站,管理项目等等
缺点:
对初学者不太友好,学习门槛高。