First Task
一、作为一个从来没有过工程经验的人,第一次看到任正非写给员工的信时,发现信的内容无论是对于内行还是外行都是通俗易懂的,其中所包含的借鉴和参考的意义是通用而广泛的。就好比软件工程这样的学科,软件是简单的二进制构造的复杂聚合体,而工程学却有数学、管理学等一系列学科的融合,他们能够天然的结合为一体化的学科,这说明看似所需技术单一(计算机编程)的“软件”,实际上是复杂而庞大的。其所涉及到的知识,是不能仅仅依靠代码表达的。
二、这样来看,对于软件开发,编码可能并不是最主要的内容。曾看到过一篇文章,说到大厂中最优秀的程序员并不是那些程序写的天花烂醉的人,而是懂得各部门协作、理解软件需求、考虑后期维护、善于传授技术的人。这样来看,开发软件虽说必然需要一定的编程能力,但更需要的却是社会性能力和社会型人才。
三、1-抽象性,软件的主要体现是在功能上,而从代码上对于大众来说并没有什么表现;2-软件的生产方式以创造性思维为主,每一次软件开发都是具有创新性和突破性的,需要特定的技术和能力,而这种能力是无法通过短期培训或简单的操作示范得到的;3-软件如果有缺陷,那它的缺陷将很难被发现,如果能发现也同样需要借助软件来检测;4-软件需要一定的维护,而不同于一般物品格式化模板化的维护,软件的维护具有较高的复杂性,常常需要创新,换代;5-软件对使用环境具有较高的依赖性,甚至必须在特定环境下才能运行使用。
四、软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象(摘自百度百科)。产生的原因主要是:用户并不具备完善的软件相关知识,导致无法精确描述软件需求;进而导致开发人员对用户需求的理解产生偏差;而软件开发人员并非完全是长期工作人员,新人自然会缺乏处理大型软件项目的经验;而且即使是具有经验的开发人员,开发大型软件也难免产生疏漏和失误;另外,软件产生的时间并不算久远,相关的开发工具功能性能有时跟不上。
五、软件工程的要素包括方法、工具和过程。方法是完成软件开发的各项任务的技术方法;工具为运用方法而提供的自动的或半自动的软件工程的支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架。