构建之法——开始修行的第一大法
---恢复内容开始---
这个作业属于哪个课程 |
<课程> |
这个作业要求在哪里 |
<作业要求> |
我在这个课程的目标是 |
学习更多软件开发技巧,练好内功,弄清楚技术的本质,提升自己 |
这个作业在哪个具体方面帮助我实现目标 |
实现我对书本的了解,能更轻松地进行学习 |
其他参考文献 ... |
|
1.建立博客并介绍自己
(1)我的博客:我的博客
(2)自我介绍:我是一个偏向技术,看到理论就头大的人,自己对理论的东西不是很感兴趣,技术也没弄很好,所以还是先把手上学的学好吧。我是一个极其内向的男生,不是很喜欢社交,主要是开始的过程很麻烦,万事开头难嘛。记忆力方面,最近很少记东西了,以前的时候短期记忆能力很强,现在懒得记着记那。优点应该有一个学习能力强吧,什么东西上手还是挺快的。
2.阅读与思考
(以下内容参考和转载于 北航助教 陈彦吉的 博客 http://www.cnblogs.com/ChildishChange/p/7363123.html )
同学们现在大都面临的困难与迷茫,前人也一定有过。请看看别人怎么学习的,有些是科班,有些是野路子;有些成功,也有失败。请读完下面所有博客 (读这些博客你不吃亏,你也不上当!它们都是血泪经验或教训铸成的文字!)
主题 |
索引号 |
阅读前提问 |
链接 |
科班出身 |
A |
把每天把要做的事情分成ABCD四类:A-紧迫且重要;B-重要不紧迫;C-紧迫不重要;D-不重要不紧迫。你如何保证你的效率? |
|
|
B |
你是否也觉得自己是科班,但没学懂计算机? |
|
|
C |
把每天胡思乱想的东西记在一个笔记本上,作为思维快照,并常常翻回去自省,看看过去和现在的变化。这样的习惯呢? |
|
|
注 |
以上三篇来自《IT小小鸟的故事》 |
|
|
D |
偏科生自学摸索的道路。实习经验对应届生重要吗? |
|
非科班出身 |
E |
很多同学看不起大学老师按部就班地教课,他们心想,我看视频也能学会的,为何要来听课? |
|
|
F |
半路出家,认真学习,对自己狠心,不断在实践中进步 |
|
|
G |
文科生转编程与他对大学教育的批判 |
|
大佬的博客 |
H |
技术栈和大佬的爆栈之旅 |
|
|
I |
大佬在职场中的摸爬滚打 |
|
|
J |
大佬给出的职业规划建议 |
|
|
K |
热情、能力、选择 |
|
|
L |
大佬的成长史与如何进入微软亚研院,他的知乎 |
|
一流的大学 |
M |
美国研究生的一些计算机课程和你上过的专业课有什么不同? |
|
|
N |
你在大学中体验到了哪种师生关系?你希望在这门课中采用哪种师生关系? |
|
|
O |
世界一流大学怎么教软件工程?这种方式是你喜欢的吗? |
|
|
P |
不要轻易在简历上写我热爱编程,我热爱学习。你对计算机的热情是怎样的? |
|
补充阅读 |
Q |
文章较长,可以暂时不看 |
|
编程人生 |
R |
文章较长,可以暂时不看 |
|
|
|
|
|
阅读以上材料,并回答下面几个问题:
(1)回想一下你初入大学时对你所在专业的畅想
- 当初你是如何做出选择你所在专业的决定的?
答:高中的时候就对电脑技术啥的很痴迷,搜罗了很多资料之后,比较了计科和软工两个学科,最后选择了软工,我所有的志愿的第一专业都是软件工程。
- 你认为过去一(两)年中接触到的课程是否符合你对你自己所在专业的期待,为什么?
答:当初选择软工是因为觉得软工相较于计科技术性强,计科学出来之后不能凭借所学的知识马上找到工作,而软工可以,不过虽然是这样,还是与我的期望有一点不一样,我以为会学很多技术呢... 结果是技术和理论参半,也都那样吧,没有很抵触。
- 你觉得你所在的专业是你喜欢的领域吗,它是你擅长的领域吗?
答:肯定是我喜欢的领域,所有志愿第一专业都是软工。也算是擅长吧,主要是自己喜欢。
- 将来你会选择从事和你专业相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
答:将来肯定从事和自己专业相关的工作,这个专业技术性强,也好找工作。想留在成都,因为哥哥在成都,以前也是互联网专业的,能给予我多少一点参考和建议。
(2)对照前人们走过的路和描述未来发展,现在的你
- 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
答:已具备的专业知识、技能、能力:软件设计模式、C语言、C#…… 已经写过的代码量:未知... 最复杂的项目:java实训时设计的项目
- 离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
答:专业知识上很欠缺,因为大学里面也不能学到很多。技能方面吧,练得也少,差距也挺大的,需要日后多写写代码。能力不知道怎么说...
(3)目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
- 对照以上你阅读的前人们的经历,你的选择是什么?
答:考研
- 在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
答:劣势就是晚出去工作几年,还要多学习,多努力。优势就是,找工作更好找一些,毕竟现在比较大一点的公司基本上都是研究生
- 针对你的选择,你给自己的大三设定的规划安排是什么?
答:好好学好专业课,下学期好好准备考研
- 你对于实现自己的梦想已经做了或者计划做什么样的准备?
答:已经计划好了什么时候该干什么,努力就完事了
3.提有质量的问题
快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。注明是哪一章哪一节。要有观点、有证据或分析。字数不是直接的考核标准,但是要求篇幅长到能把观点表述清楚。
(如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html,以及在互联网时代如何提问题。 还有这些要点:
- 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文。
- 列出一些事例或资料,支持你的提问 。
- 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
一个模板可以是这样:
我看了这一段文字(引用文字),有这个问题(提出问题)。我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。
【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。
d. 大学生应该能写出自己的思考, 而不是摘抄书本内容。
e. 提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。)
- 第一个问题:在看了第十六章迷思之三的内容:为什么Dvorak键盘没有取代QWERTY键盘的故事上,我查了很多资料,结合自己的一些想法,猜想了一下为什么dvorak键盘没有被使用的原因。有的人认为,之所以dvorak键盘没有被使用的原因是因为一种现象叫“路径依赖”,指给定条件下人们的决策选择受制于其过去的决策,即使过去的境况可能已经过时。但是文中也提到了,QWERTY键盘最初设计的时候,是因为要使用打字机,打自己的打字臂由于在狭小的空间快速移动而容易碰撞,因此要把经常一起出现的字符分开,这样才能减少碰撞的几率。这么看来,键盘发展到现在,其实都是人在操控,那么人要不要避免这种问题呢(使用频繁的字母在一起,只是自己的手发生碰撞)。显然,这是可能的,也就是说用dvorak键盘并不会提高多少,因为人的手也是一种机械。所以dvorak键盘高频区太集中反而提高错误率。 16.1.3 P344
- 第二个问题:软件工程到底是什么? 自己就是学软件工程学科的,但是对于软件工程到底是什么这个问题,我觉得我一定不能给出别人满意的答案。以下信息来自维基百科:
关于软件工程的定义,在GB/T11457-2006《信息技术 软件工程术语》中将其定义为"应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、和维护的工程或进行研究的学科"。
包括:
- 创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。[4]
- 应用系统化,遵从原则,可被计量的方法来发展、操作及维护软件;也就是把工程应用到软件上。[5]
- 与开发、管理及更新软件产品有关的理论、方法及工具。[6]
- 一种知识或学科,目标是生产质量良好、准时交货、符合预算,并满足用户所需的软件。[7]
- 实际应用科学知识在设计、建构计算机程序,与相伴而来所产生的文件,以及后续的操作和维护上。[8]
- 使用与系统化生产和维护软件产品有关之技术与管理的知识,使软件开发与修改可在有限的时间与费用下进行。[9]
- 建造由工程师团队所开发之大型软件系统有关的知识学科。[10]
- 对软件分析、设计、实施及维护的一种系统化方法。[11]
- 系统化地应用工具和技术于开发以计算机为主的应用。[12]
- 软件工程是关于设计和开发优质软件。[13]
定义如此之多,我觉得最基本的就是,软件工程就是创作一个软件的建筑图。
- 第三个问题:为什么要进行专门的软件测试?P276
“测试软件的第一个可能的目标就是确保它符合规范。这个目标是大多数程序员在讨论测试时想到的:它涵盖了单元测试和手工测试,它也包括代码审查。你的软件具有某些必须的功能、规范,你想确保它在现在和未来也确实是这样的。”------源自CSDN博客
- 第四个问题:课本第十四章质量保障中有一个问题:盲目信任“专业人士”扮演的角色。我觉得这个例子举得过于生硬了。一个头脑清晰的人是不会这样乱用人的。正确的一半做法不都应该是请专业人士办完事之后(不能是请,要有报酬的,没有报酬让别人做事别人不会有那份责任感),再找别人核实一下,确保一下,然后还要让专业人士继续进行维护工作。我觉得这个例子过于生硬,不会有人这么干的。
- 第五个问题:第十四章P312中有一个问题:既然有专人负责,那我就不用负责了。坐着觉得这种方式不对,可我觉得这才是最效率的方式,每个人都有自己的优势,干好自己优势范围内的事情,专注专一一些岂不是更好吗,不属于自己的领域啥的就不要去掺和嘛,自己不一定做好,自己也不一定会,自己也不能切中要点,还是各司其职是最好的效率最高的办法。
4.了解和调查源程序版本管理工具
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,列举至少三个或以上的版本管理软件各有什么优缺点? (提示:搜索一下Git、GitHub、Microsoft TFS、Bitbucket、Mercurial、Trac、Bugzilla、Rational,Apple XCode)
- git:
-
优点:
-
适合分布式开发,强调个体。
-
公共服务器压力和数据量都不会太大。
-
速度快、灵活。
-
任意两个开发者之间可以很容易的解决冲突。
-
离线工作。
-
缺点:
-
资料少(起码中文资料很少)。
-
学习周期相对而言比较长。
-
不符合常规思维。
-
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
-
- github:
- 优点:
- GitHub是一个非常万能的工具。对于任何大小的项目,他都是理想的工具;他也是伟大的web工作流工具。首先,他可以作为一个版本控制系统和协作工具,用它来发布工作
。 - 利用GitHub,你可以将项目存档,与其他人分享交流,并让其他开发者帮助你一起完成这个项目。优点在于,他支持多人共同完成一个项目,因此你们可以在同一页面对话交流。
- 创建自己的项目,并备份,代码不需要保存在本地或者服务器,GitHub做得非常理想。
- 学习Git也有很多好处。他被视为一个预先维护过程,你可以按自己的需要恢复、提交出现问题,或者您需要恢复任何形式的代码,可以避免很多麻烦。Git最好的特性之一是能够跟踪错误,这让使用Github变得更加简单。Bugs可以公开,你可以通过Github评论,提交错误。
- 在GitHub页面,你可以直接开始,而不需要设置主机或者DNS。
- GitHub是一个非常万能的工具。对于任何大小的项目,他都是理想的工具;他也是伟大的web工作流工具。首先,他可以作为一个版本控制系统和协作工具,用它来发布工作
- 缺点:
- 优点:
-
- 如果,你是Github使用新手,首先的挑战就是摆正心态——需要不断实践和时间。
- 他可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
- 这是由设计者决定的,然而,一些人发现 GUI 有点混乱,选择CLI代替。一些开发人员学习主要使用Git命令,这样可以解释为什么他们不太喜欢GUI的原因了。稍加练习,命令的学习是不太困难的。然而,你喜欢天天写命令吗?特别是跟踪项目历史或解决冲突的时候。所以就有了另外一群喜欢GUI的人们。将提交、修改、移动文件等操作可视化,会有一个更好的体验。而这些,就如之前提到的,需要时间来适应。
- 如果,你专门在GIthub上工作,版本控制存储库就值得你拥有,也需要你长期付出。
- Microsoft TFS:
- 优点:
-
任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用,集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM,能与 VS 无缝接合。
-
- 缺点:
- 搭建、维护tfs比较复杂,硬件要求也比较高。
- 优点:
5.一些希望
“他山之石,可以攻玉”
“以人为鉴,可以明得失”
“你在学校里的困难和迷茫,别人一定有过”
我们希望通过阅读这些博客与撰写自己的博客,你能够有以下一点或多点收获:
- 了解到别人的成功和失败,从经历相同的人身上获得经验、警示或者心理上的支持
- 吸收前人的经验解答自己曾经有过的疑惑
- 提出新的疑问
- 坚定自己下一步的发展或为自己的进一步发展给出新的可能性
总结起来就是:
读别人的故事,扩大自己的眼界;结合他人的经历与观点对自己进行一个回顾式的剖析,而且最终能够怀着希望继续前行。
6.评分细则
博客评分规则(总分100)
(1)、建立博客并介绍自己(20)
(2)、阅读与思考(30)
其中每个大问题各10分,大问题中的小问题平分10分的分值。
(3)、提出有质量的问题(30)
按照问题的数量和质量给分。
(4)、了解和调查源程序版本管理工具(20)
按照列出源程序版本管理工具的数量和对其理解的质量给分。
---恢复内容结束---