移动互联网发展迅速,现在已经在改变部分传统行业的模式,未来几年仍将不断改变和颠覆世界。ios开发是在属于移动互联网中软件开发中的一个分支,另外还主要包括安卓开发和windows iPhone开发。下面从日常研发的工作内容,和团队不同岗位横向纵向对比以及职业发展阶段分析三个角度说明大公司app研发的工作。

1、日常研发工作内容

      工作主要包括沟通、研发和修复bug三个内容。

      先说研发方面。我在团队是一个典型的大公司移动app团队,约有40人,分为后台开发团队、安卓开发团队、ios开发团队、产品设计团队、测试团队以及运维团队。app互联网产品开发采用敏捷迭×××发模式,简单的说一个版本要在一个月或者几周完成新版本功能需求确定,设计界面输出、功能研发完成、测试质量完成、产品上线这样一个周期,这个周期叫一个迭代。日常工作需要根据产品定义的功能点,比如评论功能。产品会定义如何评论怎样评论体验会让用户更好,最后落地一个设计,设计完成设计图和产品定义的交互(就是界面和用户怎么操作),开发在ios上的代码实现。自然是使用各种工具和编程环境来编程,类似使用CAD画图。直观一些如, xcode 工作环境。

      网上有些对程序员的负面词汇,例如天天机械敲代码。说这种的一搬都是在初级层次。为什么mac 系统ios系统好用,这些背后就是代码,这些代码(有些可以成为艺术)和简单写程序天壤之别。目前写的代码还不是艺术,但一个好的应用背后总会有一个编程高手写的优秀的代码,自然是要成为这样的人(李彦宏、马化腾、乔布斯、比尔盖茨以前都是写代码出身,他们的代码基本是高手级别,写unix系统的才是艺术级别)。


     沟通方面:在写ios代码不是单独一个独立完成,需要和后台团队商议数据传递格式和内容(例如看的app的内容标题,原来都是用计算机识别模式定义,前端程序给用户展示成人类识别模式),和设计沟通具体设计,例如这个图标和那个图标距离多少,字体用什么,用什么颜色,这个链接按下去有什么效果;和产品沟通,为什么怎么设计产品,有些功能实现非常困难,和开发同样功能的安卓团队沟通,如果两个平台交互和产品感觉实现后体验一致;在测试阶段和测试成员沟通bug的场景(程序出现的问题,例如用户体验到的错误,app闪退,具体的如发评论失败等等),

     修复bug,根据测试提出的问题然后修改bug,改代码,然后让产品、设计和测试重新验证。

2、团队不同岗位对比

    从上一节就可以很清楚发现岗位不同的对比。

    下面详细说下横向对比。

         和产品经理对比,产品定需求研发用代码实现。另外产品需要和项目负责人沟通想法,跟进研发代码输出进度,设计进度,后台数据接口进度,类似导演,也有项目经理责任。互联网敏捷迭代产品经理完全替代了项目经理,这是和传统软件开发的不同。传统软件开发会有项目经理来做一些进度跟进和监督,这些在移动互联网模式下又产品经理和团队老大负责。

       和设计区别,显而易见,差别是他根据产品输出设计图,我输出代码。

       和后台研发区别,后台研发是服务器端编程,客户端编程主要负责用户能看到的,他们负责后端处理,理解成云端也行。

       和安卓研发区别,其实实现功能是一样的,不过平台不一样,编程语言用的不一样。例如修车,修国产用国产件,修国外用国外件。基本原理一致,但是使用零件平台不同。

      和领导区别,领导需要管理这几个团队,一般研发和大领导沟通比较少,大领导和产品沟通最多,和技术方面主要和技术负责人沟通。

   下面纵向对比

     一个高级开发等于30个中级开发,一个中级开发等于30个初级开发。就是开发能力是指数级别的差别,一个高手完成一个用户看起来很小的核心功能,可能100个刚学会开发的都不能完成。类似于用多少个画家能画出一个原创的蒙娜丽莎那一样。这样一个高级研发对企业和团队的意义就体现出来了。一个大公司需要众多高手,因为产品众多,需要估计的方面也多。例如安全领域,任何大企业有巨大利润的都会有人盯上,世界的互联网对用户就像大海对沙滩上的人,用户仅仅用大海,而我们是在大海中和暗流生存。任何互联网企业没有一个好的技术都做不成来,下面详细说下一般程序员和程序组长、组中高级开发的区别。

    技术组长有些架构方面的工作,比如技术选型,产品技术路线发展,也有研发问题,核心研发问题的解决,和管理工作如任务分配和绩效考核。一般成员和组长差n年的开发经验,计算机知识储备,对技术发展方向的理解等都有巨大差距。这就是为什么一般程序员很多时间用在看技术,技术路线上技术一般没有出路。

     和高级研发差别,做的任务不同,高级研发因为经验丰富所以做一些更困难更难的任务,自然这种任务对app对组和企业价值更大。

     虽然和高手有经验差距,但是和高手在同一个组解决同样问题就可以学习到思考逻辑,技术逻辑和解决未知技术的方式和手段。学到这些加上时间技术积累就可以达到他们的高度。对于技术负责人(我们组长)大公司一个小团队一般1个以上,小公司就需要一个,技术负责人的高度将决定产品技术的最终高度,例如学生时代写一个qq可能支持几百几千人,腾讯cto指导带领下的qq可以支持上亿人,这是技术差别带来的对企业的影响。 高级研发在工资上也许就差几倍,但是一般高级研发会有公司股票,技术创始人自然股票更多。例如一个在腾讯做了10年的非创世人技术研发,在合理保有股票的情况下,资产几千万都是常见的。或者有在阿里巴巴做了5年左右有个小几百美金股票也是普遍的。这就是技术价值。


3、职业阶段分析

    那如何能拿到股票呢? 而且工资高呢? 

    回到上面问题,第一点,技术好,至少到高级工程师,这样要么在大公司做领导路线,要么去小公司做负责人或者技术合伙人。

    一般的初中级技术水平,到高级技术需要一定时间(这是为什么一般程序员天天多看技术,做技术路线没有技术水平,就是入场券都没有),有了入场券,考虑上面的方向选择。最后是一个有前景的中小企业。一起成长最后有股权收益。或者自己创业。然后从创业者到投资人。第一步技术成为高手,这样需要脚踏实地努力,多写多学。多写就是写更多代码,更多项目积累经验。多学一方面是看书,看别人写的代码,另一方面要总结分享,例如写一个技术blog。在成为高手的路上,其他的能力也在积累,写的好代码也会在业界有些名气,有一些名气自然是有人找你做东西,要么就是自己做。

    为了实现上面的目标,新人现在需要更多的项目经验和知识积累。