- 博客(151)
- 资源 (3)
- 收藏
- 关注
原创 实用设计模式之状态模式
状态模式的针对性很强,当有状态变化的时候很多工程师会倾向于选择状态模式,但在使用时仍然存在着很多问题,比如状态的拆分不清晰、状态的变迁不准确、类的职责划分不单一等,一旦与具体的业务逻辑和已有的代码上下文放在一起,就出现了混乱。因此,本文以一个实际的例子来总结一下在现实当中如何使用状态模式。 1.什么是状态模式 状态模式(State Pattern)是设计模式的一种,属于行为模式。其定
2013-03-17 16:29:51 4815 2
原创 测试驱动开发——读《浮现式设计》有感
题记:正在读《浮现式设计:专业软件开发的演进本质》(荣获第19届Jolt生产力大奖)一书,顺手写下了一点自己的感想与浅见,是以为记。 前几天刚在我的微博上说我在读一本《测试驱动开发》的书,今天在读《浮现式设计》时又遇见了“测试驱动开发”,好友胡研还调侃说现在有需求驱动开发、系分驱动开发、文档驱动开发、模型驱动开发、用例驱动开发、项目管理驱动开发、质量驱动开发等各种驱动开发。开发人员
2013-03-02 15:25:32 2379 2
原创 注重纪律——读《浮现式设计》有感
题记:正在读《浮现式设计:专业软件开发的演进本质》(荣获第19届Jolt生产力大奖)一书,顺手写下了一点自己的感想与浅见,是以为记。 这一章的主题是单元测试,给我带来了很多思考。 首先就是测试经济学,作者为我们带来了非常有趣的辩证逻辑:大多数软件开发专业人员都会称赞测试的好处,而大部分现代软件开发过程亦会包含测试,将其作为项目中必备的元素之一许多软件开发人员除了确保他
2013-02-27 21:24:01 2293
原创 注重实践——读《浮现式设计》有感
题记:正在读《浮现式设计:专业软件开发的演进本质》(荣获第19届Jolt生产力大奖)一书,顺手写下了一点自己的感想与浅见,是以为记。 各行各业几乎都有自己的实践,不管是约定俗成,还是通过文字传承,都在这个行业中起着重要的作用。作为软件专业,虽然年轻,但该专业对实践格外重视,所以注重实践,并积累实践经验对这个专业的发展就尤为重要。 我们先来看书中提到的四个实践。
2013-02-25 20:12:27 6847 1
原创 注重原则和智慧结晶——读《浮现式设计》有感
题记:正在读《浮现式设计:专业软件开发的演进本质》(荣获第19届Jolt生产力大奖)一书,顺手写下了一点自己的感想与浅见,是以为记。 使用与创建分离原则是我以前没有接触的,说起来很易于理解,即分离对象的创建和使用职责,在一个系统中,限制任意实体A与任意实体B之间的关系,A可以创建B,或者A可以使用B,但A不能既创建又使用B。通过这样的分离,使得创建和使用被独立开了,如果创建方式发生
2013-02-24 11:07:15 2114
原创 注重软件质量——读《浮现式设计》有感
题记:正在读《浮现式设计:专业软件开发的演进本质》(荣获第19届Jolt生产力大奖)一书,顺手写下了一点自己的感想与浅见,是以为记。 封装、内聚、耦合,这是编码的首要原则。 这三个原则不是面向对象开发才有的,早在面向过程的开发方法中就已经作为普适原则存在了,随便问一位软件工程师,都能对“高内聚,低耦合”说上几句。到了面向对象方法中,对“封装”的概念进一步得到强化,利用
2013-02-23 17:20:43 2019
原创 代码至上
我的眼睛总是盯着代码,只要发现了代码问题,无论是命名问题、格式问题,还是语句问题、逻辑问题,我都要找到作者说说。有些人会对我说:没事儿,小问题。但我一直告诉自己和团队,我只看代码,代码至上。 想不起在哪本书里看过一个软件开发过程模型,是一个金字塔形,其中最底层就是代码质量。我与作者的观点是一致的,代码质量影响并决定的软件质量。代码质量的提高,就是软件质量的质量基础在提高。在软件质量度
2013-01-29 20:40:03 2705 1
原创 URI encode与URL encode对空格的不同处理
在各种开放平台、OpenAPI越来越多之时,客户端软件或多或少的在通过HTTP、HTTPS协议与服务器交互。这其中一个常见的情况就是要求对URL进行encode处理,以保证中文、特殊字符的正确传递。不过这个小小的encode也没想象中的那么单纯。 前几日在Android开发中遇到一例时,URL中的空格符(ASCII码是0x20),在经过java.net.URLEncoder类enco
2013-01-03 16:50:46 37351
原创 敏捷之伤——燃尽图
燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下的曲线,随着剩余工作的完成,“烧尽”至零。燃尽图向项目组成员和企业主提供工作进展的一个公共视图。(引自百度百科) 一般燃尽图的样式如图所示。(图片来源《硝烟中的Scrum和XP》) 由于燃尽图也在传达开发速度的信
2013-01-03 14:29:26 37160 2
原创 敏捷之伤——站会
站会,几乎在所有的敏捷开发相关的书籍中都必然会加以阐述,虽粗略不同,但都把他视为敏捷开发过程中不可或缺的一环。个人认为,站会最大的意义是沟通,是在面对面沟通的敏捷原则之上创造的一次强制性的沟通机会,为那些在需要面对面沟通时由于个人性格、时间、被沟通者不在现场等客观理由创造一次机会。因此,站会在敏捷开发中具有非常重要的意义。 但在具体的执行过程中,有一些现象还是让敏捷开发很受伤。
2013-01-01 17:05:12 8824
原创 提升开发效率之工具篇
开发效率主要取决于开发速度和开发质量,我们都希望速度越快越好,质量越高越好,也就是开发效率高,但明显速度和质量是鱼和熊掌不可兼得,所以提升开发效率就要从这两个角度去平衡了。 影响开发效率的因素太多了,我们就先来总结一下如何利用工具来达到目的。工具分类 开发工作中会用到各种工具,我们不妨将他们分分类。建模工具 用于支持业务建模、业务分析、架构设计、详细设计等
2012-09-28 11:19:56 5135
原创 闲说缓存
翻翻博客,离最近的一篇也已经过去4个月了,这四个月当中,摩托裁员了,微软换了Windows Phone 8内核了,Apple的New iPad能销售了,Google的Android份额又升了,4年一次的奥运会也结束了。外部环境在变,内部环境也在变,部门调整,项目变更,团队有了新力量,熟悉的脸孔也在消散,世易时移。 今天看到《探讨iOS应用里的缓存设置》一文,虽然与前述这些没什么关系,
2012-08-13 19:50:19 5139 4
原创 如何平衡理论知识和项目知识的学习
友@昱全yuquan在微博中提到“有时候觉得自己基础不扎实看看算法,计算机网络,操作系统。又觉着自己工作的东西还木有做的好,得多熟悉项目和安卓源码,这两件事情得有一个平衡吧。特别是基础知识,最怕学的不系统,到时候打了水漂。。。”那么到底怎么平衡这两部分知识的学习呢? 我们先把理论知识和项目知识各自所指的内容确定一下。 我认为这里说的理论知识指的是算法、数据结构、操作系统
2012-04-30 22:39:04 2714 1
原创 如何让新人尽快融入团队
随着团队的发展,总会有新人被吸收进来,新人落地的问题就变得尤为重要。在此分享一下我的一点经验,与大家一起交流。 此处说的新人,是新到公司的人,并不限于应届毕业生。一般新人来了以后,我会从以下几个方面开展工作。 1. 介绍历史。向新人介绍项目情况、历史背景、团队情况、开发情况等,使其尽快了解过去和现在的状态,并形成与团队一致的目标。 2. 寻找差异。人生来就
2012-04-20 19:05:20 6922 3
原创 移动应用的架构约束
架构设计是在平衡各种约束条件,比如运行环境、接口标准、人员因素、技术因素、办公条件等等,具体到移动应用软件,其架构设计又有哪些特殊的约束条件呢? 首先是运算能力。移动应用主要的运行环境是移动设备如各种手机、嵌入式设备、平板电脑等。这些设备相比于PC机,其运算能力是低一些。运算能力的高低会决定我们在设计时要将大运算量的模块如何分解和放置的问题。由于移动设备的运算能力相对较低,所以浮点运
2012-04-16 18:57:43 4762 3
原创 移动应用需要架构设计吗
移动应用需要软件架构设计吗?这是个经常被提到的问题。 回顾十几年前为PC开发应用软件的历史。早期没有架构设计,在可维护性和易扩展性上面都要付出相当大的成本。后来人们认识到了软件架构的重要性,并使得软件架构的概念逐渐成熟起来,在延长软件的生命周期上发挥了巨大的作用。现在,几乎所有的软件都会经过架构设计,这已经是软件开发企业和从业人员的共识。 同理,移动应用也是软件,它
2012-04-09 22:40:39 6835 10
原创 架构如何才能抵制熵增
首先我们来了解一下熵增定律,百度百科的描述是: “孤立系统总是趋向于熵增,最终达到熵的最大状态,也就是系统的最混乱无序状态。但是,对开放系统而言,由于它可以将内部能量交换产生的熵增通过向环境释放热量的方式转移,所以开放系统有可能趋向熵减而达到有序状态。” “熵增的热力学理论与几率学理论结合,产生形而上的哲学指导意义:事物的混乱程度越高,则其几率越大。” 通俗点理解
2012-02-29 23:30:05 12483 12
原创 程序员真的“编码太多没时间思考”了吗
如题,这是有朋友问我的一个问题,我觉得这个问题也代表了一部分程序员的迷惑,所以不妨在此啰嗦几句。 我们都知道,目前程序员的工作强度很高,压力很大,白天8小时是不够的,加班肯定是家常便饭,整个人几乎全部的时间都用在了编码上。于是才产生了这个疑问,如果我整天都在机械的编码,那么我如何才能思考问题、获得提高呢? 我认为首先要明确的一点是编码与思考这两项活动不是串行的,不是说时
2012-02-28 20:48:41 17832 94
原创 用非正式沟通减少需求和交互的矛盾
我在微博上抛出了一个问题:敏捷开发,在没有项目经理的前提下,如何协调产品经理、交互设计师、开发工程师在一个需求或交互上的不同看法?得到了好友们的关注,现在在这里做一个小结。 移动应用开发团队,共有以下五种角色:PM:产品经理,负责规划产品方向,确定产品需求;UE:交互设计师,负责设计某项功能的交互方案;UI:视觉设计师,负责设计界面元素的视觉产现;RD:开发工程师,负责软件开发;
2012-02-21 20:47:05 2783 1
原创 移动应用开发人员忌浮躁
近日,在不断的招聘面试,同时公司的技术职称评定工作也在进行,偶有所感,还是想要说一说。 从应聘的情况可以看出,移动应用开发人员确实是紧缺,随着移动互联网的发展,这已经是不争的事实。不仅中小型或创业型公司招不到人,即使是百度、腾讯、阿里这样的大公司也一样。因此,但凡与iOS、Android沾边的简历就会有更多的机会进入面试环节。我们的一些开发人员也看到了这个形势,有的人竟真的漫天要起
2012-02-15 19:45:07 3073 4
原创 在Windows Phone中进行3D开发之后记(附源码)
终于把这一系列博文写完了,真是长舒了一口气。 记得在2011年的10月13日我在我的新浪微博http://weibo.com/wenbin1027中写下了这样的文字:“ 计划用业余时间写一个《在Windows Phone中进行3D开发》的系列博客,约10篇左右吧。刚刚开始,但时间不能保证。敬请关注我在CSDN上的博客http://blog.csdn.net/caowenbin ”
2012-01-10 00:02:14 2771 3
原创 在Windows Phone中进行3D开发之十三阳光
利用控制飞船的变换矩阵,现在它已经在天空中任由我们摆布了,但是总觉得还是差了点什么,真实性不够。到底缺少了是什么呢? 通过仔细观察,我们可以看到,原来无论天空怎么旋转,在飞船船体上都没有体现光影的变化,没能随着太阳的移动产生必要的光线反射。 这块看起来是一个大问题,飞船的模型我们已经封装了Ship类,在Draw()方法中通过BasicEffect来渲染输出。天空我们也是
2012-01-07 16:00:41 3881 1
原创 在Windows Phone中进行3D开发之十二飞行
在完成了飞船和天空的两个元素以后,现在要作的是把二者结合起来,让飞船在天空中自由飞翔。 现在我们面对了如下两个问题:一是空间中的位置关系,二是飞船飞行时与天空盒的碰撞或穿越。 先来看第一个问题,在画飞船的时候,是画在了原点上,在画天空的时候,同样也是在原点上。飞船的坐标值很大,以至于在画飞船的时候使用-0.02的缩放矩阵对其进行缩小处理,而天空盒的边长仅为2个坐标单位,
2012-01-06 21:15:09 2193
原创 在Windows Phone中进行3D开发之十一天空
飞船是离不了天空的,虽然上一节我们已经建好了飞船并试飞成功,但还是没有给飞船更大的背景翱翔。在一个场景中,仅有主体还是不够的,还需要有周围环境的渲染。如果我们能为飞船增加蓝天白云的高远,峰峦叠嶂的苍翠,那一定才是更贴近现实的。 在这个场景中,我们需要一个天空环境作为背景,不考虑地形地貌的特征,因此,典型的做法是实现天空盒(sky-box)。天空盒就是做一个大的立方体,为立方体内部的六
2012-01-05 22:51:10 4017
原创 在Windows Phone中进行3D开发之十组件
在前文中,我们已经实现了加载复杂的3D模型并在空间中进行控制,通常在一个游戏程序中,这样的3D模型有很多,如果每一个都在场景中去绘制,那么Draw()方法就会很复杂了,而且也不利于代码的复用。更好的方式是把这艘飞船实现为GameComponent,而且是DrawableGameComponent。接下来我们就来构造飞船组件。 首先为项目中添加一个新元素,使用XNA中的GameComp
2012-01-04 22:34:00 2888 1
原创 在Windows Phone中进行3D开发之九模型
在前文中,我们初步了解了在Windows Phone 7的XNA框架下实现3D场景的基础知识,能够进行3D空间下物体的变换,并且增加了纹理贴图和光照用于表现更加真实的世界。通过这些操作,我们已经进入了3D的世界。接下来,我们将使用真实的3D物体模型来进行复杂的场景实现,形成一个飞船在天空中飞行的效果。现在,让我们开始吧。 任何复杂的3D物体模型都是由若干个三角形组成,无论是一个立方体
2012-01-02 18:22:33 3442 3
原创 在Windows Phone中进行3D开发之八光照
在现实生活中,除了颜色以外,最重要的其实是光照,有了光照,才有了明暗、着色、高光等效果,在继上节的纹理之后,这节来为场景加入光照效果。 在XNA中,可以简单地把光照分为两种,一种是环境光,一种是有向光。 环境光是不来自任何特殊方向的光,它有光源,但是被周围环境的多次反射变得没有确定的方向,物体各表面都均等受光。在使用时主要用环境光改变场景的基本光线颜色。
2011-12-28 20:49:06 2528
原创 再谈对“重构”的学习
数月前,我曾经写过一篇博文《在代码重构中蜕变》,文中提到了我对重构的一些认识,今天再谈重构,缘起于近期针对重构进行了6次技术分享,每次对应《重构——改善既有代码的设计》一书中的一章内容,在此过程中与团队一起再学习了一次重构,因此,这次再谈重构,就从学习的角度说起。 当再次拿起这本书时,想到的就是第一次阅读时的体会。几年前,第一次打开书,读完了第六章——重新组织你的函数,知道了大体上重
2011-12-27 20:21:53 2140 2
原创 如何通过技术培训建设强有力的软件团队
无论哪个团队都想成为拥有超强技术实力的团队,而建设一支这样的团队也是每一位组长、技术主管、架构师的责任之一,要问起怎样建设,会得到很多种回答,有人说涨工资,有人说搞绩效,有人说多聚餐,有人说去旅游……那么哪种方式能低成本高收益的提升团队的技术能力呢? 当然,答案肯定不是唯一的,这个答案既会随着企业文化变化,也会随着管理者风格变化,但是我认为,提升团队的技术实力首选的还是进行技术培训。
2011-12-16 00:00:13 4152 2
原创 架构师的大局观
时常听到大局观这个词,每每总是心存敬畏,大局观到底为何? 当我还是一个刚入行的软件工程师的时候,我每天忙碌于代码,输入的是各种需求,输出的是各种功能模块。当时,我心中的大局观就是我输出的模块能被他人很方便的调用,能与其他人合作得愉快,能为产品做好我负责的那部分。 当我成为一名高级软件工程师的时候,我沉浸于对语言的细节研究,对面向对象方法论的深入思考,对设计思维的训练。输入的不再是零散的需求,而是一
2011-12-10 16:53:55 10881 22
原创 在Windows Phone中进行3D开发之七纹理
经过前几节内容的学习,我们已经让物体具有了平移、缩放、旋转的三大运动能力,通过组合使用,可以形成复杂的物体运动模型。 接下来,我们要给物体增加些颜色了,改变灰濛濛的世界。 还记得我们之前定义的三角形数据吗?当初定义的时候是这样的: triangle = new VertexPositionColor[]{ new Vertex
2011-11-30 23:50:03 3008 1
原创 在Windows Phone中进行3D开发之六旋转
上节内容中,我们让物体拥有了最基本的平移和缩放的运动。现在我们来看三大运动之一的旋转运动。 同上节的知识一样,要让物体发生旋转,只需要在对应的坐标轴上与一个矩阵相乘。这个矩阵的构造方法有三种,分别是: Matrix CreateRotationX(float radians); Matrix CreateRotationY(fl
2011-11-17 18:30:27 2595
原创 2011移动开发者大会后记
受CSDN邀请,我再一次参加由CSDN和创新工场主办的2011移动开发者大会。相比之前的几次大会,本次可以说是参会者最多,日程最密集,会后活动最多的一次。 我到会场时会议即将开始,已经是座无虚席了,会议开场时主持人的一个“外地观众请举手”的小调查让我很惊讶,没想到有超过半数的朋友是从外地赶来的。这个现象一方面说明移动互联网正在飞速发展,产业环境日益成熟,另一方面似乎也意味着人才和信
2011-11-08 23:18:17 7983 5
原创 在Windows Phone中进行3D开发之五平移缩放
上节内容中,我们已经有了第一个三维物体,本节中我们就先让它拥有最基本的平移和缩放的运动。 回顾我们的BasicEffect,它有一个World属性是用于决定物体坐标系的,如果我们对这个属性施加一些运算,就可以让物体动起来。通常,World的取值是单位矩阵,即物体位于原点处。要让物体发生移动,只需要在对应的坐标轴上与一个矩阵相乘。这个矩阵的构造方法是: Matrix CreateT
2011-11-01 21:31:48 2853
原创 在Windows Phone中进行3D开发之四三角形
上节内容中,我们已经有了一个三维的空间,本节中我们就来结识3D中最基本的图元——三角形 在3D开发中,三角形占有重要的地位。它是3D模型的最小基元,无论多复杂的3D模型,最终都可以表示成若干个三角形的组合。图形处理芯片也对三角形渲染进行了硬件支持。可见三角形虽然简单,但在3D开发中的重要性。下面我们就从这个最简单的三角形开始。 沿用上节我们建好的XNA项目,在VS201
2011-10-20 23:54:45 2804 4
原创 在Windows Phone中进行3D开发之三空间
经过前两节的学习,我们已经具备了创建三维空间的条件了,相信很多人已经跃跃欲试了,接下来,我们就动手开始在Windows Phone中的3D开发之旅。 打开Visual Studio 2010(什么?还没有Windows Phone的开发环境?唉,自己处理一下吧,有问
2011-10-18 12:44:18 3637
原创 在Windows Phone中进行3D开发之二摄像机
上一节中,我们认识了3D世界中最基础的一个概念——坐标系,并且了解了XNA中使用Vector3类型来表示。但是,由于引入了深度信息,所以在空间中的物体要想正确的投影出来,还缺少一个重要的道具——摄像机。 先来回想一下用摄像机或照相机的经历吧!对于同样的目标物体,有以
2011-10-13 20:34:53 4644 3
原创 在Windows Phone中进行3D开发之一坐标系
Windows Phone中通过XNA为开发人员提供了游戏框架,大大提高了游戏开发的效率,这个就不必多言了。在享受使用XNA进行2D开发的便捷的同时,还可以同样便捷的实现3D开发,我想通过系列文章对此进行介绍,供想在Windows Phone环境中使用XNA进行3D开发的朋友参考
2011-10-10 20:36:15 4241 4
原创 设计模式15问
设计模式是什么? 优秀的设计范例 从优秀设计方案中发现和总结出来的经验 在实践中反复出现的设计问题的优秀解决方案 设计和开发人员相互交流的基本术语 设计模式不是什么? 面向对象设计的框架 可供简单组合的积木式的设计元件 新发明的创新思路和方法 解决面向对象设计问题的完整方案 我想学习设计模式,需要具备什么基础呢? 一门面向对象的编程语言 一些面向对象的基本概
2011-07-25 13:59:48 3489 1
原创 探索Android中的Parcel机制(下)
上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效。 我们接下来要说的是Parcel类如何应用。就应用程序而言,最常见使用Parcel类的场景就是在Activity间传递数据。没错,在Activity间使用Intent传递数据的时候,可以
2011-06-08 17:06:00 33469 14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人