手机浏览器扫描二维码访问
不仅如此。
既然“写长篇出bug正常,发条短信就那么十几个字,错一个都不应该”
;那么我们把长篇拆开成若干章,一章只写三千字呢?再把一章拆开成若干段,一段只写数百个字呢?
这就是为何写程序要先做模块设计、然后再把模块按职责拆分成类、类按功能拆分成函数、最后还要求一个函数不要超过一屏(大约80行)的原因了。
经过拆分之后,一个一个函数填写实现、然后再一个一个函数做单元测试,测完再组合起来搞功能测试、集成测试……
这样写程序,当然还是无法杜绝bug出现;但出bug的机率就微乎其微了。
而且程序和长篇小说不同。
小说里的角色,尤其是主角和主要配角往往是贯穿始终的,这就使得小说章与章之间存在很多内部联系;稍微搞不好就会导致前后失去呼应,比如主角一会儿伤在左手一会儿伤在右臂、或者前面挖个坑然后设个伏笔后面却忘了用,等等。
但是在程序里面,不同模块甚至不同函数之间,应该是毫无瓜葛的,每一个都可以摘出来独立成库——有瓜葛就说明用了全局变量或者静态对象,或者通过参数或者约定等传递了过多的东西——这就叫“低耦合”
。
做到了“低耦合”
,你就可以把一个复杂的大程序当一组简单的短文甚至短信写。
这样自然就很难出错了。
当然了,有些情况下,程序逻辑非常复杂且无法拆分,也就是所谓“无法约分的复杂性”
,这种代码就必须端起十二分小心来,当然即便如此,bug出现率仍然要远高于其他代码。
一般来说,要把程序拆成“不可约分”
的一组最小单元来写。
这个“不可约分”
就是术语说的“高内聚”
:这段程序只做一件事,这件事已经没法拆的更简单了,只能把它们放在同一段代码里一举解决掉。
因此,写程序时,事先的“谋划”
非常重要。
一个有经验的资深工程师,可以在动手前就把一个复杂的大项目拆成一堆几乎互不关联的小程序,然后逐一实现它们、实现完再把它们组合起来就行了。
显然,“谋划”
好了,一个程序的难度降低若干个数量级都是可能的。
说实话,在绝大部分能见到的软件中,都是或多或少的有bug的……
只不过,第一开发可能没想到,第二测试没测到,第三用户没碰到,第四客服的反馈没收到,那么——这就是一个“成熟稳健”
的产品。
在凌景国传着这么一句话天上地下谁最差,乌龟王八黎倾夏!黎倾夏睁开眼的时候被吓傻了!尼玛,这是个什么鬼地方?穿就穿了吧,但她怎么是个头顶乌青,貌似鬼刹的大丑女?无妨!且看她如何用一身神奇医术,摇身变成大美人!前有渣男踹了她,后有魔君大人绑了她?可当她被绑到魔君大人的床上时等等,这剧情好像不该这么走啊!某一天,魔...
...
佣兵界的超级兵王,重回都市成为一名打杂的小文员,却意外被美女总裁看上,从此步步高升,风生水起...
相亲会上,她醉得不醒人事,错认把顾氏总裁当成恋人,一脚踢开房门,捉奸在床,坏他好事。气跑了我的过夜对象,你就该有弥补的自觉!顾北澈笑着把她推倒在床,唐雪诗无力反抗,一夜狂乱,白白被占了便宜,踢他一脚也算解恨,结果,第二天昨天踢的爽么?顾北澈面色平静坐在车里等她,唐雪诗满脸堆笑,大话西游里唐僧怎么说来着?悟空吃我,那只是个计划,我想踢您,也只是个计划!...
[年代文]一觉醒来,穿越到几十年前,这里缺衣缺粮缺物资,什么都缺。还有如豺狼的后娘,耙耳朵的爹,奇葩的后姐,弱小可怜的妹妹。好在空间在手,什么都有。卖物资换钱,换票,换珠宝,旧货市场上淘宝,改造耙耳朵的爹,带着一家走上康庄大道,还不小心找了个宠她爱她的极品男人。...
我是从摸金部队上,退伍下来的盗墓兵,一次,在寻觅楼兰古国的踪迹之中,莫名其妙的撞了冥婚,当我回归正常人的生活,从此之后,与一只神秘女鬼,展开了一场人鬼情未了之生死禁忌,这件改变我命运的事,让我踏上一条杀妖魔,诛鬼邪,探大墓,震僵尸,破鬼案的阴阳之路,可后来,我才发现,原来这所有的一切,是有人在默默主导,我只是一枚棋子...