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

2015-01-08 11:23:26 +08:00
 NewYear
面对一个新的程序(恩,我不是程序员,只做一些简单的程序来改善自己的“生活”)

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

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

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

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

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

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

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

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

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

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

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

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


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


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


@em70 想了想,很有道理,想想自己以前用某种语言的时候,一开始也是常常写错,后来就少了。其实是自己不熟悉写法,老是容易忘记掉了。当然了,写错了debug信息又不提示的时候那叫一个蛋疼(有的提示信息把自己搞混了)。
046569
2015-01-08 17:33:04 +08:00
看了LZ的帖子,心有戚戚焉,曾几何时自己也是同样自己挖坑自己跳.
说说我的经验:
第一,找个更适合自己的语言.语法舒服,库比较完善,用起来省心.
第二,改变思想,比如忘记循环,改用迭代.不要假想太多例外,如果是会影响到运行结果,那么就 Fail-fast ;否则做个简单容错保证结果正确即可.@msg7086 提到的 TDD 是个好主意.
第三,调试的时候利用各种工具,能下断点就不打印日志.该懒的时候就应该懒.
第四,同一件事如果你重复做第二遍,你就应该考虑自动化了.理由同上.
BGLL
2015-01-08 17:52:29 +08:00
写得多了,很多东西就能闭着眼睛也不会错了
BrownGoodMan
2015-01-08 18:21:54 +08:00
合格程序员如果写十几个ifelse在一起会先自行撞墙5分钟惩罚自己.
你写的太少,而且不规范.总之就是没经验...
建议先读几本7天学会c语言之类的书籍.不要乱写,找些大师的例子一边读一边理解一边模仿.
另外你能写程序肯定就是程序员了,它是能力定位又不是职业.
pepsin
2015-01-08 18:42:48 +08:00
我的 bug 一般是自动补全带来的 Typo 哈哈哈
NewYear
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
2015-01-08 20:20:15 +08:00
@NewYear
你说的是IDE的问题吧。
046569
2015-01-08 21:37:49 +08:00
按照你的情况, Visual Basic 很符合你的需求.如果纠结于多线程,就用新版;可有可无,就用旧版,貌似旧版也是可以支持多线程的,只是略复杂.
Delphi 近些年确实用的人少了,但作为候选还是可以考虑的.
至于其它,了解了解设计模式,再想想你说的"也看过别人写相同语言的代码吧,感觉有思路的话实现起来都是那样吧"是否过于武断?
编程无它,唯手熟尔.
NewYear
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
2015-01-09 00:50:09 +08:00
难道没有单元测试么,楼主描述的问题单元测试基本都可以搞定。
0okmnbvcxzx
2015-01-09 07:01:48 +08:00
sampeng
2015-01-09 11:33:17 +08:00
80%时间思考,20%时间code。。
和语言无关,这条是真理。无论如何往这个方向努力。
程序bug就少了。
很多程序bug其实是设计问题。设计好了,程序bug就没啥了,业务bug,就是慢慢磨了,打发时间的东西

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/160251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX