《黑客与画家》总结

总结

这个时代是程序员主导的时代,而伟大的程序员就是黑客。

《黑客与画家》这本书不仅仅是给程序员看的,而是给所有人看的,能帮助人们了解黑客的定义、黑客的成长、编程的本质、互联网的规则等等。

书名叫《黑客与画家》是以画家为参考,给普通人解释黑客与艺术相通的地方。

眼下看来艺术家比黑客更酷,但是别忘了,古时候绘画蓬勃发展的黄金年代,艺术家也不是像现在这样酷,在当时的贵族看来也是low逼,只是会一门手艺用来谋生的工人而已,很多艺术家都是在死后才声名远播。

程序员在现在很多人看来也是low逼,程序员还喜欢自嘲码农。
互联网目前处于高速发展的阶段,比以前任何一个时代都要迅猛,相信不久后,优秀的源码和软件也会被世人认可,让普通人知道什么是真正的软件美学。

一、黑客是什么

在媒体和普通人眼里,黑客就是入侵计算机犯罪的人,其实这有误解,也怪各种科幻片整出一堆结合源码画面的炫酷效果。

那黑客是什么呢?黑客一定是最优秀的程序员。最优秀的程序员有什么特点?

  • 好玩
  • 高智商
  • 探索精神
    根据理查德·斯托尔慢的说法,只有其行为同时满足这三个标准,才能被称为“黑客”。

黑客为什么叫hacker?
1946年,第一台电子计算机ENIAC在美国诞生,从此世界上一些最聪明、最有创造力的人开始进入了这个行业,在他们身上逐渐形成一种独特的技术文化。
到了20世纪60年代初,麻省理工有一个学生团体叫“铁路模型技术俱乐部”,他们把难题的解决方法称为hack。

hack的字典解释是砍木头,解决一个计算机难题就像砍倒一棵大树,完成这种hack的过程就是hacking,而从事hacking的人就是hacker,也就是黑客(hacker)。

二、普通黑客与优秀黑客

核心就是能否“换位思考”。
这不光是黑客,而是所有技术人员和优秀技术人员的差别。
判断一个人是不具备“换位思考”的能力的好方法,就是看他怎样向没有技术背景的人解释技术问题。

越能深入浅出讲解的越厉害,这也就是老子说的“大道至简”

三、黑客与艺术的关系

黑客与画家、音乐家、建筑师、作家是一样的,都是创作者,都想创作出优秀的作品。
本质上都不是在做研究,虽然创作过程中,他们会发现一些新技术。

我们都知道艺术其中的一项就是建筑,而编程的很多理念都来自建筑。
编程里边高手都喜欢用设计模式,有23种,其实就是来源于建筑学。

设计模式这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
1977年,美国著名建筑大师亚历山大在《建筑模式语言:城镇、建筑、构造》中提出了253种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。
1979年,亚历山大又写了一本《建筑的永恒之道》,进一步加强了设计模式的思想。

设计模式这东西其实可以理解成一种套路,以不变应万变,就是来啥复杂的需求都能用它来套一下,能保证很好的扩展性和可维护性。

在英语中,“建筑师”(architect)和“架构师”(architect)是同一个词,优秀的程序员不仅负责建造,还负责架构 。

与其说优秀的软件设计师是工程师,不如说是建筑师。

黑客与画家是类似的

  1. 实践求真知。
    画家学习的方法是动手去画,黑客学习编程的方式也一样。
    大多数黑客不是通过大学课程学会编程的,而从实践中学习的,光看书是学不会编程的。
  2. 模仿优秀作品。
    毕加索说过:“good artists copy great ones steal”
    几百年来,临摹大师的作品一直是传统美术教育的一部分,因为临摹迫使你仔细观察一幅画是如何完成的。
    对于画家来说,博物馆就是美术技巧的图书馆。同样,黑客可以通过观看优秀的源代码学会编程。(作家、雕塑家也可以模仿别的人作品学习)
  3. 多人协作模块化
    当多个画家创作一幅作品时,每个人画的部分是不一样的。
    通常来说,大师负责画主要人物,助手们负责画次要人物和背景。这也是多人共同开发一个软件的正确模式。把项目分割成严格定义的模块,每个模块由一个人明确负责。

四、什么是好的设计

书中罗烈了一堆,其实有的有些刻意了,下面这几个是个人认为比较吃得开的几点:

1.简单

在数学中,简短的证明往往是更好的证明。特别对于数学公理来说,少即是多。
在编程中,这种说法也适用。对于建筑师和设计者,它意味着美依赖于一些精心选择的结构性元素,而不依赖于表面装饰品的堆砌。
在绘画中,也类似,认真观察的、非常有代表性的静物作品往往要比表面极尽华美、但是实质上只是无意义重复的“巨作”(比如再现非常复杂的花边的绘画作品)更价值。
在写作上,这种说法意味着只说必须要说的话,并且说得简短。

2.永不过时

只要没有错误,每一个数学证明都是永不过时的。
所以数学家哈代才会说:“丑陋的数学在世界上无法生存。”
他的意思与飞机设计师凯利·约翰逊的观点一样的:如果解决方法,只是还没有发现而已。

3.具有启发性

艺术作品有描述性的,也有启发性的,后者往往比前者更引人入胜。
一千个读者就有一千个哈姆雷特,每个人看到《蒙娜丽莎》都有自己的理解。

4.看似容易

优秀运动员比赛时,让人觉得他轻轻松松就获胜了,优秀设计师也是如此,他们的工作看上去很容易。大多数时候,这是一种错觉。作家的文章读起来流畅自如,但是背后其实经过了反复修改

来看下毕加索的公牛图:

5.对称性

对称有两种:重复性对称和递归性对称

递归性对称就是子元素的重复

比如

  • 树叶上叶脉的纹路。

  • 米开朗基罗的《创世纪 》

    搞错了,再来

  • 巴黎的埃菲尔铁塔(大塔里有小塔,递归效果)

  • 编程中的函数递归

在数学和工程学中,递归尤其有用,归纳式证明方法既简洁又美妙。

6.大胆

许多文艺复兴时期的艺术作品在当时都被认为极其大逆不道。
其实科学发展也是这样的,
比如哥白尼挑战地心说,
又比如爱因斯坦的相对论挑战了牛顿的万有引力,直到很多年后才被人接受。

7.成批出现

15世纪住佛罗伦萨的伟大艺术家一堆,有达芬奇、米开朗基罗、波提切利、马萨乔等等。但同样是大城市的米兰,就寥寥无几。
推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要。

最后总结下:
黑客与画家一样,都是创作者。
画家用的是画笔,黑客用的是编程语言,而用什么语言并不重要,重要的是对问题是否有正确的理解,那些脱离代码以外的东西才是核心。

编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。
因为很多要创作的东西都不是一开始能完全想明白的,而是做的过程中逐渐才想清楚的,这与作家、画家和建筑师的做法完全一样。
我们在写程序的同时还要思考,编码的过程中可能会有突然涌现的灵感。

编程语言它应该是一支铅笔,而不是一支钢笔。我们需要的是随意涂抹、擦擦改改。明白这一点对软件设计有重大影响,它意味着,编程是允许动态扩展的。

以上内容由chenqionghe总结,别忘了点个赞哦~

原文地址:https://www.cnblogs.com/chenqionghe/p/14754699.html