2013年9月22日星期日

赴美工作常识(Part 4 - 面试)

最近跟同事讨论面试的事情比较多,所以就综合大家所说的列举几条面试建议吧。这些建议是针对中国候选人应聘美国职位而写的,但适用范围可能更广。假若你实际的实力是 X,面试官感知到你的实力是 Y,这些建议既不能让你实力暴增(X++),也不能让你展现超乎实际的实力(Y > X),只能帮助你避免由于沟通问题而造成的实力不被发现(Y < X)。

当做讨论而非考试

尽管面试有个「试」字,但在真正好的技术面试其实不是一问一答的考试,更多是如同同事之间的技术讨论一样,从比较糟糕的解决方案开始做优化,直到做到大家都可以接受的程度为之。这个观点在《理想的技术面试过程》中也提到过,在这里就说一下具体应该怎么做。

首先你要自信,不能觉得面试是公司对你的单向选择,其实是同时包括你对公司的双向选择。有些心理学上的技巧可以让你显得自信一点的,例如说在公司大堂等待的时候尝试深呼吸和伸展一下四肢。由于人的心理状态和身体语言是互相加强的,所以如果你使用自信的身体语言,你就会无意识地被「误导」以为自己确实自信,不过这正是你想要的效果。(如果你想更多的了解什么身体语言表示自信,可以去找本身体语言方面的书来看。)

然后你不要高估题目的难度。有些人可能被 Google 中国的某些面试官虐待过,觉得越是好的公司题目自然越难,但这其实是中国应试体系的思维方式而已,题目难度不是筛选出少数人的唯一手段。就好像同事问你问题一样,问及的事情有可能是你完全没做过的,你就凭借常识来提供一些基本的判断;也有可能是你深入研究过的领域,你可以说出很多细节和难以遇见的问题。面对后面一种情况,假设你说的都是对的,面试官会很开心;面对前面一种情况,面试官会让你说出更多细节,或者问你哪里还能继续优化,这时候你就知道你的答案和已知最优答案还有差距了。(有些 Google 面试官会在你给出该问题业界已知最优解后仍然问你能不能继续优化。)所以千万不要一开始就假设题目很难,觉得给出一个没有优化过的答案很丢脸。

英语说慢一点

很多时候人一紧张起来,说话就会越说越快,在有点口音的情况下只会让对方越来越难听懂。在对自己技术自信的基础上,同时也需要对自己的英语表达能力自信。其实语法或者词汇有点问题,说话有口音,这些影响都不大,只要对方能够听到关键词汇,意思还是能明白的。有时候可能双方都要多说几次「excuse me」和「what is it」才能问明白对方的意思,但只要最后问题能讨论清楚,那你至少还是让面试官了解到了你的真实实力。

代码要易读易改

这个问题来源自某人的一句评论:

有 ACM 背景的人往往在面试过程中都很不介意写全局变量,但我更期望这个问题的解决方案就是一个函数,所以实现细节都在内部解决。

其实「全局变量」不是重点,代码的易读性和可维护性才是重点,而这往往是 ACM 或个人项目所缺乏的训练,这种问题尤其容易出现在编码能力很强但很少跟人合作的人身上。

对于 ACM 而言,只要程序能运行代码怎么写都没所谓,反正代码的生命周期也就是几个小时,无论是否通过几个小时后你就不会再去阅读或者修改这段代码了。这种训练使得写 hacky 代码缺少惩罚。但在实际工作当中,任何 hacky 的代码都会引入新的 technical debt,最终肯定是你以及你的同事承担。你写下的第一个版本,可能要在代码库中停留几年才有人完全推倒重写,这几年内不停地有人在上面做修改,你需要保证在这个过程当中大家都还能明白这段代码是干什么的。

如果你把面试官看做同事,那么你写的代码自然是要经过他 code review 的。不要为了追求高性能而写出很难读的代码来,面试官读不懂就判断不了代码的正确性,性能再好也没有用。你宁可先写下来最清晰可读的版本,如果面试官说需要优化性能时再做优化。

其它参考资料

我暂时能想到的就这么多了。此外推荐 David Wei 的《面试硅谷创业公司:请把面试官当成你的同事》。

2013年9月7日星期六

Bose SoundLink Mini

Bose SoundLink Mini

之前曾经买过一个 Jawbone Jambox,不过放在家里没带过来,来到之后发现还是想要有个小音箱玩游戏看电影用,于是就又买了一个 Bose SoundLink Mini。之所以不买 Jawbone Jambox,一方面是因为我觉得 Jawbone 的产品质量不太稳定,另一方面我也想试试不一样的音箱效果如何。

Bose SoundLink 是一个无线移动的系列,之前有过蓝牙和 AirPlay 的产品,Mini 是今年的新产品,仍然是蓝牙的,比过去的更小更轻便。我买的时候 Bose 官网已经有货了,但在 Amazon 上面还是预定。新产品,当然是在任何平台上都 $199 不打折啦,因为 Amazon Prime 送货比较快所以我就选择在 Amazon 上面买了。

Bose SoundLink Mini 的盒子里面只有 3 件东西:音箱、底座、交流电充电器。交流电充电器可以接到底座上,然后把音箱放在底座上面充电,也可以直接接到音箱上,这跟当年第一代 iPhone 的底座设计是一样的(现在的 iPhone 就根本没有底座的概念了)。想要用电脑或者车载的 USB 充电?不行,但你可以选择买独立的 Bose SoundLink 系列车载充电器。想要使用 AUX 线缆播放?线缆自备。想要有个袋子保护一下?旅行包也是独立选购的。等一下,那个 USB 口是用来干什么的?那是用来更新固件的,但不能用来充电,而且也没提供 USB 线。简单来说,Bose 的策略就跟 Apple 一样,所有的配件都是卖钱的,而且也都不便宜。(这些配件 Jawbone Jambox 都是送的啊。)

效果如何?挺不错的。我对播放音乐的效果没什么感觉,但用来玩游戏看电影实在是很不错。打 StarCraft II 时我就会把它接上,然后 Terran 的所有机械音效从它那里出来,显然比我 MacBook Pro 自带的音箱效果好多了,打起来也爽多了。至于看电影的话,我喜欢坐在床上看,而我床头靠背的顶是平的,宽度正好能放下它,于是就可以把它放在我的背后,音效非常地好。因为它的振动能够直接作用在床头的靠背上,于是就能达到类似电影院的震撼感,而它本质上只是个小音箱而已。

总的来说,我对 Bose SoundLink Mini 还是挺满意的。所谓 7 小时电池续航能力也能做到,如果不是把音量推到最大的话还能超过 7 小时。它的外观使得它很容易就融入了我这个全是 Mac 和 iOS 的家庭,不会像同档次的某些品牌外观傻傻的。如果你考虑买个 $150 到 $200 价位的无线移动音箱,Bose SoundLink Mini 是个不错的选择。