博文
抽象思维:学习和思考的好方法(2008-05-28 17:35:00)
摘要:
小学的时候我有三样课外读物。
一个是《寒假生活〉或者《暑假生活》,学校发的;
一个是老爸给我订阅的《少年先锋报〉;
还有一些图书。
这些读物里面,一般有这样一些简单题目:
22*28=616;
27*23=621;
33*37=1221;
……
请问:73*77=?
这是一种找规律的题目,答案小学生都能立刻回答:5621。
规律是十位数相同,个位数为相加为10的两个数的乘积的快速算法。
我的小学课外读物中,有无数多这样的题目,有很多特别优秀的算术解法,给了我学习的乐趣。
好了,到了初中。有一门数学课程叫《代数》。
有一个周末,我闲来无聊,重新来看小学的数学题目。
我发现 (10x+a)*(10x+b)=100*x*x + 10x(a+b) + ab =100x(x+1)+ab 如果a+b=10的话。
所以,22*28=100*2*(2+1)+2*8 = 616 ;可以直接口算。
原来这么多的算术规律,因为代数的抽象,变得无比的简单,简洁,某种程度上,使数学更加神奇和美丽。
然后我用同样的代数方法,发现,小学的算术题目,不管多难,因为一个x的带入,都变得相当简单。
太奇妙了,这是为什么呢?
那个时候就有点朦胧的意识:算术再厉害的人,也比不过抽象的代数,聪明比不过智慧。
我还可以用代数方法返回去,找到很多算术的奇妙规律。
恰巧有一天,学校请了一个高人来给我们讲速算法,老师在上面说题目,还没有讲规律。
我就给旁边的同学说答案。把我同学吓了一跳,以为我神童呢。让我自得了一把。
这不过是抽象的代数思考问题的层次更高的一个简单案例罢了。
后来又学习《平面几何〉。
书上说,我们中国人早就发现了沟三股四铉五的规律。可惜,这远没有抽象的a方+b方=C方这么有力量。
当时我还想,如果我研究中国数学史,一定要看看,是什么原因导致了我们的数学没有抽象出一套体系来,
最后导致我们没有建立现代的科学体系。
但西方科学的抽象力量,使得数学+力学可以造出高楼来,我们只留下了工匠的经验,而且容易失传,
故宫里面最高的楼房,也比不过现代科技下普通人造的楼盘。
当你一旦掌握抽象思维这个利器之后,
你会发......
抽象思维:学习和思考的好方法(2008-05-28 17:35:00)
摘要:抽象思维:学习和思考的好方法
小学的时候,我有三样课外读物。
一个是《寒假生活〉或者《暑假生活》,学校发的;
一个是老爸给我订阅的《少年先锋报〉;
还有一些图书。
这些读物里面,一般有这样一些简单题目:
22*28=616;
27*23=621;
33*37=1221;
……
请问:73*77=?
这是一种找规律的题目,答案小学生都能立刻回答:5621。
规律是十位数相同,个位数为相加为10的两个数的乘积的快速算法。
我的小学课外读物中,有无数多这样的题目,有很多特别优秀的算术解法,给了我学习的乐趣。
好了,到了初中。有一门数学课程叫《代数》。
有一个周末,我闲来无聊,重新来看小学的数学题目。
我发现 (10x+a)*(10x+b)=100*x*x + 10x(a+b) + ab =100x(x+1)+ab 如果a+b=10的话。
所以,22*28=100*2*(2+1)+2*8 = 616 ;可以直接口算。
原来这么多的算术规律,因为代数的抽象,变得无比的简单,简洁,某种程度上,使数学更加神奇和美丽。
然后我用同样的代数方法,发现,小学的算术题目,不管多难,因为一个x的带入,都变得相当简单。
太奇妙了,这是为什么呢?
那个时候就有点朦胧的意识:算术再厉害的人,也比不过抽象的代数,聪明比不过智慧。
我还可以用代数方法返回去,找到很多算术的奇妙规律。
恰巧有一天,学校请了一个高人来给我们讲速算法,老师在上面说题目,还没有讲规律。
我就给旁边的同学说答案。把我同学吓了一跳,以为我神童呢。让我自得了一把。
这不过是抽象的代数思考问题的层次更高的一个简单案例罢了。
后来又学习《平面几何〉。
书上说,我们中国人早就发现了沟三股四铉五的规律。可惜,这远没有抽象的a方+b方=C方这么有力量。
当时我还想,如果我研究中国数学史,一定要看看,是什么原因导致了我们的数学没有抽象出一套体系来,
最后导致我们没有建立现代的科学体系。
但西方科学的抽象力量,使得数学+力学可以造出高楼来,我们只留下了工匠的经验,而且容易失传,
故宫里面最高的楼房,也比不过现代科技下普通人造的楼盘。
当你一旦掌握抽象思维这个利器之......
抽象思维:学习和思考的好方法(2008-05-28 17:35:00)
摘要:抽象思维:学习和思考的好方法
小学的时候,我有三样课外读物。
一个是《寒假生活〉或者《暑假生活》,学校发的;
一个是老爸给我订阅的《少年先锋报〉;
还有一些图书。
这些读物里面,一般有这样一些简单题目:
22*28=616;
27*23=621;
33*37=1221;
……
请问:73*77=?
这是一种找规律的题目,答案小学生都能立刻回答:5621。
规律是十位数相同,个位数为相加为10的两个数的乘积的快速算法。
我的小学课外读物中,有无数多这样的题目,有很多特别优秀的算术解法,给了我学习的乐趣。
好了,到了初中。有一门数学课程叫《代数》。
有一个周末,我闲来无聊,重新来看小学的数学题目。
我发现 (10x+a)*(10x+b)=100*x*x + 10x(a+b) + ab =100x(x+1)+ab 如果a+b=10的话。
所以,22*28=100*2*(2+1)+2*8 = 616 ;可以直接口算。
原来这么多的算术规律,因为代数的抽象,变得无比的简单,简洁,某种程度上,使数学更加神奇和美丽。
然后我用同样的代数方法,发现,小学的算术题目,不管多难,因为一个x的带入,都变得相当简单。
太奇妙了,这是为什么呢?
那个时候就有点朦胧的意识:算术再厉害的人,也比不过抽象的代数,聪明比不过智慧。
我还可以用代数方法返回去,找到很多算术的奇妙规律。
恰巧有一天,学校请了一个高人来给我们讲速算法,老师在上面说题目,还没有讲规律。
我就给旁边的同学说答案。把我同学吓了一跳,以为我神童呢。让我自得了一把。
这不过是抽象的代数思考问题的层次更高的一个简单案例罢了。
后来又学习《平面几何〉。
书上说,我们中国人早就发现了沟三股四铉五的规律。可惜,这远没有抽象的a方+b方=C方这么有力量。
当时我还想,如果我研究中国数学史,一定要看看,是什么原因导致了我们的数学没有抽象出一套体系来,
最后导致我们没有建立现代的科学体系。
但西方科学的抽象力量,使得数学+力学可以造出高楼来,我们只留下了工匠的经验,而且容易失传,
故宫里面最高的楼房,也比不过现代科技下普通人造的楼盘。
当你一旦掌握抽象思维这个利器之......
抽象思维:学习和思考的好方法(2008-05-28 17:34:00)
摘要:抽象思维:学习和思考的好方法
小学的时候,我有三样课外读物。
一个是《寒假生活〉或者《暑假生活》,学校发的;
一个是老爸给我订阅的《少年先锋报〉;
还有一些图书。
这些读物里面,一般有这样一些简单题目:
22*28=616;
27*23=621;
33*37=1221;
……
请问:73*77=?
这是一种找规律的题目,答案小学生都能立刻回答:5621。
规律是十位数相同,个位数为相加为10的两个数的乘积的快速算法。
我的小学课外读物中,有无数多这样的题目,有很多特别优秀的算术解法,给了我学习的乐趣。
好了,到了初中。有一门数学课程叫《代数》。
有一个周末,我闲来无聊,重新来看小学的数学题目。
我发现 (10x+a)*(10x+b)=100*x*x + 10x(a+b) + ab =100x(x+1)+ab 如果a+b=10的话。
所以,22*28=100*2*(2+1)+2*8 = 616 ;可以直接口算。
原来这么多的算术规律,因为代数的抽象,变得无比的简单,简洁,某种程度上,使数学更加神奇和美丽。
然后我用同样的代数方法,发现,小学的算术题目,不管多难,因为一个x的带入,都变得相当简单。
太奇妙了,这是为什么呢?
那个时候就有点朦胧的意识:算术再厉害的人,也比不过抽象的代数,聪明比不过智慧。
我还可以用代数方法返回去,找到很多算术的奇妙规律。
恰巧有一天,学校请了一个高人来给我们讲速算法,老师在上面说题目,还没有讲规律。
我就给旁边的同学说答案。把我同学吓了一跳,以为我神童呢。让我自得了一把。
这不过是抽象的代数思考问题的层次更高的一个简单案例罢了。
后来又学习《平面几何〉。
书上说,我们中国人早就发现了沟三股四铉五的规律。可惜,这远没有抽象的a方+b方=C方这么有力量。
当时我还想,如果我研究中国数学史,一定要看看,是什么原因导致了我们的数学没有抽象出一套体系来,
最后导致我们没有建立现代的科学体系。
但西方科学的抽象力量,使得数学+力学可以造出高楼来,我们只留下了工匠的经验,而且容易失传,
故宫里面最高的楼房,也比不过现代科技下普通人造的楼盘。
当你一旦掌握抽象思维这个利器之......
开发经验提升三部曲(2008-05-22 17:22:00)
摘要:编写了十多年程序,更换了不少平台,也做了不少项目。总结一下,基本上不停地在学习应用总结这三个循环中逐步提高自己。
简单的说,开发经验的提升,基本上逃不出这三个阶段:
学习库测试库
应用库解决实际问题
总结一套库的使用经验,形成自己的二次开发库
以最开始学习C语言为案例吧。
Borland C++/Turbo C中提供了一个库:graphics.h。
这是一个DOS下,PC平台的图像库。我们当时很多程序需要用到,从课程设计到毕业设计。
这是我们第一次经历这三个阶段。
第一个阶段,我们看帮助,看graphics.h头文件,
自己编写一些小程序测试graphics.h的功能,了解公共参数,熟悉里面的大多数函数的用法。
第二个阶段,应用库解决实际问题。
比如我的一个大作业,要编写程序演示信号的变化情况,这就要用到这个库。
刚好我之前因为兴趣,比较熟悉这个库,在编写代码的时候,就只把精力放在信号处理的核心算法上,
学习库函数的时间基本上可以忽略了。
通过一系列的开发之后,我有空总结了一下,把自己编写的和graphics.h相关的,比较通用的函数汇集在一起,
形成了一个自己的二次开发库,这就进入了开发的第三个阶段,
通过这个总结,不但自己把这个库理解得更清楚了,而且积累了学习和应用的经验,在将来的开发过程中大大提高了效率。
比如毕业设计中,就有部分是编写一个小型CAD平台,就又需要使用这个graphics.h库。
因为我自己已经总结了一套二次开发库,在开发实践中,拿起来就用,
在项目编写过程中,主要精力就集中在CAD平台的数据处理上,图像显示部分,已经有成熟的经验,效率大大提高。
毕业之后,进入实际项目的开发。
基本上每个项目都会学习一个新的库,因为一般的设备都提供了一套库函数供我们开发使用。
也避免不了就要进入上面所说的三个循环:
学习库测试库;应用库解决实际问题;积累了足够的经验,慢慢形成了自己的二次开发库,提高了工作效率。
当然,有的库简单得很,只能说积累了应用经验,没必要一定要写出一个二次开发库来。
即使后来的平台转换,实际上,也是这样的过程。
用ucOS,学习ucOS的运行机制,阅读它的代码,也是一个库的学习过程......
从Turbo C到Borland C++(2008-05-21 10:06:00)
摘要:学校一般都用Turbo C作为C语言的教学工具。
这么多年一直都没有改变。当然,就只是简单的语法学习来说,Turbo C基本够用了。
不过,Turbo C有两个致命的缺点,不太适合我们这本图书的读者。
(1)不支持鼠标操作。
(2)和现代的开发IDE差别比较大。
这两个特点,使得读者将来成长不利。
幸好,完全兼容Turbo C,后来Borland公司推出的:
Borland C++,完全避免了这些缺点,
一方面,
他的IDE界面支持鼠标的操作,给我们减少了很多的麻烦。
另外一个方面,他的IDE具备了现在绝大多数复杂IDE工具的雏形。
Borland C++,我们又可以提高C语言的学习效率,有可以为将来使用其他的IDE打好基础。
实际上也是这样,我当年使用了多年的Borland C++,
可以说每个角落都知道了。
后来其他开发工具,老实说,都没有掌握这么全面,但因为有了Borland C++的基础。
基本上其他开发工具,很快就上手了。
而且,因为当年狂看Borland C++的帮助。
全英文的啊,对后来的开发啃全英文材料,帮助都很大。
好了,具体来说,从Turbo C转向Borland C++,只需要记住两个小小的区别。
所有的程序,Borland C++都能支持。
(1)使用stdio.h中的函数,也需要申明#include <stdio.h>语句,这比Turbo C严格了。
(2)main()函数,最好用规范的viod main(),或者int main()。
这两个方面,比Turbo C严格了许多,其实,这是好事情,
基本上,新的C语言开发工具,都是如此严格要求的。
基本上来说,Borland C提供的菜单系统,就和我们今天使用的绝大多数菜单系统完全一致了。
对于一个新手来说,Borland C++的option菜单下面提供了很多的选项,不过,安装过后,你用默认的选项就可以了。你也可以作为挑战,去一一阅读里面的含义,作为自己英语学习能力的锻炼。
其次,Borland C++提供的Project菜单,基本提供了现代的项目管理功能,这是本书会向读者解说的。
读者有了Borland C++中项目开发的体会,嗬嗬,......
为什么要学习C++(2008-05-20 10:54:00)
摘要:很多C语言的高手,或者程序设计的初学者,会问我这个问题。
我的答案是三点:
1. 新的代码组织新式
相对C语言的过程式程序设计,C++是一种更新的代码和数据的组织形式。
这种组织形式,可以用封装两个字来概括。
而且,绝大多数更新的开发语言,Java,C#之类,都具有这样的特点。
可以说,学好了C++,你一方面学习了一种新的代码组织和生长形式。
另外一方面,对你快速掌握学习新的语言有帮助。
2. 更接近人的思考方式
程序设计,终究是为了解决问题。
一般是两种思路,一种是接近机器的逻辑模式,一种是人的思考模式。
C语言,以机器的流程为主,当然是第一种模式。
而C++,面向对象的思考方式,更多的是我们人看世界的方式。
所以,学习C++,更重要的是一种思维。
3. 一种更好的C
C++在一些地方改进了C,并且逐步的被C语言吸收。
比如for(int i=1;i<=10;i++),
现在绝大多数C语言的编译器也开始具备了这些新特性。
我们这篇内容中,并不打算长篇的介绍C++,主要是从学习和思考的角度。
一方面,给读者推荐更多的优秀C++图书,
另外一方面,帮助读者理解C++,为将来的学习打好基础。
如此而已,
更多的C++学习,还要靠读者,一步一个台阶,
毕竟C++之博大,我们不敢说能教会读者全部,能带读者入门,就已经很不错了。
......
C/C++程序员常用工具集(2008-05-19 10:42:00)
摘要:
给c++程序员的一份礼物——常用工具集
所谓“工欲善其事,必先利其器”,从程序员的角度来讲,好工具的使用总会给人
带来事半功倍的效果。面对众多工具/软件,我们应该如何取舍呢。前不久,笔者在csd
n的c++论坛发了一篇贴文,以期能征求大家的广泛意见,得到了不错的反响。本文在对
该贴进行整理的基础上,又做了一些补充。在这里要特别感谢网友:DanielWYO(爱上小
白),redleaves(无心红叶)。
有以下几点需要声明:
本文主要是针对c++程序员的,但一些综合类的通用型工具/软件,作为c++程序员而言也是不可或缺的,因此也被列入其中。同样,这些工具/软件,对其他语言的程序员,也是
适用的。
对所列各类工具/软件的评价,其依据是多数网友的观点汇总,并结合了笔者自己的个人
观点,供参考,如有不实之处,欢迎指正。对所列各类工具/软件的排名不分先后,其中既有Open source软件,也有商业产品。对于前者,我将提供下载地址,对于后者,我将尽量提供相关信息的参考网址。
这份清单并非static的,所列工具/软件也远非保罗万象,如果你有好的建议和想法,也可以提供。如有必要,我会对该清单作定期更新^_^
开发环境Turbo c
DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:)
Visual C++ 6.0/7.0
稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能
也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不
错,比如:Spy++。但编译器较之同类,支持c++标准的程度不够好,尤其6.0及以前的版
本。
BCB Borland的C++ Builder是可以与VC匹敌的另一个功能强大的IDE,速度和稳定性稍逊,但对c++标准支持的程度较好。
......
算法的三重境界(2008-05-06 18:00:00)
摘要:算法,还是算法,不过这章的算法里面,我们加入了数据结构的体验。
本章两个案例:一个面试的案例,另外一个还是面试的案例。
只不过,第一个是别人面试的案例,我在整理本书的时候发现,把他编写了进来。
第二个,确确实实是我自己面试碰到的案例,当我用英语简单的说出了这个算法之后,成功通过了面试。并感概良多。
好了,我们具体来谈这两个案例吧,每个案例的解答有三种答案,代表了三种境界,我给他们取了一个名字:
一个合格学生的解答;
一个优秀学生的解答;
一个工程师的解答。
第一个题目是:
(1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
看起来相当的简单吧。
一个合格学生的解答
一般说来,任何一个C语言基础还不错的学生会做出来:
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
确实,这个程序执行结果肯定是没有问题!但当n很大的时候我这个程序执行效率很低, 还记得我们前面讲算法的案例吗?会浪费很多的时间的啊。在嵌入式系统的开发中,程序的运行效率很重要,能让CPU少执行一条指令都是好的。
一个优秀学生的解答
让我们看看,一个优秀学生,为了更好的节约计算资源,而给出的答案。
long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
比起上一......
在校大学生如何获得两年开发经验?(2008-04-30 15:57:00)
摘要:从我读大三开始,就发现,几乎所有的招聘广告上都写了这句:
“两年以上工作经验。”
这是一个悖论,所有公司都不招聘没有工作经验的学生,
学生都找不到工作,永远不会不会具备工作经验。
岂不是都招聘不到人了。
实际上,这是所有公司的一个暗指,他们都希望招聘有一定项目经验的人。
而我个人应聘和朋友们讨论的经验看,
只要你带上个人作品,和他们谈谈你的开发经验,
能干活的人,都是公司喜欢的学生。
好了,如何让在校大学生具备两年的开发经验呢?
就我们的经验来收,大三开始,每天花1-2小时去编写程序,
程序会越来越大,获得实际的开发经验越多,等你坚持一年。
基本上来说,你的编码经验足以应付工作的入门需求了。
这个时候,你还缺乏一个项目开发的经验以获得提高。
最好的办法,当然是大三的暑假开始到一家公司去兼职打工了。
钱不是关键,关键是学到经验。
其次就是选一个好的毕业设计项目,通过一年的时间锻炼,毕业的时候,你已经不怕任何公司的面试了。
带上你的项目经验。
带上你的demo,找一个技术型工作,基本上来说,是一个非常简单的工作了。
即使没有开发经验的大学生,只要你足够优秀,潜力不错,
我们调研表明,不少开发公司也愿意录取,通过一对一的项目开发指导,逐步成才。
对我们阶梯教室来说,
我们愿意帮助你完成这个转型过程。
我们开发了一系列课程,
第一部分,就是你在校学习的基础课程,
你通过网络报名获得注册之后,
会有专门的老师一对一辅导你按步骤学习,通过你自我的训练,逐步掌握一种开发技术。
基本上能具备一年的开发经验。
在这之后,你还可以参加我们的项目开发实践训练班。
通过一定的强化训练,具备实际的项目开发经验。
人生最关键,其实就是这两年,
只不过有几个台阶,我们愿意辅导你度过。
除了技术上的介绍之外。
求职面试技巧,职业规划,也是我们的课程之一。
总的来说,我们愿意用我们的经验,帮助你获得成功。
......