“构建之法”--第一次作业-阅读与准备工作
这个作业属于哪个课程 | 课程的链接 |
---|---|
这个作业要求在哪里 | 作业要求的链接 |
我在这个课程的目标是 | 利用《构建之法》这本书,能对软件工程这门学科有个初步的理解,让自己逐渐从会写程序转变到会写软件 |
这个作业在哪个具体方面帮助我实现目标 | 能够写博客记录自己的程序过程,了解Git的使用方法 |
作业正文 | 正文 |
个人博客主页 | Vchopin |
参考文献 | 博客园,CSDN |
自我介绍
一上大三,突然就感觉时间好紧,半只脚已经踏入社会了,但是内心却还停留在大一,还想慢悠悠的学,慢悠悠的玩。我叫魏川程,性别男。我记得是我上了高中才接触电脑,还是高三教室里面的那个老师用来教学的电脑,我觉得很神奇。高中老师让我们轮流值日放歌,我当时上去敲键盘还是一阳指,一个键一个键的去戳。更加不会快捷键了。当时考完选专业,我英语比较好一点,数学,理综太差了,又不想读英语。我觉得写软件挺好,做计算也不会太难(现在数学建模才知道流眼泪),就报了软工。
我其实也不是没有努力去发现自己的潜能,我其实很喜欢去尝试新的东西。小时候在农村,能玩的太少了,但是教会了我穿鞋爬树这项特殊技能。大概就是如图:
后来高中去了县城,接触到的也多了,慢慢就跟着学篮球,学排球,学网球,学桌球,学抽烟,学喝酒等等。
反正单纯的少年和灯红酒绿的大城市碰撞,慢慢就世俗了。大学也学吉他,学游泳,学霹雳舞,学散打,我觉得这些都超级有意思,但是经历这些过程之后,发现自己学不会,那个时候就是非常痛苦的时候了,又不想承认自己能力不行,也不想被别人嘲笑,最后自我认同感越来越低。最后学会了厚脸皮去对抗世界。现在主要是在玩滑板和轮滑,玩的还挺6。
刚开始学轮滑是啥都不会,家里穷,连轮滑鞋都是别人划完了,我借去划,给人家洗了之后再还回去。我基础底子薄,之前连双排轮子的轮滑旱冰鞋都没玩过,后来跟着隔壁寝室的,天天划着去打卡,要说没有摔跤,那肯定是不可能的,环校两公里跑的路线每隔十米就有我摔倒的印记。好几次因为不会刹车,直接怼人家车上去了。危险是危险,但是我觉得迎着风的感觉很舒服,就一直这样持续了好几个月。后来大概是11月份的时候,跟着学校轮滑协会从学校滑到天府广场,说远不远,因为走了近路。但是是晚上划通宵,视线很暗,不怎么好划。但是我还是一往无前的去了,果然,不断在井盖上摔,在栏杆上摔,在梯子上摔,在乡村公路上摔。这一路也基本上是摔过去的。到了天府广场,除了脸,基本都是伤,想躺一会又痛,就保持一个姿势在市中心待了一晚上。后来一段时间,发现自己好像技术越来越好了。是不是摔了就能进步?哈哈哈哈
另外还有游泳,我其实不太想说…但是这确实是我暑假变黑的主要原因,导致现在也白不回去了。刚开始游泳,那真的是一下水就被呛鼻子,不敢把头埋进去,有人来了,也只会在岸边装两下样子。看到好看的妹子也只能慢慢的走过去,但是走过去,人家已经游走了。后来暑假就天天都去,10块钱游一下午。肤色以可见速度直线变黑。
但是,我就慢慢感觉自己好像能够浮起来了,我腿一动好像就能走了。以为自己很了不起了,一下深水区,要不是有人拉,我可能就写不到这篇博客了。后面也还是陆陆续续的喝了别人的洗澡水。但是,最后也还是慢慢学会了。跳水,花式,都还是会一点,反正以后掉水里淹不死我了。当我站在蔚蓝色游泳池面前的时候,我觉得很自豪,虽然差了点,但是还是能够游到对岸。
阅读与思考
1 .回想一下你初入大学时对你所在专业的畅想
1 .当初你是如何做出选择你所在专业的决定的?
我其实一开始并没有想学软件工程,我想学计算机科学与技术。但是我并不知道计算机科学与技术学的是偏重于理论方面,只知道跟计算机沾边,应该还是可以。高中的时候,一个同学在百度找了一句vbs的代码,在教师的电脑上,给喜欢的女生表白。当时看着他抱着美人归,眼里满是羡慕与嫉妒。后来觉得学计算机都是黑客,轻而易举攻破美国政府网站。便决定学计算机了。但是后来在看专业代码的时候,无意中看到软件工程这个专业,也是计算机科学学院的。我当时就觉得,软件工程就是专业写软件的,比那个搞计算机的要高端一点,心高气傲,想做个PP(模仿QQ),然后就来到了现在的专业搬砖。
2 .你认为过去一(两)年中接触到的课程是否符合你对你自己所在专业的期待,为什么?
过去一两年,专业上面学了C语言,数据结构,离散数学,设计模式,计算机基础,编译原理,计算机科学基础等等。反正离我想做一个专业的社交聊天软件相差得有点大。但是进了大学之后,报志愿那会的心高气傲,现在想起来也确实挺搞笑。但是一个人要有梦想的嘛,万一实现了呢。至于为什么讲的都是很基础的,我觉得我现在来回答有点多余。学校这么安排肯定有他的道理,仔细一看,这都是基础课程。在看看今年课表,喜欢的移动应用技术开发和Linux都来了,我知道,我的学习开始从基础向高阶转变了。通过C#也做过了几个小程序,小游戏,加上Unity,也完成了一个3D贪吃蛇。基本和以前的目标一致。所以,我并没有觉得学校的教育和我自己的目标有所背离。当然,期待在不断发生变化,我现在倒是期望学校在大三大四多来点实际应用课程,感觉自己上了两年的课,还是没懂,什么是软件工程。
3 .你觉得你所在的专业是你喜欢的领域吗,它是你擅长的领域吗?
我觉得这个专业还是挺喜欢的,回到我们那个村里,让你说你学化学,人家可能搞不懂你能干什么。但是你一说你学的计算机,那你肯定会修电脑,我那个机箱太丑了,能不能给我喷点漆…在高中班上发一些代码和游戏感觉自己也是挺自豪的,虽然很装逼,但是这个一上头就停不下来哈哈哈哈…以上说的都是这个专业给我带来的附加价值。最喜欢的其实是男孩子特有的喜欢鼓捣新东西。喜欢探索新软件,喜欢试玩新游戏,喜欢自己组装电脑,反正计算机attracked me.但是,说实话,并不是我所擅长的,我觉得我并没有先天的良好逻辑思考能力,意味着以后大型数据结构软件无法构建。也没有足够的知识储备,对于新的计算机知识接受比较慢。我所擅长的应该是技能型体育运动,比如篮球、乒乓球这种运动,这辈子受限于躯壳,下辈子好好做自己擅长的事情。
4 .将来你会选择从事和你专业相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
如果有机会,那当然是继续干软件啊,不能让这四年受的磨难都化成灰了。不然感觉对不起自己,对不起老师,最重要的是,辜负了国家对我四年的培养。最想去的还是南充,毕竟,南充山清水秀,人杰地灵。最主要还是离家近,兄弟伙伴们都在附近,没事可以拉出来唠嗑,摆龙门阵。后来预判了一下,南充融入成渝经济圈的话,机会很大。否则,机会更多的还是成都。公司我也并没有特别去了解。我的期望是最好毕业能够进入到一个比较大型的公司干实习生,能晋升就继续,不能就离职,通过大公司学到的带着去小公司带领团队,效果就算不好,自己的经历也慢慢多了,也慢慢就会那一套了。
1 .回想一下你初入大学时对你所在专业的畅想
1 .自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
我觉得我对于软件工程到底是什么还是不够了解,说不清,道不明。只能说,具备基本的程序开发能力。比如用C语言写一下Hello World还是可以。用C#可以拖一点控件做个按钮版本的Hello World也得行。数据结构,现在就记得DFS和BFS,至于怎么实现的,详情查看(www.baidu.com)。之前有过一段做比赛软件的经历,我觉得挺好的这段经历。让我知道了自己原来这么多不会,不会高级数据机构,不会.Net框架,不会C#高级语法,就只是会不停地搬砖,胡乱堆砌,最后能够跑通就算成功。毫无章法可言。所以我认为我的能力现在和大一入学的学弟学妹们的差别可能就是我会写Hello World。粗略估计,按照一学期写个500行左右,现在差不多该有两千左右,可是我记得大二上期,写的C语言图形化版本的贪吃蛇就有两千行。所以,按照一学期一千行来计算,现在的四千行比较接近真实水平。我觉得最复杂的项目大概就是用C#做个类似EXCEL的那种表格处理软件,要求能够编写脚本自动计算,还有文本处理,图表统计等功能。反正那几天天天吃喝睡觉都在实验室,困了累了,喝东鹏特饮,一天睡眠小时不足4小时。最后虽然给赶出来了,但是感觉整个人都垮了,很充实,也是真的累。不想再有下次。
2 .离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
专业知识,学的不够深入,始终没有详细到底层。对于汇编代码和机器码讲的一般都是很粗略,也可能是我没听课,反正我自我感觉不得行,这是一个差距。还有数学方面,因为我本身数学就不是很好,计算能力很差,解一道计算题,都是自己编程让计算机去解。本就薄弱的数学,加上快速的教学进度,反正我觉得,现在的数学建模,我不能把模型用计算机的语言表达出来,求解也就更加困难。技能的话,如果按照方案培养计划上,照着学校进度走,应该都没问题。实在有问题,把作业多做几遍也是没有问题的。对于能力培养,我觉得也是学校的不足之处。很少有这种组队的课程能够大家一起做,培养大家的团队协作能力。以及其他的独立思考问题能力,这也是中国大部分高校,大部分学生的基本缺乏能力。所以我希望剩下的两年继续努力,努力去成为一个有用的人。
3 .目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
1 .对照以上你阅读的前人们的经历,你的选择是什么?
对照这些科班、非科班出身的大佬们,我觉得仿佛自己和他们都不是一个世界的人。我很崇尚技术,但我自己技术确实很差,稍微有点小成就就容易沾沾自喜,只会在表面上谈兵。所以,估计只能考研或者考公。但是考公还是感觉有点对不起这个陪了四年的电脑,敲了它那么多下,结果最后不用它了。所以,大概率还是要考研。我记得大一来的时候,问他们要不要考研,他们都说的是,不考研,好好学技术,以后直接走上人生巅峰。等到大二,大部分都认识清楚了自己定位之后,开始慢慢有人说要考研了。等到大三,基本都是要考研的了。我估计再过一学期,卓越班全员考研。
2 .在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
我感觉我好像确实没有优势,成绩一般,技术很菜。但是我觉得我会唱、跳、Rap、篮球(CTRL)+ C。要考研的话,我估计我的初试成绩可能不会太好,因为数学从来就不好,加上专业课基础差,所以,竞争更具劣势。我的优势估计就是能够坚持的去做一件事情,能够坚持滑轮滑,能够坚持学游泳。考研是一个长征路,甚至比高考还难。高中每天都有详细的计划,都有一群人一起奋斗。到了考研后期,转身发现,除了自己,再无来人。所以,如果能坚持下来,我觉得我就已经领先很多人了。
3 .针对你的选择,你给自己的大三设定的规划安排是什么?
选择考研,大三就需要好好提升自己的数学功底和专业基础。所以,还是先从背单词开始吧。打算之后加入一个晨读俱乐部,每天早上跟着一起练口语,一起背单词。有一群人一起,做着事情就容易坚持下来。专业能力的话,我也不去奢望看懂某某源码,某某框架。我做好自己就行了,所以,想着把LeetCode上面的中等难度的题都刷一遍。同时,最重要的,现阶段还是好好学习,把绩点拉上去。复试的时候才能有更多说话的底气。还要把之前分数太低的课程重修一下,没有绩点撑场子,随便说点,别人都觉得你是编的。数学还是好好刷题,根据高中经验,刷题就能涨分!!!
4 .你对于实现自己的梦想已经做了或者计划做什么样的准备?
准备是真没有。他们人际交往厉害的,在屯人脉。争取保研的,疯狂刷绩点。喜欢技术的,在看JDK源码。我呢,跟着大部队走。碰到了,都是上天安排好的。随遇而安也许不是一个好方法,但是确是没有计划的人的最好的良心安慰了吧。我想着能够均衡发展就是最好的,人脉也有一点,技术也能搞一点,成绩也能学一点。有时候会注意一点去刻意发展。大部分就是空余时间学技术,上课时间好好学理论。这也是直接导致了我什么都很一般,什么都不精的根本原因。
提有质量的问题
问题一
参看课本第52页,其中谈到专和精的关系。作者抛出了一个都有答案的问题,你是愿意花钱去听一个人演奏各种乐器,还是一个人专业研习的乐器独奏?
这个问题估计对于其他专业也很适用。也能适用于很多问题,就是到底我们是应该做一个全面发展的“全栈工程师”,还是去做一个精通某一个方面的“软件工程师”,是做“深度优先”还是“广度优先”?他们之间该如何取舍?各自优势以及各自的劣势又有什么区别呢?对于个人职业发展有哪些不一样?
问题二
在课本第91页中的软件团队的模式小节中,作者认为软件团队的模式可以分为蜂窝模式、主治医师模式、明星模式、社区模式等等各种各样的模式。
我觉得说的挺好的,但是我不太能理解的是,这些团队模式的意义是什么?作者并没有讲清楚什么样的团队适合什么什么样的模式。很详细的介绍了各种各样的团队模式,也有各种各样的例子阐述理解,看完了所有模式,仍然是一脸懵X,所以,我很想知道这些团队模式的作用和意义,以及什么样的团队适合什么样的模式,何如进行衡量?
问题三
在课本第26页中作者谈到关于使用VSTS测试工具对自己写的程序进行单元测试。作者认为自己才是对原来代码最了解的人,自己才清楚哪里最应该进行测试。这个是非常正确的。但等我看到后面的结对编程的时候我又想到,是不是自己一个人进行代码编写、测试,容易出现一个软件只有自己会用,在自己使用的情况下不会出问题。
一个人是开发程序的,但是如果测试是另外一个人,那个人也可能无法准确的把握到应该测试的地方,免于测试的地方。但是这个时候正是由于不知道,所以测试人员和开发人员相互“不信任”,完成对软件质量的要求,这其中该应用怎样的策略?
问题四
在第十六章中,作者谈到了有关的软件工程的创新。有关思路创新、技术创新、制度创新等。作者举了一个例子关于对魔方的销售,进行问题的说明。作者每一步都分析都很透彻到位。我想知道的是,是否创新在销售上边和在软件工程上的创新是一样的?或者说,在软件工程上的创新怎么样才能说是一个创新而不是一种倒退?如何进行效率的评判和对其创新性的的适用原则和范围进行讨论衡量?
问题五
在第十一章中,作者提到设计好系统后,需要按照系统设计文档和代码指南进行自我审查和自我评判,最后进行代码重构。这套流程看起来非常清晰易懂,重构后的代码应该以最完美的效率和表现进入到生产中。
这引发了我很多问题,在我的认知中,系统重构应该是一套系统使用很多年之后,不可避免出现许许多多问题,一直修修补补勉强能用,但是等到重构时,就是再也无法修好了,现在需要的重构是不是就是以另一种更有经验的方式去重新实现一套相同功能的系统,对于之前的系统的存在意义是什么?作者认为的重构是对代码进行清理,减少冗余代码和完善内部结构的最好方式,那么此刻的重构是否还是属于开发过程的一部分,在时间较短情况下,怎样合理安排代码重构这一段时间?
源程序版本管理软件和项目管理软件调查分析
GitHub
GitHub在百度百科上的解释是
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。
所以GitHub的第一个主要的优点就是只支持Git语言,避免了SVN或者CVS等版本代码格式的混乱,直接统一了全部的代码风格和存储风格,更加容里分享和开源。
第二个优点是GitHub支持在线编辑代码,代码改动能够自动上传,就算是Git的新用户也能很快就掌握GitHub的使用方法。
第三个优点是GitHub的社交功能,fork,pull,star都能成为社交的起点,被程序员们成为“世界最大基佬网站”也不是吹得。
但是GitHub的缺点也是显而易见的。首先就是服务器在国外,国内访问比较慢,并且不支持中文。要想用好GitHub还得学好英文。同时,GitHub没有熟悉的图形操作界面,虽然对于程序员们来说,命令行更有优势,速度更快,但是这也直接加重了用户的学习成本。
### MicroSoft TSF
MicroSoft TSF是一种项目管理软件。其实也是可以被称为一个项目管理平台
>微软的团队代码管理服务平台Team Foundation(通常记作“TFS”) 是一种为 Microsoft 产品提供 源代码管理、 数据收集、 报告和项目跟踪,而为协作 软件开发 的项目。 可作为独立的软件,或 Visual Studio Team System (VSTS) 在服务器端后端平台。
Team Foundation 有自己的默认组和权限,可在项目、集合或服务器级别对它们进行设置。您可以创建自定义组,并在组和各个级别自定义权限。
由微软开发的软件,缺点很明显就是封闭,并且和自己的其他产品捆绑在一起。所以能用起来这一套的公司很少。但是优点确实是很多的,这套平台是在微软自己的软件开发基础之上,利用现有经验,配合优秀的理论进行研发。
软件支持敏捷开发、过程管理、过程改善等专业软件工程原理。对于源代码的管理比较好,也是他主要被用来做的事情。
### Trac
Trac使用Python开发的主要用于Web项目管理的软件
>Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有团队的开发过程。
Trac相对于以上两种来说,它的权限体系做的比较丰富,拥有TimeLine进行回顾,最核心的Ticket都是加速使用和方便简洁的开展项目开发工作。
对于缺点的话,目前暂时使用的还没有怎么发现。本处引用https://www.cnblogs.com/yuyue1216/p/5281544.html
不支持多项目,需求和缺陷没有分离,用 wiki 来替代 Word 等工具编写文档对于产品策划来说门槛太高了,中文化不完整,美术人员接触起来困难重重,不显示中文名,本地化做得很差,核心功能很少,不安装插件基本上没法用。
### Apple XCode
苹果公司开发的XCode是专用于苹果机上的IDE和项目管理软件。功能很多,很强大。
>Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由Apple Inc开发。Xcode是开发 macOS 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。
XCode在设计理念上还是符合苹果公司一贯的精致。功能很强大,编译速度超级快,应该是苹果公司在内部进行过算法配合。越美丽越危险。XCode美丽的外表下面是它前后版本升级之后,出现的各种无法适配和失效的问题。