有多少程序员设计和编写代码的时间,远远少于修 BUG 的时间…… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NewYear
V2EX    问与答

有多少程序员设计和编写代码的时间,远远少于修 BUG 的时间……

  •  1
     
  •   NewYear 2015-01-08 11:23:26 +08:00 5860 次点击
    这是一个创建于 3934 天前的主题,其中的信息可能已经有所发展或是发生改变。
    面对一个新的程序(恩,我不是程序员,只做一些简单的程序来改善自己的“生活”)

    但是每次写的时候,逻辑里面总是有总总错误……

    比如累计数值到多少就跳出循环……忘记else去归零了(中间判断某些情况是要清零的,让程序不跳出这个循环,如果遇到错误才跳出这个循环)
    比如说自己想的流程是对的,但是写出来的代码……判断的时候错了……(因为要判断各种意外的情形,需要做不少if判断)

    然后能运转起来之后,就看看这里能优化下,赶紧去优化,那里能再完美下,赶紧去完美了,有的错误处理不太对(错误出现的几率不大,但是却存在会阻碍整个程序运行),需要反复尝试不同的方法才能得到解决办法。

    这些都还好,只要耐心点,总是会做到的。

    但是最尴尬的是,有时候反复思考,想不出怎么去解决这个问题,想啊想,就是想不到,但是可能过几天上厕所的时候,坐公交的时候,睡觉躺下还没睡着的时候……意外的就想到解决办法了……

    好吧最近看了csdn的什么注释活动,看到很多奇葩的注释,最常见的就是要么觉得自己当初的逻辑很傻,要么就是绝对不要尝试优化下面代码,因为看起来简单却牵扯太多,又或者调用的时候太奇葩了。

    似乎真正的程序员也会为这些问题头疼啊 = =!我是说我那些破问题
    22 条回复    2015-01-09 13:08:40 +08:00
    NewYear
        1
    NewYear  
    OP
       2015-01-08 11:24:32 +08:00
    每个回复的都有赞,绝对不会浪费你的铜币!谢谢!
    xmvagrant
        2
    xmvagrant  
       2015-01-08 12:43:09 +08:00   1
    你不觉得意外的就想到解决办法的时候让人欣喜若狂吗?
    herozzm
        3
    herozzm  
       2015-01-08 12:49:09 +08:00   1
    看一个程序员的素质,高素质的大部分时间是在业务bug,而不是在程序bug
    pH
        4
    pH  
       2015-01-08 15:49:16 +08:00 via iPad   1
    @xmvagrant 确实那种感觉很开心
    roys
        5
    roys  
       2015-01-08 15:52:33 +08:00   1
    一直想改掉这个毛病。每次有了一丁点想法就开始写。最后也只能调bug了。
    msg7086
        6
    msg7086  
       2015-01-08 16:09:03 +08:00 via iPhone   1
    铜币倒是小事。一个能引起思考和给人带来帮助的主题就是好主题。

    测试驱动开发!!
    spacewander
        7
    spacewander  
       2015-01-08 16:17:59 +08:00   1
    我觉得这就是人生……已经习惯了-_-
    em70
        8
    em70  
       2015-01-08 16:21:52 +08:00   1
    这是基本功是否扎实的问题,没积累够1万个小时编程经验
    NewYear
        9
    NewYear  
    OP
       2015-01-08 16:56:31 +08:00
    @xmvagrant 想到一个无可奈何的问题居然有解决办法 当然是高兴的 但是更多的时候还是想着当时就解决了该多好啊!

    @herozzm 嘿嘿,程序bug是因为经验不多或者自己不小心整出来的吧……

    @pH 想不出解决办法的时候好忧伤的,只能慢慢想,慢慢想,完了自己还觉得,这玩意根本不可能实现嘛!完了过几天想到办法了,立马就推翻自己的说法了……

    @roys 不管怎样,总是能去写代码,就很不错了,我就很懒,比如我坚持了快3个月做一件事情,每天都要盯着手动处理……时不时要去看看,最后终于觉得,还是花点时间写个自动化的出来吧……于是几个小时后,就拿着勉强可以用的用起来了,然后一发现有错的,可以改进的,就加进去……有错的就调整好,蛋疼,有的又获取不到样本,只有出问题的时候才能截取下来……不过这个过程还是挺有动力的,修修改改也半个月了。

    浪费的时间真多啊,哈哈哈!不过以后可以自动化的丢那里无错运行,就很开心了。


    @msg7086 我是先取一大堆样本来,然后分析处理的。应该也差不多吧。有的样本获取不到,只有出问题再处理。


    @spacewander 只要没放弃修改就不错啦,要是自己都看不下去了,这样的人生要杯具了,哈哈哈!


    @em70 想了想,很有道理,想想自己以前用某种语言的时候,一开始也是常常写错,后来就少了。其实是自己不熟悉写法,老是容易忘记掉了。当然了,写错了debug信息又不提示的时候那叫一个蛋疼(有的提示信息把自己搞混了)。
    046569
        10
    046569  
       2015-01-08 17:33:04 +08:00   1
    看了LZ的帖子,心有戚戚焉,曾几何时自己也是同样自己挖坑自己跳.
    说说我的经验:
    第一,找个更适合自己的语言.语法舒服,库比较完善,用起来省心.
    第二,改变思想,比如忘记循环,改用迭代.不要假想太多例外,如果是会影响到运行结果,那么就 Fail-fast ;否则做个简单容错保证结果正确即可.@msg7086 提到的 TDD 是个好主意.
    第三,调试的时候利用各种工具,能下断点就不打印日志.该懒的时候就应该懒.
    第四,同一件事如果你重复做第二遍,你就应该考虑自动化了.理由同上.
    BGLL
        11
    BGLL  
       2015-01-08 17:52:29 +08:00   1
    写得多了,很多东西就能闭着眼睛也不会错了
    BrownGoodMan
        12
    BrownGoodMan  
       2015-01-08 18:21:54 +08:00   1
    合格程序员如果写十几个ifelse在一起会先自行撞墙5分钟惩罚自己.
    你写的太少,而且不规范.总之就是没经验...
    建议先读几本7天学会c语言之类的书籍.不要乱写,找些大师的例子一边读一边理解一边模仿.
    另外你能写程序肯定就是程序员了,它是能力定位又不是职业.
    pepsin
        13
    pepsin  
       2015-01-08 18:42:48 +08:00   1
    我的 bug 一般是自动补全带来的 Typo 哈哈哈
    NewYear
        14
    NewYear  
    OP
       2015-01-08 20:01:24 +08:00
    @046569 喜欢的语言真心找不到!我只希望有个多线程,能拖拉界面(虽然很喜欢web方面的语言,但是这方面的语言先天性对做应用程序支持不好)……其他语言要么太复杂了(比如说C吧,听说1-2年还不够入门的),要么用户要安装一个硕大的运行库……python似乎就很不错,还跨平台,不过画不出界面,太不合适我们这些非专业的了……以前最开始的就是vb相关的,就暂时用vb6了……vb6要是加个多线程就好了……咦,想来想去,好像就delphi靠近我所想的了,但是看着那语法……醉了。
    我真心不是挑剔,好像delphi用的人比较少,就怕到时候找不到别人的轮子用……或许有误解的吧……

    我真心不是挑剔,只是想有个能拖拉界面的(简单嘛!),然后有个多线程的!(VB6木有),还有就是你说的,有各种库啊!有没有什么合适的推荐推荐呢!(这问题痛苦很久了,毕竟要重新学过,慎重啊)

    你说的迭代我不懂唉,回头再研究研究= =!自己以前好像也查过……小循环我是满足条件就继续下去执行,大循环排版好容易出错,改用goto跳走的。(视情况而定,有的程序不会写任何一个goto)

    我非调试一般不输出什么东西,出错就到差不多的位置去输出各种数据出来看看……然后研究对策,嘿嘿!其实一般执行到某处有问题的,进去看看代码差不多就能猜到哪里问题了。

    虽然重复的事情应该做自动化,但是感觉写工具也是需要花费时间的啊……一想到各种调试,各种bug,各种死循环,哈哈哈哈!你懂的,就更懒了,如果有别人写好的如果合适的话一定用别人的!(一般没安全问题的工具),用得不喜欢就想想别人怎么实现的,偷懒,然后按照自己思路改进改进……会写一些程序就是好啊,用得不爽自己来!


    @BGLL 是的,不过有些语言真的这方面很有优势哎,比如说js,括号尖括号一点击,就显示另一个在哪里了。高下立判,再多的括号堆在一起,一个个点过去就很容易找到出问题的那个


    @BrownGoodMan 你好,C语言听着就吓到了,听说挺难入门的,然后想到的就是代码量比较大(听到1-2年才入门,就不敢看不敢学了,可能也存在误解吧!),也看过别人写相同语言的代码吧,感觉有思路的话实现起来都是那样吧 = =。可能没看过所谓的高深的代码。对了,同语言看不懂的,一般是看不懂算法= =!
    个人觉得如果不是常常要写那些强大的应用,应该没必要选择那么难的语言吧……或者有什么好语言推荐推荐么……就希望有各种库或者别人做好的可以挪来用呵呵,能拖拉窗口控件就最赞了,最后还天真的想要用户拿到的时候,不要去装个几十兆的运行库,对对对,多线程,有多线程就最赞了,没有的话将就用vb也还行……虽然……有点古老……


    @pepsin 常用的话应该不会太多吧,不然太悲催了
    BGLL
        15
    BGLL  
       2015-01-08 20:20:15 +08:00   1
    @NewYear
    你说的是IDE的问题吧。
    046569
        16
    046569  
       2015-01-08 21:37:49 +08:00   1
    按照你的情况, Visual Basic 很符合你的需求.如果纠结于多线程,就用新版;可有可无,就用旧版,貌似旧版也是可以支持多线程的,只是略复杂.
    Delphi 近些年确实用的人少了,但作为候选还是可以考虑的.
    至于其它,了解了解设计模式,再想想你说的"也看过别人写相同语言的代码吧,感觉有思路的话实现起来都是那样吧"是否过于武断?
    编程无它,唯手熟尔.
    NewYear
        17
    NewYear  
    OP
       2015-01-09 00:28:24 +08:00
    @BGLL 可以这么说,我用notepad++,感觉这个高亮括号就很不错,其他的高亮关键字其他语言基本也是都有的,在其他的编辑器也看到这个高亮括号尖括号的,很赞,在一堆逻辑里面,好方便啊


    @046569 是的,之所以一直用着,也是因为网页有asp(虽然不升级了,但是兼容性问题不存在),简单程序可以用vbs,应用程序可以用vb6,游戏/工作自动化有按键精灵,office一套又有宏。可以说还是挺不错的……当然不能和专业程序员比了,毕竟追求的层次不同……vb6不支持多线程,看多很多别人的案例,虽然实现了,但是局限挺大的(不能说很难用,而是要用上挺难的,最简单的就是vb6自己的控件不支持多线程,反正都是这么说,我也不太了解,也听说vb5有多线程,不稳定),用按键精灵的时候觉得多线程挺爽的。以后确实应该试试.net里的vb,虽然那的vb已经……

    好吧,设计模式什么的确实不懂,想起一个问题,上次用百度的umeditor asp版,发现上传文件(图片)功能上传不了,一查源码,它在创建文件的时候会判断文件夹是否存在,但是竟然是从根目录开始一层层探测,如果不存在就创建,windows的iis虚拟主机,一般会禁止其他目录的权限,自然就读取不到虚拟主机上层的文件夹了,探测不到就创建,必然也是不会成功的。于是就直接报500错误不干活了。(一个容错机制导致的错误)
    不不不我没别的意大牛的产品应该很多人用的,这样的情形在虚拟主机上根本就传不了文件,其他人怎么用的呢(自己的开发机器上权限一般不会设置那么严格就没关系),不理解。加了个判断解决bug(属于虚拟主机下的目录路径不存在才尝试创建)。在查看源码的时候,也顺便上下翻了翻,同样是上传类,跟其他的无组件上传类其实差不多,所以当时就冒出一种“原来大牛也是这样写asp的啊,原来大牛也会考虑不周全啊”

    "也看过别人写相同语言的代码吧,感觉有思路的话实现起来都是那样吧",确实是有点武断,毕竟我用的这个语言吧,没有那些语言高级,想想.net里面的vb就有超级灵活的写法(记不起来那个案例了,反正就是一行里面用短而简洁的方式实现了vb6要好几行的的的的代码吧),不同的人写出来应该还是有所不同的,也有高效和低效的区别,当时有那种想法也是因为自己看着觉得是我的话也差不多这样写……但是太复杂的我肯定就费脑筋了,哈哈,我承认我菜。一些想法太想当然了。
    sumhat
        18
    sumhat  
       2015-01-09 00:50:09 +08:00
    难道没有单元测试么,楼主描述的问题单元测试基本都可以搞定。
    0okmnbvcxzx
        19
    0okmnbvcxzx  
       2015-01-09 07:01:48 +08:00 via Android
    sampeng
        20
    sampeng  
       2015-01-09 11:33:17 +08:00
    80%时间思考,20%时间code。。
    和语言无关,这条是真理。无论如何往这个方向努力。
    程序bug就少了。
    很多程序bug其实是设计问题。设计好了,程序bug就没啥了,业务bug,就是慢慢磨了,打发时间的东西
    BrownGoodMan
        21
    BrownGoodMan  
       2015-01-09 11:54:07 +08:00
    @NewYear 不要看高深代码,就是一些大师写的应用广泛的开源代码.追求跨界最广容易学习好玩轻便漂亮所有优美形容词,首选JS.前端 混合前端 后端 游戏都有.软件前后端IDE首选 intellij idea.开发游戏首选unity.入门标配没得选,就这一家看着顺眼,只是mono拖了后腿. 如果追求拖控件就是visual studio.如果是osx 可以xcode拖.但这俩都要掌握一些丑陋的程序语言来开发功能... 如果不是工作需要,这些庞大的像猪一样的丑陋的语言和IDE很多人早都不想看到了.
    saber000
        22
    saber000  
       2015-01-09 13:08:40 +08:00
    我现在最悲剧的需求把架构给搞乱了,老是出现一些计划外的需求,其实也是和我的经验欠缺有关.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3423 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:37 PVG 18:37 LAX 03:37 JFK 06:37
    Do have faith in what you're doing.
    ubao msn 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