陈莉君

陈莉君的博客

她的个人主页  她的博客

为什么是基本功

陈莉君  2010年05月31日 星期一 23:14 | 1526次浏览 | 10条评论

  不管学任何东西,基本功的重要性是不言而喻的。大家之所以不愿意练基本功,因为其枯燥并看不到其实用价值何在。实际上,这又涉及到另一个问题,如何练基本功,是死练还是灵活应用?是在一个水平面上往前走还是在一个稍有陡度的陂上往上爬?是在思考中不断修订还是出手后就不知修订的空间在哪里?

比如,求最大数的问题:
1)求两个数的最大数
2)求n个确定数的最大数
3)求不确定数的最大数
4)...

第一个问题仅仅用条件语句就可以完成,第二个问题就涉及到循环,而第三个问题就是变参问题,难度系数增大。第四个问题,你还能想到怎么应用吗...,能想出问题本身已经是莫大的进步。

当你能解决第三个问题的时候,是否联想到最常用的printf()函数的实现:
int printf(const char *fmt, ...)
printf()函数的参数个数并不确定,如何获得下一个参数的地址?这是一个最基本而看似简单的问题,你是否联想到把fmt的地址加1就是下一个参数的地址。而这背后的基础就是对参数存放位置的认知。编译程序把参数放在何处,是如何存放的?这些问题是语言之外的知识。当你有了这些基础之后,你自然会写出如下的关键语句:
  int *para = (int *)&fmt+ 1;
 有了这样一个语句以后,你就可以把变参函数回退到确定参数的函数,比如:
 vprintf(char *buf,const char *fmt, int *para);

通过这样的例子,你是否体会到,所有复杂的东西只是纸老虎,能否把这只纸老虎戳破,还原他本来的面目,就看你的基本功了。


评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
周永飞

回复 周永飞  2010年06月03日 星期四 23:19

嗯,是啊,很多基本功很重要,经过了腾讯这次的实习招聘的面试后,我收获很大,至少它让我知道了,我的基础还很薄弱,因此。继续努力了。

0条回复

centerqi

回复 centerqi  2010年06月01日 星期二 09:39

说的很对,现在有很多学生大学计算机基础知识不怎么样,但是去参加一个什么培训也能找到一份工作,但是这些人要想有高的发展,还是有必要去学习计算机的基础理论和打好计算机基础
在面试的时候,很喜欢让他们写一个小程序,不管用什么语言,在一个小程序里面就可以看到他们的基础知识如何
基本功好了,那以后学别的东西就快了。
我想问一句,为什么现在学生的基本功越来越差了呢?要他们写一个基本的字符串操作,都只会用java或者c#里面现有的方法,用c来实现的话怎么也实现不好?是高级语言提高了开发效率还是高级语言宠坏了学生计算机开发呢?

2条回复

  • 陈莉君

    回复 陈莉君  2010年06月01日 星期二 13:37

    你的想法我会反馈给学生。
    为什么现在学生的基本功越来越差?原因很多,我想主要的原因是快餐文化导致的结果。学生似乎也没有错,因为有现成的东西放在眼前的时候,很少人能抵触诱惑不用。当工作几年后回头再看,可能才深切体会基础的重要性不在于它看起来当前是否有用,而是给未来学不同的东西奠定了基础。那些拿来立马能用的东西,也可能很快被淘汰,也就是不是自己的东西终究会回到别人那里。更重要的是,如果想有所创新,实际上就是各种基本东西的大融合和排列组合。

    1条回复

      • 周永飞

        回复 周永飞  2010年06月03日 星期四 23:20

        嗯,就是,java,C#什么的,里面把好多操作都封装的很简单,让人有种被蒙蔽的感觉,所以,基础还是要用C来锻炼的,嘿嘿,专注C。。

        0条回复

王锋

回复 王锋  2010年06月01日 星期二 09:31

陈老师 多写点这样的博客罢,大学里没有好好学,在这里好好悟捂。

0条回复

梅延涛

回复 梅延涛  2010年06月01日 星期二 09:31

我有个疑问请老师指教一下:这种地址+1的方法是否只能使用在x86等大多数平台上,对于其他一些架构是不适用的。不一定每一种架构都会吧函数参数完全放在栈上,有些会放到寄存器里面。

2条回复

  • 陈莉君

    回复 陈莉君  2010年06月01日 星期二 13:39

    你这个问题也提的很好,说一些具体的架构我们来讨论。

    1条回复

      • 梅延涛

        回复 梅延涛  2010年06月01日 星期二 14:18

        恩,比如说在ia64和x86_64构架上。其实在x86平台之外我也没有深入学习过这个问题。有一次参加SZLUG的聚会,张乐问大家知不知道C语言中函数参数的位置,我回答在栈上;那个时候才听他讲到,在不同的架构上,并非都是如此的。

        0条回复

半尾

回复 半尾  2010年06月01日 星期二 06:30

多谢陈老师,如此有启发性的博客还是多谢点为好,太棒了。虽然俺不是计算机专业,虽然俺只是以前学过C,虽然俺现在捧着Python在啃。

1条回复

  • 陈莉君

    回复 陈莉君  2010年06月01日 星期二 13:40

    不管学什么,让自己的思维转起来,知识才变得活泛起来

    0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号