自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Woring Practice-适当的时候赞赏他人

绝大多数人喜欢被别人赞赏,但是喜欢赞赏他人的人却要少很多。赞赏他人有很多的作用:赞美是一种鼓励,让人心情愉悦。是对别人工作以及能力的认可与肯定。赞美是一种相对于金钱与物质的报酬,成本更小,收益更大。赞美他人能够增进两者的感情。对同事的赞美能够抬高自己在同事中的心里地位。赞美别人的好时机:别人有好的工作成果。人多的时候。通过他人赞美,如通过与其他同事,或者通过同事的家

2013-09-29 22:28:32 476

原创 Working Practice-更好的表达批评

我曾经看到一个过一个笑话,说的是批评员工的方式,有下面几种:直接批评,批评中带着侮辱。先赞扬,然后委婉的说出需要改进的地方。通过对员工表示一种高的期望,来刺激激励员工。其中,最后一种,一般会有更好的效果。例如下面的表达:小王,这个东西可不象你做的,以你的能力,完全能做的更好!上面的例子中,有下面这样的作用:对员工能力的高度认可。激发员工潜在的能力及热

2013-09-29 21:43:21 655

原创 Working Practice-对自己做出的承诺负责任

就在今年,我曾经去了一家知名厂商公司面试软件开发的职位。见到面试官以后,面试官(即团队经理)给了一份试题,让我做,并且告诉我:我这儿是不限制时间的,我晚上12点下班,你下班前给我就可以。当时我感觉这个面试官非常不错,然后就去会议室做题了。面试题整体来说还不错,开始的时候,我尽力想把每道题做对做出来,速度上很慢,但是想想面试官说不限时间,就没有太注意时间。当我做到一半多的时候,已经花了大概2

2013-09-29 00:13:16 535

原创 Working Practice-有意义大于形式

近来我坚持写博客一段时间,感觉收获很多。通过把自己的想法,思考,理解记录在博客里,有下面的优点:可以不用担心会忘记这些东西。对自己的成长也有了一定的积累。一直保持了学习思考的习惯。开始的时候我也在想,每篇博客是不是都需要很精辟,让别人看上去感觉很棒,这种想法一直让我成为长期以来不写博客的借口,后来我明白:博客首先是写给自己的,希望自己有所收获,有所积累。每次都写出自

2013-09-28 15:55:33 519

原创 Working Practice-确定的事情使用肯定的语气

工作中有些问题自己十分确信,但是当别人问起的时候,习惯性的带着不确定的语气。例如“应该是”,“xxx吧”。这是很不好的习惯,对于自己十分确定的事情,要回答的干净利索,把“应该是”改编成“是”,把”xxx吧“,改变成”xxx“。口气中要表达出肯定及确定。这样做的好处是:可以给同事留下干净利索的印象,是执行力的具体表现。增加权威性。肯定及确定,是领导者应该有的素质,有主意的领导让员工感

2013-09-27 23:24:39 503

原创 Woring Practice-一般的问题进行二次检查

我有强烈的强迫症。对于一个非常简单的问题,也要经过多次确认,这大大的拖拉了我的工作效率,有时候通过多次检查确实发现了一些问题。但是绝大多数是正确的,我希望通过下面的方法改变自己的这种行为:当完成某件事情的时候,认真的去检查自己的任务,检查无误后,给自己一个ok的暗示。(这种暗示能够加深问题的肯定性)做两次检查:如果代码中存在问题,前两次检查能够很快的查找出来。找出问题的概率非常

2013-09-26 23:04:47 536

原创 Working Practice-召集相关人员面对面的沟通是处理问题最快的方式之一

今天忽然收到一个电话,说有一个严重并且紧急的bug。收到以后,我赶紧确定了一下问题会产生调用点,并添加了相应的log跟踪,随后,马上召集了相关人到测试地点,简单的讨论了发现这个真正的问题,原来是测试的同事对此问题不太熟悉,对这个过程产生了一些疑问,未经证实便提出了一个bug。通过这种面对面的分析我们很快解决了问题,此过程中:快速的理解了测试真实的疑问。(这个疑问与之前电话沟通到的有很大

2013-09-25 21:29:59 552

原创 Woring Practice-通过邮件发送一些必要的通知

今天跟同事一起看bug的时候,我发现我们使用的工程是不同的,我使用的是branch下的,他使用的trunk下的。经过确认,发现同事使用不是正确的。负责人说已经告诉过他们应该使用branch下的工程,但是有至少有2位同事使用的是错误的工程。这种问题可以通过邮件来通知大家,邮件有如下的优势:保证了通知统一,集中的告诉了所有的人。(当然,需要把这些人都加入到收件人列表)。口头通知

2013-09-25 00:21:07 901

原创 Smart Hands-好用的对比工具

Ubuntu下的应用商店有一个非常好的diff工具:meld。Meld能够:对比两个文件,显示出修改的地方。对比两个目录,显示出两个工程的差异。在svn路径下,可以通过meld 加上 修改文件,就可以显示出修改。

2013-09-24 01:17:19 873

原创 Code Fragment-打印调用堆栈。

某一个方法可能由于多处调用,可以通过两种方式查看调用信息:Debug调试。打印error的堆栈。Debug的方式可以用来查找always的问题,很方便的定位问题。但是一些random的问题使用打印堆栈更有效,因为实在不清楚这些问题啥时候出现。我们可以使用如下:package com.jue.testmain;public class TestMain { pub

2013-09-22 19:39:51 1276

原创 Working Practice-别再卧室里工作

参考了《卓越程序员密码》过去我也曾经习惯躺在床上看书,自己认为一边学习了,一边休息了。而实际上,这是一个非常不好的习惯,“我的工作和生活混为一谈,工作的激情和效率也没了。”,卓越程序员密码如此说到。这样做的坏处如下:慢慢的养成了工作拖拉的习惯:工作的时候,弄生活的事情,生活的时候,又去处理工作。在未来与同事的一同工作中便能暴露这种缺点。延迟了工作完成的进度。降低了生活的质量:因

2013-09-21 21:34:41 579

原创 Working Practice-找个人相互监督助于坚持

我经常要求自己坚持做一些事情:读书,学习,博客,或者生活里小事情。但是总是很难坚持很久。不久前,我跟一个大学的好朋友开始相互监督做一些事情,我发现这种方式是非常有效。我已经坚持做一些事情一个多月,并且完全没有想放弃的想法。这种相互监督的好处是:当有一个人看着的时候,人会表现的更好。两个人相互监督的时候,放弃,两个人的两个事情,却成了两个人得一件事情,有更多的责任感。还有一件事情比较

2013-09-20 23:19:37 589

原创 Working Practice-别给用户太多选择

两年以前,我在一家解决方案公司做Launcher。Launcher里有一个功能是卸载应用,那时候我的实现是当卸载的时候,添加按钮仍然可用。后来客户提出这个问题,说某一时刻应该明确的告诉用户做一件事情,卸载的时候,只管列出可以卸载的应用,只提供卸载的功能。现在想想,这确实是一件比较重要的事情,某一时刻,给用户尽量少的选择,反而帮助了客户。这样做有这样的优点:用户很清晰现在是什么状态,该做

2013-09-20 23:01:31 641

原创 Smart Hands-Http监视器Charles

更多可以参考 Charles抓包工具详细教程开发者可以通过Charles查看所有连接互联网的Http通信。

2013-09-17 14:33:08 734

原创 Working Practice-善于使用静态代码检查工具

本文参考了IBMDW 常用 Java 静态代码分析工具的分析与比较要善于使用静态代码检查工具,这些工具能够通过对源码或字节码的扫描,能够非常有效的找出潜在代码设计逻辑或编码缺陷。有很多免费的静态代码检查工具,不同的工具可能有不同的视角,对于同一个项目,我们可以通过使用多个静态代码检查工具查找问题,因为:无论从哪个工具能够找到问题,我们从不排斥发现问题,我们欢迎发现问题。支持ja

2013-09-17 13:09:02 641

原创 Working Practice-破窗理论与写代码

参考自《百度百科-破窗理论》破窗理论:一扇窗户被打破,如果没有修复,将会导致更多的窗户被打破,甚至整栋楼被拆毁。理论说明:环境可以对一个人产生强烈的暗示性和诱导性(美国政治学家威尔逊和犯罪学家凯琳观察总结)。工作中:看到写的不好的代码,就会降低自己的代码质量的要求,这个非常不好!

2013-09-16 21:56:36 739

原创 Woring Practice -每次修改进行code review

Code Review是软件静态测试的手段之一,通过code review收益会非常多,如下:发现bug通过review发现的错误更具有确定性。发现的越早,修改的成本越小。代码的作者重新审视代码,有助于梳理作者的思绪,因为代码需要给别人看,更能够进一步保证质量。与别人分享自己的才能,提高别人对自己的认识。通过code review,达到了技术分享的交流,长远看,

2013-09-15 23:38:13 605

原创 Working Practice-每一个版本发布前,首先有一个code freeze阶段

程序员都清楚,任何的改动都有可能带来潜在的问题,只是有的时候,潜在的问题概率比较大,有的时候潜在的问题发生概率比较小。在准备发布一个版本前,应该有一个代码冻结的阶段,这个阶段里,不允许进的:feature。(这决不是后期应该做的)改动小的bug。(如果这个bug很小,不太重要,那么就推迟到下一个版本修正吧)允许进的代码:重大的bug修正(显然,重大的bug,有可能有更大的风

2013-09-15 22:53:43 4838

原创 Working Practice-在会议中避免小讨论

场景:今天在开training的时候,有很多人,在同事讲完ppt之后,大家开始陷入了小的讨论。还好,经理及时的提醒,不要进行小的讨论,有问题说出来。小组讨论的缺点:浪费了很多无辜人员的时间,没有人及时提示的话可能无休止。可能偏离了话题本身。不能把知识的共享放到更大。

2013-09-13 18:26:20 461

原创 Working Practice-要熟练使用常用的工具

场景:今天去参加一个training,看见同事的关于一份测试数据的柱状图十分专业,很是好奇什么工具做的。问过之后倍感震惊,原来是Excel用数据生成的。记得更工作的时候,为了写word的工作回报,花了几个小时去调整一个本可以1分钟就可以调好的东西。说明的道理:常用的软件之所以常用是因为它们真的好用。熟练基本软件的使用,很有必要。上传一张Excel的生成图,图片来自网

2013-09-13 17:14:00 691

原创 Working Practice-可以通过一个单独的backup文件夹来记录每天任务完成的热点

很长时间以来,我在电脑上单独创建了一个backup的文件夹,用来记录每天完成工作的一些热点。这些热点包括:新feature的阶段性记录。bug的分析,解决记录。它们的作用:虽然有时候可以通过版本控制工具来记录,但是我感觉这样的记录更灵活,我可以比较随意的记录一些debug代码而无需担心checkin了不好的代码。记录让我更放心,我不用担心自己不小心的ctrl+z,del。

2013-09-12 21:23:00 638

原创 Code Fragment-从不要catch最父类的Exception。

今天看Code的时候,发现有一大段代码catch了Exception,是Exception,而不是它的子类,这是很暴力的处理。什么时候需要去catch异常:RuntimeException: 一般不需要catch,因为他通常是一种编程的错误,是需要修正的。非RuntimeException :需要catch,否则编译不通过。可预期的错误:有一些错误是能够预期到的,故意做的一种补救办法,

2013-09-12 21:00:12 976

原创 Code Fragment-避免null的保护不一定是保护

经常遇到这种情况,当遇到一个NullPointException的时候,做一些所谓的保护措施,例如下:public void playVideo(Video video) { player.play(video);}发现player为null,所以产生了NullPointException,有些处理如下:public void playVideo(Video video

2013-09-11 21:25:28 488

原创 Working Practice-把时间首先花费在最重要并且紧急的事情上。

场景:前些日,有一个bug,包括两个方面:一个是UI改善,一个是功能缺失。功能并不属于我这里,但是UI会有涉及,我花了一些时间在这个UI上。问题:UI改善相对功能在此场景上更次要一些,应该首先focus到最重要的功能缺失上。改善:把时间首先花费到重要并且紧急的事情上。

2013-09-10 20:17:57 556

原创 Code Fragment-使用一定的命名说明一种关系。

紧密关系:通过命名的本身的角色加以体现。例如在Launcher中有一种拖拽的模型如下:DragSource:可以提供drag元素的容器。DragObject:被拖拽的元素。DropTarget:可以放置DragObject的目的地。DragListener:拖拽过程中的监听器。这里面通过多个类DragXXX说明了一个紧密的关系,而后面的词语也恰当的说明了这个类的

2013-09-09 18:21:46 725

原创 Working Practice-通过持续集成系统保证项目的可发布。

对于多人员,持续迭代的项目中,公司应该有一个持续集成系统,保证项目一直可用。这很重要。持续集成系统:在后台不停地的检出,构建和测试代码的应用。---选自《高效程序员的45个习惯》尽可能早地继承也更容易发现风险,这样风险及相关的代价就会相当低。---选自《高效程序员的45个习惯

2013-09-09 16:38:12 725

原创 Woring Practice-bug系统的被reopen的错误,把更多的精力放在那个问题上,而不是情绪上。

场景:今天在解bug的过程中,忽然发现bug系统中有旧问题的bug被reopen了,第一反应很是烦感。。。不好的心态:对于reopener很是愤怒,带着情绪。想尽快处理掉问题。需要知悉:reopen说明tester是对这个问题有疑问,认为现在的处理是有问题的,这是首先要想到的。需要把更多的问题放在问题本身上,而不是烦感本身。认真负责的tester是值得表扬的。每

2013-09-09 15:15:39 1026

原创 Working Practice-发现领导说的与自己看到的不一致时,迅速沟通。

场景:前两天领导交给我做看一个bug,并且指出在其他A地方已经有了类似的实现。当我仔细看了看,发现并不是领导说的那样,然后自己心里想应该是领导记错了,我就按自己的想法去实现。结果:当我拿code去review的时候,领导指出了我做的不好的地方,沟通之后才知道,之前说的类似实现是有的,只是不在那个文件里。改正:当发现得到的信息与自己看到的不一致的时候,应该

2013-09-09 11:40:24 633

原创 Code Fragment-同一层级的代码段封装成方法。

同一层级的代码段可以封装成方法,这样显示有一种层级美。下面的是Android code:packages/apps/Calendar/src/com/android/calendar/CalendarController.javaprivate void launchSelectVisibleCalendars() { Intent intent = new Intent(

2013-09-07 10:00:47 1247

原创 Code Fragment-当前程序结束的时候,做一些清理的操作。

在程序结束的时候,当然可以是类,也可是Activity或Application。我们可以主动调用一些清理的操作。如:packages/apps/Settings/src/com/android/settings/bluetooth/DockService.java中的onDestroy代码处理如下:@Overridepublic void onDestroy() { if

2013-09-07 02:10:27 1707

原创 Code Fragment-通过位运算来表达状态

可以用位运算来标记不同的状态,使用不同的移位能够保证它们状态的不同如下,本例子参考自Android code/frameworks/base/core/java/android/app/DownloadManager.java/** * Value of {@link #COLUMN_STATUS} when the download is waiting to start.

2013-09-06 23:22:16 697

原创 Code Fragment-避免用户多次快速的点击事件

问题:对于一些用户的按钮,可能需要处理较多的逻辑,用户特别快的连续点击有可能引起一些难以处理的问题。处理:为此,我们可以在某个view在点击之后,设置其不可点击,等到一定时间后再设置为可点击,优点:简单有效android下一个例子:Button button = (Button)findViewById(R.id.myButt

2013-09-05 00:22:02 1911

原创 Code Fragment-定义合适的数据结构。

定义合适的数据结构相对算法更高效,应用在项目中的数据结构MessagePool中的 消息队列。LruCache,用来优先记录最近使用的项目。根据需要,还可以定义诸如:经常使用的cache创建负荷最大的cache弱引用的cache本地的cache

2013-09-03 23:31:13 643

原创 Code Fragment-简单的数据类直接使用public字段来访问设值。

在UI调用频繁的地方,或者循环里面,经常有一些数据类的使用,可以直接使用它的public字段访问,代替方法。static ArrayList getItemsInLocalCoordinates(Context context) { ArrayList items = new ArrayList(); final ContentResolver cr = context

2013-09-03 00:47:10 682

原创 Code Fragment-方法的长参数序列可进行封装

本文借鉴于《重构-改善既有代码的设计》下面的代码来自Android源码,分别是Android2.3以及Android4.0的Launcher代码。2.3的实现代码如下:void onDrop(DragSource source, int x, int y, int xOffset, int yOffset, DragView dragView, Object d

2013-09-01 23:59:42 477

空空如也

空空如也

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

TA关注的人

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