2012年3月9日星期五

自己实现 Interview Zen


偶尔遇到了www.interviewzen.com这个网站,一开始我觉得太神奇了,而且太酷了,这真是面试的神器!随即我就开始思考它是怎么实现的。

我并没有第一时间查看它的源代码。在考虑了几个小时之后,我感觉它可能是通过记录

2012年3月2日星期五

计算机编程语言的掌握程度

在简历上,“精通”这两个字基本上起到的都是嘲讽和增加仇恨的效果。一旦你自称“精通”某一门技术或者编程语言,面试官如果不是直接在心里给你打一个不靠谱的标签,那就会努力的证明你是不靠谱的——“精通”这两个字一般都会引来最最困难的提问。所以我一直在想,到底应该怎么形容自己的掌握程度呢?某种技术我说不好。但今天偶尔的一次谈话让我觉得对一门计算机编程语言的掌握程度,是可以有以下四个层次的:

1、知道
在这个层次,你已经了解了这门语言的基本语法。虽然这很微不足道,但也足够你阅读这门语言的程序了。不同语言在语法层面还是有一些区别的,比如语言的类型是编译还是解释、强类型还是弱类型、代码段是用begin/end还是{}表示、声明一个函数是用function还是def等等。

2、熟悉
在这个层次,你已经学会使用了这门语言的基本类库。只有语法没有类库的语言是没有意义的,熟悉这些类库是正确运用语言的基础。熟练使用操作文件系统、socket、日志、并发等等的类库,知道什么时候该用链表什么时候该用哈希,你才能算“熟悉”了这门语言。

3、掌握
在这个层次,你已经使用这门语言写出了一些能够解决实际问题的程序了。在前面的层次,你的代码解决的可能都是一些toy problem,但是只有你的程序经受了实践和时间的考验,你才能够有机会去解决一些书本上永远不可能出现的问题,并且更加深入的了解这门语言的细节。

4、精通
在这个层次,你已经阅读了这门语言的源代码。你应该已经了解它的内部实现,并且有了恍然大悟的感觉。


用这个角度检视自己,我对于各种语言的认知程度又有几分呢?

A类:最接近于精通的
Python:感谢《Python源代码剖析》这本书,给了我一个很好的入门。不过一来这本书我也没看完,二来Python本身的代码也在快速变化着,完全理解Python的实现仍然是一个很艰难的任务。

B类:掌握
C语言: 把C语言列在这里有点勉强,因为我上大学之后就基本没有写过C的代码了,不过C给我的影响仍然是巨大的,它塑造了我对计算机和程序的认识。
Javascript:Javascript是我很喜欢的一门语言,更不必说在这个浏览器的时代,它简直就是世界的未来。Douglas Crockford的那本《Javascript: The good part》是每个js程序员都必读的一本书,而Coffeescript则可以看作是这本书的实现。

C类:熟悉
C++、Java: 把这两门重量级的语言放在这一类实在是让我脸红,不过面向对象程序设计的确仍然是我最弱的地方。类、继承、多态、虚函数、接口——这些都不是问题,我似乎只是不知道怎么把这些螺丝刀派上用场。
PHP:玩具语言。
VB:感谢这门语言陪我度过了紧张的高中时光。

D类:知道
这一类就多了,不一一列举。


显然,随着时间的推移,这些分类也总是在变化的。有的语言因为你不再使用而变得生疏,有些则越来越熟悉。门户之见最没有意义,最重要的是把它们运用在正确的地方。