程序员的“纪律性”

在所谓的纪律性团队里,程序员往往学不到什么东西。因为麻木地堆代码永远不是软件行业的核心竞争力,设计能力才是,多问几个为什么、一定要这样和为什么不那样,对年轻人,尤其对一个有技术追求的年轻人永远有好处。

国庆节长假前后,我和很多业内外的朋友们展开了关于“码农”的大讨论,作为这些讨论的延伸,一篇叫做《从“码农”说起》的文章从脑海中输出,最终展现在CSDN官网上。在文章中,我主张年轻的技术人们不应该接受社会舆论强加的“码农”属性,自己做有创造力的事情,要相信付出和智慧一定有回报。此文一出,得到了很多朋友的批评指正,令我颇为欣喜,因为有互动才会有头脑风暴,进而产生更多的新想法。

回顾当时那场大讨论,其中很多观点其实值得深入探讨,比如在讨论中,一位名为“@不动如山_”的朋友是这么说的:

对于软件是不是劳动密集性产业,你认为怎样合理是一回事,现实如何是另一回事。作为老程序员,老se,我参加过上千人的团队协作,数年的开发周期。所有创造性的工作在预研阶段就必须结束。一旦进入开发,就只有纪律,没有创新。当然,个别高科技产品的原型软件例外。

这席话给我很大触动,因为它触及了我进入IT行业之初时青涩经历的回忆。

多年前我刚刚加入的团队正在开发某个通信设备。有过开发通信设备的朋友们应该知道,其实嵌入式软件开发的技术核心是事件调度,因为通信设备总是处在繁忙的交换和命令事件处置的状态中,一个良好的事件调度机制是系统性能的灵魂,如果每次一个事件的到来都以新开一个线程的方式来应付,系统资源瞬间就会枯竭,设备也就崩溃了。

当时我们采用的是一种叫做zebra的架构,这是一个面向交换的开源项目,甚至有点像一个用户空间运行着的内核程序。

当时管理这个项目团队的项目经理正好是一个完全没有做过软件开发的职业文案写手,所以当主力开发人员把事件调度机制的框架整理完成之后,项目经理小眼滴溜溜一转,说道:“现在架构已经完成,下面就是大家分工,把各自的功能框架填充好了,我看了一下,一共有19个模块,大家分一下,一个模块每人一周时间……

这时一个资深的程序员打断了他,资深程序员让大家每个人把手头做的东西做一下单元测试,声称下一周他会给我们一个好东西。

果然这位资深程序员拿出一周时间用脚本写成的工具,把所有原来的功能模块直接处理填充到zebra架构内。

每当我回忆这件事情的时候,想起外行项目经理的尴尬表情都会忍俊不禁。彼时的那位项目经理,其实也是一个年轻有为的人,但是对于软件开发的特点的确缺乏了解,想当然地以为自己抓抓纪律性就行,大家按部就班、出工出力就好。可是要知道如果真的按照他的计划,功能填充过程可能需要2-3个月,况且数百万行规模的代码中隐藏的Bug又需要一个测试周期来捉虫。

我把这个故事讲给朋友们,有的朋友就问当时假如没有这个用脚本写成的工具又当如何?我就会反问,那么假如我们没有找到zebra架构又当如何?难不成要我们几个菜鸟来写调度机吗?软件编程,是一个能走捷径就一定要走捷径的工作——有现成的可重用或者可借鉴的东西一定要重用和借鉴的,这样工作水准和工作效率才可能有保证。有现成的东西不用,一定是万不得已;推倒重来,则一定是出现了重大问题;动不动喜欢从头再来的程序员,肯定是涉世未深、不得要领的门外汉。

我曾经将软件工作比喻成人类这个物种的又一次进化过程,每次开发工作的成果都顺理成章地成为以后阶段项目的工具。既然学习制造和使用工具正是人和动物的区别,那么在软件工作领域,对走捷径持怀疑态度,对借鉴现成成果持抗拒心理,反对宁可停下进度也要先创造工具的开发者或管理者,就如同软件世界里的大猩猩。

迷信“纪律性”的管理者,通常都以“战斗力”为口头禅,可惜开发产品毕竟不是战争,软件编程也不是你死我活的肉搏,软件工作其实就是一次又一次把自己的好想法,好创意凝结在编程语言上的过程,好的代码精辟如诗歌一般,其简练高效令人读起来拍案叫绝;好的软件架构巧夺天工,资源节约,鲁棒性强,这些都是经过反复思索和反复斟酌的结果,这样的工作状态和“纪律性”、“团结就是力量”的状态其实完全是南辕北辙。

软件的灵魂是数学和逻辑,开发过程本身就是一种创造,一种与数学逻辑的对话。纪律性的灵魂是服从,是听话,是个人意志服从集体意志,集体意志服从长官意志。这两件事情的联姻肯定不是自由恋爱,而是指腹为婚。

我觉得在团队合作中,编程规范是极为必要的,用约定的编程规矩来撰写程序是开发者应该共同维护的良好开发氛围。但这就是所谓纪律的边界了,纪律的覆盖范围,不应该逾越这个边界。

这些年敏捷开发、结对编程等新兴软件开发模式的兴起,从一个侧面强化了我的这种认识,那就是:软件工作的重要方式,就是创造一个可以酝酿好点子的环境,让好想法源源不断的产生出来,形成代码。软件活动应该回归本源,就是激发有创造力的人性。

按照这个思路,我常常建议一些嵌入式软件工程师能够在工作之余学习一下Java,学习一下脚本语言,Awk也行,TK也行,Perl也可以。很多人会很诧异,觉得自己面向硬件,甚至面向驱动,为什么要学习那么多表示层的东西?

我认为嵌入式系统软件开发常常因为设备处理能力以及开发环境限制只能使用面向过程的C,但是在软件工具已经逐渐丰富起来的现在,底层代码是完全可以通过脚本语言帮忙处理的,大量繁重的比对工作和代码迁移工作完全可以用脚本来执行,高效而且准确。

单纯从项目开发的效率来讲,团队里面有这样的软件多面手,有能够提出这样想法的人,比一个外行领导者对于开发者纪律性的要求要有意义,也有效的多。

这又要说到我曾经参与的另一个项目,也是某一种通信产品的开发工作。这一次是给设备开发北向接口。所谓北向接口,实际上就是开放给管理系统的管理监督接口。我们当时采用的是MIB方案,以SNMPv2为接口规范。同样的问题再次光临:一个带有庞大从属终端数量的局端设备,其MIB是非常复杂的,由于管理数据的节点已经细致到每个终端下面的每个网口的出入口速率和VLAN之类的细节内容,所以数据管理异常繁琐。

有了之前的经验,这一次我们也都把眼光投向脚本工具,果不其然,我们直接找到了一个开源项目,专门针对MIB开发了一套基于Perl脚本的处理工具集,把这个工具集稍加调整,就能快速生成满足MIB访问要求的底层数据形态,并且生成的代码有良好的可维护性,冗余度也在可接受的范围内。

我印象非常深的是,在做完这个项目的庆功宴上,项目组的技术大牛,也就是之前说到的那位资深程序员曾有这么一句感慨:“真正做可靠的嵌入式软件开发,以后就应该是架构设计配合代码生成工具,资浅程序员的工作就是一边做点小修小补,一边学习架构,这样利于成长,也对项目进展最有利。”此言听闻已有将近8年,言犹在耳。

前面“@不动如山_”的那段话虽然出自一人之口,但是这样的观点,在国内却绝不是少数,没有编程背景的管理人员更是对这样的观点敞开怀抱,如获至宝。很多国内的公司在软件部门里面都依然秉承着“人月”状态,就是把员工人数和工作时间的乘积作为公司的生产力,然后把具体的工作按照“人月”或者“人日”乃至“人时”进行度量,进而把一项任务切分出去。看到这里,读过《人月神话》的朋友们应该都会会心一笑。

写这篇文章,也主要是想对初入这个行业或者怀有志向即将进入这个行业的年轻技术者们说点我的心里话:堆代码永远不是软件行业的核心竞争力,设计能力才是,尽管很多公司还以代码行数作为绩效来考评;做一个听话的孩子在这个行业里也很难快速提升自我,因为创造力是要靠自己勉励自己才能不断展现的;安排很多人做重复体力活的规划,其实是因为没有人去尝试创造便捷的工具,这样的所谓的“纪律性”的团队里你肯定也学不到什么东西。多问几个为什么、一定要这样和为什么不那样,对一个年轻人,尤其对一个有技术追求的年轻人永远有好处。

时间: 2024-10-13 00:50:37

程序员的“纪律性”的相关文章

程序员的“纪律性”_转自“蜗窝科技”

转自:http://www.wowotech.net/tech_discuss/109.html 程序员的"纪律性" 国庆节长假前后,我和很多业内外的朋友们展开了关于"码农"的大讨论,作为这些讨论的延伸,一篇叫做<从"码农"说起>的文章从脑海中输出,最终展现在CSDN官网上.在文章中,我主张年轻的技术人们不应该接受社会舆论强加的"码农"属性,自己做有创造力的事情,要相信付出和智慧一定有回报.此文一出,得到了很多朋友

个人分析程序员的性格特点,生活习惯

 身为程序员的您是否有下面这么多性格与习惯? 1.聪明但是给人的感觉是不谦逊. 2.交流与合作能力比较强,但是又往往向往个人主义! 3.懒惰,大部分程序员可能都是这样,也许是因为程序员已经习惯了脑力劳动. 4.创造力非常强,但是好像又缺乏纪律性! 5.学习能力非常强,但是又往往太过于依赖个人经验. 从我个人就暂时归纳这么多,请大家继续跟帖总结... 个人分析程序员的性格特点,生活习惯

祭文:浪潮军训与准程序员的离世,我的同学你走好。喷文,不喜误入

这两天看空间的时候发现很奇怪的一些说说,仔细一问原来是我的一位同级校友在浪潮参加军训的时候离世了.好吧,我表示昨天失眠了,军训,呵呵,你妹的. BTW,本文仅代表个人观点,用词也不文雅,不喜绕行,查水表不欢迎.我不关心前因,我只看结果,这也是学校多年教育的成果(不要听,要看). 在开喷前,先旁征博引下. 体质内的军训就忍了,毕竟要上学,而且还有某些很不科学的法律规定. 首先看看国内对于军训的介绍,墙内和体制内的介绍,凑合着看看: 给出百度百科的完整连接:http://baike.baidu.co

你有这个毛病吗?程序员的七大坏毛病

1.- 所有的程序都写的很烂,除了我的. 我要告诉你一个坏消息,兄弟,所有的程序都写的很烂,包括你的.无论你在上面花多少功夫,其他大多数程序员总是会认为你写的代码很烂.他们能写出比你好10倍的程序. 如何纠正:不要挑剔别人的程序,有一天也许你的程序会被人放在聚光灯下挑剔.要保持客观和专业的评论,不要轻易判断.要谦虚,从周围人哪里学习经验,警戒自己不要写出这么糟的程序. 2.- 我几秒钟就能把它改好,不用走变更流程了. 抄捷径充满诱惑,每个人都想抄捷径.有时候抄捷径是必要的,但总的来说,抄捷径是危

程序员们,你们再这样下去会没朋友的。

引言 写这篇文章,其实源于之前有个群里的同学,问了LZ一个问题. 当时他给LZ发了一张图片,然后问LZ,"这个@Test注解引用不了是咋回事?" 看到这个问题,LZ当时恰好没事,就顺手给他回复了一下,说这个错误引起的原因是,注解的特性只在JDK1.5或者更高的版本才能用. 话虽这么说,但其实LZ当时心里多少是有些无语的. 提示写的这么清楚了,看不懂吗?就算英文阅读水平差点,百度翻译一下会不会呢? 最让LZ郁闷的是,当LZ回答完以后,这个新人同学只回了一个字,"哦!"

程序员每天累成狗,是为了什么

HI,想我了吗 了吗 了吗?自从上次情人节一别,我已经接近20天没更新文章了. 至于原因:是,办点其他私事,这一段压根没怎么联网,所以不太好意思,我也很想你们了.大家也不要问为什吗,辣么帅的人有什么事了,从今天开始我就正式回归了!还是那熟悉的节奏和风格,和帅帅的颜值 掌声响起来...啪啪啪 啪啪啪 这篇文章的起因有二点: 一.我这些天之所以没更新,不是因为我懒,是因为我确实很累和其他私事. 二.有许多人问我说:小北哥哥,感觉每天都很累,真不知道为什么,什么时候是个头! 我看我们的很多同行,都是一

CSDN日报20170311——《程序员每天累成狗,是为了什么》

[程序人生]程序员每天累成狗,是为了什么 作者:郭小北 程序员可以投入的资本就是:身体和脑力,说白了都是出卖劳动力换取回报,也就是钱.我们大部分人都是凡人,或许当初是基于兴趣和理想去做一件事,入一门行,但随着阅历的丰富,年龄的增长,责任感的叠加你工作就是为了钱啊,因为在这个物质的社会,你连家都养不了,何来生活的更好? [物联网]Android Things --SDK框架 作者:王玉成 物联网应用开发与手机和平板的应用开发有一些区别,那么Android Things与Android又有哪些差别呢

程序员取悦女朋友的正确姿势---Tips(iOS美容篇)

前言 女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片.app独一无二,虽简亦繁. JH定律:魔镜:最漂亮的女人是你老婆魔镜:程序员不是木头人 核心技术 图片滤镜核心技术的基本思路如下: 核心技术流程 具体流程 1.创建一个图像处理工具类 注:该类实例包括一个图像处理方法,该方法在传入原始图像和一个颜色矩阵后生成一个处理好的图像. @interface JHFeilterManager : NSObject @proper

从一个程序员的角度看——微信小应用

前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面好几次我都没有把持住.以下内容部分来自于内部分享所用ppt.文章对微信小应用的使用做了展示性介绍,并简单介绍了代码结构.后端交互方法.最后提出一些总结和疑问.文章内容比较主观,有不对的地方欢迎大家指出纠正. 前段时间微信小应用公开内测,在朋友圈火了一把,各种阐述疯狂蔓延,干掉APP之类的说法比较突出,确实达到