如何寻找优秀程序员

在delicious上看到一篇去年的文章: How to recognise a good programmer。 正好这段时间一直在为面试发愁,看看这篇文章很有帮助。原文篇幅很长,这里就不逐字逐句地翻译了, 只把要点和看过之后的体会写出来,希望能给同样是为寻找程序员而头疼的同仁们提供帮助。

优秀程序的几个必要条件:

1. 要有热情

企业中有这样一种人:职业程序员。他们之所以做IT是因为IT是个好工作,而不是因为对技术充满热情。这些人回家后绝对不会写程序。 对于他们来说,编程是每天必须的工作,公司为他们提供技术培训也是理所应当的。 这种人缺乏热情,也不会是好的程序员。

其实这类人相当相当多,随手一抓就能抓出一大把。他们自己也有电脑,但那是用来上网看电影打游戏的,不是用来搞开发的。 开发环境、编辑器甚至连Office都没有。这样的人也很难期待他是优秀程序员。

2. 会自学,爱自学

大家都知道IT行业更新很快,不会主动学习的人很快就会被淘汰。有些人你要他们学习某项技术时他会说“公司给我培训我就学”。 当然,在找工作时他们有可能在家里学习必要的技术,但那不是主动的自学。好的程序员热爱学习新技术, 对于他们来说学技术纯粹是好玩,纯粹是个人兴趣。有些人还会制定出完善的学习计划。 这样的程序员根本不用培训。

3. 聪明

也许程序员都给人以不善交际的印象,但其实他们不是。好的程序员都是智商奇高的人, 不可能不善交际。而事实上的确在某些场合他们不善言辞,那是因为他们的兴趣不在那里。 一旦讨论到他们感兴趣的技术话题,他们就会扯开话匣子说个不停。

在招聘时可以试着去谈论一些他可能感兴趣的技术话题,看他能侃到什么程度。 如果问一句说一句或者说不出来什么,那就不用再抱希望了。

4. 隐藏的经验

优秀程序员或多或少都有些“课外活动”,如参加开源社区,为处理日常生活的事情而写的小程序, 个人网站,或者纯粹为了好玩而做的小东西。而面试时这些东西是不会写在简历上的, 因为他们觉得这些根本算不上简历要求的“经验”。

我经常看到有些应聘者的简历上把大学时做的小学期作业都写在上面。这种人就不必考虑了—— 连作业都自认为是“经验”的人可以想到他的水平有多高。

所以,优秀程序员的简历通常都很简短,不过你可以去问问他们,除了简历上写的东西之外, 工作之外有无技术经验,即使完全和工作无关也行。如果他答不出,那即使简历有20页长,他也不会是优秀程序员。

5. 广博的技术知识

这一点很简单,学得技术越多水平越高。不一定要完全精通,但了解许多毫不相关的知识对个人水平有很大帮助。 但同样,优秀程序员不会把他知道的东西全都写上,那些他不精通的东西会认为不值得一写。

不过有一点要注意。如果简历上写到“精通Java、J2EE、Ant、XML、SQL、Hibernate、Spring、Struts、EJB”, 就要小心了,这个人不一定优秀。因为这些技术都属同一个领域,关联性太强。 但当你对这些技术一无所知时,如何分辨呢?你可以让他讲讲这些技术有什么联系。 精通一个领域的技术的人经验丰富,但他很可能不是个优秀程序员。

为什么需要有广博的技术知识?我个人认为,即使是毫不相关的技术,其实也是能融会贯通的。 学得技术多了、杂了,看到不懂的问题自然而然地就能想出最合适的解决办法来。

不过有一点要注意,如果他关心的技术中有尖端技术,如今天的AIR、Flex之类, 那你就可以考虑录用他。

另外优秀的程序员对技术很敏感,他能判断出某项技术是否适合于完成工作。 如果被迫使用一种他认为不适合的技术去工作,他会觉得很不爽的。

6. 资格证书

资格证书、学位等不是优秀程序员的必要条件,但至少不是个反面信号。优秀程序员大都有计算机科学的学位。 也有很多人没有,但这并不能说明他不优秀。专业资格认证如MCSE、CCNA等也是, 这些只是用来证明这个人已经学会了相关知识,企业在招聘的时候就可以省去考核的麻烦, 并不能证明程序员有多么优秀。如果你的企业确确实实需要非常优秀的程序员, 那就别去理会这些认证,而是把精力花在实际能力的考察上吧。

总结

如果将优秀程序员的条件按条列出的话,可以得到如下内容:

正面信号

        

  • 对技术有热情
  •     

  • 以编程为乐
  •     

  • 对感兴趣的技术话题会滔滔不绝
  •     

  • 工作之外自己做过某些项目
  •     

  • 主动自学技术,但不是为工作而学习
  •     

  • 对技术的好坏、是否合适有自己的看法
  •     

  • 使用自认为不合适的技术完成工作时会很不爽
  •     

  • 聪明,很多话题都能侃侃而谈
  •     

  • 在上大学或工作之前就写过程序
  •     

  • 有许多简历上没写出来的经验
  •     

  • 知道许多毫不相关的技术(一般不会写在简历上)

负面信号

        

  • 把编程当作每天的工作
  •     

  • 不喜欢谈论技术,即使受到鼓励也不会说
  •     

  • 只通过公司的培训来学新技术
  •     

  • 愿意使用你选择的任何技术来完成工作,认为“所有技术都是好的”
  •     

  • 看起来不怎么聪明
  •     

  • 在大学时才开始学编程
  •     

  • 简历上写出自己的所有经验
  •     

  • 仅专注于一个或两个领域

摘自: http://tech.idv2.com/2008/01/24/how-to-recognise-a-good-programmer/

关于飞速土豆

• 飞速土豆是在本机起的一个服务,浏览器安装该插件后,遇到可以代理的请求时,就由本地服务进程来下载数据了
• 飞速土豆还有缓存的功能,就是如果浏览器里通过飞速土豆下载过某段视频,再用控制台走该代理下载该视频就很快了
• 飞速土豆限制wget下载,是通过限制agent实现的,用-U参数修改agent就可以搞定了

Linux 桌面系统的效率

Linux 系统主要用来作服务器,而且不安装图形界面; 最近安装来一个图形界面的Linux,发现和windows比起来确实有些慢。其实,Linux的桌面系统是以应用程序的方式运行的,而windows的桌面是运行在核心态的,自然要平滑的多; 但是也正式因为windows的核心态要处理一些图形的东西,使得windows的内核显得很大,而Linux就灵巧的多。

ubuntu 命令行软件包管理

命令行软件包管理
2.4.1. APT

    * APT (高级软件包工具) 是一个强大的包管理系统,而那些图形化程序如 添加/删除 应用程序 和 Synaptic 都是建立在它的基础之上的。APT 自动处理依赖关系并在系统软件包执行其他操作以便安装所要的软件包。 运行 APT 要求管理权限 (参见第1.3.3节 ― root 用户和 sudo 命令)。 可以被 APT 使用的一些常用命令:
          o 安装软件包:
                sudo apt-get install packagename
          o 删除软件包:
                sudo apt-get remove packagename
          o 获取新的软件包列表:
                sudo apt-get update
          o 升级有可用更新的系统:
                sudo apt-get upgrade
          o 列出更多命令和选项:
                apt-get help
      有关 APT 用法的更多信息,请阅读全面的 Debian APT 用户手册。

安装单个软件包文件

    * 安装程序的首选方式是通过本章所介绍的软件包管理器。然而,虽然 Ubuntu 软件包库非常大,但也有可能您想要安装的软件包并不在 Ubuntu 库中。如果这样的话,您也可以从网站下载并安装文件。在您安装文件之前确认您所下载的文件来自一个安全的源是重要的。 有许多不同类型的 Linux 软件包文件。它们多数与特定 Linux 发行版的软件管理器相关联。如 Debian 软件包 文件 (.deb 文件)、Redhat 软件包管理器 文件 (.rpm 文件) 和 Tarballs (.tar 文件)。 本部分内容将介绍如何安装这些单个文件。无法保证这些文件将与您系统兼容,如果您安装这些文件的话,您也将无法得到安全更新。有鉴于此,如果您想安装程序的话,请尽可能通过软件包管理器来安装由 Ubuntu 自身提供的应用程序软件包。

2.5.1. 安装/卸载 .deb 文件

    * 这些是Debian 软件包。这些与 Ubuntu 相关的软件包文件使用 .deb 后缀是因为 Ubuntu 与 Debian GNU/Linux 发行版有着紧密的关系。您将需要管理权限来安装 .deb 文件 (参见 第1.3.3节 ― root 用户和 sudo 命令)。
         1. 要安装 .deb 文件,简单地双击它,然后选择 安装软件包 即可。
         2. 或者,您也可以打开一个终端并输入:
                sudo dpkg -i package_file.deb 来安装 .deb 文件。
         3. 如需卸载 .deb 文件,在您软件包管理器中反选它,或输入:
                sudo dpkg -r package_name

2.5.2. 将 .rpm 文件转为 .deb 文件

    * 另一种软件包文件是 .rpm为后缀的 Red Hat 软件包管理器文件。我们并不建议在 Ubuntu 系统中安装它们。在绝大多数情况下,Ubuntu 自身的 .deb 软件包是可用的。然而,如果绝对必要,可以使用程序 alien 将 .rpm 文件转化为.deb 文件。
         1. 安装 alien 程序 (2 ― 添加、删除和更新应用程序)。
         2. 在终端使用管理权限运行以下命令:
                sudo alien package_file.rpm

可以不被浏览器拦截的弹出窗口JS代码

转载: 一个强制弹出窗口的JavaScript类:ForceWindow

一个可以不被广告拦截器拦截的弹出窗口
ForceWindow.iclass.js代码如下(使用、讲解、相关说明全部在注释中):

————————————————————————————

/**
* 定义ForceWindow类构造函数
* 无参数
* 无返回值
*/
function ForceWindow ()
{
this.r = document.documentElement;
this.f = document.createElement("FORM");
this.f.target = "_blank";
this.f.method = "post";
this.r.insertBefore(this.f, this.r.childNodes[0]);
}

/**
* 定义open方法
* 参数sUrl:字符串,要打开窗口的URL。
* 无返回值
*/
ForceWindow.prototype.open = function (sUrl)
{
this.f.action = sUrl;
this.f.submit();
}

/**
* 实例化一个ForceWindow对象并做为window对象的一个子对象以方便调用
* 定义后可以这样来使用:window.force.open("URL");
*/
window.force = new ForceWindow();

/**
* 用本程序弹出的窗口将不会被广告拦截软件拦截,但有一个缺点:你无法象对window.open弹出的窗口那样对外观进行定制。
* 你当然也可以在使用前实例化一个ForceWindow对象:
* var myWindow = new ForceWindow();
* 这样来使用:
* myWindow.open("URL");
* 本程序测试通过的浏览器:IE 5+、Firefox 1.0、Mozilla 1.7.5、Netscape 7.2、Opera 7.23
* 友情提示:如果你将本程序用于强制弹出广告,请更多的想想浏览者的感受!
*/
————————————————————————————

组织就是……

组织就是……
在你遇到难事时对你说:我们无能为力!
在你遭遇用人不公时对你说:你要正确对待!
在你合法权益受侵时对你说:你要顾全大局!
在你受到诬陷时对你说:你要相信组织!

儒家是公开的执政党,法家是暗中的执政党,道家是参政议政的在野党,墨家思想变成地下党。

80后

夫80后者, 初从文, 未及义务教育之免费, 不见高等学校之分配, 适值扩招, 过五关, 斩六将, 本硕相继, 寒窗数载, 二十六乃成, 负债十万。 觅生计, 背井离乡, 东渡苏浙,南下湖广, 披星戴月, 秉烛达旦, 十年无休, 蓄十万。 楼市暴涨, 无栖处, 购房金不足首付, 遂投股市, 翌年缩至万余, 乃抑郁成疾, 入院一周, 倾其所有 病无果, 因欠费被逐院门。 寻医保, 不合大病之规, 拒付, 带病还。 友怜之,送三鹿奶粉,饮之,卒。