这两周从新阅读了这本经典,很难有这样的机会认认真真地作一次深度的阅读,因此把读书的笔记发到博客上。程序员
这本书的风格很奇怪,由于你很难相信一我的能够把有些稀松日常的事看得如此透彻并且富有深层的意义,那些小事在咱们日常人看来可能不值一提,然而在做者笔下你能够跟随他的指引接近一些独特的视角,把这些隐秘挖掘出来,得出一些使人惊奇的结论。web
黑客是如何成长的以及他们看待世界的一些观点。编程
一个问题是,为何书呆子不受欢迎呢?一个看似简单的问题,却在作着一层层的分析以后让人看到一个从学生圈子直指教育体系存在的大问题。做者在这一部分大体说明了如下的观点:安全
学生独特的圈子逻辑和社会中的成年人而言是一种彻底隔绝开的难以令成年人理解的逻辑。服务器
在学生圈子里最被看重的东西是得到吸引力,表现的受欢迎能够赢得更多人的支持并最终在圈子里成为winner。网络
书呆子们每每因为无暇顾及这些而失去吸引力,在圈子里渐渐受到孤立,他们的精力会集中在其余东西上。编程语言
真实的成年人社会与这个学生圈子执行彻底不一样的逻辑,它没有古怪的游戏规则,你的能力和聪明将带来价值,和是否得到吸引力无关。函数
学生时代由于无暇顾及吸引力的书呆子在这个真实的成年人社会里如鱼得水,用本身的能力创造的价值将令他们得到欢迎。工具
教育制度里存在的问题是成年人们每每不理解学生圈子和成年人社会的逻辑的自然隔绝而听任其自流,最终致使学生圈子里的游戏越发没法理解,书呆子们所以而苦恼。性能
解决这个问题的方法也许就是告诉那些所谓的“书呆子”他们兴趣所在的重要性,他们所处的圈子并未真实,像大学同样来培养他们,让他们明白能力创造价值的存在。
这一章做为开篇,“黑客”们的学生时代的成长困惑 是一个关乎学习和智力的问题。
做者有着黑客与画家的双重身份,外似没什么特别关系的两个领域在做者的重重分析后却显现出出奇的类似。在这一部分,做者阐述了不少新奇的观点:
黑客既不一样于彻底痴迷于理论研究的计算机科学家,也不一样于只擅长于完成产品经理构想的软件工程师,而是一种极富创造力的存在。
黑客的创做过程不该该是循规蹈矩地纸上谈兵,更应该是在实践中激发想法得出完美的结果,这和从完美成果出发得出原创的科学家相比大相径庭,却和涂涂改改的画家相同。
像画家以画肖像画糊口同样,黑客们在白天使用程序工具来糊口,像画家在业余时间创做同样,黑客们在晚上创造本身完美的做品。
像画家临摹名做和改改画画来学习绘画同样,黑客们经过查看优秀做品的源程序而且在创做过程当中不断修正本身的代码来学习提高本身的能力。
像画家一丝不苟追求本身做品的所有细节同样,优秀的黑客应该追求本身代码的完美,针对本身的心理预期去调整本身的创做节奏。
画家的合做讲求每一个人负责绘制一个相对完整的小部分,而黑客们的合做与此相似的,是各自负责编写一个独立完整的小模块。
像画家的做品和其人流芳百世同样,黑客们的如今正是画家们曾经遇到过的,经过充分探索将编程的价值发挥到极致,成为后辈们敬仰的对象。
这一部分做者提出了一些关于得到正确思想的方法论,这些方法论对规避道德规范上的被强制输入有很强的实践意义。这些方法论归纳起来就是:
咱们须要去判断所听到的言论的真伪,那些看起来是真的话是否确实是真的。
关注那些极富争议性的话,那些被贴着标签的话真的符合那些标签吗?
将当代的观点和不一样时期的古代的观点或者同一时期的不一样地点作个对比,可能就会发现当代的某些观点也许并非不可接受。
看看对于不可言说的话的捍卫者的动机,他们究竟在捍卫什么,捍卫的目的又是为了什么。
观察一种言语禁忌背后的造成机制,负责言语禁忌的团体到底是怎样的一种力量。
至于说为何咱们要去寻找这些不能说的话,做者这样认为:
训练咱们思考问题的方法,这种看起来没有什么太大意义的思考每每能够训练独特意思惟方式。
发现的不能说的话的态度,应该是在没有必要所以而争执的时候就守口如瓶,不然将会陷入没必要要的麻烦之中。
这一部分做者向咱们展现了什么是黑客追求的自由精神,自由查看全部可以认清事物运行原理和机制是黑客们发展新技术的基础。然而随着法律和版权保护的起色的出现,这种自由被大大限制,黑客们这种良好的坏习惯难觉得继,而这种良好的坏习惯每每也就是美国精神的源泉。
黑客怎样作出本身的成果,这些成果又是怎样对全世界产生了影响。
这一部分,做者借本身开发viaweb这一互联网软件服务的经从来阐述了本身对于新一代的软件服务的见解,这些见解总结起来以下:
和桌面软件留给用户的复杂和麻烦相比,互联网软件把这些复杂的管理过程留给了幕后的开发人员,留给用户的只是方便的操做,这会大大减少用户的压力。
对于开发互联网软件的开发人员来讲,庞大的软件系统和硬件设施能够按照他们想要的方式灵活地运行。
快速迭代的互联网软件能够更快发现更早解决各类bug,并且会大大减小bug出现的可能性,和桌面软件相比在bug的处理方面更具优点。
客户使用互联网软件的过程其实也就是为这个系统做出测试和找到bug的过程,这个过程还可以大大促进客户、客服和开发人员之间的合做交流,每每这些爆出的bug也可以及早地解决掉。
全身心投入开发的开发人员们会情不自禁地把本身的想法快速实现,长远的计划会在一次次的迭代后成为功能。
小而美的团队是互联网软件团队的最佳搭配,快速响应的团队可以最大限度地减少复杂会议带来的沟通弊端。
用户的行为产生的价值远远好过模拟的测试结果,关注用户的行为可以产生更符合他们内心预期的产品。
好的互联网软件服务的策略应该是订阅模式而不该该是一次性的受权,这种模式将会带来一个持续的现金流。
互联网软件服务提供公司应该比接受他们服务的公司自己更注重安全和服务的质量,只有这样才能让后者可以放心地接受这样的服务。
围绕桌面电脑,早起的黑客自此发展起本身的软件,而如今的黑客则能够围绕家家户户的我的电脑和网络搭建起他们的互联网软件服务,并且这个过程和操做系统自己无关。
微软和创业公司,对于前者,互联网软件可能会是对它的一个重大挑战,这将大大地挑战它的商业模式和技术基础,而对于后者,这将是一个大大的机会,他们将有机会以更小的力量创造更伟大的产品。
互联网软件构建技术自己有着重重的问题,和功能更为强大的桌面软件工具相比有很大劣势,但这偏偏是一个提供给创业公司的一个机遇。
运做一家创业公司没有黑客们想象的那们困难,保证营收的收支平衡,技术和产品最终带来的用户产生的价值将会使产品走向正轨。大公司和创业公司相比,也许会更有资产,可是缺少新技术自己带给产品的开发效率和灵活过程。
做者所说的财富并不简单的是指金钱,对于一个公司而言,财富是他们所创造的那些可以知足他们的用户的须要的产品所蕴含的价值,这种价值一旦被创造,传统意义上的财富就会随之而来。关于财富的创造,做者提出了这些观点:
创业公司高速创造财富的背后是全部员工可以高效率辛苦的长期工做,巨大的压力和高强度的工做使员工可以得到高额的报酬。
财富的总价值并非一成不变的,为社会创造出的价值将会变成公司的财富来源,公司里的员工们经过辛苦的工做创造的财富将会为社会带来总价值的增长。
工做的本质和目的就是在一个组织中和人合做创造财富的过程,重点在于作出人们须要的东西而非简单的劳动。
做者说起了两个很是重要的公司运行过程当中的特征:可测量性和可放大性:一个小的团体更能对团体中每一个个体的可测量性做出评估,由于每一个人的行为对整个团队的影响都会清晰地显现;可放大性体如今采用高技术方法产生的产品将会带动整个行业,同时高技术将会拉开与竞争对手的距离。然而创业公司正好符合这两个特征,一个小而精 的团队最终将灵活高效地运做,同时可以经过高技术使得迟缓行动的大公司难以追击。
创业背后的潜规则就是:真正成功地运做一个创业公司困难重重,可以存活下来的创业公司少之又少,若是想要保险,那么作法可能就是卖掉它。
用户的态度和使用习惯事最重要的,解决他们的问题是公司创造财富的最终目的。
高回报的激励最终会使得创业公司去解决过去看起来困难重重的问题,而技术革新带来的财富是致富的范例。最终,黑客们经过本身的努力得到了财富的积累,良性的循环将产生更大的财富造福社会。
这一部分做者讨论了社会总体出现贫富分化差别的缘由和可能会产生的意义,以及贫富分化将给社会发展注入的动力。下面是这一部分做者的一些观点:
父辈们理解的财富应该是一成不变的总量不会变化的东西,因此他们会很容易认为财富分配出现不均,然而事实上财富是不一样人根据不一样能力创造出来的,所以它就天生具备不公平性。
偷窃在财富转移上是个广义的概念,经过非创造的、不义的形式达到财富转移的过程都该算是偷窃,然而随着财富创造的人们的出现,偷窃没有真正创造财富的过程富有竞争力,因此社会向着正义和有价值的方向发展。
经过技术的进步和掌握技术,创造财富带来的价值和为社会带来的影响更大,同时技术在大多数方面可以使得贫富分化和社会地位看起来变得不那么严重。
贫富分化和收入差别带来的社会问题并不全都是坏事,由于创造财富的人收获的巨大收入将吸引他们继续完成更伟大的创造,同时使得整个社会快速发展。
这一部分做者提到了本身经过技术思惟解决垃圾邮件的过滤问题。这里做者提供了几个颇有意思的办法,后面的比要比前面的更具技术思惟:
恶意关键字过滤器:经过扫描邮件里出现的是否频繁一些看起来像是具备垃圾邮件特征的标记来对邮件做出判断 。
统计学过滤器:经过大样原本让系统学习什么样的标志符意味着着邮件是垃圾邮件的高几率,经过大样本的分析,系统最终会动态修正以完成判断。
贝叶斯方法:对邮件进行分析,全部的线索都有对应的得分,分析结束后得到的总分将会说明它是垃圾邮件的肯能性高低。同时,加入邮件头和主动关键字省略,将会使这种方法的可靠性大大增长。
最后,做者提到了垃圾邮件过滤的目的:过滤的最终目的就是让发送这些邮件的商家意识到效果并很差以最终放弃。
这一部分做者谈了谈一个很学术的问题,好设计是什么?好设计的特征是什么?好的设计是美,是有品味的,公认的好设计应该有这些特征:
简单。当设计只直视本质、忽略无关的时候,设计者会加倍认真地进行创做。
永不过期。不管过去、如今仍是将来的人们都认同的设计可以避开风潮、充满永恒的吸引力。
解决主要问题。这是设计的主要目的。
启发性。使用者能够在设计的原基础上充分拓展实现他们本身的想法。
些许趣味。幽默的设计反映了一种特别的力量。
艰苦和看似容易。通过努力艰苦的层层磨可贵到的结论拥有简洁和看似容易的结果,而这样的结果每每具备难以被打破的完美。
对称。这每每意味着结构的简洁和美妙。
对大天然的模仿。大天然的演化趋向于成就完美的设计,追随大天然的设计无疑就是找到完美设计的一个途径。
再设计。在原有很差的设计上从新设计,把这些问题解决使之成为好设计的一部分。
可以被复制。优秀的部分具备复用的价值。
奇特。奇特每每意味着聪明、思惟和风格。
成批出现。优秀的人们会聚在一块儿造成好设计的造成中心并造成好设计的新趋势。
大胆。今天看似大胆甚至错误的结论颇有多是明天的新理论。
解释了黑客的工具(编程语言)和工做方法,这是黑客文化的基础和核心。
这一章做者开始介绍黑客们手中的利剑--编程语言。从编程语言从底层到应用分别介绍了它的前世此生。
机器语言和汇编语言更像是直接对机器的操纵,程序员们须要从很机器的层面编写程序。
高级语言是对机器语言的高度封装,经过编译器或者解释器这一将高级语言翻译成机器语言的助手,程序员的工做难度大大下降,他们只须要关注功能而非复杂的指令自己。
开放源码的措施可以让全部有能力编程的用户及早发现解决问题,提高软件的可靠性。
编程语言孰优孰劣的问题自己就像一场战争,语言之间巨大的差别注定很难去判断谁是最好的语言。
底层的语言可以最大限度地直接和机器交流,所以能够得到最大的效率,同时,封装后对于程序员友好的高级语言的效率就低得多了。
静态语言可以有效地解决类型错误带来的bug,让绝大多数的程序员避免这种问题,而动态语言自由的特性决定了使用者须要更强的掌控能力。
面向对象编程改变了以往过程化语言的程序结构组织,这种风格一方面可使得程序的结构性更易读,同时也限制了编程的风格。
如今的时代就像是编程语言的文艺复兴,大批的编程语言冒了出来,不少语言的内核设计也许并不完善,可是在社区力量的驱动下有足够有效的第三方库的支持使得这些语言在解决问题时变的有效。
一个有趣的设想是编程语言进化到一百年后会是什么样子?抓到编程语言的发展主干是预测的基础。做者看来,具备最干净内核的语言最终将有更强的生命力。
将来计算机自己具备的更强大计算能力将为编程语言带来更多的机会。
更高的速度带来的优点颇有可能会被更消耗硬件资源的编程语言所“浪费”,由于语言实现的效率每每是对计算资源的消耗,看似友好的背后每每意味着更多的处理。
设计编程语言应该尝试对实现少作限制加大灵活性,虽然这样作可能具备很低的效率,可是对于语言内核简洁的实现大有好处。
采用多层设计会影响这种语言的性能,可是会很利于修改。应用程序的多层开发也是一种很常见的技巧,会给系统带来可重用性,对于企业软件来讲,加上面向对象编程,多层设计很是有利于软件的迭代和持续性。
关于并行计算,做者认为在大多数领域并不会成为主流,由于若是过早使用并行计算颇有可能产生过早优化的问题。
新语言将会更多地以开源项目的形式出现,并且做者们可能只是这些语言的使用者而非这些语言的编译器的做者。
若是想要创造出属于将来的更好的编程语言,咱们应该摒弃那些旧有语言带来的定势,突破这些去创造全新的习惯,在今天就能够在不考虑编译器的状况下创造新的编程语言。
这一章做者用本身的经历讲述了在技术领域使用不日常的工具和编程语言将带来什么样的意义。做者的创业项目使用了普通开发者并不会常使用的Lisp,这一技术方案最终可以使做者的项目可以快速开发以打倒竞争助手的新功能最终制胜。
Blub困境,通常的程序员很容易知足本身长期使用的编程语言,所以会陷入再也不了解新技术、新语言的困境。
使用功能强大的语言可以出其不意地削弱竞争对手的优点,由于他们深陷于Blub困境中不思进取。
这一部分做者向咱们展现了使用高级并且出色的工具将为黑客在工程上带来如何优秀的表现。以Lisp为例,做者表达了这一先进的语言在当今软件行业的竞争中制胜的奥秘:
和其余编程语言以机器发展相关的特性,Lisp是一个数学模型转变来的语言,优秀的理论特性最终使得Lisp在发展中从理论上的完美变成实践中的完美。
先进而古怪的Lisp特性是与生俱来的,和其余语言在发展中才逐渐加入新的特性相比,Lisp诞生之初就具备理论和数学上的完备。
Lisp在互联网应用程序的服务器上的表现更能体现它的优越之处,这就是在苛刻条件下利用高级工具的结果。
Lisp可能会带来不少问题,当Lisp能够跑在你可以控制的服务器上时协同就不是问题;当函数库不如构建规模庞大的系统重要时就没必要去理会现成的函数库;小而美的团队能够解决很大的问题,所以并不须要找到不少精通Lisp的黑客。
随大流的公司们最终会由于选择了大流的工具而陷入困境,选择了更想的工具的他们的竞争对手会用更小的代价得到更好的效果并最终战胜他们。
远离所谓的“业界最佳实践”其实是让你远离平庸技术的诀窍,由于顶尖的技术每每就是最小众的。
这一章做者向咱们描述了成就一门优秀的编程语言的特性,结合这些特性做者向咱们展现了可能会是求之不得的编程语言的存在条件。
成就编程语言流行程度的秘诀包括专业黑客们的见解、达到“临界数量”的使用人数,把握了最初的高级黑客、塑造了成功的产品,最终将推进这门编程语言的发展。
可以依附在一个优秀的平台上同时拥有一个好的实现是编程语言取得成功的外部条件。
保持编程语言语法和表达上的简洁将会使得追求简洁表达的黑客们喜欢上这门语言。
向黑客们敞开胸怀让他们可以充分理解和改造的编程语言将使其更便于应用,这个特性将使这门编程语言解决问题的能力充分体现。
具备良好互动性的“一次性”语言容易装备且同时很易于完成任务,长此以往,大规模的使用将很容易使得这种语言成为主流。
优秀的语言若是配上众多通过认真设计的函数库将给使用者带来实际使用上的巨大便利。
好的性能分析器将会使得使用者很是容易注意到代码运行的瓶颈处,甚至和编译器的做用不相上下,同时使用者创造出的代码和应用最终将会得到很高的效率。
经受时间考验的编程语言每每是默默天然成长起来的,新事物得到承认所需的一个长时间段一样适用于编程语言。
可以让使用者再设计是好的编程语言变得更好的一个绝佳方法,语言的推进者们若是可以在小而精的范围内提出再设计的反馈将使得语言良性地发展。
这一章做者为咱们阐释了软件设计的细节,某些软件工程中真正起做用的东西就是软件设计的技巧。
设计和研究相比,前者求好,后者求新,做者向咱们提出了设计好的编程语言而非研究新的编程语言更为重要。
软件设计的起点应该是抓对使用最终产品的人,找准他们须要的而非要求的需求。
编程语言的设计要注重的不只是程序的表达方式,更应该把它当作是可以促进使用者思考过程的媒介,所以恰到好处的设计尤其重要。这里做者再度提到了动态语言的优势,加入了“交互式顶层解释器”的帮助,变量的类型声明得以解放出来,为使用者的思考过程带来更多便利。
贴近用户就是尽快给用户一个产品的模型,一个总体的模型创建出来后再添砖加瓦、逐代更替,最终会使一个完整的形象始终呈如今设计者面前,这样不只可以得到用户评估的支持,同时也会使得设计者因逐步变化带来的进步而得到鼓励。
本文属于博主在拉勾网二进制club读书会活动中对这本名做的再读感悟。