文章分类 - 编程趣文
摘要:虽然这样的文章非常的多,并且,就算是对于编程新手来说,也是非常的简单和显而见,但是,在我们进行Code Review过程中,我们还是能够看到那些非常混乱的代码,所以,有些时候,你会在想,是不是这样的规则太多了,导致我们的程序员记不住。虽然我们在以前 的文章中一遍又一遍的说过(比如:《优质代码的十诫》),千言万语总结一下,无论你用什么样的语言,最最基本的编程原则就是下面这四条。1 – 简短的方法简单才会易读,简单才会容易,简单才能重用,简单才能保证质量。把一件事搞复杂,是一件简单的事;而把一件事变简单,这则是一件复杂的事。 KISS-Keep it Simple Stupid是一种哲学,Do o
阅读全文
摘要:前几天Neo写过《编程中的命名设计那点事》,这里也有另外一篇和程序命名的文章,可以从另一个角度看看。1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。好的变量:daysDateRange, flightNumber, carColor.坏的变量:days, dRange, temp, data, aux…在我们的日常工作中,有很大数量的开发人员喜欢使用短的变量名,而不是有含义的变量名。这主要是因为我们大学教科书的那些示例所造成的,人都是先入 为主,所以,教科书中的那些很抽象,带着演示的变量命名影响了我们一代又一代的程序员,并影响了他们很多年。虽然那些短的,教材式的变量名,可能会
阅读全文
摘要:在我开始设计系统的时候,我会花去很多时间去设计命名,因为好的命名和好的设计是分不开的。In the beginning was the Word, and the Word was with God, and the Word was God太初有道。道与神同在,道就是神。 (约翰福音第一章,第一节)在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但是如果坏的命名那一定不会给你带来好的设计。在设计过程,如果你发现你很难命名某一个模块,某个方法时,可能你真正遇到的问题不是难命名的问题,而是这个设计是否真的合理,你或许应该花更多的时间来重新设计一下你的模块。好的命名不仅会带
阅读全文
摘要:1.- DRY: Don’t repeat yourself.DRY是 一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味 着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让他们以一些合 适的参数调用这个新的方法。DRY 这一法则可能是编程届中最通用的法则了,目前为止,应该没有哪个程序员对这一法则存有异议。但是,我们却能发现,一些程序在编写单元测试(unit testing)时忘记了这一法则:让我们相像一下,当你改变一个
阅读全文
摘要:之前发表过《优秀程序员的十个习惯》以及《程序员需要具备的基本技能》,那是我们需要去学习和培养的。这里,我们主要讨论十个糟糕程序员的特征,主要是需要让我们去避免和小心的。1) 情绪化的思维如果你开始使用不同颜色的眼光来看待这个世界的话,那么你可能会成为一个很糟糕的程序员。情绪化的思维或态度很有可能会把自己变成一个怪物。相信你经常可以看到很多很糟糕的程序会使用下面的这些语句:我的程序不可能有这种问题。Java就是shit。我最恨的就是使用UML做设计。需求怎么老在变,没办干了。受不了这些人,他们到底懂不懂啊。…… ……这些带着情绪化的思维和态度,不但可以让你成为一个很糟糕的程序员,甚至可以影响你的
阅读全文
摘要:在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer)。经过一段时间后,这些人也许能够成为一个 优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作。但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需要注意,如果你能让下 面十个条目成为你的习惯,那么你才能真正算得上是优秀程序员。1. 学无止境。就算是你有了10年以上的程序员经历,你也得要使劲地学习,因为你在计算机这个充满一创造力的 领域,每天都会有很多很多的新事物出现。你需要跟上时代
阅读全文
摘要:很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验。在绝大多数时候,我发现问这些问题的朋友都有两个特点:1)对Unix有畏难心理,对其没有信心;2)喜欢用拿Windows来和Unix做比较。这两种特点就像两个“心理暗示”,暗示着自己Unix很不好学,暗示着Unix很糟糕,不如Windows好。于是,自己也就被自己的这种长期的“暗示”所催眠了。因为,从一开始就有畏难情绪,所以也就觉得Unix不好,觉得非常很吃力,最后还会导致对Unix的厌恶和反感的情绪。所以,为了纠正上述朋友们的“心理暗示”。我想写下这篇文章,想告诉大
阅读全文
摘要:软件开发是一个跨度很大的技术工作,在语言方面,有C,C++,Java,Ruby等等等等,在环境方面,又分嵌入式,桌面系统,企业级,WEB,基础系统,或是科学研究。但是,不管是什么的情况,总是有一些通用的基本职业技能。这些最基本的职业技能通常决定了一个程序员的级别,能否用好这些技能,直接关系到了程序员的职业生涯。很多程序新手也是因为缺少、达不到或是不熟悉 在这些基本技能,所以,他们需要有老手带,需要努力补齐这些技能。而高级程序员应该非常熟悉这些基本技能,而且有能力胜任并带领其他经验不足的程序员。下面这些基本职业技术可以用来做为对一个程序员的评估,很明显,下面的这些技能都可以用来做面试。虽然,还有
阅读全文
摘要:在过去的N年中,我遇到了很多使用囧然不同风格的开发者,下面是我所知道的一些,你还知道其它的吗?散弹枪编程这种编程风格是一种开发者使用非常随意的方式对待代码。“嗯,这个方法调用出错了……那么我会试着把传出的参数从 false 变成 true!”,当然依然出错,于是我们的程序员会这样:“好吧,那我就注释掉整个方法吧”,或是其它更为随意的处理方式,直到最后让这个调用成功。或是被旁边的某个程序员指出一个正确的方法。如果我们把一个正规的程序员和一个撞大运的程序员放在一起做结地,那么,那个正规的程序可以马上变得发疯起来,并且,可以把正规的程序员的智商降到最低。两个撞大运的程序员不应该在一起做结对编程,这是
阅读全文
摘要:程序员应该是一个比较特殊的群体,他们因为长期和电脑打交道所养成的性格和脾气也是比较相近的。当然,既然是人,当然是会有性格的,也是会有脾气 的。下面,让我来看看十件能把程序惹毛了的事情。一方面我们可以看看程序员的共性,另一方面我们也可以看看程序员的缺点。无论怎么样,我都希望他们对你的 日常工作都是一种帮助。第十位 程序注释程序注释本来是一些比较好的习惯,当程序员老手带新手的时候,总是会告诉新手,一定要写程序注释。于是,新手们当然会听从老手的吩咐。只不过,他们可能对程序注释有些误解,于是,我们经常在程序中看到一些如下的注释:r = n/2; //r是n的一半//循环,仅当r- n/r不大于twhi
阅读全文
摘要:在Stack Overflow上有这样的一个贴子《What’s your most controversial programming opinion?》,翻译成中文就是“你认为最有争议的编程观点是什么?”,不过,在400多个主回贴,以及千把个子回贴中,好像并不是很有争议,而是令人相当的茅塞顿开,下面罗列一些,并通过我自己的经历和理解发挥了一些,希望对你有帮助。1) The only “best practice” you should be using all the time is “Use Your Brain”.唯一的“Best Practice”并不是使用各种各样被前人总结过的各种设
阅读全文
摘要:之前发表了《6个变态的C语言Hello World程序》,主要是是像大家展示了一些C语言的变态玩法。也向大家展示了一下程序是可以写得让人看不懂的,在那篇文章中,可以看到很多人的留言,很多人都觉得很好玩,是的,那本来是用来供朋友们“消遣作乐”,供娱乐娱东而已,不必太过认真。不过,通过这种极端的写法,大家可以看到源代码都可以写得那么复杂难懂的。大家也许在赞叹之余一笑了之,而我则希望,大家能够在娱乐以后认真思考一下,你不要以为咱们自己不会把代码搞得那么复杂,只不过没有像那6个Hello World一样那么极端,不过,说句老实话,咱们每个程序都有把清晰的程序搞得一团混乱的潜能,只不过程度不一样罢了,我
阅读全文
摘要:下面的六个程序片段主要完成这些事情:输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。hello1.c1234567891011#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)#define ___ _(0x6F)_(0x2C)_(0x20
阅读全文
摘要:在酷壳,有很多文章都提到了代码注释,如:《十条不错的编程观点》、《优质代码的十诫》、《整洁代码的4个提示》、《惹恼程序员的十件事》等等。今天,某国外的程序员在这里列举五种应该避免的程序注释,我觉得比较有道理,但我觉得有少数几个观点也并不绝对。所以,我把原文的这五种应该避免的程序注释罗列在下面,并放上原作者和我的个人观点作为比较。希望对大家有用。一、自恋型注释(注:原文为Proud,我觉得“自恋”更好一点)12345678910public class Program{static void Main(string[] args){string message = "Hello Wor
阅读全文
摘要:对于一个程序来说,最重要的自然是“正确性”。在保证了程序运行以及输出结果的正确性之后,我们还会对程序提出其他的要求,比如容错性,可移植性,高效性(运行速度快,使用空间小)等等。而为了能够更好地进行维护修改、传播分享、阅读学习,我们还会希望写出来的代码具有“可读性”。也正是为了“可读性”,程序里有了那么多的注释,有代码缩进,语法高亮,甚至还有代码规范。在编程的学习过程中,我也被反复强调要写出来可以让人类阅读的代码,而不仅仅是机器能看懂。我也被反复提醒,如果没有注释和文档,过不了几个月我再回头看一定看不懂以前自己都写了些什么东西,干嘛这么写(事实也是如此)。而及时是写注释,也要注意《五种应该避免的
阅读全文
摘要:现在做程序的时候,开发人员都会偏向使用高级语言,例如Java,C#,PHP, 一个很重要的原因就是开发效率高,开发速度快。而之所以这些高级语言能让写代码的速度变得那么快,一个重要原因就是伴随着这些高级语言的强大的接口类库。 很多工作都简化成只要引用几个类库,调用几个方法就可以了。不过太过简单了,有时也未必是好事,比如给数组排序只要 .Sort()就得出结果了,也不用管用冒泡排序,还是用了快速排序,或者因为不能全部加载而用了归并排序。可是真说回来,谁在意呢。使用标准库,调用标准接口,大家都能看懂,而且经过多年的累积代码也更安全,效率自然也是更优的。但是若真不在意,有时候也会让程序变得难以阅读,代
阅读全文
摘要:1、从C++到JavaC++和Java谁快?从算法上讲我认为毫无疑问是汇编〉C++〉Java,不要迷信某些个别评测,单纯的回圈测试什么的,比如JNode的官方网站上有Java写的JVM的性能和SUN的JVM进行性能比较的结果,JNode中用Java写的JVM竟然能比SUN公司用C++写的JVM还快!编译器完全可以作针对性优化影响测试结果,毫无 意义的东西。而且,评测结果不会具备多少实际意义,真正的应用系统的效率是80%取决于整体的设计架构,而非你使用哪种语言。所以讨论汇编、C++、 Java谁更快这个问题的人恐怕更多是为了自己的面子考虑,虽然Java当前如日中天,但其总是针对C++的批判性态度
阅读全文