存档

2009年12月 的存档

推荐一篇介绍两篇不错的博文的博文

2009年12月30日 huubby 没有评论

题目是不是很绕?哈哈,那就对了,我故意的。

推荐这篇博文:推荐胡泳和毛向辉两篇关于对话的博客,猛击这里

分类: 社会话题 标签: ,

【编程之美】数组循环移位

2009年12月30日 huubby 没有评论

大概两个星期前看到个题目(还是从TopLanguage过去的):

设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度
为O(N),且只允许使用两个附加变量。

苦思冥想两个星期,今天写了段代码,基本实现“时间复杂度为O(N)”的要求,不过用的变量那就多了…
下面是我的杰作:

void mvArray(int *a, int k, int n)
{
	if (k % n == 0)		return ;
	int original = 0, instead = 0;
	int	x = n;
	instead = a[0];
	int target = 0;
	int j = 0;
	while (x--)
	{
		target = target + k%n< n ? j+k%n : (j+k%n)%n;
		instead = a[target];
		a[target] = a[j];
	}
}

假设有a[]={0,1,2,3,4,5,6,7,8,9}这样10个元素的数组,要求向右顺移7位。算法从数组的第一个元素开始,a[0]将移动到a[7],此时a[7]被拿出来,算出a[7]要移动到的目标位,本例中为a[4],那么a[4]的值被修改为原来a[7]的值,原来的a[4]被拿出来,继续如此循环下去。当目标位的原值与目标位即将被赋予的新值相等时,表示这一个环路已经完成全部的替换。将此次环路的开始位加1,继续下一个环路,直到达到数组元素的个数,跳出循环。此时该数组向右顺移7位的操作已经全部完成。 怎么样,是不是很复杂?连我自己都觉得复杂的不行。可就是写的这么复杂,也只完成题目一半的要求,使用的附加变量远远超过两个。 如果你有兴趣,可以自己试试写个函数出来。懒的写的就直接看下去吧,这里有一个非常优秀的解答。 阅读全文…

分类: C/C++ 标签: ,

2009.12.29推特汇总-关于中产阶级与独立思维

2009年12月30日 huubby 没有评论

@huubby 墙内的人们,更加关心民生相关的事情,确切的说,是更关心与自己的生活有关的事情。

@huubby 之前不知哪位推友说过一句话:所谓脑残,就是不用看新闻联播,不用上新华网,不用读人民日报,就能自动自发的得出与党国高度一致的政治正确的结论。今天我理解了这句话,同时明白了另一个道理,中产阶级并不是推动中国走向民主化的动力,心智思维都正常的中产阶级才是社会民主化动力,其他的却是奴才

@huubby 主动放弃自己的权利,认为自己没有辨识问题的能力,要完全相信政府和专家的判断,除此之外不会存在更好的办法。这样的人,虽然有车有房,生活无忧,但不能算做中产阶级,这是鲁迅笔下坐稳了奴才地位的那一类人

@huubby 不关心社会,不关心公益和慈善事业,没有同情心,不知何为感动,这样的人不管收入达到什么层次,也不能算做中产阶级

@huubby 之前的几条推,是个人关于中产阶级的浅见。基于这些标准来过滤,国内目前不存在中产阶级这样的群体,有的也只是个体。中国社会民主化之路漫漫

@huubby 反思教育。从穿开裆裤撒尿和泥玩,到光屁股看A片打手枪,我们学到的永远是虚伪,真实的内心永远不能暴露给别人,只能深夜自己慢慢品尝。《1984》中奥威尔说的双重思想,在49年之后的新中国得到了彻底的贯彻。

@huubby 我们就是“大洋国”,“自由即奴役,独裁即民主,无知即力量”,“境外”这个词是典型的我们自己的新话。

阅读全文…

【转】计算机编程新人入行指导

2009年12月24日 huubby 没有评论

TopLanguage的置顶帖之一,说的非常到位,google group被墙导致可能有人看不到,所以我转来这里。粗体部分是个人觉得最重要而自己没有做到的地方。

———————————————–转载分割线—————————————————

首先是读文档。计算机方面有个著名的黑话叫做RTFM,什么意思呢?按字面翻译就去“去读他妈的文档”,这是在新闻组或者论坛里可能常见的回复,一些人
娇滴滴的说“我是妹妹,能指导一下这个问题么”或者贱兮兮的”跪求某某问题答案”。当然,同事之间不可能搞这些,不过也经常碰到有人问一些感觉非常简单
问题,这些问题实际上都在项目文档或者软件规范里就明白写着。
一个新人加入某个项目,或者转换到一个新项目,都会感觉到手足无措,就像老虎吃刺猬不知如何下嘴。领导不会让这样的新人去完成一些复杂模块的开发或者修
改一些相对困难的bug,基本上都是先分一些界面上的小改动,或者是让他开发耦合程度低一些、相对独立一些的功能作为练手,这个时候作为一个新人就要尽
快的掌握整个项目的大概,然后泛读一下项目的重要文档。如果要开发某个业内标准的实现软件,那这个标准的相关文档至少要通读一遍,不需要投入很长时间,
可以快速掌握一下大概,做做简单的笔记,不懂的地方先记下来以后有空再说。读文档不要作为一个整体任务完成,可以用一些零碎时间来读,以免很长时间没有
什么进展,领导看了还以为在磨洋工呢。
**注意事项一,尽管有这样那样的软件支持,一支笔一个本子仍然是最方便最快速最实用的学习工具,我几乎每年都要写掉八九个大笔记本,里面写着项目开发
的心得、文档书籍的感受、领导指示的一些开发问题等等,不需要有什么文章格式,先写下来就可以了。
如果是第一次进入公司,项目组长会分一个任务作为对新人水平的考察,就好比网游中的新手任务。我们公司大多数的新手任务都是半个月一个月左右的时间,注
意要尽量赶在期限结束前完成所有的编码和单元测试,而且最好完成代码清理和代码注释工作,注意命名规则,这样看起来比较专业一些。
**注意事项二,接到一个项目第一个要问的就是这个项目结束期限(dead line)是什么,这样心里比较容易对进度有个估计,免得最后无法完成任
务。领导可能会反过来咨询老程序员对分到的项目难度估计。一般来说,估计一个大概的编码时间,然后把估计时间乘二,留出一定余量比较好。
读文档不要作为一个整体任务完成,可以用一些零碎时间来读。实际上接手一个新任务,必须要做的就是理解需求。一个开发人员如何不理解他想做什么,基本上
这个任务一定会失败。我们高考时候都会写一篇大作文,对题目的理解非常重要,偏题跑题就没法拿到高分,开发也是如此。对需求的理解需要反复的进行,定期
和项目组领导或者客户进行沟通,以免自己做了无用功。但是沟通之前一定要注意,自己先掌握一定的背景知识,比如前面提到的规范文档,或者是读一读已经有
的代码,跑一跑成型的产品,免得问的都是不必要的问题。
搜索一下可以找到一篇题为”提问的智慧“的文章,里面介绍如何在网上问问题。其实项目组内沟通也是如此,要注意问有意义的问题。打个比方说,有时候自己
会有一种感觉,跑到别人面前,把问题说了一遍,还没等人回答,突然拍着脑袋说”啊我明白了“,也许是反应挺快,可是还是耽误了别人的功夫,像这样的问
题,自己组织组织语言或者写出来,答案就很容易发现。另外也有的人,总是这是怎么回事那是怎么回事,其实到搜索引擎一搜或者是把动手做做就知道结果,但
是非要张嘴问,这样的人说得难听点就是问题不经过大脑,其实一思考就能得到答案了。问问题之前也可以试着理清一下思路,看看前因后果,简化一下问题模
型,也许经过这些方式,自己就能找到答案。有同组的同事问问题,很多时间我反问几句,把思路理清,他自己就知道答案是什么了。忘记在哪有看到一个轶事,
在某个著名软件公司里,开发组的桌上会放着一只小熊,大家互相问问题之前,先对着小熊把问题说一遍,看能不能把问题描述的清晰,基本上说的比较有条理以
后,答案也就随之而来了,大家可以试试这个办法。
**注意事项三,提问之前,自己先试图看看能不能找到答案,我建议的寻找顺序是文档、google,最后才是张嘴问,问之前最好已经积累了一些材料,比
如关于这个问题自己做了什么研究,搜索了什么关键字等等,这样问的有诚意,回答才能有诚意。
另外,对于一个新人,需要多跟老同事沟通,了解项目的关键点是什么,比如开发一个通讯程序,用了什么协议,哪个网站比较有用,哪个文档需要精读,都是非
常有意义的问题,这些问题可以少走一些弯路。早上到了公司,第一件事是接收业务邮件,然后记下一些需要回复或者要做的工作。邮件阅读以后,可以跟项目组
长做个简单的沟通,了解一下哪个任务或者功能需要快一点完成,交流一下自己的想法,时间花费不多但是可以把一天的任务明确下来。
如果比较努力而且有一定的开发能力,两三个月以后应该开始接触到项目比较核心的东西了,这个时候需要做的工作就是读代码。一个项目最重要的东西就是代
码,至于文档、注释、测试,其实都是保证代码质量以及代码可维护型的一种辅助手段,作为一个开发人员,不熟悉代码就是致命的错误。
读代码我这里有一些简单的体会。
读代码要注意的第一条是从界面开始,深入到功能。打个比方说,一个桌面软件,其中有个格式转换功能,可以从菜单选择”格式转换“进行操作(注意,所谓格
式转换就是一个例子,没有实际意义),那么就可以搜索菜单里的”格式转换“,找到相对应的界面函数,这就是一个相对独立的功能入口点了。然后从这个入口
点顺藤摸瓜,就可以搞清楚格式转换这个功能需要的一系列界面函数以及逻辑实现函数。
读代码的时候注意要随时做笔记,可以用word或者是powerpoint这样的软件做记录,搭配一个抓屏软件抓取界面变化、程序运行栈或者是一些关键
数据就更好了。
一个相对独立的功能基本上是由几个数据类或者数据结构,加上几个比较重要的逻辑函数实现的,抓住了这些关键就抓住了这个功能的核心。比如说一个通讯软
件,重要的就是通讯数据格式和通讯协议实现。经过我的体验,这个小窍门还是很有用的。一般经常出现问题的也就是这些相对来说复杂一些的函数。
阅读代码的同时还要经常问自己一些问题,比如这个地方为何这样实现,有没有其他的方案,哪个方案更好一些等等。这些问题可以让自己更好的理解当时开发人
员的一些想法思路,另外也是将来代码进行重构的一个铺垫。
**注意事项四,作为一个开发人员,多思考是非常必要的一个特质。
一个新人,经过这些阶段,基本上可以成为项目组的中坚力量了,希望每个入行的新人都能成功晋级成为老手。

从2003年加入现在的公司,已经有了快6个年头,自己也从一个计算机软件开发方面的新兵变成了老人。在公司里也做过几个不同的项目,有一些新的同事加 入项目组,会有这样那样的疑惑和问题。在这里想简单说说,一个新人如何能快速的融入一个新的开发组,让其他同事能够接受自己。

首先是读文档。计算机方面有个著名的黑话叫做RTFM,什么意思呢?按字面翻译就去“去读他妈的文档”,这是在新闻组或者论坛里可能常见的回复,一些人娇滴滴的说“我是妹妹,能指导一下这个问题么”或者贱兮兮的”跪求某某问题答案”。当然,同事之间不可能搞这些,不过也经常碰到有人问一些感觉非常简单问题,这些问题实际上都在项目文档或者软件规范里就明白写着。

一个新人加入某个项目,或者转换到一个新项目,都会感觉到手足无措,就像老虎吃刺猬不知如何下嘴。领导不会让这样的新人去完成一些复杂模块的开发或者修改一些相对困难的bug,基本上都是先分一些界面上的小改动,或者是让他开发耦合程度低一些、相对独立一些的功能作为练手,这个时候作为一个新人就要尽快的掌握整个项目的大概,然后泛读一下项目的重要文档。如果要开发某个业内标准的实现软件,那这个标准的相关文档至少要通读一遍,不需要投入很长时间,可以快速掌握一下大概,做做简单的笔记,不懂的地方先记下来以后有空再说。读文档不要作为一个整体任务完成,可以用一些零碎时间来读,以免很长时间没有什么进展,领导看了还以为在磨洋工呢。

**注意事项一,尽管有这样那样的软件支持,一支笔一个本子仍然是最方便最快速最实用的学习工具,我几乎每年都要写掉八九个大笔记本,里面写着项目开发的心得、文档书籍的感受、领导指示的一些开发问题等等,不需要有什么文章格式,先写下来就可以了。

如果是第一次进入公司,项目组长会分一个任务作为对新人水平的考察,就好比网游中的新手任务。我们公司大多数的新手任务都是半个月一个月左右的时间,注意要尽量赶在期限结束前完成所有的编码和单元测试,而且最好完成代码清理和代码注释工作,注意命名规则,这样看起来比较专业一些。

阅读全文…

分类: 转载 标签: