第一次作业-《构建之法》
这个作业属于哪个课程 | 课程的链接 |
---|---|
这个作业的要求在哪 | 作业要求的链接 |
我在这个课程的目标是 | 了解什么是软件,掌握整个软件开发流程。 了解系统各方面的需求和设计,对将来软件开发奠定基础。认识到团队合作的重要性。 |
这个作业在哪个具体方面帮助我实现目标 | 了解什么是软件设计,懂得什么是团队合作 |
作业正文... | 作业正文 |
其他参考文献... | 参考文献 |
我的博客 | 我的博客 |
作业正文
1.自我介绍
我是一名阳光自信的男孩,在技术上并不是特别的厉害,但是在运动方面还是小有天赋。平时爱打篮球、羽毛球以及听听音乐。篮球不仅能缓解学习上的压力,还能增强身体素质。篮球也要懂得团队合作,学习上也不例外,这也是我喜欢它的原因。在技术方面上的学习从未间断,但是总觉得记忆力远不如以前,记过东西过不了多久就会忘记。所以不能只看还要过手,多锻炼自己的动手能力。我个人觉得代码是一种很奇妙的事物,从而深深地吸引了我。
2.阅读和思考
2.1 回想一下你初入大学时对你所在专业的畅想
- 当初你是如何做出选择你所在专业的决定的?
自己对计算机方面有一定的兴趣吧,以及考虑到这个专业将来好就业的前景。同时自己高考的分数也刚好上学校的分数线,但是填的第一个专业不是软件工程而是电气自动化,幸好没被录上。从此也就入坑了,但是自己也没后悔,还是在坚持自己喜欢的东西。
- 你认为过去一(两)年中接触到的课程是否符合你对你自己所在专业的期待,为什么?
转眼过去了两年时间,大学生活来到了最关键的一年。前面两年所接触的课程在我看来都很实用,数据结构的重要性不言而喻,软件设计模式、计算机系统基础等等都很nice。其他公共课程也不错,比如高数、现代、概率等等,(我个人比较喜欢数学),这些课对我们学习专业课知识都有大大的帮助。我觉得课程开的都很好,学得话还是得靠自己自身的努力,课上讲的是基础,课后是自己去巩固基础以及提升能力的。目前阶段大部分开设的就是都业课,我觉得这些课都挺有意思的,值得我们去学习和钻研。
- 你觉得你所在的专业是你喜欢的领域吗,它是你擅长的领域吗?
是我喜欢的专业,我个人觉得代码真的很神奇,我的兴趣驱使我选择了软件工程。对于目前来说自己技术能力还比较薄弱,还得多加练习。相信自己会从rookie逆袭成为master。
- 将来你会选择从事和你专业相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
当然会选择从事与专业相关的工作。自己还是愿意在成都发展,公司的话大公司(阿里、腾讯)最好不过了,但是还是得靠自己的努力才行。岗位的话希望能做到全栈工程师,(现在来说还是太遥远),但是目标定在这,自己一步一个脚印向着这个目标奋斗。
2.2 对照前人们走过的路和描述未来发展,现在的你
- 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
基础的C语言,学过C#,java,html,css,以及ssm框架,前端框架angularjs,bootstrap。数据库知道一点点,项目部署到服务器的一些配置熟悉。目前代码量大概有4000+吧,做的最复杂的项目是今年暑假的一个分布式电商平台系统。对整个项目的开发流程熟悉了许多,以及项目的部署我做了大部分,也学习了不少有关linux系统的知识。
- 离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
我个人觉得离合格还差得多,专业知识方面虽然学的多,但是目前也遗忘了不少,还是有所欠缺。技能方面的话还是不行,看代码还行,一过手就困难重重,所以平时还得多练练,基础的也要多练练。同时做项目的话,可以看着网上的教程跟着做,这样跟着学不仅记住了知识点,手也跟着敲了遍代码,同时也熟悉了项目是如何开发的。
2.3目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
- 对照以上你阅读的前人们的经历,你的选择是什么?
我更偏向于就业,我想的是提前去社会上锻炼锻炼自己,多积累积累经验。虽然目前的自己专业知识和技能方面都不太强,但是还有一年的时间,在专业知识和技能方面多下点功夫,相信自己能做到的。
- 在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
我个人觉得是一把双刃剑,都有优势和劣势。优势:先就业无非就是先提前适应社会,接触更多的人、适应不同的环境。劣势:与考研的相比,学位可能较低,学术研究能力差一些。
- 针对你的选择,你给自己的大三设定的规划安排是什么?
英语最好不能落下,毕竟对以后还是帮助挺大的。专业知识和技能知识一定要认真的学,多了解一些新的技术,框架也要多学几个,要把整个软件开发的过程熟悉透彻。多练一些项目,增加自己的代码量,了解一些底层的知识。
- 你对于实现自己的梦想已经做了或者计划做什么样的准备?
可能做到了50%吧,自己知识虽然了解了挺多,但是深度方面没有深入的学习下去,说实话还是太菜,自己没有严格要求自己,浪费了太多宝贵时光。接下来的时间,要合理规划自己的时间,把自己的时间安排的比较充裕,课上好好学,课后巩固自己的技术和专业知识,挺好的!
3.提出问题
- 问题1
我看到第四章的结对编程,百度了一下什么是结对编程。书上81页说到结对编程是一个相互督促的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价。 当一个程序员处于流模式(Flow),另一个在一旁学习(Learning)——若另一个程序员时不时地打断他,并要求对一些基本的但与挑战性问题没有直接关系的事情做出解释,那么他很难专注于解决挑战性的问题。-引用自(什么时候该采用结对编程)因为两人的能力不一样,相互督促的话起到的作用并不大,同时每个人的想法不一样,有些人就不愿意接受别人评价,碍于所谓的面子。所以我觉得结对编程不仅双方性格要合得来,还要虚心接受别人的意见。那结对编程是利大于弊,还是弊大于利呢? 我感觉还是利要多点,俗话说“三个臭皮匠,顶个诸葛亮”,团队合作比单打独斗更好一些。
- 问题2
书中第六章的敏捷流程, 知道了什么是敏捷流程以及敏捷流程的问题和解法。
我们怎样能做到敏捷开发?如何提早的交付软件达不到客户的需求?项目人员流动过大,新员工太多如何解决?书上提到时时总结如何提高团队效率,如果时不时的开会讨论的话,会严重影响工作效率,我们怎样制定一份完美的计划来把团队效率和日常工作做得更加完美呢?
- 问题3
第七章的MSF原则,什么是MSF原则?怎样把信息做到完美的共享和保密?如何与队员有效的沟通,把信息更加准确的传达给其他人?如何避免在软甲开发过程在所遇到的缺陷?当软件成功开发出来,要与客户交互时,如何把软件的功能详细的给客户表达出来?同时遇到问题时,以及与客户沟通是我们开发人员比不可少的一项基本技能。
- 问题4
第八章的需求分析,什么是需求分析?我们不能盲目的做需求分析,这是软件生存周期中一个重要的环节,我们要知道用户的需求是什么?当用户需求发生改变时我们要如何应对?如果软件都开始到了编码阶段,用户的需求又发生了改变,我们该怎么做?我们是不是要从头再来一遍需求分析?如果是采用瀑布模型来开发,开发到一半时客户需求改变,那你是不是心态爆炸,所以我们该采用哪个开发模式来开发软件?怎样应对多变的需求来做好需求分析与设计呢?
- 问题5
第九章的项目经理,如何做到一个优秀的PM?是按照书上所说的做,就可以领导一个项目团队了吗,能让员工真正地服你吗?我觉得并不是这样,一个优秀的PM不仅要有专业的领导力,还要有出众的管理能力,一定的专业能力;还要懂得体贴员工,有责任心,自我约束能力强。
- 问题6
第十一章的软件设计与实现,书中223页提到了软件是怎么解决这些需求的?现实世界中的实体和属性在软件系统中是怎么表现和交换信息的?,以及224页的两个类似的问题,只是问法不同,解决方法相同。我们在软件的设计和实现的过程中,怎样才能构建一个与客户所要求的软件类似的模型呢?我们不仅要把需求分析透彻,还要建立多个模型相互比较,选择最优的那个。建立的模型就是把用户的需求所描绘了进去,在仿照模型去编写软件,这样就可以解决用户的需求。在开发过程中,模型出现问题,是否得重新建模,还是在原有基础上加以改进?
- 问题7
第十六章IT行业的创新,什么是创新?我们一定要盲从吗,别人创新我们就跟着一起创新?如何抓准合适的时机进行创新?都说有了新的就忘了旧的,我看确实是这样。有好的想法确实不错,但是如何把好的想法实施起来?这才是创新的难点。俗话说早起的鸟儿有虫吃,但书中提到往往领导者都不是先行者,这是为什么呢?假如有好的想法,如何去实施然后做到技术上的创新呢?
4.版本管理工具
(1)Git
特点:分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
- 优点:适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。 - 缺点:
资料少。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
(2)Microsoft TFS
- 优点:是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。
- 缺点:能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。
(3)GitHub
基本功能:GitHub可以托管各种git库,并提供一个web界面
- 优点:完整的支持Markdown语言,而且支持Emoji表情。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。功能设计简洁实用上手很快,可用性好,已有很多相当质量的各类项目和优秀开发者在上面。
- 缺点:国内访问速度太慢,经常出现connect time-out。基于git,学习曲线陡峭,企业大规模用git根本不现实。
(3)SVN
- 优点:不必担心有什么数据损失。SVN在速度运行方面有很大提升。SVN安全性高,实现了系统和控制两方面的结合。
- 缺点:服务器管理复杂。强迫使用者即时处理冲突,然后才能提交。导致代码不能即时提交。提交、更新、浏览历史的速度都很慢。
(4)Trac
- 优点:非常灵活,可以随心所欲控制可以和SVN集成
- 缺点:功能不是很强大
(5)Bugzilla
- 优点:免费,有中文版支持
- 缺点:快速搜索结果不准确。只能管理缺陷。
(6)Apple XCode
- 优点:编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码
- 缺点:更新版本后,某个插件可能会失效。
5.希望
- 不忘初心
- 脚踏实地
- 借鉴他人经验,逐步完善自己
- 严格自律
参考文献
- 菜鸟教程-Markdown
- 百度
- 博客-blogging
- 博客-Tulipbaby