2KB项目,专业的源码交易网站 帮助 收藏 每日签到

为神马说写程序是很艰难的

  • 时间:2019-01-23 18:34 编辑:2KB 来源:2KB.COM 阅读:317
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:Why
英文原文:Why Programming is Difficult

我曾经认为编程很容易, 但多年之后我慢慢意识到我错了: 一份程序员的工作和我理解的"写程序"是不同的.

起初我觉得编程无非就是命令计算机工作, 而这相对来说并不算难. 在工作了二十多年之后,我愈发觉得这实在是非常容易的事情。

定义1:程序是一种由输入到输出的变换。

程序员即是写程序的人,编程即是写程序的过程。

现在再让我们为上面的定义加上一些限制条件。

定义2:程序是一种满足以下条件的,由输入到输出的变换:

    输出要优雅(原文beautiful)。

    输入要优雅。

    程序本身要优雅。

    输入文档详尽准确。

    程序本身的文档详尽准确。

    程序经历过严格的测试,能够保证正确的结果。

    程序提供的解决方案的文档详尽。

    程序要解决的问题本身的文档详尽。

当添加了这些限制之后,编程就变得非常困难了。对于一些特定的情况,我们可以适当放宽以上的限制条件。下面就来介绍几种典型的情况:

不需要维护的程序

我们写程序常常只是为了输出。这种情况下,输入和程序本身并不一定要考虑未来维护的问题,也不必一定要写得那么优雅并配备详尽的文档。

我写过的一本关于Erlang的书的排版程序就是这种情况。当这本书发表之后,再维护输入和排版程序就显得没什么必要了。只要输出看起来不错就可以了,杂乱的XML输入文件和测试程序不需要维护。

如果这本书再版,订正只需要稍微更改一下输入就可以了。即使输入文件没有详细的文档,这件事做起来也非常容易。

需要被维护的程序

需要被维护的程序刚好和上面的情况相反。输入和程序本身要优雅,相关文档也要详尽。

我前些天和一个写网络应用的顾问聊天,他说只要程序的输出了正确的结果(网站看起来没什么问题各种功能也能正常工作),用户就认定这个项目已经完成了然后项目经理就把他加进下一个项目组里。

他们不明白对于网站来讲仅仅看起来OK是不够的,也根本没有预留时间给整理代码,编写文档这些对未来网站维护有帮助的事情,下一个项目就开始了。

其他使编程变得困难的事

还有三件事会使编程变得困难:

    处理本来不应当出现的问题。

    没有慢吞吞地学习新知识的时间。

    苛刻的系统环境。

就让我们来看看程序员的时间是怎样被这些家伙吃掉的吧。

处理本来不应当出现的问题

我经常要用一些别人编写的软件来解决问题,但我往往并不能够很好地理解这些程序。

一款优秀的软件有准确的文档告诉我如何使用它,但真实世界中的情况常常要糟糕得多:不是没有文档就是文档写得不准确。

文档这样写道:“依次执行XYZ命令,就会得到结果PQR。”而你执行XYZ之后得到的结果根本不是PQR!这种情况下你要怎么办?如果你足够走运,写这个程序的老兄就在附近,你大可以走上去掐死他;大多数人只能去Google一下试试运气,或者试着读一下源代码看看能否找到答案。

利用Google搜索一个bug的解决方案简直像赌博一样令人沮丧。我用Google搜索了半天终于发现了一个倒霉蛋也遇到和我一模一样的问题,哈哈哈哈哈。但是当我满怀期盼地点开链接的时候。。。什么都没有,这个问题还没有人解答。

为什么这个补丁别人可以用我就不行,是因为我衰神附体了吗?还是我所处的空间扭曲到正常人类世界的物理定律已经失效的地步?虽然这很令人沮丧,但不同的机器初始状态会不一样也很正常,因此能够解决别人bug的补丁在我的机器上可能并不适用。

有时我会这样想:要是我们都用Smalltalk编程,都从同样的起始状态开始运行就好了。Smalltalk程序员一定生活在一个根本不用担心这种问题的美好的世界里,但那也只是暂时的,当他们的程序和其他语言编写的程序通讯的时候,他们终究会明白这个世界有多么的残酷。

排查程序的错误也是令人沮丧的,因为你并不清楚bug最后到底为什么消失了,是因为你最后一次的改动吗?还是因为你之前所有改动效果的总和?

问题的关键在于诸如此类的事情占据了程序员60%到70%的时间。我曾经花了一周才让一个出问题的LDAP服务器重新工作了,因为老大不让我自己写这个服务器。我在折腾了一周这个用C语言开发的,文档写得很烂的破玩意之后,终于决定把老大的话抛在脑后,用中午吃饭的时间自己写了一个Erlang的版本,问题才终于解决了。

我承认我写的并不是一个完整的LDAP服务器,但我也不需要一个完整的LDAP服务器,只要其中的一些命令行可以工作就可以了,这解决起来非常容易。

现在我已经不会对实现那些古董级的协议感到兴奋了,但一般说来和用别人的代码相比自己重新实现往往会节省更多的时间。

解决问题和学习是不同的

我是一个彻头彻尾的懒鬼。当我想用Latex插入一个图表的之前我不想先看完391页文档。你当然可以指责我懒惰,我也明白照理来说我应当先把那篇热情洋溢的文档读完,但我只有十分钟,根本没法读完那篇文档。

当我需要解决问题的时候,我需要的是快速的解决方案,这个时候过于冗长的说明文档对我我来说就是灾难。

以排版程序为例,我曾经在这三款软件面前摇摆不定:Tex/Latex,XSLT-FO,Erlguten。

差不多每三年我都会强烈地想使用postscript来写文档,每当我有这种感觉的时候,我都会深吸一口气,然后静静地等待这种感觉自己消失。

其它翻译版本 (1) 加载中

我猜詹巴蒂斯塔波多尼在1818年制作他的Manuale Tipografico (詹巴蒂斯塔波多尼的Manuale Tipografico被称为最伟大的模式标本的书的印刷。发行追授于1818年在帕尔马由波多尼的忠实遗孀玛格丽特,两卷本著作中包含的142罗马字母琳琅满目相应斜体,许多脚本和异国情调的字体,以及鲜花和装饰品惊人的集合)无人问津,可能排版一页都要耗时一周,让机器完成枯燥而危险的任务可以使我们解放出更多的时间 

我问过我的老板,他是否需要漂亮的幻灯片来演讲。他说需要,但要我明天之前给他。这让我没有合适的时间来学习TeX (我猜可能需要一两年),没时间实现自己的排版语言(我猜需要5-10年),没时间把它记载到附录中,我权衡了需要时间去学习的几个方案,最终选择了 PowerPoint。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部