- 博客(23)
- 收藏
- 关注
原创 搞对象千万要注重对方身材-亲身体验一则
在并不遥远的上个世纪的中国,谈恋爱还被称为“搞对象”,一个土得掉渣的名字,估计90后的同学们都未必听说过这个词。后来不知为什么,也许是西洋化了吧,这个叫法逐渐地淡出了,“对象”也迅速地被“男朋友”、“女朋友”、“恋人”甚至“情人”所替代,谁要是还称自己的恋人为对象,必定会令人“刮目相看”。而到现在为止还在搞对象的,就只剩下一个人群了:程序员。好吧,我是标题党,你可能被忽悠了,标题中的对象是
2012-08-10 16:38:08
1053
原创 孙行者定身术+时间机器-Generator in Python(正文)
书接上回,为什么需要coroutine?我们采用一个经典而浅显的案例:计算Fibnacci数列。翠花,上代码(C代码):void get_fib(int n, int* result){int i = 0;for (i = 0; i {if (i {result[i] = i;continue;}result[
2012-08-10 16:34:38
959
原创 孙行者定身术+时间机器-Generator in Python(序)
自以为在Python领域玩耍的时间挺长了(有近3年了吧),可是我还是错过了一个重量级的关键字:Yield。这也难怪,它代表一种特殊的东西:generator,并且还牵扯了一个重量级的名字:coroutine。这两个家伙对我而言都很陌生,再加上“Yield”这么一个诡异的名字,理解起来真是挺有难度。有几篇介绍它的技术文档,不知是作者笨还是我笨,我连续阅读了两遍还没有觉得自己真的懂了。我渐渐感觉到这里
2012-08-10 16:25:41
1432
原创 编程预警:潜伏在无符号整数中的危机
最近几天在写代码的时候,一不小又掉进一个老相识的陷阱里,好生惨痛。曾经告诫过自己,曾经提示过别人,但还是防不胜防。看看代码样例吧。在最开始,我写了类似这样的一个for循环。typedef unsigned int UINT;UINT i = 0;UINT myData[3];for (i = 0; i {myData[i] = i;
2012-08-10 11:48:17
554
原创 程序里最阴湿肮脏的犄角旮旯
书接上回”短小精悍的bug可以撼程序强盛“。人类居住的房间,有阳光明媚的厅堂,也有阴暗潮湿的犄角旮旯,而往往就是在那些阴暗潮湿的角落里,滋生了无数的灰尘、细菌以及随之而来的各种小虫虫,引起了各种各样莫名其妙的问题。从某种角度看,程序就像是一个房间,也有阴湿肮脏的角落,滋生和藏匿了无数大大小小的bug。程序里的这些角落在哪里呢?多数都在那些常年见不到测试和review之光的代码片段里
2012-08-10 11:45:31
741
原创 短小精悍的Bug可以撼程序强盛
编码有点疲惫,暂时休息一下大脑,写个bug report。话说,那些短小精悍的bug,都是极其精巧别致的,是可遇而不可求的。它们往往用不了几行代码,却可以轻轻松松地穿过编译器、连接器、debugger的层层围捕,甚至是经验老到的程序员的第一遍review,最终撼动程序的质量。从前,有一个双向(相邻节点互相指向)循环(首尾节点互相指向)链表(只有一个节点时前后指针都指向自己)。一位程
2012-08-10 11:37:47
1512
原创 从一碗面条到一碗浆糊,再到哪里?
在学校里学习编程的开始,令人记忆犹新的是对“一碗面条”似的代码的批判,说是goto语句泛滥,导致整个程序就像是一碗面条,理不清头绪。所以后来整出结构化编程,并庄重地禁用goto语句。这么多年来,从学校到公司,看了、写了这么多代码,基于结构化的法律限定,我发现面条的确是不见了,但是取而代之的是一碗碗的”浆糊”。浆糊式的的代码特征就是混浆浆、黏糊糊的一坨,冗长、复杂,比面条还难以理出头绪。有关没关的都
2012-08-10 11:21:31
1270
1
原创 软件设计要害之解耦(正文)
作软件工程师,难!在现实中,你要努力地求偶;而在程序的世界里却要千方百计地解耦。现实中的偶,成就美满之家,而程序中的耦却带来烦恼。在序言中,村长通过组建交易委员会的方式,化解了买卖双方的困境。为此,本台记者曾经采访过村长,问他为什么会采用这样的办法,村长的回答意味深长:“以郑屠为例,他是一个专业杀猪和剔肉的,让他同时再去管理各种购买信息外加送货就会让他分心,结果是两样都干不好。增加
2012-08-09 11:18:44
2564
原创 软件设计要害之解耦(序)
俺们村有三位小商贩,一位是牛二:卖烤地瓜的,一位是郑屠:杀猪卖肉的,还有一位是王麻子:卖油的。一直以来,这买卖都是靠直接交易来进行的。如果你想吃烤地瓜,就到牛二家,想吃肉到郑屠家,想喝油到王麻子家去。这种形式一直都运作良好,因为村里人比较少,拢共就20几口。后来,村里的人口原来越多了,麻烦就来了。牛二最近经常抱怨说:我又要上货、又要烤地瓜还要记住订货的人、甚至还要经常离开店铺去送货,根本忙
2012-08-09 11:08:16
19453
原创 拒绝向蹩脚的软件设计妥协
村里的王木匠,受人之托要做一只洗澡用的大木桶。这是一位技术比较娴熟的工匠,做木桶对他来说基本没什么难度,所以动起手来进展很快。眼看就要完工了,还差最后一块木板。但是,刚好手头的木板已经用光了,他需要翻过一座山,到树林里去伐木才可以做出新的木板。眼看天色已晚,王木匠急于在今天完成并提交给客户。于是,他四下里张望了一下,看到墙角里立着几块废料。王木匠把墙角的废料收集过来,在木桶上比划了一下,似乎可以用
2012-08-09 11:04:04
729
原创 我真后悔学习了Python
和Python从相识到相知,最后坠入爱河已经快3年了。曾经一度甜蜜无限,如今却感到了深深的后悔,后悔自己一时糊涂没有把持住自己,成了“失足程序员”。我现在想真诚地忏悔。如果,当初没有学习Python,我就不会在过去的一年里没日没夜地写代码,写那些不能帮助大雄把静香娶回家的代码。越写越快,越写越多,搞得自己都停不下来了。如果,当初没有学习Python,我就不会有机会进入如此广大的一片
2012-08-09 11:01:34
9171
3
原创 God of the code – Virtual Machine(代码的上帝 - 虚拟机)
Java的Virtual Machine也许不是第一个也不是最好的一个,但似乎是Java的流行使得Virtual Machine(以下简称VM)开始大行其道。有很多主流的高级编程语言都是采用这种形态,如Perl、Python和Ruby等。甚至有些语言开始跨VM移植,例如在JVM和.NET(当然.NET不是严格意义上的VM)平台上都开始支持Python。最近发现,我似乎对于VM的意义低估了。
2012-08-09 10:50:09
601
原创 开发好的软件是煲汤和酿酒而不是炒菜
一个在心头萦绕了多年的问题,今天终于找到了答案:开发软件像什么?就像是煲汤。曾经以为开发软件像炒菜:准备材料和调料,了解一下客户的口味,配料、下锅、上菜,完活。因此,也就曾经一度用炒菜的心态来认识软件和编写软件。渐渐地,发现了错误。菜是上桌了,可是食客并不满意,频繁发出这样的抱怨:“你放盐了吗?”,“盐放太多了吧”,“这牛肉怎么这么硬啊”…如此这般。其实自己也吃过别人炒出来的软件,也是这样
2012-08-09 10:43:12
1486
原创 Coding的快乐时刻
曾经问过自己,在coding的过程中,什么时候最快乐?当时的答案是:当看到自己写出了N多的代码时最快乐,因为特别有成就感。那个时候,“多”就带来快乐,因为代码多似乎显得更专业,似乎就可以脱离了教学的感觉。然而,时隔多年以后,我再次问自己这个问题的时候,竟然发现结论颠倒了过来。什么时候最快乐?当看到自己把大片大片的代码删除的时候最快乐。有时哪怕只是删除了几行代码也会很惬意。反正只要是代码少,
2012-08-09 10:31:02
539
原创 小李的飞刀-浅谈正则表达式
行走江湖的武者和各种侠客,必定都有随身的武器。刀枪剑戟斧钺钩叉,十八般兵器都有人喜好。除了常规武器以外,还有很多人携带者飞刀(镖)之类的暗器,以应不时之需。当然了,能够把飞镖玩到一击必杀境界的,就只有古龙笔下的李寻欢一人,大多数人都把这镖当做是辅助武器。不过,虽说是辅助,关键时刻也能起到大作用,甚至在很多场合也是必不可少的,少了就不舒服,就会吃亏。和武者、侠客相似,程序设计者也需要有贴身常
2012-08-09 10:05:02
984
原创 为什么是C语言?
对的,开门见山的说,我就是要向你推销C语言!我是C语言推销者,麦辣!我知道你可能是一个Web开发者,整天只与SQL,CSS,HTML和Javascript打交道,或者你可能一直幸福地沉浸在Java的甜蜜世界,每天品尝着各种设计模式的蜜糖。但是我还是想摇醒你,喂,醒醒,C语言来了!Dennis Ritchie"什么?C语言?你说的是那个
2012-08-09 09:56:46
1360
原创 法拉利和猎枪-蹩脚软件设计的根源
有一位名叫克拉克的大富豪,名列世界富豪榜Top10,钱多得花不了,很想去非洲玩乐挥霍一番,于是他拨通了一份广告上的电话:嘿,小子,听好了,我要去非洲狩猎,要订购你们公司最顶级的狩猎设备,越快越好,10天后我在非洲接货…。10天以后,狩猎设备如期交货,是一辆最新款的顶级法拉利跑车。特别之处在于车的前盖上装备了一把勃朗宁造的顶级猎枪,在车里配备了一套世界最顶级的猎枪自动装弹、瞄准和射击的控制系
2010-11-29 09:06:00
1282
原创 鸭子不想再听雷-怎样把技术培训做好
【提问】我想提问,怎样才能把技术培训做好? 这位先生,你说的是技术培训吗?这有什么难度,我天天都在搞。发放文档给学员阅读,我呢就制作PPT,准备好电脑、会议室和投影仪,通知学员到场就可以了。完成以后留个习题,我打个分数不就完了,还有什么花头?大家不都是这样在搞吗? 【分析】是的,很多人都在搞,很多人也都是这样在搞的。我自己以前也这么搞过。但是,作为培训者,很少有人去发现和反
2010-05-12 15:52:00
737
原创 “软芯片”畅想-基于Python的应用软件开发框架Softchip(二) --- 编程场景
【开篇】在本系列的第一篇”“软芯片”畅想-基于Python的应用软件开发框架Softchip(一)“中,阐述了softchip应用开发框架的基本原理。本篇是本系列的第二篇。在本篇中,将通过具体的样例代码来具体展示使用softchip开发应用是怎样的一种场景,框架使用者即开发者的代码究竟会怎么写,到底会得到怎样的好处。如第一篇所言,样例代码是使用Python完成的。该样例代码可以在P
2010-04-27 21:44:00
848
原创 “软芯片”畅想-基于Python的应用软件开发框架Softchip(一)
【来龙去脉】众所周知,一台最常见的PC往往由主板、CPU和各种芯片板卡(如内存、声卡、网卡、显卡等)等组件组成。所有的组件可以分别由不同的生产商遵循确定的电气指标和接口标准并行开发和生产。生产完成后,只要按照接口要求,接驳集成在一起,基本就可以正常工作了。这是一种多么成熟且高效的生产流程啊! 反观目前的软件开发,成熟度和效率要低很多。虽然,在软件开发领域也提出并正在运用
2010-01-30 22:25:00
1386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人