zoukankan      html  css  js  c++  java
  • 《黑客与画家》总结

    总结

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

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

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

    眼下看来艺术家比黑客更酷,但是别忘了,古时候绘画蓬勃发展的黄金年代,艺术家也不是像现在这样酷,在当时的贵族看来也是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总结,别忘了点个赞哦~

  • 相关阅读:
    虚拟机搭建FISCO BCOS的区块链浏览器
    linux下安装cmake
    Compile error: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags
    Mac安装CMake
    Mac下如何添加User到group中
    Macos 安装md5sum、sha1sum、md5deep、sha1deep
    Support Vector Regression(SVR) 资料
    Python pandas dataframe
    python用pd.read_csv()方法来读取csv文件
    python pandas 交叉表, 透视表
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/14754699.html
Copyright © 2011-2022 走看看