自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 《工程师个人发展指南》已上线

《全面效能》聚焦的是包含个人职业发展和自我发展、如何平衡工作与生活,以及如何提升个人与团队的效能的,是综合性相当强的一本书。我在学习平台已上线了一门名为《工程师个人发展指南》的课程,帮助工程师打好专业发展的基础。

2024-04-10 09:25:08 143

原创 《专业嵌入式软件开发》重新上架

书已重新上架了天猫上的电子工业出版社旗舰店,请前往下单购买。这个版本修订了之前所发现的所有错误,同时代码的背景色也调得更淡了,这样阅读体验没有了之前因为太黑而带来的压迫感。谢谢读者的认可与厚爱!得知不少企业将之当作是内部的推荐书,我感到万分荣幸。

2011-12-16 22:05:10 7134 14

原创 高质量软件架构的唯一核心指标

我们并不担心软件的不完美,但担心软件演进时因为泥泞而缓慢。

2022-07-03 21:38:41 894 1

原创 中国软件,从繁荣走向文明

文明的中国软件行业,需要企业承担起国家责任,也需要个体承担起提升职业素养的责任和家庭责任。

2022-04-29 07:09:44 7283 28

原创 ∞关系改善模型:彼此同频自我改变才是出路

解决关系问题很容易陷入对错之争、你变还是我变的零和博弈困境,让人越是想解决问题却越陷越深,乃至绝望地让人看不到希望。

2022-04-08 14:02:41 1077

原创 POG个体成长模型:痛苦是成长的起点

虽说每一个体及其成长路径都独一无二,但我相信从更高的抽象层次上有一定的范式可循,这是提出POG模型的根因。

2022-04-08 13:41:52 5093 8

转载 热度居高不下的云原生,如何撑起架构的未来

【注】本文是我和同事在 InfoQ直播的文字稿,最早发布于 InfoQ。软件架构发展至今,经历了从单体架构、垂直架构、SOA 架构到现在的以微服务、服务网格等云原生技术为主的演变过程,云原生技术发展势不可挡,老生常谈的“云原生”将依然会是未来的热门话题。而且随着数字化转型加速,企业对于云的使用将会达到新的水平,云原生架构和云原生应用也将会持续迭代演进。那么在云原生等技术的加持下,2022 年的架构领域有哪些值得关注的趋势?云原生如何撑起架构的未来?本期直播,阿里云 MSE 负责人李艳林(彦林)、阿.

2022-01-28 17:10:45 372

原创 聊聊工程师思维

聊一聊工程师思维为什么想到写这篇文章?作者是想通过对工程师思维的分析和解读,让工程师能正确对待那些在现实工作中看上去与本职岗位无关,却对团队效能影响极大的一些点和一些事。在社会分工的背景下,软件行业的工程师群体被划分成了开发、测试、产品等诸多岗位,以协作的方式共同完成价值创造。高度依赖软件的互联网行业正以全新的方式改善着人们的生活,同时在改善的道路上对价值创造的效能提出了更高的要求,而背后...

2018-10-21 11:20:12 3928 1

原创 『细节』是什么

图片来自网络,作者不详只要是职场人士,谈及『细节』二字估计很容易让人联想到『细节决定成败』这句话。由于这句话无人不知、无人不晓,以至于容易将『细节』误以为是口号。就我在工作中的感受,发现确实大多数人是将『关注细节』当作是口好。正因如此,我想借这篇文章与大家探讨一下我所理解的『细节』究竟是什么。首先,『细节』代表态度——将工作做到位。『做到位』与『做完』是全然不同的工作水准,前者包含后者但比后者有更

2015-09-05 10:51:38 8062 8

原创 打造高质效的技术团队 —— 酝酿篇

入职半年后的2013年6月份左右,淘宝浏览器团队和搜索团队被剥离出阿里巴巴集团,成为阿里巴巴与UC优视所成立合资公司——广州神马移动信息技术有限公司——的主体。在合资公司正式成立之前,主管在一次与我的面谈中告知“我们得成为一家小公司的一部分,且可能要重新基于Chromium的最新内核开发新的浏览器”(注:“新的浏览器”正是指现在的“UC浏览器电脑版”)。当听到这一消息时我非常高兴,因为看到这是一个

2015-03-01 09:41:43 3915

原创 打造高质效的技术团队 —— 混乱篇

2012年平安夜,我离开工作了近十年的通讯行业投身互联网行业,入职了当时阿里巴巴旗下的淘宝浏览器开发团队。过去的两年,这个团队完成了从淘宝浏览器过渡到UC浏览器电脑版开发团队的巨变。之所以说是巨变,是因为整个开发团队的工作方法、工作质量和精神风貌在过去的两年发生了翻天覆地的变化。在这个过程中,我作为“领头羊”引领着开发团队向前发展,并在最近有机会成为了带领包含开发和测试在内的整个技术团队继续向前发

2015-02-02 20:04:38 6033 12

原创 【人在职场】能力与价值

最近给团队(指#UC浏览器电脑版#开发团队)分享了我的《基层技术管理原则》。在我所秉承的八大基层技术管理原则中,有两个分别谈及了个体的能力与价值,我想通过这篇文章让更多人了解我对这两个概念的理解,希望能给读者带去一点有价值的思考素材。首先,我想给出我对于个体能力的理解,即“能力 = 技能 x 工作好习惯 x 意识”。技能的重要性无需多言,他决定了我们能走上怎样的工作岗位,甚至直接决定能拿多少薪水。

2014-08-31 10:38:47 7961 9

原创 技术管理的核心内容——提高团队技能

最近与同事聊天,从软件质量保证的方法论谈论到了技术管理。技术管理的内涵到底是什么?在此通过这篇文章做一个小小的总结和适当的外延。 技术管理给人的感觉更多是工作量评估、项目计划、项目进度跟踪等,但这只是技术管理工作的一部分。大体上,可以将技术管理分为两个纬度,如图1所示。 图1 纬度之一就是项目管理,其中包括项目计划、风险管理、预算管理等。对于基层技术管理者,更多涉及的内容是工作量评估、项目计划、项

2014-07-15 11:11:43 5935 1

原创 打造敏捷的自组织团队

敏捷思想的出现让我们看到了新的曙光——以更低的风险、更高的效率开发出更具质量的软件产品。正因如此,敏捷方法得到了业内足够的重视并使各路团队相拥实践。然而,即便我们对于各种敏捷原则、范式、方法和流程了如指掌,仍会发现其所给组织带来的改善远达不到我们的预期。这究竟是为什么?造成这种困境的根源并非我们学得不精,而是实践不到位。在我看来,敏捷宣言过于简单(好吧,是宣言总得简单一点!),以至于足以让人对之产

2014-06-29 16:49:27 8526 3

原创 写给同事的一封信

亲爱的同事, 转眼我在这个团队工作已有一年的时光,这一年也完成了我从通讯行业转入互联网圈的过渡。过去的一年给了我很多观察(团队)的机会,也带给了我不少思考,从我过去一年的寥寥几篇博文你应当能看到部分。 今天,我想借这篇文章与大家聊一些内容,以便你更加明白:为什么我在工作中对自己和大家的要求都那么高?为什么我强调责任与重视培养工作好习惯?为什么我会直接批评和积极表扬人与事

2014-01-05 17:12:20 14664 14

原创 做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱用标点的问题;我会因为设计的取舍与人激动地争论;诸如此类。当然,我更会较真于会议上达成的共识却得不到实施的问题。有人不免奇怪,你丫都快四十岁的人了,怎么还这么菱角分明地较真!好吧,那我就来说一说为什么要较真,且何以一直较

2013-08-20 22:13:56 8458 17

原创 让我们区分质量保证与测试

概念与思辨深度一个行业的发展似乎总伴随着更多的概念被塑造出来。拿测试来说,我们有单元测试、集成测试、系统测试、回归测试、冒烟测试,等等。我们缘何塑造如此多的概念来“为难”自己呢?答案可以用我从@李智勇SZ老师那学到的“概念越纯粹表示思辨深度越深”这句话加以解释,而这一切又为了提高同行间的沟通效率。需要特别指出的是,多个相似但不同的概念想表达的是各自的不同之处,而非共同之处。为此,如果人家在讨论单元

2013-08-07 12:42:33 4502 5

原创 对软件测试团队“核心价值”的思考

之前曾写过《软件质量管理的困境与对策思考》,在其中谈到开发部门与质量管理部门(QA)应形成一个有“交集的双环”而非“哑铃型”组织,也指出软件质量管理应重实践轻量化,其目标应是帮助工程师改善工作习惯和提升开发环境的效率。那时并没有认真地思考过测试团队的核心价值,直到读到@段念-段文韬老师的《测试团队与咖啡店》。通常,软件开发团队似乎几乎不谈论自己的“核心价值”,而针对测试团队总有对该问题的特有思考是

2013-08-05 22:11:44 9771 2

原创 如何做好基层技术管理工作?

最近有朋友与我探讨了软件基层技术管理工作方面的话题,借此从动机和方法两方面谈谈我的看法。动机要做好基层技术管理工作,首先要确保自己有良好的动机,即明白自己为何要走上技术管理岗位。做管理的根本是为了获得权力,但获得权力的动机却存在很大的差别。第一种单纯是为了利己。有相当数量的人往技术管理岗位“挤”,是为了获得以后在工作中可以少做或挑做工作内容的权力;也有的人是为了更快、更多地获得公司动向的资讯,以体

2013-07-26 23:00:27 7714 7

原创 中国软件开发工程师之痛

在近期的一次会议上,有高层谈到之前在中国觉得自己做得很牛,但与美国同行接触后却发现与人家存在很大的差距,这一点我在外企工作时也有过同样的体会。真正与外国同行接触后才会知道什么是差距,在这篇文章中我从软件开发工程师的角度以“痛点”的形式来谈一谈我所认为的差距。技能之痛相当数量的软件开发工程师(后面简称为工程师)认为除了与编码相关的内容外,其他技能都不重要。在这种意识的引导下,很容易出现的一个...

2013-07-23 08:28:57 20115 62

原创 【Chrome】如何在C++中增加给JavaScript调用的API

本文示例说明了如何在Chrome浏览器中增加JavaScript API。为了简化,先假设是在已有的namespace中增加一个新的API,文章的最后将指出如果增加一下全新的namespace所需注意的事项。在继续之前,请确保你的Chrome浏览器中已安装了一些扩展程序。可以在地址栏中输入chrome://extensions查看已安装的扩展程序。下图示例说明了我的浏览器中已安装了Google M

2013-07-17 09:52:54 7298 2

原创 【编程好习惯】减少搜索头文件的目录数

假设存在下图所示的项目目录结构。如果存在如下包含头文件的代码,则大多的项目中需要通过“-I foo”和“-I bar”指明两个搜索头文件的目录。12foo.c#include "bar.h"12bar.c#include "foo.h"然而,当项目规模很大存在很多的目录时,这种方式将显著地降低项目的编译速度。因为“-I”选项使用得越多,意味着编译每一个C文件时所需进行头文件搜索的目录也越多。为了避

2013-07-16 11:20:02 3669 1

原创 通讯与互联网行业软件项目运作的一些不同

最近在工作中体会到了互联网行业在软件开发项目运作中与我以往在通讯行业时的一些不同,特此分享。首先,两者在需求捕获方式上有很大的不同。在通讯行业中,初始需求是由象3GPP这样的标准化组织所制定的,但通讯产品在各版本中所实现的需求是由各运营商向通讯企业提出而得以确定的。产品经理(Product Manager,通讯行业的叫法)与系统架构师在需求的确定过程中起着重要的作用。与之不同的是,互联网行业由于产

2013-06-05 10:11:56 4566

原创 【Chrome】RSA算法在扩展程序中的运用

RSA算法在Chrome的扩展程序中被用于对其.crx安装文件进行签名和生成ID。下面让我们逐一了解其技术细节。在继续之前,请注意一点,文中对于Web Store的技术细节是基于Chrome浏览器的角度通过一定的测试而推测出来的,要彻底地了解Web Store的细节并不能仅通过本文。 扩展程序的安装文件有两种生成方式,一种方式是由扩展程序的开发者在开发的过程中生成,另一种是通过Goo

2013-05-27 16:03:28 5230 2

原创 离开通讯业入职互联网圈的一些感悟

去年年底,我离开了就职了近十年的通讯行业,加入了淘宝(中国)软件有限公司从事淘宝浏览器的软件开发工作,至今已有好几个月了。在过去的这些日子体会着互联网行业的不同,也让我逐渐地理解加入该行业前的一些疑问。下面,我就自己的一些感悟做一点分享,由于个人经历有限,所以局限性难免。首先,理解两个行业软件产品的运营特点具有非常重要的意义。通讯企业(指通讯产品制造商,后同)的产品是卖给象中国移动这样的运营商的,

2013-05-24 20:24:48 8237 2

原创 软件技术发展的驱动力

软件产品的终极目标是为了实现用户需求从而满足人们的需要。也正是为了不断满足人们的需要使得软件行业不断向前发展。比如,新的算法(MPEG-1、MPEG-2、MPEG-4、H.264、……)等的出现都在当时为了满足不同的需要而被发明。然而,人们的需要(行业发展的外部动力)却并非是软件技术发展的唯一驱动力,因为它无法解释为什么业内的编程语言、软件平台与框架等会层出不穷,有的甚至给人“重新发明轮子”的感觉

2012-12-03 16:23:44 13302 10

原创 软件质量管理之困境与对策思考

相信在不少与软件开发相关的企业内,质量管理部门与软件开发部门在日常运作中形成了如下图所示的“哑铃形”组织结构。  开发部门执行质量管理部门所制定的流程,通过提供证据的形式将各种流程执行后的数据反馈给质量管理部门(包括缺陷率和各种流程记录),质量管理部门根据这些数据监督流程的执行效果,并适时修订流程。联系两大独立部门的,是单薄的两条线和一些部门间的会议。理想情况下,在质量管理部门与软件开发部门间形成

2012-11-14 21:48:36 10304

原创 走技术线,还是技术管理线?

最近因为要给刚毕业的学生做一次演讲,所以就职业发展这类话题先以写博客的形式做一些思考,希望届时能给同学们带来质量更高的内容。我在《驾驭你的“职场布朗运动”》一文中谈了25条职场感悟并提出了“走技术线,还是技术管理线?”这一问题,但实际上并没有给予解答。在此补上。在正式解答这一问题之前,我想先强调职业发展的“黄金期”。每个人的职业发展我认为大致会经历“黄金期”、“平缓期”、“突破期”和“衰退期”,如

2012-11-11 19:34:06 32487 32

原创 驾驭你的“职场布朗运动”

在我的博客空间内,不时会有在校学生就职业发展和学习方面的内容向我寻求帮助。同学们由于初入社会没有行业经验,加上在校所学内容又广(但不深),所以在择业方面很容易产生困惑。在择业观上,他们希望找到一个将来有前途的行业,也希望在“是选择大公司还是小公司”这类问题上有人给予参考意见,也有人担心自己的学历对将来职业发展的影响。另外,在我的工作中,也不时会有同事就自己的职业发展与我探讨。他们几乎都是对技术很

2012-11-03 19:18:25 17409 24

原创 编程思维训练(一)

最近以提问的形式发了几条关于编程思维的微博,有的获得了粉丝的响应,有些却无人问津。今天突然想到可以将我对这些问题的思考整理成一篇博文,以便与大家分享。另外,我计划以“编程思维训练”为名写一些系列文章,希望通过这类文章与读者分享我在编程活动中的一些思考。问:有一对内存管理函数MemAlloc和MemFree,使用形式分别是:分配时为“void *p = MemAlloc (6)",释放时为“

2012-10-18 20:49:23 10553 1

原创 软件工程师所需掌握的“终极技术”是什么?

最近,我在微博上看到@程序员邹欣老师发的一条微博 — “不少大学同学都有一个想法:先做几年技术,然后做管理;也有一些同学说:我技术不行,希望直接找到一个管理的工作,就像PM那样。请看 PM 需要什么样的能力:(链接略去)”。在读这条微博的前一部分内容时,我的第一反应是:难道同学们以为做技术管理不需要很好的技术功底?刚好在此之前,我写过《技术敏感度 — 基层技术管理者必备》一文,强调技术功底对于

2012-10-09 21:11:38 8616 3

原创 技术敏感度 — 基层技术管理者必备

一说到管理者的能力特质,我们马上会联想到沟通、授权、决策等能力。然而,对于软件开发活动中的基层技术管理者(team lead、line manager等),我想指出被极为忽视的另一种重要能力 — 技术敏感度。对于基层技术管理者来说,何为技术敏感度?技术敏感度表现为:1)工程师解释技术问题时,能快速理解并切中问题要害; 2)面对多个技术方案做选择时,具备权衡能力,并能给出有建设性的意见和

2012-09-30 09:57:05 9411 6

原创 单元测试实施解惑——别“桩”了!

我在《单元测试实施解惑(一)》中指出,使用象Cmockery这样的测试框架,将所需测试的模块通过打桩的方法实施单元测试并不是最有效的方法。在这篇文章中,让我们一同来探索更好的方法。在继续探索之前,让我从传统单元测试开始引入所主张的方法。图1中所示的分别是某内存池模块(mpool.c)和双向链表模块(dll.c)的代码片断,现在让我们聚焦于为内存池模块的mpool_buffer_allo

2012-09-21 18:29:52 6525 1

原创 单元测试实施解惑——无缝整合

在刚过去的一个月中,我完成了一个小软件框架的设计与实现。期间由于并行开发的需要,在没有对代码完成单元测试的情形下我将之check in到了SVN的主干上,随后的心情很是忐忑。因为我知道我一定会犯错(事实也证明在单元测试完成之前就发现了两个缺陷),害怕给他人带来麻烦并影响自己的形象。另外,由于对刚加入项目的单元测试环境完全不了解,所以在该框架的前期开发工作中我并没有运用单元测试渐进地保证

2012-09-02 22:18:06 6978

原创 该死的“代码就是文档”

我在《专业嵌入式软件开发》一书中指出,编写言简意骇的文档是实施高质高效软件开发的关键要素之一。在此结合自己的工作体会,再谈一谈软件开发活动中文档的重要性。切入正题之前,先让我们浏览二个工作场景。A君刚加入一个代码规模超过百万行的复杂通讯项目。在熟悉项目的过程中发现,上手新项目只能依靠几份单薄的PPT文档,而无法获得象样的系统架构文档、各子系统的概要设计文档和子系统间的接口文档。面对这样

2012-08-18 10:54:14 19078 51

原创 软件项目外包之路何以如此坎坷?

通过软件项目外包的形式获得令人满意的产品并非易事,想想当初为何美国国防部要求卡内基梅隆大学的软件工程研究所(SEI)制定现在广为人知的CMM就明白了。在此,我想就我的工作体会谈一谈软件项目外包之路为何如此坎坷。首先要明白的一点是,软件外包项目承包商(后面简称为“承包商”)与雇主之间的关系更多的是博奕,而非真正意义上的合作,因为两者之间存在利益冲突。雇主为了确保外包项目获得成功,必然会为

2012-08-08 20:16:43 8483

原创 软件外包的形式与质量控制

大体上,我将软件外包的形式分成三种。第一种形式是外资企业在华等低成本国家成立新的研发中心。研发中心虽然名誉上是总部的分枝机构,但所从事的研发工作通常不会是高精尖的内容。很显然,由于所设置的分支机构在公司制度和企业文化上完全采用总部的,因而这种外包形式在软件的质量控制上能与总公司的完全匹配。可以想象,这种外包形式的成本相当的高昂。第二种软件外包形式是人员外包。即外包公司出人参与到合同公司

2012-08-07 22:00:57 8534 2

原创 缓解可查错性问题的手段——单元测试

从本月初开始,我加入了某基站开发团队。尽管我在通讯行业工作快10年了,但这是头一次工作于机站项目,所需学习的东西自然很多,还是那句话 — 有挑战才会有进步。在此我想与读者分享过去三周我就软件的可查错性的一点新体会。现从事的项目是真正的嵌入式系统,机站上的MAC和PHY程序是运行在DSP之上的。加入团队伊始,同事告诉我,团队在碰到Crash这样的问题时,显得很是被动。经过我俩几番的交谈,

2012-08-05 21:16:42 5239 2

原创 一种面向业务流的内存管理算法

在象通讯系统中的基站这样的复杂嵌入式系统中,对于内存管理模块的效率具有很高的要求,因此内存管理模块的算法很有讲究。讲究在于,不仅要考虑算法的效率,还要兼顾算法是否会带来大量的内存碎片以及如何进行内存碎片合并。正因如此,这类嵌入式系统软件大多会对内存管理模块根据业务特点进行适当的优化。优化的方式无外乎引入内存池,或对堆管理模块引入新的算法加以优化,然而这些方法除了引入了一定的算法复杂度外

2012-07-31 22:39:19 5474

原创 在C++中通过模板去除强制转换

推荐阅读:《在C++中通过模板规避潜在错误》 C++与C语言相比是一个强类型语言,即对数据类型的匹配程度较C更为严格,这有助于避免程序员在编程过程中由于粗心所犯之错。由于历史原因,C++中仍保留了reinterpret_ cast、static_cast等用于强制类型转换的关键字,但从语言向强类型发展的趋势来看,我们在编程工作中应尽量少使用强制类型转换,模板有助于我们实现这一目的。减少使用

2012-06-09 15:45:31 4979

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除