一个程序员的自省
[置顶]编写自文档化的代码
2009-06-21 23:02 by Anders Cui, 4254 visits, 网摘, 收藏, 编辑
摘要:我们编写的代码需要具有高度的可读性,这样其他的程序员可以更容易地对代码进行
修改和扩展。两种传统的方式是使用外部文档和编写大量注释,其实它们都不是好的选择。
自文档化的目标是使代码成为良好的文档,一种人人可以读懂的文档,本文介绍了多种提高
代码自文档化的技巧,最后给出了我最近在尝试的一种方式。 阅读全文
50 Comment
Categories: 25-重构, 20-Agile Development
Tags: Refactoring, CodeRush Xpress, Self Documenting Code
[置顶]Visual Studio 2008 可扩展性开发(九):总结篇
2009-05-30 22:30 by Anders Cui, 4703 visits, 网摘, 收藏, 编辑
摘要:VS 越来越强大了,在 VS 2010 Beta1 中我又看到一直想要的两个功能,但我确信,
扩展仍是不可避免的,因为 VS 面向的是所有的开发人员,它只能够提供最通用的功能,所
以就有了这个文章系列。在这个过程中,我尽量以有用的实例介绍 VS 2008 可扩展性开发
的每个方面,希望这些能给你带来一些帮助。 阅读全文
28 Comment
Tags: Visual Studio, Addin, Extensibility
[置顶]如果说编程语言是一种宗教,你的信仰是?
2009-01-07 00:24 by Anders Cui, 4387 visits, 网摘, 收藏, 编辑
摘要:老外写的一篇文章,很有意思,可以从宗教的角度来看看各种常见语言的特点。来说
说你的信仰吧:) 阅读全文
77 Comment
Categories: 60-随笔, 12-Coding For Fun
Tags: For fun
[置顶]F#系列随笔索引
2008-10-08 00:18 by Anders Cui, 4839 visits, 网摘, 收藏, 编辑
摘要:在当前的背景下,如果一门语言的广告不能雷到人,还面对 C#这样成熟的语言,就
真的很难引起人们的兴趣。初学 F#会让人一头雾水,我希望能有一个 F#教程,它能在一些
简单的例子中帮我们拨开乌云,《Foundations of F#》这本书不错,不过有些繁琐、冗长。
我把书中的内容整理了一下,也把在《Expert F#》或者网上其它文章的一些内容加进来,
另外我还喜欢把自己想到的 F#与 C#的异同点给写出来,这些就是我的《F#探险之旅》。
阅读全文
18 Comment
Categories: 14-F#, 12-Coding For Fun
Tags: F#, Functional Programming
[置顶]增强我们的Visual Studio(更新中)
2007-10-22 22:09 by Anders Cui, 10694 visits, 网摘, 收藏, 编辑
摘要:在一篇文章《Visual Studio vs Eclipse》中,Jon Skeet 对两者进行了对比。VS20
05 确实有其不足。还好,当前已经有了一批不错的 Add-In 了,适当地应用,会让我们的 V
S 更为强大,我这里推荐了 4 个不错的 Add-In,尤其是其中的 DPack,强烈推荐。最希望
的还是大家能群策群力,一起打造更好的 VS IDE!
更新: 至 2007-10-31, add-in 列表已增加到 14 个,推荐 Clipboard Manager。
2008-11-12,添加 VS2008 add-in:CodeRush Xpress for C# 阅读全文
97 Comment
Categories: 12-Coding For Fun, 27-Cool Tools
Tags: Visual Studio, Add-In
[置顶]iBATIS In Action:序言和目录
2007-09-07 00:40 by Anders Cui, 5020 visits, 网摘, 收藏, 编辑
摘要:iBATIS In Action 翻译系列第一篇 1.iBATIS In Action 序言 2.阅读此书需要的前
提知识 3.本人的一点感想和提示 4.已完成部分的索引 阅读全文
46 Comment
Categories: 28-iBATIS, 24-Open Source
Tags: iBATIS.NET
迷人的斐波那契数
2012-04-19 00:31 by Anders Cui, 1398 visits, 网摘, 收藏, 编辑
摘要:繁殖力超强的兔子说到斐波那契数,我们自然会想到曾经有一群繁殖力超强的兔子。
比萨的商人斐波那契(Fibonacci,12-13 世纪,称为比萨的列奥那多)接触到阿拉伯数学后,
在其著作《Liber Abaci》中,引入了这个著名的兔子问题。但如果向前追溯下去,则可以
追溯到古老的印度数学。斐波那契使用了一个理想化了的兔子生长模型进行研究,并假设:
第一个月初有一对刚诞生的兔子两个月之后(第三个月初)它们可以生育每月每对可生育的
兔子会诞生下一对新兔子兔子永不死去从第一个月开始,兔子的数目(对)依次是:1,1,
2,3,5,8。。。这样就形成了一个序列,记为{Fn},则该序列存在一个递推关系:F(n)
=F(n 阅读全文
6 Comment
Categories: 10-离散数学, 11-数据结构与算法分析, 12-Coding For Fun, 15-Puzzles
Tags: Algorithm, Puzzle, Maths
趣题一则:交替放置的碟子
2012-04-16 21:43 by Anders Cui, 127 visits, 网摘, 收藏, 编辑
摘要:有数量为 2n 的一排碟子,n 黑 n 白交替放置。现在要把黑碟子都放在右边,白碟子
都放在左边,但只允许通过交换相邻碟子的位置来实现。实现这个过程要交换多少次?分析
首先把问题转化一下,用 1 表示黑碟子,0 表示白碟子,那么目前的顺序是:1010...1010
结果要求 1 都放在右边,0 都放在左边。这个题目看起来很眼熟。看关键字:交换相邻的碟
子,排好顺序。嗯,就是经常出现在面试中的冒泡排序了。为便于观察,假设目前有 6 个
碟子:101010。使用冒泡排序,第一次迭代,碟子序列变为:010101,交换 3 次。在进行
第二次迭代之前,观察一下。现在,不仅第一个碟子就位,最后一个也是了,因此第二次迭
代只需要对第 2 到第 5 个进行排 阅读全文
0 Comment
Categories: 15-Puzzles, 11-数据结构与算法分析
Tags: Algorithm, Puzzle
趣题一则:冯·诺依曼邻居问题
2012-04-15 00:51 by Anders Cui, 18 visits, 网摘, 收藏, 编辑
摘要:这里并不是真的要研究 cellular automaton 的问题,而只是考虑一个非常简单的递
推关系,该问题如下图所示:从 r=0 开始,此时格子上有一个方块,然后逐步演化,每一
步都在上一步的基础上添加一圈儿方块,当 r=n 时,会有多少个方块呢?分析假设初始方
块为 O,从 r=0 到 r=1 时,在 O 的水平和垂直方向上各增加了两个方块;从 r=1 到 r=2 时,
也是如此,同时在其它方向上也增加了若干方块。由此,可以把方块的增加分为两部分,一
是水平和垂直方向 D1,二是其它方向 D2。可以看到,每到新的一步,D1 方向上增加的都
是 4 个方块,它们都与原图(上一步)的一个边相邻;而 D2 方向上增加的方块都与原图的
两条边相邻。这样,只 阅读全文
0 Comment
Categories: 12-Coding For Fun, 15-Puzzles
Tags: Puzzle
趣题一则:寻找那扇门
2012-04-10 23:51 by Anders Cui, 165 visits, 网摘, 收藏, 编辑
摘要:现在出现在你面前的是一堵朝两个方向无限延伸的墙。墙上有一扇门,但你并不确定
门离你有多远,也不知道门位于哪个方向(左边或是右边)。你只有在走到门面前才能看到
它。假设从当前位置到门要走 n 步(n 大小未知),那么怎样走 O(n)步就能找到那扇门?
分析这道题让人“左右为难”,因为不确定如何才能走到尽快确定方向和位置。首先想到在错
误的方向上走得越远,就意味着离正确的位置越远,因此较为保险的方法是,第一步向右走,
看看有没有门;第二步——为了防止在错误的方向上渐行渐远——向左走,走两步,这样就
可以确定在最初位置的一步范围内有没有门了。接下来,按照类似的方式左右徘徊,依次确
定在最初位置的 2,3,...,n 有没有门 阅读全文
0 Comment
Categories: 11-数据结构与算法分析, 15-Puzzles
Tags: Puzzle
HashSet 的实现(下)
2011-06-17 17:19 by Anders Cui, 2679 visits, 网摘, 收藏, 编辑
摘要:在 HashSet 的实现(上)中,简要介绍了散列法(hashing)的内容,并以二次探测
法实现了一个简单的 HashSet。在本文中,将进一步讨论散列法,尤其是 GetHashCode 方
法的实现,最后给出完整的 HashSet 实现。 阅读全文
2 Comment
Categories: 00-.NET Framework, 11-数据结构与算法分析, 12-Coding For Fun
Tags: Data Structure, 数据结构
HashSet 的实现(上)
2011-06-13 02:03 by Anders Cui, 4061 visits, 网摘, 收藏, 编辑
摘要:本文主要讨论了散列法和散列函数的基本概念以及解决散列冲突的两种方法:线性探
测法和二次探测法,并以二次探测法简单地实现了 HashSet 的 Hash 这一部分。 阅读全文
6 Comment
Categories: 00-.NET Framework, 11-数据结构与算法分析, 12-Coding For Fun
Tags: Data Structure, 数据结构
趣题一则:如何快速过桥?
2011-06-03 00:31 by Anders Cui, 411 visits, 网摘, 收藏, 编辑
摘要:有四个人打算过桥,他们都在桥的某一端,他们的任务是在 17 分钟内全部到达桥的
另一头。当时是晚上,他们只有一只手电筒,最多只能有两人同时过桥,因为伸手不见五指,
必须要携带手电筒。必须步行将手电筒带来带去,即扔来扔去是不行的。每个人走路的速度
是不同的:甲过桥需要 1 分钟,乙需要 2 分钟,丙需要 5 分钟,丁需要 10 分钟。两个人一
起走的速度等于其中较慢的人的速度。例如,如果第一次让甲和丁一起过桥,当他们到桥的
另一端时,已经用了 10 分钟,如果由丁带回手电筒,那么 20 分钟就过去了,于是任务失
败。那他们到底该怎样过去呢?如何完成任务?第一次甲和乙同行,然后乙回去送手电筒,
用掉 4 分钟;下一次丙和丁同行,甲回去,用掉 1 阅读全文
0 Comment
Categories: 15-Puzzles
Tags: Algorithm, 算法
制作自己的wikibook
2011-05-03 21:38 by Anders Cui, 459 visits, 网摘, 收藏, 编辑
摘要:wikipedia.org 是我特别喜欢的网站,首先是它的信息量极为丰富,不管是文章本身
的内容,还是它所引用的外部资源;而且文章的风格也很让人喜欢,简约的文本,配以适量
的图片,很对我的口味;另外一个重要的地方是,文章内容比较可靠。如果看到一篇喜欢的
wiki 文章,想打印出来,那么看页面的左边侧栏: 可以使用 Printable 版本打印,也可以
保存为本地的 PDF 文件。最有趣的地方是“Create a book”:一旦开始书籍的创建,在页面
的页首部分就会出现一个功能区域: 当我们把需要的文章都添加进来后,点击 Show boo
k,即进入书籍的管理页面,甚至还可以组织书籍的章节!然后,可以保存为本地文件,格
阅读全文
0 Comment
Categories: 27-Cool Tools
Tags: Wikipedia
玩儿一下Word Search Puzzle
2011-03-20 00:40 by Anders Cui, 1251 visits, 网摘, 收藏, 编辑
摘要:单词搜索迷宫(Word Search Puzzle)问题的输入是一个二维的字符数组和一组单
词,目标是找出字符数组网格中的所有单词。本文讨论了它的实现,以及 Array.BinarySea
rch 方法的一个值得注意的地方。 阅读全文
5 Comment
Categories: 11-数据结构与算法分析
Tags: Algorithm, 算法
整数的展开
2011-03-14 00:33 by Anders Cui, 1466 visits, 网摘, 收藏, 编辑
摘要:简单讨论了整数的 b 进制展开和康托尔展开。 阅读全文
2 Comment
Categories: 10-离散数学, 11-数据结构与算法分析
Tags: Algorithm, Discrete Mathematics, 离散数学, 算法
离散数学拾趣(三):集合的子集有多少个
2011-03-10 02:54 by Anders Cui, 549 visits, 网摘, 收藏, 编辑
摘要:集合广泛应用于计数问题,这类问题需要讨论集合的大小。令 S 为集合。若 S 中恰
有 n 个不同的元素,n 是非负整数,就说 S 是有限集合,而 n 是 S 的基数,用|S|表示。若
S={ 1, 2, 3 },则|S| = 3。有时候需要考虑一个集合的元素所有可能的组合,看它们是否
具有某种性质。为此构造一个新的集合,它以 S 的所有子集作为它的元素,该集合称为 S
的幂集合,记为 P(S)。比如:本文的主题也就是:对于集合 S,P(S)的基数是多少?方法一:
首先观察上面例子中的三个集合,它们的基数分别是 0、1、2,而它们的幂集合的基数分别
是,于是可以猜想 n 个元素的集合有个子集,下面用数学归纳法证明。基础步骤:由上面
例子可知,当 n=0 阅读全文
2 Comment
Categories: 10-离散数学
Tags: Discrete Mathematics, 离散数学
找零钱的两种方法
2011-03-06 20:31 by Anders Cui, 2673 visits, 网摘, 收藏, 编辑
摘要:采用贪心算法和动态规划解决找零钱的问题。 阅读全文
8 Comment
Categories: 10-离散数学, 11-数据结构与算法分析
Tags: Algorithm, Discrete Mathematics, 离散数学, 算法
离散数学拾趣(二):逻辑难题
2011-03-04 00:28 by Anders Cui, 573 visits, 网摘, 收藏, 编辑
摘要:可以用逻辑推理解决的难题称为逻辑难题,解决这样的问题是实践逻辑规则的一种好
方法。本文介绍了 Raymond Smullyan 的岛屿居民难题与爱因斯坦难题。 阅读全文
2 Comment
Categories: 10-离散数学
Tags: Discrete Mathematics, 离散数学
离散数学拾趣(一)
2011-03-04 00:05 by Anders Cui, 464 visits, 网摘, 收藏, 编辑
摘要:在学习英语的时候,会有一种感受,“记住它”不算是好的方法,也许记住了单词的含
义,也许掌握了语法的规则,但是仍然很难用英语来表达自己的想法。这里面的问题在于,
没有“用英语去思考”,也就是以英语的方式去掌握它。学习计算机,亦是如此,往往有人说
学习一门编程语言只要几天就够了,听到这样的话,我的理解是:你在说它的语法容易理解,
真正学好这门语言,当然应该以它应有的方式去写代码。而且,不仅仅是学习编程语言是如
此,整个计算机科学的学习都会是这样,应该了解计算机的语言,用它来理解计算机。计算
机的基础是数学,尤其是离散数学。近日在读《离散数学及其应用》(第五版),才体会到
离散数学在计算机学习中的重要性,当其中的 阅读全文
4 Comment
Categories: 10-离散数学
Tags: Discrete Mathematics, 离散数学
关于命名中的数量和人称
2011-01-26 00:16 by Anders Cui, 2001 visits, 网摘, 收藏, 编辑
摘要:我们都明白命名的重要性,如果对命名不断地关注,就需要考虑命名中的动词和名词,
特别的情况是动词的人称和名词的数量。在.NET Framework 的 Guideline 中,有专门一章
讨论了命名规范,包括大小写、单词的选择等,却没有涉及到人称和数量,下面来讨论一下
这两方面的内容。名词的数量首先来看数量。名词的单数和复数在语义上有着明显的不同,
为了提高可读性,数量需要认真地考虑。比如:属性(Property):System.Collections.Ge
neric.Dictionary中的 Keys 和 Count 是好的例子。字段与此类似;方法名
中的名词:在 JS 中我们熟悉的 getEl 阅读全文
17 Comment
Categories: 21-Best Practice
Tags: Best Practice
扩展方法浅谈
2010-01-18 22:01 by Anders Cui, 919 visits, 网摘, 收藏, 编辑
摘要:扩展方法首先让我们获得了很强的扩展性方面的能力,可以将很多代码抽象为扩展方
法,同时它也会让代码变得更为简洁、直接,这样就带来了一个额外的好处:可读性的提升。
阅读全文
1 Comment
Categories: 00-.NET Framework, 03-C# Recipes
Tags: Extension Method, 扩展方法
意外之喜
2010-01-02 16:50 by Anders Cui, 788 visits, 网摘, 收藏, 编辑
摘要:喜获 2010 年 1 月 MVP。 阅读全文
21 Comment
Categories: 60-随笔
Tags: MVP
最近遭遇的两个VS 配置
2009-12-15 21:44 by Anders Cui, 817 visits, 网摘, 收藏, 编辑
摘要:1. 一直比较习惯使用英文版的 VS,因为其界面会比较一致,不像中文版会有夹生的
感觉。但是最近想学习下 SQL Server 2008,由于下载的是中文版,安装完毕后,它顺便
把 VS 2008 也变成中文的了,还不吱一声。本来想就这么着吧,但是每次打开 VS 都会不
爽一下,于是想切换回英文界面。网上有人说再安装下 SP1 就好,结果不行。于是打开那
熟悉的 Tools –> Options,发现在 E... 阅读全文
6 Comment
Categories: 08-Visual Studio
Tags: Visual Studio
VS Addin 开发小技巧:获取Solution Explorer 中文件项的路径
2009-08-30 21:58 by Anders Cui, 1605 visits, 网摘, 收藏, 编辑
摘要:Copy Full Path 和 Open Containing Folder 是 VS 中当前打开文档所提供的两个有
用功能,但是这两个功能却没有出现 Solution Explorer 的文件项上,本文介绍了如何弥补
这个缺憾。 阅读全文
4 Comment
Categories: 08-Visual Studio, 09-VS Extensibility
Tags: Visual Studio, Addin, ProjectItem, Extensibility
F#中的事件(下)
2009-08-21 00:56 by Anders Cui, 2074 visits, 网摘, 收藏, 编辑
摘要:本文首先介绍了如何使用 Event.create 方法创建新的事件,然后在此基础上讨论了如
何发布和订阅事件,这样可以更符合我们的编码习惯。不过这种方式发布的事件在 C#等其
它.NET 语言中却难以使用,所以最后介绍了如何发布标准的.NET 事件,这样就可以兼容
于 F#和其它的.NET 语言了。 阅读全文
6 Comment
Categories: 14-F#
Tags: F#, Event, CLIEvent
F#中的事件(上)
2009-08-19 01:01 by Anders Cui, 2792 visits, 网摘, 收藏, 编辑
摘要:在.NET 开发中,事件以及基于事件的编程是颇为重要的概念,它得到了该平台下各
种语言的支持。而 F#将事件视为一等公民,这个特性使得我们可以通过更为有趣的方式对
事件进行组合处理。 阅读全文