首页    新闻    小组    威客    人才    下载    博客    代码贴    在线编程    论坛
编程到底难在哪里?
2018年9月4日 09:56 | 阅读 1186 次

编程到底难在哪里?知乎上有人提出了这个问题,提问者似乎将这个问题上升到了哲学高度,他认为各种编程语言就好比文字,编程的过程就是用文笔书写文章,假设对于语言的应用已经十分熟练了,那么编程的难点到底在哪里呢?是使用语言的思路难,还是各种算法的运用难,亦或是明明是人脑却要用电脑的方式思考问题?


问题下边答主 Amazon 资深工程师阿莱克西斯的回答比较典型,获得了 10k+ 的赞同,或许对你有所启发。

阿莱克西斯介绍,他们组有一位美国实习生,这里暂且叫他 G,G 很 geek、干活快,一天可以写 2000 行代码,阿莱克西斯 code review 的速度跟不上他写的速度。G 认为普通的编程没什么意思,太过于简单,写程序这方面已经没什么追求了,他比较想研究大数据的框架、数据库,或者机器学习之类的工作,做设计,早日脱离代码这种无脑工作。

有一次阿莱克西斯休假 2 周,交代了 G 一些工作,2 周后回来,发现让 G 改的那个 Java 包爆炸了,本来一个支持了 7 个功能的框架包,总代码量也就 5k 行,经过这两周 G 的发展,已经变成了 15k+ 行,也就是说 G 为了一个小功能在包里加了 1w 行代码。

阿莱克西斯表示这代码没法 review,于是让 G 解释这些代码都是干什么的。G 的回复:

(沉思+100)这块我现在也看不太懂当时为什么这么写了。。。

(沉思)这边写的比较复杂是因为当初那边是那样写的,所以这边没办法才只能这么写。

(沉思)把当初那边改好很麻烦,影响也很大,不如就这样吧。

(沉思)这里这么写是因为你看着里是这样的, 然后这里有这个逻辑,然后这里。。。(来回来去翻n个类之后)。。。 所以你看我这里虽然写的比较诡异,但是完全没问题的!(得意ing)

(沉思)这边做的这么奇怪是因为有个bug,通过这么写,这个就bug没了,我也不知道怎么回事。。。所以你看我在这边注释,这行不能删了。。。

(沉思)我觉得这个功能很酷,你们虽然现在不需要,不过有总比没有好吧,将来如果……%¥……&%&……%*7&%……*%…(我没听懂)的话,这个就很有用!!

...

G 的解释充满了”忘记为什么那样写、照着原有代码写、怕麻烦将就着写、只关注功能有没有实现去写、天马行空过度优化“……没办法,阿莱克西斯一次一次让 G 重写,他表示这样编程也太难了,后来总算简化成大概 5k 行。再后来阿莱克西斯重写了一遍这个库,总共只有不到 1k 行代码。

通过 G 的事例,阿莱克西斯想表达,编程的难处不在于代码能不能写得快,而在于需要对以下几个方面做出有效的交待:

  1. 做出来容易,做正确难。做出来指没 bug 且完成需要的功能,这是最基本要求。正确不是指功能正确,而是指程序可以很容易推理理解,理解意图,理解它是如何做到的,理解为什么系统不会出错,理解为什么要这么做。

  2. 编程是给未来的人讲故事。你无法知道将来这个人是谁,他都懂什么,他经历过什么,这个系统将来已经是什么样子了。我们需要在这种无知,缺乏信息的情况下做决定,从千万种把这件事做出来的方法里,选出你觉得最能把这个故事给讲好的那种方式,把故事写下来。编程是一种沟通,沟通是一种艺术,用程序跨越时空之沟通则是一门属于程序员的特有的艺术(就好比数学家用数学公式来沟通)。

  3. 坏的决定会导致坏的决定,甚至导致人们去扭曲一个好的决定去迎合坏的决定。垃圾会制造垃圾,一个放在系统里不经清理的额外复杂度,会导致更多额外复杂度的生成。

  4. 每个人甚至同一个人的不同时刻都有自己不同的制造额外复杂度的缺陷,回头看你昨天写的代码,可能会觉得都是垃圾。

你认为编程到底难在哪里呢?

(文/开源中国)    




评论 (1)
游客请输入验证码
最新评论
1楼: qilihe_chess 发表于 2018-09-05 10:32  
  回复
0
1
收藏