• Feeds

  • 谈技术人员“转正”

    经常面临技术人员转正review,一个新员工在一个新的环境工作3~6个月,会面临一个转正的过程,员工本身可能也有些忐忑,如何判断自己是否满足组织的要求?从管理者角度来看,更多是衡量员工的绩效,是否得到了成长以及是否符合团队文化等,本文谈相关几个观点。

    发展计划

    很多组织在以业务目标为导向的同时,缺少对员工的发展计划的关注,尤其对试用期员工的期望及发展计划更不明确,在业界虽然存在一种技术岗位的通用价值观,比如“工作积极主动”,“不断提升技术能力”,“具备良好沟通协调能力”等等,但对应到具体的环境后对每个岗位的要求未必非常清晰。

    大部分情况下管理者由于自身繁忙,对员工的规划可能只停留在有事情做,或者达到了任务分解的目标。除非员工主动找到管理者,否则管理者不会拿出时间来提供发展指导。

    Review

    一个良好的团队,在转正过程中需要有一个正式的沟通环节,管理者与员工一起来review发展计划与实际表现,对于优秀需要适当的激励,并用合适的方式来分析不足的地方。并重新讨论转正后的新的发展计划。

    如果缺少review,优秀员工可能会感到缺少肯定及重视;而绩效差的员工则会对成绩自视过高。

    衡量标准

    转正过程中比较常用的做法是根据员工所完成的工作情况来做出一个综合评分,最终来决定试用的结果。比如第一个月“完成了文件上传”,第二个月“完成了通知功能”…… 我不太赞成这种衡量方式,它只能判断某个任务是否按交付日期完成,管理者和员工无法根据这个目标来判断工作的好坏。因此我更倾向于用通用的角度去衡量员工的工作,比如设计能力,交付能力,团队贡献等,有关工程师目标设定可参看拙作 技术工程师的能力与目标

    管理者对于新人正确的态度?

    你不可能培养他们,他们是自己培养自己,而你仅仅相当于一个首席园艺师。你要了解周围的各种微气候,并了解那些要移植到这些微气候环境中的植物的特点……我一直对体育界优秀教练的工作方式很感兴趣,如果观察一下优秀的运动教练,就会发现实际上他们并不常教授技巧,而是传授思想。

    Lord Sharman, chairman of Aegis

    微信架构的启示

    腾讯大讲堂中最近分享了周颢演讲的微信技术总监解读微信架构的秘密,看完视频的一些心得。

    技术微创新

    微信的技术设计上有很多微创新,看起来都很小,但是对于系统的稳定性、用户体验及开发敏捷都具有重要作用。

    前轻后重
    由于客户端升级不便,从技术设计上尽量利用后端的设计来减少依赖客户端升级的方法。如某个版本新增了群聊功能,按常规思路,需要所有客户端升级才能全部打通。微信采用服务器兼容的方法,在老客户端不升级情况下让其增加群聊的功能,通过在服务端将群聊协议转换成之前旧版兼容的协议返回给老的客户端。

    客户端辅助设计
    微信客户端做了很多非常规的功能,比如常规的客户端测速方法是登录阶段轮询测试多个IP来选择服务器,这样会带来流量及登录速度双方面的开销,因此微信选择的方法是服务端返回最佳的IP(可能是通过历史数据分析)。客户端另外实现了一些容灾能力的配合,当一个IDC访问出现异常自动选择另外一个IDC。

    流量控制
    由于大部分无线用户对流量非常敏感,为了防止由于客户端不可预知的bug如死循环导致“偷流量”,服务端增加用户流量实时分析的方法,可以在海量数据下找出流量异常的用户,并给这些用户强制下行终止连接信号。

    基础研发的策略

    从视频介绍来看,微信的基础研发与业务结合非常紧密,提到的有基础组件比如Client/Server框架,从原理上看类似Twitter Finagle,框架封装了大容量网络通讯及远程调用所需各种功能。此外介绍的一些监控与统计框架也较为先进,可以随时增加监控指标。

    大量可复用的基础组件让业务开发非常敏捷,周颢总结的基础研发策略是“实现已有经验的固化”。这和其他一些公司中的基础研发团队思路有所区别。业界中基础研发脱离生产闭门造车的情况并不罕见,一方面业务部门重复低层次开发现象严重,另外一方面基础研发对业务理解欠缺,开发的组件模块与业务结合不紧密,无法被有效利用。因此类似微信这样增强业务团队的力量,在开发业务同时总结抽象更多的基础组件或许是一种更为实用的发展思路。

    腾讯海量课程

    视频中多次提到腾讯内部的一种海量模型的培训课程,其中的经验或设计模式包括
    大系统小做
    将一个复杂的大系统分解成多个独立的、小的、简单的任务去完成,“分而治之”。

    柔性可用
    服务端系统通常不是0与1之间的选择,可以在极端情况下做一定优雅降级,在服务端代码中需要体现这些设计。

    Set模型
    类似最近讨论的cell架构,按一个服务按用户范围分成不同的小单元,每个小单元(cell/set)具备全部业务服务能力,当一个set发生故障时候,只会影响这一小部分用户。微信架构中所做的补充是,在set之间增加了容错处理,当一个set发生故障时,使用类似一致性哈希的算法,调用方可以自动切换到下一个set来存储,并且将新的位置记录在index上(类似GFS master),周颢自称是一个简化版的GFS。

    微信的协议

    里面提到了XMPP和类Sync的自定义协议,里面提到XMPP的缺点是流量大和消息不可靠。但是流量大并非XMPP主要矛盾,可以很简单将其映射成二进制协议。消息ACK也可以添加简单的扩展协议来实现。较繁琐的还是兼容CMWAP网关的设计。

    使用XMPP或者简化的XMPP标准协议有很多好处,类似的场景有业界广泛使用的open api基本都使用HTTP及JSON,并不是由于这两种协议优化或高效,而是其简洁并得到广泛的认知。一种标准协议的认知及扩展成本要比一个自定义协议小得多,XMPP流量大的问题可以通过转换协议来实现,比如用binary 1代表login等全部协商协议,2代表message,消息增量获取也可以通过自定义扩展协议来实现。标准协议可以让团队内部及新人的认知成本降低,每一个参与者都很容易想到代码及架构改进建议。而且微信目前也在构建开放平台,自定义协议在开放方面必然具备一些局限。

    其他

    分布式理论
    从微信的分享也看到,指导业界不同背景的团队(不管大小)的分布式理论主要还是Google及Amazon系列论文,对互联网技术的发展具有深远影响。微信借鉴了Quorum及Merkle tree的理论,创造了一种自定义的做法,用于实现一种分布式递增发生器。
    不过分布式递增算法其实有更简单的实现方法,twitter也有相关的公开博文,由于视频相关背景介绍比较简短,可能大家解决的需求具有差异,就不展开了。

    监控
    数千的监控项,可以在分钟发现系统的异常

    敏捷
    每天20个后台变更

    技术传承
    从视频和PPT来看,微信的技术体系是从头搭建的,可能有不少利用qqmail时代的基础代码,但与深圳团队并不存在太大技术沿袭或者传承关系。从另外一个角度也看到微信技术团队的战斗力。

    新人力量
    一位毕业生的创意:按SET分布,全量数据从2G减到200K(具体的情况待了解)
    另外一个新特性,漂流瓶及摇一摇,据说也是2个月的本科毕业生一周完成,而且上线后运行稳定。

    存储

    上图中可扩展设计中字段配置表的做法感觉略显繁琐,目前大部分NoSQL产品的schema free方式可能更易于维护。

    产品驱动

    如图,其中“允许发布十分钟前的变更”这样做法通常在大型团队通常会引起广泛质疑,单纯学习这种形式并非正解,如何在互联网产品上实现敏捷值得产品和研发进一步思考。

    MacBook Air与工作效率

    从MacBook Pro转向MacBook Air已经数月了,谈下使用Air之后带来的便利与效率提升。

    便利

    虽然进入云计算时代,由于国内网络环境原因,访问国外一些知名云提供商并不稳定。因此在相当长一段时间内,国内用户依然非常依赖本地存储,使用轻便笔记本是一个最佳的选择。随时随地使用同一个工作环境后,可以极大改善个人效率及体验,以下是使用Air之后带来的一些日常便利。

    • 浏览器标签页打开的未读完文章可以在其他环境继续阅读,这个对于工作环境中时间经常碎片化的人员非常有利。未看完的文章不需要收藏到类似“Read Later”的工具中,而且ReadLater之类的工具更大的障碍是,一个页面在粗读完之前,无法判断是否需要收藏。
    • 由于是SSD,启动程序及打开文档速度非常快,几乎不需要等待。
    • 由于Air很轻,特别是11英寸也非常小,可以用方便随身携带,不需要为“今天是否要带走”思考。
    • 可以坐在床上、沙发、公园、咖啡厅或者其他随意的地方编写代码或者文档,不会感觉压腿、发烫或者沉重。
    • 使用Air可以忽略开关机的问题,可以象使用iPad一样打开即可使用,用完之后盖上自动sleep。几个月未重启过的情况在MacBook系列中很常见,由于Air在sleep时候,不存在传统硬盘碰撞风险,因此相对而言是非常安全的。
    • 办公台式机与移动的结合。使用一个蓝牙键盘与鼠标,接上外接显示器,MBA无需打开,变成了一个真正的台式电脑,下班时,拔掉显示器,又变成移动设备带走

    性能

    大部分工作如上网浏览、编程开发、编辑文档、常用办公软件都非常流畅。但是有几个补充的问题

    • 内存占用。在同时打开Safari多个页面(尤其是含有Flash的页面)后,4G内存通常会用完,在Activity Monitor里面可以看到Swap used占用大小,但是由于SSD存储的缘故,对实际使用影响并不大,传统硬盘中出现内存Swap时,切换程序的顿卡现象在Air上基本不存在。
    • 发热现象。由于Flash占用CPU及内存较大,在访问Flash密集页面时会出现风扇声音变大情况(未证实是否普遍现象),需要经常在线浏览Flash视频的可能不太适合Air,但是所有Mac系统都有此Flash性能问题。播放其他视频格式(如本地rm, mkv等格式)不会出现CPU过高现象。

    其他问题

    • 配套设施。MacBook Air可以当做唯一的电脑使用,无需额外购买“更强大”的台式机。考虑到大部分笔记本电脑键盘及屏幕并不符合人体工学,在办公室使用及家中购买外置显示器如(DELL UltraSharp)及蓝牙鼠标及键盘,很方便就将MBA转换成一个工作台式机,同时也会带来体验及工作效率的提升。
    • 键盘。键盘的缺点是第一行功能键较小,受影响的是经常使用的ESC键,可能会稍有不便。
    • 电源。MacBook Pro的L型电源可以直接用于Air(反之则不行),不会存在“电流过大”的情况,可以参看官方说明。基于 Intel 的 Apple 便携式电脑:识别正确的电源适配器和电源线

    基于 Intel 的 Apple 便携式电脑的电源适配器有 45W、60W 和 85W 三种功率规格。尽管一般应使用适于 Apple 便携式电脑功率的适配器,但仍可以使用更高功率的适配器,而不会出现问题。

    例如,如果您具有通常使用 60W 适配器的 MacBook(13 英寸,2009 年末),则也可以将 85W 适配器用于该电脑。不可将 45W 适配器用于该电脑;它无法为该 MacBook 提供足够的电力。注:使用功率比电脑所附适配器高的适配器不会加快电脑的充电速度,运行方式也不会异于使用电脑附带的适配器。

    11还是13英寸

    对比11与13英寸MacBook Air,由于11英寸的键盘宽度和13英寸基本没有区别(13英寸增加的是屏幕高度),日常输入并不存在局促之感。13英寸主要优势在屏幕尺寸,如果在工作环境用外置显示器,则11英寸并不会带来显示的不便,却会带来移动方面质的飞跃。

    实际13英寸真正的优势是有大一倍的SSD容量,因此需要在存储容量及便携性方面做取舍。由于便携性带来的个人效率的收益,因此建议用11英寸,不常用的文件如视频、照片可以备份到外置存储上。

    案例

    有一些误解认为MacBook Air不适合工程师,下面分享几个技术明星使用Air的案例。


    据说Linus Torvalds从2005年开始使用Mac作为主要工作机器,最近也转向轻薄的MacBook Air,以下是Linus在Google+上的一段话 https://plus.google.com/102150693225130002912/posts/1vyfmNCYpi5

    I need to find a new distro that actually works on the Macbook Air…

    另外一个案例是Redis作者antirez的一篇文章Why the MBA 11 is now my sole computer

    When Apple released the first version of the 11″ Macbook Air (Late 2010) I purchased one within the first week of the announcement, and my computing experience changed.