开发在做什么?

开发者

之前经常有同事、朋友或者家人在问我一些类似的问题:

1、”你们在做些什么?”

2、“你们做的东西我们不懂”

对于外行人来说,不了解开发是完全正常的,毕竟开发是一个相对比较专业的职位。
对于互联网公司其它职位人员,例如产品、设计,不了解开发在做什么是不正常的。
尤其是对于创业公司,说明是流程上出了点什么问题。

  • 问题产生的原因

原因是双方面的,提问者与被问者都有问题。

提问者的问题:

1、不懂技术,这里指的技术不是指具体的系统架构或者编码执行工作,也不涉及到具体的语言或者工具细节。应该说是“技术常识”,比如说基本的技术可行性空间及产品开发流程。技术常识的获取其实是很容易的。多看看36氪之类的科技类博客,并且不绕过其中的技术概念;与技术人员的日常沟通;合理的利用搜索引擎。都会让你看起来更懂一点技术。

关于这一点有个笑话挺有意思的:在一个互联网公司里,产品、设计、运营人员认为工程师是无所不能的。在工程师中,女工程师认为男工程师是无所不能的。在男工程师中,普通工程师认为高级工程师是无所不能的。剩下那个高级工程师,每天在谷歌上绞尽脑汁地搜索各种问题。

有的时候别人懂得更多,就是更会用一点搜索引擎而已。

2、缺乏完整的项目经验。不懂技术是问题2产生的原因,而缺乏项目经验则是问题1产生的原因。在一个项目完成之后,有的人可以掌握整个项目流程,有的人还是局限于自己的那点点工作。这倒没有什么好坏之分,但是在创业公司,有一定的项目管理知识,能向自己的领域周围伸出一些触角,会大大提高项目流畅度与质量。

被问者的问题:

开发者应该更多地分享专业领域内的知识,毕竟这对于大部分人来说,是一个神秘的领域。这也是我写这篇文章的原因。“你都没说过,我怎么会懂呢?”。

那么,回到正题,开发者究竟在做什么,或者应该做些什么呢?

  • 从技术部职位划分上来看

通常在大公司技术职位有:前端工程师、iOS工程师、Android工程师、运维工程师、测试工程师、后台工程师。
运维这一块又可以划分为SCM(配置管理)、SQA(软件质量保证)、DBA(数据库管理)、服务器管理、安全管理。
后台工程师按语言划分:Java工程师、C/C++工程师、Python工程师、Ruby工程师等。
后台工程师按职能划分:程序员、架构师、项目经理、算法工程师。

当然,在大公司跟创业公司完全不一样,可以说是两个世界。大公司像是一台机器,每个人是一个零件,只需要专注于自己的那一小块领域。而创业公司要求每个人都是多面手,一个人可以解决所有问题。

但是这对开发人员只是在“写代码”这个言论有所澄清。

  • 从产品开发流程的演变来看

刚开始的时候,互联网产品开发并没有那么细致的分工,基本就是一个或者几个人凑在一起,大家既懂技术又懂产品,不懂的一起做做也都懂了。
也没有那么多换个壳到处都可以用的思想与方法论。大家一起研究用户需求,搭建产品概念,画UI,写代码。这是非常高效的一种工作方式。

后来逐渐划分为产品、开发这两个职位。一部分的产品开发人员脱离技术,去做一些产品需求相关的工作。

后来苹果强势崛起,产品开发流程中加入了“设计”这一环节,强调用户体验。

无论产品、设计、开发,都是产品整体开发流程中非常重要的环节。

这里我所疑惑的,是做这些事情的人而已。一些老的互联网从业人员,经历了这些流程变更,视角非常全面,能力也非常全面。
而现在新入行的年轻人,有的一出来就当产品经理,不懂技术也不懂设计。有的一出来就当工程师,只会写写代码。有的一出来就当设计师,只会在界面上思考问题。

流程上的细化让新入行的人视角变得狭窄,事实上的合作效率也变得更低。有的时候还会造成团队间的对立。

这时候正确的做事方式应该是:

1、明确自己所做事情的价值。
2、在产品开发流程中积极地与其它人沟通,获取一些沟通需要的知识。
3、对未知的事物保持敬畏,不要人云亦云,尊重与理解他人所做事情的价值。

在一次次的产品开发流程中,一个人应该变得视角更加全面,善于沟通,懂得从全局思考问题。

这里我所强调的是技术人员需要懂产品、懂用户体验。
产品最后从你手上诞生,如果你的所做仅限于实现,而不是思考如何将它变得更美好,那这必将是一件毫无灵气的作品。

  • 从开发者的日常工作来说

1、产品开发工作,这是最具体的一部分。包括技术可行性研究、技术方案研究、架构设计、编码开发、测试。
2、产品运维工作,包括产品上线发布、服务器搭建与维护、代码维护、数据库维护、查看log、查看用户反馈、Bug fix等。
3、技术积累,技术不是一朝一夕的事情。一个互联网公司要想基业长青,技术的积累是非常重要的,它让一家公司有足够的底蕴。这也是Google、Amazon这样的公司与其它IT公司的重要区别。
4、新产品、新技术的跟进与研究。这个应该是所有人都需要做的。对于一个开发来说,我相信大部分人不会满足于去实现一个功能或者产品。每一个开发首先是一个独立开发者,能够完成从用户研究、需求分析、产品设计、系统架构、编程开发、上线运营的整个流程。在其它环节有可以信任的人担任的条件下,可以专注于系统架构/编程开发环节,但是对产品本身的质量依然需要把控。
5、多接触生活,多体验世界的美,产品的美。也省的别人老说咱们是左脑思维者,不够文艺。举两个网站作为例子:
最美应用:http://brixd.com/nice
体验之美:http://blog.zuimeia.com

  • 为什么像淘宝这样的网站需要几千工程师开发与维护?

这也是很多人的疑惑,理论上只是做个网站,一个人就可以搞定了。
这里直接链接一个知乎的答案:http://www.zhihu.com/question/20303645