写程序最痛苦的部分。。。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
juicy
V2EX    程序员

写程序最痛苦的部分。。。

  •  
  •   juicy 2013-07-20 15:45:50 +08:00 7500 次点击
    这是一个创建于 4469 天前的主题,其中的信息可能已经有所发展或是发生改变。
    渐渐地觉得,写程序最虐心的部分是命名的部分,写程序有很大一部分的时间卡在这个环节上了。

    特别是写前端的程序,写html的时候,命名是一个有奠基性质的过程:想好各个部分的命名之后,后面整个过程就一路畅通了;当对命名稀里糊涂的时候,往往也就意识着你不是很确切地知道整个程序该怎么写。

    可是命名这个过程真的好让人纠结!
    44 条回复    1970-01-01 08:00:00 +08:00
    dreampuf
        1
    dreampuf  
       2013-07-20 15:49:21 +08:00
    项目保持一致,无二意就行。

    一个交换函数命名为“灵魂守卫”,前端后端分为天灾和近卫,我觉得也妥当。
    yuelang85
        2
    yuelang85  
       2013-07-20 15:49:25 +08:00
    写得多了,就有一些自己的模式了。。。。
    YFZZ
        3
    YFZZ  
    PRO
       2013-07-20 16:02:50 +08:00
    前端的话,按照自己的书写习惯和结构模式,制定一份命名规范,然后实践……
    实践过程中,发现规范上不合适的地方,改进。
    等到这份你自己的命名规范已经能满足自己绝大多数代码情况时,就OK了。

    团队协作的话,那就要大家一起商量了。
    fangzhzh
        4
    fangzhzh  
       2013-07-20 16:18:56 +08:00
    我觉得最虐心的是: 程序排UI,排完运行看, 一看差一点, 然后再重拍
    luikore
        5
    luikore  
       2013-07-20 16:20:55 +08:00
    1. 多练习比喻 (metaphor) 的修辞手法
    2. 学习代数, 如果没有 x, y, xs, a, b 这些用法人类根本就不可能进步
    jjgod
        6
    jjgod  
       2013-07-20 16:39:54 +08:00   1
    "There are only two hard problems in Computer Science:
    cache invalidation and naming things."

    -- Phil Karlton
    juicy
        7
    juicy  
    OP
       2013-07-20 16:43:43 +08:00
    @dreampuf 起个马马虎虎的名字,就会不自主地觉得特别别扭的。。然后就一直再想有没有更合适的名字,有没有,有没有,有没有。。。。然后,程序就写不下去了
    juicy
        8
    juicy  
    OP
       2013-07-20 16:47:33 +08:00
    @xhslyf 团队协作倒还好,按照大家的习惯(虽然可能自己并不喜欢)或制定的规范命名,也不是很在意合适程度如何, 往往做自己个人的东西时还真没有给自己做过规范, 或许确实改定一个个人的代码命名规范了。。
    juicy
        9
    juicy  
    OP
       2013-07-20 16:49:44 +08:00
    @jjgod 不知道Phil Karlton是哪位大神,不过大神就是大神,讲出了最容易被忽视的精髓啊
    violetmoon
        10
    violetmoon  
       2013-07-20 17:38:22 +08:00
    同感啊 感觉最纠结的就是给变量起名字了。。。
    dongbeta
        11
    dongbeta  
       2013-07-20 19:55:59 +08:00
    起名和分类
    vivianalive
        12
    vivianalive  
       2013-07-20 20:34:26 +08:00
    个人的话,可以按功能和模块来命名..然后横线,下划线,骆驼式的用法要固定一下.
    比如:
    几个单词放一下表示名字的用横线: maple-syrup-cookies (枫糖饼干)
    表示属于某一分类中的一个对象用下划线: dessert_cookies (点心_饼干)
    下划线和横线一起用: btn_hello-world.png

    最重要一点就是,避免使用abc,xyz,123之类,因为人家可不知道funtion1和function2的作用分别是什么.
    mywjch
        13
    mywjch  
       2013-07-20 21:01:56 +08:00   1
    强烈推荐看一下 The.Art.of.Readable.Code(2011.11 Dustin.Boswell) 和google的 [google-styleguide](https://code.google.com/p/google-styleguide/)
    comcuter
        14
    comcuter  
       2013-07-20 21:53:16 +08:00
    我觉得最虐心的是: 程序排UI,排完运行看, 一看差一点, 然后再重拍

    +1 而且实在浪费时间.
    darasion
        15
    darasion  
       2013-07-20 22:09:31 +08:00   1
    我觉得写代码这种事情,有着天然的手工作坊性质,即便有各种所谓“现代化”的软件工程理论,还是不足以像传统工业那样,每个细节都能在设计时敲定,然后按部就班的完成。

    实际中,很多时候都是写代码到最后,才发现某个事情无法实现,总有一部分代码白写了,总是到最后重构。总是修修补补改来改去。

    比如检查一个机械零件是否合格,只要用尺子量一下就好了,每一个微米都有标准可以依据。
    但是,要检查一坨代码是否真的没bug,或者现在可以用能不能能保证将来成为架构扩展的绊脚石,几乎没有一个统一的标准。总是连代码风格这种鸡毛蒜皮的事情都在争论不休。
    someFork
        16
    someFork  
       2013-07-20 23:47:33 +08:00
    完全同感。
    funcman
        17
    funcman  
       2013-07-20 23:55:49 +08:00
    放弃完美主义吧。
    regmach
        18
    regmach  
       2013-07-21 00:01:38 +08:00
    @dreampuf
    function Tb($a, $b){
    //
    }
    jiyinyiyong
        19
    jiyinyiyong  
       2013-07-21 00:31:18 +08:00
    这太高端了吧.. 每天忙改 Bug 的表示膜拜
    取名字这事情能比调试异步界面纠结的逻辑更改难吗?
    treo
        20
    treo  
       2013-07-21 00:50:02 +08:00
    a1 a2 a3 多简洁
    txx
        21
    txx  
       2013-07-21 00:56:26 +08:00 via iPhone
    曾经打开一段 团队里的人写的 算法性质很强的类,变量名全都是x,xx,xxx,_x,_xx。。。。我杀了他的心都有
    so898
        22
    so898  
       2013-07-21 01:36:33 +08:00
    我的前任自从看到我的一大排TestLabel之后,就拒绝读任何我写的代码了……
    尼玛那些确实是用来测试高度的啊!!!!!
    bitsmix
        23
    bitsmix  
       2013-07-21 01:44:44 +08:00
    来写 js 吧。。。
    xhbeca9
        25
    xhbeca9  
       2013-07-21 09:12:27 +08:00
    学习
    juntao
        26
    juntao  
       2013-07-21 09:18:48 +08:00
    @so898 你的前任。。。。就是这么离开你的把。

    最纠结的也是命名部分。
    juicy
        27
    juicy  
    OP
       2013-07-21 09:53:07 +08:00
    @clino 想成为一个好的程序员,必须先成为一个好的诗人。。。。。。
    walkingway
        28
    walkingway  
       2013-07-21 09:56:07 +08:00
    建议楼主读读《代码大全》的第11章 变量名的力量

    http://book.douban.com/subject/1477390/
    juicy
        29
    juicy  
    OP
       2013-07-21 09:58:16 +08:00
    @walkingway 好的,谢谢~
    alexrezit
        30
    alexrezit  
       2013-07-21 10:01:09 +08:00
    我觉得大部分语言都有命名规范吧? 如果命名有困难多半是英语不好, 而程序员英语不好就像厨师切菜切不匀一样可笑至极.


    @txx
    你可以跟他对着干: txx, txxx, _txx.
    falconeye
        31
    falconeye  
       2013-07-21 10:55:23 +08:00
    深有感触,命名是个大学问。
    最好有一个命名规范,或命名字典,供大家查阅,以便保持统一。
    damngood
        32
    damngood  
       2013-07-21 11:17:43 +08:00
    大家可以举些例子出来作为类似于 naming pattern 的东西 (嗯, design 可以有pattern, naming 应该也可以有吧. :) )

    比如我最近一个场景:

    一个对象创建的时候只赋予了一些简单的属性, 比如 id, name 等少量几个

    然后在一个方法中会给其余的属性赋值, 然后我就纠结了怎么给这个方法取名字好了..

    最后只能想到 dressUP() 或者 inflate() 之类的..

    还可以有更好的吗
    dalang
        33
    dalang  
       2013-07-21 14:42:49 +08:00
    坦白地说,命名对我来说也是大问题。表现在每次重看自己的代码,总觉得好多地方需要重命名。
    有时候基于一些开源的项目做,命名还可以参考已有的代码,纯自己命名的时候不能让自己满意。

    除了命名规范需要遵守外,英语差可能也是一方面原因吧
    wupher
        34
    wupher  
       2013-07-21 15:39:04 +08:00
    我觉得最痛苦的部分是接着别人的写,而他写得像陀屎。更痛苦的是,你还无权更改这陀屎。
    有次接了一个iOS项目,他们后台服务全是WebService,而iOS根本不支持SOAP,需要手动封装。所有的各种不同功能的业务服务,从登录到乱七八糟的各种业务,全都走一个WebService调用。这个WebService函数里面再走一个坑爹无比的XML。这个XML由各种乱七八糟的业务后台汇聚而来,这些业务后台涉及多家公司承建的系统。所以这个XML大家基本都当文本文件来玩了,根本无法校验,每个系统对他都有自己的理解。最后,当初是哪个混蛋设计的接口,里面一堆错别字,"field"都拼写不清楚,这种接口居然还开了设计评审会,那些人都是瞎子吗?
    由于前述种种原因,我虽然极尽挖苦嘲弄侮辱他们的人格和智商,但是他们就是说接口无法修改(其它厂商配合原因、时间紧急、没有程序员、前任辞职,bluh, bluh bluh)。我居然也给它们对付过去了。
    这是我做过的最痛苦的项目,没有之一。
    bcxx
        35
    bcxx  
       2013-07-21 17:17:57 +08:00
    @alexrezit 忘记了是哪门语言,貌似是 F# 还是啥,源码是按照字母表来排序的
    yuelang85
        36
    yuelang85  
       2013-07-21 17:29:05 +08:00
    @wupher 我觉得最痛苦的部分是接着别人的写,而他写得像陀屎。更痛苦的是,你还无权更改这陀屎。

    +1

    还接过那种项目,接手代码还算是不错的代码,但是严重不符合自己需求。然后改啊改啊改,然后当领导问策划为啥项目做了这么长时间的时候,策划竟然说是因为程序在不愿意复用别人代码,不停的改啊改。。。。
    Loveyuki
        37
    Loveyuki  
       2013-07-21 18:08:11 +08:00   1
    唉。重构别人的代码这种事情,说出来都是泪啊。

    一个月重构的我都快吐了。
    alexrezit
        38
    alexrezit  
       2013-07-21 18:31:09 +08:00
    @wupher
    国内的公司? 国内的 iOS 行业就是个笑话.
    alexrezit
        39
    alexrezit  
       2013-07-21 18:31:19 +08:00
    @bcxx
    没懂...
    darkbill
        40
    darkbill  
       2013-07-21 18:38:33 +08:00 via Android
    @loveyuki 重构别人代码,这个确实都是泪啊。。。
    bcxx
        41
    bcxx  
       2013-07-22 08:07:49 +08:00
    @alexrezit 没= =提供另一种大师级的命名例子而已
    cst4you
        42
    cst4you  
       2013-07-22 08:56:25 +08:00 via Android
    我实在很讨厌团队里写html用什么div_1, div_1_3 这样命名的而且还是上下嵌套关系的。
    哥们你要我哪找你们的关系去?
    fanghui
        43
    fanghui  
       2013-07-22 14:11:16 +08:00
    深有同感,分层和功能结合命名
    diligence24
        44
    diligence24  
       2013-07-23 11:07:46 +08:00
    我觉得最痛苦的是差不多的功能重复写几遍,而且想破脑袋也感觉不能把这些方法复用。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5901 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 101ms UTC 02:48 PVG 10:48 LAX 19:48 JFK 22:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86