黑客与画家--Paul Graham
2017年5月2日
20:13
格雷厄姆 :"所有东西都在变成软件, 印刷机诞生后,人类写过多少个字,未来就有多少家软件公司."
【这本书像一幅素描, 刻画着一个介于nerd和电脑高手之间的形象. 无论是成长经历还是后天事业发展, 格雷厄姆一直在做着一个引导者的角色. 当然,他笔下刻画的典型
黑客模样,似乎又处处透露出他自己的影子。只不过当你读这本书时,好像又是从一位过来人的角度,在对过往做思考和点评。】
< 思维概念 >
创业哲学:搭建原型,上线运营(别管bug),收集反馈,调整产品,成长壮大
他鼓励创业公司快速发布产品,因为这样可以尽早知道一个创意是否可行,其次,他认为一定要特别关注用户需要什么,这样才有办法使一个坏项目转变成好项目。他说: “很多伟大的公司,一开始的时候做的都是与后来业务完全不同的事情”,你需要倾听用户的声音,琢磨他们需要什么,然后就去做。
黑客伦理(hacker ethic)
1,使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制,任何事情都应该亲手尝试。【开放】【计算机的自由使用】
2,信息应该全部免费【分享】
3,不信任权威,提倡去中心化【民主】
4,判断一名黑客的水平应该看他的技术能力,而不是看他的学历,年龄或地位等其他标准。
5,你可以用计算机创造美和艺术
6,计算机使生活更美好【进步】
< 如何理解这个计算机时代?>(时代脉络--发展轨迹--现在的位置和将来的方向)
表面上这是一个机器的时代,实际上机器的设计者决定了我们的时代,程序员的审美决定了你看到的软件界面,程序员的爱好决定了你有什么样的软件可以使用。
而要想把握这个时代,就必须理解计算机,更关键的是理解计算机背后的人。这是一个程序员主导的时代,而最伟大的程序员就是黑客。
Hack作为名词有两个意思,既可以指很巧妙或很便捷的解决方法cool /neat hack,也可以指比较笨拙,不那么优雅的解决方法ugly / quick hack。字典意思是砍(木头),
好像解决一个计算机难题就是在砍倒一棵大树,所以完成hack的过程被称为hacking,而从事hacking的人就是hacker。其引申义还指对某个程序或设备进行修改,使其完成原来不可能的功能(或禁止外部使用者接触到的功能)。
在20世纪60年代这个词被发明出来的时候,“黑客”完全是一个正面的褒义词。根据理查德·斯托尔曼的说法,黑客行为必须包含三个特点:好玩,高智商,探索精神。这也构成了黑客们所追求的价值观,可见他们的出发点并不是实用和金钱。
本书的主要结构:
1-4黑客是如何成长的以及他们看待世界的一些观点
为什么书呆子不受欢迎----因为他们的心思不在于是否受欢迎,如何融入集体,而在于如何更聪明,他们的注意力在读书和观察世界上,所以也就无所谓穿着,个人魅力或者相貌,运动能力,今晚有什么舞会。(启发:要寻求正确答案 ,而不只是追求如何讨人喜欢)
黑客与画家一样,都是创造者----一般认为计算机是冰冷的,精确地,井然有序的,而画画是某种原始欲望的热烈狂放的表达方式。这种看法是错误的其实计算机和画画有许多共同之处,在我所知的所有行业中,黑客与画家最相像。都是创作者,都是试图创作出优秀的作品,在创作过程中,他们可能会发现一些新技术。
要去思考那些无法被社会容忍的,不能说出口的正确的话。但一旦发现了那些“不能说的话”,也先别说,至少也要挑选合适的场合再说,只打那些值得打的仗。
黑客的成功秘诀就是打破常规
5-9解释了黑客怎样做出自己的成果,这些成果又是怎样对全世界产生了影响。
互联网软件是微机诞生后的最大机会
致富最好的方法就是为社会创造财富,而其中最好的方法就是创业
如果你是一个黑客,并且梦想着自己创业,可能会有两件事情令你望而却步,不敢真正开始采取行动。
一件是你不懂得管理企业。另一件是你害怕竞争。
可实际上,这两件事都是没有通电的篱笆。
首先,管理企业其实并不难,只要记住两点就可以了:做出用户喜欢的产品。保证开支小于收入。只要做到这两点,你就会超过大多数创业公司,随着事业的发展,你自己就能琢磨出来其他诀窍。刚开始可能入不敷出,但只要亏损不持续太久,你就不会有事。如果初期缺少资金,至少还有助于养成勤俭节约的习惯。
如何做出用户喜欢的产品有一些通用的规则。从制造简洁的产品开始,首先保证你自己愿意使用。然后迅速做出1.0版,然后不断加以改进。整个过程中密切倾听用户的反馈。
用户总是对的。如果竞争对手的产品很糟糕,你也不要自鸣得意,比较软件的标准应该是看对手软件将来会有什么功能,而不是现在有什么功能。
对于市场专家,设计师,产品经理的话不要盲目听。要学会自己判断。只有懂得设计的黑客,才能设计软件,不能交给对软件一知半解的设计师,如果你不打算自己动手设计和开发,那就不要创业。
至于竞争。你害怕的那些人也在害怕你。
致富你需要两件东西,可测量性和可放大性
你的职位产生的业绩应该是可测量的。否则你做的再多,也不会得到更多的报酬。
此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。(是否存在放大性要看失败的可能性,因为收入和风险是对称的,如果你有一个令你感到安全的工作,你是不会致富的,因为没有危险就几乎没有可放大性。)
所以小团体=可测量性,高科技=可放大性(如果你解决了一个热门的技术难题,别人都会使用你的解决方案,这就是可放大性)
收入分配不平等,没我们想象的那样严重 技术在加大收入差距的同时,缩小了大部分的其他差距,你或许用不起富人用的品牌,但你可以用到同类的商品。
设计者的品味
如果世界上真有“美”的存在,我们需要能够认出它。
好设计是简单的设计(当你被迫直接面对真正的问题,不是用表面的装饰交差时,你就不得不做好真正本质的部分)。
好设计是永不过时的设计(以永不过时为目标是一种帮助自己找到最佳答案的方法,如果你不愿别人的答案取代你的答案,你就只好自己做出最佳的答案。以永不过时为目标也是一种避开时代风潮的方法。如果一件东西长盛不衰,那么它的吸引力一定来自本身的魅力,而不是来自风潮的影响)。
好设计是解决主要问题的设计(坏设计做的辛苦那是从一开始方向就错了答案可以不断改进,同样问题本身也可以不断改进。软件的难题通常可以被改成等价的较易解决的形式,抽象-->具体)。
好设计是具有启发性的设计(在建筑学和设计学中,这条原则意味着,一栋建筑或一个物品应该允许你按照自己的愿望来使用。你想怎么布置就怎么布置,过上自己想过的家庭生活,而不是像执行程序一样只能过上建筑师为你安排的生活)。
好设计通常是有点趣味性的设计(好的设计并非一定要有趣,但是很难想象完全无趣的设计会是好的设计)。
好设计是艰苦的设计(如果你工作的不艰苦,你可能正在浪费时间。困难的问题需要艰巨的付出才能解决,高难度数学证明需要结构非常精细得到解决方法,它们往往很有趣。工程学也是如此)
好设计是看似容易的设计(大多数领域,看上去很容易的事情,背后都需要大量的练习,练习的作用也许是训练你把刻意为之的事情变成一种自觉的行为。找到“状态”就是脊髓本能的反应,它能释放出你的直觉)。
好设计是对称的设计(可以说它是简洁性的一种表现,但它十分重要。对称分为重复性对称和递归性对称(埃菲尔铁塔,树叶的叶脉)。写作中对称无处不在,短语,句子,小说的情节都是如此,会有强烈的视觉感染力,简洁美妙。但对称的危险在于他可以用来取代思考,尤其大量使用重复的时候危险性更大)。
好设计是模仿大自然的设计(大自然在长期演化中已经解决了很多设计问题,所以你的设计与大自然很接近,那么它基本不会太差)。
好设计是一种再设计(很少有人一次就把事情做对,专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。培养早期原型是需要信心的,不能将就,你要培养对自己的不满。
犯错误是正常的,不要把错误看成灾难,要勇于承认,勇于改正。
做修改的时候,有一个合适的工具会使得改动更容易,比如油彩取代彩蛋。因为可调剂可重画)。
好设计是能够重复的设计(我们对待重复的态度是一个否定之否定的过程。刚入门的新手不知不觉地模仿他人,逐渐熟练之后才开始创作原创性作品。最后他会意识到,把事情做对比原创更重要。
但不知不觉的模仿必然将导致坏设计,如果你不知道自己的想法从何而来,那么你可能就是在模仿另一个模仿者。
但最伟大的大师最终会达到一种超脱自我的境界。他们一心想找到正确的答案,如果别人已经答出一部分,那就没理由不拿来用。他们有足够自信地使用他人的成果,完全不担心因此丧失个人的特点)。
好设计常常是奇特的设计(设计的大多数特点都是可以培育的,但奇特,最多是你在它开始的时候不要把它扼杀掉。而最后你的风格是自然而然形成的)。
好设计是成批出现的(推动人才呈批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋重要)。
好设计常常是大胆的设计(在任何一段历史中,人们都会把某些荒谬的东西当做正确的。并且深信不疑,以至于一旦你出言不逊,就有被排挤或者被暴力伤害的危险。这个问题不仅存在于每个年代,还或多或少存在于每个领域。今天实验性错误就是明天的新理论,如果你想做出伟大的新成果,那就不能对常识与真理不相吻合之处视而不见。反而要更加关注才对。
10-15解释了黑客的工具(编程语言)和工作方法 =黑客文化的基础和核心
编程语言解析
一百年后的编程语言 一种语言的内核设计的越小,越干净,他的生命力越顽强。
语言设计时对实现方式少做限制还会使得程序具备更大的灵活性。
一百年后的程员最重要的编程语言就是可以让你毫不费力地写出程序第一版的语言,哪怕它效率低的吓人。因为运行速度只会越来越快,而浪费程序员的时间而不是浪费机器的时间才是真正的无效率。
另一种消耗硬件性能的方法就是在应用软件与硬件之间设置很多的软件层。但每增加一个解释层,软件的运行速度就会慢一个数量级。可多余的软件层也可以让编程灵活起来。
新语言更多地以开源项目的形式出现,而不是以研究性的项目的形式出现,这是语言的一种发展趋势。另一种发展趋势就是新语言的设计者更多的是本身就需要使用它们的应用软件作者,而不是编译器作者。
设计新语言的方法之一就是直接写下你想写的程序,不管编译器是否存在,也不管有没有支持它的硬件。不要受限于现存的语言。只要写出那些能让你最省力写出来的语言就行。
采用程序的长度作为它消耗工作量的近似指标是个很有用的技巧。所以看着一段程序你就问自己,能不能把它写得更简短一点。
拒绝平庸,你的对手和你一样,能用任何想用的语言编写互联网软件 埃里克雷蒙德写过一篇文章《如何成为一名黑客》文中有一部分专门谈到,在他看来,如果你想成为一名黑客。应该学习哪些语言,他建议从Python和Java入手,因为它们比较容易学,想当高级一点的黑客,还应该学习C和Perl,前者用来对付Unix系统,后者用来系统管理和开发CGI脚本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习Lisp(lisp的宏是独一无二的=>括号)。但作者不建议年龄还没超过25岁的人学lisp
在高科技行业,只有失败者采用业界最佳实践(这只是经理人想要推卸责任的借口) Java< Perl < Python< Ruby < Lisp
使用一种不常见的语言会出现三种问题,你的程序可能无法很好地与使用其他语言写得程序协同工作,你可能找不到很多函数库,你可能不容易顾到程序员。
第一个问题取决于你是否控制整个系统,并且还有各个组成部分的源码,那么你就能使用任何你想用的语言。如果出现不兼容的情况,你自己就能动手解决。
至于第二个问题函数库的重要性也取决于你的应用程序。如果你是一家软件公司,你开发的程序打算拿到市场上销售,那么这个程序可能会耗费好几个优秀程序员至少6个月的时间。为一个这样规模的项目选择编程语言,语言本身要有强大的编程能力可能就是最重要的考虑因素,比是否有方便的函数库更重要。
而对于所需要的开发人员数量来说,如果你的语言很强大,可能减少一些编程的工作量,也就不需要那么多黑客了。使用更高级的语言的黑客可能比别的程序员更聪明。
一种好的编程语言,是让黑客可以随心所欲的使用语言 一种免费的实现,一本相关书籍(O' Reilly公司出版),以及语言所依附的计算机系统。除此之外简洁,可编程性,一次性程序,有函数库,效率,经受住时间的考验,经常再设计。
研究必须是新的,设计必须是好的