精华内容
下载资源
问答
  • 第一份工作重要

    千次阅读 2018-11-27 13:41:57
    秋招刚刚结束,年末时分,正是忙碌的时候。 一些手握多份offer的小伙伴开始了艰难地抉择,或者已经开始了实习;...第一份工作重要,人生很长,未来可能还很多。 另一部分人则会认为第一份工作非常重要,决...

    秋招刚刚结束,年末时分,正是忙碌的时候。

    一些手握多份offer的小伙伴开始了艰难地抉择,或者已经开始了实习;

    而秋招时分兵败滑铁卢的小伙伴们也开始更努力地看书,准备来年春招。

    在这个春秋招间隙时候总免不了会讨论一个问题,第一份工作重不重要。

    对此的观点往往两极分化。

    一部分人会觉得先就业,再择业。第一份工作不重要,人生很长,未来可能性还很多。

    另一部分人则会认为第一份工作非常重要,决定了你的人生。

     

    对此,我认为人生是一场马拉松,是一个不断积累的过程,因此每一段都是很关键的。

    而在这场马拉松中,有几个节点是尤其关键的,基本上就决定了人生的轨迹,

    其中,有一个节点就是,你的第一份工作。

     

    第一份工作的社会意义

    当我们进行第一份工作时候,也意味着我们社会角色的一次转换,

    意味着我们走出了象牙塔,从学生变成了一个社会人。

    虽然现在在大学里很多小伙伴就已经开始进行实习或者做兼职,甚至能通过做这些事情养活自己,

    但真正走向社会后的感觉还是和实习、兼职不一样,

    学生时代做实习、兼职对自己人生来说是一件锦上添花的事情,而踏入社会后的工作则是破釜沉舟,你必须得做好。

     

    通过工作以后我们能换取酬劳养活自己,这也是我们立足社会的根本。

    对于家庭来说,孩子工作了,也意味着孩子和父母的角色开始有了一种转变,

    由父母抚养孩子开始渐渐转变为孩子赡养父母,

    工作后我们身上的责任将会越来越重,将需要承担起更多的担子。

     

    这些都是我们第一份工作所带来的社会意义。

     

    关于第一份工作的酬劳

    对于第一份工作我们总能听到一句话:对于第一份工作,不要太在乎工资。

    这句话对么?

    这句话确实没错,但是很多时候它被用到了错误的地方。

     

    比如一家初创公司,给你10K月薪,然后描绘公司的宏观远景,许诺未来上市后给你股份;

    另一家是互联网巨头,给你14K月薪,你会选择哪个公司呢?

    如果问我,毫无疑问我会选择第二家公司。

     

    对于第一份工作,确实不要太在乎工资,这句话的重点在“太”字上,

    工资肯定还是很在乎的,根据薪酬网还做的统计分析:

    “如果你懂得争取更高的起薪,那么在你的整个职业生涯中,你将会比其他人多赚一百万。”

     

    另一方面来说,第一份工作中比薪资更重要的,或许就是个人喜好、工作平台以及你能从工作中是否能成长。

    而现在往往越大的公司,越大的平台能给你提供更高的薪资,而且你也能学到更多的东西。

    并且对公司来说你的薪资不可能超出你创造的价值,所以往往薪资越高,意味着你做的事情越有价值。

    公司里老板也许会对所有人说:“我很看好你,希望你能在公司里大展宏图。”

    但老板不会给所有人高薪,往往高薪意味着此人对公司价值更高,公司也更看重此人。

    因此对于第一份工作,我的建议是选择符合个人职业规划内的薪资最高的那份工作。

     

    而对于其他的,比如许诺未来上市后的股份或者期权,

    绝大多数我认为都可以理解为画大饼,给空头支票。

    首先是在现在的环境,一个初创公司要做到上市会多么不容易,

    其次即使公司上市,真的和你会有很大关系么?

    你不是股东,公司又没有明确的员工持股计划,仅仅口头一句话,

    或许也只有刚毕业的学生才会被这样忽悠吧。

     

    工作观

    工作观是我近来特别思考的一个问题,工作观指的是个人对待工作的态度和看法。

    我们都知道对待工作需要认真负责,需要努力完成自己的工作。

    但是对待工作怎样的程度是认真,怎样才是努力,这点上每个人的看法都不一样。

    比如对于加班的态度,比如对于出差的看法,比如下班时间对于工作的态度等。

     

    刚毕业进入社会的孩子,绝大多数对于工作的概念是比较模糊的。

    此时他们接触到的环境,接触到的人对他们的影响将会很大。

    以程序员为例,在互联网巨头和一些小公司工作将会完全不一样,

    大到整个工作的流程,小到代码的规范,点点滴滴都会给自己带来潜移默化的影响。

    所以现在很多公司都愿意招有BAT工作背景的人,

    因为这些人往往会提交更规范的成果,写出更高质量的代码。

     

    曾经火爆一时的一篇文章《离开华为三年,我才真正认同狼性文化》里,作者焱公子讲了这样一个故事:

    他的公司创业第一年,业务量小,多数员工都比较清闲。

    每天优哉游哉,17点半就按时下班,只留下他在公司加班。

    半年后他意识到问题,于是制定了绩效考核,结果当月就有三个员工离开。

    其中一名员工时不时发朋友圈骂他,说要求如何变态,如何对她苛刻。

    后来这名员工在几个月内陆续换了好几份工作,每次时间都不长,每次也都无一例外在朋友圈骂老板。大意都是,工作没法弄,老板很变态。

     

    很多刚毕业的大学生,或者尚未毕业的实习生。他们从没真正走上过社会,自然没有什么成熟的工作观。

    就像一张白纸,把自己在第一份工作里遇到的就当做是工作本来的样子。

    要养成一个习惯很容易,但要改变这个习惯很难。

    所以第一份工作,我认为对自己工作观的培养尤其重要,这点对自己的职业生涯影响也是非常巨大的。

     

    人脉

    在我们的整个职业生涯里,有两样东西是会随着时间不断积累的,

    一个是经验,另一个则是自己的人脉。

    人脉这个东西对于很多职业来说可以等价于你的价值,

    对于技术人员来说,人脉虽然不至于那么重要,但也绝对可以给你锦上添花,放大你的专业功力。

     

    雷军之所以能迅速吸引众多来自谷歌、微软、摩托罗拉、金山等公司的精英,联合创办小米科技,与他在金山16年积累的人脉不无关系。

    2011年8月,北京798,雷军携小米手机举办新闻发布会。

    现场播出了一个短片。

    乐淘网CEO毕胜、多玩网总裁李学凌、金山网络CEO傅盛等互联网风云人物齐聚一堂,一起摔掉手里的苹果手机,高呼:“我们要小米。”

    这是他们给雷军的礼物。

    他们都是雷军的老友、曾经或者未来的合作伙伴。

     

    当然人脉的积累是伴随自己整个职业生涯的,并不单指第一份工作。

    但在第一份工作里,我们可以进行自己一些最初始的人脉积累。

    比如工作中积累的第一个人脉就是你的直系上司,

    如果能在第一份工作里遇到一个好的直系上司是一件非常幸运的事情,

    你可以跟着他学到很多知识,无论是技术上的、交际上的或者管理上的,

    或许从某种程度上来说,你看到你的直系上司就能看到未来几年后的你。

    现在很多公司都推出“一对一”、“老人带新人”、“导师制”等,都是希望加强这方面的交流。

    所以如果遇到一个好的直系上司并与他有良好的关系对自己职业生涯来说都非常重要。

     

    另一点来说,我们也没必要过于刻意的去积累自己的人脉。

    一般情况下,我们所接触的人脉圈子都是和自己差不多层次的人,

    也就是说,做好了自己,自然而然就会接触到更多更厉害的人,否则也不可能真正融入别人的圈子中。

    所以对于第一份工作中,我们最重要的是做好自己的本职工作,

    在做好的自己的基础上才可能积累更多更好的人脉。

     

    平台和格局

    之前曾有见过一个讨论——平台成就人还是人成就平台。

    这个问题就跟问时势造英雄还是英雄改变历史一般,总会有不同的答案。

    但我觉得对于绝大多数人,尤其是刚毕业的孩子来说,一定平台成就我们,

    能在一个更大的平台工作,就如站在巨人的肩膀上,你的视野和格局都会不一样。

     

    比如你去了阿里,可能你面对的就是日访问量千万级以上的项目,接触的该领域上的牛人专家,

    而你如果去一个初创公司,可能首要对面的就是搭建一个能上线的系统,以及面对不断反复来回更改的需求,

    久而久之,自然在于技术的深度、视野的宽度等会产生较大的差距。

    几年后,两者简历中项目背景和技术栈上将会有很大差别,对自己今后的职业道路的影响也会越来越大。

     

    平台给自己的影响肯定是很大的,雷军曾说过:站在风口,猪都能飞。

    就像我的同一篇文章,在我的公众号上发表,阅读量也就刚刚过百;而被一些大号转载后,就可以轻松上万,甚至十万。

    富书签约作者霍辉曾举个例子:

    他一位朋友在一家60多人的企业做总经理助理,每天的工作就是核对发票、订机票和酒店,跑腿打杂。

    而他们公司的总助,干的是策划组织上千人参加的大型活动,与政府、合作伙伴维护关系的大事。

    两者的差距,一目了然。

     

    选择和努力

    在心灵鸡汤泛滥的自媒体时代,经常会看到类似的观点。

    比如:“你想要成为什么样的人。就得和什么样的人在一起,而接触的人首先你得拥有一个好的平台。”

    这话听起来好励志,好鸡血。观点有错吗?没有。

    比如:“第一份工作,让我明白,选择比努力更重要,选对很重要。”

    是呀,男怕入错行,女怕嫁错郎。选工作确实很重要,这个观点也很正。

     

    其实我们绝大多数人来说都是希望能毕业后进大公司,大平台,

    做一份符合自己职业方向,能实现自己人生理想,薪资不低,社会地位较高的工作。

    可问题是,有些平台是你想进就能进的吗?有些人是你想接触就能接触的吗?有些选择是你想决定就能实现的吗?

     

    不是!

     

    每个人所遇到的环境不同、机遇不同、经历不同,作出的选择也不同。

    甚至更残酷却又无法回避的现实是:你可能根本就没得选择!

    我们经常听到别人说,他XXX同学去了百度,他XXX师兄去了腾讯,他XXX朋友被美团录取了,

    当轮到他的时候,然后就语焉不详,最后不了了之。

    其实对于我们绝大多数人来说,这才是现实,找工作容易,但找一个“合适”的工作,难!

     

    所以我觉得对于所有人来说,努力比选择重要,努力决定能力,而在就业过程中,一定是能力决定选择。

    对于个人而言,有选择的时候,选择才重要;没有选择的时候,有工作比没有工作重要。

    对于应届毕业生来说,最重要的是,在自己能够选择的范围内选择一份适合自己的工作,

    然后再考虑酬劳、工作观、人脉、平台格局。

     

    最后引用一段话作为结尾吧:

    第一份工作形成的工作经验(包括企业文化、工作方法、工作习惯、工作态度、思维方式),将会成为你职场中的一个标杆,从而影响你对新工作机会的判断,甚至未来职业发展的定位。

    展开全文
  • 稳定全系列(一)——如何做好系统稳定建设

    千次阅读 多人点赞 2019-12-24 00:49:37
    第二个方向:工作在日常(30%) 第三个方向:预案是关键(15%) 第四个方向:容量是核心(10%) 五、总结 一、背景介绍 在移动互联网时代,用户群的积累比之前更容易,但同样,也会因为糟糕...

    目录

    一、背景介绍

    二、故障源的分类

    三、稳定性建设四要素

    第一要素:人

    第二要素:工具

    第三要素:预案

    第四要素:目标

    四、稳定性建设四个方向

    第一个方向:根基要抓牢(45%)

    第二个方向:工作在日常(30%)

    第三个方向:预案是关键(15%)

    第四个方向:容量是核心(10%)

    五、稳定性建设本质

    六、总结


    一、背景介绍

    在移动互联网时代,用户群的积累比之前更容易,但同样,也会因为糟糕的用户体验,而快速流失用户,哪怕是号称独一无二的12306网站,也在不断优化系统来提升用户体验;而在后移动互联网的物联网时代,软件工程师需要和硬件工程师配合,来保证提供的服务稳定和可靠。对,我们的产品就是为了实现用户价值,并提供非凡用户体验!

    如果说良好用户体验是增长的基础,那么良好的操作性、稳定的使用体验就是用户体验的基础,排除掉软件可操作性(这一块需要依靠专业的设计师),剩下的就是客户端(这里的客户端包括各种小程序、WebApp、H5页面等)和服务端,这一切都基于我们软件工程师来构建可靠、稳定的软件系统。 然而,随着我们服务的用户量越来越多,服务复杂度也越来越高,我们的系统为了可维护性,也会在业务架构和系统架构上进行调整,现在流行的微服务架构也因此应运而生。然而微服务架构也并不是没有副作用,例如它会增加维护成本和系统稳定性建设的成本。

    那么,什么是系统稳定性?这里我们引用百度百科的定义:系统稳定性是指系统要素在外界影响下表现出的某种稳定状态。为了方便,本文阐述的系统主要指软件系统。那么如何衡量系统稳定性的高与低呢?一个常用的指标就是服务可用时长占比,占比越高说明系统稳定性也越高,如果我们拿一整年的数据来看,常见的4个9(99.99%)意味着我们系统提供的服务全年的不可用时长只有52分钟! 它其实是一个综合指标,为什么这么说?因为我们在服务可用的定义上会有一些差别,常见的服务可用包括:服务无异常服务响应时间低服务有效(逻辑正确)服务能正常触发等。

    二、故障源的分类

    系统的故障源一般可以分为两大类,一类是人为因素,另一类是自然因素

    常见人为因素导致的故障如下:

    人为因素我们要尽可能的事前(故障发生前)避免,因为这些原因引发的事故很可能会导致数据丢失或错乱、资金受损等较严重后果,而且除了重启或修复后重新上线外没有过多有效的止损手段。人为因素导致的故障往往会导致软件工程师的内心受到严重打击,工作和专业能力受到质疑,造成“人财两空”的后果,“我拼了老命来产出,结果却给自己挖了个坑”是故障责任人内心的真实写照。

    我们再来说说自然因素,自然因素受很多客观因素的影响,往往不受控制,无法避免。

    常见的自然因素导致的故障如下:

    自然原因导致的故障可大可小,虽然无法避免,但由于没有第一责任人,避免了“人性拷问”,软件工程师可以和运维部、安全部的同学协作起来处理故障。

    三、稳定性建设四要素

    “如果事情有变坏的可能,不管这种可能性有多小,它总会发生。”,残酷的墨菲定律预示着我们对自己系统提供的服务不要太乐观,接下来,我们说说如何建设系统稳定性,人为因素的根源一方面是专业能力不足,经验不足,另一方面很多都是无心之失,所以需要通过流程、规范来保住“底线”,减少人为因素导致的故障,而自然因素导致的故障往往具有突发性,需要联合多个团队协作来解决故障。

    稳定性建设四要素工具预案和目标

    第一要素:人

    我们先来说“人”这一要素,它需要回答如下5个问题:

    • 谁应该参与稳定性建设?

    • 如何降低犯错的概率?

    • 如何提高稳定性意识?

    • 如何定责?

    • 如何激励?

    稳定性建设工作需要老板支持,它的实施一般需要开发测试运维安全还有产品等同学参与,而且主导方应该是开发、测试和运维。确定了参与方后,就可以做关键的一步:“参与稳定性建设的每个团队都需要在OKR中背负一部分稳定性指标”,这也是为什么说稳定性建设工作需要老板支持,因为和绩效考核相关。

    稳定性工作,规范先行。OKR的部分只是让各参与方在稳定性方面工作的投入变成合规化,平时如何去参与稳定性建设还得“有迹可循”,对于开发和测试来说就是要根据公司的当前技术体系去建设开发规范提测规范测试规范上线规范、复盘规范等。我们拿和软件开发最相关的开发规范来说,开发规范是对开发人员的要求,让开发人员知道什么是必须要做的、什么是推荐的、什么是应该避免的。通常开发规范至少应该包括如下几个部分:

    编码规范:对外接口命名方式、统一异常父类、业务异常码规范、对外提供服务不可用是抛异常还是返回错误码、统一第三方库的版本、哪些场景必须使用内部公共库、埋点日志怎么打、提供统一的日志、监控切面实现等,编码规范除了能规范开发的编码行为、避免犯一些低级错误和踩一些重复的坑外,另一个好处是让新入职的同学能快速了解公司的编码原则,这点对编码快速上手很重要。这里再重点说一下为什么要统一异常父类和业务异常码,例如虽然不同模块(这里的模块指的是能独立部署的项目)可能有不同的异常父类,比如订单模块的异常父类是OrderException、交易支付模块的异常父类是TradeException,而OrderException和TradeException的父类是BizException(当然BizException是定义在一个通用共公共库中的),而我们也需要去统一异常码,比如200代表正确的返回码,异常的返回码是6位数字(前3位代表模块,后3位代表异常类型),有了统一的异常父类和异常码后,很多切面就都可以由公共库来做了,比如统一的监控、统一的出入口日志打印,统一的异常拦截,压测标识透传、特殊的字段埋点等,千万别小看这些,这些能在未来持续提升研发效率,降低稳定性工作成本。

    公共库使用规范:为了能对通用功能进行定制化改造和封装,公司内部肯定会有一些公共库,例如日志库、HTTP库、线程池库、监控埋点库等,这些库都“久经考验”,已经被证实是有效且可靠的,这些就应该强制使用,当然为了适应业务的发展,这些公共库也应该进行迭代和升级。

    项目结构规范:为了贯彻标准的项目结构,一方面我们需要为各种类型项目通过“项目脚手架”来创建标准的项目结构原型,然后基于这个项目原型来进行开发,统一的项目结构一个最显著的好处是让开发能快速接手和了解项目,这种对于团队内维护多个项目很重要,人员能进行快速补位。

    数据库规范:数据库连接资源堪比CPU资源,现在的应用都离不开数据库,而且通常数据库都属于核心资源,一旦数据库不可用,应用都没有太有效的止损手段,所以在数据库规范里,库名、表名、索引、字段、分库分表的一些规范都必须明确,这里特别提一点,就是分表数量不要用2的幂(比如1024张表,很多人认为使用2的幂分表数在计算分表时用位运算会更快,但这个开销相比数据库操作其实可以忽略),而应该用质数(比如最接近1024的质数应该是1019),采用质数分表数能让数据分的更均匀

    这会引发另一个问题,那就是我们有这些规范,那么如何让开发来知晓和遵守?一方面是设定合理的奖惩机制(例如由于没有遵守规范而引发的线上事故要严惩),另一方面就是——考试!没错,就是考试,将这些规范和历史的线上事故整理成试题,让新老开发定期去考试,考试是一种传统的考核机制,我们可以把规范和公共库的更新部分,也及时加入到考试试题中,来督促大伙及时学习。

    有了OKR、规范和考核机制,加上我们定期宣导,相信各成员的稳定性意识会有显著提高。

    事故定责一般是比较复杂的过程,除非事故原因非常简单明了,但实际上事故原因常常涉及多个团队,如果责任分摊不合理,难免会引发跨团队的争吵,合理的做法是引入第三方稳定性团队来干预,例如滴滴的星辰花团队,星辰花会撰写定责指南,并制定一些相关流程机制。

    当然,如果达成稳定性年度目标,也应该对这些团队进行适当表彰。

    第二要素:工具

    工具意味着手段,要做好稳定性建设,强大的支持工具和平台是不可缺少的,常见的工具和平台包括:日志采集分析检索平台(例如滴滴的Arius)、监控告警平台(例如滴滴的Odin Metrics)、分布式追踪系统(例如Google的Dapper、滴滴的把脉平台)、自动化打包部署平台(例如滴滴的One Experience)、服务降级系统(例如滴滴的SDS)、预案平台(例如滴滴的911预案平台)、根因定位平台(记录所有故障发生前所有系统变更事件)、放火平台等。

    强大的工具能回答如下3个关键问题:

    • 我们能做什么?

    • 我们能做到什么程度?

    • 如何降低稳定性工作成本?

    工具本质上是手段,它能降低我们在稳定性工作上投入的成本,例如有了监控告警平台,我们就不需要专人时刻盯着日志或大盘,有了分布式追踪系统,问题定位会更有效率,有了降级系统,一些故障能自动控制和恢复,不用我们再上线一次。要想做好稳定性工作,工具必不可少,没有工具,稳定性建设总是低效的。

    其实公司内建的公共库也属于工具的一种,像滴滴内部的公共库,业务系统接入Odin Metrics和把脉几乎不要做额外的工作(当然接入把脉需要提日志采集工单,头疼),千万不要吝啬在工具方面的投入,很多开源框架可以拿来用或拿来参考,工具和平台可以内部进行互通和联动,这样可以建成一站式的稳定性工作平台。

    第三要素:预案

    紧急预案是我们在故障发生时的行动指南,这在故障可能涉及到多个团队、故障进展需要周知到多个团队时特别有用。

    完善的紧急预案能回答如下4个问题:

    • 故障发生时我们该做什么?

    • 谁来指挥?

    • 谁来决策?

    • 我们如何善后?

    当一个不那么容易定位的故障发生时,你应该做的第一件事应该是什么?这在不同公司、同一个公司同一个团队的不同成员恐怕都会给出一个不同的答案,而在滴滴内部,我们大多会第一时间通知团队内其他成员、Leader(寻求帮助)和客服、上游业务开发等可能的影响方 (问题周知)。当这一步做完以后,一般就会有一部分同学加入问题排查和止损,然而介入的人多了,排查和止损的效率不一定会成比例的提升,这时候协调者很重要,协调者要避免介入的同学在做重复工作,协调者还需要持续和客服、上游业务开发等影响方沟通(我们曾经就经历过由于问题排查问题进度没有及时有效和业务方沟通,业务方将故障升级的case)。对于排查问题和止损的同学来说,要操作某个开关,有可能还要去查代码看开关的名字是什么,还有可能关掉一个功能需要操作多个开关,这些在紧急时刻都有可能由于慌乱而出错。而且什么条件下才能操作开关,谁能决定应不应该操作开关,恐怕在当时很难去做最正确的事情,而这一切,没错,都应该提前写到预案中!!!

    紧急预案一般要包含如下内容:

    1. 故障发生时应该通知哪些人或团队。

    2. 如何选出协调者,什么情况下该选出协调者。

    3. 协调者的职责有哪些。

    4. 需要操作开关时,谁有权利决策。

    5. 常见故障以及对应的止损方式。

    6. 止损的原则是什么,什么是最重要的。

    7. 善后方案谁来拍板。

    预案很重要,完备的预案能降低故障定位和止损的时间,提升协作效率。

    第四要素:目标

    如何衡量稳定性建设工作是有价值的?如何考核稳定性建设工作达没达标、做的好不好?这些都能在稳定性建设的目标中找到答案。

    稳定性建设的目标主要用来回答如下2个问题:

    • 稳定性工作的价值是什么?
    • 稳定性工作如何考核?

    稳定性建设工作的价值不仅需要团队所有成员认可,更重要的是需要老板的认可,没有老板的认可,稳定性建设工作只是团队内部的“小打小闹”,难以去跨团队来体系化运作。

    稳定性建设工作的年度目标可以拿服务可用时长占比来定,也可以拿全年故障等级和次数来定,像滴滴这边,星辰花将故障等级分成了P0至P5六个等级,P0、P1、P2属于重大事故,是需要消耗服务不可用时长的(根据全年定的服务可用时长占比指标来计算出某个部门的全年服务不可用总时长),一旦年底某个部门的全年服务不可用时长超过年初设定的阈值,就会有一定的处罚,并影响部门绩效(之前达标也有奖励,但后来奖励取消了)。

    这里做一个汇总:

    四、稳定性建设四个方向

    前面我们提到的稳定性建设工作的四个关键点,但对如何落地阐述的并不多,这里结合作者多年的稳定性建设工作经验,谈谈稳定性建设工作的四个方向。

    第一个方向:根基要抓牢(45%)

    稳定性建设工作重在预防,根据作者多年的工作经验,至少6成线上故障都可以在预防工作中消除,我们需要投入45%的精力来做根基建设,所谓根基建设,就是把开发测试上线这三大流程做透!!下面列了几个关键点:

    Code Review:CR其实是一个很重要的环节,当一个开发整个编码和提测都可以自己闭环搞定时,时间一长就容易产生懈怠,这时候写隐患代码的几率会大大提高,CR的过程并不是diss的过程,这个一定要在团队内拉齐,相反,CR是一次很好的团队沟通和塑造自己影响力的机会。我就很佩服那些代码写得质量高并且能把整个流程讲顺的人。我们团队的项目都接入了全流程(例如滴滴的鲲鹏),分支合master必须要其他人Review,但这是“离线”的,没有代码作者讲的过程,效果没有几个人坐在小黑屋讲的好,只是更快而已。我们团队规定,大于等于4人日的项目需要进行小黑屋CR。CR还可以让其他成员来检测该代码实现是否遵循了开发规范,毕竟“先污染后治理”的成本太高,记住,CR一定是一个相互学习的过程

    设计评审:再也没有比糟糕的设计更有破坏力的东西了,设计评审和CR可以放在一起做,先评审设计再进行CR,有人就会说,都编码完了才进行设计评审是不是晚了?其实这要看情况而定,如果团队内部经常产出“糟糕设计”,那么我觉得设计评审就应该编码之前来做,但如果团队成员专业能力和经验都还不错,那么我们允许你再编码之后再做设计评审,而且编码的过程其实也是设计的过程,可以规避提前设计而导致后续编码和设计不一致的问题。设计评审的原则是,既要讲最终的设计方案,也要讲你淘汰的设计方案!

    提测标准:写完代码就可以提测了?当然不是,至少得完成补充单元测试、完成自测、完成开发侧的联调、通过测试用例(如果QA提前给了测试用例的话)、补充改动点和影响点(便于QA评估测试范围)、补充设计文档(对,现在滴滴的QA养成了读代码、看设计的习惯)这些步骤才能说可以提测了。当然,提测标准理论上是QA同学来定义的。

    测试流程:测试的全流程覆盖最好能做到全自动化,很多测试用例可以沉淀下来,用来做全流程回归,当然这需要系统支持。我也见过太多犹豫QA没精力进行全流程回归而导致问题没有提前发现而产生的事故,所以测试的原则是尽可能自动化和全流程覆盖,让宝贵的人力资源投入到只能人工测试的环节。

    上线流程:上线也是一个风险很高的操作,我们简单统计了19年的上线次数,光我们团队负责的系统就上线了五百多次。部署平台需要支持灰度发布、小流量发布,强制让开发在发布时观察线上大盘和日志,一旦有问题,能做到快速回滚(当然要关注回滚条件)。我们这边的做法是先小流量集群灰度(我们把单量少的城市单独做了一套小流量集群),再线上灰度,确保哪怕出问题也能控制影响。

    第二个方向:工作在日常(30%)

    俗话说养兵一日,用兵一时,平日的养兵其实也非常重要,这一方向我们需要投入30%的精力,需要我们做到如下几点:

    人人参与:团队内人人都需要参与稳定性建设工作,稳定性工作不是某个人的事情,所以我会要求所有人的OKR中都有稳定性建设的部分。做toC研发的同学,都养成了带电脑回家的习惯,哪怕是加班到晚上12点,当然在外旅游也带着电脑,手机24小时保持畅通;稳定性已经成为了生活本身。

    持续完善监控告警:监控告警就是我们发现故障的“眼睛”和“耳朵”,然而大多数监控告警都需要我们手动一个个配置,随着业务的不断迭代,会有很多新接口需要添加监控,一些老的监控的阈值也需要不断调整(否则大量告警会让人麻木),所以监控告警是一个持续优化的过程。

    及时消灭线上小隐患:平日发现的一些问题要及时消灭,很多线上事故在事前都有一定预兆,放任平时的一些小问题不管,到后面只会给未来埋上隐患。

    跨团队联动:稳定性肯定不是一个团队的事情,一些降级方案可能涉及多个团队的工作,所以定期的跨团队的沟通会议是很有必要的,要大伙一起使劲才能把事情做好。

    复盘机制:对出过的线上事故一定要及时的进行复盘,通过复盘来发现我们现有流程、机制是否有问题,让大伙不要踩重复的坑,并不断完善我们的紧急预案。复盘虽然属于事后的行为,但很重要,我们需要通过复盘来看下次是否能预防此故障,或者是否能更快的定位和止损。

    会议机制:稳定性周会、稳定性月会,我们通过各种定期的会议来总结一些阶段性进展和成果,拉齐大家认知,这也是大伙日常稳定性工作露出的一个机会,所以非常重要。

    第三个方向:预案是关键(15%)

    我们通常都会忽视预案的作用,因为预案整理起来确实比较麻烦,预案也需要随着功能的迭代而不断更新,否则将很容易过时,而且预案在平日非故障期间也确实没有发挥作用的机会。但我们不得不承认紧急预案相当重要,特别是当我们去定位和止损一个比较复杂的线上问题时。

    我们需要在预案的制定和演练上投入15%的精力,可以从如下三个方面着手:

    分场景制定和完善紧急预案:如果我们还没有紧急预案,那第一步就是分类分场景整理下历史上经常发生的线上事故,例如MySQL故障预案、MQ故障预案、发单接口故障预案等。而且预案有可能会被多人查看,一定要清晰易懂,如果某些预案是有损的,需要把副作用也描述清楚。

    通过放火平台来验证预案:借助放火平台和服务降级系统,我们可以通过主动给主流程服务的非核心依赖注入故障,来验证系统在遇到非核心依赖发生故障时,核心服务是否仍旧有效,如果某些预案无法做成系统自动的(比如某些预案有一定的风险或副作用),也可以在预发环境来验证该预案是否能达到预期效果,防止真正故障发生时“手生”。预案就是在这种不断演练过程中来优化和完善的,这样的预案才是动态的,才是活生生有效可靠的!

    第四个方向:容量是核心(10%)

    我们知道木桶效应,一个木桶能装多少水取决于最短的那块板,在分布式系统中也是如此,我们需要摸到分布式系统中的这块“短木板”才能知道整个系统的吞吐量(容量),如果我们没有这个值,老板问你明年单量要Double,问你要预算,要规划你凭什么给?最准确的容量预估方案就是——线上全链路压测。至于滴滴是如何做线上全链路压测,后续我会有专门的文章来阐述。

    我们继续探讨容量这个话题,我们应该投入10%的精力来摸容量、扩容量、水位预警等。容量也相当重要,根据我的经验,线上有大约10%的故障和容量有关,当遇到这种问题,最有效的解决方案就是扩容!关于容量,我们在日常需要做到如下三点:

    常态化的全链路压测:线上全链路压测必须定期举行,特别的在有大促活动时,也需要提前进行一次。因为随着业务的快速迭代,系统老的瓶颈可能消失,新的瓶颈可能出现,所以之前的全链路压测的结果将失效,我们需要定期去摸这个线上环境的这个阈值。

    定期进行扩容演练:在滴滴内部,我们会定期进行弹性云扩容演练,这在紧急情况下很有用,我们就曾经遇到过弹性云扩容比修改阈值重新上线更快解决问题的case。

    多活建设:我们知道多活主要是为了容灾,但其实多活实际上也从整体上增加了系统容量,所以也属于容量扩充的范畴,一旦某个机房遇到瓶颈,我们可以分流到其他机房。当然多活建设需要一定成本,业务量大到一定程度才需要投入。

    说了这么多,我们也放张图来进行总结:

     

    五、稳定性建设本质

    就像我们做项目要“面向风险”编程一样,系统稳定性建设的目的其实就是为了应对未来的风险,和未来风险做对抗(哪怕我们有些手段将未来的风险变小)。如果非让我们探究稳定性建设的本质,我觉得稳定性建设的本质是将系统和系统间未来不可控的因素逐渐变为可预见,可控的因素,并着手去一一解决的一个过程。

    六、总结

    做稳定性建设一定要结合公司或组织的实际情况,量入为出,最合适的方案才是最好的方案。结合咱们上述讨论的几点,我们可以画出稳定性建设的房子,如下:

    希望我们能像建筑师一样,给业务构建一套稳定、可扩展、性价比高的房子!!!

     

     

    其他稳定性全系列文章:

    稳定性全系列(二)——如何做线上全链路压测 https://blog.csdn.net/manzhizhen/article/details/104439629

    展开全文
  • 工作中如何做好技术积累

    千次阅读 2018-04-16 19:34:00
    引言 古人云:“活到老,学到老。...如何在繁忙的工作做好技术积累,构建个人核心竞争力,相信是很多工程师同行都在思考的问题。本文是我自己的一些总结,试图从三个方面来解答: 第一部分阐述了一些学习的原...
        

    引言

    古人云:“活到老,学到老。”互联网算是最辛苦的行业之一,“加班”对工程师来说已是“家常便饭”,同时互联网技术又日新月异,很多工程师都疲于应付,叫苦不堪。以至于长期以来流传一个很广的误解:35岁是程序员工作的终点。

    如何在繁忙的工作中做好技术积累,构建个人核心竞争力,相信是很多工程师同行都在思考的问题。本文是我自己的一些总结,试图从三个方面来解答:

    • 第一部分阐述了一些学习的原则。任何时候,遵循一些经过检验的原则,都是影响效率的重要因素,正确的方法是成功的秘诀。

    • 提升工作和学习效率的另一个重要因素是释惑和良好心态。第二部分分析了我在工作中碰到和看到的一些典型困惑。

    • 成为优秀的架构师是大部分初中级工程师的阶段性目标。第三部分剖析架构师的能力模型,让大家对目标所需能力有一个比较清晰的认知。

    如何学习

    在繁忙的工作中,持之以恒、不断学习和进步是一件艰巨的任务,需要坚强的毅力和坚定的决心。如果方法不得当,更是事倍功半。幸好我们的古人和现在哲人已经总结了很多优秀的学习方法论,这里汇总了一些重要原则。遵循这些方法必会对大家的工作学习大有裨益。

    贵在坚持

    有报道指出,过去几十年的知识量超过之前人类几千年的知识量总和。而计算机领域绝对是当代知识更新最快的领域之一,因此,工程师必须要接受这样一个现实,现在所掌握的深厚知识体系很快就会被淘汰。要想在计算机领域持续做优秀架构师,就必须不停的学习,掌握最新技术。总之,学不可以已。

    所谓“冰冻三尺,非一日之寒,水滴石穿,非一日之功”,通往架构师的道路漫长而又艰巨,轻易放弃,则所有付出瞬间付之东流。要想成为优秀的架构师,贵在坚持!

    虽然知识更新很快,但是基础理论的变化却非常缓慢。这就是“道”和“象”关系,纵是世间万象,道却万变不离其宗。对于那些非常基础的理论知识,我们需要经常复习,也就是“学而时习之”。

    重视实践

    古人云:“纸上得来终觉浅,绝知此事要躬行。” 学习领域有所谓721模型:个人的成长70%来自于岗位实践,20%来自向他人学习,10%来自于培训。虽然这种理论存在争议,但对于工程师们来说,按照实践、学习和培训的方式进行重要性排序,大致是不错的。所以重视实践,在实践中成长是最重要的学习原则。

    人类的认知有两种:感性认知和理性认知。这两种认知互相不可替代性。实践很大程度来自于感性学习,看书更像是理性学习。以学开汽车做例子,很难想象什么人能够仅仅通过学习书本知识就会开汽车。

    书本知识主要是传道——讲述抽象原型,而对其具体应用场景的讲述往往含糊其辞,对抽象原型之间的关系也是浅尝辄止。采用同样精确的语言去描述应用场景和关联关系将会失去重点,让人摸不着头脑。所以,仅仅通过看书来获得成长就像是用一条腿走路。

    重视实践,充分运用感性认知潜能,在项目中磨炼自己,才是正确的学习之道。在实践中,在某些关键动作上刻意练习,也会取得事半功倍的效果。

    重视交流

    牛顿说:“如果说我看得比别人远一些,那是因为我站在巨人的肩膀上。”我们需要从别人身上学习。从老师、领导、同事、下属甚至对手身上学习,是快速成长的重要手段。

    向老师和领导学习已经是人们生活习惯的一部分了。但是从同事甚至对手那里学习也很重要,因为这些人和我们自身更相似。所以要多多观察,取其所长,弃其所短。对于团队的小兄弟和下属,也要“不耻下问”。

    此外,在项目中积极参与具体方案讨论也非常重要。参与者先验感知了相关背景,并且讨论的观点和建议也是综合了发言者多种知识和技能。所以,讨论让参与者能够非常全面,立体地理解书本知识。同时,和高手讨论,他们的观点就会像修剪机剪树枝一样,快速的剪掉自己知识领域里面的疑惑点。

    重视总结和输出

    工程师在实践中会掌握大量细节,但是,即使掌握了所有细节,却没有深刻的总结和思考,也会陷入到“学而不思则罔”的境地。成长的“量变”来自于对细节的逐渐深入地把控,而真正的“质变”来自于对“道”的更深层次的理解。

    将经验输出,接受别人的检验是高层次的总结。这种输出不仅帮助了别人,对自身更是大有裨益。总结的方式有很多,包括组织分享,撰写技术文章等等。当然“日三省吾身”也是不错的总结方式。总之,多多总结,多多分享,善莫大焉!

    解答别人的问题也是个人成长的重要手段。有时候,某个问题自己本来不太懂,但是在给别人讲解的时候却豁然开朗。所以,“诲人不倦”利人惠己。

    重视规划

    凡事预则立,不预则废。对于漫长的学习生涯而言,好的计划是成功的一半。

    长期规划

    长期规划的实施需要毅力和决心,但是做正确的长期规划还需要高瞻远瞩的眼界、超级敏感的神经和中大奖的运气。对于大部分人来说,长期规划定主要是“定方向”。但遵循如下原则能够减少犯方向性错误的概率:

    • 远离日暮西山的行业。

    • 做自己感兴趣的事情。

    • 做有积累的事情。

    • 一边走一边看,切勿一条道走到黑。

    短期规划

    良好的短期规划应该在生活、成长、绩效和晋升之间取得平衡。大部分公司都会制定一个考核周期——少则一个月,多则一年。所以不妨以考核周期作为短期学习规划周期。本质上,规划是一个多目标优化问题,它有一系列的理论方案,这里不一一细说。基于相关理论,我给出一个简单易行的方案:

    • 确定目标优先级。比如:成长、生活、绩效。

    • 确定每个目标的下限。从优化理论的角度来看,这被称为约束。比如绩效必须在一般以上,之前已经规划好的旅行不能更改,必须读完《Effective Java》等等。

    • 优先为下限目标分配足够的资源。比如,事先规划好的旅行需要10天,这10天就必须预算出去。

    • 按照各主目标的顺序依次分配资源。比如,最终分配给学习的时间是10天。

    • 在给定的学习预算下,制定学习目标,要激进。然后给出执行方案。比如,学习目标是掌握基本的统计学知识,并成为Java专家。具体方案为:完成《Effective Java》、《Java Performance》、《Design Pattern》、《Head First Statistics》四本书的阅读。

    • 对规划中的各学习任务按目标优先级进行排序,并最先启动优先级最高的任务。比如,最高优先级是掌握统计理论,那么就要先看《Head First Statistics》。

    对于该方案,要注意以下几点:

    • 最低目标必须能够轻松达成的目标,否则,从优化理论的角度来讲,该命题无解。比如,类似“半年内完成晋级两次、绩效全部S、从菜鸟成为Java专家”就不太合适作为最低目标。总之,要区分理想和梦想。
    • 主要目标规划必须具备一定的挑战性,需要规划出不可能完成的目标。过度规划本质上是一种贪婪算法,目的是目标价值最大化。因为一切皆有变数,如果其他目标能够提前完成,就不妨利用这些时间去完成更多的学习目标。总之,前途必须光明,道路必须坎坷。

    • 各目标之间不一定共享资源,规划不一定互有冲突。

    此外,短期规划还可以从如下几个方面进行优化:

    • 学习计划最好能结合工作计划,理论联系实际结合,快速学以致用。比如,本季度规划去做一些数据分析工作,那么不妨把学习目标设置为学习统计知识。

    • 要灵活对待规划的目标和具体执行步骤,需要避免“郑人买履”式的笑话。面临新的挑战和变化,规划需要不断地调整。

    那些令人纠结的困惑

    人生是一场马拉松,在漫长的征途中,难免有很多困惑。困惑就像枷锁,使我们步履蹒跚,困惑就像死锁,让我们停滞不前。

    接下来我将总结自己在工作中碰到和看到的一些典型困惑。这些困惑或者长期困扰作者本人,或者困扰我身边的同事和朋友。当这些困惑被释然之后,大家都感觉如重获释,为下一阶段的征程提供满满的正能量。人生就像一场旅途,不必在乎目的地,在乎的,应该是沿途的风景,以及看风景的心情。良好的心态是技术之旅最好的伴侣。期望通过这个解惑之旅,让大家拥有一个愉快的心情去感受漫长的学习旅途。

    学无止境吗

    必须要承认一个残酷的现实:人的生命是有限的,知识却是无限的。用有限的生命去学习无限的知识是不可能完成的任务。一想到此,有些工程师不免产生一些悲观情绪。如果方法得当并且足够勤奋,悲伤大可不必。

    虽然,人类的整体知识体系一直在扩张。但是就很多重要的工程细分领域,基础理论并不高深。计算机的很多重要领域,工程师有能力在有限时间内抓住核心要害。

    比如,密码学被认为是门非常高深的学科,但是一大类密码技术的基础是数论中一个非常简单的理论——素因数分解:给出两个素数,很容易算出它们的积,然而反过来给定两个素数的积,分解的计算量却非常惊人。

    “一致性”算得上是计算机领域里面最经典的难题,它是所有分布式系统的基础,从多核多CPU到多线程,从跨机器到跨机房,无所不在,几乎所有的计算机从业人员都在解决这个问题,但是Paxos给出了一个很优雅的解决方案。

    权限管理是很多工程师的噩梦,但如果你能搞定“Attribute Based Access Control(ABAC)”和“Role-Based Access Control(RBAC)”,也能达到相当高度。

    另外,技术学习是一场对抗赛,虽然学无止境,超越大部分对手就是一种胜利。所以,以正确的学习方式,长时间投入就会形成核心竞争力。

    没有绝对高明的技术,只有真正的高手

    致力于在技术上有所成就的工程师,都梦想有朝一日成为技术高手。但技术高手的标准却存在很大的争议。这是一个有着悠久历史的误解:以某种技术的掌握作为技术高手的评判标准。我经常碰到这样一些情景:因为掌握了某些技术,比如Spring、Kafka、Elasticsearch等,一些工程师就自封为高手。有些工程师非常仰慕别的团队,原因竟是那个团队使用了某种技术。

    这种误解的产生有几个原因:首先,技多不压身,技术自然是掌握的越多越好,掌握很多技术的人自然不是菜鸟。其次,在互联网时代来临之前,信息获取是非常昂贵的事情。这就导致一项技能的掌握可以给个人甚至整个公司带来优势地位。互联网时代,各种框架的出现以及开源的普及快速淘汰或者降低了很多技能的价值,同时降低了很多技术的学习门槛。所以,在当前,掌握某项技能知识只能是一个短期目标。怀揣某些技能就沾沾自喜的人需要记住:骄傲使人退步。

    所谓麻雀虽小,五脏俱全。如果让你来做造物主,设计麻雀和设计大象的复杂度并没有明显区别。一个看起来很小的业务需求,为了达到极致,所需要的技术和能力是非常综合和高深的。真正的高手不是拿着所掌握的技术去卡客户需求,而是倾听客户的需求,给出精益求精的方案。完成客户的需求是一场擂台赛,真正的高手,是会见招拆招的。

    不做项目就无法成长吗

    在项目中学习是最快的成长方式之一,很多工程师非常享受这个过程。但是一年到头都做项目,你可能是在一家外包公司。对于一个做产品的公司,如果年头到年尾都在做项目,要不然就是在初步创业阶段,要不然就是做了大量失败的项目,总之不算是特别理想的状态。正常情况,在项目之间都会有一些非项目时间。在这段时间,有些同学会产生迷茫,成长很慢。

    项目真的是越多越好吗?答案显然是否定的。重复的项目不会给工程师们带来新的成长。不停的做项目,从而缺乏学习新知识的时间,会导致“做而不学则殆”。真正让工程师出类拔萃的是项目的深度,而不是不停地做项目。所以,在项目之间的空档期,工程师们应该珍惜难得的喘息之机,深入思考,把项目做深,做精。

    如何提高项目的深度呢?一般而言,任何项目都有一个目标,当项目完成后,目标就算基本达成了。但是,客户真的满意了吗?系统的可用性、可靠性、可扩展性、可维护性已经做到极致了吗?这几个问题的答案永远是否定的。所以,任何一个有价值的项目,都可以一直深挖。深挖项目,深度思考还可以锻炼工程师的创造力。期望不停地做项目的人,就像一个致力于训练更多千里马的人是发明不出汽车的。锻炼创造力也不是一蹴而就的事情,需要长时间地思考。总之,工程师们应该总是觉得时间不够用,毕竟时间是最宝贵的资源。

    职责真的很小吗

    很多时候,一个工程师所负责系统的数量和团队规模与其“江湖地位”正相关。但是,江湖地位与技术成长没有必然关联。提升技术能力的关键是项目深度以及客户的挑剔程度。项目越多,在单个项目中投入的时间就越少,容易陷入肤浅。特别需要避免的是“ 在其位不谋其政”的情况。团队越大,在管理方面需要投入的精力就越多。在管理技巧不成熟,技术眼界不够高的前提强行负责大团队,可能会导致个人疲于应付,团队毫无建树。最终“ 一将无能,累死三军”,效果可能适得其反。

    从技术发展的角度来说,技术管理者应该关注自己所能把控的活跃项目的数量,并致力于提高活跃项目的影响力和技术深度。团队人数要与个人管理能力、规划能力和需求把控能力相适应。一份工作让多个人来干,每个人的成长都受限。每个人都做简单重复的工作,对技术成长没有任何好处。团队管理和项目管理需要循序渐进,忌“拔苗助长”。

    一定要当老大吗

    有一些工程师的人生理想是做团队里的技术老大,这当然是一个值得称赞的理想。可是,如果整个团队技术能力一般,发展潜力一般,而你是技术最强者,这与其说是幸运,不如说是悲哀。这种场景被称之为“武大郎开店”。 团队里的技术顶尖高手不是不能做,但为了能够持续成长,需要满足如下几个条件:

    • 首先你得是行业里面的顶尖专家了——实在很难找到比你更强的人了!

    • 其次,你经常需要承担对你自己的能力有挑战的任务,但同时你拥有一批聪明能干的队友。虽然你的技术能力最高,但是在你不熟悉的领域,你的队友能够进行探索并扩展整个团队的知识。

    • 最后,你必须要敏而好学,不耻下问。

    否则,加入更强的技术团队或许是更好的选择,最少不是什么值得骄傲的事情。

    平台化的传说

    平台化算得上是“高大上”的代名词了,很多工程师挤破头就为了和“平台化”沾点边。然而和其他业务需求相比,平台化需求并没有本质上的区别。无论是平台化需求还是普通业务需求,它的价值都来自于客户价值。不同点如下:

    • 很多平台化需求的客户来自于技术团队,普通需求的客户来自于业务方。

    • 产品经理不同。普通业务需求来自于产品经理,平台化需求的产品经理可能就是工程师自己。长期被产品经理“压迫”的工程师们,在平台化上终于找到“翻身农奴把歌唱”的感觉。

    • 很多平台化的关注点是接入能力和可扩展性,而普通业务的关注点更多。

    归根结底,平台化就是一种普通需求。在实施平台化之前,一定要避免下面两个误区:

    • 平台化绝对不是诸如“统一”、“全面”之类形容词的堆砌。是否需要平台化,应该综合考虑:客户数量,为客户解决的问题,以及客户价值是否值得平台化的投入。

    • 平台化不是你做平台,让客户来服务你。一些平台化设计者的规划设计里面,把大量的平台接入工作、脏活累活交给了客户,然后自己专注于所谓“最高大上”的功能。恰恰相反,平台化应该是客户什么都不做,所有的脏活累活都由平台方来做。本质上讲,平台化的价值来自于技术深度。真正体现技术深度的恰恰是设计者能够很轻松的把所有的脏活累活搞定。

    所以平台化的最佳实践是:投入最少的资源,解决最多的问题。平台解决一切,客户坐享其成。

    搞基础技术就一定很牛吗

    经常听到同学们表达对基础技术部同学的敬仰之情,而对搞业务技术的同学表现出很轻视,认为存储、消息队列、服务治理框架(比如美团点评内部使用的OCTO)、Hadoop等才能被称为真正的技术。事实并非如此,更基础的并不一定更高深。

    比如下面这个流传很久的段子:越高级的语言就越没有技术含量。但真是这样吗,就拿Java和C来说,这是完全不同的两种语言,所需要的技能完全不同。C或许跟操作系统更加接近一点,和CPU、内存打交道的机会更多一点。但是为了用好Java,程序员在面向对象、设计模式、框架技术方面必须要非常精通。Java工程师转到C方向确实不容易,但作者也见过很多转到Java语言的C工程师水土不服。

    基础技术和业务应用技术必然会有不同的关注点,没有高低之分。之所以产生这种误解,有两个原因:

    • 基础技术相对成熟,有比较完整的体系,这给人一个高大上的感觉。业务应用技术相对来说,由于每个团队使用的不一样,所以成熟度参差不齐,影响力没有那么大。

    • 基础技术的门槛相对来说高一点,考虑到影响面,对可靠性、可用性等有比较高的最低要求。但是门槛高不代表技术含量高,另外成熟技术相对来说在创新方面会受到很大的约束。但是最先进的技术都来自活跃的创新。

    对比下来,业务技术和基础技术各有千秋。但真正的高手关注的是解决问题,所有的技术都是技能而已。

    可行性调研的那些坑

    工作中开展可行性调研时有发生。做可行性调研要避免如下情况:

    • 把可行性调研做成不可行性调研。这真的非常糟糕。不可行性的结论往往是:因为这样或者那样的原因,所以不可行。

    • 避免“老鼠给猫挂铃铛”式的高风险可行性方案。“天下大事必作于细”,可行性调研一定要细致入微,避免粗枝大叶。

    • 避免调研时间过长。如果发现调研进展进入到指数级复杂度,也就是每前进一步需要之前两倍的时间投入,就应该果断的停止调研。

    可行性调研的结论应该是收益与成本的折衷,格式一般如下:

    • 首先明确预期的结果,并按照高中低收益进行分级。

    • 阐述达成每种预期结果需要采取的措施和方案。

    • 给出实施各方案需要付出的成本。

    工程师天生不善沟通吗

    实际工作中,沟通所导致的问题层出不穷。工程师有不少是比较内向的,总是被贴上“不善沟通”的标签。实际上,沟通能力是工程师最重要的能力之一,良好的沟通是高效工作学习的基础,也是通过学习可以掌握的。下面我按工程师的语言说说沟通方面的经验。

    第一类常见的问题是沟通的可靠性。从可靠性的角度来讲,沟通分为TCP模式和UDP模式。TCP模式的形象表述是:我知道你知道。UDP模式的形象表述是:希望你知道。TCP模式当然比较可靠,不过成本比较高,UDP模式成本低,但是不可靠。在沟通可靠性方面,常见错误有如下两种:

    • 经常听到的这样的争论。一方说:“我已经告诉他了”,另一方说:“我不知道这个事情呀”。把UDP模式被当作TCP模式来使用容易产生扯皮。

    • 过度沟通。有些同学对沟通的可靠性产生了过度焦虑,不断的重复讨论已有结论问题。把TCP模式当成UDP来使用,效率会比较低。

    第二类沟通问题是时效性问题。从时效性讲,沟通分为:同步模式和异步模式。同步沟通形象地说就是:你现在给我听好了。异步沟通的形象表述是:记得给我做好了。在沟通时效性方面,有如下两种常见错误:

    • 已经出现线上事故,紧急万分。大家你一言,我一语,感觉事故可能和某几个人有关,但是也不能完全确定,所以没有通知相关人员。最终,一个普通的事故变成了严重事故。对于紧急的事情,必须要同步沟通。

    • 半夜三点你正在熟睡,或者周末正在逛街,接到一个电话:“现在有个需求,能否立刻帮忙做完。”这会非常令人郁闷,因为那并不是紧急的事情。不是所有的需求都需要立刻解决。

    有效沟通的一个重要原则是提前沟通。沟通本质是信息交流和处理,可以把被沟通对象形象地比喻成串行信息处理的CPU。提前沟通,意味着将处理请求尽早放入处理队列里面。下面的例子让很多工程师深恶痛绝:一个需求策划了1个月,产品设计了2周。当开发工程是第一次听说该需求的时候,发现开发的时间是2天。工程师据理力争,加班加点1周搞定。最后的结论是工程师非常不给力,不配合。就像工程师讨厌类似需求一样。要协调一个大项目,希望获得别人的配合,也需要尽早沟通。

    有效沟通的另外一个重点是“不要跑题”。很多看起来很接近的问题,本质上是完全不同的问题。比如:一个会议的主题是“如何实施一个方案”,有人却可能提出“是否应该实施该方案”。 “如何实施”和“是否应该实施”是完全不同的两个问题,很多看起来相关的问题实际上跑题很远。“跑题”是导致无效沟通的重要原因。

    良好沟通的奥秘在于能掌握TCP模式和UDP模式精髓,正确判断问题的紧急性,尽量提前沟通,避免跑题。

    带人之道

    有些初为导师的工程师由于担心毕业生的能力太弱,安排任务时候谆谆教诲,最后感觉还是有所顾虑,干脆自己写代码。同样的事情发生在很多刚刚管理小团队的工程师身上。最终的结果他们:写完所有的代码,让下属无代码可写。“ 事必躬亲”当然非常糟糕,最终的往往是团队的整体绩效不高,团队成员的成长很慢,而自己却很累。

    古人说:“用人不疑,疑人不用。”这句话并非“放之四海而皆准”。在古代,受限于通信技术,反馈延迟显著,而且信息在传递过程中有大量噪音,变形严重。在这种情况下,如果根据短期内收集的少量变形的信息做快速决断,容易陷于草率。在公司里,这句话用于选人环节更为恰当,应该改为:录用不疑,疑人不录。

    考虑到招聘成本,就算是在录用层面,有时候也无法做到。作为一个小团队的管理者,能够快速准确的获取团队成员的各种反馈信息,完全不需要“用人不疑,疑人不用”。用人的真正理论基础来自于“探索和利用”(Exploration and Exploitation )。不能因为下属能做什么就只让他做什么,更不能因为下属一次失败就不给机会。

    根据经典的“探索和利用”(Exploration and Exploitation )理论,良好的用人方式应该如下:

    • 首选选择相信,在面临失败后,收缩信任度。

    • 查找失败的原因,提供改进意见,提升下属的能力。

    • 总是给下属机会,在恰当地时机给下属更高的挑战。 总之,苍天大树来自一颗小种子,要相信成长的力量。

    效率、效率、效率

    经常看到有些同学给自己的绩效评分是100分——满分,原因是在过去一段时间太辛苦了,但最终的绩效却一般般。天道酬勤不错,但是天道更酬巧。工程师们都学过数据结构,不同算法的时间复杂度的差距,仅仅通过更长的工作时间是难以弥补的。为了提升工作学习效率,我们需要注意以下几点:

    • 主要关注效率提升。很多时候,与效率提升所带来的收益相比,延长时间所带来的成果往往不值得一提。

    • 要有清晰的结果导向思维。功劳和苦劳不是一回事。

    • 做正确的事情,而不仅仅正确地做事情。这是一个被不断提起的话题,但是错误每天都上演。为了在规定的时间内完成一个大项目,总是要有所取舍。如果没有重点,均匀发力,容易事倍功半。如果“南辕北辙”,更是可悲可叹。

    架构师能力模型

    前面我们已经讲完了原则和一些困惑,那么工程师到底应该怎么提升自己呢?

    成为优秀的架构师是大部分初中级工程师的阶段性目标。优秀的架构师往往具备七种核心能力:编程能力、调试能力、编译部署能力、性能优化能力、业务架构能力、在线运维能力、项目管理能力和规划能力。

    这几种能力之间的关系大概如下图。编程能力、调试能力和编译部署能力属于最基础的能力。不能精通掌握这三种能力,很难在性能优化能力和业务架构能力方面有所成就。具备了一定的性能优化能力和业务架构能力之后,才能在线运维能力和项目管理能力方面表现优越。团队管理能力是最高能力,它对项目管理能力的依赖度更大。

    架构师能力模型

    编程能力

    对工程师而言,编程是最基础的能力,必备技能。其本质是一个翻译能力,将业务需求翻译成机器能懂的语言。

    提升编程能力的书籍有很多。精通面向对象和设计模式是高效编程的基础。初级工程师应该多写代码、多看代码。找高手做Code Review,也是提升编程水平的捷径。

    调试能力

    程序代码是系统的静态形式,调试的目的是通过查看程序的运行时状态来验证和优化系统。本质上讲,工程师们通过不断调试可以持续强化其通过静态代码去预测运行状态的能力。所以调试能力也是工程师编程能力提升的关键手段。很早之前有个传说:“调试能力有多强,编程能力就有多强。”不过现在很多编辑器的功能很强大,调试能力的门槛已经大大降低。

    调试能力是项目能否按时、高质量提交的关键。即使一个稍具复杂度的项目,大部分工程师也无法一次性准确无误的完成。大项目都是通过不断地调试进行优化和纠错的。所以调试能力是不可或缺的能力。

    多写程序,解决Bug,多请教高手是提升调试能力的重要手段。

    编译部署能力

    编译并在线上部署运行程序是系统上线的最后一个环节。随着SOA架构的普及以及业务复杂度的增加,大部分系统只是一个完整业务的一个环节,因此,本地编译和运行并不能完全模拟系统在线运行。为了快速验证所编写程序的正确性,编译并在线上部署就成了必要环节。所以编译部署能力是一个必备技能。

    让盘根错节的众多子系统运行起来是个不小的挑战。得益于SOA架构的普及以及大量编译、部署工具的发展,编译部署的门槛已经大大降低。基于应用层进行开发的公司,已经很少有“编译工程师”的角色了。但是对于初级工程师而言,编译部署仍然不是一个轻松的事情。

    性能优化能力

    衡量一个系统成功的一个重要指标是使用量。随着使用量的增加和业务复杂度的增加,大部分系统最终都会碰到性能问题。 性能优化能力是一个综合能力。因为:

    • 影响系统性能的因素众多,包括:数据结构、操作系统、虚拟机、CPU、存储、网络等。为了对系统性能进行调优,架构师需要掌握所有相关的技术。

    • 精通性能优化意味着深刻理解可用性、可靠性、一致性、可维护性、可扩展性等的本质。

    • 性能优化与业务强耦合,最终所采取的手段是往往折衷的结果。所以,性能优化要深谙妥协的艺术。

    可以说,性能优化能力是工程师们成长过程中各种技能开始融会贯通的一个标志。这方面可以参考之前的博客文章“常见性能优化策略的总结”。市场上还有很多与性能优化相关的书籍,大家可以参考。多多阅读开源框架中关于性能优化方面的文档和代码也不失为好的提升手段。动手解决线上性能问题也是提升性能优化能力的关键。如果有机会,跟着高手学习,分析性能优化解决方案案例(我们技术博客之前也发表了很多这方面的文章),也是快速提升性能优化能力的手段。

    在线运维能力

    如果说性能优化能力体现的是架构师的静态思考能力,在线运维能力考验的就是动态反应能力。残酷的现实是,无论程序多么完美,Bug永远存在。与此同时,职位越高、责任越大,很多架构师需要负责非常重要的在线系统。对于线上故障,如果不能提前预防以及快速解决,损失可能不堪设想,所以在线运维能力是优秀架构师的必备技能。

    为了对线上故障进行快速处理,标准化的监控、上报、升级,以及基本应对机制当然很重要。通过所观察到的现象,快速定位、缓解以及解决相关症状也相当关键。这要求架构师对故障系统的业务、技术具备通盘解读能力。解决线上故障的架构师就好比一个在参加比赛F1的车手。赛车手必须要了解自身、赛车、对手、同伴、天气、场地等所有因素,快速决策,不断调整。架构师必须要了解所有技术细节、业务细节、处理规范、同伴等众多因素,快速决断,迅速调整。

    在线运维本质上是一个强化学习的过程。很多能力都可以通过看书、查资料来完成,但在线运维能力往往需要大量的实践来提升。

    业务架构能力

    工程师抱怨产品经理的故事屡见不鲜,抱怨最多的主要原因来自于需求的频繁变更。需求变更主要有两个来源:第一个原因是市场改变或战略调整,第二个原因是伪需求。对于第一个原因,无论是工程师还是产品经理,都只能无奈的接受。优秀的架构师应该具备减少第二种原因所导致的需求变更的概率。

    伪需求的产生有两个原因:

    第一个原因是需求传递变形。从信息论的角度来讲,任何沟通都是一个编码和解码的过程。典型的需求从需求方到产品经理,最终到开发工程师,最少需要经历三次编码和解码过程。而信息的每一次传递都存在一些损失并带来一些噪音,这导致有些时候开发出来的产品完全对不上需求。此外,需求方和产品经理在需求可行性、系统可靠性,开发成本控制方面的把控比较弱,也会导致需求变形。

    第二个原因就是需求方完全没有想好自己的需求。

    优秀的架构师应该具备辨别真伪需求的能力。应该花时间去了解客户的真实业务场景,具备较强的业务抽象能力,洞悉客户的真实需求。系统的真正实施方是工程师,在明确客户真实需求后,高明的架构师应该具备准确判断项目对可行性、可靠性、可用性等方面的要求,并能具备成本意识。最后,由于需求与在线系统的紧耦合关系,掌握在线系统的各种细节也是成功的业务架构的关键。随着级别的提升,工程师所面对的需求会越来越抽象。承接抽象需求,提供抽象架构是架构师走向卓越的必经之途。

    市场上有一些关于如何成为架构师的书,大家可以参考。但是架构能力的提升,实践可能是更重要的方式。业务架构师应该关注客户的痛点而不是PRD文档,应该深入关注真实业务。掌握现存系统的大量技术和业务细节也是业务架构师的必备知识。

    项目管理能力

    作为工业时代的产物,分工合作融入在互联网项目基因里面。架构师也需要负责几个重大项目才能给自己正名。以架构师角色去管理项目,业务架构能力当然是必备技能。此外,人员管理和成本控制意识也非常重要。

    项目管理还意味着要有一个大心脏。重大项目涉及技术攻关、人员变动、需求更改等众多可变因素。面临各种变化,还要在确保目标顺利达成,需要较强的抗压能力。

    人员管理需要注意的方面包括:知人善用,优化关系,简化沟通,坚持真理。

    • 知人善用意味着架构师需要了解每个参与者的硬技能和软素质。同时,关注团队成员在项目过程中的表现,按能分配。

    • 优化关系意味着管理团队的情绪,毕竟项目的核心是团队,有士气的团队才能高效达成目标。

    • 简化沟通意味着快速决策,该妥协的时候妥协,权责分明。

    • 坚持真理意味着顶住压力,在原则性问题上绝不退步。

    成本控制意味着对项目进行精细化管理,需要遵循如下几个原则:

    • 以终为始、确定里程碑。为了达成目标,所有的计划必须以终为始来制定。将大项目分解成几个小阶段,控制每个阶段的里程碑可以大大降低项目失败的风险。

    • 把控关键路径和关键项目。按照关键路径管理理论(CPM)的要求,架构师需要确定每个子项目的关键路径,确定其最早和最晚启动时间。同时,架构师需要关注那些可能会导致项目整体延期的关键节点,并集中力量攻破。

    • 掌控团队成员的张弛度。大项目持续时间会比较长,也包含不同工种。项目实施是一个不断变化的动态过程,在这个过程中不是整个周期都很紧张,不是所有的工种都一样忙。优秀的架构师必须要具备精细阅读整体项目以及快速反应和实时调整的能力。这不仅仅可以大大降低项目成本,还可以提高产出质量和团队满意度。总体来说,“前紧后松”是项目管理的一个重要原则。

    项目管理方面的书籍很多。但是,提高业务架构能力同样重要。积极参与大项目并观察别人管理项目的方式也是非常重要的提升手段。

    团队管理能力

    不想做CTO的工程师不是一个好的架构师。走向技术管理应该是工程师的一个主流职业规划。团队管理的一个核心能力就是规划能力,这包括项目规划和人员规划。良好的规划需要遵循如下原则:

    • 规划是利益的博弈。良好的规划上面对得起老板,中间对得起自己,下面对得起团队。在三者利益者寻找平衡点,实现多方共赢考验着管理者的智慧和精细拿捏的能力。

    • 任何规划都比没有规划好。没有规划的团队就是没头的苍蝇,不符合所有人的利益。

    • 规划不是本本主义。市场在变,团队在变,规划也不应该一成不变。

    • 客户至上的是项目规划的出发点。

    • 就人员规划而言,规划需要考量团队成员的能力、绩效、成长等多方面的因素。

    市场上有很多规划管理方面的书籍,值得阅读。最优化理论虽然是技术书籍,但它是规划的理论基础,所以不妨多看看翻阅一下。从自我规划开始,多多学习别人的规划也是规划能力提升的重要手段。

    总结

    因为受邀去做一个关于“一边工作,一边学习”的分享,作者花了一段时间去思考和汇总学习方法论,接着每天不断地采集谣言并尝试解惑,再根据个人经验绘制出优秀架构师的能力模型,最后汇集成文。

    文章系统性地阐述了学习原则、分析了常见困惑,并制定明确学习目标,期望对工程师们的工作学习有所帮助。需要申明的是,文章内容挂一漏万,所谓的架构师能力模型也是作者的个人观点。欢迎大家在评论中分享自己在学习成长方面的心得。




    发现文章有错误、对内容有疑问,都可以关注美团点评技术团队微信公众号(meituantech),在后台给我们留言。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!

    展开全文
  • 流程合理化的重要性

    千次阅读 2007-12-16 17:21:00
    这周末我发现自己在前阵子陷入一种错误的唯心论中,认为只要培养起健康的团队文化,就可以做好开发,做好项目。从前面这半年的管理经验来看,这种强调团队文化思路下的确取得了一定成绩,但把这种思路放到更宏观的...

    这周末我发现自己在前阵子陷入一种错误的唯心论中,认为只要培养起健康的团队文化,就可以做好开发,做好项目。从前面这半年的管理经验来看,这种强调团队文化思路下的确取得了一定成绩,但把这种思路放到更宏观的角度来看就不行了。

    一、在小型团队中,成员个人业务能力的总和是提高团队业绩的主要矛盾。

    我分析了一下,之所以强调健康的团队文化,强调积极的工作状态,能在提高项目组业绩上有所成效,是基于以下几个客观条件为基础的:

    (1)小团队开发。
          小团队的沟通成本低,在项目开发中起决定因素的是每个成员的个人工作能力和工作状态,而项目组沟通协调水平被放在一个很次要的位置上。简单划个百分比,在整体业绩中团队成员的个人能力之和占40%,精神状态之和占40%,沟通成本和流程制度管理占20%。因此即使项目组用了最糟糕的流程、最低劣的团队管理方法,那这些额外开销也很容易被80%的单兵能力之和所掩盖。相反,如果在小团队开发中花大精力去规划合理流程、完善开发制度,而忽视了对个体的技术能力培养和精神关怀,收效会很微小,毕竟没有把握住事情的主要矛盾。

    (2)公司的流程本身设置不合理,相当繁冗
            公司也尝试了建立现代企业制度,规范化流程。但由于流程设置不合理,所以基本上被大家搁一边了,走流程就是在做样子。
            举个例吧,产品立项后,一堆人开会制定了产品需求的框架,就要我作为“软件需求代表”的角色写一份产品需求文档,我在内部OA系统上花了10分钟终于找到了软件需求文档模板,然后把需求涂写完(反正后面还会频繁修改的),找流程管理员教我怎么提交上去;过一会儿发现我还是“软件开发代表”,要对需求文档进行审核,我自己写的东西当然直接批“同意”了;然后一会儿有要求我作为“软件测试代表”进行会签,继续点“同意”,然后就是X总X总会签,一天下来全部签完了批准发布了;发布的时候却发现同个产品线上,两个不同产品的文档提交的目录正好相反了,这样的文档在批阅时都没人看,一路绿灯居然发布了!更有讽刺意义的是居然在随后的一次内审的时候都没报告这个问题。我试图发起一个变更活动,但在OA系统上误操作了一步,只好找来部门的流程管理员,搞不定;再打电话给公司的流程管理员,一并折腾了一上午才弄好。
            我的结论就是:按照不合理的流程做事,还不如凭借自己的逻辑来做更有效率。

     

    二、在大型团队管理中,降低沟通成本、提高沟通质量成为主要矛盾

            如果是50人甚至100人以上的项目团队呢?情况就变了。

            两个人相互传递思维和观点的时候,花费了时间和精力不说,所沟通的信息还会失真和损失,按照排列组合计算出来的团队成员沟通次数就可以看到次数是随人数呈几何级数递增的了。当团队足够大的时候,沟通质量和沟通方式的好坏就足以超越项目组成员的个人业务能力之和,对项目结果起到决定性作用。复制一下前文假想的百分比,在大型团队管理中,在整体业绩中团队成员的个人业务能力之和可能只占30%,精神状态之和占20%,沟通成本和流程制度管理占50%(这里百分比只是为了直观表示其重要度,而不具有统计意义)。这时候就需要合理化流程,并且保证流程的实施了。
     
           在拿需求变更来讲,假设没有流程可以遵循,那么按照最恶劣的情况来看,需求开发者A单独找工程师B1,要求立即增加某某功能需求,工程师B1花两天时间完成后,项目管理者C才知道这事,但由于工程师B1当前的任务和工程师B2,B3处于串行开发位置上,所以B1多花了这两天后,B2、B3又得多傻等两天;而B1开发完新功能后,由于没有提前通知测试人员D,所以缺乏测试例,必须再等一天后才可以测试该项新功能。当然这是一个非常恶劣和可笑的事情了,在这个过程中,由于需求开发者C的错误做法,导致整个项目至少增加了5人天( (B1+B2)*2 + D )。这还不算如果该项需求以后再次被修改或者撤消的情况。

            如果我们设计的流程是:需求开发者A提出新功能需求 -> 需求开发组每周对新需求进行评审,并和开发组确定新功能的实现难度/风险 -> 开发组每周更新工作任务,分配一周里各人的任务 -> 开发组通知测试组在下周会发布的新功能列表 -> 测试组制定测试例,编写测试代码 -> 下周新功能的代码发布后,可以立即开始测试。 上面是我按照常规逻辑设置的流程而已,但已经可以明显地避免上一段中出现的额外增加5人天情况。

     

    三、流程设计是为了找到做事的捷径

            把沟通成本最低、沟通质量最好的捷径设计为流程。让所有人按照捷径来做事。

            在前文中我提到了公司繁冗的流程。实际上我所接触的同事,几乎所有人都对这套流程很反感,认为这些流程不但起不到效果,而且浪费了团队成员大把大把的时间。当然,从无流程到有流程,肯定是增加了流程执行者单人的短期时间成本,但是却节省了团队的沟通成本,所以总体上是节省了团队整体的时间;最后的目的,也是减少了团队成员平均每人在整个项目中花费的时间。很早前我听到一句江湖传言“效益越好的企业,工作起来越轻松,效益越差的企业,越是要天天加班”,我到现在才似乎有点理解。

            但是如果流程不合理,或者流程没有被执行贯彻,都是管理者的问题。我觉得强制执行是取不到效果的,只有让大家体会到执行合理流程的效果,确实节省了工作时间,给每个人带来好处,流程才会被真正贯彻下去。

     

    四、持续地定期修改、优化并重新发布流程,保持流程的适应性和生命力

            只有动态变化的事物才有生命力,流程制定也是如此。
           
            市场环境是变的,竞争对手是在不断进步的,所以内部流程制定后不可能一劳永逸。从另一个角度来说,“沟通成本最低、沟通质量最好的方法”的说法本身就经不起推敲。这个世界上没有什么绝对的最好最差,只有相对的好坏,今天觉得最优化的流程,几个月的实施后可能就会发现需要修改。只有持续地定期修改、优化并重新发布的流程才能保持生命力;当然也不能朝令夕改,重新发布周期我觉得大中型团队每半年或每一年就可以了。我打听了一下厦门十大集团企业的情况,有一家做得很成熟的是每年重新优化和发布新流程;有几家在建设摸索阶段,会不定期地修改发布。

    --------------------------------------------

    我反思后终于知道为什么自己多年来不敢把团队扩张太大,而一直维持小团队开发了。说到底,我还是只掌握了“土匪式开发”的要领,也许存在即合理,土匪式开发在一定的作用域里业绩会比“正规军”开发更好,但是从长远来看,光强调个人能力、强调工作积极性,而缺乏流程建设,似乎带不动大型团队;没有大型团队又如何承担大型项目开发。貌似是该考虑流程建设的时候了……

    展开全文
  • 如何培养忠诚客户以及培养忠诚客户的重要性

    千次阅读 多人点赞 2020-07-01 21:56:38
    统计表明: 80%的高满意度在线客户会在两个月之内再次光顾; 90%的客户会将网络零售商推荐给他人; 87%的不满意客户会一言不发的永远离开他们的互联网销售商; (所以一定要做好CRM(客户关系管理)!!!) ...
  • 论测试用例的重要性

    千次阅读 2014-11-15 22:08:42
    网上查找了很多关于测试用例重要性的文章,答案都不尽人意要么太理论化了,让人看了显得生硬,看完一头雾水;要么太过时了(不知道停留在那个年代的认识)。笔者很想系统的认识一下测试用例,所以写了这篇文章: ...
  • 浅谈ERP数据的重要性

    千次阅读 2015-07-21 15:04:21
    影响一个ERP项目的因素有很多,数据无疑是其中很重要的一项,正所谓“正确的诊断源于准确的信息,准确的信息基于可靠的采集”,当我们抓住数据这个根基,大处着眼,小处着手的时候,我们距离ERP成功的日子就不会太远...
  • 游戏运营之数据的重要性

    千次阅读 2014-02-07 17:59:58
     作为一个市场人员,最重要的是要精确掌握每种营销方式的效果数据,据此你就不会随便的乱花投资人的钱,拍着脑瓜子挤出个idea就上一些价比不合适的广告了。   例如 有多少人能看到你的广告 其中有多少...
  • BOM表对于产品的重要性

    千次阅读 2009-06-15 13:21:00
     以上讲了一下BOM的重要性、产品型号和BOM版本的关系。后面的“制定日期”和“总的页数”这两项大家也都明白,“文档编号”只要企业采用ISO管理体系就会知道。 下面我来谈一下BOM的内容。  BOM中有 1. ...
  • 压力性能测试是软件测试当中非常重要的一部分,也是比较复杂,耗时的一个测试类型。如何提高测试效率,减少人工出错的可能是本文想要解决的问题。该解决方案利用了数理统计的方法,巧妙的解决了性能测试数据分析的...
  • 什么是网站的统计代码

    千次阅读 2019-08-05 22:04:40
    引言:一般网站做好了站长希望知道一天有多少人访问,通过哪些关键词来自己的网站等等 网站统计:是指通过专业的网站统计分析系统(或软件),对网站访问信息的记录并归类,以及在此基础上的统计分析,如网站访问...
  • 以互联网思维做好客户端软件

    千次阅读 多人点赞 2014-08-20 09:00:57
    不过,我今天并不想说在外企工作与国内企业的差别。目前,我负责“爱奇艺PPS影音”PC客户端软件的研发。也许有人会有疑问:怎么还在做PC软件?大家不都一窝蜂似的转去做移动开发了吗?然而,大家要明白的是,虽然PC...
  • 年终将至,不少人都在赶自己的年终报告吧? 身边有这样一位财务的朋友向我吐槽: ...工作量大,基础工作得有人做,重复工作多,尾大不掉,根本没有时间做分析。自己尝试做过费用、生产利用率分析,但因...
  • Druid (大数据实时统计分析数据存储)

    万次阅读 2016-12-18 09:48:14
    原文见此 : Druid White PaperDruid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个高级的索引结构,来达成在秒级...
  • 它通过模拟客户端行为,生产和消费数据并采集消息的延迟、错误率和重复率等性能和可用指标,来达到黑盒监控的目的。   Kafka的主要概念   在介绍Kafka Monitor功能监控之前,我们先了解下Kafka的几个主要...
  • 小怡教你正确使用百度统计

    千次阅读 2013-12-20 10:52:13
    百度统计提供几十种图形化报告,可以全程跟踪访客的行为。同时,和Google分析一样,百度统计也集成百度推广的数据,帮助用户及时了解百度推广效果并优化推广方案(Google统计集成的是GoogleAdWords)。  目前百度...
  • 统计报表测试

    千次阅读 2016-02-03 10:58:57
    报表功能的基本要求,就是通过查询/统计/分析,提供用户所需的准确的数据。如果无法实现这个基本功能,则报表完全失去意义。 对于用户来说,报表可以直接影响到他们的决策,例如可能因为报表对销售和库存情况反映的...
  • 如何正确的使用百度统计分析数据

    千次阅读 2013-12-23 14:43:02
    如何更好的使用百度统计的功能?小蚂蚁站长吧​结合网络上的信息和自己的经验总接了一下观点分享给大家。百度统计提供几十种图形化报告,可以全程跟踪访客的行为。同时,和Google分析一样,百度统计也集成百度推广的...
  • 如何做好报表测试?

    千次阅读 多人点赞 2019-09-04 18:12:43
    所谓的报表,就是在已有数据的基础上,经过各种加工、汇总,而呈现出来的数据结果,而报表测试则是鉴定报表的正确、完整、安全和使用质量的过程。不多说,直奔主题吧,下面就结合前人的经验...
  • matlab统计分析

    万次阅读 2017-06-20 19:33:19
    描述下性统计 中心位置度量,数据样本的中心度量的目的在于,对数据向本的数据分布线上的中心位置予以定位。 均值是对位置的简单和通常的估计量。但是野值(就会出奇的大或者出奇的小) 对于平均值进行定义 ...
  • 如何做好数据分析

    千次阅读 2019-04-30 12:02:18
    专业一点讲:数据分析就是适当的统计分析方法对收集来的大量数据进行分析,将他们加以汇总、理解和消化,以求最大化的开发数据的功能,发挥数据的作用。 那么,我们做数据 分析的目的是什么呢? 事实上,数据分析...
  • 做好DBA,做好SQLServer性能优化

    千次阅读 2011-09-05 14:16:19
    怎样查出SQLServer的性能瓶颈 --王成辉翻译整理,转贴请注明出自微软BI开拓者[url]... --原帖地址 如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个精密的科学。即使是,对于为最佳的
  • 如何做好用户运营

    千次阅读 2017-09-12 23:02:12
    新浪微博运营经理:如何做好用户运营这是一篇非常有实战价值的长文,作者为新浪微博运营经理金璞(@小妍)。:用户运营的核心,是把活跃用户的规模往上提,方式有两种:开源和节流,开 的是注册的源、节的是流失的流。...
  • 如何做好项目的需求与业务调研

    千次阅读 2018-12-12 10:27:22
    很多人认为调研工作极难,水平最高的人才能做好一次调研,软件工程中也强调需求获取是最难的事情。有的人要么认为不过如此,甚至是一个普通技术支持都可以做的工作。 现在有很多企业上管理软件之前都希望软件公司派...
  • 数据科学家-为大数据时代做好准备

    千次阅读 2013-03-13 09:56:38
    原文链接:为大数据时代做好...此外,像Hadoop这样能够在通用服务器上工作的分布式处理技术的出现,也使得对庞大的非结构化数据进行统计处理的工作比以往更快速且更廉价。 然而,就算所拥有的工具再完美,它本身是
  •  一、软件设计的重要性体现在以下几个方面:  1、软件设计在整个软件项目的建设中起着承上启下的重要作用。  从整个软件项目开发阶段来看,软件项目可以分为需求、设计、编码、验证四个阶段。设计承接需求分析...
  • 如何做好大型OA系统的需求分析?

    千次阅读 2009-04-21 15:38:00
    如何做好大型OA系统的需求分析? 2009-01-12 作者:铁在烧 来源:it168 OA(Office Automation)系统是广大企事业单位信息化建设
  • 理解Load Average做好压力测试

    千次阅读 2008-06-30 17:33:00
    编程的重要性。现在服务器的 CPU 都是多 CPU 了,我们的服务器处理能力已经不再按照摩尔定律来发展。就我上面提到的电话亭场景来看,对于三种不同时间需求的用户来说,采用不同的分配顺序,我们可看到的 Load ...
  • 软件测试工程师工作总结

    万次阅读 多人点赞 2018-04-18 21:02:05
    1、为什么要在一个团队中开展软件测试工作? 因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程...
  • 爬取国家统计局数据正式篇

    千次阅读 多人点赞 2020-06-21 11:50:34
    我们的目标是尽量爬取近20年所有的分省年度数据,并且按照国家统计局的父/子文件夹方式,把每一项数据写入excel文件中按指定的路径顺序排好。 这里代码不全部发出,会逐步讲解 首先导入requests(请求网站相应并打印...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,222
精华内容 19,288
关键字:

做好统计工作的重要性