总结起来还是要有规范,规范到习惯。 代码易于维护,分为两个方面:容易阅读理解;容易修改扩展。一、如何写出容易被阅读和理解的代码1. 最根本的一条,要向写文章学习,有目录,有大纲,有标题,有段落,有适当的提示。1.1. 首先是目录结构,这个在一些比较好的实践中,有约定俗成,比如Rails应用,app目录下一定分controllers、models、views、helpers四个目录。再加上config、lib、vender,大致的代码在哪个位置,不用猜都知道。越是常见的项目类型,越是应该按照约定俗成来构建项目的目录结构,不要别出新裁。对于没有业内参考的项目,目录结构也尽可能采用简单、易懂、含义固定明确的单词,比如:core、config、test这样的命名。1.2. 包名与文件名,在这方面,java语言的规范非常值得其他语言参考和借鉴,分层组织,合理命名。是最重要的。1.3.一个源代码文件里,要不要有注释?我认为,尽可能不要,还是要像写文章一样,让人阅读起来,有感觉。比如:文件名,类名,方法/函数名。如果将所有的实际代码全部折叠起来,顺序的阅读这些名字,能不能让阅读者,对于这一个源文件的内容和目的,有大概的了解?再强调一次顺序阅读,一个 源程序文件内有很多个函数/方法,这些方法的排列次序,是有意义的。仅仅依靠调整次序,比如:构造函数,扩展构造函数,简单的读写函数,业务相关的函数。以这样的次序来排列,会更加便于阅读。在必须写注释的地方,也不要写得太多,言简意赅,把要点用1.2.3.讲清楚。1.4. 变量名,常数名,我们必须一再一再的强调命名的重要性,可以说,命名是软件开发中,头等重要的大事。要简洁、清晰、全英文(决定不要汉语拼音、任意缩写)、尽可能不要夹杂数字,比如var1、var2这样的变量名,就是最糟糕的。2. readme在项目开发的过程中,定期整理一份readme,放在项目的根目录,主要包含两部分内容:我们的代码做了些什么?如何查找我们写的代码。3. wiki团队开发,尽可能维护一份wiki,自己架一个mediawiki或者其他wiki,都是很简单的。或者自己架一个redmine这样的集成项目管理工具,该有的就都有了。wiki的管理维护是一个很大的话题,这里就不再展开了。4. 单元测试@李楠 和@KevinWei 已经提到了。 这个办法,既方便阅读理解代码,也方便修改代码。非常重要。5. Code Review@KevinWei 也已经提到了。二、如何写出容易被改写和扩展的代码1. 单元测试,最好全过程采用TDD(测试驱动开发)这样才能让人有信心修改你的代码。2. 参考业内成熟实践与设计模式这个事情,要多讲一句,千万不能过头。为了追求可扩展性,可重用性,甚至仅仅是为了玩弄设计模式,会让一个项目成为过度设计的牺牲品,千万不能过头。3. 定期重构一上来就向设计模式靠拢是很危险的,重构时以设计模式为参考会好一些。但是,大多时候,我们没时间重构。。。所以,还是TDD最实在,按照TDD的工作模式,你的项目几乎每天都有大大小小的重构。4. 结对编程这个@李楠 已经提到了。让知识在团队中不只是一个人掌握,很重要。大概就是这些吧。。。来源:http://www.zhuangbiaowei.com/blog/?p=449
本来是打算找一个模板直接使用的,没有找到到合适的,自己写好麻烦的啊!很早就知道960css的这个框架了,趁这个机会学学,找到一篇比较容易入门的基础,推荐阅读。 CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了。有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间。在此,我们将不再讨论这个问题。 前段时间,我了解到了CSS框架。经过对Malo、BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架。 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发。 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”。你可以通过实验(或者是用firebug)来学习它,不过我也将会在这里为你介绍它。让我们开始吧。 不要编辑960.css文件 首先是一个小提示:不要编辑960.css文件,否则,将来你将不能更新这个框架。因为尽管我们需要布局我们的HTML,我们将创建一个独立的CSS文件。 加载网格 因为我们可以使用一个外部文件的CSS代码,我们必须在我们的HTML网站中加载它们,我们可以通过以下代码来实现: <link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/reset.css” /> <link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/960.css” /> <link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/text.css” /> 这些做好了之后,我们必须添加我们自己的CSS文件。例如,你可以叫这个文件为style.css或site.css或者其它任何名字。用下面代码引用这个文件: <link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/style.css” /> 容器 在960框架中,你可以选择名为.container_12和.container_16的两个容器class。他们都是960px的宽度(这就是为什么叫960),它们的不同是分的列数不同。.container_12被分割为12列,.container_16被分割为16列。这些960px宽的容器是水平居中的。 网格/列 有很多列宽可供选择,而且在这两个容器里,这些宽度也不相同。你可以通过打开960.css文件来查看这些宽度。但是这对于设计一个网站来说是不必要的。有一个小技巧可以让这个框架更加易用。 比如,你想要在你的容器里建两列(叫sidebar/content)。你可以这样做: <div class=”container_12″> <div class=”grid_4″>sidebar</div> <div class=”grid_8″>main content</div> </div> 可以看到,你的第一列(grid_4)的数字加上第二列(grid_8)的数字正好是12。也就是说,你不必知道每一列的宽度,你可以选择列宽通过一些简单的数学计算。 如果我们要建一个4列的布局,代码可以是这样的: <div class=”container_12″> <div class=”grid_2″>sidebar</div> <div class=”grid_6″>main content</div> <div class=”grid_2″>photo’s</div> <div class=”grid_2″>advertisement</div> </div> 正如你所看到的那样,这个系统依然很完美。但是如果你想使用嵌套的列的话,你会发现它是有问题的。比如,如果后面三列都属于content列: <div class=”container_12″> <div class=”grid_2″>sidebar</div> <div class=”grid_10″> <div class=”grid_6″>main content</div> <div class=”grid_2″>photo’s</div> <div class=”grid_2″>advertisement</div> </div> </div> 你会发现这错位了,不过不用着急,这正是我们下一节要说的。 间距 默认情况下,每列之间都有间距。每一个grid_(这里代表数字)class左右都有10个像素的间距。也就是说,两列之间,总共有20px的间距。 20px间距对创建一个有足够宽的空白间距的布局来说是很棒的,它可以让一切看起来很自然。这也是我喜欢使用960的原因之一。 在上面的例子中,我们遇到了个问题,现在我们就来解决它。 问题是,每一列都有左右边距。而嵌套的三列中,第一列和最后一列是不需要边距的,解决方法是: <div class=”container_12″> <div class=”grid_2″>sidebar</div> <div class=”grid_10″> <div class=”grid_6 alpha”>main content</div> <div class=”grid_2″>photo’s</div> <div class=”grid_2 omega”>advertisement</div> </div> </div> 我们可以简单的添加”alpha“样式来去掉左边的间距,添加“omega”样式来去除右边的间距。这样我们刚刚创建的这个例子在任何浏览器里面就很完美了(当然包括IE6)。 样式 好了,你现在已经完全了解如果用960框架来创建一个网格布局的基本原理了。当然,我们也可以添加一些样式到我们的布局中。 <div class=”container_12″> <div id=”sidebar” class=”grid_2″>sidebar</div> <div id=”content” class=”grid_10″> <div id=”main_content” class=”grid_6 alpha”>main content</div> <div id=”photo” class=”grid_2″>photo’s</div> <div id=”advertise” class=”grid_2 omega”>advertisement</div> </div> </div> 因为CSS使用特性来确定哪一个样式声明具有高于其它样式的优先级。”id“比class更重要。 用这种方法,我们可以在自己的文件中重写那些被class设定的规则(比如宽度,padding,边框等)。 我也添加一些样式,它们整整花费了我5分钟来整理整个例子。查看示例的源代码和样式声明。. 搞定 就这样。你已经学习了如果使用960框架来建立跨浏览器兼容性和整洁的布局了。当你完全掌握了960框架后,你将大大地减少编写CSS的时间。 如果你还不理解,研究一下示例吧。 我留给你的问题: 你使用960CSS框架吗?或者你使用其它框架?你认为框架可以帮你提升你的代码吗? Translate From: divitodesign 来源:http://www.qianduan.net/960css-the-framework-of-the-basic-principles-of.html
管他的 “管他的”是经理送我的几个字,那天,开完年会,老大发短信,就发了这个字,喝的晕晕沉沉的,也不知道是个啥意思,正不明白着,老大的电话就过来,说是送我的字,希望我能明白,说实话,我到底还是没明白过来,就倒下了。 之后,再想想,我做事很属于那种犹犹豫豫的人,无乱是好事坏事过来,都会想那么多的可能,越想越怕,越想越不想做,用现在的话就称之为“拖拉”。 我这种就是典型的拖拉人,虽然每天很忙,一直是瞎忙,等有时间的,做的最多的就是睡觉,除了睡觉,就是看google的阅读器,google阅读器里面的一些内容,都是翻墙可以看到的,那些消息看的让我对这个社会没有了信心。做的再多,干的再好,又能怎样,还不是没个房子住,没个车子开。 悲愤感慨了一下,这篇是凑个数,弥补好久没有乱侃一下。管他的,这日子还要一天一天的过!
结果,是需要一个从无到有的过程的 是不是和我一样的年龄的人都是这样的,只想要结果,却忽略了过程,这是一种贪劲,也是一种逃避。 因为有贪劲,才有了动力,因为害怕过程中的折磨,就选择追求结果。用结果来满足,贪欲所要达到的目的的欲望,逃避过程中的折磨。 很早企业就流传着一个“以结果为导向”的理论,无论过程是个怎么样的情况,如果结果好,那你好,结果坏,那你坏。这个是企业所特有的,因为企业要生存,需要的就是有产出,有效益,这是它所必须,但我们的生活却不是这样的。 我们的生活也是需要追求一个目的,有目的的生活着,但我们不能仅仅关注在于这个目的上面,生活本身就是一个漫长的过程的,不是一蹴而就,就能蹦出目的的。我们想要一个苹果,苹果不是立马就出的,苹果树也需要开花,结果,长大,成熟这样一个过程,才能给我们一个苹果的。当你吃完这个苹果的时候,苹果也就没有,如果你还怀念苹果的香甜可口,那我告诉你,那还是个过程,在过程中,才可以体验到苹果的味道,结果仅仅是让我们兴奋了一下而已。 结果永远是个点,当越过那一点之后,更多想到的是为了那一点,说走过的过程,那条线。一条线,走的越长,那一点才容纳的东西,才会更多。 自从去年开始做这个系统,从无到有,人,什么都不懂,业务,没有人了解,用户,是刚刚涉足这个行业,我们,才知道使用的技术,都是两样抹黑,摸着石头过河,一点一点的把系统做起来了,虽然不是什么佼佼者,但之后,也给好些地方做了参考。中间不知道出了多少问题,吃了多少的苦,遭了多少的罪,结果谈不上好字,但也谈不上差字。不愿意离开这个系统,是想看看最终的结果是怎样的,离开了这个系统,却不想知道这个结果,想的更多的是,为了这个系统,走了多少路。 我们在追求结果,结果才是我们真正想要得到的,但结果,是需要我们用过程来磨练出来,想要一个结果,缺少了过程,就不完美了。过程和结果,是个统一体,缺少一样,总是一种缺陷了。 知道 懂的 理解 结果和过程的关系都是知道的,很早之前,就看过一个人在一个大花园中急匆匆追寻最大的花,没有欣赏到花园中漂亮的花,等找到最大的花,漂亮的花,也凋谢了。说的是让人要在奔跑的时候,也需要慢下来,观赏一下附近的风景的。这个道理一看,就明白了,也懂的了。等跑起来的时候,看到也就只有终点了,等到了终点,才想起来,有风景没有看呢!这时,才理解了。这个知道,懂的,是浅显的,我们也都是知道,懂的,明白的,我们需要更深点,那就得理解,理解,不是需要想想,看看,就行了,需要有个过程来支撑它的。 赵鹏于2010-07-20 00:13:40使用vim编辑
原文网址:http://www.20ju.com/content/V128633.htm1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过 你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先 在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。3、软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队 中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤 陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非 技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用 将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。5、书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些 家伙出的书,100%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技 能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。6、不要仅局限于对某项 技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序,看看 Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。 试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!7、在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由, 所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi) 进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、JBoss等等优秀 的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须 以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。8、养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员而言,有、无经验的一个显著区别是:无经验 者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方 面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是,最好还是自己实现,这样没 有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。9、理论与实践并重,内外双修。工程师的内涵是:以工 程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发 语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工 作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软 件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开发的 产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具,5、6 年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术和思 想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大 家都懂,但有多少人真正能做到呢?11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工 作是做ERP,就不去学习和了解嵌入式、实时、通信、网络等方面的技术,反过来也是一样。如果当别人拿着合同找你合作,你却这也不会,那也不熟时,你将后 悔莫及。12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明:“对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。可见,掌握一门陌生的学问远远没有想象的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识,有空花时间看看,韬光养晦、未雨绸缪。13、本文的总结与反思:A:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。B:提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。C:在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友。
过了周末 周末过的很疲,什么事情都不想去做,睡觉都变的很懒。 一本《追风筝的人》都看了几个月了,还徘徊在10几页,晚上从头开始看起,硬是花了一个晚上看完了整本书。书写的很不错,很久没有看到这么好的书了。书绝对比电影好看! 周末早上8点多就醒来了,就是不想起,一想起有一大堆的事情要做,就想一直这样躺着,永远这样。我明白这是一种逃避,可这是个周末,能逃多久就逃多久吧!脑子在乱七八糟的的想一些破事,不想去想,反而想的更多了,无论怎么样,眼睛闭着,不知道时间,躺着就行。 过了很久,觉得应该是下午4、5点了吧!才出来瞧了瞧时间,马上就12点了,很失望。房子一个人也没,也不想做什么,听一下音乐,还挺兴奋的,音乐完了,兴奋劲也就没了,总不能靠着音乐来麻醉自己吧!看了一篇文章,是孩子在情人节那天给母亲送了一份礼物——亲人节的礼物,礼物是孩子花了不少心思准备的。投入了感情,才会珍贵,才会用心去做。 我的工作做的很烂,做的一塌糊涂,我可以给自己找一大堆的借口,我没经验,没坐过,没人教我。。。有这个必要吗?我很感谢我有这样的机会,很感谢我遇到了人,我就怕自己做不好,让他们失望,也怕自己再一次对自己失望。说句自己安慰自己的话,我用心努力做就行了!不过现在,我真的还要再多睡会,这个周末,我真的是太疲了!