手机浏览器扫描二维码访问
不过……
有的人敲字灌水都错字连篇,但是有人手写几十上百万字的小说,随便截一段都差不多能进语文课本……
所以,人与人还是有极大差别的。
不能因为“Linus也写bug”甚至“Linus也写过低级bug”,就认为“我写个一百个整数里找最大值的简单程序出三十个bug也是正常的”——初学者搞出这事,正常。
至于专业人员嘛……出一个都不正常。
不仅如此。
既然“写长篇出bug正常,发条短信就那么十几个字,错一个都不应该”;那么我们把长篇拆开成若干章,一章只写三千字呢?再把一章拆开成若干段,一段只写数百个字呢?
这就是为何写程序要先做模块设计、然后再把模块按职责拆分成类、类按功能拆分成函数、最后还要求一个函数不要超过一屏(大约80行)的原因了。
经过拆分之后,一个一个函数填写实现、然后再一个一个函数做单元测试,测完再组合起来搞功能测试、集成测试……
这样写程序,当然还是无法杜绝bug出现;但出bug的机率就微乎其微了。
而且程序和长篇小说不同。
小说里的角色,尤其是主角和主要配角往往是贯穿始终的,这就使得小说章与章之间存在很多内部联系;稍微搞不好就会导致前后失去呼应,比如主角一会儿伤在左手一会儿伤在右臂、或者前面挖个坑然后设个伏笔后面却忘了用,等等。
但是在程序里面,不同模块甚至不同函数之间,应该是毫无瓜葛的,每一个都可以摘出来独立成库——有瓜葛就说明用了全局变量或者静态对象,或者通过参数或者约定等传递了过多的东西——这就叫“低耦合”。
做到了“低耦合”,你就可以把一个复杂的大程序当一组简单的短文甚至短信写。
这样自然就很难出错了。
当然了,有些情况下,程序逻辑非常复杂且无法拆分,也就是所谓“无法约分的复杂性”,这种代码就必须端起十二分小心来,当然即便如此,bug出现率仍然要远高于其他代码。
一般来说,要把程序拆成“不可约分”的一组最小单元来写。
这个“不可约分”就是术语说的“高内聚”:这段程序只做一件事,这件事已经没法拆的更简单了,只能把它们放在同一段代码里一举解决掉。
因此,写程序时,事先的“谋划”非常重要。
一个有经验的资深工程师,可以在动手前就把一个复杂的大项目拆成一堆几乎互不关联的小程序,然后逐一实现它们、实现完再把它们组合起来就行了。
显然,“谋划”好了,一个程序的难度降低若干个数量级都是可能的。
说实话,在绝大部分能见到的软件中,都是或多或少的有bug的……
只不过,第一开发可能没想到,第二测试没测到,第三用户没碰到,第四客服的反馈没收到,那么——这就是一个“成熟稳健”的产品。
PS:留个言,你们是不是不喜欢看代码相关的或者看不懂这些……说出来我以后少写点,毕竟前期还是需要程序员的技术去赚钱的。当然你们的意见我也考虑一下。
大乘期才有逆袭系统 身为牧师,带把锤子不过分吧? 大魏督主 洪荒:开局梦中证道,睡觉就变强 携美女闯三国 十年一晌,可见君否 等我无敌后(我的修真和飞鸽传书日常) 问剑征仙 东方梦工厂 重生从手术室开始 非著名影帝 万界卡牌亡灵法师 大秦:开局指点秦始皇 震惊!我修仙秘密被孙女直播曝光 火影之忍界闪光 爹地给力妈咪又怀了 挑战者游戏 傅总夫人又闹离婚了 云烟神帝 重生之暖男的自我修养
一次酒后放纵,苏瑞落荒而逃,五年后,他带着未婚妻出现在她面前,我是你的新老板。苏瑞,你结婚够早的,怎么都有孩子了?...
第四届咪咕杯铜奖作品,宋穿历史小说中的精品之作,引人入胜,值得细读!...
武之极处,上临九霄,下踏黄泉,挥手弹指逆阴阳废物?天才!!!以武入道以丹补身神秘的系统特殊的奇遇,让曾经的废物少年踩着敌人的累累白骨,一步一步踏上巅峰!!!新书请大家多多支持,书友群69226423...
...
朝为田舍郎,暮登天子堂。大唐天宝,顾青身着布衣从烟尘里走来,在长安皇城的大道上,看着鳞次栉比的华丽殿宇,一步,两步,步步生莲。他渐渐握住了这个强盛王朝的脉搏,也看到了饱受挫折打击的李隆基那张灰败阴暗的脸。俯下身,顾青微笑着对李隆基说陛下,您是否该禅位了?做个太上皇多好,天下事,臣愿为陛下分忧决断。...
关于无限穿越之诸天剑帝手持一柄古剑,行走在诸天万界,目标是永垂不朽!神雕侠侣李刃拍了拍杨过的肩膀,兄弟,魅力大怪我咯?恶战世界李刃背对黄浦江,长剑斜指鬼子对马永贞说,这些人不光是要打,更要杀!雪花女神龙李刃一剑削断龙魂宝刀,低头沉吟刀剑有情,那断刀会哭吗?魔剑生死棋一剑隔世开山断河,李刃破空而去,这世间再容不下我这般神话中人花千骨世界李刃成为了花千骨的师父小骨,你要努力啊,为...