Loading
0

算法很难,编程不易,程序员的苦,谁懂?

今天,我们来探讨一下,程序员到底苦在哪里。算法很难,编程不易,但这些并不是程序员苦的全部原因。

身为程序员的你,一定也听到过下面这样的段子:

段子

产品经理有三句奇葩口头禅

这个功能必须加

那个需求不能砍

明天上线

老板有三句奇葩口头禅

这个其实很简单

具体细节我不管

你们抓紧

客户有三句奇葩口头禅

我不要这个我要那个

我不要那个我要这个

都不是我想要的

客户不到关键的时候见不着

老板是神龙见首不见尾

产品经理要么下班就走

要么留下看着别人加班

剩下一班程序员夜以继日敲代码

哒哒哒哒哒……

1.程序员和客户

当客户说:你们先开发出来,我再提需求

小鱼儿(注:Pilot Fish,本文主角的名字)接到了一个软件项目,项目的要求是能够处理公司客服中心收到的各种服务请求,内容包括服务调度,设备跟踪,工程师的服务请求以及一些设计问题。

“我非常尽心尽责,拿着纸笔一个一个地跟各个部门的头头谈话,想把他们的需求或者意见记录下来。”小鱼儿苦恼的说。“他们给我的答复却千篇一律:’我不知道,你先大概弄一下,然后我们再看看了。‘”

小鱼儿并没有气馁,他跑到各个部门的潜在用户那里去征求意见。可这些家伙跟他们的老板们如出一辙。他们给小鱼儿的答复是:“大致搞一下,然后我们再给建议。”

小鱼儿冥思苦想:“没有具体的需求的话,如何才能把项目做出来呢?” 突然灵光一现,他有主意了。没过多久,他开始邀请所有的部门头头来参加他的项目演示。

他甚至邀请了公司的总裁,而当总裁真的出现在会议室的时候,小鱼儿几乎吓尿了。但此时已经由不得他回头了。

会议室里坐了满满一屋子人,小鱼儿打开投影仪,开始演示他的项目。大屏幕上显示出项目的标题。几秒钟后,电脑的CD-ROM自动打开了,几秒钟后,它又自动关闭了。

演示结束。

“是不是设备出了什么问题?” 某部门头头问。

“没问题啊,”小鱼儿说,“你们想再看一次吗?” 他双击了一下项目图标,项目标题再次显示在大屏幕上,CD-ROM自动打开然后自动关闭。

“但它的功能只不过是打开CD-ROM而已,”分管机械工程部的副总说。

“没错,然后关上它,” 小鱼儿说,尽可能微笑地面对着满屋子的愤怒面孔。

“可这并不是我们想要的!” 电子部门的副总说,其他的部门头头们也纷纷表达他们的不满情绪。

小鱼儿大声说道:“你们,没有一个人告诉我你们想要什么,所以我就照我自己的想法做了一个。你们还想不想再看一遍?”

会议室静了下来,充满了愤怒的气息,这沉寂直到坐在会议室最后面的老总从椅子上摔了下来才被打破。

“我吓得要死,以为他被我气得心脏病发作了,直到最后他哈哈大笑起来。” 小鱼儿后来说。

“那天下班前,我从各部门收到了他们对项目的需求。然而,接下来的几个月里,他们都不理我。”

2.程序员和项目

3.程序员和用户

我曾经说过,程序员不是一般的人,是具有某种超能力的人。但问题是,程序员往往意识不到自己的这种特异功能。看看下面这些段子:

1.从前有个程序员,买了辆车,车牌尾号 404,后来车找不到了。

2.对程序员来说世界上最遥远的距离不是生与死,而是亲手制造的 Bug 就在眼前,却怎么都找不到它。。。

3.程序员最常见说的一句冷笑话:提交代码不写注释的人,xxx就跟注释一样长。

4.一个程序猿在肉店买了 1 公斤肉,回家一称,他不高兴的跑回肉店对老板说:少了 24 克……

5.服务器按功能可以分为:数据库服务器,web 服务器,cache 服务器,下片儿服务器等等。下片儿......

6.十行代码九个警告八个错误竟然敢说七日精通六天学会五湖四海也不见如此三心二意之项目经理简直一级下流。

7.网络聊天的时候,想表达对方是猪,一般人会打“xxx你这个猪。”,程序员会打 xxx.isPig = TRUE。

8.这个人肯定是程序员呀,因为他的估算能力暴露身份了 。

9.写代码写到崩溃的时候,程序员经常这样鼓励自己。

10.女程序员的报喜方式。

但是在他们的眼里,他们会认为自己很普通,跟常人一样,所以,程序员能做到的事情,其他人——比如他们的客户/软件用户——也应该很容易做到。

但事实上,由于大部分人——绝大部分人(包括软件开发公司的客户/购买软件的用户)——都是电脑小白(对电脑知识/计算机知识/软件知识知之甚少的人)。

一个对于程序员来说很显而易见的软件操作,换成让用户来操作,就会出现各种各样奇怪的事情。这让程序员非常痛苦。

记得有一次,一个客户打电话给我,说他电脑桌面上的大 e 找不到了,我没听懂,什么大 e 找不到了?客户解释说:就是那个长的像大个儿的英文字母 e 的图标找不到了。我倒。终于明白了他指的是桌面上的 IE 浏览器的图标不见了。

还有一次,有个客户提出一个需求,要求在页面上增加一个搜索功能,我问它,系统里有搜索功能,为什么还要在这个地方新增一个搜索功能,他说他要的不是那个搜索,他要的是在这个页面上搜到某个关键词。

经过进一步的沟通,我明白了,他要的是浏览器上的快捷键 CTRL+F 的功能。

因为用户的这些特征,导致了程序员认为完美的程序,到了客户的手里,却变成极其难用的软件,投诉电话如乡下骂街的泼妇似的响个不停。

而事后分析发现,根本原因都是因为程序员高估了用户对软件的掌控能力,低估了自己对软件的创造能力,于是导致了他们看这些客户使用他们开发的软件时,都是那样一种可笑的行为,如下图:

在程序员的眼里,用户是这样使用他们开发的软件的

如果是脾气暴躁的程序员,遇到这种情况,难免会对着客户发一顿牢骚,而且,程序员的脾气一般都不是很好。所以,程序员通常跟客户沟通时,项目经理一般都是跟着一起,以免事态激化。

用户虽然给程序员带来很多麻烦,但其实程序员的所有荣耀感都来自客户,因为只有客户用得满意,程序员才会有成就感。比如像下面这几个客户在使用一个新款软件时显露出来的表情,足够让一个处在北京重度雾霾的下午的程序员也能露出笑容:

用户在使用一款新软件时的样子

程序员虽然脾气不好,但他们都是为工作着想,不带任何个人恩怨。当开发软件有紧急任务时,他们都是任劳任怨的加班加点,当在已经发布的软件中出现了重大 bug 时,他们都会深深在自责,会连夜赶制出紧急修复 bug。

如果不能在第一时间让用户满意,他们会茶不思、饭不想、觉不睡。即使在实在没有短期内完整的补救措施的情况下,他们也会想出一些歪招,但也是行之有效的方案,让用户暂时度过难关。比如,下面就是一个紧急修复补丁:

用户应该体谅程序员。程序员的生活实际处在一种十分矛盾的状态中。编程不像其它行业,比如泥瓦匠砌砖,砌一层砖,墙就会高一次。

但编程不一样,有时候一个程序员写了一天的代码,急得满头大汗,但开发进度未必就有所进展,有时候甚至还会倒退。

软件编程是一个亦虚亦实的世界,有时候你搞不清一段代码为什么好用,有时候也会诧异由那样的代码构成的软件也能跑起来,正如下面这张图片中所示:

最后,说一下跟程序员打交道的一些注意事项。程序员因为整天和编程逻辑打交道,所以对因果关系特别敏感。

如果你的话语的因果关系不是很明确,这会让他们感到疑惑,如果你的话语的因果关系不完整,这会让他们办错事。如果你的话中有 if,最好后面用 then 做结束,或者用 else 给出选择,主语要明晰。如果不明晰,就会出现下图中出现的事故:

如果你是一个程序员,你会理解我说的话。可是程序员的“苦”岂止这些:

当程序员太辛苦了,想换一行怎么办?