查看原文
其他

《程序员的呐喊》读书笔记(一)

码中人 码农真经 2023-12-25

前段时间给大家推荐了《程序员的呐喊》,我自己也认真读了一遍。这是本10年前老书,但现在看还挺有意思的。很多观点,依然适用当前。

前言

01 写程序与开车
每个人都觉得自己会开车…其实这中间是有微妙的区别的。大多数司机的问题在于他们觉得“会开车”与“开好车”是一回事。
写程序也是一样,会写代码写好代码不是一回事。
你周围有多少成年人真的花时间去提高自己的驾驶水平?同样,写程序也应当是一件需要长期打磨的技能。
程序员和司机一样,总是自我安慰说等到需要的时候再去学新技能也来得及。但是在内心深处他们都明白,其实当需求出现的时候就已经太晚了。因此现实情况是这样的,旱鸭子会和水保持距离,司机会绕开泥泞的路段,而程序员会躲在舒适区里,搭建围栏把自己保护起来,然后祈祷世界和平。


02 经过这么多年的试错,我发现最容易抓住听众的办法还是讲故事。而不深入其中,享受过程,是讲不好故事的。(书里有一篇讲作者发现《重构》那本书里,就是讲了一个好故事)

一 、编程语言里的宗教


03 C是必修课。为什么?因为电脑都是冯诺·伊曼结构的,而C以精悍的语法展现了冯·诺伊曼机的能力,其他类型的机器也是存在的,比如Lisp机。还有一个原因就是,Unix是用C写的,不仅如此,包括Windows等在内的几乎所有的操作系统都是用C写成的,因为它们全部属于冯诺伊曼机操作系统。你觉得自己还有其他选择吗?至少在操作系统领域里,任何与C迥异的语言都发挥不出硬件的实际能力,至少这句话放在近一百年里都是对的这些系统都诞生于这段时期内。


04 计算机编程语言里没有所谓的“亲近生侮谩“,只有在掌握更优秀的语言前提下,才会懂得怎么批判自己最熟悉的那门语言。
“亲近生侮谩“ 原句出自马克吐温先生1935年著作《Notebooks》,原文完整句为:Familiarity breeds contempt – and children.中文翻译则五花八门,常见有‘亲近生侮谩’、‘亲昵生侮慢’等,中心主旨则没有改变,意思都是指如果关系太过亲近、亲密、亲切,有时候有些人就失去分寸,少了礼貌,变得轻薄、不尊重对方,甚至想吃别人豆腐想占便宜,就是狎侮。
作者很聪明,他的意思是说,不要觉得我喷的不对,那是因为你站得没我高(抢占了制高点)。如果你熟悉更优秀的语言,那你会跟我有同样的看法。
当然,了解其它优秀的语言及编程观点,永远都是正确且必要的。
作者后面也强调:
作为一个程序员,应该至少会一打编程语言才能立足,防止单独受某个语言影响而带偏思路,的确,程序员会几种语言,其思想不会受限制,可以以不同的方式是思考问题。


05 作者同时也强调交叉训练
交叉训练在运动学里是有理论基础的,只打篮球是不可能成为篮球大师的,你还要训练强化自己的力量、敏捷和耐力。
同样,只写一种语言或只一味编程都成为不会成为编程大师。


06 Emacs是不朽的编辑器。
从业多年,看过很多同事用vi(编辑器之神),但就是没见过用Emacs的,看来真是神用的编辑器。我自己一直也在用Vi,因为我不知道怎么退出。


07 语言本身不给力,类库再牛也是有限的。


08  假如把编程语言比作自行车的话,那么Awk就是粉色小童车,perl是沙滩自行车,Ruby是价值7500美元的钛架山地车。Perl到Ruby的飞跃和C++到java的是一样的,而且没有附带任何缺点,因为Ruby是perl优点的超集,而java去掉了一些人们想要的东西,却又没有提供真正的替代方案。
总之,喷Java就对了。


09 python本来是有机会一统江湖的,但它有两个致命缺陷:一个是空白符,另一个是死脑筋。
我心想,python虽然非常流行,但现在一统江湖的是javascript.


10  java名词王国:在java的国度,动词被禁止闲逛,只有在名词陪同下才可以。没有动词可以幸免,全部会被名词取代。等待(wait)可以变成Waiter.execute().刷牙可以变成ToothBrusher(myTeeth).go()。倒(take out)垃圾可以变成  TrashDisposalPlanExecutor.doIt()。


11  软件工程有自己的政治轴心,一端是保守派,另一端是自由派。


12 摩尔定律就是胡扯。
主流语言的问题在于本质上它们仍然是顺序执行,属于早期的冯诺依曼模型,无法脱离单机 。他们争来争去只是为了一个“最不烂”头衔。
并行语言若要摆脱冯诺依曼图灵机的阴影,它必须与众不同。假如我们采用细胞自动机,或者任何一种无惧单点失败的并行计算模型,那就必须要有新的语言,因为现有的顺序语言不是性能太差,就是难以掌控,甚至两者兼具。

身为程序员不沉迷于性能的话,不叫什么程序员呢?是不是有点讽刺?

这正是另一半讽刺的地方。程序员非常在意性能,他们愿意为此花费无数时间去摆弄算法和数据结构,压榨程序里的每个指令周期和字节,但却不愿意用这些时间去学习在新硬件上的新语言。哪怕这门语言能让他在相同的时间里写出快1000倍速的程序,或是只要千分之一的时间就能写出性能相等的程序 。
摩尔定律是垃圾。别说1000倍了,哪怕只是追求10倍的生产力和计算效率,应该改变的也是我们的计算模型。

往期推荐

《法国高中生哲学读本(全五册套书)》思考主体、道德、政治、文化、理性与真实的启蒙之路

数学知识地图【中英字幕】The Map of Math

Markdown完全教程

走向数学丛书(全18册)

盗火者译丛全17册(囚徒的困境、火星的故事、圆的历史、意识的解释...)

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存