前些天写了一篇《令人作呕的OpenSSL》,顿时引来了大量的恶评。令我非常尴尬,同一时候也认为悲哀。
假设说you can you up之类的,我认为起码这人看出了我的本意,仅仅是怀疑我的能力。可是我看到一些人居然在我评价了一段僵尸代码后认定我不懂编译代码,这就悲哀了,这段代码大致例如以下:
#if 0 /*abcdefghijklmn, ( and ABCDEFGHHHHSASA */ ..... #endif
请问有人会这么写代码吗?我仅仅是指出这段代码确实不合理而已。悲哀点在于,有些人为自己能看懂这段代码感到非常荣幸和自豪。由于他知道编译器先处理掉凝视再做宏的预处理,这仅仅能说明他没有忘掉当初学C语言时学到的东西,既然编译器的行为标准不是他制定的,那么他一定是学来的。非常多人都不是在看第一行代码,写第一行代码的时候才知道它的,假设来了一个新人,他不懂这些,当然仅仅是还没有学到,知道这么一个事实对于coder来讲是早晚的事,知道这一点确实不是什么值得自豪的事情。但他有逻辑,能看懂别人的代码,面对这么一大堆僵尸代码,这不是折磨人吗?难道不令人费解吗?确实。编译器没有迷惑,仅仅是编译器愤慨了而已,假设C标准不允许这么写的话,编译器会轻松非常多,能看懂这段代码并认为这么写没问题的人,记住。是编译器在纵容你。惯着你。不要得寸进尺。
不好的东西无论作者是谁都是不好的东西。即使是大师拉的屎也不是香的。只是我早就猜到会有人不允许我的观点,仅仅要是大家都在用的,存在即是合理的,他们就非要找一个这么做的理由不可,甚至还搞出这么做是“一种艺术”,...请看清楚,关于do {...} while (0)是我之前一直使用的,可是后来我舍弃了这样的做法,明确它妙处的人仅仅知其一不知其二,都知道它能取代goto,可是却不知道它应该用在哪里。
假设你认为它比goto好的话,Linux kernel的粉丝们是不是又要站出来为goto来平反呢??其实,Linux kernel同一时候使用了do{}while(0)和goto,仅仅只是前者都是用在宏定义中而已。Linux之所以用goto是由于它能够实现序列化的回退,正如:
sth1 ...goto err sth1 if error sth2 ...goto err sth2 if error sth3 ...goto err sth3 if error return err sth3 err sth2 err sth1
在err sth3往下。一系列的回退能够自己主动进行。当然,假设你憎恨goto。用多层的do{}while(0)也是能够的。可是问题又来了,不是也有人说过层次太多不好吗?问题是,就由于某个大湿说了一句goto不好,从此goto就背上骂名了?假设你不是存在主义者。是不是应该大骂goto的引入者或者C的发明人呢?其实,goto也是艺术。其实,以上指出的其二就是,不论什么东西。看你怎么用,屎不能喂人,但能够喂狗,仅此而已。
诚然。OpenSSL代码能够编译过,也能够执行,它的库已经被用于大量场合,这就说明它是正确的。是的。它并不错。它没有问题。问题在于。我们不应该评价代码本身的错与对。以及编译器怎样地将其优化成人看不懂的机器码。我们更应该关注的是它能给我们带来什么,它怎样让后来人能够看得懂,不那么令人费解地被理解,从而扩展它实现自己的定制需求,这才是根本,代码的生命力也因此而体现出旺盛。对于OpenSSL而言,可读性是差了点,或许跟它的历史以及开发模式加上缺人手有关。这些社区都是承认的。可是同学们把它当教条就不正确了,认为它应用广泛而且是大师參与当中就膜拜它。
开源的东西并不都是好的,也并不都是大湿的作品,开源的本质恰恰是消除了阶级门槛而带来的自由,随便一个菜鸟都能够在github上开一个项目,同一时候,也有非常多大湿參与的项目由于各种原因而夭折。这些原因中就包含代码太烂。太过技巧性,别人无法參与进来。英语和普通话的益处有目共睹,那就是它们的通用性,当然。你能够站在民族主义,文化主义的立场上反驳甚至憎恨我,可是我的意思是,无论你再不喜欢,无论它们多大程度的抹杀了你独特方言给与的创造性。你还是接受了它们。不是吗?你有你的方言,你能够说你的母语多么的美,可是面对第二种相同美的方言,母语的时候。你们将无法交流,无法互通有无...对于计算机编程语言写出的代码而言。可读性。可理解性就是通用性,要让每一个人都能读这段代码,能改这段代码。
别把代码写的易读看成什么没有技术含量的事情,代码本身就不是什么极其重要的东西,它仅仅是一个交流的媒介,不光是人与机器的交流。还包含人与人的交流,不像高深的数学,代码不值得让你写得如此排他。
每一个程序猿在刚毕业后差点儿都以前认为写一些非常有技巧性的绚烂代码会显得自己水平非常高,看不惯那种寻常的代码。或许老师教过说goto不好,那就再也不用它。然后换成do{}while(0)或者switch case之类的,或许老师又教过,说OO的多态能够免去else if,然后就当成了教条,时刻捍卫这些教条的同一时候。残留着一点小叛逆。这就造就大量炫技巧的代码,奇葩的代码。比方仅仅用一行代码实现一个复杂的功能之类的。这类代码可读性极差。以至于非常难维护,差点儿不可扩展,在不久的以后,面临全面重写。
这样的喜欢炫技的,特别较真儿,钻牛角尖。你说一件事这么做不好,他非要给你找出这么做非常艺术的原因,反之你说这么做非常不错。他却非要挑一个毛病,总之,总是想表现他与众不同,表现的自己非常有不同的想法。这样的人倒是挺适合參加比赛或者去单打独斗,不太适合在团队工作,同一时候我也认为。公司在面试的时候。不要再出那种非常能让人炫技巧可是网上答案一搜一大堆的题了...
喜欢唱反调的并不一定是怀疑论者。他们并没有勇气或者能力向权威提出质疑,很多其它地,他们是捣蛋鬼,毫无针对性。抓住什么都不放,就像大多数记者一样。看到人家做好事。就说是作秀,看到人家无动于衷。就说是冷漠...非常多人从大学毕业后。携带了一身的迂腐书生气,爱较真,你说一个观点,他就反驳,你说好。他就找出一点能证明不好的证据。你说不好,他就说你不懂这么玩的艺术性,他们这么做全然就是为了反驳你而反驳你,没有丝毫的逻辑性。经不起不论什么推敲...他们非常喜欢甄别说这话的人是谁,假设是权威,他们反而会把哪怕明显错误的观点当成教条。可是专家权威千万别犯错。否则他们就会永远被攻击,哪怕略微有一次。权威的观点真的就是对的。这就是一边倒的书生气。
这就要扯到教育了...
现现在非常多人已经认识到了传统教育的悲哀,迫不及待地想要採用美式教育或者日式教育方式,但在认识到自己的局限性在于态度而不是方法之前,所做的一切终于还是悲哀。
在这个奇妙的国度。相同一个问题,美国人日本人那样回答就说是引导思考。自己人假设那样回答相信非常多人都会认为是毫无根据的信口开河,非常多人已经丧失了推断能力!
生活在一个没有思考的世界。生活在一个仅仅有标准答案的世界。生活在一个歧视推理重视事实的世界。我每天面对的就是嘲讽和恶意!因此,怎样进行教育的方法并不重要。重要的是先改变自己的态度。学会思考和推断!
否则,美式日式的教育也会被模式化。成为教条!
更正一下,中国人失去推理推断力已经2000年了。或许更久。或许根本就没有推理推断力,必须有人给指个方向才干走!这或许就是集权的原因。
拿汉唐雄风反驳我的,那是你根本不懂成长曲线。
非常多孩子,在非常小的时候表现的绝顶优秀,可是长大后就泯然众人。每一个人或者社会都有自己的成长曲线。拥有促进早熟的环境并非什么值得高兴的事实,相反它是夹生饭的温床,非常多人在YY汉唐雄风的时候。说不定来了一队罗马军团就能把皇家卫队给灭了,尽管也有把罗马军团灭了的极大可能性。当初西班牙人灭了美洲帝国之前。那些帝国之间不也轰轰烈烈地上演战国七雄吗?假设当地的人相同YY。说阿兹特克国王的无敌军队能够横扫整个西欧(假设他们确实知道有西欧的话),那么我想大部分的人也会赞同的。有点跑题,但事实就是。不加推理信口开河的可能是你而不是我。
我没有根据。我就不会肯定的说某件事。我说的仅仅是自己的设想猜想。或者仅仅是自己的一点看法,假设有人那我所论述的这些看法来较真。那他就真的上套了。
有一点我非常相信。那就是喜欢唱反调的人基本就是干活的人,这是最最令人悲哀的地方。由于不唱反调的人基本都当了领导,也基本失去了不论什么解决这个问题的能力,当然也包含唱反调的能力...
我发现一个让别人相信你的好办法。那就是表达论点时千万别推理。直接说在某个外国人写的书上看到的就可以,但别太详细,由于教育出来的非常多人的强烈的钻牛角尖癖好....理论联系实际就是一脬屎,假设牛顿生在中国。那他的所谓毫无摩擦力的理想平面不被骂死才怪!
别人先提一个问题并给个答案,能够回答和反驳。可是却没有能力提出问题或者不敢针对一个问题给出自己的答案或者哪怕是一点点看法。