第一次阅读和准备作业
这个作业属于哪个课程 |
<课程的链接> |
这个作业要求在哪里 |
<作业要求的链接> |
我在这个课程的目标是 |
<学习软件生命周期中的各个部分对软件的影响和作用> |
这个作业在哪个具体方面帮助我实现目标 |
<提供了一些具体的学习方法> |
一.博客地址以及个人简介
- 博客地址:https://www.cnblogs.com/luomei/
- 本人是西南石油大学软件工程17级学生。首先我从第一次接触编程到现在已经将近十年了,这对我的影响是有好有坏的,好处在于:可以快速进入大学的学习状态。坏处在于:无法调整自己的心态,经常“吃老本”(虽然也没有多少老本,而且也基本吃完了)。尽管在大二上有努力的改变这种心理状态,但是效果其实并不是特别明显,所以这学期,我更多的是希望自己可以在老师的指导下,获得更多的自己的新体验。其次,谈一谈我自己的闪光点。因为从小到大,对时间是非常敏感的,所以几乎没有出现过迟到现象。在高中以前,是比较不擅于深入交谈的,虽然那个时候非常擅于交际,但对别人的了解基本也就停留在表层上,经过高中语文老师对我们思维能力与表达能力的锻炼,我现在基本上已经可以在有互动的情况下说上三四个小时,并且在这段时间内更深入的去理解对方,观察对方。同时,我也是个非常富有同理心的人。在努力克服自己对陌生事物的恐惧,所以经常会尝试一些新东西,并努力做好。大多数时候是富有想象力的,并也在不断的锻炼自己这一方面,防止自己思想过于僵化。
二.阅读与思考
(1)我初入大学时对软件工程专业的畅想
- 我是如何做出选择软件工程专业的决定的?
选择计算机类专业是我从小就决定了的,说来也有点搞笑,就是我个人非常喜欢敲键盘,不管是用键盘干什么吧,就是非常的喜欢那种感受。回到正题,由于是外省考生,所以在考虑了地域,分数后,西南石油大学正好对我所在的高考省份招收软件工程专业的学生,而且只有这一个专业是计算机类的,所以就选择了这个学校这个专业。
- 过去两年中接触到的课程是否符合我对软件工程专业的期待以及原因
我认为在过去的两年中接触到的课程大概符合我对软件工程专业的期待,但是由于课程安排的原因,教授的内容相对来说是比较少的,那个时候我也没有特别强的自主意识,所以没有讲授的内容,我也从来没有关注过,但现在回过头去想想,在过去的两年里,唯一的自主性学习也是为了完成课程考核,而不是为了提升自己。但其实程序员的自学能力是非常重要的,在少量的阅读,少量的练习下,自学能力的培养是比较欠缺的,不过老师们在课堂上已经开始逐步改善了,倾向于学生对于课程的自主预习,但对于真正的课外拓展还是比较少涉及。
- 软件工程是我喜欢的领域吗,它是我擅长的领域吗?
首先软件工程肯定是我喜欢的领域,虽然我还没有达到热爱,但我可以明确的知道我是喜欢这个专业的。
是否擅长这个领域,个人觉得,软件工程还是比较大的一个范围,所以我对其中的一部分是比较擅长的,一部分是比较欠缺的。
- 将来我会选择从事软件开发相关的工作吗?我想去的城市、公司和岗位。
我会选择从事软件开发相关的工作,想去的城市是上海或浙江(目前居住在浙江),想去的公司暂时还没有考虑。想做的岗位包括web前端工程师,或者软件评测师,但这也只是目前的想法,因为没有成熟的技术,所以需要在后续发展中,观察自己在哪一方面有更好的潜能,再去做选择。(虽然可能时间上有点晚了)
(2)即将大三的我,对照前人们走过的路和描述未来发展,现在的我
- 自我感觉我已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?
自我感觉我具备的专业知识是比较浅的,对数据结构,数据库都只是有一个大概的理解。专业技能上,我想自学技能应该算一个吧,虽然在前文说我的自主意识不够,但相比较身边的人来说,自主意识还是比较强烈的。专业能力的话,可能就只是达到了学校授课所能达到的标准。总的来说,感觉个人除了各类知识的初步认识,对于更多的深入的理解是比较欠缺的。已经写过的代码量也没有认真计算过,但是按照实验报告的量,和平常的自主练习,大概有四五千的样子,但这是包括所有练习,真正成型的代码量并不多。
- 离成为一个合格的软件工程专业本科毕业生,我在专业知识、技能、能力上还差距哪些?
专业知识上缺乏深入的理解,缺乏深入的学习。专业技能上缺乏大量的练习,缺乏有意义的成果。专业能力上缺乏专注的个人自主培养,缺乏完整性的指导。
(3)大三是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
- 对照我阅读的前人们的经历,我的选择是什么?
- 在这种选择下,我认为我相比其他同学来说有何优势,有何劣势?
- 针对我的选择,我给自己的大三设定的规划安排是什么?
博客B[1]的作者说“做自己的主人。不要辜负上帝给我们的聪慧的大脑,用它来独立地想问题,用自己的眼睛来看世界,用自己的心灵来感受,用自己的金口来提问。不要害怕,不要退缩。”,这个想法和我是非常一致的,前人们的经验只能让我看到了,在我之前,有一部分人是如何走过这段路程的,而我要如何做,是需要我自己的独立思考的。那我是利用排除法来做的,排除了出国的可能性,没有考公的意愿,所以就是考研还是工作,说实话,要让我自己现在选,我是选不出来的,只知道,在这两方中,我更偏向于考研,而且原因有一部分是我对自己的后续发展没有太大的预估,没有太强的自信心,我现在还无法明确自己以后的技术能力,我觉得如果我能在自己的努力下,在自己的这个专业中,选择一个明确的方向,并在正式做出选择前就做到一定的程度,那选择工作会是更好的选择。
既然我没有一个非常明确的决定,所以我就选择我更倾向的考研,除去我对自己的不自信,想要逃避工作的这样一种想法,我选择考研,更重要的因素是,读研后,是在一个依旧比较稳定的状态下进行学习,易变性较小,我可能会有更多的时间去对自己做出更全面的理解,以及对软件工程这个专业有更深入的看法,因为其实,对于一个真正喜欢的东西,如果只是看到表面,是很难过的。
在选择考研的情况下,我看了O[2]作者所展现的他在美国读研期间的老师对于课程教学的安排,让我起码对于美国的研究生有了一个基础概念。对于考研的优势,我觉得是我个人的学习能力还是不错的,自主学习意识在努力以后也能得到比较好的强化,其次是我在有意识的构建自己对于软件工程的理解体系,虽然还只是基础的一小部分,但我觉得有自己的全局意识是非常重要的。然而劣势更突出一些,所有学习过的知识都不够细化,也不够深入,我想这不仅是我的劣势,也是很多人的劣势。
而且就像F[3]作者提到的“总之就是编程并不像宣传的那样,三个月就可以学会,不可能。想理解一些东西必须经历一个很长的时间,还需要在使用过程中感悟。慢慢入门以后,还有非常多的东西需要学习。”所在在选择考研的前提下,我是需要学习更多的知识的,学习更多深入的东西。
针对我的选择,在大三这一年我的规划安排就是,在完成课程安排的前提下,选择一个合适的方向深入钻研,并尽量提高自己的自学能力,比如搜索资料的能力,比如概括知识的能力,比如形成自己的知识体系的能力等。
[1] https://book.douban.com/subject/4006425/discussion/22803961/
[2] https://zhuanlan.zhihu.com/p/20610349
[3] http://www.cnblogs.com/Tpf386/p/4798437.html
三. 提出的问题
问题一、
①问题一的来源:《构建之法》3.2 软件工程师的思维误区 章节对于“过早优化”这个误区的描述,并写了“过早的优化是一切罪恶的根源”。
②问题一的具体阐述:我认为过早的优化并不是完全错误的,评价为“罪恶的根源”是否有些过头了?因为在我的思想里,存在可优化的空间,为什么要浪费这些空间?
③对于问题一的个人思考:如果作为一个商业化的工程师,我能理解过早过多的优化是罪恶的,因为是没有考虑到实际需求的,用了不必要的时间去优化不重要的模块,这是偏离了顾客对于软件的期待的,但作为一个程序员或者软件工程师,应该做的不是尽可能的优化差的算法之类的吗?如果在已经知道某个局部问题的可优化方法后而不去做,是否违背了软件对于软件工程师的意义?总的来说,我个人无法理解,在工作上就要抛弃一些过早优化的想法。我认为,在这个时代,大家需要努力的不是把过早的优化定义为“一切罪恶的根源”,而是应该尽可能的提升软件开发的过程,把“过早”这个头衔摘掉,真正的将那些可以优化的源头发展起来。而且我对于书上所举出的例子,不是非常的认同,虽然这帮助我理解到了过早优化存在的现实问题,但是很多问题只能在某些方面类比,从全局来看,是否真的不应该存在“过早的优化”。而且我对于“过早”的理解是,目前没必要,但是未来是应该要做到的。
问题二、
①问题二的来源:《构建之法》4.5 结对编程章节+4.6 两人合作的不同阶段和技巧章节中提到的“怎么给别人提供容易接受的反馈呢”+7.2.7投资质量小节中提到的测试人员与开发人员的对立情绪+9.4领导力——高效的团队讨论章节中描述大多数成员“怀着怒火,以迷惑、疲惫的心情离开了会议”。
②问题二的具体阐述:在上述小节中,无一例外都展现了作为软件开发主体“人”这个因素在软件开发周期中情绪对软件的影响,那是否存在一种较为理性的相处模式并能够让大多数人接受,而不是一味的磨合?
③对于问题二的前期个人思考:对于这个问题,我的思想状态和问题一的思想状态是一致的,我认为软件工程师的体力和情绪是可优化因素,虽然这么说有些“不近人情”甚至“残忍”,但人们过于的迁就“人”的因素,对于软件发展来说,可能是会达到一种瓶颈期的,如果是单纯的软件的不断优化,而在配对的“人”这一方面处于原始状态的话,那我个人觉得是会产生矛盾的。这一点在其他行业中,我觉得也是一样的,当然,我说这些不代表我觉得在软件的生命周期中,不需要任何的情感,只是如何弱化不良情绪,使得“人”这个因素在保持活力的同时,尽可能的保持相对理性,提高人的稳定性。比如“怎么给别人提供容易接受的反馈”,这一动作需要完成两件事,第一件事是有反馈内容,第二件事是将反馈内容优化,使得对方可接受程度提高。那这种优化实际上是在向“人”的弱项优化,为了满足沟通的舒适性,而做的优化,对于软件来说,可能没有特别多的实质性作用,那为什么不能只做第一件事呢?例如,经过不良情绪控制的培训,团队内部成员可以直接高效的沟通,而不必浪费精力优化弱势因素带来的问题,也可以减少后期团队的磨合时间,因为在初期对实习人员的规范化培训,往往比较少涉及到交流沟通的问题。网络上所查询到的更多的是笼统的对整个社会职员的情绪管控培训,但每个行业都有其独特性,所需要引导的方向也不同。
④对于问题二的资料查找:http://cdmd.cnki.com.cn/Article/CDMD-10246-1014444574.htm
⑤对于问题二的后期个人思考:在看了相关资料之后,我认为,尽可能的把“交流”规范化是一个不错的选择,但这里我想强调的是工作中的“交流”规范化,但是也要注意工作外的员工的情绪疏导(书中9.4小节中提到了需要表达直觉和感情),这样才能更好地保持一个员工的活力。
问题三、
①问题三的来源:《构建之法》。3.1个人能力的衡量与发展这一章节中谈到的更多的是对于个人在团队中或者在进入工作领域后的一种衡量与发展。
②问题三的具体阐述:在没有任何经验的前提下,如何在本科期间快速的发现自己擅长的领域,从而做出正确的自我衡量以及自我发展?
③对于问题三的个人思考:由于文章更多的是阐述软件工程师在进入团队和公司后的具体发展,以及进入团队和公司的具体要求,并没有过多的涉及本科生在大学阶段,所以对于“如何起跑”有一定的疑惑,不明白要如何在有限的时间内快速发现自己的兴趣所在,因为我没有办法把所有领域都接触一遍,也没有太多机会接触到各种各样的已经在职场中的人,而且,如果只是光看别人的故事,对于我自己来说,并没有太多实质性的意见,不去实际的做,我个人认为是没法判断出自己对这个领域的喜爱或者厌恶程度的。
问题四、
①问题四的来源:《构建之法》5.1非团队与团队章节中主要描述了团队模式对于非团队模式的优势,并认为非团队的七八个人是“乌合之众”,各自完成任务就领钱走人,在后续的特点总结中又说道“非团队成员,每个人想搬多少就搬多少,不想干了就结算工钱走人”。
②问题四的具体阐述:那非团队模式在企业的软件开发过程中是不可以使用的吗?
③对于问题四的个人思考:个人认为,文中所涉及的团队与非团队概念可以提升到以企业作为个体的层次上来看,在实际的具体的企业内部团队中,使用团队开发是更加好的选择,但是非团队开发其实在现实中也是有体现的,个人认为,软件外包就是一种相对的非团队开发,也是完成任务就领钱走人,说到这里,就需要对书中所描述的两种状态提出一个小看法,“完成任务就领钱走人”和“每个人想搬多少就搬多少”是有冲突的,任务表示是设置了目标量的,当出现“任性”的情况的时候,任务发布者肯定是对此做了风险规避的,因为非团队成员也是以利益为驱动目标的,所以从企业层次来看,是存在非团队模式的,即各取所需,同时,企业之间也是可以存在团队模式的。
问题五、
①问题五的来源:《构建之法》15.1.6招数:砍掉功能章节中写到某模块无法在截止时间前达到预期的设计需求,那三个愿望(便宜,好,快)中只能满足两个怎么办?
②问题五的具体阐述:相比较砍掉功能来说,弱化功能是否是个好方法?
③对于问题五的个人思考:某模块无法在截止时间前达到预期的设计需求,所以才会导致出现三个愿望只能满足两个,但是是否有办法,或者说有比较明确的标准可以去弱化无法完全实现的功能需求,把弱化功能在短时间内实现,使得沉没成本得到一部分的体现?
四.了解和调查源程序版本管理工具
①Microsoft TFS
优点:
1、不受语言限制,可使用 Java、Python、HTML5、JavaScript 和 C# 等。
2、可供 5 个团队成员免费与 TFS Express 搭配使用。
缺点:
1、TFS 不支持绑定已有的SharePoint 网站到新建的团队项目上。
2、不可以生成一个现有Site Collection的子网站。
②Apple XCode
优点:
1、在主编辑器中编辑源代码时,Assistant可以显示对应的标题,子类或超类或相关测试。
2、Interface Builder设计画布集成在Xcode IDE中,使得在不编写任何代码的情况下对完整用户界面进行原型设计变得简单。
3、顶级的Source Control菜单可以轻松执行分支和合并操作,非常适合分布式团队。
缺点:
1、非递增式编译,一个文件修改,整个工程需要重新编译。
③GitHub
优点:
1、开源,不必从头开始构建所有内容。制作喜欢的项目的副本,在私有存储库中进行实验,并定制工具和功能。
2、可以提出建议,修复错误,改进文档或为项目贡献代码。
缺点:
1、对于初学者,需要不断的磨合和实践。
2、不是最好的设计跟踪工具。
Ps:由于上述工具并没有使用过,所以上述优缺点是网上查找的资料,可能会有不符合实际的地方。