技术选型
每款软件都有不同的技术可以实现它,尤其是比较常见的如app等。
一般来说,新出现的技术会更简单、理论上开发效率会更高,但也更不稳定、相关的资源更少、使用的人员也越少。虽然我们鼓励技术人员去了解试用新的技术,但并不鼓励创业公司在自己的产品上面使用它们。原因很简单,第一是团队组建成本会比较高,第二是遇到坑很难跳过去,会影响开发进度。所以一般的互联网公司都会先用LA/NMP/J框架来进行开发。
职位设定
确定公司的技术之后,就是团队职位设定。
从项目规模、交付时间等因素考虑,从而确定人员职位与人数。
先要确定每个岗位的特点,然后根据岗位特定要求,确定人员需要的技能与品质。
例如本人当前公司产品为移动应用,只有一条产品线;确定使用LNMJ框架来进行开发,并使用前后端分离。所以需要招聘的岗位有产品经理、UI、android开发、iOS开发、Java、Web端和测试。
工作流程
不同流程的使用对人员也有不同的要求。现在大部分的公司都走敏捷流程,但形式可能有所不同,效果也相差甚远。敏捷流程对团队的要求精而高,在一个小团队里,每个领域都需要有专家,所以如果公司有多个敏捷团队,理论上对应的就应该有多个专家。而传统的团队中可能只有一个专家带队。
岗位要求
技术团队中,有一些共通的特质必须的,同时每个岗位都有特定的要求。
我们的团队中,乐观与进取是必要的,没有这两点的人员技术再好也不在考虑范围之内。除此之外,每个岗位都有自己的特点。
当然还会有一些别的方面的考量,比如抗压能力、忠诚度、处理问题的能力等。
产品经理
在以运营或者产品为核心的公司,产品经理是一个非常重要的角色,他负责将老板提出的方案转化为开发需求。在部分初创型公司,老板只确定大致方向,这就需要CTO及产品经理来将方向转化为可执行的方案再转化为开发需求,这就要求产品经理要从运营、商务等各方面全面考虑问题。因此,面试时产品经理考核的点,除了正常的产品经理技能外,还需要考核候选人的思维是否活跃、考虑问题是否全面、条理是否清晰、对运营、商务是否有一定的了解等。
考核方法有很多,我们最常用的方法就是将目前产品遇到过的问题拿出来与候选人讨论。这个方法有几个好处:1. 能看出候选人事先是否对公司产品有过了解,从而判断其对该职位的重视程度;2. 因为是遇到过的问题,所以能快速判断出候选人的答案是否合适,思考问题是否抓住关键点;3.也能开拓自己的视野,从不同的人的角度看问题,面试也是一种学习。
UI\UE
因为本人为技术出身,对UI\UE的了解并不全面,所以个职位的面试交给了产品经理。
研发岗位
研发岗位的要求有一些共通之处。
首先,基础要比较扎实,要在一定程度上掌握操作系统、网络、数据结构等方面的知识。对基础的考察并不是矫情,有的人认为小公司的程序员只要能按时将功能实现就好,个人认为这是不负责任的观点。一个没有扎实基础的程序员,对各种框架、工具都是知其然不知其所以然,写出来的程序更多的就是各种框架的拼凑,肯定存在各种问题。在特定环境下,问题暴露,可能修正的成本比开发的成本都要高。基础不实也间接的说明候选人对系统知识的学习能力不强,对自身能力提升的意愿不强。
其次,学习能力要比较强,公司快速发展阶段,员工如果要适应公司的快速发展,就要不断学习。
基础的考核比较简单,每个面试候选人都会要求完成一套基础笔试题,半个小时左右。学习能力的考核主要在面谈环节,出一些候选人不是特别熟悉的题,给出提示看候选人是否能学会其中的解题思路等,同时也可以考察一下候选人当前正在自学的内容。
java
后台开发除了需要实现功能之外,更多的需要关注高并发、高可用、安全性、可扩展等非功能性需求,所以后台人员对网络、并发、分布式、数据库等技能有更高的要求。而上层的架构如微服务目前都有比较成熟的框架,也是必须要掌握的。
移动端
移动端原生应用现在使用的比较多的依然是各自官方的技术,iOS使用OC与swift,android使用java加android SDK,像RN等技术还不够成熟。所以,面试时,需要考核候选人对各自使用的设备及操作系统的了解程度,对其运行原理及相应的技术框架都要有所了解。
web端
web端工作其实很多,也是发展趋势,除了PC端的工作外,web app、小程序等需要web端来完成,但使用的技术栈基本相同,所以对该岗位的要求除了对浏览器运行原理、网络有一定的要求外,也要求他对各种前端库有熟练的掌握。
测试
个人测试是一个极其重要的角色,不过最近有公司在尝试去掉这个角色,让开发来自己担当,这中间的利弊在此就不讨论了。测试的主要工作就是发现BUG,需要其具有一定的破坏思维,并且思维要全面,细心,最好能从不同的角度思考问题。所以除了测试的基础之外,这也是我们考核的重点。考核方法主要是从候选人过往的项目入手,或者个假设一个简单的项目,让候选人进行测试等。
要记住的一点是,永远没有最好的员工,只有最适合当前岗位的。