Fork me on GitHub
程序员的心理疾病
投递人 itwriter 发布于 2014-02-10 22:11 评论(0) 有298人阅读  原文链接  [收藏]  «

  说实话,虽然似乎为之奋斗了十多年,在真正进入软件行业的短短一年之后,我已经对它感到相当的厌倦了。这并不是说这个行业没有前景,而是在这个行业工作,其实很难得到心理上的快乐。

  人们说女怕嫁错郎,男怕入错行。我并不认为自己入错了行,我仍然很喜欢设计程序和语言,而且我显然是这个领域的王牌之一。然而我却看到了这个行业里的无限混沌,让我觉得喘不过气来。几十年的垃圾设计堆积在那里,却没有人试图把它们清理掉,权威主义盛行。无论你在哪个公司,哪个地方,只要跟程序员说话,十有八九会谈不来。非常扫兴不说,甚至感觉很伤自尊。

  久而久之我发现了,由于程序员工作的性质,他们受到的“熏陶”,形成了一种行业性的心理疾病。这里我就简单的把我所观察到的一些症状总结一下。

  无自知之明

  由于程序员的工作最近几年比较容易找,工资还不错,所以很多程序员往往只看到自己的肚脐眼,看不到自己在整个社会里的位置其实并不是那么的关键和重要。很多程序员除了自己会的那点东西,几乎对其它领域和事情完全不感兴趣,看不起其他人。这就是为什么我的前同事 TJ 作为一个资深的天体物理学家,在一个软件公司里面那么卑微。貌似会写点 node.js,iOS 软件的人都可以对他趾高气昂的样子,而其实这些东西的价值哪里可能跟 TJ 知道的物理知识相提并论。让人感觉是在阴沟里翻了船被老鼠欺负。

  如果力学工程师犯了错误,飞机会坠毁;如果结构工程师犯了错误,大桥会垮塌;可是如果软件工程师犯了错误,大不了网站挂掉一小时,重启一下貌似又好了。所以所谓“软件工程师”,由于门槛太低,他们的工作严谨程度,其实是根本没法和力学工程,结构工程等真正的工程师相提并论的。实际上“软件工程”这个名词根本就是扯淡的,软件工程师也根本不能被叫做“工程师”。跟其他的工程不一样,软件工程并不是建立在科学的基础上的,计算机科学也根本不是科学。按照 Dijkstra 的说法,“软件工程”是穷途末路的领域,因为它的目标是:如果我不会写程序的话,怎么样才能写出程序?

  为了达到这个愚蠢的目的,很多人开始兜售各种像减肥药一样的东西。面向对象方法,软件“重用”,设计模式,关系式数据库,NoSQL,大数据…… 没完没了。只要是有钱人发布的东西,神马垃圾都能被吹捧上天。Facebook 给 PHP 做了个编译器,可以编译成 C++,还做了个 VM,多么了不起啊!

  其实软件里面有少数永恒的珍宝,可惜很少有人理解和尊重它们的价值。这在其它的工程领域看来是不可思议的,然而这却是事实。

  垃圾当宝贝

  由于没有科学作为理论的基础,没有实验作为检验它们的标准,软件行业的很多东西就像现代艺术一样,丑陋无比的垃圾还能摆在外表堂皇的“现代艺术博物馆”里面,被人当成传世大作一样膜拜。

  为了凸显自己根本不存在的价值,又提出一些新的“理念”,就像有些现代艺术家一样,说“艺术的目的不是为了美,而是为了自由。”哦,这就是为什么你们可以自由地把那些让人反胃的东西放在博物馆里,还要买门票才能参观?

  宗教斗争

  当然了因为没有实质的技术,为了争夺市场和利益,各种软件的理念就开始互相倾轧。一会儿说软件危机啦,面向对象方法来拯救你们!一会儿又提出设计模式。过了一会儿又有人说这些设计模式里面有些模式是“反模式”,然后又有人把函数式编程包装起来,说是面向对象编程的克星,一会儿是关系式数据库,一会儿是 NoSQL,一会儿是 web,一会儿是 cloud,一会儿又是 mobile…… 每个东西都喜欢把自己说成是未来的希望。

  这就是为什么有人说在软件行业里需要不停地“学习”,因为不断地有人为了制造新的理念而制造新的理念。在这样一个行业里,你会很难找到一个只把程序语言或者技术当成是工具的人。如果有人问你对某个语言或者技术的评价,是非常尴尬甚至危险的事情,所以最可靠的办法就是不做评论,什么都不要说。

  引难为豪

  在 IT 行业里批评一个技术难用,是一件非常容易伤自尊的事情,因为立马会有人噼里啪啦打出一大篇代码,说:就是这么简单!然后你就发现,这些人完全不明白什么叫做设计,他们以自己能用最快的速度绕过各种前人的设计失误为豪,很多程序员甚至以自己打字快为豪。

  当遇到这样的人,我的经验是,千万不要恭维他们。你必须大声地嘲笑他们是 code monkey,否则你不但助长了他们的气焰,而且将来自己的自尊也难保了。

  去读文档!

  不知从什么时候开始,人们开始引用 Eric Raymond 的一篇叫做《提问的艺术》的文章,这篇文章后来就成为了对提问者没礼貌的借口。由于这篇文章的误导,当你希望同事能给你一个手把手的演示的时候,他们往往会丢给你一篇不知道什么时候写的文档,让你自己去读,仿佛文档就可以代替人之间的直接互动。况且不说这文档可能已经过时,里面有很多地方已经不符合最新的设计,而这意味着在潜意识里,他们觉得高你一等。他们甚至会对你说,如果每个新人来了我们都花这么多时间去指导他们入门,哪里还有时间干正事呢?然后你就意识到了,你在他们心里的地位,其实是如此的卑微和低下。

  有的人稍微委婉一点,当你提问的时候,他们会二话不说打开一个浏览器窗口,在里面用 Google 搜索,然后指给你:看,就是这样。貌似比较礼貌,但那其实意味着他们在教训你:Google 一下就找到了的,自己不动脑筋!有谁不会用 Google 呢?提问的人恐怕是想得到 Google 不能给他的答案。真正有礼貌的人在不知道答案的时候是不会当面去帮你搜索的,他会对你说:“这个我也不知道…… 要不你搜索一下?”

  在 IRC 的聊天室里,由于隔着网络的屏障,这种对提问者没礼貌的现象就更加嚣张。我曾经有几次去 Java 的聊天室问一些貌似基础,而其实很深入的语言设计问题,结果没有一次不是以收到像“去读 API!”这样的回答而结束。API 谁不会读,然而我需要的是一个有血有肉的人对此的理解。所以后来我根本不去 IRC 这种地方了,因为那里面对你打字的基本上已经不是人类了。他们觉得你问问题浪费了他们的时间,然而他们一天到晚泡在 IRC 里面好像就是在做什么正事似的。后来你发现,原来在 IRC 里面训斥新手就是他们唯一的乐趣。

  像 Haskell 之类的聊天室貌似稍微友好一点,然而后来你发现他们显得友好是有所企图的。因为当时 Haskell 还没有很多人用,他们需要吸引新手,竭尽所能的诱导他们。而一旦你变成了专家,就会发现当对它的设计提出异议的时候,“id”们是多么的不友好。最后你发现,其实所有语言的所谓“社区”都一个德行。如果 Haskell 有一天像 Java 一样如日中天(当然不大可能),肯定对大部分问题的答案也就是“去读 API!”

  不得不指出,《提问的艺术》等介绍“黑客文化”的文章对于这种现象的出现有着极大的责任。这种文章试图抹去人类文明几千年来传承的文化,而重新给“礼貌”做出定义。其结果是,人类的文明因为这些文章,在程序员的世界里倒退了几十甚至几百年。很多外行人人不喜欢跟程序员说话,叫他们是 nerd,就是这个原因。

  不要提问,不要谦虚,不要恭维

  跟上面的症状相似,程序员世界里的一条重要的潜规则是:只有菜鸟才会问问题。所以如果你有任何机会可以自己得到答案,就不要试图向人“请教”,尤其不要显得好奇,否则你就会被认为是菜鸟。我有几次不耻下问的经历,最后导致了我被人当成菜鸟。我只是觉得那问题有趣,也许能够启发我设计自己的东西,所以吃饭时觉得是个话题可以说一下,结果呢就有人忙着鄙视你,那么小的问题都没搞清楚。正确的态度应该是诚实,直接,见惯不惊,那有什么大不了的,我什么没见过,我很怀疑。

  随之而来的引论就是:不要谦虚!那些“职场经验”之类的文章告诉你的进入新的公司工作,要谦虚好问,对 IT 公司这种不讲美德的地方是不管用的。有的大 IT 公司有所谓的“文化”,比如叫你要“Googley”,要“humble”,其实只是用来贬低你价值的借口。他们要你向他们“学习”,但其实他们没有什么值得学习的地方。他们只是想让你安于“本分”,做一些微不足道,不能发挥你才能的工作。所以跟江湖一样,在 IT 公司里面一件很重要的事情是,亮出自己的宝剑和绝招,给人下马威。介绍自己的东西一定要自豪,这就是世界上最好的,无敌的,没有其他人能做到!不能有任何保留。不要像科学家一样介绍自己技术的局限性,否则随之而来的就是有些人对你价值的怀疑和对你自信心的打击。

  另外要注意的是对于别人介绍的东西,不要轻易地表扬或者点头,否则有人就更有气势了。你要问这样的问题:这里面有什么新的东西吗?这个事情,另外一种技术早就能做了啊,没觉得有什么了不起。

  哎,总之这样还是很累,所以最好是能不跟程序员讲话就不讲。

  以语言取人

  你的软件是什么语言写的,告诉别人的时候是千万要小心的,不到万不得已最好不要说。因为十有八九,对方会立即会在心里对你的软件的价值做出判断,光凭你用的是什么语言。

  很多程序员都以自己会用最近流行的一些新语言为豪,以为有了它们自己就成了更好的程序员。他们看不到,用新的语言并不能让他们成为更好的程序员。其实最厉害的程序员无论用什么语言都能写出很好的代码。在他们的头脑里其实只有一种语言,他们首先用这种语言把问题建模出来,然后根据实际需要“翻译”成最后的代码。这种在头脑里的建模过程的价值,是很难用他最后用语言的优劣来衡量的。有时候一个程序员用一个语言并不是因为他只会用那种语言,而是其他的原因。可是很多人误以为他们不愿意学习“新”的东西,从而从心里鄙视他们。

  这种以语言取人的现象甚至出现在一些公司里。很可笑的是,我前段时间面试的所有使用 Python 的公司,最后都认定了我是 Python 的菜鸟。然而我的水平显然高过 Python 的创造者 Guido van Rossum 很多。在制造了 PySonar 之后,他对程序语言的理解,他的每一个可笑的错误都被我看得清清楚楚。当然,Ruby 就更烂了。

  跟屁虫

  有些程序员对新手和同事是那么的不友好,然而对大牛们拍马屁的功夫可真是出类拔萃。我刚到旧金山的几个月经常参加一些程序语言的“meetup”,后来我发现这种 meetup 都是宗教气氛非常浓厚的地方,跟传销大会差不多。Scala 的 meetup 里面的人几乎全都对 Scala 和 Martin Odersky 顶礼膜拜。Clojure 的,当然基本上把 Rich Hickey 当成神。各种 talk 总是宣扬,哇,我们用 Scala/Clojure 做出了多么了不起的东西云云……

  很多人喜欢做这些新的语言和技术的“evangelist”,尽显各种马屁神功,然后就开始写书,写 blog,…… 目的就是成为这个“领域”的第一批专家。这就难怪了,再垃圾的语言也有一大批人来鼓吹。因为这些没真本事的人,随便把一个东西捧上天都有自己的好处。

  由于受到这些“先知”的影响,有些人开始在他们自己的公司里“布道”。比如有人在 Python 的 meetup 集会时告诉我,他试图在自己的小组里推 Python,可是一些老顽固一定要用 Java,认为 Java 才是王道。很鄙夷不高兴的样子。

  看到这些我终于理解了,一些地区是如何被从一个国家分裂出去,最后沦落为另外一个国家殖民地的。最早的时候,一般是派传教士过去“传经”,然后就煽动一小部分人起来造反。到后来就可以名正言顺的以“保护传教士”,“保护宗教自由”,“维持和平”等理由把军舰开到别人家门口……

2
0
 
 
 
找优秀程序员,就在博客园
投递人 itwriter 发布于 2014-02-10 11:15 评论(3) 有1159人阅读  原文链接  [收藏]  « »

  写“互联网思维”是需要一些勇气的。这个词在去年被无数人、无数篇文章写过,其中还不乏雷军、周鸿祎这样的大人物,一时间风光无限。可到了年底的时候,这个词又似乎被打入十八层地狱,变成了“忽悠”的同义词。所以,不管我怎么写,一定都会被一半的人骂胡扯。

  说实话,刚开始听到互联网思维的时候,我真的没搞懂。什么专注、极致、口碑、快,什么用户体验、免费、快速迭代,这些都很对,但是,为什么这些就是互联网思维了呢?难道互联网之前的时代这些就不重要吗?而对于那些说互联网思维是大忽悠、世界上根本没有什么互联网思维的文章,我觉得就是为了搏出位而故意唱反调了,奉劝大家对于这类文章不要当一回事。

  铺垫到此为止,切入正题吧。第一,我认为互联网思维一定是存在的,而且被诸多公司运用并且取得了成功。第二,互联网思维也并不新鲜,它与系统思维一脉相承,只是因为到了互联网时代,一大批互联网公司运用此种思维取得了商业的成功,所以有了新的名字“互联网思维”。第三,互联网公司并不一定都有互联网思维,非互联网公司也不一定没有互联网思维,这和他们从事的行业无关,只和思维方式有关。

  大道相通。人类文明越来越发达,学科越来越多,涌现出来的理论越来越多,但很多理论背后的逻辑其实是共通的。我们来看一些例子——

  无为而治:老子认为,最好的统治就是无为而治。皇帝的命令越多,国民越不自由,国力就越不昌盛。而皇帝做得少了,给人民以自由,则经济就越发达,国力就越强。

  市场经济:市场经济说到底就是用供求关系这只“看不见的手”来配置社会资源的一种经济,它并不需要一个全知全能的中央政府来调配资源,但无数理性人从自身利益出发所采取的行动会最终让资源获得最有效率的配置。

  失控理论:凯文·凯利提出了著名的“失控”理论,他通过计算机科学、生物学、进化论、机器人、天文学等诸多领域的例子证明了失控现象的存在。

  这些理论背后共通的逻辑是什么呢?其实就是系统思维。我上网搜索了一下,对于系统思维的定义没有让我满意的,我还是用我能理解的话来给大家解释一下吧。啥叫系统?我们中学生物课本都学过,一片森林就是一个生态系统,兔子吃草,狐狸吃兔子,狐狸死了变成腐殖质被草吸收,这就是一个系统。

  系统有哪些特征呢?我自己尝试着总结了一下:

  第一,系统是失控的。在一个系统当中,并没有一个“上帝”或者“中央”去规定系统当中的每个个体应该如何做,个体自己决定自己的行为。

  第二,系统是有机的。任何一个个体的行为,都会影响到其他个体,但是在宏观层面,系统却呈现出秩序性。

  第三,系统是有规则的。个体行为虽然无法预测,但是他们却按照规则行事,比如说饿了要吃饭,长大了要交配,对危险的事情会逃避,等等。

  第四,系统是会进化的。系统内的循环并非一成不变,当某些变量发生变化之后,整个系统也会发生变化。

  小的时候,我有段时间也相信宿命论的观点,认为所有的事情都是被安排好的,认为只要科学发达到一定阶段,我们就可以完全准确的预测未来的每一件事情。现在我则更倾向于认为,所谓真理就是系统运转的规则,即使我们认识认识到了这些规则,我们仍然无法通过规则去预测个体和整个系统。

  好了,现在让我们用系统思维来审视一下那些互联网产品们。

  谷歌:在谷歌的系统里有这样几个角色——谷歌公司、用户、媒体、广告主。谷歌提供搜索规则和广告投放规则,用户按照谷歌的规则进行搜索,媒体按照谷歌的规则被搜索到,广告主按照谷歌的规则进行广告投放。在这个过程中,谷歌除了提供规则和支持这套规则的产品之外,既没有生产内容,也没有生产广告,但它赚到最多的钱。

  淘宝:淘宝系统的参与者包括淘宝公司、卖家、消费者、第三方服务提供商。同样的,淘宝提供的也是一套交易规则和支撑规则的产品,它并没有亲自出售一件商品,没有亲自服务一位消费者,但它成为了最大的购物网站。

  新浪微博:微博系统里的角色包括新浪微博公司和用户,同一个用户身兼双重角色,他既是内容的生产者、又是内容的使用者,新浪微博公司提供一套内容生产和传播的规则。

  打车软件:打车软件系统参与者包括打车软件公司、出租车司机、用户,打车软件公司自己没有一辆车,但是它制定了这样一个规则“用户发出打车信息后,按照距离优先、时间优先的原则进行交易撮合”,整个系统就运转起来了。

  微信红包:在我印象里,微信红包应该没有进行过什么铺天盖地的媒体宣传,它的一夜蹿红完全是系统的力量。微信红包团队制定了这么个规则:“你可以把红包发到微信群里,先抢到的用户能够拿到红包,拿到多少钱是随机的”。这个规则和赌博非常类似,人类天性当中都是喜欢竞争、喜欢赌的,因此大家开始乐此不疲的玩这个金钱游戏。

  通过上面这些互联网产品可以看出,他们的共同特征是:它们都是一个系统,企业提供这个系统运转的规则,但企业自己不直接参与到商品、服务的提供环节当中,他们也无法精确控制系统的运转,只能通过改变规则来对系统施加模糊的影响。

  这就是我理解的互联网思维,它是一种系统思维。在互联网公司所建立的那个系统当中,产品经理扮演的其实就是上帝的角色,他建立规则,通过规则去影响系统当中各个主体的行为,进而让整个系统实现良性的运转。

  作为传统行业运用互联网思维的模范,小米改变了手机行业的规则。传统的手机行业是靠差价赚钱的,我一个手机成本 1500,卖 2000,那我就赚了 500,这是传统思维的做法。小米的规则是什么呢?我一个手机成本 1500,好,那我就卖 1500,甚至 1200 我都敢卖。传统公司开始的时候肯定觉得小米疯了,或者是以为小米是要把他们挤破产了再提价,这是他们用自己的思维方式去思考得出的结论。可是对于小米来说,它其实不在乎硬件本身赚钱不赚钱,它是通过硬件来获取用户,用户才是小米的真正目标。有了用户以后,小米建立的一套生态系统就可以运行起来了,它可以在里面卖书、卖 APP、卖商品、卖游戏……它可以把卖硬件亏的钱全都赚回来。

  看到这里,可能有些朋友要悲观失望了:如果互联网思维是这样的话,那岂不是少数人的游戏,和我们大部分人无关了?当然不是。互联网思维的核心是建立规则,这个规则可大可小,大规则能够成就大的事业,小规则可以帮助你改善你的很多事情,例如——

  用互联网思维做营销:

  我又要提到美国租车公司 Uber 了,它没做过什么广告我就知道了它,它到底做了什么呢?当你注册成为 Uber 的用户之后,它会给你一个邀请码(我的是 9ny97,您可以输入进去试一下),你把 Uber 推荐给你的朋友以后,他输入你的邀请码,他账户里就会得到 100 元的体验金,当他乘坐过 Uber 之后,你的账户里也会得到 100 元奖励。利用这样一种规则,Uber 就把用户的积极性调动起来了,这个系统就开始运转了。我们明道的营销方式和 Uber 异曲同工,老客户推荐朋友使用明道以后,他和朋友同时都会免费获得额外 1 个月的高级服务。

  用互联网思维做管理:

  在这里举一个我自己的例子,下个月明道社区就会上线了,如果按照传统思路,我肯定要去招聘几个员工专门来维护社区,那又是一笔不小的开支,而且效果还未必好,因为能够胜任这个工作的人肯定是挺难找的。我的做法是,不招聘专职人员来从事此项工作,而是把整个销售团队的几十个部署顾问全部变成社区的维护者。我的规则是这样的:在首页设立顾问排行榜,通过在论坛当中发布高价值内容、解答客户的疑难问题,顾问可以获得来自用户的“赞”,赞越多排名就越高,他们获得客户的几率就越高。如此一来,我就把整个销售团队都变成了明道社区的内容贡献者和客服了。

  也许,建立系统确实只是一少部分人能做的事情,但是具有系统思维仍然是没什么坏处的,因为它起码可以让你看清楚自己在系统当中所处的位置,知道自己应该做什么、不应该做什么。如果你没有建立系统的能力,那就努力的利用系统的规则给自己谋取最大的利益吧。

posted on 2014-02-10 23:32  HackerVirus  阅读(464)  评论(0编辑  收藏  举报