该书已全面上市(在我博客首页左侧的图书封面下方能找到购买链接)。您可以通过本博文以留言的方式写下您的建议和发现的错误,我会不断对之整理以作本文内容的一部分。谢谢! 感谢您在购书网站或豆瓣写下书评以帮助他人选书。如觉得该书不错,请帮忙推荐给周围的人。 另:本书入选CSDN 2011年度十大最具技术影响力图书(本版) 。 感谢读者的喜爱
我们并不担心软件的不完美,但担心软件演进时因为泥泞而缓慢。
因为对于软件开发的好奇和兴趣,通过自学我于1999年进入了软件开发这个领域。2003年进入了通信行业(UTStarcom、Motorola、Nokia Siemens Networks),2012年则离开了通信行业进入了互联网行业并工作至今(Alibaba)。第一次工作出国是在2007年,目的地是Motorola公司的总部美国芝加哥。那次经历让我发现国外工程师的工作与生活状况与我在国内所习以为常的
为什么想到写这篇文章?作者是想通过对工程师思维的分析和解读,让工程师能正确对待那些在现实工作中看上去与本职岗位无关,却对团队效能影响极大的一些点和一些事。在社会分工的背景下,软件行业的工程师群体被划分成了开发、测试、产品等诸多岗位,以协作的方式共同完成价值创造。高度依赖软件的互联网行业正以全新的方式改善着人们的生活,同时在改善的道路上对价值创造的效能提出了更高的要求,而背后是对个体与团队的协作效能
叶伟bluebee
图片来自网络,作者不详只要是职场人士,谈及『细节』二字估计很容易让人联想到『细节决定成败』这句话。由于这句话无人不知、无人不晓,以至于容易将『细节』误以为是口号。就我在工作中的感受,发现确实大多数人是将『关注细节』当作是口号。正因如此,我想借这篇文章与大家探讨一下我所理解的『细节』究竟是什么。首先,『细节』代表态度——将工作做到位。『做到位』与『做完』是全然不同的工作水准,前者包含后者但比后者有更
入职半年后的2013年6月份左右,淘宝浏览器团队和搜索团队被剥离出阿里巴巴集团,成为阿里巴巴与UC优视所成立合资公司——广州神马移动信息技术有限公司——的主体。在合资公司正式成立之前,主管在一次与我的面谈中告知“我们得成为一家小公司的一部分,且可能要重新基于Chromium的最新内核开发新的浏览器”(注:“新的浏览器”正是指现在的“UC浏览器电脑版”)。当听到这一消息时我非常高兴,因为看到这是一个
2012年平安夜,我离开工作了近十年的通讯行业投身互联网行业,入职了当时阿里巴巴旗下的淘宝浏览器开发团队。过去的两年,这个团队完成了从淘宝浏览器过渡到UC浏览器电脑版开发团队的巨变。之所以说是巨变,是因为整个开发团队的工作方法、工作质量和精神风貌在过去的两年发生了翻天覆地的变化。在这个过程中,我作为“领头羊”引领着开发团队向前发展,并在最近有机会成为了带领包含开发和测试在内的整个技术团队继续向前发
最近给团队(指#UC浏览器电脑版#开发团队)分享了我的《基层技术管理原则》。在我所秉承的八大基层技术管理原则中,有两个分别谈及了个体的能力与价值,我想通过这篇文章让更多人了解我对这两个概念的理解,希望能给读者带去一点有价值的思考素材。首先,我想给出我对于个体能力的理解,即“能力(ability) = 技能(skill) x 工作好习惯 x 意识”。技能的重要性无需多言,他决定了我们能走上怎样的工作
敏捷思想的出现让我们看到了新的曙光——以更低的风险、更高的效率开发出更具质量的软件产品。正因如此,敏捷方法得到了业内足够的重视并使各路团队相拥实践。然而,即便我们对于各种敏捷原则、范式、方法和流程了如指掌,仍会发现其所给组织带来的改善远达不到我们的预期。这究竟是为什么?造成这种困境的根源并非我们学得不精,而是实践不到位。在我看来,敏捷宣言过于简单(好吧,是宣言总得简单一点!),以至于足以让人对之产
亲爱的同事,转眼我在这个团队工作已有一年的时光,这一年也完成了我从通讯行业转入互联网圈的过渡。过去的一年给了我很多观察(团队)的机会,也带给了我不少思考,从我过去一年的寥寥几篇博文你应当能看到部分。今天,我想借这篇文章与大家聊一些内容,以便你更加明白:为什么我在工作中对自己和大家的要求都那么高?为什么我强调责任与重视培养工作好习惯?为什么我会直接批评和积极表扬人与事?希望你的其它“为什么”也能在这
近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱用标点的问题;我会因为设计的取舍与人激动地争论;诸如此类。当然,我更会较真于会议上达成的共识却得不到实施的问题。有人不免奇怪,你丫都快四十岁的人了,怎么还这么菱角分明地较真!好吧,那我就来说一说为什么要较真,且何以一直较
概念与思辨深度一个行业的发展似乎总伴随着更多的概念被塑造出来。拿测试来说,我们有单元测试、集成测试、系统测试、回归测试、冒烟测试,等等。我们缘何塑造如此多的概念来“为难”自己呢?答案可以用我从@李智勇SZ老师那学到的“概念越纯粹表示思辨深度越深”这句话加以解释,而这一切又为了提高同行间的沟通效率。需要特别指出的是,多个相似但不同的概念想表达的是各自的不同之处,而非共同之处。为此,如果人家在讨论单元
之前曾写过《软件质量管理的困境与对策思考》,在其中谈到开发部门与质量管理部门(QA)应形成一个有“交集的双环”而非“哑铃型”组织,也指出软件质量管理应重实践轻量化,其目标应是帮助工程师改善工作习惯和提升开发环境的效率。那时并没有认真地思考过测试团队的核心价值,直到读到@段念-段文韬老师的《测试团队与咖啡店》。通常,软件开发团队似乎几乎不谈论自己的“核心价值”,而针对测试团队总有对该问题的特有思考是
最近有朋友与我探讨了软件基层技术管理工作方面的话题,借此从动机和方法两方面谈谈我的看法。动机要做好基层技术管理工作,首先要确保自己有良好的动机,即明白自己为何要走上技术管理岗位。做管理的根本是为了获得权力,但获得权力的动机却存在很大的差别。第一种单纯是为了利己。有相当数量的人往技术管理岗位“挤”,是为了获得以后在工作中可以少做或挑做工作内容的权力;也有的人是为了更快、更多地获得公司动向的资讯,以体
在近期的一次会议上,有高层谈到之前在中国觉得自己做得很牛,但与美国同行接触后却发现与人家存在很大的差距,这一点我在外企工作时也有过同样的体会。真正与外国同行接触后才会知道什么是差距,在这篇文章中我从软件开发工程师的角度以“痛点”的形式来谈一谈我所认为的差距。技能之痛相当数量的软件开发工程师(后面简称为工程师)认为除了与编码相关的内容外,其他技能都不重要。在这种意识的引导下,很容易出现的一个普遍现象
本文示例说明了如何在Chrome浏览器中增加JavaScript API。为了简化,先假设是在已有的namespace中增加一个新的API,文章的最后将指出如果增加一下全新的namespace所需注意的事项。在继续之前,请确保你的Chrome浏览器中已安装了一些扩展程序。可以在地址栏中输入chrome://extensions查看已安装的扩展程序。下图示例说明了我的浏览器中已安装了Google M
假设存在下图所示的项目目录结构。如果存在如下包含头文件的代码,则大多的项目中需要通过“-I foo”和“-I bar”指明两个搜索头文件的目录。foo.c #include "bar.h"bar.c #include "foo.h"然而,当项目规模很大存在很多的目录时,这种方式将显著地降低项目的编译速度。因为“-I”选项使用得越多,意味着编译每一个C文件时所需进行头文件搜索的目录也越多。为了避
最近在工作中体会到了互联网行业在软件开发项目运作中与我以往在通讯行业时的一些不同,特此分享。首先,两者在需求捕获方式上有很大的不同。在通讯行业中,初始需求是由象3GPP这样的标准化组织所制定的,但通讯产品在各版本中所实现的需求是由各运营商向通讯企业提出而得以确定的。产品经理(Product Manager,通讯行业的叫法)与系统架构师在需求的确定过程中起着重要的作用。与之不同的是,互联网行业由于产
注:本文是《挨踢人物传》第五期的撰稿我在《驾驭你的“职场布朗运动”》一文中就自己的学习方法和过去的职场故事做了阶段性介绍,并总结了二十五条职场感悟。由于每个人都有属于自己独特的学习方法和成长故事,林林总总加起来使得我们能看到很多有异却相似的内容。类似内容看多了,难免让我们变得麻木,会觉得这些方法和成长感悟是特有的,无法复制。“品牌”一词让我们直接联想到的是商品,它往往包含着高品质和高价钱,与之对应
RSA算法在Chrome的扩展程序中被用于对其.crx安装文件进行签名和生成ID。下面让我们逐一了解其技术细节。在继续之前,请注意一点,文中对于Web Store的技术细节是基于Chrome浏览器的角度通过一定的测试而推测出来的,要彻底地了解Web Store的细节并不能仅通过本文。扩展程序的安装文件有两种生成方式,一种方式是由扩展程序的开发者在开发的过程中生成,另一种是通过Google的Web
去年年底,我离开了就职了近十年的通讯行业,加入了淘宝(中国)软件有限公司从事淘宝浏览器的软件开发工作,至今已有好几个月了。在过去的这些日子体会着互联网行业的不同,也让我逐渐地理解加入该行业前的一些疑问。下面,我就自己的一些感悟做一点分享,由于个人经历有限,所以局限性难免。首先,理解两个行业软件产品的运营特点具有非常重要的意义。通讯企业(指通讯产品制造商,后同)的产品是卖给象中国移动这样的运营商的,
软件产品的终极目标是为了实现用户需求从而满足人们的需要。也正是为了不断满足人们的需要使得软件行业不断向前发展。比如,新的算法(MPEG-1、MPEG-2、MPEG-4、H.264、……)等的出现都在当时为了满足不同的需要而被发明。然而,人们的需要(行业发展的外部动力)却并非是软件技术发展的唯一驱动力,因为它无法解释为什么业内的编程语言、软件平台与框架等会层出不穷,有的甚
相信在不少与软件开发相关的企业内,质量管理部门与软件开发部门在日常运作中形成了如下图所示的“哑铃形”组织结构。 开发部门执行质量管理部门所制定的流程,通过提供证据的形式将各种流程执行后的数据反馈给质量管理部门(包括缺陷率和各种流程记录),质量管理部门根据这些数据监督流程的执行效果,并适时修订流程。联系两大独立部门的,是单薄的两条线和一些部门间的会议。理想情况下,在质量管理部门
最近因为要给刚毕业的学生做一次演讲,所以就职业发展这类话题先以写博客的形式做一些思考,希望届时能给同学们带去质量更高的内容。我在《驾驭你的“职场布朗运动”》一文中谈了25条职场感悟并提出了“走技术线,还是技术管理线?”这一问题,但实际上并没有给予解答。特补上。 在正式解答这一问题之前,我想先强调职业发展的“黄金期”
在我的博客空间内,不时会有在校学生就职业发展和学习方面的内容向我寻求帮助。同学们由于初入社会没有行业经验,加上在校所学内容又广(但不深),所以在择业方面很容易产生困惑。在择业观上,他们希望找到一个将来有前途的行业,也希望在“是选择大公司还是小公司”这类问题上有人给予参考意见,也有人担心自己的学历对将来职业发展的影响。 另外,在我的工作中,也不时会有同事就自
最近以提问的形式发了几条关于编程思维的微博,有的获得了粉丝的响应,有些却无人问津。今天突然想到可以将我对这些问题的思考整理成一篇博文,以便与大家分享。另外,我计划以“编程思维训练”为名写一些系列文章,希望通过这类文章与读者分享我在编程活动中的一些思考。 问:有一对内存管理函数MemAlloc和MemFree,使用形式分别是:分配时为“void *p = M
最近,我在微博上看到@程序员邹欣老师发的一条微博 — “不少大学同学都有一个想法:先做几年技术,然后做管理;也有一些同学说:我技术不行,希望直接找到一个管理的工作,就像PM那样。请看 PM 需要什么样的能力:(链接略去)”。在读这条微博的前一部分内容时,我的第一反应是:难道同学们以为做技术管理不需要很好的技术功底?刚好在此之前,我写过《技术敏感度 —
一说到管理者的能力特质,我们马上会联想到沟通、授权、决策等能力。然而,对于软件开发活动中的基层技术管理者(team lead、line manager等),我想指出被极为忽视的另一种重要能力 — 技术敏感度。 对于基层技术管理者来说,何为技术敏感度?技术敏感度表现为:1)工程师解释技术问题时,能快速理解并切中问题要害; 2)面对多个技术方案做选择时,具备权衡能力,并能给出有建
我在《单元测试实施解惑(一)》中指出,使用象Cmockery这样的测试框架,将所需测试的模块通过打桩的方法实施单元测试并不是最有效的方法。在这篇文章中,让我们一同来探索更好的方法。在继续探索之前,让我从传统单元测试开始引入所主张的方法。图1中所示的分别是某内存池模块(mpool.c)和双向链表模块(dll.c)的代码片断,现在让我们聚焦于为内存池模块的mpool_buffer_alloc函数实施单
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号