项目 | 内容 |
---|---|
这个作业属于哪个课程 | 软件工程 |
这个作业的要求在哪里 | 第一次作业 |
这个作业在哪个具体方面帮助我实现目标 | 读构建之法,学习软件开发的不二法门 |
快速看完整部教材,列出你仍然不懂的5到10个问题
结对编程
在结对编程的模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排地坐在一台电脑前,面对同一个显示器,使用过同一个键盘、同一个鼠标一起工作。
看这本书之前一直以为结对编程就是两个人将写好的程序凑一下就可以了。但是本书完全给我了结对编程的新概念。但是我对书中提到的结对编程所需要的编程环境还是有一些怀疑,也就是感觉上面的这段说的有些过于苛刻了。我想也是指意思上的吧,而不是完全现实的工作中的吧,如果真的是那样的话,那程序员只能在公司结对编程了。那岂不是天天要加班,而且很晚。如果公司直接提供住的地方倒还好_〆(´Д` )。
产品的周期
随着时间的推移,这几类功能也会发生变化,例如手机的多点触摸曾经是“惊喜”的功能,后来是所有厂家竞争的核心功能,再后来已经是最基本的功能了。
随着科技的进步,一些早期的核心技术注定会成为随处可见的一般产品。这里面有两点,一点是,总有一些核心技术是无法替代的,但是这些技术更偏向于底层技术层,比如手机摄像机处理图片的算法。另一个是给你“惊喜”的人总是不断给你“惊喜”,这里面与公司创新文化有关。而不是仅仅局限于,所有产品终将会成为十分大众化的产物。我认为这里面还有一个十分重要的因素那就是商业模式,好的商业模式往往会是简单的产品获取一个长期的优势,比如当时的谷歌提出浏览器,虽然他们的市场也靠算法打开,但是盈利却是靠着谷歌的商业模式的。
关于goto语句的使用
函数最好有单一的出口,为了达到这一目的,可以使用goto。
在上学期的编译原理的课程中,于同学交流中,发现他确实用到了goto语句,而且当时觉得他用的goto语句没什么问题,还十分的方便。虽然后来没有继续和他讨论这个问题,但是不用goto语句使为了保证代码的整体结构,我想在较大工程中,更应该考虑到项目的整体性,所以我们更应该不使用goto才对啊。当然这都是理论上的结果,没在工程中实践过,所以可能有其他问题我不知道。
用户的体验
我们的软件要为新手和专家提供可定制化的设计。一些操作方式,如快捷操作,用户可以自行调整。我们还应该为存在某些障碍的用户(色弱、色盲、盲人、听力有缺陷的用户、操作键盘鼠标不方便的用户等)提供一定程度的便利。对于长期使用某个软件的用户,软件应该能适应用户的使用习惯,让用户越用越顺手,最后产生感情上的好感和忠诚度。
对于这里的观点。我的疑问是,一个产品首先是面对广大用户,所谓广大用户,我想应该是最广泛的人群。所以我们在产品开发的时候,某些产品是针对所有用户的。比如说微信,人人都能用上微信,但是还是有一部分人,(接触手机少的老年人)他们使用微信起来还是有一些麻烦。所以老人一般还是偏向于用电话。那么为什么微信不设计的更加对老人友好一些呢?我认为这里面需要考虑到产品本身面对的人群。对于又特殊需求的人群来说,我们可以专门的为其设计其它的产品,如果一味的在针对大众的产品上添加其它功能的话会使产品变得臃肿。当然,这只是我一己之见,实际的开发中应该会有更多需要权衡的问题。
项目经理
软件团队里除了能写代码、测试代码和画图做设计的成员,还有一类角色,不做上面这些事情但也很重要,我们叫他们项目经理——PM。
对于产品开发,在我看来这条链会是,客户`产品经理工程师产品经理客户的样子,那么项目经理应该要在实现于功能之间做到最好的权重,使一味的追求用户的体验还是考虑到开发过程的构架,或者说是是否有必要开发呢?
IT行业的创新
这个想法看起来没什么错,我们不就是为了成为某个领域的专家,才来上学,拿学位,希望拿到学位之后成为专家,然后再开始这个领域的创新?但是统计数据表明,70%的创新者说,他们最成功的创新,是在他们的拿手领域之外发现的。
对于这个观点,我想的是,各个行业之间是有必然的联系的,往往存在的情况是,我们处在这个行业,但是我们的观点也会对另一个行业带来创新,虽然这只是少数情况下。但是有一个不可忽略的一点就是,关于创新的模式。没有人说,不是该领域内的创新才会对这个行业的发展起作用。比如说,有些创新往往只是商业模式上的,并不是关系到核心的技术。
“软件” 和 “软件工程” 这些词汇是如何出现的
软件最早是由Alan Turing在他1935年的关于可计算数字的论文中提出的,但他所指的软件并不是我们今天所理解的软件。最早在工程背景下出版的术语“软件”是在1953年8月由Richard R. Carhart在兰德公司提出的。
“软件工程”一词第一次出现在1965年6月出版的“COMPUTERS and AUTOMATION”中。玛格丽特·汉密尔顿(Margaret Hamilton)提出了将该学科命名为“软件工程”的想法,以此作为赋予其合法性的一种方式。那时人们对于软件不太重视,对它的印象也是一种艺术,而不是一门科学。但是Margaret Hamilton却坚信软件是艺术和科学地综合,应该为发明者争取应得的尊重,最后她也做到了。
请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事
Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样,完全值得信任。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
主流项目管理软件 | 优点 | 缺点 |
---|---|---|
Microsoft TFS | 方便小团队对于需求、进度的掌握,集成了项目管理、版本控制、BUG追踪等功能,且与VS完美接合。 | 搭建复杂,硬件需求高 |
GitHub | 功能极其齐全,方便交流合作 | 学习成本较高,需要通过较长时间的学习、熟悉后才能流畅使用各种命令 |
Trac | 扩充性好,权限体系完备,较为灵活 | 不支持多项目,汉化不完整,中文支持较差 |
Bugzilla | 免费,且有中文支持 | 只能管理缺陷,功能较少 |
Apple XCode | 自动创建分类图表,撤回、重做、保存等常用功能使用方便,不需要命令、代码 | 在版本更新后,部分插件可能失效,导致诸多问题。 |
Mercurial | 有revset,拓展性好,部署较为简单 | 强制向下兼容 |