阅读

13个代码注释的小技巧

13个代码注释的小技巧 这篇文章是由José M. Aguilar在他卓越的博客中以西班牙语的形式首发,其后Timm Martin在获得Aguilar先生的授权下,对该文章进行翻译、修改,并且在DevTopics上发布。以下13个小技巧可以使得你的代码在长时间内依然能够保持容易理解和维护。1. 对不同级别的代码进行注释对于不同级别的代码块,要使用统一的方法来进行注释。例如:对于每一个类,需要包含一段简明扼要的描述,作者和上一次修改的时间对于每一个方法,需要包含这个方法的用途,功能,参数以及返回结果当你在一个团队里面的时候,采用一套注释的标准是非常重要的。当然,使用一种大家都认可的注释约定和工具(例如C#的XML注释和Java的Javadoc)在一定程度上能推动这项任务。2. 使用段落注释首先把代码块分解成多个“段落”,每一个段落都执行单一的任务;然后在每一个“段落”开始之前添加注释,告诉阅读代码的人接下来的这段代码是干什么用的复制内容到剪贴板代码:// 检查所有记录都是正确的foreach (Record record in records){    if (rec.checkStatus()==Status.OK)    {        . . .    }}// 现在开始进行处理Context ctx = new ApplicationContext();ctx.BeginTransaction();. . .3. 对齐注释行对于那些在行末写有注释的代码,应该对齐注释行来使得方便阅读const MAX_ITEMS = 10; // maximum number of packetsconst MASK = 0x1F;    // mask bit TCP有些开发人员使用tab来对齐注释,而另外一些人会用空格来对齐。由于tab在不同的编辑器和集成开发环境中会有所不同,所以最佳的方法是使用空格来对齐注释行。4. 不要侮辱阅读者的智慧要避免没用的注释,例如复制内容到剪贴板代码:if (a == 5)        //如果a等于5    counter = 0    //把counte设为0这不单把时间浪费在写没用的注释上面,同时也在分散读者的注意力。5. 要有礼貌应当避免没有礼貌的注释,例如“要注意一些愚蠢的用户会输入一个负数”,或者“修正由菜鸟工程师写的愚蠢得可怜的代码而导致的副作用”。这样的注释对于代码的写注释的人来说并没有任何好处,同时你永远都不会知道将来这些注释会被谁来阅读,你的老板,一个客户或者是刚才被你数落的愚蠢得可怜的工程师。6. 直截了当不要在注释里面写过多的废话。避免在注释里面卖弄ASCII艺术,写笑话,作诗和过于冗长。简而言之就是保持注释的简单和直接。7. 使用统一的风格有些人觉得注释应该让非程序员也能看懂。另外一些人觉得注释需要面对的读者只是程序员。无论如何,正如Successful Strategies for Commenting Code中所说的,最重要的是注释的风格需要统一,并且总是面向相同的读者。就自己而论,我怀疑非程序员是否会去读代码,所以我觉得注释应该面向程序员来写。8. 在内部使用特殊的标签当你在一个团队里工作的时候,采用一组一致的标签能帮助不同的程序员沟通。例如,很多团队会采用“TODO”标签来表示一段尚未完成的代码复制内容到剪贴板代码:int Estimate(int x, int y){    // TODO: implement the calculations    return 0;}标签注释并不会解释代码,它们寻求注意或者是传递信息。但是如果适当地使用这种技术,要记住跟进这段代码并且完成该标签传递的任务。9. 在写代码的同时添加注释当你在写代码而且记忆犹新的同时就添加注释。如果等到项目后期才添加注释,会让你事倍功半。“我没有时间写注释”,“我的时间很紧迫”和“项目已经延迟了”,这些都是不写注释的常见借口。有些工程师觉最佳的解决方法是“注释先行”。例如:复制内容到剪贴板代码:public void ProcessOrder(){    // Make sure the products are available    // Check that the customer is valid    // Send the order to the store    // Generate bill}10. 把自己想象为注释的读者(事实上就是如此)当你正在给代码写注释的时候,不仅仅为日后维护你的代码的开发者考虑,同时也设想一下如果自己就是注释的读者。Phil Haack曾经说过:“一旦一行代码被敲到文件中, 你就已经要开始维护那一行代码了。”所以,我们自己就是好(或者坏)注释的第一个受益者(或者受害者)。11. 更新代码的时候要更新注释如果注释没有随着代码的修改而更新,那么这些注释将是毫无意义的。代码和注释需要同步,否则注释只会让维护代码的开发者更加痛苦。需要特别注意的是,一些重构的工具会自动更新代码,但是却没有自动更新注释,那么注释就自然而然地过期作废了。12. 良好可读性代码是注释的金科玉律对于很多开发者来说,一个基本的原则就是:让代码自己描述自己。虽然有人怀疑这是由不喜欢写注释的程序员所倡导的一场运动,但是无需解释的代码有很大的好处,这些代码更加容易理解甚至让注释变得没有必要。例如,在我的文章Fluid Interfaces中就给大家展示了什么是清晰的无需解释的代码。复制内容到剪贴板代码:Calculator calc = new Calculator();calc.Set(0);calc.Add(10);calc.Multiply(2);calc.Subtract(4);Console.WriteLine( “Result: {0}”, calc.Get() );在这个例子里面,注释就像是违反了第4条技巧那样,变得毫无必要。要写出可读性好的代码,你需要使用适当的命名方式(在经典的Ottinger’s Rules中有阐述),保证恰当的缩进,并且采用编码风格指导。如果代码不遵守这条技巧,那么注释看起来就好像是为自己不好的代码的写道歉信一样。13. 跟你的同事分享这些技巧虽然从第10条技巧中我们已经知道了自己就是好注释的得益者,但是这些技巧对于所有的开发者来说都是很有帮助的,尤其是整个团队都有相同共识的情况下。因此,大方地跟你的同事去分享这些技巧,让我们写出更加容易理解和维护的代码。

如何成为“10倍效率”开发者

Brad Feld的一篇文章The Rise of Developeronomics中提到了“10倍效率的开发者(10x developer)”的概念(伟大的开发者的效率往往比一般的开发者高很多,而不只是一点点),Adam Loving在读了之后受到启发,并向多位大牛(Ben Sharpe、Collin Watson和Jonathan Locke)询问如何成为“10倍效率的开发者”,最后得到了以下的答案。 1. 只做需要做的工作使用敏捷方法;全心全意做UX设计;沟通第一;编码也许不是解决问题的办法;过早的优化是一切罪恶的根源;选择最简单的解决方案。2. 站在巨人的肩膀上使用开源框架;使用简洁语言(如HAML、Jade、Coffeescript);不要做重复的事情(不要重新发明轮子);利用包管理器来进行公共和私有代码分配;不要任凭巨头(如微软)的摆布而修复库中的一个Bug;不要让你的雇主逼你学习;自主学习并为自己设定新的目标。3. 了解数据结构和算法如果你不知道什么时候应该使用快速排序、不懂辨认O(n2)程序、不会写递归函数,你将无法成为10倍效率的开发者。使用多种语言你才能清楚不同的框架是如何解决相同问题的。尽可能去了解底层命令(plumbing),以便能够作出明智的决定(Web框架是怎么存储session状态的?Cookie到底是什么?)。 4. 不要怕买工具,它可以节省你的时间Ben说:“昨天我花50美元买了一个位图字体工具,它帮我节省的时间成本绝对超过200元。”  5. 集中注意力不要整天开着你的电子邮件、Twitter、Facebook等,在工作时将它们最小化或关掉它们,戴上耳机。Tiny hack说:“即使不听音乐我也戴着耳机工作,这样便不会有人打扰到我。”  6. 尽早并且经常性地进行代码重构有时,你不得不放弃漂亮的代码转而去寻找真正对项目有用的代码,但没关系,如果你的现有项目中有这样的代码,最好的方式便是不要看它,并重构。  7. 只管去做将你的业余项目分享到Startup Weekend中。在我开始转到Unix和Ruby on Rails上之前,我买了一台Mac,使用Windows虚拟机花了一年时间做.NET项目。  8. 挑选一个编辑器,并掌握它高效开发者喜欢用文本编辑器胜过IDE编辑器,因为这样可以学到更多东西。无论什么情况,尽量使用键盘快捷键,因为熟练使用一件工具的前提是熟悉它。 在选择编辑器时,认真考虑并挑选最好的(Emacs或Vim),因为它们是通用的。其次,挑选你的首选平台最支持的。使用宏,不断地写代码;使用Mac上的TextExpander为整个段落创建快捷方式;使用Visual Studio或SublimeText的自动补齐功能;使用支持按行/列分割窗口的编辑器,这样你便能同时看到单元测试和代码(或模型、视图)。 一定要想清楚后再写代码。Adam说,“我有朋友在一个大项目组里工作,他们组里最高效的程序员是一个高位截瘫用嘴叼着棍子敲代码的人,他总是在写代码之前想得很仔细且很少出错。”  9. 整洁的代码胜过巧妙的代码要想让其他人能够读懂你的代码,尽量使用最少的代码来完成任务。遵循DRY(Don’t repeat yourself)的原则,使用明确定义的对象和库,将任务分解成小而简单的代码段。  10. 潜意识是强大的工具离开10分钟往往就可以解决一个问题。控制编程时间,给自己一个多姿多彩的生活,劳逸结合能让你在工作时更高效、更愉悦。当然,即便是上了年纪的程序员也知道,以最少的时间完成最高效的工作是成为10倍效率开发者的必要条件。 作为一个程序员,我觉得在职业生涯中最好的一件事儿就是从电脑前站起来,去拜访那些在某一领域有所建树的人们。  11. 推动自身和团队进步重视批评,以包容的态度接受批评并提升自己是非常重要的事情。没有这个基础,你不可能成为一个高效的开发者。一位智者曾经说过:“聪明的人善于从自己的错误中学习,而智慧的人善于从别人的错误中学习。”  英文原文:http://adamloving.com/internet-programming/10x-developers原文网址:http://www.iteye.com/news/23799

程序猿笑话-巡逻

一晚下班回家,一民警迎面巡逻而来。突然对我大喊:站住!民警:int类型占几个字节?我:4个。民警:你可以走了。我感到很诧异。我:为什么问这样的问题?民警:深夜还在街上走,寒酸苦逼的样子,不是小偷就是程序员。

小米订购成功

关注小米已经很久了,一直在纠结的是小米还是魅族MX,现在M8也可以换购MX,心里是痒痒啊,可一想到魅族对M8A做的一些事情,真TMD的不地道,也不愿意继续做煤油。于是在2011-12-18日凌晨1点成功的订购了小米。我从2011-12-18 0点就开始订购,小米的服务器一度打不开,可见有多少人在刷,不能不佩服小米雷军的手段,在销售了3个小时后,小米放出话来,10万手机已经售罄了。这个是营销手段,还真的是售罄了,都明白,只不过是吊人胃口而已。我就被吊了,耐心的等待小米!一下子成米粉了,哈哈!

dapeng 2012主题

dapeng 2012主题的主题的模仿的腾讯CDC的主题,主题的特点是精简,比起上一个主题,没有太多的css、js、页面效果,主要是为了增加页面的速度。另外一个也是为了在2012年也有一个自己的风格主题。也就是目前自己使用的这款主题,里面很多的都是代码实现的,也是整理自己接触Wordpress,熟悉的一些函数。分页、首页图片、相关文章、分类目录等都重写了代码,加入的注释。图片演示效果:最近访问网站的速度也有些慢,自己用的外链图片也很难访问,为了速度加快一些,使用了cloudflare提供的CDN服务。使用CDN服务后的效果对比:我用的是使用的服务器地址是:174.37.169.153,效果肯定比不上国内,但也比起超时要好的多。另外之前一直使用的wp spuer cache也没有生效,今天也捣腾的可以用了。使用Firebug测试了下首次打开速度,也基本保持在3s左右,可能网络好,满足下虚荣感。主题基本就定下来了,下一步就是做一些SEO的事情了,不过,我的观点是回归自己建立博客的本质。博客首先是记录收集的地方,分享也就是附带的目的吧!如果仅仅是记录收集,用记事本还不简单啊!

J2EE系统的概念及如何开发

文章比较老,不过也把Java开发的常用的方式、方向也说明了。J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。J2EE系统的概念及如何开发J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向。首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系。J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase、到Delphi/VB等C/S结构,发展到B/S(Browser浏览器/Server服务器)结构,而J2EE主要是指B/S结构的实现。J2EE又是一种框架和标准,框架类似API、库的概念,但是要超出它们。如果需要详细了解框架,可先从设计模式开始学习。J2EE是一个虚的大的概念,J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS,谈到J2EE应该说最终要落实到这三个子概念上。这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器,你如果要开发一个Web应用,无论是编译或运行,都必须要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)。Web技术中除了Jsp/Servlet技术外,还需要JavaBeans或Java Class实现一些功能或者包装携带数据,所以Web技术最初裸体简称为Jsp/Servlet+JavaBeans系统。谈到JavaBeans技术,就涉及到组件构件技术(component),这是Java的核心基础部分,很多软件设计概念(设计模式)都是通过JavaBeans实现的。JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技术(也就是Jsp/Servlet)调用,那么JavaBeans就运行在J2EE的Web容器中;如果它被EJB调用,它就运行在EJB容器中。EJB(企业JavaBeans)是普通JavaBeans的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。至此,JavaBeans组件发展到EJB后,并不是说以前的那种JavaBeans形式就消失了,这就自然形成了两种JavaBeans技术:EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且这个JavaBeans不依附某种框架,或者干脆可以说:这个JavaBeans是你为这个应用程序单独开发创建的。J2EE应用系统开发工具有很多:如JBuilder、Eclipse等,这些IDE首先是Java开发工具,也就是说,它们首要基本功能是可以开发出JavaBeans或Java class,但是如果要开发出J2EE系统,就要落实到要么是Web技术或EJB技术,那么就有可能要一些专门模块功能(如eclipse需要lomboz插件),最重要的是,因为J2EE系统区分为容器和应用两个部分,所以,在任何开发工具中开发J2EE都需要指定J2EE容器。J2EE容器分为WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。如果你的J2EE应用系统的数据库连接是通过JNDI获得,也就是说是从容器中获得,那么你的J2EE应用系统基本与数据库无关,如果你在你的J2EE应用系统耦合了数据库JDBC驱动的配置,那么你的J2EE应用系统就有数据库概念色彩,作为一个成熟需要推广的J2EE应用系统,不推荐和具体数据库耦合,当然这其中如何保证J2EE应用系统运行性能又是体现你的设计水平了。衡量J2EE应用系统设计开发水平高低的标准就是:解耦性;你的应用系统各个功能是否能够彻底脱离?是否不相互依赖,也只有这样,才能体现可维护性、可拓展性的软件设计目标。为了达到这个目的,诞生各种框架概念,J2EE框架标准将一个系统划分为WEB和EJB主要部分,当然我们有时不是以这个具体技术区分,而是从设计上抽象为表现层、服务层和持久层,这三个层次从一个高度将J2EE分离开来,实现解耦目的。因此,我们实际编程中,也要将自己的功能向这三个层次上靠,做到大方向清楚,泾渭分明,但是没有技术上约束限制要做到这点是很不容易的,因此我们还是必须借助J2EE具体技术来实现,这时,你可以使用EJB规范实现服务层和持久层,Web技术实现表现层;EJB为什么能将服务层从Jsp/Servlet手中分离出来,因为它对JavaBeans编码有强制的约束,现在有一种对JavaBeans弱约束,使用Ioc模式实现的(当然EJB 3.0也采取这种方式),在Ioc模式诞生前,一般都是通过工厂模式来对JavaBeans约束,形成一个服务层,这也是是Jive这样开源论坛设计原理之一。由此,将服务层从表现层中分离出来目前有两种可选架构选择:管理普通JavaBeans(POJO)框架(如Spring、JdonFramework)以及管理EJB的EJB框架,因为EJB不只是框架,还是标准,而标准可以扩展发展,所以,这两种区别将来是可能模糊,被纳入同一个标准了。 但是,个人认为:标准制定是为某个目的服务的,总要牺牲一些换取另外一些,所以,这两种架构会长时间并存。这两种架构分歧也曾经诞生一个新名词:完全POJO的系统也称为轻量级系统(lightweight),其实这个名词本身就没有一个严格定义,更多是一个吸引人的招牌,轻量是指容易学习容易使用吗?按照这个定义,其实轻量Spring等系统并不容易学习;而且EJB 3.0(依然叫EJB)以后的系统是否可称为轻量级了呢?前面谈了服务层框架,使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关,一般是通过标签库(taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。这样,表现层和服务层的分离是通过两种框架达到目的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从服务层中分离出来是其目的,持久层框架有两种方向:直接自己编写JDBC等SQL语句(如iBatis);使用O/R Mapping技术实现的Hibernate和JDO技术;当然还有EJB中的实体Bean技术。持久层框架目前呈现百花齐放,各有优缺点的现状,所以正如表现层框架一样,目前没有一个框架被指定为标准框架,当然,表现层框架现在又出来了一个JSF,它代表的页面组件概念是一个新的发展方向,但是复杂的实现让人有些忘而却步。在所有这些J2EE技术中,虽然SUN公司发挥了很大的作用,不过总体来说:网络上有这样一个评价:SUN的理论天下无敌;SUN的产品用起来撞墙;对于初学者,特别是那些试图通过或已经通过SUN认证的初学者,赶快摆脱SUN的阴影,立即开溜,使用开源领域的产品来实现自己的应用系统。最后,你的J2EE应用系统如果采取上面提到的表现层、服务层和持久层的框架实现,基本你也可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系统了。还要注意的是: 开发出一个高质量的J2EE系统还需要正确的业务需求理解,那么域建模提供了一种比较切实可行的正确理解业务需求的方法,相关详细知识可从UML角度结合理解。当然,如果你想设计自己的行业框架,那么第一步从设计模式开始吧,因为设计模式提供你一个实现JavaBeans或类之间解耦参考实现方法,当你学会了系统基本单元JavaBean或类之间解耦时,那么系统模块之间的解耦你就可能掌握,进而你就可以实现行业框架的提炼了,这又是另外一个发展方向了。以上理念可以总结为一句话:J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。原文网址:http://www.javaresearch.org/article/31774.htm

Eclipse的visual editor的插件

visual editor俗称ve,现在在官方很难找到他的下载位置了。visual editor是制作JFC/Swing/SWT/RCP的工具,生成的代码比netbeans要简洁的多。整理下ve的在线安装地址eclipse3.6使用ve1.5http://download.eclipse.org/tools/ve/updates/1.5.0/eclipse3.4使用ve1.4http://download.eclipse.org/tools/ve/updates/1.4/ve1.5和1.4的zip离线包下载地址:VE-Update-1.4.0   |   VE-Update-1.5.0.zip

全国省市信息数据以及模型

全国省市信息数据以及模型两种不同的数据建模方式,各有优点!ORACLE数据库模型一,省市同一张表的,结构如下REGION_IDPROVINCE_NAMEREGION_CODEREGION_EN_NAMEREGION_CN_NAMEREGION_GRADEREGION_ORDERPARENT_REGION_IDREMARK****CREATE_TIME201山东省201 滨州市2 16  202山东省202 菏泽市2 16  203河南省203 郑州市2 17  204河南省204 开封市2 17   create table REGION (  REGION_ID NUMBER(6) not null,  PROVINCE_NAME VARCHAR2(50),  REGION_CODE VARCHAR2(10),  REGION_EN_NAME VARCHAR2(25),  REGION_CN_NAME VARCHAR2(50),  REGION_GRADE NUMBER(1),  REGION_ORDER NUMBER(3),  PARENT_REGION_ID NUMBER(6),  REMARK VARCHAR2(255),  CREATE_TIME DATE) 模型二,省市分两张表,结构如下CIDCNAMEPID40北京市141天津市242上海市343重庆市444石家庄市545唐山市5 create table CITY (  CID NUMBER,  CNAME VARCHAR2(32),  PID NUMBER)create table PROVINCE (  PID NUMBER,  PNAME VARCHAR2(32)) 下载地址:http://dl.dbank.com/c02i3dc2dk  

简化设计,更切合实际的开发

千层饼的代码,就是过度的封装,当你要明白一句代码的使用的时候,才发现他已经关联好多的代码,你还需要明白这些代码的使用,你不疯才怪。今天还和同事说起mvc的使用,在我们的项目中,mvc的使用,已经有些过度了,过度的强调了设计模式。mvc,模型(model)、视图(view)、控制层(controller)。view对应页面,即html、jsp、其他使用模版引擎的。model对应bean,而bean是数据库表的承载者。controller就是逻辑业务的处理。在目前系统在实际使用中,划分出来Action层、Service层、Dao层。按照定义简单的说Action控制页面跳转,Service控制业务逻辑、Dao控制数据访问存储,层次也是很清楚的。除此之外,还有页面,在当前,页面也是讲究框架分层的,在Service、Dao中有自己接口,有接口的实现,很可能还会有父类的接口或者类的继承,层层相叠,在实际使用,一个很好的思想,可不一定会很好用。我学习mvc分层的时候,很崇拜这些设计思想的,公司的项目中,也有着设计思想的架构,平时搞起没事来,就提这个思想、那个思想,使用久了,就越来越不觉得的,处处的设计思想,反而不好用了。今天在和同事讨论mvc的时候,说道Service层来处理业务的逻辑,我同意这种观点,可Service层就那么好用么?不见得吧!层次分的更多,需要更多的维护,结构更加的复杂。我使用过php的thinkphp,国产的php框架,很推荐这个框架,在他的框架的就没有Service层,直接的Action到Dao。也研究过人人的开源框架paoding,Action到Dao,Dao可以使用注解,简单好用,快速,上手容易。在这里说的两个框架,都属于轻量级的框架,适用于系统快速开发。最终系统的设计架构,都要以实际使用为主,只是提醒各位架构者,设计思想仅仅作为一种知道,过度的设计和使用反而会适得其反。转载一篇关于过度的设计的文章。千层饼代码 任何一个跟计算机专业沾点儿边的人都知道“意大利面条代码(spaghetti code)”指的是什么。很遗憾,这种风格的代码如今还是不少。但现在我们又有了—找不到其它更好的词汇,还是沿用面食的比喻—“千层饼代码(lasagna code)”。 千层饼代码是指代码被一层层的抽象,一层层的对象继承和引用,以及其它一些毫无意义的修饰,最终导致代码臃肿不堪,难于维护,完全跟“清晰”这个词不沾边。看着如今有些代码写成这个样子,我不由抓狂。而当你看到Turbo Pascal v3 的体积是如此的微小,而且明白这是一个功能完整的Pascal语言编译器时,你不能不问,为什么如今的应用程序和编译器会全都如此的巨大。 Turbo Pascal v3的体积小于40k,不错,4万个字节码。今天你还能找到体积这么小的有用的软件吗。大多数人甚至不能编译出一个小于1M的“Hello World”程序,这都是受我们追捧的面向对象编程的恩赐,人们似乎对“代码行数”的要求胜过代码清晰性,对“抽象和对象化”的要求胜过代码的简洁和优雅。 回想起我初进入计算机行业时,我们写很少的代码能完成很多的事。而如今,我们写了成千上万行代码,能完成的事却变少了。如此的悲哀,让人想哭,或无奈的的甩甩手,走开。 还有几点亮光。还有一些人在写短小漂亮的代码。但他们显得越来越稀有,尤其是在最近热衷于写优雅、短小、漂亮的代码的人过世的时候。Dennis Ritchie(C语言的创始人)会告诉你可以用小程序做大事。他强调说:算法是你要解决的问题的核心。创造漂亮和精心设计的东西,值得人们永远研究,就像Thompson版的正则表达式算法! 也许只有像我这样的年龄和天生的坏脾气的人才会这样的抱怨,但这些年来很多系统都让我痛苦。它们写的如此的丑陋,设计的如此糟糕。也有亮点,但少之又少。无怪乎,现在的孩子都不愿意去研究计算机科学。以前我们对各种算法的固有的美丽的追求,现在变成了在键盘上的一痛乱敲,输入成百上千行代码,期望编译器能编译通过。Lisp,Smalltalk或APL等语言的优雅哪里去了?甚至Fortran也比现在的许多受人追捧的那些烂编程语言优雅的多。为什么没有人回去研究那些面向算法的语言、去改进它们? 我曾经对我的孩子说,这么多好的语言如今只剩下C语言,这真是悲哀。不错,一些特定领域还有一些很漂亮很小的语言存在,但会成为主流吗?不会。这就是一场灾难。有些东西,比如Python,如果它不把一个面向对象的系统嵌入到体内,也许它会很不错。唉。译者注:lasagna,字典的解释是,“烤奶酪肉馅面条:通过烘烤带有一层层的番茄汁和填有如奶酪和肉馅等调料的面团而制成的菜肴”,但这解释我听起来更像是月饼沾大酱。这里暂且用一个比较形象的东西:千层饼。原文网址:http://www.aqee.net/lasagna-code/

IT人员如何找到自己的时间?

如何找到自己的时间,应该属于是时间管理的范畴吧!而且不仅仅是IT人员如何找到自己的时间,对于各行各业的人都适用的。有时间了,如何利用时间也很关键的,而更多的时间应该去思考。IT人员如何找到自己的时间?不知道你是不是有和我一样的体会,作为IT人员(软件开发、网络运营、项目管理等等),仿佛我们每天都有做不完的事,写代码、做维护、以及我们最讨厌的,无休止的会议。但是,除了工作,我们也需要生活,也要关心粮食、关心电视,晚上检查一下不热的暖器,或者修一下卫生间不停滴水的水龙头。家人需要你的照顾,你还想看看最新的失恋三十三天,或者追一追美剧、找几个人去踢踢球、打打电子游戏机。以正常上班计算,早上8点半到岗,晚上6点钟下班,再加上路上的时间,还有多少小时能做你自己想做的事呢?经过一段时间的摸索,我找到了几条小技巧,和园子里的各位分享一下,希望能给大家一点启示: 1、注重碎片时间的利用 等车、坐地铁,这样的时间,可以用来收听有声书、收音机你喜爱的节目。 给自己做一个计划,把最近想关注的内容列一下,然后整理成一个列表,把可以通过“听”的方式获取的东西存到你的手机里。随时可以听。 会议、做系统、编译等中间的等待时间,是处理邮件、GR中的未读的好机会。 在手机上安装GR的离线浏览器、EVERNOTE(或者你的知识管理软件),设置每天早上与服务器同步。这样,在一天中,只要有空,你就可以消灭一条未读。关于GR与EVERNOTE建立自己的知识系统的方法,我会在以后的文章中讲到。2、向公司要时间 我们的每个白天都是在公司中度过的,为什么非要把看书和学习的时间安排到晚上呢。其实在中午、或者某个工歇时间,完全可以成为我们消灭一本书的好机会。 中午饭后,与同事们一起打打羽毛球也是不错的选择,连去健身房的时间都省了。3、每天早起半小时 早上的时间最有效率,如果你打算学习一门语言,或者某个方面的知识,早起半小时,充分利用它。白天困怎么办?晚上早睡半小时呗。熬夜对人的健康的损害那么大,为什么 不早睡呢?还可以和家人的时间同步。4、把机械的事让电脑去做 有一些事情,特别是工作中的事,有人喜欢RTX、电话、短信、邮件中问个不停。做一个机器人软件,对于某个关键字的事情自动处理。哈哈哈哈 (比如经常有人让我传给他最新的加密锁号列表及使用方法)5、向别人要时间 我们有一个毛病,总觉得有些事只有自己才能做好,只有自己做才放心 ,其实,完全可以把一些事安排给别人或者委托他人帮你做。怕他做不好?写一个操作手册给他就是了(前提是这是个经常要做的事)。6、买一些时间 打扫卫生、擦窗户这样的家务活,做为新好男人,是周末少不了的活吧。其实,可以打个电话让专业的保洁人员来帮你做,一来做得快,二来你可以用这个时间读一本书,与家人看部电影,或者干脆睡上一觉。如果你说没有时间,向别人买,是来得最快的。算一下你的时间成本,和别人的时间成本,你就想通了。以前我总是想把晚上的时间独立出来,自己去学东西,或者是做自己喜欢的事。结果呢,因为忙了一天,一来身体很累了,需要休息,二来少了与家人的沟通,也感觉很不好。通过以上几条,时间多起来了。原文网站上面的广告一大推,不知道为什么发布到上面去啊!原文网址:http://www.cnblogs.com/ranran/archive/2011/11/13/2247461.html