在我看来员工与公司之间总存在着一些不可调和的矛盾,按说是应该一同同舟共济的,可有的时候就是…比如如果公司让你放弃你的完美主义,你会不会乖乖地听话,然后去做一些以往很不齿的类似体力劳动的工作呢?
“软件蓝领”这个概念已经不是新生事物了,它刚刚出现的时候我只感觉是一种玩笑,这种技术密集型的产业怎么可能出现蓝领。在我的印象里,某某大牛对一些需要具备“蓝领精神”才能完成的工作感觉到厌烦后,一种很牛的技术或框架或语言随即应运而生,而不像某些人宣称的那样,派一个听话的软件蓝领过去像机器人一样按最平淡无奇最白开水最没技术含量的方法做出来。但是现在这软件蓝领的概念倒是搞得很热闹,俨然像在说中国软件之所以发展不起来完全是因为没有基础性的软件蓝领“人才”似的。
Perl,PHP,Java的出现无一不是因为其作者觉得有必要开发一门语言来解决那些他每天都要与之打交道的烦人的问题,那些支持软件蓝领说的人们不觉得自己观点的苍白么?
很多软件公司比较支持软件蓝领这样的概念,也难怪,从一个管理者的角度来看,如果手下人的表现比较一致,至少比较稳定,他才有可能按照一定的规律预测公司的运作情况,否则如果这个月产值超额下个月又萎缩,我想大部分管理者是没工夫去下到底层考察一下为什么会出现这样的情况,而是终日惶惶不安,然后正巧听到了软件蓝领这种概念,恨不得大笔一挥,把手下的白色领子刷成蓝色。另外,软件蓝领们的工资显然要低一些——都承认自己是蓝领了,还好意思漫天要价么?所以这个概念受到很多人的欢迎,一方面软件公司的老总们很高兴,仿佛软件人如果都是蓝领,软件生产也可以进入工业化时代,可以对生产量进行预测和规划了似的;另一方面,呵呵,鼓吹蓝领概念的机构很大一部分都是培训机构,软件蓝领的概念无疑意味着从业者门槛的降低,来培训的人就更多了,多得让人足以怀疑这些人鼓吹软件蓝领概念的初衷。
很多人虽然不赞成软件蓝领,但在平时开发时却总是有意无意地做蓝领才做的事情,比如宁可copy-paste也不去extract method,宁可繁衍出很多相似的类也不愿意做抽象,所有这些鲁莽的行为虽然看起来很笨拙,但却确实可以达到目的,把个应用像模像样地搞出来。诚然,这种笨拙的方法可以解决问题,而且看上去很直接,不用费任何工夫去做额外的工作,所以有人冠以“实用主义”的名号。很多公司存在外行领导内行的现象,领导们在下属可以按时完成工作的情况下自然也不会去做code review,谁不想活得容易些呢,他们只是希望deadline到来的时候自己可以毫无顾虑地把手下人的工作交给上司,然后喘口大气冲一杯咖啡,而对手下人到底如何完成工作的,大部分领导们才懒得去管。
记得微软刚推出.Net没多久(那时我还在学习C#,我着手学习.Net的时间还算比较早),很多人都为使用VS.Net+C#/VB.Net所带来的开发效率(不如说是开发速度)所沾沾自喜,有的人说他们公司的所有项目组里就数使用Java的组最拖沓。当时回复这个话题的人群里面有很多Javaers,他们反击的主要观点就是.Net开发群体普遍只顾RAD而不重视设计的这个事实(.Net Framework 1.x整体上就已经不顾设计单纯封装底层API了,也难免Javaers们对.Net开发者对待设计的态度上做出同样的置疑),我记得又有个人说,“我只在乎能按时完成,不在乎通过什么途径,作为一个员工难道不该为公司着想,尽快完成工作吗?”——大意如此。
“为公司着想,尽快完成工作”,听起来多么让人感动,公司的老总们,有这样的员工为您们卖命,夫复何求?这样实用主义至上的想法,是不是真的可以尽快完成工作还难以取证,我想说的是,一个公司如果只是追求实用主义是难以发展的。很多开发者实际上在初学开发以后都是完美主义者,都想做一些努力让自己的代码更漂亮,让自己的应用运行起来更畅快更高效,不幸的是很多人的完美主义都被逐渐地磨损逐渐地消耗殆尽,转而投向“实用主义”,更不幸的是我发觉很多这样那样的“实用主义”其实只是“蓝领主义”罢了,都不过是在公司的影响下衍生出的一种对代码不负责的态度。在这样的主义的影响下,开发者真的像蓝领一样,眼中只有任务而没有代码,与进度赛跑,与deadline单挑成了开发工作的全部,让我真的很难想像这种态度能够帮助造成什么样子的代码。
完美主义与实用主义真的格格不入么?换句话说,完美主义就一定不实用么?
首先很多人认为崇尚完美主义的人总是会浪费开发时间,拖延开发进度,我说这种说法真是对不起古人,对不起人家Nk年以前就知道的道理:“磨刀不误砍柴功”、“工欲善其事,必先利其器”。我们既然承认开发的先期设计的重要,就是已经承认了完美主义,但同时又对先期设计之后的设计过分地曲解,认为没有必要,认为会拖延进度,好像只要再动一动脑筋就肯定会拖别人的后腿一样。在这样的想法的左右下,不知道多少的代码段被copy了然后paste到其他地方而埋下隐患,不知道多少可以抽离出来形成类的逻辑被死死地塞到一段代码的上下文中,不知道多少相似的业务逻辑实现了一遍又一遍,更不知道多少人被枯燥的活动磨灭了创造的动力。如果对于公司而言,只有经济损失能算作损失的话,这些损失当然可以忽略不计了。
其次,完美主义肯定不会是华而不实的。看看我们每天在用的框架和库,哪一个不是那些作者们追求完美的结果?为什么我们就不能完美主义一下,把常见的逻辑抽离出来,形成自己的技术积累或者业务积累呢?OO专家们总在谈重用,CMM等级评价也把重用放在很重要的位置,于名于利,重用总是重要的,如果追求所谓的实用,使得重用变成一遍一遍的重复,那无异于把OO的价值降到最低了。
软件蓝领与其说是软件的一种出路,不如说是一种阴谋。工作的时候站起来伸一下懒腰,你可以看到周围其实有很多蓝领,严格地审视自己的代码,更会发现有时自己也表现得像个蓝领,所以,咱们的软件业实际上不缺蓝领,缺少软件蓝领的只是那些培训机构罢了。
胡乱地说了很多,我承认,在行文叙事这方面,自从高中毕业我就彻底沦为蓝领了…