时间:2017-12-26 来源:互联网 浏览量:
16年元旦顶着大风来北京面试,一天6轮,在回去的高铁上感觉面试可能挂了,一个礼拜后收到了Offer。由于自身各方面的原因,18年元旦,选择离开微软。It is hard to say LEAVE, 这里整理了一下我在微软的两年经历,算是我这两年的总结。
我眼中的工作环境
我没在其他一线互联网公司呆过,我个人觉得微软(北京)的工作环境是相当不错的。公司大楼靠近北四环,丹棱街5号,周边街道基本不怎么堵车,地铁有四号线和十号线,开车的话直接走四环,到亚洲最大的居民区天通苑大约也就40来分钟。
上下班比较自由,公司没有这方面的考核制度。我一般早上11点到公司,晚上8点离开公司,如果有事就会更晚一点。有的同事下午需要早走,所以上午来得比较早,但是工作时间这些都没有明文规定,各人视情况而定。
平时如果有什么事情需要请假也比较简单,一般跟leader说一声就行,回头在系统里面补一下即可。每人每年有15天带薪年假,我觉得一般人基本用不完。如果半天的话,大部分都不需要在系统里申请,直接说一下即可。微软关于假期这方面的福利还是比较好的,每人还有3天志愿者假,15天病假,女同事120天产假,男同事有6周的陪产假,没错是陪产假,我前段时间刚修完42天的陪产假。
公司内部环境不错,比较空旷,各种小的focus room,meeting room,一周七天随时都有保洁在上班,至于免费的水果、饮料这些当然是必备的了,相信一般好点的公司都有这个福利。
我做过的项目
在微软呆两年,做过的东西不算少。如果让我给我做过的项目评一个分,10分制的话,大概在6分左右。我觉得我比较客观,不存在我在这里呆过所以吹嘘,也不存在我即将要离开了所以去故意抹黑。
刚进来的时候做过一段时间的UWP,具体是什么我就不说了。整个team都比较卖力,可能微软上层领导早已看透了一切,早已知道Windows 10 Mobile命数已尽,所以高层老大基本不重视这块的工作。要知道那还是16年初,微软还并没有官方宣布放弃Windows 10 Mobile。
当时只有我们Manager支持以及他手下一帮子兄弟在埋头苦干,最终的结果大家都知道了,微软宣布停止更新Windows 10 Mobile。我不知道没有移动端这块,UWP存在还有什么价值,体验不如传统win32,又不能跨平台到Android和iOS。HoloLens、Hub和Xbox?这个用户能有多少?个人以为UWP的初衷是相当好的,只可惜微软并没有翻盘。
做了差不多四五个月的UWP,16年下半年开始接触Cortana的开发工作。Cortana是Windows 10默认自带的一款智能助手,不知道有多少人用过这个智能助手,认为她到底智不智能。
Team大约花了4个月做了一个Vision的feature,大概就是让Cortana不仅能够说、听,还能够看,能够识别图片中的文字信息,自动为你设置提醒,为你安排会议,个人觉得这个feature还是非常实用的。可能你就要问了,这个东西看似很简单,为什么要花这么长时间,因为整个Cortana的代码结构超级复杂,前端涉及到Windows 10操作系统的Code,后台涉及到Bing的Code,你不花个把月根本不清楚你应该动哪块的东西。
再加上Cortana整个项目的Owner在美国,你往里面check in一行Code,都得需要别人Review,跨国的开发工作效率尤其低下,这个后面我会说到。由于各种原因,最终这个feature并没有在RS3中对外开放。听说RS4会上?后来我转到其他项目中,所以也就没有再关注这个事情。
说到代码结构复杂,不得不说很多开发的思想还停留在十几年前,像Cortana、Edge这种App都是跟随系统绑定的,半年一升级。类似这种App就应该发布到Windows Store上,更新方便,完全符合移动互联网开发程序。关于为何Edge不能发到Store中而必须绑定到系统上,知乎上有相关的回答,真相让人哭笑不得。
今年5月开始,进了新的项目,也就是我目前正在做的,Edge for Android。当然Edge for iOS也是我们team另外一部分人在做。
说它是Edge,其实跟Windows 10上的Edge没有任何关系,Android上是基于Chromium开发的,iOS是基于Control弄的。Android这边的dev最开始大约有16个人,dev全在中国,design在美国,从项目开始到最终Publish一共花了将近6个月的时间。
Android版目前可以在Google Play上下载,国内Android市场也有同步过来的,感兴趣的可以下来用用,自认为跟国内几个主流浏览器还是有一定差距。相比前两个项目,可以看到这个项目很受公司重视,所以相对来讲还是比较有前途的。当然还是有几个地方需要吐槽的,公司内部已经吐槽过,所以我把它写在这里:
1) 公司组织结构太大,一个芝麻小的改动可能涉及到的人全世界都有。沟通全靠邮件,今天发的邮件可能明天后天才能回。因此沟通不畅是经常的事,design改一遍又改一遍很常见;
2) 由于微软公司的Policy,出于各种Security的考虑,Chromium版本需要不断地升级,从一开始53,5个月的时间连续升级4次一直到63。可以想象,每次merge需要消耗的人力,由此产生的bug又是多少;
3) 不得不说,微软对App的design真不如国内大厂,UX不够好,不多说了。
我对项目的反思
拿着SDE2的钱,操着CVP的心。我这种级别也只够在底层写Code。事实上,大部分都是我这样的人。还是那句话,公司组织结构大,做一件事情牵扯到的人太多。
而且不在一个地方,沟通起来相当困难。想象一下,小团队作战,出现一个问题,马上就能面对面开会,可能当天就能高效解决。虽然微软在中国的的研发人数全球第二,但我所在的部门而言,很多东西都没有拿到话语权,国内的团队没有得到美国那边足够的信任。
我很肯定的说,我身边的同事都是比较优秀的,Coding Skill、思维以及沟通表达都是超出平均值的。但是就是这么一群人,做出来的东西很多都没能取得成功,作为一个搞技术的,可以想象,做出来的东西没有被认可是一种怎么样的体验。另外,有人的地方就是江湖,哈哈。
我眼中的微软面试
来微软面试的SDE(据我所知包括SDE1、SDE2以及Senior SDE),面试官基本都只会问你数据结构算法相关的问题,其他的东西几乎不问或者不是Hire你的标准。虽然我理解这其中的原因,一般这种面试如果能过,基本说明这人靠谱。但是,从我微软两年的实际经验来看,招一些熟悉具体技术、业务的人进来或许更适合。我也参加过公司的一些面试,面试官的Feedback中只有以下几项:
1) Coding Skill. 大概就是让你在纸上写code,比如写一个链表反转,看看怎么样。至于拿什么语言写随意;
2) Data Structure & Algorithm. 问一些算法数据结构的题目,看你的答案;
3) OOP & Design Pattern. 问一些常见的OO和设计模式之类的问题;
4) Hire or No Hire. 要不要你?
可以看到,面试官的问题跟你申请的职位一点关系都没有,至少从面试官来看是这样的。之前有个Google拒绝Homebrew的作者的新闻,详细可以看这里作者本人的回答。 可以看到,算法、软件工程以及产品之间的不同。
关于离职
选择一个公司,我觉得应该全方位去考虑,不仅仅是能做的项目,其他比如待遇、文化、发展、福利以及自身条件限制等等。综合来看,我呆过的部门还是不错的,我之所以选择离开,完全出于自身原因。在北京的同学,如果有希望加入微软的,还是不错的选择。也非常感谢我来微软的第一任Manager,是他招我进来,在我离开的时候,又非常热心地托人给我在武汉介绍新的工作,哈哈。感谢微软,加入微软也是我学生时代的梦想。希望以上这些对想加入微软的同学有帮助。