- 论坛徽章:
- 9
|
1、作为程序员,你认为编程最难的事儿是什么?
难的不是语言和程序本身
而是算法!
举个例子!- void shellsort(int v[],int n){
- int gap,i,j,temp;
- for (gap=n/2; gap>0;gap/=2)
- for (i = gap; i <n; i++)
- for (j=i-gap; j>=0&&v[j]>v[j+gap]; j-=gap) {
- temp=v[j];
- v[j]=v[j+gap];
- v[j+gap]=temp;
- }
- }
复制代码 这已不是简单的程序问题,而是算法问题,这就是希尔算法.只是众多算法之一.
许多程序卡壳,写不下去的程序员,问题不在他们对所用语言的理解不深
而是他们面临的实际问题,无法提炼出算法,从而导致无法程序化!
2、编程过程中,你是怎么来命名的?命名的原则是什么?
命名的规则,主要看,这个程序的用途和之后如何维护!
如果是商业产品.并且以后由客户公司自行维护!
那在命名,变量,常量,函数名,头文件时,就要做到通俗易懂,如果客户需要,双语注释也是标配!(英语+汉语)
如果是开源产品,放上Github全球分布式维护!
那在命名,变量,常量,函数名时,头文件时,使用该社区的通用规则即可!
比如:FreeBSD 社区,编写,系统文件挂载头文件.
直接命名 ufsmount.h 之类的就可以了
原码文件 ufs_bmap.c ufs_dirhash.c ufs_extattr.c 这样的风格即可
3、在你的工作学习中,有哪些有趣儿的事发生吗?哪些是让你印象深刻的?
这个问题,如果让我放开了讲,还真怕受不住!
在上面几楼,我提到过,写源码自己用,然后故意混淆代码,但不降低性能,来折磨你想恶搞的人.
这样的事,常常发生.而且乐在其中!
时间一长,有了积累,你就会发现,这种娱乐方式,还有提高自己编程能力的作用!
我自己曾经写过不下10个代码混淆器和功能相反的代码简化器!
当中有出错,也有高潮!
最经典的就是,一次误操作,把希尔算法的c语言实现错当作了恶搞代码
做为输入,由自己编写的代码简化器运行,输出了
希尔算法的代码原型!- int shellsortSh(int p[],int n)
- {
- int op=0;
- int h,i,j,temp;
- for(h=n/2;h>0;h=h/2){
- for(i=h;i<n;i++){
- temp=p[i];
- for(j=i-h;j>=0&&p[j]>temp;j-=h){
- p[j+h]=p[j];
- op++;
- }
- p[j+h]=temp;
- op++;
- }
- }
- return op;
- }
复制代码 当时带给我的快感,到现在还记忆犹存! |
|