Web Analytics

算法的回归

关于算法的文章我一直想写,但算法是我的软肋,自己难于下笔。首先自己非科班出身,没有进行过系统的算法设计课程训练;再者自己到目前为止还从未独立设计过一个完整的、实用的算法,在平时工作中较少的涉及到算法设计,这不能说不是一个遗憾。也许有人会问:“算法难道还没有过时吗,算法不是属于’Donald E. Knuth‘那一代人的事情吗?’。我很难回答这个问题,不过当我今天看到CSDN上的一篇题为’算法是百度工程师的利器’的文章后,我隐约看到了算法的回归! ...

April 7, 2006 · 4 min · Tony Bai

第一道ACM练习题

说来惭愧,今天才真正做过一道ACM练习题。自从上个月发现我的母校上有ACM的在线测试站点,我就下决心好好潜心做题,一来提高一下自己解决问题的能力,一方面也想在算法方面多实践实践,而且每天都花一定时间写程序还可以锻炼自己的思维能力。总而言之,由于项目繁忙以至直到今天才开始做第一道ACM练习题,做题的过程’坎坷不平’,让我印象深刻亚!^_^ 有人会说:’ACM’中的题都是不实用的,没有实际意义。我之前也曾经是这么想的。不过今天的作题过程让我完全推翻了以前的想法,我发现ACM的习题是很能锻炼个人的思维能力、编程能力的。就拿今天我做的这道看似简单的问题,实际上其背后也蕴含着很多基础理论,如果没有很好的理论基础做后盾,我相信很多人都会在这道题上’碰个头破血流’。 ...

April 5, 2006 · 5 min · Tony Bai

我来'Mixing Milk'

这又是一道ACM练习题,我的原则就是如果有时间,坚持每天考虑解决一道吸引我的ACM练习题,今天这道’Mixing Milk’题并不难,不过里面蕴含着一个基础的算法,毕竟对算法一类的知识生疏已久,今天就拿它做一次回顾吧! ...

April 5, 2006 · 4 min · Tony Bai

追求'lint-clean'

到底需不需要编译器之外的独立的静态代码检查工具呢?这个问题’仁者见仁,智者见智’。但是有一个结论我想大家都会认可,那就是越是在开发周期早期发现的Bug,修复它所付出的代价就越小。而像lint这样的静态代码检查程序恰恰是让Bug在早期阶段’显露原型’的绝佳工具,而追求’lint-clean’[注1]境界的代码也向来是专家级程序员的嗜好。别忘了在’C专家编程’一书中曾经提到Sun OS的内核一直是保持’lint-clean’状态的,这就是榜样!还等什么?赶快学呀!^_^ ...

March 31, 2006 · 4 min · Tony Bai

C语言也重构

所谓的重构是这样的一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种有纪律的、经过训练的、有条不紊的程序整理方法,可以将整理过程中不小心引入错误的机率降到最低,本质上说,重构就是[在代码写好之后改进它的设计]。– Martin Fowler 重构,一种改善代码’体质’的方法’。 — 侯捷 重构是上进程序员每天的进行式。是一项工程而不是靠着天份挥洒的艺术。– 侯捷 如果有人说’重构’仅仅限于Java语言或者其他面向对象的语言,那他就大错特错了。按照Martin Fowler的诠释,’重构’就是一种代码整理,而且是在保持接口功能不变的一种代码整理,这样的话每种语言都可以’重构’,也许’重构’在你平时的工作学习中已经不知不觉地发生了,只是你还没有认识到那是’重构’罢了。自从从大学毕业后我就一直在’把弄’C语言,对C语言也算是’情有独钟’了,所以自然而然的就开始探索和积累C语言的重构方法。这里个人能力毕竟有限,并不能穷尽所有方法。 ...

March 28, 2006 · 9 min · Tony Bai

当数组作参数时

C语言中的数组和指针总保持着’千丝万缕’的联系,这里仅针对数组作为函数实参时的情况做些说明^_^。 C语言中的数组可分为一维数组和多维数组两类,而多维数组中又以二维数组最为常见。这里也仅针对这一维数组和二维数组作简要说明。 ...

March 27, 2006 · 2 min · Tony Bai

'right-left'规则再举例

闲暇时翻阅’C专家编程’,再次看到对C语言变量声明的理解一节,遂想起我曾经写过的那篇利用’right-left’规则分析复杂的C语言变量声明的文章’C复杂声明解析’,发现其中的例子的对比性不够强,所以决定再用一篇短文来再阐述。 ...

March 26, 2006 · 2 min · Tony Bai

理解C复杂声明之'优先级规则'

第一次看《C专家编程》一书时关于其采用的’优先级规则’分析C复杂声明时看得很糊涂,在理解’right-left’规则分析C复杂声明后,再回过头来看’优先级规则’,居然发现它们的异曲同工之妙^_^。 其实’优先级规则’的分析过程极其类似’right-left’规则,下面首先摘录’优先级规则’的’口诀’,然后再’一招一式’的细致讲解^_^。 ...

March 26, 2006 · 5 min · Tony Bai

如果让我面试C程序员,我会问

我有这样的一个习惯,就是看书的时候总是喜欢自问自答,这不周末第二次温习’C专家编程’一书,便有了如下若干问题,明为提问,实则是在提醒自己好好想想这些问题,如果大家有兴趣,也可以给出你自己的答案,如果觉得琢磨不透,可翻看’C专家编程’一书,或多敲几次键盘,自己试上一把! ...

March 26, 2006 · 3 min · Tony Bai

GCC警告选项例解

程序员是追求完美的一族,即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一点点的瑕疵。遇到任意一条编译器警告都坚决不放过。有人会说:我们可以使用比编译器更加严格的静态代码检查工具,如splint。这个建议也很不错。不过lint工具使用起来较繁琐,有时候还需要记住一些特定符号并插入到你自己的代码中才行,门槛较高,这也让很多人止步于此。那么我们就从此放弃么?不,如今的编译器做得都很好,它可以帮助我们的找到绝大多数可能出现问题的代码,前提是你要学会控制编译器去找到这些问题代码,而熟悉编译器的警告选项恰恰是体现控制力的好方法。当你可以自如控制编译器警告输出的时候,你就算是’入道’了,同时你对语言的理解也更进一步了。 ...

March 14, 2006 · 10 min · Tony Bai