题目1、

1.1 软件=程序+软件工程

程序=数据结构+算法、二叉树及二叉树的遍历、指针、参数、CC和link命令、静态数据、应用软件、源程序、软件服务、可执行代码、语音输入、网站、服务器;

开发语言或工具:Excel、C/C++、C#、VB、Unix Shell、Emacs、Powershell/VBScript、JavaScript、Perl、Python、ASP.NET、Ruby;

软件构架(Software Architecture)、软件设计与实现、编译、链接、操作系统、API、设计(软件构架)、软件测试(Test)、软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理);

软件企业=软件+ 商业模式;

软件开发的不同阶段:  玩具阶段-〉业余爱好阶段-〉探索阶段-〉成熟的产业阶段。

1.2 软件工程是什么

软件工具:例如编译工具、源代码管理工具、源代码编译工具;

软件工具系统:Microsoft Visual Studio、GitHub、Eclipse、ClearQuest等;

指令、工程、实体、数据的有序集合、系统软件、应用软件、恶意软件、软件病毒、设备驱动程序、工具软件;

软件开发过程中难处:复杂性(Complexity)、不可见性(Invisibility)、易变性(Changeability)、服从性(Conformity)、非连续性(Discontinuity);

偏理论的领域:微软学术搜索( Microsoft Academic Search)、计算机科学(Computer Science )、计算理论 ( Theoretical Computing )、信息和编码理论( Information and Coding Theory )、算法和数据结构( Algorithm and Data Structure )、形式化方法( Formal Methods )、 程序设计语言( Programming Language );

偏实践的领域: 计算机体系结构( Computer Architecture )、并行计算和分布式系统( Concurrent, Parallel and Distributed System )、实时系统和嵌人式系统( Real Time and Embedded System )、操作系统( Operating System )、计算机网络( Networking )、科学计算( Scientific Computing )、安全和密码学( Security and Cryptography )、人工智能( Artificial Intelligence );

相关的领域:如模式识别( Pattern Recognition)、 机器学习( Machine Learning)、数据挖掘( Data Mining)、信息提取( Information Retrieval)等、计算机图形学(Computer Graphics)、计算机视觉( Computer Vision)、多媒体( Multimedia )、数据库和大规模数据处理( Database and Large Scale Data Processing );

Null Reference、Algol W、冒烟测试(Smoke Test)、PDCA(Plan-Do-Check-Act);

IEEE、SWEBOK V3.0、软件需求、软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量、Cocomo模型、Bug;

软件工程的目标:用户满意度、可靠性、软件流程的质量、可维护性、单元测试、压力测试脚本。

1.3  练习与讨论

 ShrinkWrap (在包装盒子里面的软件)、Web APP (基于网页的软件)、Internal Software (企业或学校或某组织内部的软件)、Games (游戏)、Mobile Apps (手机应用)、Operating Systems (操作系统)、Tools (工具软件)。

题目2、

(1)我看了书中第一章概论部分,下面有这三种扩展推论:

程序= 算法 + 数据结构
软件= 程序 + 软件工程
软件企业= 软件 + 商业模式
由此得出一个结论:程序(算法,数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。
我的问题是为什么商业模式决定了一个软件企业的成败?难道软件企业就是为了利益而存在吗?
我查了有关资料,万达集团从一个以住宅开发为主的开发商一跃成为商业地产的领跑者,仔细分析他们的发展历程,无不贯穿一个核心理念——不断探索和创新企业的商业模式。 万达集团商业地产操作的演变过程,是一个商业模式的完善、升华的过程。风靡全国的订单式商业地产是万达首创的商业模式,这是他们企业第一阶段独特的商业模式:即先与商业地产的用户签订合同,然后按用户要求设计、建造。其实软件公司也一样,一个软件的发展需要一个完备的商业模式,因为这样才能更好的为客户服务,更具体全面的捕捉到用户的需求,占领软件市场。但是我还是存在疑惑,商业模式怎么才算好,是单纯由软件公司经营效益决定的吗?还是由用户粘合度决定的?
(2)我看了书中第三章:软件工程师的成长中的“技能的反面“这一节,作者由开始的“精通玩魔方”到“精通玩魔方,只到第二级。”再到“能够独立地还原一面,其他看口诀可搞定。”到最后,技能上不了台面。
巴克斯顿说技能的反面是“Problem Solving”——“解决问题”,例子:一个IT专业的大学生来面试,简历上写“技能:精通VisualStudio C#编程”。于是面试官请他用VisualStudio IDE写一段程序。一个“不精通”的面试者的编程过程实际上就是一个“解决问题”的过程。例如:
•嗯,怎么开始一个C#的命令行程序呢?
•定义数组是怎么弄的?是“int [] arr”还是“int arr[]",还是Array List,还是Array<T>.哦,我平时都是上网查的。哦,我还不知道还有MSDN网站。
•嗯,为什么编译没有通过呢?哦,这里少了一个分号。
•嗯,怎么设断点?怎么定义命令行参数?额,我要查一查。。。
你会发现他把时间都花在“解决(低层次)问题”上了,面试官考察的“算法技能”、“C#程序设计技能”都无暇顾及。
我的问题是为什么把时间都放在解决低层次问题上来,这不等于浪费时间吗?
我查了相关资料,为了玩好魔方而背一些口诀没什么问题,至少能说明这个人记忆力不错。最近我在网上看到大家评论一些国内的团队完全拷贝国外网站的设计,例如“点点”完全照搬国外的网站的设计。
有好心人说这些copy/paste作品是在“微创新”,可以吸引天使来投资等等。我不同意,这种“微创新”论调是对创新的侮辱,对大众智商的鄙视,对天使的亵渎。抛开道德和法律方面的问题不谈,我认为这种模仿的行为其实就是“背口诀”,希望按照口诀执行之后,魔方会同样出现一个神奇的结果。这些copy/paste的方法作为自己团队的练习,是可以的。你听说飞人乔丹每天练习1000次投篮,而且扣篮的时候吐舌头,你也每天练习1000次,并吐舌头,这并不犯法。但是你只凭这个就去找NBA球探来谈NBA选秀的事情,我觉得不大靠谱。根据我的实践,我得到了通过不断的练习,把那些低层次的问题都解决了,变成不经大脑的自动操作,然后才有时间和脑力来解决高层次的问题。但是我还是不太懂,我的困惑是这个解决低层次问题的时间占程序设计的多少?会不会出现由于这些问题的过多纠结而使整个工期过度延长。
(3)在第11章中,有下面这样一段内容 “5. 写好代码后,小飞对照设计文档和代码指南进行自我复审,重构代码。”

我的问题是对于代码重构不是很清楚。
我查了一些资料,都在强调着重构的好处,因为软件产品最初制造出来,具有良好架构的。但是随着时间的发展,需求发生变化,为了实现变更,不可避免的要违反最初的设计构架。经过几次修改后,软件的架构就千疮百孔了,并制约着新功能的实现等。最后新需求的开发成本会超过开发一个新的软件的成本,而导致这个软件的死亡。而重构在“软件系统的过程, 它不会改变代码的外部行为, 同时改善其内部结构。 这是一种严格的清理代码的方法, 它可以最大限度地减少引入错误的可能性。 本质上, 当重构代码时, 是在编写代码之后改进它的设计”
但是我对于具体的情况依然不是很了解,重构是对于旧的架构进行修改,来满足新的需求,那是在现有的构架基础上进行升级还是颠覆现有构架重构出新的构架来呢?
(4)在第四章结对编程中:在结对编程模式下,一对程序员肩并肩、平等的、互补的进行开发工作。
我的问题是: 在实际工作中结对编程能否实现?如何分配结对编程两个人的工作量?公司如何衡量结对编程两个人的工作量。
我查阅下面这些资料:有实验证明,平均下来,结对编程时间花销比单人编程增加10%的时间,但也会比单人编程减少15%的代码BUG。如果再算上后期代码的维护和学习成本,结对编程比单人编程更有效率,还更为节省成本。无论是对开发团队还是对于Business,结对编程都会是非常不错的Programming Practice。
下面是一些结对编程的优点:
1. 程序员互相帮助,互相教对方,可以得到能力上的互补。
2. 可以让编程环境有效地贯彻Design。
3. 增强代码和产品质量,并有效的减少BUG。
4. 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
5. 在编程中,相互讨论,可能更快更有效地解决问题。
但是我还是不太懂,难道对于有不同习惯的编程人员,可以在起工作不会产生麻烦,甚至矛盾?两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效率比单人更为低下,两个人合作就一定能保证效率吗?
(5)在第16章中,我们谈到了创新,谈到了创新的迷思,时机和招数等。列举了一些产品的创新,比如对于一个魔方的销售,针对不同的用户使用了一些不一样的商业模式。
我的问题是在软件工程领域中创新是什么样子的呢? 新的设计模式属于软件工程领域的创新么?
我查阅了相关资料:任何创新的思维均起源于创作力或创造力(Creativity),而创作力则起源于思考(Thinking),也是外国教育所倡导的Creativethinking (创思)的主要因素,Creative thinking 往往是为了解决一个问题所想出来的处理方法。

我还是有点明白,软件的创新是否像其他自然学科那样存在某些规律等待着我们去发现呢?

题目3、

(1)学习软件:考研帮、作业帮、XMind、小猿搜题、CSDN、中国慕课大学、扇贝阅读、外研随身学、学习通、默默背单词;

 (2)购物软件:苏宁易购、拼多多、当当、京东、淘票票、淘宝、美团、饿了吗、毒、SNKRS、铁路12306;

 (3)聊天交友软件:微信、QQ、网易邮箱大师、百度贴吧;

 (4)娱乐软件:网易云音乐、虎牙直播、腾讯视频;

 (5)工具软木:中国工商银行、中国建设银行、多拉打印、运动世界校园、百度网盘、UC浏览器、支付宝。

(6)游戏软件:皇室战争、炉石传说、多多自走棋、王者荣耀;

下面我以学习软件中的扇贝阅读、工具软件中的中国工商银行、游戏软件中的炉石传说为例来分析他们的特点。 

当初我下载中国工商银行是因为它可以实现网上汇款,我在2016年上高一的时候办理了一张工商银行的银行卡,银行工作人员推荐我用中国工商银行移动APP,所以我就下载了,我感觉中国工商银行还是非常实用的、用这一款APP汇款就不用去银行柜台,节省了时间。工商银行APP的目标不是单纯的盈利,在一定程度上他会吸引正在使用工商卡的人继续信任工商银行,也会在一定程度上增加客户粘性,这是他们的盈利点。炉石传说,这款非常烧脑的游戏我是通过同学推荐下载的,他的盈利模式很简单,就是通过每个月或者每个季度都会发布新的卡包,推出一系列的活动供玩家购买,还有平时游戏商店里一直售卖的各个版本的卡牌都可供玩家随时购买。炉石每周都会更新一个版本,其实是进行游戏平衡,有时也会进行BUG的修复,每次BUG的修复都会回馈给新老用户卡包或金币奖励,同类软件中,炉石相当于在霸主的地位,有新模式新颖,走过了很多年。我的学习软件很多,但我最喜欢的是扇贝阅读这款APP,这里有许多文章以新闻的模式呈现给每一个英语学习者,减少了英语学习的枯燥,是的读英语成为我的习惯,这对我们的英语口语加强提供了有力的支持,这款APP盈利点在于吸引用户,每个精编的英语短文都是有老师解读的,这是付费的。他们每天大约会推送10篇或者20篇新的文章,内容非常新颖,有利于考研、四六级、高考还有提高英语技能的学习。