coders-at-work
《编程人生》
start:2016-1-3 18:34:34
end:2017-4-3 22:38:31
2016年的做了一件文艺的事:订阅了一个月的 新世相 图书馆,其中第三期是《巴黎评论·作家访谈》。当时非常纳闷为什么会收到这样书,等到看《编程人生》时才明白其中的份量:《Writers at Work》 vs 《Coders at Work》。顺便用这本书来解释一下曾经的疑问:
为什么身边没有超过 40 岁的程序员?他们都去哪了?
Jamie Zawinski
编写自己回头还能看懂的代码,这点至关重要。
不过我们成功发布了产品,这才是关键。(Netscape)
我们绝对是百分百力求高质量。我们要在3月31日前发布我们力所能及的最高质量。
我认为有一点非常重要,不要害怕自己的无知。
不过,在我看来,这本书一派胡言,给人的感觉好像编程只需剪切粘贴就能搞定。(《设计模式》)
说好今晚发布产品,到时候就必须给我发布!(过度设计)
更差就是更好。
《人月神话》《计算机程序结构与解释》《计算机程序设计艺术》
Brad Fitzpatrick
你能看到他们在那里做乘法。—— 价格是你们在不破产的情况下的所有可支配收入。
有,读研可能很有意思,不过我太忙了。
HR的经验中有这么一条 —— 一些人只会做让他们做的事,没有那种追求极致的热情。
有这么一个笑话:如果人们用造软件的方法来盖摩天大楼,那第一只啄木鸟就能毁掉文明世界。
没有。最坏的情况就是我停下来,自己找点乐子。
Douglas Crockford
代码的可读性是我的第一要义。它比速度还重要,可以与正确性一争高下,可读性是正确性的重要前提。
软件这么复杂,错误之路千万条啊。
《出埃及记》
Brendan Eich
文学化编程
但是话说回来,我也喜欢研究理论,理论对于改善我们的生活还是很有帮助的。
编程很有意思,能让我不听地熬夜。
不是所有程序员都是会提意见的,很多程序员都有点孤僻,喜欢单干。—— 如果我只考虑自己,我又能走多远?
《魔戒》《摩托车维修的禅与艺术》
Joshua Bloch
不要重复自己。
学习一种新语言的时候,要利用以前所学的语言功底,但是也要保持开放的心态。(你本来只有一个榔头)
选择一种语言 vs 希望去一个酒吧
梅特卡夫定律:网络的价值与用户数量的平方成正比。
另外,年轻的时候,你有无尽的精力,你可以不停地钻研。
“你瞧,以前的一切你都做得挺好的,这次也错不了。”
所以你要睁大双眼,积极地吸收重组各种思想,这样做绝对错不了。(生活中看到的很多东西)
先写使用,再写实现。—— 设计软件的方法
API设计有一条基本原则:疑则不用。
“简单没那么容易做到。”
“结对编程”
我们做的东西是一种美学追求。需要一些数学技巧,一些人际关系技巧,一些写作技巧,这些都不属于工程领域,但是缺了这些你不可能成为一个真正优秀的工程师。所以我觉得这些东西是我们必须牢记的。尽管如此,我仍然认为编程是这个星球上最有趣的工作。我觉得我们很幸运长大在这个时代,可以利用这些技巧做出这样的工作。我不知道在过去的时代我们这样的人应该去做什么工作。
《Java 解惑》《Java 并发编程实践》《effective Java》《设计模式》《计算机程序设计心理学》
Joe Armstrong
没有。我没钱了。所以没有读完。
不需要考虑该做些什么,只管做就行了。(我们那时没有这些难以选择的地方。)
程序员被哄骗着使用所有这些不同的编程语言,他们被哄骗着不要使用简单的方法把程序连接在一起。
先不要动手写代码,把这些东西都想好,这样做不是更好吗?
男子汉气概的编程 vs 现在,如果觉得不行,我就不再编程了。
科学是关于逻辑和数学的 vs 科学也有很多直觉,根据直觉能够知道什么是正确的
解决问题 vs 进行表达
自底向上
我喜欢编程。为什么会不喜欢呢?
应当在程序中你认为可能出错的地方放上一些 printf 语句,重新编译并运行。—— 编程之神
你改过一些东西,所以你必须记住改的是什么地方。—— Joe 调试定律
Unix哲学:程序应只做它应当做的,不应该做其他事情 vs 它应当是通用的程序,而程序本身应当是这种通用程序的特定案例(增加通用性,然后具体化)
问题越复杂,我就越可能先写文档
如果你不擅长英语,就永远都不可能成为一个优秀的程序员。—— Dijkstra
如果在不好的领域做好的东西,那你做什么都没有意义。—— You and Your Research
花上 20% 的时间学习新东西,因为只是有复利的。
Bletcheley Park
Simon Peyton Jones
不惜一切代价避免成功:不要过度成功,不要过早成功
对整个编程体系的一次彻底而优雅的攻击。建造了一面新墙而不仅仅在墙上添一块砖。—— 谈函数式编程
那可能是我第一次认识到,编写一个真正大型的程序时,最后可能遇到规模的问题。那可能是我第一次认真地尝试着编写长期使用的文档。
动手去做,不管这件事有多么不起眼。—— John Washbrook
我作为程序员,生活中最糟糕的事情是,面对别人的一堆代码不敢动手去改,或者更糟糕的是,面对自己编写的代码也不敢动手去改。真是太让人泄气了。
《编程珠玑》《代码之美》
Peter Norving
从此我觉得“或许我天生就擅长编程”,也明白了“或许老师也不是无所不知的”。
但我的确领悟到一点:在团队中,你不能什么事都亲力亲为。
做学徒最棒的一点,就是能观察大师的所作所为。
你必须有所进展,还能加以改进。
“停电的时候,我的程序是否还能正常工作呢?”
我想应该从静态和动态两方面去做。(程序 = 数据结构 + 算法)
没,我找准了自己的位置。我们有数以亿计的用户,我们会让他们感觉到日新月异的变化,也会为他们不断地更新服务。我觉得这种感觉很棒,因为我无法想象自己做别的事情也能为人们带来如此巨大的影响。
industrial programming、Modeling Checking、constraint propagation、over-generalization
《代码大全》《文学编程》
Guy Steele
管理复杂性的唯一方法是保持事情简单,包括编程语言。—— Sheme 学派
重要的是意识到你所做的是一种权衡。
是的,我们都不知道将来。如果我可以改变一件事 —— 听上去有点蠢 —— 如果时光倒流到从前,如果我可以改变一件事,我想劝远古的人们不要使用手指头来数数。及早确立一个新标准,可以让现代生活变得更容易些。
《黑客词典》《算法分析与设计》《C专家编程》
Dan Ingalls
实际上,我对主流世界不抱什么希望,我有自己id想做的或想让它变得容易的事情。
计算机的强大之处在于它们给予数学以生命。
你必须具备逻辑头脑。
就我而言,工程师(有一套可重复的施工过程)的成分最少,其次是工匠(木材每次都不一样,有些经验法则,但没办法保证特定的结果),最像是艺术家和科学家之间的有趣组合。
如有更大的挑战在召唤你,你一定会深入进去,因为你不得不这么做而如果你的兴趣被激发,你也会深入进去,因为你愿意这么做。
尽可能将从进展中获得的满足感反馈给那段时间与你相处的所有人,至少让他们意识到你在做的事情还不错。
L Peter Deutsch
在我鼎盛时期,我有特别可靠的直觉。
之所以要保证和客户的紧密接触,是因为想要避免过早的泛化或过度设计。
所以我对计算机技术的未来不是很乐观。实话说,这也是我能轻松地全身而退的原因之一。我看到的是一个不被不道德的垄断者通知的世界,在那里我找不到自己的位置。(微软)
XP
Ken Thompson
激情洋溢的编程,我从来不会感到压力。
这很容易上瘾,但你绝不会想去让自己的孩子也深陷其中。
MIT 风格 vs 新泽西(贝尔实验室)风格 —— 《更差既是更好》
pentaminos
Fran Allen
我们正处在一个十字路口,极有可能迷失方向。我们可能会走错路,这样就不得不再多花些时间折返回来。—— 图灵奖获奖感言
计算机是创造性的触发器。
想想自己的职业生涯和做事的方式,真要用一个词来总结的话,我认为“探索”最为合适。我喜欢探索一切事物的前言,创意、项目以至万事万物,包括人类本身,我觉得这一切如此令人兴奋。但也有一点,我总是启动着,而非终结者。我总是被新事物所吸引。
Bernie Cosell
我坚信系统不宕机至关重要。
最终我做到了他们没有办到的:让系统跑起来。
“我不能很好的理解这段代码都能做些什么,所以我重写了一遍。”
要编写大量程序。—— 对众多自学的程序员的建议
要知道,我一直秉持着系统永不崩溃、用不停顿的理念。
实时系统很重要的一点,是一切都必须设置超时。
不过,我常常会跟他们交谈,亲自观察,看看他们是否具备我想要的素质,我总是希望身边的人能够刨根问底、勤学好问、一丝不苟。
哦,又是一门通过限制程序员所为来帮助他们步入正轨的语言。—— 评论 Java
设计评审、重构
Donald Knuth
它改变了我从精神层面看待事物的角度,也由此改变了我的写作风格。我会更自由洒脱,会更全面地看问题,也会对写出来的东西更有把握。
我觉得编程和宗教很像,每个人都有自己的信仰。
过早优化是万恶之源。
在我看来,C语言对指针的运用是编程语言中最重要的变革之一。
不过我希望对每一个程序员个体来说,因为求知欲而编程的想法不会慢慢消逝。
我必须认清我的原罪(sins)。人们不断回想过去发生过的事情,目的是解罪(absolution)。这是个宗教术语。
我会出错是因为我总是游走于极限边缘。如果仅仅一直安于现状而不思进去,那也未免太无聊了。
你不仅要知道某项成就归功于谁,还要回头看看他是怎么用他自己的话表述出来的。我认为,这是提高能力的极好方法。
能够深入到别人的思维方式之中,并对他们使用的词汇和符号进行解码,这是非常重要的。
对,你说的没错。不过,多种不同形式的编程记法还是有用的 —— 不要只阅读那些编程习惯跟自己一样的家伙的代码。
《The Lions Book》
literate programming、syntactic sugar