这一篇谈谈基本的工作能力问题,主要针对程序猿,以初级码农为参照物,PM, testing或者数据科学家们请参考类推。
毛主席说得好,革命不是请客吃饭。工作也不是请客吃饭。任何一个来面试的人,所有面试官都会有一些底限,底限不合格了,其他东西就不重要了,该据的据,基本上来说都是没得商量的。笔者把自己认为重要的一些底线和基本能力列出来,大家可以参考一下。
第一是干活的能力。一个程序员说白了还是要干活然后拿工资。不管是哪个组都不会喜欢不能够干活的人。对于一个entry level的程序员来说,干活的能力就是能够成功的写好程序的能力。这里引用大神Knuth的话来说一下:
算法+数据结构+编程语言
算法和数据结构来说都博大精深,而且自从有了委员会派,兴起了刷题大事业以后,我想大部分人其实都不至于会因为这方面的东西而丢了分。真丢了也是自己没有准备好。这里特别强调一下编程语言。code写出来不仅仅是给计算机看的也是给人读的,重要的事情说三遍:code是给人读的,code是给人读的,code是给人读的。
前面有篇文章里面提到过某个人面试自我感觉很好,但是大家都说据。这个人被据的原因很重要的地方之一就是他的code不是人读的。比如说binary search大家都会,一般没有人在现实代码里写个递归的binary search。倘若面试的时候有人别出心裁来了个递归,又没有能够把递归写的通俗易懂,那么往往就会因为code读不懂被挂了。到处变量名满天飞,该写成函数的不写成,不写成函数的非要写成。本人印象里面有个特别聪明的妹子,算法数据结构头头是道,唯一的问题是一上白板写程序,就会暴露出自己不是科班出身,处理特殊情况抛出个异常都不会写。所以需要特别强调一点,写出好看易读的程序是基本功。因为这个被据的不计其数。换句话说,熟悉一门语言以及用这个语言认认真真的写过一些东西是很有必要的。
另外一个事情是,有的面试者,喜欢用不常见的语言来写面试题,比如说ML。不是说这种语言不好,而是说有些时候面试官就无从判断这个人到底行还是不行。由此熟悉一门常用语言,会写人能读的程序是需要强调的一个方面。
第二是让别人知道你干了什么的能力。说白了,你要能够把自己作什么东西,怎么做说得别人能听明白。中国人往往干活能力很强,但是到底要干什么,怎么干说不清楚。这其实是大问题。在面试的时候如果无法很好的说出自己是怎么想的要怎么做,然后和面试官之间顺利沟通交流意见建议,那么即使自己埋头苦写,最后结果最优,那只有一个结果,被据。基本的沟通能力是任何一个人在IT行业寻一份工作所必须的。如果自己基本的沟通能力都没有,那就好好努力吧。不然哪怕题刷的滚瓜烂熟,也不会多顺利的找到工作,即便找到了,工作以后还是照样要挂。至于沟通能力要怎么样培养,那是个大话题,但是起码的,说话有逻辑,先说原因后说解决方案,先从大的出发,后列出小的来之类的正常人类的思维方式需要遵循。
最后是让别人愿意和你一起干活的能力。这个东西说简单也简单说复杂也复杂。你只要自己站在自己的立场想一想,你不喜欢和什么样的人在一起干活,那么你就可以理解哪些东西是必要的了。通俗易懂的来讲就是人可以由傲骨但不要有傲气。该谦虚的时候谦虚些,能和人工作的时候和谐相处就好。当然,人要足够牛,这些都可以忽略不计。对于普通人,最起码的,面试的时候展现出来的是能够work together的那一面,而这应该也是一个人被hire过去必不可少的条件之一。