吐槽java之《程序员的呐喊》读后总结

《程序员的呐喊》读后总结

——关于java的批判

一、写在总结前面的一些废话

《程序员的呐喊》(后文简称呐喊),是一本非常有趣的散篇,全文都是作者对目前软件开发界的看法,主要翻译者也很可爱,用了一些中国化的文字进行描述,感觉看的时候十分畅快,当然前提你得是个程序员。作者,是一名开发了20几年的软件工程师,用过10几门主流语言,开发过无数大型项目和平台,曾在亚马逊和谷歌工作。

吐槽java之《程序员的呐喊》读后总结_第1张图片

作者:Steve Yegge

其他话不多说了,要是想看,但是懒得去买的话,我这边提供了百度云盘的共享链接,如下:链接: http://pan.baidu.com/s/1i3PT9qd  密码: u9ua

 

——————————————分割线———————————————

 

Ok,下面就是开始总结啦。

看完整本书,得出的结论,如果你不是某一语言的忠实粉丝的话,那么你就会被洗脑。就会发现我勒个去,原来java是一门这么烂到透的语言,ruby真的是一门超级好用的语言吗?Lisp真的应该去学习嘛?操作系统,额。。。?编译原理,什么鬼?数学原理,离散数学,概率学,统计等等,what,难道我不是程序员?到最后面试谷歌技巧,大公司都是这么面试的,还有面试拒人团??Ohno,看来我得重头学习我的软件开发课程了。。。(当然,如果你只是想要找份稳定工作,不想着怎么升职加薪,赢取白富美,走向人生巅峰的话。)

其实,虽然整个篇幅很长,字数很多,这都是由于作者很爱发牢骚,不过不重要,作者在最后一页里写了,如果你不想读那么长的文章,那么最后一页就是整本书的总结啦,原文如下:

  • 软件开发的方式多种多样,不存在谁好谁坏。但是他们互相都看不起。
  • 好的程序员之所以出色是因为熟能生巧。
  • 只要你愿意,随时都可以学习新语言。
  •  如果你想当经理,那你很可能不会是个好经理。
  •  Lisp很难掌握,但它是唯一能让我继续快乐的语言。
  • Emacs很难掌握,但却是终身受益的投资。
  • 离开舒适区,时不时学点新东西。
  • 为自己鞋垫东西,只有这样子你才知道那是不对的。
  • 多笑一点,这很健康,也让人感觉良好。
  • 记得自嘲,不过不要在公开场合大声自嘲,也不要忘了解释。

——Steve Yegge

最终,我还是读完整本书,并没有跳到最后,因为我想看看,作者到底是如何吐槽java的,额,读完后,作者提到的java怎么不是我认识中的java,java怎么会是这个样子,噢,我不想再用java写代码了。

因为作者几乎在全文中都提到了java,并且对其各种缺陷以及对其开发工作造成困扰,导致最后虽然他承认自己用了java进行开发7年,但是最终却选择ruby作为自己的主要开发语言。当然,在书中,它不仅仅只是吐槽java这门语言,他也同时对C、C++、Python、Perl、Lisp等语言进行批判,对的,只是批判并未吐槽,因为他也在用Python、Lisp等语言。那么为什么我要选择java进行着重总结呢?因为我是一名java开发者,接触最深,用得最熟悉的就是java啦,我曾经以为有了java还用学习其他什么语言,c++太重,Python、ruby等脚本语言好像看起来很危险的感觉(我想着大概是很多开发者只用java进行开发的原因),并不是不想学习其他语言,而是觉得学习其他语言好像并不能给自己带来什么好处,因为正如作者所言:不想学习新语言,是因为爱这门语言加上可以获得利益、恐惧以及一点点懒惰。如果是公司要求你必须学会一门新语言,用其进行开发,那么很多程序员都能很快上手,毕竟程序员都是聪明的。

那么,作者是从哪几个方面对java进行批判(吐槽)呢?

第一篇《巴别塔》中,就对目前主流语言进行分别的说教,很有风格,其他语言我就不说了,有兴趣的可以自己去看,我就自己看来得出的,作者对java的看法如下:

Java可以说是过去10年里最好也是最坏的语言;

Java让许多程序员从C++中解脱,让人有一种行政助理,让你能专心做你该做的事,不用为其他细节亲自处理,这就是整本书里唯一对java的赞扬,也是作者被java吸引进去的原因;

Java之所以流行起来,更加重要的一点是其发行公司sun做的营销很好,因为在很久以前smalltalk语言就已经拥有java的特性(如果你不了解smalltalk和对其感兴趣,可以了解但是不要了解太多,因为它已经消亡了),所以你所在java编程,你会被营销趋势所改变,比如大家都说多重继承不好,你就不知所谓的跟从(其实不是多重继承多糟糕,而是程序员本身的不好,当然我也是很弱,但是我正在努力每天都变好一点);

Java的爱好者都会中一种名叫OOP(Object OrientedProgramming 面向对象编程)的毒。

第二篇《名词王国里的执行》,作者对java进行了本质且致命的吐槽,我就是看了这篇文章,才对java生出了,是否真的要这样子做才能进行编程呢?作者用了一个很好的寓言故事进行说明了一切,名词王国代表java,对的,在java的世界里,名词有着至高无上的地位,其他形容词、介词、冠词等等,尤其是动词,都是下属,都是归名词所拥有的。

你看到这里,是不是觉得很熟悉,还记得java的helloworld 这个经典程序吗?你必须建立Test类(名词),在其总建立main方法(动词),然后才能在里面用System(名词)去out(动词)输出“helloworld”。

在其中,你明白这么简单的程序,你必须建立一个名词去执行输出另外一个名词。所谓的执行并不属于它自己,而是属于名字所拥有的。

因为java就是一个名词至上的王国,他们连一个倒垃圾动作都要知道这个动作属于是谁的,否则就无法进行倒垃圾。

有这样的名词至上,那么就会推动另外一种文化——架构的尊崇地位,因为名词就是事物,如同建筑一栋高楼,你必须实现由牢固的架构,否则必将倾倒,但是编程不同建楼,因为编程是有变化的,楼建好了就不变了,但是编程是会因为不同需求而变化,那么是否有一种不变架构去面对不停变化的需求?想到这里,我突然想起公司内部因为需求变化而苦恼的程序员了,因为每次需求变化都会让他们要推翻之前对项目的架构,接口设计等等。

在这样子名词至上的java编程过程中,其实就是说类是java编程中唯一的建模工具,同时还有它的固定化类型系统,你所接到的新需求,就算需求是一组动作、流程或者其他不是东西的概念,但是你必须把需求变成符合java那套东西,不管是用封装、打磨或者消灭一些东西。

原文有句引语说的好,其实OOP就是一种扭曲的观点,有点类似面向裤子穿衣服,同时也就是说,并非所有的东西都是对象(哈哈,感觉就好像在找对象,并非所有的女人都是对象)。

作者同时也希望java能改善这一点,在java8中引进了lambda特性,这也许是一种新的趋势吧。毕竟Java开发群众太多了,弄不好很容易搞死一大批开发者。

第三篇《神秘机器的笔记》,对语言区分保守和自由两派,这次倒没有具体吐槽,但是将java归于了保守派中,同时也分析国外公司的分派,谷歌居然也是保守派的代表之一,完全没有想到吧,因为谷歌里面开发要求太多了,禁止很多;facebook和亚马逊作为自由代表,分别说明自由派的工作方式就是各自或者各自的团队做着各自的事情,虽然会造成一些不好的影响,但是能创造出新的东西,也证明了只要程序员团结在一起就能解决很多问题

第四篇《摩尔定律就是胡扯》中,对软件开发现状的进行不满吐槽,摩尔定律就是硬件设计师的赚钱来源,因为每过18个月,就要翻一番,但是如果把关注重点放在并行上,我们就可以每18个月10倍的增长。作者提到目前主流计算机的原型都是冯诺依曼,但是在冯诺依曼最后十年单枪匹马建立一套基于细胞自动机的计算理论,是不是觉得很神奇呢,我们居然是在用这套设计的原型机。当然,如果你对现在的一切也开始不满,那么读书吧?编译原理、机器学习、数学都能让你有所助益,毕竟生活总是要向美好的那一面。

第五篇《变换》中,提到了重构这一话题,对于java开发者而言,这是十分重要的,因为java的代码是会很容易就十分混乱,如果不经常重构的话,那么过了一定时间你就会看不懂自己的代码。重构主要提了以下几点:

万恶的局部变量,解释了为什么代码会不断膨胀?

不要写注释,what,是的没错,写单行注释没必要,你完全可以让代码语义化,更直白命名函数名和参数名。

Ok,看了这两点,对于没看过《重构》这本书的人,是不是觉得很惊慌,别紧张,因为你周围大部分人都没看过,如果他是一名十分爱好看书的人。但是作者在接下来说了重构的现状:通过IDE进行自动化重构,java尤其擅长这工作,但是是否真的自动化重构能帮助到我们呢?

我们对自动化重构重视很多,因为它一点击按钮就能帮我们做很多事,正如生产力一般。但是作者告诉我们错了,其中重构重要的不是自动化重构,更加重要的是重构的思想,它主要是希望你懂得代码的异味,从一开始就避免,而不是等到代码坏了才来用各种自动化重构工具进行补救。

好吧,我已经写总结写了两个小时,有点懒惰了,现在已经是凌晨1点多了,对于不是java吐槽我就略过了,因为有些东西不太适合总结太多,比如弱类型和强类型的谁是谁非,代码里的哲学等等都需要好好说说的,但是这篇总结的主要目的是说java的不是,所以下面还是好好的说说java吧。

第不知道几篇《代码的天敌》,作者从自己开发的一个长达十年的游戏入手,讲述自己为什么要把这个受欢迎的个人开发游戏下线,其原因竟是因为不想它过去流行,更本质的原因是因为它的代码量过大,导致作者无法再为其维护。因为代码量达到几百万行,导致无法在eclipse打开进行编译,因为导入的时候eclipse就卡死了,代码是用java写的。同时,作者开始自省,也发现很多公司面对大体格的代码的态度是不对的,他们以为这只是工具的问题,代码多了,如同尘土,移走就好了。

这里作者确定这是一篇吐槽java的文章,因为再次提到了重构,并且明确提出重构java的代码,会让代码剧烈膨胀,说句比喻:重构就像是在清理衣柜的同时保证不会丢掉任何东西一样,换个大点衣柜,把所有东西分类摆好,那么看起来就很干净整洁。但是程序员往往漏掉一点,如果不愿意丢掉不要的东西怎么叫大扫除呢。同时也吐槽了粘贴复制所造成的问题,所有的程序员都有的问题,当你遇到需要在N个地方改同一个问题的时候,你就知道了。这里提到了一个疑问,为什么马丁福勒(重构的作者)会放弃java去ruby呢?(致命吐槽点)

设计模式不是java的特性,因为设计模式就是23个漂亮的盒子,让你可以用这些盒子装你的混乱代码,但是别忘记了,盒子也是要占据空间的,意思就是这也会让你的代码量增长。这更加肯定了一点,代码变大是java中无法回避的问题。

很多java程序员都认为代码量大是程序的一大特点,因为代码量才是衡量一个项目是否是一个大项目的标准。额,我曾经也这么认为过,好吧,我现在完全不愿回想当初天真的我了。同时也认为大规模的代码完全可以通过IDE进行处理,作者进行强烈的反驳,因为大规模代码完整是java本身机制导致,静态类型系统没有可以压缩代码空间的可能,没有宏,没有eval,没有声明式数据结构,没有消灭粘贴复制的机制,那么IDE能帮代码做点什么,格式化代码,自动化重构代码,好吧,那只会让代码越来越大。

最后什么样的代码量才是合理呢?用java去精简代码估计不可能了,得出Jython、JRuby、Rhino(JavaScript0)等运行在jvm上的新型语言,拥有java特性,同时能让你从java不断增长的代码量中逃脱出来,那么开始学习一门新语言吧。

在后续的篇幅中,作者说了些不关java的事情和道理,但是同样很有用和能刺激到人的话。比如:反对反宣传,以及程序的数学和土豪程序员的美食(谈编译原理的重要性),让你觉得你完全对程序开发这门不太熟悉,你是否只是为了工作而去编程,并不是真心喜欢编程,因为编程所做的事情只是因为公司安排。

恩,有篇文章我想还是需要摘出来说一下,就是《敏捷好,敏捷坏》,作者在文章里说了坏敏捷是怎么样的,好敏捷是怎么样的?论述了当前大多数敏捷开发的特性: 强制性的迭代开发和结对开发。你可以这样子想,如果程序员在迭代开发下,版本必须在规定时间内发出来,但是却发不出,拼命赶代码,你觉得代码会很好嘛?同样的,如果程序员这时候写的代码很爽,但是版本的功能都开发结束,却叫他停下来不需要再开发了。还有就是迭代开发有个休息期就是叫程序员回去整理自己的代码,这相当于要求他们继续工作,工作时间怎么会有新东西出来呢,怎么会有时间去帮助其他人工作,毕竟你是有工作在身。

同时,我十分希望产品经理或者技术主管能看看这篇文章,如果你们公司已经开始了敏捷迭代开发的话。(后面我会把他转载到我的博客里)

当然,在最后有篇著名的文章《吐槽谷歌平台》,彻底让作者在互联网火了一把,文章主要是描述作者对谷歌平台的种种吐槽,对比Facebook、亚马逊的平台的开发各种API接口,再看看谷歌平台,以及公司内部搭建平台的种种困难、以及暗讽微软、苹果等提供的接口就会为第三方开发者提供狗粮而已。

Ok,总结到这里结束,本总结仅仅代表我看完这本书有所感想。

那么,接下来对于我这边学了java几年,应该有怎么感悟,或者分享我自己的学习计划:

1.长期温热学习数学知识、数据结构

2.学习ruby或者JavaScript等其他语言,时间要求在半年以内能用其搭建一个web应用

3.编译原理,学习如何建立一个编译器

4.操作系统,起码Linux系统要学会,我想这方面我是个菜鸟

5.坚持写东西,虽然很累,但是值得

你可能感兴趣的:(读后感)