写程序难在什么地方?

关于程序员的话题,可能会有几个这样的关键字:找不到女朋友、加班狗、薪水高、屌丝、鄙视链、跳槽、改Bug……感觉更多的是自嘲吧!其实这些都不是事,今天我们来说说程序员为什么自称码农,最苦逼的地方在哪里?

如果说学习编程,是一件挺有意思的事情,那么能够写出自己的第一个小项目,会兴奋好一段时间,可是和其他工作类似,比如重复的事情做N遍,也会有厌烦的时刻。

假设一个程序,有30个选项,每个选项有是或者否2种可能性,测试所有可能性有2的30次方,有10亿之多。

1天有60*60*24=86400秒,如果每种可能性需要发费1秒钟测试,那么10亿需要34年,想想都觉得恐怖吧,更加恐怖的是在于,不止30个选项。

在知乎见过这么一个段子,说一个客人在饭店点餐,点了一份宫保鸡丁。假设把这个场景放在程序员的工作当中,会是这样的。

一、原始需求
服务员,给我来一份宫保鸡丁。

二、中途变更需求
厨师做到一半,突然跟服务员说:不要放肉。
服务员:不放肉怎么做啊?
客人:不放肉就行了,其他正常做。
服务员:好的,您稍等!

三、改动太大,部分重构需求
厨师:你大爷!我肉都已经回锅了
服务员:客户非要这么要求的嘛!你把肉挑出来,不就行了!
服务员:行你大爷!然后还是一点点把肉挑出来了。

四、低估改动成本
客人:服务员,菜里面可以给我加一点腐竹吗?
服务员:行,这个应该挺简单的。

五、新需求引入了新研发成本
厨师:你TMD,不知道腐竹得提前泡水吗?炒到一半,你才说?跟他说,想要吃腐竹,需要等半天。
服务员:啊你怎么不早说
厨师:早说你MLGB,我怎么知道他要往宫保鸡丁里面放入腐竹啊?

六、某一功能点摇摆不定
客人:服务员,还是把肉加回去吧!
服务员:您,刚才不是说不要肉吗?
客人:现在,又想要了
服务员:行!您稍等

七、甲方是大爷
厨师:怎么这么想日你?菜都炒过火了你让我放肉?还好,肉我没扔。
服务员:客户提的要求你日我干嘛?
厨师:你就不能拒绝他啊?
服务员:人家是客户嘛!

八、改动开始导致工期延迟
客人:服务员,服务员,怎么这么半天,还不上菜!
服务员:您稍等,我给您催催!

九、开发者请求重新排期
厨师:催你M催啊,腐竹没有泡好,我还得重新放油。

十、甲方催活
服务员:抱歉,加腐竹的话,还需要等半天,您别着急哈
客人:什么,还要等多久?我现在就要吃,你们能快点嘛?在不端上来我就撤单。
服务员:好,您稍等

十一、开发者开始和中间人PK
厨师:日你个仙人板板,这改来改去的,逗我吗?这么下去,我要死了

十二、因工期过长,再次改动需求
客人:服务员,这样吧,腐竹不要了,换成蒜薹就能快点了吧,对了,再加上一点番茄酱。

十三、频繁修改开始导致大量冗余
厨师:我日了狗啊,你TM不知道蒜薹也得掉水啊?还有你怎么让我往热菜里放番茄酱啊???
服务员:掉水总比腐竹强吧,番茄酱往里一倒不就行了吗?很难吗?
厨师:草!腐竹,我还得接着泡,万一这孙子又想要了呢?

十四、奇葩需求
客人:茄丁加了没有,我去其它饭店,可以加了茄丁的啊。
服务员:好好好,您稍等

十五、奇葩你也得做
厨师:去他大爷的,他吃的宫保鸡丁是村西头瞎子王老头炒的宫保鸡丁吗?宫保鸡丁里面放茄丁?
服务员:茄丁炒了扔里面不就行了吗?
厨师:那他妈的还叫菜吗?哪个系的?
服务员:客户要,你就炒了吧
厨师:麻痹,你顺便问问腐竹还要不要,这盆腐竹占地方,不要我就扔了啊

十六、黑暗前的最后黎明
“服务员,还要多久好啊”
“很快,很快…”
“再给我来一杯西瓜汁”
“好…”
“你再不好,我就走了啊,反正,还没有给钱”
“很快,很快”

十七、最终决战
10分钟后
“咦,我上次吃的不是这个味道啊?”
“从厨房杀出来的大厨:我TM就日了你的狗了…”

人物对照:
厨师:码农
客户:老板/甲方
服务员:客户经理、产品经理

现实中点菜当然不会出现这么啼笑皆非的情况,但项目开发中的一些主要矛盾,和上面的例子有很多神似的地方。所以如果有人问编程最难的在哪里,也许从来不是语言本身,而是业务逻辑、需求变更,还有就是项目的管理吧!比如一个项目管理者最头疼的应该是,团队里出现了一个水平很差的程序员,提交代码等同于提交了更多的BUG,诸如此类!

所以,听完上面的这些,如果你还觉得编程是有趣的并希望成为你的职业,那一定是你的真爱。