
程序员的怒吼
A Programmer's Rantings
作品简介
◎本作品由豆瓣阅读同文馆取得作者授权并组织翻译◎
Steve Yegge,从业二十余年的资深程序员,Google 员工,Amazon 前员工,直言不讳的业界大牛,写过很多让人觉得不爽但又觉得「特别对」的文章。本书是 Steve Yegge的博客精选集,探讨了关于编程语言、代码哲学、Google 企业文化、面试经验等问题,犀利幽默又不失专业,非常值得参考。
原书为电子书,由Hyperink 结集出版,并授予豆瓣阅读译为简体中文并发布数字版的权利。
作品目录
版权信息
前言
第一章 编程语言理念
作者注:巴别塔
巴别塔
C语言
C++
Lisp
Java
Perl
Ruby
Python
结语
作者注:名词王国的动作
名词王国的动作
垃圾满了
名词王国
邻国的动词
如果你的洞挖得够深……
Java国人幸福吗?
StateManager.getConsiderationSetter("Noun Oriented Thinking," State.HARMFUL).run()
作者注:神秘大巴笔记
神秘大巴笔记
真实世界的政治派系和软件领域的派系相关吗?
两党制不是一种有缺陷的模式吗?
这么说,安全工程师就是最保守的了,对吗?
所以……静态类型爱好者是保守主义者喽?
划分派别
这里能看出一些基本的规律:
案例分析
特别案例分析:Clojure语言
总结
作者注:摩尔定律是胡扯
摩尔定律是胡扯
重要抉择
编程最大的问题
一步步来
作者注:转换
转换
发现重构
如今的重构
重奏
点按生产力
作者注:弱类型够强吗?
弱类型够强吗?
静态类型的优势
静态类型的弊端
怎样才对?
大案例分析
我为什么支持弱类型?
弱类型够强吗?
第二章 代码哲学
作者注:软件需要哲学家
软件需要哲学家
作者注:代码最大的敌人
代码最大的敌人
少数派观点
看不见的膨胀
设计模式不是特性
数百万行代码
IDE能解决问题吗?
合理的代码规模
下一个Java
作者注:一点反对反炒作的意见
一点反对反炒作的意见
作者注:小鹿斑比遇上哥斯拉
小鹿斑比遇上哥斯拉
一门优质编程语言的衰亡
爱与金钱
哥斯拉又踩死了小鹿斑比
文化之事
Ruby
作者注:程序员的数学之道
程序员的数学之道
告别传统观念
你曾学会的(又忘掉了的)数学
学校没有教会你的数学
学习数学的正确之道
何时做习题最有用?
这些对我有什么帮助?
作者注:富人程序员的食单
富人程序员的食单
行军床和大胡子
你如何解决以下问题……
编译器的工作原理
编译器为何重要,第一部分
如果你不修编译器课程……
恶心莫过于大系统
编译器的阴暗面
第三章 在谷歌
作者注:谷歌求职攻略
谷歌求职攻略
注意事项和事先声明
面试前热身
精神上的准备
技术面试准备技巧
其它数据结构
其它事项
作者注:好也是敏捷,坏也是敏捷
好也是敏捷,坏也是敏捷
坏的敏捷开发
好的敏捷开发
突显特征对比强迫之鞭
日历的暴政
坏敏捷开发的更多细节
敏捷开发之好,不在于其名
作者注:谷歌还能否长盛不衰?
谷歌还能否长盛不衰?
作者注:吐槽谷歌平台
吐槽谷歌平台
最、重要、的、事情。
第四章 结束语
热门划线
不幸的是,大多数程序员,因为自认为“知道如何编程”,基本上都属于狭隘一族,遇到跟自己不同的人,就想给对方打上“错误”标签。这是人性,是我们最容易陷入的圈套之一,我曾经也是如此。9 人
卡尔,宗教已经不是大众的精神鸦片了。集成开发环境才是。7 人
过早优化代码是万恶之源。先让代码运行起来是第一位的,代码正确比性能重要,而迭代原型又比正确性重要。7 人
所有的计算都是抽象概念的层层推进,在抽象程度低的东西基础上依次构建抽象程度更高的。你不会直接以分子为单位去建一座城市。以程度太低的抽象物为基本单位,会让你陷入麻烦。6 人
程序员和开车的人总是跟自己说,我可以等“需要的时候”再学习新技能和新学问。但他们心里都明白,等到“需要的时候”,就“太晚”了。5 人
当人们的驾驶观念发生冲突时,他们的车就会撞到一起。而当理念一致,一个地区的人都以“同样的方式”开车时,事故率就会降到最低,哪怕这些人开车的方式在外人看来跟疯了一样。4 人
他们形成一个个文化孤岛,然后认定自己的方式是最佳的,而且是唯一选择。4 人
C语言和Lisp语言是截然相反的两种语言,它们各自所擅长的,恰恰对方表现比较差的地方。4 人
如果说C语言是最接近计算机运行方式的语言,Lisp则与运算本身进行的方式最为接近。4 人
语言塑造世界。愚蠢的语言只能造就愚蠢的世界。4 人
亲不尊,熟生蔑。4 人
Emacs是用一百年都不会过时的编辑器。4 人
Python原本可以征服世界,但它有两个致命缺点:空格问题和冰霜问题。4 人
回头等你只有一堆碎片时间能用来学习的时候,会更加痛苦。4 人
史蒂芬·斯基纳(Steven Skiena)的《算法设计手册(The Algorithm Design Manua)》4 人
编程世界也有很多亚文化群,一旦把他们凑到一起,也会发生冲突。3 人
经过多年的反复试错,我发现让很多人听你讲述的最佳办法是“讲故事”。而你如果不入戏,不享受这个过程,就讲不成好故事。3 人
我觉得,只要能把《Scheme入门》(The Little Schemer)和《Scheme高手》(The Seasoned Schemer)这两本书里的测试题都做下来,就差不多了。3 人
如果你想勇攀学习曲线高峰,找时间学习就好,让它变成一种习惯。没有别的方法。不管是想提高编程、数学水平,还是健身、放风筝,甚至是比死亡还可怕的人类第一大恐惧之事——公开演讲,你所要做的只是,迈开脚步,循序渐进。3 人
编译流程的第一个阶段是语义剖析。3 人
我能看清很多经验丰富的程序员都看不懂的编程模式。2 人
你得让自己养成笑的习惯——笑自己,笑别人,笑这个疯狂的世界——否则你最终可能会完全笑不出来。2 人
我发现到处都有狭隘主义的存在2 人
程序员在业界和学术界聚集,也会发展出“地方口音”、习惯、禁忌、传说和其他文化副产品。他们形成一个个文化孤岛,然后认定自己的方式是最佳的,而且是唯一选择。2 人
甚至2 人
Scheme2 人
它不能自知,因为它不是内省型的语言。2 人
C++就不一样了,它基本上没法解析2 人
有个亚马逊工程师曾说我们的代码库是座“巨大的屎山,而且是你能见到的最大的一座,每次需要修复什么东西,都得爬到这座山的最深处。”2 人
要知道,客服部应用程序组是当时亚马逊第一个双披萨组。不管是当时还是现在,他们都是完全自主的。没人跟他们讨论,也没人帮忙,什么都是自己做。他们没有网页开发人员,也没有支持工程师,没有squat 。可以说,除了相当靠谱的工程师和人才培养文化,毛都没。他们也只需要这些。2 人
但C++有些不错的功能,Java却没有,比如:传引用(给栈对象)、typedef、宏、操作符重载。这些东西有时还挺好用。2 人
如果程序员本身不怎么样,用什么语言都会写出烂代码。但这个世界上大多数都是这样的程序员。2 人
拿不定主意的时候,就选择雇这种Java工程师:会好多种语言,讨厌J2EE和 EJB那种海绵般的大构架,会用Emacs。这些都是不错的经验法则。Perl2 人
Ruby2 人
不久,Perl也会出局。因为有一种叫Ruby的新语言终于被译成了英文。2 人
就其本质而言,保守主义其实就是风险管理。2 人
当你从大学(或者高中)毕业,就会面临一个简单的选择,要么继续学习,要么停止。有一个再容易不过的推导方式,可以帮你判断自己是否还在学习。它是这样的:没有痛苦,就没有收获。学习不是件容易的事。如果你觉得容易,那就是在随波逐流,而不是让自己更擅长一些以前做不到的、全新的东西。2 人
即修复你的代码,然后再也不犯这样外行的错误。2 人
使用强静态类型系统的人似乎更少做单元测试。不过,这点有可能是我个人的错觉。2 人
。比如,在被逼无奈的情况下,一个采用CORBA的团队最后可能会给每个接口调用添加一个XML字符串参数,以便在他们一开始选用的死板的类型系统中找到一个“突破口”。2 人
依赖注入是一种极为复杂的基础结构,作用是让Java以某种方式变得更加动态,但更高级的语言天然就能做到这一点。 而且你肯定也猜到了,依赖注入(DI)也会使你的Java代码库更加庞大2 人
对于程序员而言,最有用的离散数学分支莫过于概率论。2 人
代数和线性代数2 人
学习数学的正确之道应当是广度优先搜索,而非深度优先搜索。你需要先探查一番你所处的空间,记下相关事物的名称、知道所为何物。2 人
长期热身的意思是:在面试前一两个星期中温习知识并做一些习题。你需要将你的精神调整到在白板上解题的“模式”。如果你能在白板上解决问题,那任何其它的媒介(笔记本电脑、共享文档,无论什么媒介)对你来说都将是小菜一碟。所以你要为白板面试做准备。短期热身的意思是:面试前一晚睡个好觉,面试当天早上做密集、快速的热身练习。2 人
无论你被问到什么问题,都先以图的思维去思考。图是一种最基础和灵活表现任何关系的方式,随便拿一个有趣设计类的问题都有50%的概率多少与图有些关系。2 人
请一定确认你实在是没法用图论的方法解决某个问题,再尝试别的方法。这个建议很重要!2 人