Browsed by
标签: Programmer

再谈“我是怎么招聘程序员的”(下)

再谈“我是怎么招聘程序员的”(下)

<<<再谈“我是怎么招聘程序员的”(上)

在上篇中,我们说到了一些认识人的方法(操作,知识,经验,能力),还有一些面试的方法(算法题,实际生产活动中的挑战),下面我们来说说,面试的风格,还有一些点评。

把应聘者当成你的同事

有些公司的面试官,在面试过程中问你一个算法题,然后等着你解答了,如果你给出一个答案,然后就会问你有没有更好的答案,如果你给出了正确的答案,他们就会问你一个更难的问题,如此循环下去。他们基本上很少给你提示,甚至不停地质问你,挑战你,搞得应聘者很紧张。

另外,有很多问题是没有标准答案的,或者说是,同一个答案的描述方法有多种,很多面试官会觉得你没有回答到他想要的答案,因此表现得有对你不屑,并表现出你不行的样子,并觉得你的能力有问题。真是可笑了。比如我一个朋友在回答什么是异步的问题时,举例说明了异步调用就是不能处理完就返回,并且需要传递一个回调函数给调用方以便完成后回调通知结果。这样的回答并没有错,但是这并不符合面试官心里想要的答案,面试官对此并不满意,进而认为我这个朋友还需要去多读读书。

我相信大多数面试官都会这样干的。我想问问这样的面试官,你们有没有用面试的方式对过你的同事?在你的工作场景中,你会不会用面试的风格和你的同事进行交流和说话?不妨让我们来问我们自己下面几个问题:

  • 你在工作当中遇到难题时你是怎么解决的?你会和人讨论吗?你只用15分钟就能得出最优解吗?
  • 你在工作当中解决难题时是否会有一个人在旁边质问你并给你压力吗?
  • 你在工作当中会为难你的同事吗?会让你的同事紧张吗?你觉得在紧张的状态下能做好工作吗?
  • 你在工作中觉得同事的回答并不是你想要的答案,不是符合你的答案,你会认为你的同事不行吗?
  • 你的成长过程是什么样的?在是压力和天天被人质问的情况下成长的吗?
  • 大家都知道学校里应试教育的弊端,你觉得你的面试是不是一种应试呢?
    (看看这么多的应聘者们都在做各种各样的算法题,这不就是一种应试吗?)

想一想你的日常工作,问自己一下上面这些问题,想一想你自己的成长过程,想一想你和你的同事是怎么相处的,想一想你的日常工作中是什么样的,相信你自己也能得出结论的。

如果你把应聘者当成自己未来的同事,那么你的面试会有下面的收获:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (29 人打了分,平均分: 4.38 )
Loading...
程序员的谎谬之言还是至理名言?

程序员的谎谬之言还是至理名言?

有朋友(网友never)在酷壳Coolshell.cn的留言版上问我,为什么关注了这很多的东西,我想我可以用下文来回答这位网友,因为我和作者的观点几乎一致。这篇文章由 ALAN SKORKIN写的 “The Greatest Developer Fallacy Or The Wisest Words You’ll Ever Hear?” ,我把其全文翻译如下,我很喜欢这篇文章,希望你也喜欢。(翻译的也许不好,欢迎指正)

—————————————————正文分隔线——————————————————

Wisdom

I will learn it when I need it – 我会在我需要的时候再学“!我听到这句已经很多年了。这对于一个高速变化的软件行业环境来说,这似乎是一个非常实用的态度。 在某些方面这的确很实用主义,不过在其它的方面,我为这句话感到很不爽。这句话变成了整个软件行业的福音,但却没有让我们的软件行业变得更好。其问题在于,这句话伪装在于其听上去像是一个智慧的有经验的开发者说的,但是人们只是以此为借口而随波逐流。实在是有太多的东西需要我们去了解,我们也的确需要在工作当中来学习这些东西。但是, “在工作中学习”和“根据遇到的问题捡知识”这两者有着巨大的不同。

  • 另外,目前整个软件行业越来越需要一堆多面手,也许现在已经是这样了,只是我还没有注意到。当然,我也不喜欢这种情。现在,好像没有人愿意花更多的时间来把某一个东西学好学深学扎实,比如 计算机科学的基础知识,或是最新的你正在使用的技术,甚至你在最近几年内每天都在使用其编码的程序语言(参考:Java is passed by value)(译注:我在如何学好C++一文的回复中已经看到一些这样的人)。何苦呢?你会在你的学习路途中看到这些东西被更新,被废弃,并可能变得小众化。我和很多不同的人讨论过很多次,但是好像没有人意识到这是一个问题。 “哥们,做个实用主义的人吧”。
  • 与此同时,我们所有的人都在相互地克隆和模仿(译注:参看中国的C2C)。你需要一个Java程序员,我是一个Java程序员,你也是一个Java程序员,我的邻居也是一个Java程序员。我们之间有什么差别?其实,基本没有差别。好吧,我有一些jQuery的经历,太好,所以,你知道怎么来做一个折叠式的菜单?当然,我可以Google一下,然后剽窃别人最好的代码给你 :)(译注:参看“十条不错的编程观点”中的”Googling it” is okay)。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (143 人打了分,平均分: 4.80 )
Loading...
如何学好C语言

如何学好C语言

有人在酷壳的留言版上询问下面的问题

keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

  1. 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
  2. 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (160 人打了分,平均分: 4.68 )
Loading...
Fix Bug的五个阶段

Fix Bug的五个阶段

下面的文章和《各种流行的编程方式》有异曲同工,请你不要理解错了。本文来源,翻译如下:

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

一个非常严重和困难的bug,能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯。经受这种考验的创伤程度,相当你受到了一次严重的身体伤害,离婚,或是家庭成为的离世。

研究人员在研究了计算机编程心理学后,得出了一个程序员们在解决一个困难的bug时的心路里程。这些不同的境界,很像为大众所知的Kübler-Ross Stages of Grief(这个模型描述了人对待哀伤与灾难过程中的5个独立阶段(否认,愤怒,耍赖,抑郁,接受)。绝症患者被认为会经历这些阶段),而且原因都很相似。就好像死亡所伴随的悲伤一样,fix一个bug是一个过程其初始化了一个事件,一开始是拒绝相信,其造就了你苦闷的情绪并开始逐步影响你的心智。这种苦闷的情结果会让你纠结要努力忍受,最终会你会找到一个满意的结果。

了解下面这几个bug-fixing的阶段,会让我们更好的生存下来,并持之以恒,最终带来……关闭我们所有的bug的结果。

第一阶段:抵触

本阶段的状态: 多疑 Skeptical. 生气 Offended. 易怒 Petulant.

1. 不理睬

也许这个bug会安静地离开。

2. 标记上“不是bug”

也许这是用户的错,或是本地配置有问题。是的,我确信就是那样,一会就会好的。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (17 人打了分,平均分: 3.94 )
Loading...
程序员那些悲催的事儿

程序员那些悲催的事儿

在StakeOverflow上有这样一个贴子叫“Confessions of your worst WTF moment”(WTF就是What the fuck的缩写),挺有意思的,我摘几个小故事过来,希望大家在笑过之后能从中学到什么——所有的经验都是从错误中来的(我在其中加了一些点评)

我们公司的软件是给警察局用的,那是一个对用来处理被逮捕的人的系统,此系统还需要收集脸部特征和指纹信息,并且,这个系统和会向FBI的系统提交这些信息。当我们在测试这个系统的时候,我们一般都是用我们自己的指纹,当然,数据库联着的是我们的测试数据库。不过,有一次,在我们测试完后,我们忘了把系统切换回生产库,于是我们的测试数据库就联上了生产环境,于是我们的指纹信息和照片就散布到了其它系统中……清除我们警察局这边的还好办,但是,你需要波士顿警察局警司去法院签字才能从FBI的数据库中清除我们的信息。

点评:测试环境和生产环境的数据不要混在一起。

有一次,我需要向新系统中导入一堆数据,因为数据量太大,需要5个小时,只能在夜里来干,在系统需要正式使用前2个小时,数据导完了,此时是凌晨4点。随后,我需要删除一些数据,于是我在SQL命令地上输入了“DELETE from important_table; where id=4”。是的,我没有看到哪里还有个分号,天啊。

点评:这就是加班工作的恶果。另,在delete之前最好先做一次select。

我把我的管理员口令提交到了一个开源软件的源码里。

点评:1)版本管理器里的东西是删不掉的。2)一些用户和口令要hard code在代码里,所以,不要混用代码使用的权限和管理员的权限,小心管理程序的运行权限,为其注册专门的用户。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (53 人打了分,平均分: 4.62 )
Loading...
计算机专业学生的大学生活

计算机专业学生的大学生活

下面看到某国外的同学描述的自己的大学生活,呵呵。做一下解释,

  • 正常的生活是,10点到17点上课,17点到22点是放松和work(chill相当于relax),22点到凌晨1点是社交活动,然后睡8小时。
  • 计算机专业的学生的生活是,只要你脑子还在转就work,脑子不转了,就睡2小时。(原来,国外的计算机大学的同学们在大学时就已在疯狂工作了,课都不上)(work是在校的学术作业项目(谢谢网友rho指正))
计算机专业学生的大学生活
计算机专业学生的大学生活

不过,看了一下上面的代码,我发现了两个问题:

  1. sleep(2),在posix下是秒,在windows下是毫秒。
  2. (hour >= 22  &&  hour < 1) 这个表达式永假。正确的是(hour >= 22 || hour < 1)

当然,我们并不能下结论——该同学的在学校里并没有学好编程。因为,你不知道Sleep 和 && 有没有被重载了。(你要把&&在某些情况下重载成||的行为也不是不可能 。注:在c++中,你无法重载内建类型的操作符

——————

最后说明一下,最近事太多(一个项目要上线,另一个项目需求分析和设计、招聘、酷壳服务器迁移、带孩子、申请签证、给人做培训),所以没有更新,大家见谅

好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 3.54 )
Loading...
你会问问题吗?

你会问问题吗?

在工作和生活中,总是会有很多人问题我很多技术方面的问题。有一些时候,问问题的和答问题的总是会有一些不爽的事情发生。如下面的几种情况:

  • 比如:“我的电脑老是蓝屏,怎么办?”,通常这样的问题90%以上的回答是:“重装吧”。这让问问题的人感到很沮丧,但你不能不承认那不是答案。而且有时候让人无法解答,比如:“我的makefiel出错了,你帮我看看我的makfile”,我通常会非反问,报了什么错吗?
  • 另一种情况是,回答问题的人首先先对问问题的人的抱怨,你问的问题就不对,或是,你问的这个问题是什么意思,而导致问问题的人却在不停地解释,结果花了好长时间来讨论问题本身是什么。
  • 还有一种情况是,问的问题太简单了甚至太白痴了,比如你自己试一试或是读读文档就知道了的问题,或是问这个问题直接表明了你的无知或是懒惰。这种问题会相当影响别人对你的印象。
  • 第四种情况是,提问者滔滔不绝,扯这扯那,讲了一大堆,听得听累了。最后都不知道你要干什么。

所以,怎么去问问题,怎么问一个好的问题,是一个很重要的事。你提问的技术直接关系到了你是否能够很快得到你满意的答案。

这里有一篇文章推荐给大家《How To Ask Questions The Smart Way》,中文版在这里《提问的智慧》,我把其中的几个亮点总结如下:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 4.14 )
Loading...
提高编程技能最有效的方法

提高编程技能最有效的方法

StackExchange.com上有两个贴子(贴子一贴子二),贴子名叫“What is the single most effective thing you did to improve your programming skills?” – 对你的编程技术提高最有效的一件事是什么?回复的人中给了很多很不错的建议,我把他们总结了一下,十条,相信一定会对你有用。(注意:顺序是我自己按我的个人经验排的)

  • 和比自己聪明的能力比自己强的人工作。学习他们的代码,他们的做事方法,看一看那些人是怎么处理错误的。
  • 总是倾听别人怎么说,无论那个的资历和职位是什么样的。
  • 实践,实践,实践,总是不满意于一开始出来的事。
  • 多问问自己,现在在写什么代码?为什么要这样写成这样?还有没有更好的方法?
  • 学习多样的技术,多多比较他们,并一定要了解各种技术的优缺点。
  • 总是问别人问好的问题。
  • 多回头看看走过的路,做过的事,写过的程序,感觉一下他们有多烂。
  • 多读读那些大师写的书。
  • 不要总坐在电脑前编程序,多做做运动,多到户外走走,和非技术人多接触,向他们学习。
  • 把你的想法说出去,看看别人怎么回应的。从别人的回应中学习。

除了这些,下面是我个人想给你的建议——

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (24 人打了分,平均分: 4.04 )
Loading...
Error handling in Egypt

Error handling in Egypt

以前发布过《C语言的错误处理》一文,不过今天想说的是Egypt的“错误处理”。埃及的事闹得挺大的,国外和中文twitter上更是炸了锅。不要以为程序员就只会写程序——看看程序员举出来的标语吧。呵呵。

Error handling in Egypt

当然,作为程序员来说,这段代码显然还需要重构:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 4.00 )
Loading...