原创 多数学生认为“软件靠吃年轻饭”之我见

2012-4-17 10:35 6530 10 40 分类: 消费电子

前几天做过一个小调查,问觉得“软件靠吃年轻饭”的有多少,结果近80%的人举起了手。多数人觉得软件靠吃年轻饭,是因为觉得做软件就是埋头写代码、通宵写代码、玩命写代码,靠的是年轻的拼劲和体力。

 

  1. 吃过猪肉不代表见过猪跑,软件不只是写代码而已

 

先让大家看个行业数据:在软件行业里,产业化团队的生产率只有1000代码行/年,当然这是以人为单位。许多在校大学生光作业和考试写过的代码,早就超过1000代码行/年的速率,就我前阵子提过的那个一小时完成的小项目,也有近200的代码行,按这个数量级看来,1000代码行不过是一天的工作量。

 

大家不用吃惊或怀疑,上面的数据是真实的情况(见《人月神话》)。为什么会有这么大的反差?因为我们说的是程序,而人家说的是软件,这得看看我们平日的工作和软件行业的真实产出有哪些差距。

 

我们学生平日所做的,叫程序,它本身是完整的,可以由作者在所开发的系统平台上运行。但那样的东西还未能达到实用化、商业化、产业化的高度,还有两种途径可以使程序转变成更有用的、但成本更高的产物。

 

一种是将程序变成编程产品,这是可以被任何人运行、测试、修复和扩展的程序。它可以在多种操作系统平台上运行,供多套数据使用。这就要求程序必须按照普遍认可的风格来编写,特别是输入的范围和形式应广泛适用于各种合理的基本算法;接着还得对程序进行彻底的测试,确保它的健壮性和可靠性,这意味着必须准备、运行和记录详尽的测试用例库(绝大多数学生编程时都未考虑到测试的因素),用来检测输入的边值和范围;最后还要完备的文档,以便每个人可以使用、修复和扩展(见过不少学生写程序连注释都未能做好,这里面也包括我)。

 

另一种是将程序变成编程系统中的一个构件单元。要求它是在功能上能相互协作、具有规范的格式、可以进行交互的程序集合,并可以用来组装和搭建整个系统。这就要求程序符合一定的要求编制,使输入和输出在语法语义上与精确定义的接口一致,同时程序还应符合原先设定的资源限制——内存空间、输入输出设备、计算机时间等。最后,还是测试的问题,即程序须和其他构件单元一道,以任何能想象到的组合进行测试,且测试用例会随着组合不断增加,范围愈加广泛,而且一些意想不到的交互会产生许多不易察觉的BUG,测试工作会是一个非常耗时的环节。

 

而事实上,软件产业真正需要的产出,是以上两种的结合体,即编程系统产品,经验数据表明,这样结果的成本是起初程序的9倍,然而只有它才是真正有用的产品,也是大多数系统开发、项目研发的目标。

 

前一篇日志里写说中国当代大学生普遍不符合社会的需求,就软件业来看,学校里做的,只是最低层次——即程序的实现,甚至连程序实现的要求都远未及社会企业的实际要求。因为在大家眼里,很少能见到哪一本教科书、哪一个教师或是哪一场考试会做出以下这些要求:

 

  1. 单一功能子函数代码不得超过50行、形参个数不得超过7个、程序嵌套深度不得超过7层;
  2. 圈复杂度必须在15以内,对程序的修改或扩展不得增加其原有圈复杂度;
  3. 代码未写,文档先行,注释必须按照固定统一范式撰写;
  4. 各类编程风格规范:关系运算必须常量在左、变量在右,不许使用复杂的运算表达式,必要时添加括号而不依赖于优先级,魔鬼数字需用宏定义替代等等;
  5. 局部变量必须初定义、避免不必要的内存操作、内存操作必须考虑异常处理;

……

 

    可以列出的要求条目还有好多,而这些,还仅是新员工入职前要记住和注意的内容罢了,在工作过程中还有功能重量评估、测试用例编写(不仅限于测试人员,研发人员也需做自己的测试用例)、循环迭代敏捷开发等等,各种学校里接触不到的要求和环节,这在公司里仅是家常便饭。

 

  1. 只有在中国,才能听到“软件靠吃年轻饭”的论断,而且说得最多的不是行业的专家,而是不明真相的学生和外行人

 

上面从软件行业产出的角度,表明了编代码写程序只是软件行业里最底层最基础的工作。从性质来看,软件其实就是利用计算机模拟人的计算与逻辑能力,从而以各种形式快速得到和展示思维的结果。所有软件活动都包括一根本任务——打造构成抽象软件实体的复杂概念结构,和一次要任务——使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。

 

前一篇日志也提过,完整的软件设计是要经历需求分析、系统设计、编码实现三个步骤,对应的职位分别是系统分析师、软件架构师和程序员。把软件设计比作打仗,程序员就像小兵,实现的是软件中的次要任务,而根本任务的实现,就掌握在系统分析师、软件架构师、项目经理这些元帅和将军的手里。

 

系统分析师、软件架构师、项目经理这些都是程序员的高阶形态,或都归类于软件工程师,正如元帅和将军都先要经过小兵这一过程一样,而这一过程的转变,并非朝夕可达的。中国最缺的,就是有10年以上工作经验的软件工程师。金山软件董事长雷军(其投资的还有凡客、多玩、UCWEB、小米)曾说过:“在印度,包括在美国,我见到的项目经理都是三四十岁的人,他们‘越老越值钱’,有些人甚至拥有超过20年的行业经验。”事实上,做软件和做硬件的一样,都是越老越值钱,当然这里指的是程序员的高阶形态,而非程序员。

 

只是,不见得每个小兵都能往上发展,因为打仗这东西,光靠点手脚功夫是不够的,正如程序员埋头学习新的开发工具、钻研程序代码,一边挥洒汗水、熬夜写代码,一边又对自己30岁以后的职业方向充满恐慌,却不知逐步提升自己的视野、思维和经验。

 

前一篇日志也论述过管理和心理知识对研发人员的重要性,其对软件从业人员的作用更加明显,这是软件根本任务所决定的,也是解决软件固有属性困难——复杂性、一致性、变化性和不可见性时,所需具备的角度和能力。做软件的愈往上走,对从业人员的综合素质要求就愈高,这也才有了“越老越值钱”的说法。

 

前阵子,听朋友说做应用层的软件没前途,因为技术门槛低,没能把握住核心竞争力,可后来想想,不是没有竞争力,只是应用层软件是面向客户需求的,其核心竞争力不在于技术的实现,而在于需求的分析与心理的把握。

 

举两个简单例子,像近年来大热的小游戏——植物大战僵尸和愤怒的小鸟,二者的市场价值早已突破10亿美元关口。单从技术角度而言,其实现并非难事,但稍微有点心理学知识基础的会发现,二者有一明显的共同特点,即利用对比的手法,将两种不具关系的事物通过某种方式强制关联起来(植物和僵尸,小鸟和绿猪),游戏模式中还涉及到不同层次的动机与能力塑造,进一步加深玩家的喜好、甚至狂热程度。这两个游戏的成功,依靠的不是技术的优势,而是对心理知识的把握与运用,而这样的思维与成就,单靠写写代码、用用工具是达不到的。

 

软件的魅力在于它的创造性、不重复性和纯粹思维活动,但其困难也是随之产生的追求完美的必要性、由他人设定目标和思维逻辑的复杂性,这些问题的解决方法不单一依存于某本具体的书中,而是涉及管理、心理、逻辑、哲学等多方面的知识,恰巧中国教育方式将软件和这类知识分在了对立的两块中,也难怪会有中国软件业的这种囧态。

 

其实上述这些,许多企业和专家、从业人员都已意识到(像华为软件培训里相当一部分时间就是在进行管理类的培训),用百度或谷歌一搜“软件靠吃年轻饭”这句话,出来的基本都是否定的论断。这样的言论,流传得最多的便是学生和外行人,外行人就不提了,但学生是行业未来的人员,持有这样道听途说得来的观点,中国软件行业能不陷入恶性循环么?

 

只是也应该说,这是正常的事。人在不确定的时候总是倾向于相信周围人的意见,学校里的知识给不了更高更广的视野,学生们不清楚不了解,也难怪会听风就是雨。

 

文章评论30条评论)

登录后参与讨论

用户1406868 2016-6-7 12:32

唯技术论是行不通的,唯市场论是虚的,但是技术要以市场引导才能相辅相成。见过太多的技术爱好者其实做着没有效率的技术开发,你可以称这是积累,但眼光这玩意真不好说。我觉得偏激的人适合搞技术,但是仅仅技术而已。

151238379_248763605 2016-1-11 10:23

博主的观念还是不错的,其他评论就是仁者见仁智者见智!

用户1678053 2016-1-11 09:51

看看

用户1454308 2016-1-11 08:44

Good

用户1641753 2014-4-18 17:32

感觉楼主很托大啊!低调低调。。。。。。。。。。。。。。。。。。。

用户1379063 2014-4-4 17:39

我顶一个!

用户1438821 2014-2-3 22:35

技术人员也要和市场接轨。

用户1702404 2014-1-27 10:13

两码事。不要脸不是什么秘籍。市场也不是摆地摊。

用户1406868 2014-1-27 09:06

做技术就应该踏踏实实一步一个脚印,看能力并不是一时半刻的展现,而是经过岁月的磨练,岁月如刀,只是你被削的太偏激了……

用户1406868 2014-1-27 09:06

做技术就应该踏踏实实一步一个脚印,看能力并不是一时半刻的展现,而是经过岁月的磨练,岁月如刀,只是你被削的太偏激了……

相关推荐阅读
用户1625031 2012-05-09 09:32
软件靠吃年轻饭,是中国才有的误解,也是中国特有的“现象”——有感于与同行前辈的交流,是什么蒙蔽了我们的眼睛?从聚焦影响圈到正向偏差的应用
        之前发表过一《多数学生认为“软件靠吃年轻饭”之我见》的博文,幸得《电子工程专辑》的编辑推荐,不少同行、前辈驻足围观,也留下了自己的意见和建议,以致新有所思所得,便又写了这篇东西。 ...
用户1625031 2012-04-09 13:21
从西电图书馆的“大学生创业”思考大学生的定义、选择与背后价值
寒假离校前便开始构思此文,试图以经济效益为切入点,分析 “大学生”的定义、选择及其背后价值,以作日后行为指导之用,但回家后为俗务所缠而未果,近日得闲,方作此文,又有新所见所思所得,几经思量、修改,...
用户1625031 2012-04-09 07:32
大学生活的最后三个月,这将会是我孤独奋战的日子吗——有感于西交教授、华为培训及与其员工的交流,写给我的朋友们
前些天讲了个单片机快速开发的讲座,问批评意见,得到的答复是还好、还不错,也不知是对我的肯定还是安慰。有个学弟跟我说:“知识这东西,我觉得还得回归到实践上,才能算真正的掌握,但通过这次讲座,让我意识...
我要评论
30
10
关闭 站长推荐上一条 /2 下一条