《黑客与画家》读书笔记
程序员文章站
2022-07-15 14:09:09
...
以前看过《rework》, 觉得是每一个小型创业公司的创业宝典, 那么这本文集, 里面的大部分内容差不多也是为创业公司而写的, 上次在网上看到说知乎团队几乎人手一本。因为作者曾经学过绘画, 所以作者将很多道理从绘画借鉴过来. 可以认为画家是黑客的一种隐喻. 二者非常相似一点就是, 他们都是在从事创造性的工作. 由于作者是一个Lisp专家, 因此对编程思想也有一些不错的阐述. 另外对编程语言的过去, 现在和未来也有很深邃的洞察. 又由于作者是一个成功的创业者, 因此用了很大的篇幅来说明创业的好处, 比如为什么创业可以更快的致富. 总之很多道理的解释让人耳目一新.
================我是读书笔记的分割线====================
对于黑客来说, 关着门就是一种挑衅, 而锁着门就是一种侮辱.
在一个人产生良知之前, 折磨就是一种娱乐.
当工作的专业程度越来越高时, 我们就必须接受更长时间的训练
画家学习绘画的方法主要是动手去画, 黑客学习编程的方法也理应如此.
开源运动最鲜为人知的优点之一, 就是可以使得学习编程变得更容易.
最容易修改的语言就是简洁的语言
坚持一丝不苟, 就能取得优秀的成果. 因为那些看不见的细节累加起来, 就变得可见了.
如果黑客是一个创作者, 那么他从事的就不是机械的工作, 他必须具备灵感.
黑客就像画家, 工作起来是有心理周期的, 有时候, 你有了一个令人兴奋的项目, 你会愿意为它一天工作16个小时. 等过了这一阵, 你又会觉得百无聊赖, 对所有事情都提不起兴趣.
对于黑客和画家这样的创作者, 有些工作需要投入巨大的热情, 另一些工作则是不需要操心的日常琐事. 在你厌倦的时候再去做哪些容易的工作, 这是一个不错的注意.
消灭bug的过程就像解一道数学题, 已知许许多多的约束条件, 你只需要根据条件对方程求解就可以了
多人开发一个软件的正确模式, 需要合作, 但是不要合作过了头, 如果一个代码块由3, 4个人共同开发就没有人真正拥有这块代码. 最终就会变得像一个公共杂物间. 没有人管理, 又乱又脏. 到处堆满了冗余代码. 正确的做法是将项目分割成严格定义的模块, 每一个模块由一个人明确负责.
换位思考并不意味着你要做出自我牺牲. 实际上这是完全不同的两回事. 了解别人对事物的看法, 并不代表你要为他的利益服务. 某些情况下, 比如打仗的时候, 了解对手正是为了打击对手.
判断一个人是否具备换位思考的能力有一个好办法, 就是看他怎么向一个没有技术背景的人解释技术问题.
软件的使用方法最好能符合用户的直觉, 别指望用户去读使用手册.
程序写出来是给人看的, 附带在机器上运行.
有时候你的观点就是从别人那里听来的, 别人告诉你什么, 你就相信了什么, 你把别人灌输的观点当作了自己的观点.
触怒他人的言论是那些可能会有人相信的言论. 我猜想, 最令人暴跳如雷的言论, 就是被认为说出了真相的言论.
优秀的作品往往来自于其他人忽视的想法, 而最被忽视的想法是那些被禁止的思想观点.
一个人们拥有言论*和行动*的社会, 往往最有可能采纳最优的方案, 而不是采纳最优权势的人提出的方案.
专制国家会变成腐|败国家, 腐|败国家会变成贫穷国家, 贫穷国家会变成弱小国家.
"你的电脑"这个概念在慢慢成为过去时, 取而代之的是"你的数据". 你应该可以从任何电脑上获取你的数据, 或者更准确的说, 在任何终端设备上获取你的数据, 终端设备不一定是电脑.
所有用户都是用同样版本的互联网软件, bug一发现就会立刻得到纠正. 所以它的bug应该比桌面电脑更少.
设计桌面软件就像设计一栋大楼, 设计互联网软件就像设计一座城市.
如果软件是经常性发布, 每次只有小幅度的变化, 那么就不容易产生复合型bug, 就好比做清洁, 你一直在打扫大厅, 掉落在地板上的东西就会被立刻清理, 省的它们时间一长与其他东西粘在一起.
公司内部所有不直接感受到竞争压力的部门都应该外包出去, 让他们暴露在竞争压力之下.
大公司付出的高价之中, 很大一部分是商家为了让大公司买下这个商品而付出的费用. 如果国防部花1000美元买下一个马桶座圈, 部分原因是要让国防部买下它本身就需要花这么多钱.
开发互联网软件的创业公司会把创业相关的每一件事情做到极致.
你必须打破常规, 快速行动, 循规蹈矩不可能成功, 纵观创业公司的发展历史, 会发现它们越来越小, 越来越快, 越来越不像正规的公司.
管理企业其实很简单, 只要记住两点就可以了:做出用户喜欢的产品, 保证开支小于收入.
创业公司其实就是解决了某个技术难题的小公司.
如果你想赚100万美元, 那么你就不得不忍受100万美元的痛苦. 创业公司将你所有的压力压缩到三四年.
任何公司的成功历程中, 运气是一个很大的随机因素.
金钱是财富的一种简便表达方式: 金钱有点像流动的财富, 两者往往可以互相转化.
目前存在的最大的手工艺人群体就是程序员.
真正重要的是做出一件人们需要的东西, 而不是加入某个公司
工作就是在一个组织中, 与许多人合作, 做出某种人们需要的东西.
大公司会使得每一个人的贡献平均化, 因为大公司最大的困扰是没法准确测量每个员工的贡献.
你在工作上投入的精力越多, 就越能产生规模效应, 在某些行业, 那些真正拼命工作的员工能够创造出比普通员工多10倍甚至百倍的财富.
一个糟糕的CEO是不能推脱说自己尽了全力, 一个公司表现不好, 就是他表现不好.
销售人员一般都是单独工作的, 而大多数雇员则是集体工作的. 因此销售的工作容易量化.
想创富, 你需要两样东西: 可测量性和可放大性. 你的职位产生的业绩应该是可量化的, 否则你做的再多, 也不会得到更多的报酬.此外还应该是可放大的, 也就是说你做出的决定能够产生巨大的效应.
单单具备可量化是不够的, 比如血汗工厂的工作报酬是计件的, 这是一个可量化的, 但是无法放大. 因为整个工作中你基本没有决策的权力. 你能做的唯一决策就是以多快的速度完成工作. 即使你做到最快, 回报也只能增加到1到2倍.
CEO是一种同时具备可测量和可量化的工作. 公司的表现就是CEO的表现, 所以具备可测量性, CEO的决策决定了整个公司的方向, 所以具有可放大性.
任何一个通过自身努力而致富的个人, 在他们身上同时具有可量化和可放大性.
有一个办法可以知道一个工作是否具有可放大性, 那就是看失败的可能性. 因为收入和风险是对称的, 所以如果具有巨大的获利的可能, 就必须存在巨大的失败的可能. CEO, 电影明星, 基金经理, 运动员的头顶都悬着一把剑, 随时都有可能掉下来. 一旦他们搞砸了. 他们就完了.
如果你有一份安稳的工作, 那么你就不会致富, 因为没有危险, 因此几乎等于没有可放大性.
如果你想同时具备可放大性和可测量性, 你没必要非得当CEO或电影明星. 你需要成为某个攻克难题的小团体的一部分即可.
整个公司产生的收入是可测量的, 如果公司只有一个员工, 那么就可以准确的知道他的贡献了. 所以公司越小, 你就越能准确的估计每个人的贡献.
老板只是顾客的代理人.
你最好找出色的人一起工作, 因为他们的工作和你一起平均计算.
小团队的优势不在于它本身的小, 而在于你可以选择的成员. 我们不需要小村庄的小, 而需要全明星第一阵容的小.
大多数创富发财的人都是通过开发新技术而实现的. 你不可能通过剪头发, 煮鸡蛋而发财, 因为你的服务的人是有限的.
真正创业以后, 你的竞争对手决定了你到底要多辛苦.
创业公司不能像能经受打击的黑熊, 也不能像有盔甲保护的螃蟹, 而应该像蚊子一样, 不带任何防御. 就是为了达到一个目的而活. 而且蚊子往往只有两种结果, 要么赢得一切, 要么彻底失败.
如果你有两个选择, 你就选择难的那个, 如果要选择坐在家里看电视还是外出跑步, 那就出去跑步吧, 这个方法有效的原因可能是你遇到两个一个困难, 一个容易的选择时. 往往处于懒惰的缘故, 你选择容易的选项. 在意识深处, 你其实知道不懒惰的做法会带来更好的结果.
你开办创业公司不是单纯地为了解决问题, 而是为了解决那些用户关心的问题.
创造人们需要的东西, 就是创造财富.
从经济学的角度来说, 创业公司就是让人更快速工作的地方, 你不在是慢慢积累50年的普通工资, 而是尽快的将这笔钱攒到手.
奥卡姆剃刀原则: 简单的解释就是最好的解释. 把事情变复杂很简单,把事情变简单很复杂。
在*竞争的市场环境下, 价格由买家决定, 如果人们喜欢棒球胜于喜欢诗歌, 那么棒球运动员的收入就比诗人的高. 如果说某种工作的报酬过低, 那就相当于说人们的需求不正确.
技术的发展使得通过创造积累财富的速度第一次可能超过通过偷窃而积累财富的速度. 19世纪典型的富人不是宫廷朝臣, 而是实业家.
中产阶级的出现使得财富总量不在是一个固定不变的值, 财富的分配不再是一种零和游戏.
由于人类历史上主要的致富方式长期以来是偷窃, 所以我们依然对有钱人抱有一种怀疑的态度.
技术无法使得更便宜的唯一东西就是品牌.穷人和富人之间的生活差异的鸿沟正在缩小. 品牌是这种差距的遗留物.
一块普通的石英表, 每天的误差大约是0.5秒, 走时最准的百达翡丽机械表, 每天的误差是-1.5到+2s, 售价是22万美元
只要存在对某种商品的需求, 技术就会发挥作用, 这种商品的价格就会变得很低. 从而可以大量销售.
波音747飞机驾驶员的收入大概是商场收银员的40倍, 但是前者不是贵族, 后者也不是奴隶, 这种收入的差距只是因为前者的技术比后者的要值钱的多.
如果得不到报酬, 人们是否愿意创造财富? 唯一的可能就是, 工作必须能提供乐趣. 会有人愿意免费写一个操作系统, 但是他们不愿意免费为你安装, 提供电话支持, 进行客户培训等. 即使是最先进的高科技公司, 也有至少90%的工作是没有乐趣, 令人生厌的.
在大多数领域, 看上去容易的事情, 背后都需要大量的练习, 练习的作用也许是训练你把刻意为之的事情变成一种自觉的行为. 有时, 我们的训练只是为了让身体养成下意识的反应.
大自然在长期的演化中已经解决了很多设计问题. 所以如果你的设计与大自然很接近, 那么它基本上不会很差.
一个操作所需的代码越多, 就很难避免没有bug, 而且也越难发现它们.
语言设计者之间最大的分歧也许在于, 有些人认为编程语言应该防止程序员干蠢事, 另一些人认为程序员应该可以用编程语言干一切他们想干的事情.
一件垃圾会产生更多的垃圾.(破窗效应)
那些内核小, 最干净的编程语言才会存在于进化的主干上. 一种语言的内核设计得越小, 越干净, 它的生命力就越强.
效率低下的软件并等于是很烂的软件. 一种让程序员做无用功的语言才是真正称得上很烂. 浪费程序员的时间而不是浪费机器的时间才是真正的无效率. 随着计算机速度越来越快, 这会变得越来越明显.
设计和研究之间区别在于, 前者追求的是好, 后者追求的是新, 优秀的设计不一定是新的, 但必须是好的, 优秀的研究不一定是好的, 但必须是新的.
让用户满意并不是迎合用户的一切需求, 用户不了解所有可能的选择, 也经常弄错自己真正想要的东西. 做一个好的设计师就像做一个好医生一样, 你不能头痛医头脚痛医脚, 病人告诉你症状, 你必须找出他生病的真正原因, 然后针对病因进行治疗.
一种人眼里的优秀设计可能在另一种人眼里却糟糕无比. 这里的重点是你必须选择出某些人作为你的目标用户, 我觉得, 除非设定目标用户, 否则一种设计的好坏根本无从谈起.
如果目标用户群体涵盖了设计师本人, 那么最有可能诞生优秀设计. 如果目标用户与你本人差别很大, 你往往会假定目标用户的需求比你本人的需求简单, 而不是更复杂.
如果你正在设计某种新东西, 就应该尽快拿出原型, 听取用户的意见.
算法: 完成任务的方法,菜谱也是算法.
抽象: 隐藏细节. 编程语言越抽象, 你写出程序所需要的运算步骤就越少, 每一步的功能就越强.
破解(hack):一种破坏规则的解决方法, 可能有益也可能有害.
推荐阅读