做服务而不仅仅是开发软件

标签: DevOps 服务 | 发表时间:2015-02-25 13:24 | 作者:juvenxu
出处:http://www.juvenxu.com

今天读到一篇博客,标题为  DevOps – Not Good Enough,作者 MARTY ABBOTT 的观点大致为,DevOps 把开发、QA、运维等环节打通,解决或缓解了传统 IT 所遇到的很多问题,然而这还不够,我们需要认清最根本的两个问题。第一个问题是:传统企业的 IT 基础设施和架构是为了支持各种各样的第三方软件,其目的是节省成本而不是创新;第二个问题是:传统的软件开发和维护是分离的,开发软件更多的关注是把它卖了,而不太关心软件最终如何运行。

然而,今天行业发生了巨大的变化:

现在,客户购买服务而不是软件。要在这个全新的世界获得成功,就需要改变观点,即组成这些服务的原材料不仅包括软件,也包括硬件(基础设施)。如果你的团队没有合理地组合这些原材料,那么最终服务也不会如预期的那么好。如果继续“生产”软件,然后“托管”在基础设施上,那么最好的结果也仅仅是次优的解决方案,最差的结果则可能是一场灾难。

MARTY 又接着说,我们应该:

把团队组织成跨职能的、实用且多样的、自治的团队,各个团队拥有整个产品中独立的一些服务。各个团队和服务应该由集中面向业务的 KPI 驱动。这些团队应该能够独立自主地开发、部署、支持自己的服务,不需要依赖其他团队。

我们都知道,如果一件工作需要跨团队合作,工作效率会急剧下降,各种推责扯皮的事情就会冒出来,管理成本直线上升,需要富有经验的项目经理协调,需要指定共同的目标,需要开很多很多的会…… 在这种背景下,快速地应对市场变化、开发创新的产品就难免变得困难重重。为什么现在很多很小的互联网公司能那么快速地发展起来,我想一个很大的原因就是因为他们够快, 够“敏捷”,现在很多基础设施如代码托管、服务托管、应用程序监控都有了比较成熟的市场及服务(至少在国外),它们中有我们耳熟能详的 Github、Amazon EC2、New Relic 等等,在这些基础设施足够灵活、足够稳定的情况下,小型互联网公司能够专注自己产品和服务,技术人才也比较容易“跨职能”,设想在传统的大的 IT 公司内,一名开发人员要了解运维体系几乎是不太可能的事情,但现在如果是用 Amazon EC2,则只要学习一些简单的 API 即可,而且相关工具也更加简单。

市场上成熟的 IAAS/PAAS 帮开发人员简化了很多问题,也使得程序员关注 OPS 的门槛降低了。除此之外,敏捷运动在帮助开发团队跨职能方面也功不可没,尤其是,敏捷强调开发和测试角色的融合,事实上,现在优秀的开发人员都具备比较强的测试意识和测试技能,而像 Google 那样的公司,专职测试的研发能力较普通开发来说有过之而无不及(见 Google软件测试之道)。也正因为如此,如果一个团队的成员都比较优秀,再加上有比较出色的产品经理,那么拥有一支靠谱的跨职能团队也不是那么遥不可及的事情,他们能够每天直面用户,以小时为单位做出响应,因此在市场中有巨大的竞争优势。

对于一名普普通通的程序员(像我这样),应该如何面对这样的行业趋势?如何才能保持自己的竞争优势,不至于在40岁的时候被裁员、被淘汰?

首先是观念的转变,“程序员”或者“软件工程师”这样的头衔也许已经过时了,实际上我们应该是做服务的,这一点和开餐厅、开发廊没有本质的区别。唯有做到吸引更多的客户、让客户满意,才能保证组织的生存和壮大,也进而是我们自己的发展和壮大。怎样做才能吸引客户?才能让客户满意呢?那你得理解他,例如通过运维数据去理解;你得保证服务的质量,要保证可用性,保证功能正确;你得有创新,让客户眼前一亮。因此,你不仅要和机器打交道,你还要学会通过各种方法和客户打交道。

其二,在观念转变的基础上,有针对地拓展自己的技能。为什么要学习自动化测试?因为它能帮助我们提升软件质量,让客户满意;为什么要学习 DevOps 方法论和相关工具?因为它能让我们更快发布软件响应客户的需要;为什么要关注性能?因为客户是人,人的耐性是有限度的;为什么要关注可用性?因为客户是人,一般人如果遇到 Starbucks人满为患,它会去对面的 Costa 买拿铁的。

我无法想像20年后程序员后会用什么语言怎样开发软件,正如20年前也很少有人能想到今天移动互联网的如火如荼,也许届时程序员这个职业也会渐渐消失,但不论如何,我相信通过技术服务人的人性需求,这样的一个基本事实是不大可能发生变化的。

相关 [服务 开发 软件] 推荐:

做服务而不仅仅是开发软件

- - Juven Xu
今天读到一篇博客,标题为  DevOps – Not Good Enough,作者 MARTY ABBOTT 的观点大致为,DevOps 把开发、QA、运维等环节打通,解决或缓解了传统 IT 所遇到的很多问题,然而这还不够,我们需要认清最根本的两个问题. 第一个问题是:传统企业的 IT 基础设施和架构是为了支持各种各样的第三方软件,其目的是节省成本而不是创新;第二个问题是:传统的软件开发和维护是分离的,开发软件更多的关注是把它卖了,而不太关心软件最终如何运行.

服务端开发小感

- - 博客 - 伯乐在线
来源: 轩脉刃de刀光剑影. 从事服务端开发已经有一些日子了,静下来可以想想和记录些服务端开发的想法了. 服务端开发,特别是Web开发,基本上全是处理HTTP请求的处理. 根据具体用途分为两种:Web页面开发和API接口开发. Web页面开发也完全可以看成是API接口开发,只是它的两个主要部分,页面和ajax请求,一个是返回html,另外一个可以返回html,也可以返回其他格式的而已.

REST服务开发实战

- - 互联网 - ITeye博客
本文转自http://kb.cnblogs.com/page/91827/.   如果要说什么是REST的话,那最好先从Web(万维网)说起. 读者可以查看维基百科的词条( http://zh.wikipedia.org/zh-cn/Web),具体的我就不多说了. 总之,Web是我们在互联网上最常用的服务,甚至在某些人的心中,互联网就是Web.

软件吞噬软件开发

- - PingWest中文网
软件蚕食世界,自互联网特别是移动互联网连接线上线下服务后,已成为不可逆的趋势. 每一项实用的服务可以由小团队来完成. 以WhatsApp为例,这款被高调收购的IM应用,拥有4.5亿月活跃用户,70%的日活跃率,至今还保持每天新增用户1000万的速度. 但这些服务居然由32名工程师支撑下来了,所以有了业界八卦“每位员工价值20亿”的说法.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

开发软件有多贵

- - 透明思考
有个朋友的朋友想做一个公益的事. 因为出资的都是教育水平较高的精英人士,所以对项目的监控透明度要求比较高. 于是这个朋友的朋友就想了,信息时代嘛,IT工具不是可以促进交流提升效率么. 于是他对我说:我们想做个app,可以干这个这个这个……. 我打断他说,别着急,做软件很贵的,你不一定玩得起. 市场上定制开发软件的人工成本按一人月20,000人民币来算,平均每人天1,000人民币.

Windows 服务(附服务开发辅助工具)

- Bloger - 博客园-首页原创精华区
近来在 Windows 下摆弄了一阵子的服务程序,有在 C++ 下弄服务的,也在 C# 下弄服务的,. 感觉在 C# 下弄服务蛮简单的の,C/C++ 的麻烦蛮多の(当然我的服务所要求的功能也是很简单的,就启动个进程),. 只不过服务在安装啊、调试啊、卸载啊上面麻烦的要死,弄得我烦躁起来了,. 而且对于服务的安装和卸载中间还有一个小插曲的,.

Zend 推出开发者云服务 PHPCloud

- ZeeJee - cnBeta.COM
Zend联合RightScale 推出 phpcloud.com,为开发者提供基于云的PHP开发与部署服务. phpcloud.com 的服务集成了RightScale的云管理平台和Zend Server,提供可扩展的PHP部署服务. 其核心是部署在云端的Zend Server. 此举是Zend带领PHP进军PaaS(Platform-as-a-Service)市场的一部分.

利用JAX-WS开发Web服务

- - CSDN博客推荐文章
利用JAX-WS开发Web服务.        Web服务是一种经由HTTP与其他软件进行通信的软件. Java最激动人心的一个特性是用于XML Web服务的Java API(JAX-WS). JAX-WS是一组Java类和包,他可以创建对Web服务发出请求的客户端,以及接受这些请求的服务.        JAX-WS支持使用简单对象访问协议(SimpleObject Access Protocol,SOAP)和表述性状态转移(Representational State Transfer,REST)实现的Web服务.

thrift总结 - 跨语言服务开发

- - 企业架构 - ITeye博客
IBM-Apache Thrift - 可伸缩的跨语言服务开发框架. Thrift入门及Java实例演示. Thrift是一个软件框架,用来进行 可扩展且跨语言的服务的开发. thrift允许你定义一个简单的定义文件中的数据类型和服务接口. 以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言.