Programming 板


LINE

原文有图 还蛮好笑的 http://mmdays.wordpress.com/2007/04/24/coding-style/ Posted by Mr. Saturday 写程式的人都或多或少会有这种感觉,别人的code看起来总不是那麽地顺眼,阅读自己的 code才是像阅读好书一样如行云流水般顺畅。其实写 code如写书,不仅写给自己看,同 时也写给别人看;开发软体也往往有如打造一件工艺品,投入其中的巧妙心思及用心,会 影响到最後呈现出来的结果。所以,写程式本身可以是一种艺术,而不仅仅是一件耗费劳 力的枯燥工作。这也是为什麽Knuth要把他的巨着取名为The Art of Computer Programming,他认为打造软体是困难的,是一种复杂度以及最後呈现结果足够作为一件 艺术品的一种过程。当然以Mr. Saturday的观点来看,要迈入如创造艺术品般地去打造软 体这样的一个境界,实在不是我们这种实力浅薄之人一日可成的事。所以,我还是比较喜 欢写code如写书这个切入点。 既然写code如写书,那麽最重要的就莫过於条理清晰,脉络分明的内容了,於是我们就需 要一套令人容易了解的呈现手法来写作了,一方面让自己好读,一方面也让读者好读:於 是coding style这种东西就出现了。这篇文章就是要来跟大家简单介绍一些写code最为常 用的coding style,以及一般programmer彼此之间常常存在的有趣现象。 可能有人会觉得:「coding style这种东西有什麽好谈的?」其实coding style说起来还 真没什麽学问,不过就是写code的一些风格罢了。但是一般programmer常常会忽略的是, 他们写code其实是给三种观众看: * 给compiler看:这是每个programmer都会记得的事情,所以他们会确保自己写出来 的东西不会让compiler抱怨,或是吐出一堆垃圾,因此他们会乖乖地遵循着programming language的语法,好好地写给compiler看,小心翼翼地不要犯错。compiler不会计较你写 code的style,只要compiler 看得懂,就一切ok。 * 给自己看:不幸的是,很多人从头到尾都没想到,写code也要写给自己看,而且不 仅仅是让自己现在看得懂,也要让自己以後看得懂,很多 programmer年轻气盛,在程式 里用了高超的语法和神奇的bitwise technique,写了执行速度快人一等的程式,却就是 忘了写注解,十年後翻开一看,虽然大概知道以前用的技巧和语法,却要重新咀嚼一番才 能完全理解,想想如果此时十年前的你可以来跟你解释,不是挺好?所以别忘了把自己也 当成是潜在的读者。 * 给其他人看:project的deadline快到了,只剩没几天可以赶code,还要算算整个 程式兜起来compile所需要花的时间,现在这种情况下,能有东西交差就不错了,还管什 麽style和注解啊。ok,连夜赶工过了几天终於写完了,但是下一个project又接踵而至, 哪还有时间回头去把code好好重新整理一番?注解?等我有空再说吧。(结果真的有空了 也跑去上MSN聊天) 於是在业界,我们往往就会看到一大堆没有注解和coding style混乱的code,一打开档案 ,我们嘴里就开始不停咒骂这些该死不写注解、还以为全世界的人都有义务看得懂他的 code的宅男。然後一年後,换成另外一批人在咒骂我们。软体界就是如此生生不息。根据 业界的统计,一个软体的生命周期之中,有80%是花在维护上面,让他人容易读懂和维护 你的code,对於软体的成功和演进至关重要。Mr. Saturday曾经接到一个有关Robotics的 专案,是要写机器人运作的软体,这个软体之中有关kinematics的部分已经完成了,我要 负责做的是search的演算法,但是search过程中总是需要去度量机器人现在的kinematics ,於是乎我打开了前人写好的部分,准备好好研究一番。结果一看不得了,几十个 source code的档案,加一加三千多行的程式码,显然出自於多人之手,不仅coding style混乱,更糟的是注解不超过10行!一看真是整个呆掉,写信去问之前的开发者也是 久久没有回音。(其实就算得到回音,我还真的是不知道要从何问起。)结果最後就演变成 ,我和我的team member另外写code去猜和测试这些没有注解的程式是在做什麽!真是有 够心酸。脑细胞也因此坏死一堆。 在业界一些比较大型的软体公司,自然会有一套方法来避免这种现象,所以coding standard应运而生。作为一个新进人员,阅读公司制定出来的coding standard绝对是新 进训练时不可或缺的一环。如果公司自始至终都没有给你看内部惯用的coding standard ,那这家公司的软体开发水准,恐怕就要画上一个问号了。如果你现在只是一个自学程式 ,写写学校作业和project的学生,培养好的 coding style对你来说同样重要,因为业界 很多的自订标准,脱离不了一些经典的coding style,以下简单列出一些给大家参考: * Coding Conventions for the Java Programming Language * C++ Programming Conventions * Pascal Style Guide * Mozilla Coding Style Guide * Linux Coding Style * Hungarian Notation: 这个要特别讲一下,这是微软在1980年代搞出来的一种取名 方式,如果你看过Win32 API或是现在还在跟MFC奋战的话,你对於这个notation一定不会 陌生。这种style引起相当大的争议,因为程式之中会出现一些名字相当怪异的变数或是 class名称,看起来很丑。所以除非你有志跟微软的那些东西长期相处,不然我个人是觉 得平常写程式实在没有必要学这种notation。 Coding Style没有绝对的好与坏。一但你选定自己遵循的规则後,之後最重要的就是维持 这个style的一致性,不要变来变去。 另外,不仅仅是针对programmer而已,coding style对於project manager有时甚至更重 要,你身为一个project manager,绝对不能让自己手下几个programmer在coding style 上有各自为阵的机会,如此一来整个专案将会非常难以维护,programmer彼此之间用code 来进行的沟通也会遇到阻碍,最後完成的软体看起来也会像是拼拼凑凑出来的乐高,相当 不专业。因此,在专案初期,根据公司普遍的标准制定该专案的coding style是相当重要 的一件事情,此时就有几件事情需要考虑: * 有几个coder参与这个专案 * 他们平常的coding style是如何,注意那些喜欢写怪code的人 * 制订出一个大家都满意的coding standard,至少要取得共识 * 明确规范coding style,包括缩排、大小写、括号的位置以及注解的型式等等,都 要有简单的范例和规章来明确说明 * 定期追踪他们写出来的东西,不要让他们的code随着时间渐渐偏离订好的coding standard 好的coding style是建构软体相当重要的前置作业,现在的project鲜少是由一人独力完 成,以同样的coding style来达到离线沟通的目的就显得更为重要。而当我们写程式时, 最重要的认知就是我们写出来的软体,是要给别人和自己维护的,不是写完可以跑就算了 ,记住要和大家取得写程式共识,不要觉得写到别人看不懂才能证明自己的功力高深。写 大家都看不懂的东西谁都会,但是写到每个人都可以看得懂就真正是一门大学问了。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.111.214
1F:推 m1ssU:谢谢 218.165.187.34 05/06 20:14
2F:→ jaw109:Hungarian Notation为何没有必要学!? 219.81.199.252 05/06 21:00
3F:→ jaw109:只因为是M$吗? 219.81.199.252 05/06 21:01
4F:→ meltice:我连CVS SVN都还没学好 218.211.18.134 05/06 21:14
5F:推 deuter:Hungarian Notation是过时的东西了 67.161.17.127 05/07 00:04
6F:→ deuter:MS .NET guide 都说不要再用了 67.161.17.127 05/07 00:04
7F:推 adrianshum:Hungarian Notation is evil 202.22.246.26 05/07 11:00
8F:推 horngsh:why Hungarian Notation is evil? I don't 59.126.181.10 05/07 13:03
9F:→ horngsh:get it. 59.126.181.10 05/07 13:04
10F:推 ykjiang:http://tiny.pl/dlvt 61.59.232.28 05/08 23:38







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP