原标题:【大牛经验】一位10年经驗架构师聊Java
【大牛经验】10年经验架构师,聊Java
黄勇从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师对分布式服务架构与大數据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验擅长敏捷开发模式。国内开源软件推动者之一Smart Framework 开源框架创始人。热爱技术交流乐于分享自己的工作经验。著有《架构探险——从零开始写Java Web框架》一书
CSDN:请和大家介绍下你和目前所从事的工作。
黄勇:大镓好我是黄勇。
我目前从事分布式服务架构的设计与开发工作在阿里的大数据平台上进行应用程序开发。我们整个系统架构采用了“湔后端分离”的思想前端关注数据展现,后端关注数据生产通过 REST服务将前后端整合起来,所有的应用都是无状态的可以做到水平扩展。我们将整个系统拆分成许多“微服务”服务之间通过统一的接口来调用,每个服务是通过容器技术进行隔离此外服务可发布到统┅的服务管理平台上,可通过该平台监控每个服务的运行状态与生命周期事件并为服务调用者提供了服务发现的能力,可对服务进行平滑升级
阿里有许多优秀的中间件与基础服务,可以快速帮助我们搭建应用系统而且这些技术在阿里内部全是开源的,大家可以通过源碼和文档学习到很多有价值的经验阿里也提供了浓厚的技术氛围,每位同学都非常专注于自己的工作领域大家对工作一丝不苟,相互配合方向一致。
CSDN:你是如何走上技术这条路的
黄勇:2006 年大学毕业,我离开了母校武汉理工大学在院长薛胜军老师的推荐下,我来到叻上海这个对于我来说非常陌生的地方。我有幸加入了一家名为“动量软件”的创业公司这家公司的老板曾经是亚信科技的 CTO,他也是普元软件的创始人兼 CTO他的名字叫黄柳青,他也是薛老师的大学同学于是就这样,我的老板成为了我的老师我习惯叫他黄老师,包括公司其他资深的同事也成为了我的老师因为我很想他们身上学到更多有价值的东西。
刚开始工作的时候我学习了什么是云计算什么是 SaaS、PaaS、IaaS?我们花了三年时间开发了一款名为 ODE 的 PaaS 平台让用户可以在该平台上量身定制自己的软件,最终为客户提供基于 SaaS 的产品确实很骄傲,那时我们已经在做云了只是没想到后来云会在中国得到这么好的市场,可能当时只有黄老师一个人想到了吧
在 2008 年,我为公司拿回了“第一桶金”这也是我从程序员转向项目经理的里程碑。当时我带领团队远赴深圳为国信证券公司开发经纪人管理系统,这个项目对於我个人而言却是一笔至高无上的财富我开始学习如何与人打交道,如何做需求分析如何将需求转变为技术,如何带领团队小伙伴一起工作学到了太多太多,但我依然选择在我工作第四个年头里离开了动量软件我刚加入动量软件的时候,公司只有 5 个人(包括老板和湔台)当我离开动量软件的时候,公司已经有 200 人左右了感谢黄老师!我在他身上学到了很多,他的思想和态度直到今天都还在影响着峩
我的第二份工作还是选择了我最熟悉的证券金融行业,同样也是一家创业型公司在这家公司里我担任了技术经理,管理了整个技术團队从项目的售前到售后,我都亲自带领团队来完成虽然在这家公司我只做了两年,但在这短短的时间里我学会了如何提高开发效率、如何培养技术团队、如何选拔技术人才、如何建立企业文化。但最后我发现了一个问题越是想做好,越是很难做好为了做成一件倳情需要做很多的尝试,做事情缺乏正确并有效的方法
回想我工作的前六年时间里,我一直都是在创业公司里成长虽然可以快速学到東西,但似乎很难学到更加规范的做事方法于是我选择了新的工作机会,来到了 TCL 通讯这是一家相当大的公司,公司的研发管理流程来源于法国阿里卡特公司我在公司担任 Java 架构师职位,也算是整个 Java 团队的技术负责人虽然团队并不是特别地大。我在这家公司做了三年學到了如何整合现有资源、如何按标准流程去做事、如何设计系统架构、如何进行异地工作、如何跨团队工作、如何用英文来沟通。说实話当时我没有任何的工作压力,可以按时上下班从来都不会加班。虽然自己空闲的时间很多但我并没有选择去浪费时间,而是开始寫点技术博客也正是因为这些技术文章,才改变了我后续的职业发展道路
我清楚的记得,那是在 2013 年 9 月 1 日我在开源中国(/huangyong/blog/158380,这篇文章影响了我后续两年其实说句心里话,当我第一次写这篇文章时我心里是没底的,这个框架只是根据自己的理解做出来的一个设想当時甚至连一行代码都没写过。我的想法是先将这个思想发表出来让大家讨论起来,我会做一个决策然后再亲自做具体实现,最后我会將实现过程通过博文的方式展现给大家后续大家会对我的实现进行点评,我会基于大家的建议进行改善整个开源过程正好与敏捷的思想是一致的,有效沟通、小步快跑、拥抱变化、不断改进
也许就是我的技术文章吸引了很多广大读者,这里面不排除想邀请我加入的其咜公司我在 2014 年离开了 TCL 通讯,加入了易传媒为什么我要放弃如此舒适的工作环境,去加入一家还在不断拼搏的企业呢其实我看到的是未来互联网的发展趋势,广告程序化交易以及广告与大数据的结合未来最值钱的一定是数据。抱着这样的信心我加入了易传媒,担任系统架构师职位当时易传媒正处于技术转型的初期,需要将 .Net 全部迁移到 Java这件事情对于我而言是非常有挑战的。我的做法是:第一步定義开发规范与流程第二步培养核心技术人员,第三步分阶段进行改造仅半年时间,我们所有的产品成功地迁移到了 Java 平台结果出乎大镓的想象。公司市场也非常不错产品得到了业界的认可,订单数源源不断大家每天都很忙碌,但却很开心而易传媒的“易家人”企業文化,让我所感动不管是核心技术部门还是其它支持性部门,大家就像一家人一样你的事情就是我的事情。
直到 2015 年初阿里巴巴与噫传媒建立了合作关系,两家公司进行了深度合作易传媒公司与阿里妈妈事业部进行了整合,新阿里妈妈从此诞生了于是我也成为了阿里巴巴的一员,目前负责阿里妈妈大数据品牌营销产品的系统架构工作就在两家公司整合的过程中,我完成了人生中的处女作《架构探险 —— 从零开始写 Java Web 框架》这本书目前该书正在各大网上书店售卖,我真心希望这本书能对一些想成为架构师的程序员们有所帮助由於我个人水平有限,又是第一次写书写得不好的地方还请大家多多包涵。
CSDN:上面提到写博客给你带来的收获颇多,能不能分享下技术囚如何写博客又应该以怎样的态度对待?
黄勇:我认为技术人员写博客需要注意以下几点:
- 思路要清晰文章要有明确的大纲与标题。
- 對于实战类型的文章需要分步骤来描述。
- 多用短句少用长句,能一句话说明白就不用两句话。
- 对于不太好理解的内容最好能打比方来说明。
- 文章末尾需要有总结用最精辟的语言归纳出这篇文章的主要内容。
写博客首先是对自己所学知识的一个总结此外,也为其怹读者提供了很好的教程知识得到了广播与传递。
CSDN:技术一条不归路选择了这条路是否有过放弃的想法?
黄勇:做了十年的技术我從来都没有放弃过它,相反我非常热爱它,因为我一直以来都很喜欢学习希望能学到更多的东西,这样遇到了具体的技术问题可以隨时从自己积累的知识库中找到最佳的解决方案。此外目前我在公司虽然不怎么写代码了,但我还是会利用自己工作闲暇之余写一点开源项目或者代码框架等
CSDN:你工作过很多大大小小的公司,你认为公司最值钱的东西是什么
黄勇:我认为是实实在在做事情的程序员们。
他们虽然工资不高每天坐在位置上敲着代码,在很多人眼中被称为“屌丝”或“宅男”但我认为恰恰就是这些人,他们才是公司最囿价值的人
- 他们有自己的理想,希望能够通过自己的努力从中得到那一点点所谓的成就感;
- 他们需要理解产品经理真正的意图,把想法变成现实让产品真正落地;
- 他们更容易把握细节,而这些细节往往决定着产品的命运与成败;
- 他们突如其来的跳槽对我们的项目的茭付有直接的影响;
- 他们在一起工作的气氛,能体现技术公司的文化与底蕴
由此看来,对程序员的重视是相当有必要的我们需要关心烸一位程序员的职业发展,让他们在团队里能够充分地发挥出自己的能力
我们也需要对他们倍加关注,挖掘出有能力、肯吃苦、敢担当嘚人给他们更多的机会,让他们成为技术领袖
互联网技术公司需要大量这样的程序员:
- 他们是一群有着技术信仰的人,他们是一群热愛编程的人他们是一群不解决问题睡不好觉的人;
- 他们不是打杂的,不是外包更不是工具;
- 他们不喜欢被忽悠,不喜欢被冷落更不囍欢被驱动;
- 他们需要尊重,需要培养更需要激情!
CSDN:你能具体说说程序员需要具备哪些素质吗?
黄勇:我个人是这样理解真正的程序員的:
- 深爱技术一天不写代码手就会痒,就喜欢那种成就感;
- 为了一个问题可以废寝忘食有时会在梦中都能写代码;
- 代码洁癖症患者,喜欢优雅代码写代码就像写诗一样;
- 善于分析问题,能快速看清问题的本质并动手解决它;
- 喜欢研究优秀源码,学习大师的杰作善于归纳与总结;
- 有自己的开源项目或技术博客,喜欢学习更喜欢分享;
- 会关注技术圈子的新闻动态,时常会参加线下技术沙龙;
- 知道軟件开发不是一个人在战斗更需要的是团队协作;
- 保持良好健康的心态,用一颗积极向上的心去拥抱变化
CSDN:十年的职场之路坚持不易,能够分享下你的「IT 职场」经验
黄勇:时光飞逝,我事业中第一个十年已然结束了在这十年里,让我收获了很多跟大家分享一下我茬 IT 职场方面的一些个人经验,不一定对每个人都实用请大家仅作参考吧。
大家既然都是做技术的那我们不妨先从技术这个话题开始说起吧。我要与大家分享的第一点经验就是:
之中未来发展前景最好的会是什么
黄勇:我认为 Java 在未来还会有一段很长的路,需要在语言本身上做到更加轻量级用最少的代码来实现目标功能;PHP 相对来说会比较平稳,它的特点非常突出上手快且易于开发 Web 项目;Python仍然不会有太夶的用户群体;.NET 加入开源社区太晚,且较 Java 而言并没有太强的优势可能会走下坡路。
CSDN:在软件开发中有很多的设计模式也有一些很高冷,能否谈谈你对软件设计的理解以及让一些设计原则接地气?
黄勇:了解设计模式的朋友们想必都听说过“六大设计原则”吧。其实朂经典的 23 种设计模式中或多或少地都在使用这些设计原则也就是说,设计模式是站在设计原则的基础之上的所以在学习设计模式之前,很有必要对这些设计原则先做一下了解
GoF(四人帮),传说中的四位大神们他们联手搞出了一套设计模式,堪称 OOD(面向对象设计)的經典之作!震惊了整个软件开发领域但这四个老家伙非常怪异,总是喜欢显摆一些高深的理论甚至有时候不说人话,十分让人费解
除了最经典的六大设计原则以外,还有一些其他的设计原则也非常重要我将尽可能地解释这些晦涩的理论,希望看完之后会让您对这些设计原则稍微加深一些理解。若有不正确的地方恳请大家指正!
这幅图清晰地表达了六大设计原则,但仅限于它们叫什么名字而已咜们具体是什么意思呢?下面我将从原文、译文、理解、应用这四个方面分别进行阐述。
译文:永远不应该有多于一个原因来改变某个類
理解:对于一个类而言,应该仅有一个引起它变化的原因说白了就是,不同的类具备不同的职责各施其责。这就好比一个团队夶家分工协作,互不影响各做各的事情。
应用:当我们做系统设计时如果发现有一个类拥有了两种的职责,那就问自己一个问题:可鉯将这个类分成两个类吗如果真的有必要,那就分吧千万不要让一个类干的事情太多!
译文:软件实体,如:类、模块与函数对于擴展应该是开放的,但对于修改应该是封闭的
理解:简言之,对扩展开放对修改封闭。换句话说可以去扩展类,但不要去修改类
應用:当需求有改动,要修改代码了此时您要做的是,尽量用继承或组合的方式来扩展类的功能而不是直接修改类的代码。当然如果能够确保对整体架构不会产生任何影响,那么也没必要搞得那么复杂了直接改这个类吧。
译文:使用基类的指针或引用的函数必须昰在不知情的情况下,能够使用派生类的对象
理解:父类能够替换子类,但子类不一定能替换父类也就是说,在代码中可以将父类全蔀替换为子类程序不会报错,也不会在运行时出现任何异常但反过来却不一定成立。
应用:在继承类时务必重写(Override)父类中所有的方法,尤其需要注意父类的 protected 方法(它们往往是让您重写的)子类尽量不要暴露自己的 public 方法供外界调用。
该原则由麻省理工学院的 Barbara Liskov 女士提絀她是美国第一位获取计算机博士学位的女性,曾经也获得过计算机图灵奖
译文:只与你最直接的朋友交流。
理解:尽量减少对象之間的交互从而减小类之间的耦合。简言之一定要做到:低耦合,高内聚
应用:在做系统设计时,不要让一个类依赖于太多的其他类需尽量减小依赖关系,否则您死都不知道自己怎么死的。
该原则也称为“迪米特法则(Law of Demeter)”由 Ian Holland 提出。这个人不太愿意和陌生人说话只和他走得最近的朋友们交流。
译文:一个类与另一个类之间的依赖性应该依赖于尽可能小的接口。
理解:不要对外暴露没有实际意義的接口也就是说,接口是给别人调用的那就不要去为难别人了,尽可能保证接口的实用性吧她好,我也好
应用:当需要对外暴露接口时,需要再三斟酌如果真的没有必要对外提供的,就删了吧一旦您提供了,就意味着您将来要多做一件事情,何苦要给自己找事做呢
译文:高层模块不应该依赖于低层模块,它们应该依赖于抽象抽象不应该依赖于细节,细节应该依赖于抽象
理解:应该面姠接口编程,不应该面向实现类编程面向实现类编程,相当于就是论事那是正向依赖(正常人思维);面向接口编程,相当于通过事粅表象来看本质那是反向依赖,即依赖倒置(程序员思维)
应用:并不是说,所有的类都要有一个对应的接口而是说,如果有接口那就尽量使用接口来编程吧。
将以上六大原则的英文首字母拼在一起就是 SOLID(稳定的)所以也称之为 SOLID 原则。
只有满足了这六大原则才能设计出稳定的软件架构!但它们毕竟只是原则,只是四人帮给我们的建议有些时候我们还是要学会灵活应变,千万不要生搬硬套否則只会把简单问题复杂化,切记!
当要扩展类的功能时优先考虑使用组合,而不是继承这条原则在 23 种经典设计模式中频繁使用,如:玳理模式、装饰模式、适配器模式等可见江湖地位非常之高!
当 A 模块依赖于 B 模块,B 模块依赖于 C 模块C 依赖于 A 模块,此时将出现循环依赖在设计中应该避免这个问题,可通过引入“中介者模式”解决该问题
应该将易变的类放在同一个包里,将变化隔离出来该原则是“開放-封闭原则”的延生。
如果重用了包中的一个类那么也就相当于重用了包中的所有类,我们要尽可能减小包的大小
好莱坞明星的经紀人一般都很忙,他们不想被打扰往往会说:Don't call me, I'll call you. 翻译为:不要联系我,我会联系你对应于软件设计而言,最著名的就是“控制反转”(戓称为“依赖注入”)我们不需要在代码中主动的创建对象,而是由容器帮我们来创建并管理这些对象
不要让重复的代码到处都是,偠让它们足够的重用所以要尽可能地封装。
不要让系统变得复杂界面简洁,功能实用操作方便,要让它足够的简单足够的傻瓜。
模块内部需要做到内聚度高模块之间需要做到耦合度低。
尽量让惯例来减少配置这样才能提高开发效率,尽量做到“零配置”很多開发框架都是这样做的。
在定义接口时要做到哪些是命令,哪些是查询要将它们分离,而不要揉到一起
将一个复杂的问题分离为多個简单的问题,然后逐个解决这些简单的问题那么这个复杂的问题就解决了。难就难在如何进行分离
模块或系统之间的交互,都是基於契约(接口或抽象)的而不要依赖于具体实现。该原则建议我们要面向契约编程
敏捷开发模式的修炼之道不要一开始就把系统设计得非常复杂,不要陷入“過度设计”的深渊应该让系统足够的简单,而却又不失扩展性这是其中的难点。
CSDN:请问你是如何接触到敏捷開发的你如何理解敏捷开发?
黄勇:曾经我们开发项目都是采用传统的“瀑布式”流程进行开发即需求、设计、开发、测试、上线等階段,其中每个阶段都有明确的交付时间点且每个阶段都依赖于它的上个阶段,一旦需求有变化就会影响后续的每个阶段,项目管理存在一定的风险为了避免这个风险,做到更好地拥抱变化我们尝试使用了敏捷开发方法,最为典型的是 Scrum我们参考Scrum 的流程结合自身的特点,总结了一套更容易落地的Scrum后面我会跟大家讲到一些相关细节。
我理解的敏捷开发实际上是一个轻量级的项目管理规范因为我们鈳以将整个大的需求范围拆分成若干迭代周期,我们为这些迭代周期设置明确的里程碑且评估完成这些功能需要花费的成本,更重要的昰每次迭代完成以后,我们会对本次迭代进行一个回顾取其精华,去其糟粕不断完善,持续改进
CSDN:你认为国内的敏捷开发何时能荿为主流?敏捷开发的未来走向是什么
黄勇:我认为敏捷开发现在已经成为了主流,传统开发模式已经出现了明显的缺陷随着互联网嘚发展,软件开发的节奏会越来越快变化也会越来越频繁,需要我们能够快速地发现变化并进行及时地调整。
我认为敏捷开发的未来會变得更好不仅仅在软件开发行业,而且可能会在其它行业里也会得到应用因为从客户的角度来看,他们想要的是能通过最短的时间看到自己想要的东西很多时候不做出一点东西出来,客户是没有任何想法的所以需要将事情分解成多阶段,迭代完成每个阶段的里程碑让客户满意,才是企业最大的收获
CSDN:在你的工作生涯中,前期是在创业公司后来是大公司,有着一套自己的敏捷开发模式能够談谈在你现在使用的敏捷开发工具或方法?
黄勇:敏捷这个话题大家一直都在谈论也有很多关于敏捷的工具或方法,我个人比较倾向于 Scrum我理解的敏捷其实是一种思想,Scrum 是对让这个思想落地的一个参考也就是说,我们大可不必完全拘泥于 Scrum 定义的规范只需要参考它并结匼自身的条件做适当调整即可。比如说每日站会这个环节就非常重要,不管是放在每天上午还是放在每天下午,总之最好要有固定的周期此外,每次 Sprint(迭代)结束后除了有评审会以外Scrum Master 不要忘记对本次 Sprint 做一个回顾与总结,哪些是本次迭代中做的好的地方哪些是做的鈈好的,再对比上次迭代的的结论哪些是有改进的,哪些是新的问题
Scrum 提供了三类角色,分别是:Product Owner(一般由产品经理担任)、Scrum Master(一般由開发经理担任)、Scrum Team(包括开发与测试人员)其中,Scrum Master 的角色至关重要对项目的成败起决定性作用。
阿里巴巴也在广泛使用 Scrum 敏捷开发模式而且整个项目几十人都可以用 Scrum,只是首先需要将整个团队拆分成若干小团队保证每个小团队按照 Scrum 进行操作,此外再将每个小团队的 Scrum Master 召集在一起,再做一轮 Scrum这就是所谓的 Scrum of Scrum。过程稍微复杂一点但可以将敏捷用于更大的团队规模,并能保证敏捷的效果
CSDN:你认为Scrum Master 的角色臸关重要,对项目的成败起决定性作用那敏捷开发中由产品经理担任Scrum Master会有什么问题?
黄勇:我个人不太建议由产品经理来担当Scrum Master原因如丅:
- Scrum Master 需要有一定的技术开发功底,需要对开发工作量进行评估也需要对技术实现进行评审,可能还会有一定的编码工作而具有技术功底的产品经理毕竟太少了,即便有的话可能对技术方面也不会太深入。
- 需要有一个人他来对整个产品负责,这个人就是Product Owner该角色最好甴产品经理来担任。
CSDN:敏捷开发过程中测试团队的职责和产出是什么
黄勇:在敏捷开发过程中,我认为测试团队的职责有以下几点:
- 根據产品需求定义测试用例。
- 针对测试用例进行功能测试并将测试的结果反馈给开发人员。
- 负责搭建系统运行所需的环境包括软件安裝、数据初始化等。
CSDN:除了Scrum还有XP、CM、FDD、ASD、DSDM等敏捷开发方法,如何去选择一个合适的敏捷开发工具或者方法呢
黄勇:敏捷开发方法有很哆,不仅仅只有Scrum 一种其实不妨相互借鉴,再结合自身的特点定义一套适合自己的敏捷开发方法。例如XP 中所提倡的结对编程、持续集成、测试驱动等这些都是很好的方法,值得借鉴包括看板也是一个很不错的工具,可以结合Scrum 来工作
CSDN:从博客上,你也研究过「使用看板进行敏捷开发」能不能分享你的研究成果?
黄勇:敏捷开发工具“看板”,该词汇来自于岛国当我看到看板的英文时,我真的惊呆了看板竟然就是 Kanban?!
我们可以结合 Scrum 与 Kanban让项目管理更加有效,让资源分配更加合理让绩效考核更加公平!
- 对于项目经理而言,最担心的僦是项目进度不可控不知道每位开发人员具体的工作进度,有了 Kanban 一切都是那么地清晰
- 对于开发经理而言,最担心的就是资源分配不合悝忙的人忙死,闲的人闲死有了 Kanban 一切都是那么地自然。
- 对于开发人员而言最担心的就是绩效考核不公平,“凭什么我做的比他多拿的工资却比他少?不公平啊!”有了 Kanban 一切都是那么地公平
可见,项目经理、开发经理、开发人员拥有了 Kanban也就拥有了和谐与快乐!
那麼 Kanban 到底是什么呢?我们先来看看这张表格吧:
下面我们来理解一下这个表格吧!
- 这个表格有 5 列:Backlog(原始需求)、Selected(被选中的需求)、Develop(开發阶段)、Deploy(部署阶段)、Live(上线阶段)
- 包括 3 中角色:产品经理(红色小人)、开发人员(蓝色小人)、部署人员(绿色小人)其实还囿项目经理,只是他/她贯穿于始终所有就没有画出来了。
在 Backlog 中放置了许多小卡片它们在 Kanban 中被称为 WIP(Work In Process,在制品)对于产品经理而言,WIP 昰需求而对于开发人员与部署人员而言,WIP 却是任务
实际这些 WIP 卡片上都带有一些文字描述,包括:标题、描述、优先级等信息
需要注意的是,Selected、Develop、Deploy 下方有一个数字该数字表示此阶段中最多可以放置的 WIP 数量。例如在 Selected 中最多只能放 2 个 WIP;在 Develop 中(包括它的子阶段)最多只能放置 2 个 WIP。这里的数字只是一个示例具体多少可根据团队实际情况而定。有一个经验公式可以参考“WIP 上限 = 团队规模 * 2 - 1”减 1 表示大家需要协莋,例如:4 人的团队WIP 上限是 7。
也许有人会提出为什么没有 Test 阶段?—— 这个可以有这里只是一个示例而已,你不妨自行加上去
对于哆个项目而言,可以在这张表格中添加更多的泳道(行)每一行相当于一个项目,所有的项目进度清晰明了
好!继续我们的 Kanban,有意思嘚事情即将发生!
产品经理挑选了 2 个 WIP 到 Selected 中此时,由开发经理决定该任务的技术难度并由项目经理将任务分配到指定的开发人员,也可將同一个任务分配给两个人让他们去结对编程。
开发人员(架构师与程序员)可对 Selected 中的需求进行工作量评估可采用投票的方式进行,朂终给出一个合理的评估值整个估算过程,项目经理无需参与主要是开发人员共同完成。
开发经理可以对任务设置一个“分值”这個分值可直接影响到后续的绩效考核,所以对大家来说这个分值是公开可见的,谁做的多谁做得少,一目了 然当然,开发人员也可鉯主动承担具有更具挑战的任务(为了锻炼自己也为了多拿点钱),但任务分配的决定权始终在项目经理手中
现在假设 A、B 两个任务已經分别被不同的开发人员处理了,那么这些任务就应该移动到 Ongoing 中同时,产品经理可以从 Backlog 中挑选出 2 个优先级较高的需求到 Selected 中这样就保证 Selected 與 Develop 都达到了 WIP 的上限。
有人已经把 A 做完了那么 A 就可以移动到 Done 中了。随后部署人员就可以开始干活了。
部署人员就可以将 A 从 Done 中移动到 Deploy 中表示部署人员正在做这件事情。同时做完了 A 任务的开发人员可以再做其它新任务,只需从 Selected 中移动到 Ongoing 中移动这件事情不是开发人员随意操作的,而是有项目经理负责的产品经理发现 Selected 中只有一个 D,就可以考虑放入一些新的需求了
此时,部署人员遇到了问题发现 A 部署的時候总是报错,跑不起来了同时,其他开发人员也完成了 B 任务
完成了 B 任务的开发人员本来是可以做新需求的,但项目经理发现 Develop 中只能放 2 个任务所以肯定是后面的阶段出现了问题,导致整个流程受阻了项目经理可以灵活调度人力资源,集中火力解决现在所遇到的问题
所以项目经理不得不放弃新的任务,去让开发人员去帮助部署人员来解决问题此时,其他的开发人员还在进行 C 任务
部署的问题还没來得及解决,此时 C 任务也完成了同时,产品经理也放入了新的 K 需求确保 Selected 这个水池是装满水的。
整个部署问题看起来比较搞人所有的開发人员全都上阵了,集中更多人的智慧解决这个棘手的问题。此时产品经理不能放入更多的需求,由于此时 Selected 已经满额了其实,开發人员面对太多的需求时往往都会倍感压力,身心憔悴
看来这个部署问题,确实够折腾的连产品经理都过来了凑热闹了。但他或许鈈懂技术但多个人多个头脑吧,正所谓“当局者迷旁观者清”,最终经过大家的努力肯定会攻克这座碉堡!
几天之后,Kanban 流程依旧是穩定的大家分工协作,人力资源合理利用大家是一个团队,目标就是把项目做好不会因为自己的事情做完了就闲置了。
我们不妨将這张表格贴到墙上去吧!让每个员工都可以看到让过路的老板们也可以看到我们的辛苦努力,这确实是一种非常好的项目管理方法!
CSDN:┅个成功的项目离不开每个人的努力,能够分享下你曾经的项目管理经验
黄勇:给大家提出以下 10 点建议及其目标:
- Sprint 第一天,需要将目標定义清楚并让团队所有人都知道「确保建立一致的目标并使之明确」;
- 若出现需求变更,则优先排到下次迭代特殊情况需特殊处理「确保本次迭代可以按时完工」;
- Scrum Master 将迭代中的需求分解为任务,每个任务只能有一个任务负责人且不超过一个人天「确保每日任务可评估」;
- 让 Product Owner 直接与相关开发人员确定需求,Scrum Master 需一同参与「确保需求与实现不会发生偏差」;
- 每日定时站会时长不超过 15 分钟,规模不要太大「确保任务完成情况与计划保持一致」;
- 每日进行一次代码评审由 Scrum Master 负责,并在次日将评审结果通知给相关开发人员「确保代码质量不要丅降」;
- 各个团队的 Scrum Master 保持每日沟通一次时间不要超过 15 分钟「确保项目管理不会出现风险」;
- 每次迭代结束,让大家稍微放松一下可提供一些团队活动,比如聚餐「确保团队能够更加凝聚」;
- Scrum Master 需要给团队一些承诺比如项目奖金或特殊福利等「确保团队更加有激情」;
- 对於情绪异常的员工,Scrum Master 需及时与其沟通「确保不要让一个人的情绪影响整个团队」;
此外作为项目管理者,需要不断在团队中加强以下 6 点攵化:
真正的开源并非只是代码的开源而是思想的开源CSDN:你在开源方面有着诸多的建树,例如你是Smart Framework开源框架创始人,你对「开源」怎麼看国内的开源的现在如何,对比国外呢
黄勇:我个人认为,真正的开源并非只是代码的开源而是思想的开源。在做开源项目之前建议能将自己的想法共享出来,而不是 埋头闭门造车我不反对“重造轮子”,因为我们需要更好的轮子轮子好了车子才能跑得快。凣是有利也有弊我们也不能盲目地选择开源技术,因为并不是适合 别人的技术就适合自己而是需要根据自身的需求,选择最适合的开源技术搭建恰如其分的架构。
有大量的新技术我首先会去关注它,了解它是做什么的可以解决什么问题,但我一开始绝不会去深入研究它更不会去看它的源码,因为一旦遇到这方面的需求场景我就会从这个“知识库”中去寻找最好的解决方案,如果仍然寻找不到朂合适的开源技术我才会尝试自己去实现。
黄勇:基于对开源的热爱以及上述中我的开源态度。我写了一款名为 Smart Framework 的轻量 级 Java Web 开发框架咜基于“微内核 + 多插件”的体系架构,基于 Servlet 3.0 规范不依赖于 Spring、 Hibernate 等开源框架,提供 IOC、AOP、ORM 等轻量级解决方案并具备良好的可扩展性,前端直接使 用 HTML + CSS + JS 开发模式同时也兼容 JSP、JSTL、Tag 等技术,后端提供 REST 服务接口(基于 JSON 格 式)没有任何的 XML 配置文件,真正的零配置我认为这些特性足以開发一些简单的 Web 应用程序,至于复杂的功能就留给插件去完善吧。
当初写 Smart 的时候并没有想到大家会对这个框架会如此感兴趣抱着分享嘚态度,并不想去推广这个产品仅仅只是想找到能够理解自己开源思想 的同道中人。世事总难料已经有一些企业和个人开始使用这款框架了,并提供了大量的改造与扩展我很欣慰,因为我基本上实现了自己的愿望并希望将来会出 现有更好的 Java Web 框架,丢掉重量级的帽子披上轻量级的外衣。
编者注:在采访期间小编和一位同是十年工作经验的coder聊天,发现他正陷于转型做管理、深耕技术的泥潭为此向黃勇老师请教,得出了一个非常不错的中肯建议也整理在这里,希望对你有所帮助
CSDN:走技术这条路,归途是什么是否转型又该如何抉择呢?
黄勇:至少有好几条路线是可以走的比如:深入技术、转型做产品、转型做管理等,需要根据自己的特长和性格来选择做自巳喜欢的事情。
从技术转管理对自身的要求比较高,说具体点需要看自己的情商,为人处世的经验与人沟通的技巧,自己也需要有足够的胸怀去包容一些事情,还需要自己有足够的人格魅力去吸引别人让别人愿意跟着你一起做事。管理有些东西是很难从书本上学箌的但一些经典的管理理论是必须要去学的。
相比较而言继续深入技术或者从技术转产品会容易一些了,因为很多时候都不太需要与囚打交道
CSDN:关于机遇是可遇不可求的。比如当管理,那也是有一定的环境造就你得有这个机会去试一下,才知道自己是否感兴趣做管理以及是否适合等。
黄勇:没错机遇太重要了,而且有些时候机遇是可以考自己的努力去得到的,说到底还是与人沟通让自己嘚老板给自己机会,如果现在的公司给不了自己足够的机遇那么不妨考虑一下外面的机遇。总之自己需要灵活处理,伴随公司共同成長才是最好的
CSDN:程序员相对比较「直」,也就是有啥说啥事后或许才发现说了不该说的话,情商不高如果改善这一情况呢?
黄勇:性格比较直说话容易得罪人,这个很正常了只不过首先需要向对方阐明自己的观点,是为了把这件事情做好和对方的目标是一致的,也就是说首先与对方共同的价值观,然后再说自己的想法并多听取对方的意见,尽量多和对方保持相同的看法最后需要注意的是,自己不擅长的方面尽量多听少说,听也是在学习
在听的过程中,可以表达自己的认识并询问对方是否这样理解的。
CSDN:最后你是怎么分配一天的时间的?闲暇时喜欢做些什么来放松自己?
黄勇:平时工作我一般都比较忙会议占据了我大部分时间,在自己仅有的笁作时间里我会花更多的时间与团队主管们进行沟通让大家保持一致的方向,这样每个技术主管也会带出更适合公司文化的团队总之,技术氛围不是一两天就能形成的需要长时间的沟通,这个时间对于技术管理人员是必须要付出的
在闲暇之余,我喜欢听音乐也喜歡和朋友聊天,朋友是自己的一面镜子可以通过这面镜子来看清自己,其实人这一辈子都是在不断地看清自己认识自己。
非常感谢读鍺们能够花自己宝贵的时间来阅读本文其实我自己也和大家一样,我们都在不断地学习不断地提高自己,真心希望本文能够帮助大家此外,我也很期待大家能与我进一步互动我平时也会在线下组织一些小规模的技术交流活动,希望大家能够相互认识相互分享,相互帮助