CSDN博客

img Witwind

软件开发最重要的是技术吗?

发表于2004/1/29 12:53:00  1469人阅读

分类: 随笔

    最近在写毕业论文,胡思乱想的东西多了些,看的东西也杂了一些。虽然我还没毕业,有些想法太过于理想化或太幼稚,但总觉得既然有想法还是写下来好,即使没什么用也聊以自娱。
    最近一直在想的问题之一就是,软件开发到底是什么?软件开发最重要的是什么?是不是技术?也许是因为我本科学的是企业管理,很多事情不会单从技术的角度去看。
    在网上搜一下,发现认为技术最重要的人还真是不少。很多人抱怨公司的管理人员不懂技术,造成技术人员在公司里没地位。也有不少人认为中国的软件企业为什么在国际上没有竞争力,为什么中国的软件行业上不去,关键是中国没有自己的核心技术。至于软件公司对技术似乎也是相当看重的,他们在招聘员工时第一标准就是技术,所谓的工作经验归根结底就是看应聘者的技术是不是熟练,是不是招来以后就可以干活,还是要再去培训一下。而现在公司对计算机专业大学生的抱怨主要也是大学生沉迷于游戏,不好好打基础,太过于浮燥,什么技术都学但什么技术都不精,面试时最简单的一些开发技术都不会等等,归根结底还是技术。这么看来,大家对技术都是挺看重的,为什么中国的软件业还是不行呢?
    毕竟我是一个还在学校里的学生,所以我没有资格说中国软件业不景气的真正原因在哪里,甚至没有资格评价中国软件业究竟属于景气还是不景气。不过对于技术,我觉得技术确实相当重要。因为软件开发本来就是技术含量相当高的活动,任何一家不注重技术的公司都不会有很好的发展。而且望眼全球,应用最广泛的技术基本上都是那些第一流的IT大公司提出来的。在不懂技术的老板管理下的那些程序员的确相当可怜,度日如年,日夜不停地加班,但技术水平却上升不多,拿的薪水也可怜,即使拿了多也只能用来买些昂贵的保健品以补充体力,剩下的依然可怜。可程序员这么卖命,公司依然在亏,看来不懂技术的老板猛于虎啊!
    于是就发现这样的一个问题:技术是很重要,大家也并不是不注重技术,而大家也相当努力工作了,为什么中国软件业的技术还是不行呢?看来软件开发并不是一个那么容易的问题,而技术也决不是软件开发的银弹。当然,《人月》都说了,根本就没有彻底解决软件开发各种问题的银弹。但我觉得至少应该存在缓和各种问题的铜弹吧!只是,恐怕技术不能扮演这个角色了。
    我谈谈我对软件开发中什么是最重要的这一问题的看法。我不想扯到什么社会问题、民族劣根这些事情上,因为讨论这个没什么大的意义。我只是觉得,中国软件业似乎应该把技术从原有的至高无上的神殿上拉下来,这样大家才能心平气和地看问题。
    首先,为什么那些技术天才不能救中国的软件企业?我觉得软件企业虽然是技术性质很强的企业,但归根结底是企业,应该从管理的角度来解决问题。而管理的同时,也要考虑到软件这一行业的特殊规率。如果一个管理者连自己行业的规率都不能把握,那他就不是一个合格的管理者,从这个角度上说,前文讲到的那种不懂技术的管理者其实连管理都不懂!
    中国的软件从业者太过于注重技术了:程序员不停地去追求和学习那些新的技术,搞得身心疲惫;软件公司指望招来一些技术天才使公司的工作效率能有立竿见影的提高。可物极必返,你越是追求技术,你的技术越是提高得慢,甚至停滞。理由很简单,饭要一口一口地吃。软件开发是一项商品生产的行为,你必须先要调整好市场管理和生产管理甚至可能还有其它方面的问题,你对技术下的本钱才能升值。如果你只把技术当成救命稻草,招人时只要高技术的人员,其它的都不管不顾,结果当然是不理想的。
    比如,现在的程序员工作强度很大,每天都在加班工作,当然一方面原因是一些黑心老板为了榨取程序员的精力,故意把项目的完成时间缩短,但开发效率低是一个最主要的原因。开发效率低主要是由于程序员大量的精力并没有放在代码的编写上,而是浪费在了除错上,浪费在了阅读和修改旧代码上,这点有经验的程序员应该深有体会。那么怎么解决这个问题呢?把现有程序员解雇再去招聘技术更好的程序员?这样做即使有效果也是微乎其微的,因为再好的程序员也难免出错。而且很多的时候高技术的程序员在这个问题上成事不足败事有余,一来越是高深的技术越是容易出错,二来高水平的程序员可能会和其它的程序员在水平上产生脱节,导致写出的代码过于精深别人看不懂影响交流,我在网上就看到过一个高水平的C++程序员由于在代码中使用了过多的BOOST库的内容,公司不得不请他另谋高救。第三,高水平的程序员的技术在项目中也许跟本用不上或没必要使用。当然这并不是说高水平程序员无用,关键在于这个问题并不是通过技术来解决的。要减少程序员浪费在除错上的时间(当然完全避免是不可能的),可以通过两种途径来实现,一种是减少错误的发生率,另一种是提高除错的效率。要做到这点就必须加强需求、分析、设计和测试的工作,并确保代码的质量。换句话说就是做好软件工程。
    在这里我不想探讨软件工程这个太过于宽范的问题,而且目前很多公司确实没有很好实施软件工程的能力,再讨论下去又要迁涉到什么社会问题民族劣根之类的话题。但是,完善的软件工程公司可能没有能力实施,一些小的软件工程实践难道也没有能力去做吗?就拿程序员来说,你能不能做到先编写测试用例再编写代码?能不能做到随时对代码进行重构直至“实现且只实现一次”的地步?能不能代码一有变动就进行完整的测试确保代码没有问题?做到这些并不难,相信第一线的程序员都有能力做到,但有没有这个自觉性就难说了,毕竟这些事很锁碎,也没什么技术性可谈,但这些脏活累活恰恰是对提高开发效率是最有效的,远比那些所谓的技术有效得多。所以我觉得如果你想成为一个合格的程序员,最关键的并不在于你有多少技术,而在于你有没有踏踏实实干好这些似乎只有傻瓜才需要干的脏活累活的自觉性。
    同样对于软件公司,你能不能给程序员一个科学合理的工期?要榨取程序员的精力也要慢慢来,一旦程序员被你榨干了你也就没什么可榨的了。程序员也是人,长期的持续工作会降低程序员的思考能力和反应速度,而且也会增加出错率。管理学者做过研究,一个脑力工作者工作效率最高的时候是他开始持续工作的三至五小时以内,而且一天只能工作八小时(上下午各工作三至五小时),一周工作五至六天,就能将工作者效率最高的时间段攘括在内。如果长期持续加班,程序员一周的工作完成量很可能还没有每周只工作40小时来得高,这是陪了夫人又折兵的事情,何况程序员本身还要挤出大量的时间来学习新技术。
    还有对于程序员(因为习惯这里我把所有的开发人员统称为程序员)的招聘。我觉得程序员可以分为四种:不合格的程序员、普通的程序员、优秀的程序员和拔尖的程序员,这四种人在现在的大学中分别占35%,40%,20%,5%(数据是杜撰的,但觉得真实情况应差不多)。不合格程序员一没有技术二没学习能力三没工作自觉性,这种人应尽早开掉。拔尖的程序员数量极少,都是宝贝,只要养得起,决不能放跑,但绝大多数在出校前就名花有主了。至于另两种则应该好好考虑一下。现在的公司一心想找优秀的程序员,在招聘时往往只考虑做过大项目的、有两三年项目经验的、名校的毕业生,而且的确优秀的毕业生主要都集中在名校中。公司求贤若渴的心情能够理解,但我觉得这样做又是一种把技术放在管理之上的舍本求末行为。从管理心理学、组织行为学和人力资源管理的角度来看,一个团队应该有一定的组成结构,应该由一定比例的优秀人才和更多相对较差但是合格的人才组成,这个比例大致应该是1:2,这样的团队往往是最和谐且效率最高的。因为优秀程序员比较心高气傲,他们的技术使他们在普通程序员占多数的团队中容易受到其它程序员的尊敬,这对他们来说是一种满足,而且这种满足会使他们在工作上更有动力。而普通的程序员在优秀程序员面前相对有些自卑,但在这样的团队中他们能够和优秀的程序员一起工作,他们会主动地向优秀程序员学习,并承担一些优秀程序员不愿做的技术含量较低的工作。而前文讨论了,这种技术含量较低的脏活累活对项目来说恰恰是最重要的。因此,在这样的团队中,团队成员相处得会更融洽,团队效率也会更高。打个比方来说,国家队个个都是百里挑一的精英,但只能是支临时拼凑队伍,只能参加一些短期的集训,打一些短期内的比赛。如果一支球队要有长期征战的能力,只能是三、四个精英带领一群无名小卒的俱乐部队。因此,企业在招聘员工时不应只盯着名校的学生或工作经验丰富的人,而应该将多达三分之二的名额留给普通学校毕业或工作经验较少的人。当然,绝不能让不合格的人混进来。
    那如果按现在的公司想的那样,只招那些名校毕业工作经历丰富的优秀程序员会怎样呢?成本上升的问题我就不谈了。优秀程序员都想在人群中脱颖而出,但由于竞争对手太强,对于大多数人来说这种想法只能是空谈,这对心高气傲的名校毕业生来说无疑是个打击。而且名校毕业生一生以来都一帆风顺,站在人群中的顶峰,他们不像普通学校学生经受过高考的失败和找工作时受的歧视,他们的抗打击能力是相对较弱的。而且大家都是名校毕业,谁都不服谁。在做项目的时候也都抢着做高技术的工作,如果被分到的低技术的工作就会满肚子不高兴,而且做这种低技术的活对优秀程序员来说也确实一种浪费。即使团队中还有少数人愿意承担那些低技术水平的脏活累活,也很容易被认为是拍上级马屁而遭到排挤。而且这些人都绝顶聪明,他们一旦勾心斗角起来,后果难以想象,到最后自然是不欢而散。而且你别指望用开除来警告他们听话,因为以他们的才能实在不愁找不到新工作。相信很多管理人员都有越是牛人越难管理的经验。总之后果真的糟糕透顶。除非你有足够的更优秀的人能压住他们,那他们一定能把活干得非常棒非常完美。微软有这样的能力,别的公司呢?
    有的公司会说,他们招人是为了马上能用,是为了马上能为企业带来效益提高效率。那我可以告诉你,除非你招的是天才中的天才,也许的确能起到立竿见影的效果。否则的话,不管你招人仅仅是为了弥补人手不足,还是指望新人能对公司有所改变,你都不应该违背人力资源管理上的规率。再说了,仅仅通过招几个技术高手就想改变整个公司的工作效率,未免有些幼稚,《人月》说了,软件开发中单纯增加人手,并不能提高效率。总之有一点是可以肯定的,技术不能组建良好的团队。
    当然,如果整个团队中优秀程序员太少也不行,这样整个团队的实力就会下降,而且优秀程序员的势力太小,不能对普通程序员产生积极影响,而且容易受普通程序员的排挤。所以,1:2的比例最好。
    最后话题还是回到技术上。核心技术对企业的竞争力也许真的很重要。那么印度软件业比我们强得多,他们的软件公司都有他们的核心技术吗?这个问题以我的资历没资格回答,但从网上一些人的贴子中可以看出,印度人写代码水平并不怎么样,可见印度人的技术并不比我们强多少。可人家的软件业为什么就那么发达呢?我想最主要的还是管理上吧!这个问题说到这里就此打住。
    说了那么多,那么究竟该如何提高企业的技术呢?毕竟,企业有没有自己的核心技术还是非常重要的。对于这个问题,我没法具体的回答,毕竟我只是个在校的学生。不过想得简单一点的话,如果你的程序员能够保持正常的作息时间的话,如果你的项目不需要总是为了一个低级错误而焦头烂额的话,如果你的团队能够和睦相处并高效工作的话,你就有能力实施进一步的软件工程。当然你企业在软件工程上相当成熟,用现成技术开发项目已不成问题的时候,你投入在技术研究上的资本水到渠成地就有回报了。
    所以我觉得,我们的软件从业人员,不管是程序员还是项目经理还是老板,都应该好好地思考一下这样的问题。软件开发到底是什么?软件开发最重要的到底是什么?是技术吗?还是别的更重要的东西?你们自己的所作所为有没有舍本求末呢?
    再说一次,以上是我一时之间的零碎想法,只是不愿意让这些想法白白丢失掉所以才记下来,所有分析并不严谨。我没有把这些想法组织成理论,也不能论证我的想法是正确的。我也不想说服什么人,我只是想把我的想法记下来而已。
0 0

相关博文

我的热门文章

img
取 消
img