一、何谓黑客?
  黑客,在我们大多数普通人眼里,就是入侵计算机的人,通常还与干坏事挂钩。而书中告诉我们,这 并不是它的真正含义。而要想理解这本书,就要首先理解什么是黑客。
  黑客这个词最初起源时,完全是一个正面的词。黑客(hacker),就是完成hack的人。而hack的字典解释是砍木头,解决一个计算机问题,就像砍倒一颗大树。用理查德•斯托尔曼的话说:“出于兴趣而解决某个难题,不管他有没有用,这就是黑客。”这句话也表明了黑客的三个标准,即好玩、高智商、探索精神。
  而根据另一本介绍黑客的书里的“黑客伦理”,黑客的价值观可以概括为:分享、开放、民主、计算机的自由使用、进步。换句话说,黑客不服从管教,具有叛逆精神。
  而后来,由于一些事件和媒体的报道和影视作品等的渲染,黑客这个词慢慢与犯罪挂钩。而在这本书中,“黑客”仍指的是传统意义上的黑客,即优秀的程序员。

  二、书名含义
  (1)黑客和画家一样,只是有一门特殊手机、有创造天赋的普通人。
  (2)编程也是一种艺术。

  三、聪明的人不受欢迎?

  有一种观点认为,聪明学生被妒忌。而作者认为,答案却是他们真的不想让自己受欢迎。若要用智力去换欢迎,他们大概是不愿意的。其实,受欢迎并不是一种天生的属性,而是要自己培养出来。

聪明的人并不等于书呆子,但是在特定的情况下,比如美国学校中,成为所谓社交上的“强人”标准太高,即使你不是很“呆”,相比之下也只能算呆子了。

  四、黑客的特点
  (1)黑客与画家的共同之处
  ①创作者
  黑客与画家有很多相像之处,他们都是创作者,他们本质上不是做做研究。书中认为,“软件工程”这个词具有误导性,与其将优秀的软件设计师称为工程师,不如称为建筑师。这个区别点在于建筑师决定做什么,工程师想出怎么做。
  黑客想做的事是设计软件,而不是实现别人所谓的构想,后者大概只能称为技工。然而公司里这种机会并不多。为了做自己想做的事,就像画家作家一样,黑客可以白天工作,而晚上从事自己的爱好。
  ②学习
  画家学习绘画的方法靠动手去画,黑客学习编程的方法也是在实践中学习。虽然我们在C语言课、数据结构课等课上学了很多知识,但是如果不是亲手去码代码,还不算真正掌握。虽然码了代码也感觉没真正掌握就是了。
  学习的途径中很重要的一点是通过范例。
  ③工作
  像画画一样工作,先有个大的架构,再慢慢填充细节, 同时对原来的设计进行修改。
  ④多人合作
  画画也有多人合作,但没有那个部分是两个人一起画的。软件开发也是一样,正确的方法是将项目分成很多模块,每人负责一个模块。
  ⑤换位思考
  从别人的需求考虑问题。
  假定用户对你的软件一无所知,软件的使用方式应该符合用户的直觉,而不是要求用户去读使用手册。
  (2)黑客与科学家的不同
  黑客真正想做的是设计优美的软件,这一点是很难用量化的标准来考核的。虽然我们将这一学科称为“计算机科学”,但对黑客而言,这与其他的“科学”并不一样。就像画家没必要弄清颜料的成分一样,黑客也没必要去弄清计算机的理论。
  黑客和科学家不同,黑客的出发点是原创,最终得到一个优美的结果。科学家的出发点是别人优美的结果,最终得到原创性。
  (3)有关编程的几点
  编程的细节应该是在写代码的同时考虑,而不是编写代码之前就全部罗列出。
  编程语言是帮助你思考程序,而不是用来表达你已经想好的程序。
  动态类型语言是赢家。
  要追求完美,即使有些部分没有人会看见。

软工读书笔记 week3 (《黑客与画家》上)的更多相关文章

  1. 软工读书笔记 week 9 ——《构建之法》

    软工读书笔记  week 9                 ——<构建之法> 最近的三周我们正式开始我们的项目.然后我也把<构建之法>中的相关章节再拿出来读了一番.以下是一些 ...

  2. 软工读书笔记 week4 ——《黑客与画家》下

    因为时间有限,只对书中后半部分几个篇章进行了阅读.        一.另一条路       作者以他自己为例,在那个没人知道什么叫“软件运行在服务器时”的时代,他和朋友选择创业时,没有选择写传统的桌面 ...

  3. 软工读书笔记 week 5 ——《构建之法》

    本周主要对<构建之法>中的一部分进行阅读. 一.软件与软件工程究竟是什么? 本书的概论部分就指出“软件 = 程序 + 软件工程”.而我们这门课的名字就叫“现代软件工程”.其实在上课之前,我 ...

  4. 软工读书笔记 week 8 —— 《疯狂的程序员》

    这次接着上一次的进度继续阅读,并将其中感悟较深的几点记录如下.      程序员是一个幕后工作者 书中绝影给医院写软件,而医生(用户)只是评价这个软件好不好用,而不会去评价写这个软件的程序员优不优秀. ...

  5. 软工读书笔记 week 1

    这次读书笔记主要是就<程序员修炼之道>这本书的前半部分做一些总结以及发表一些自己的看法. 本书前面的一部分主要是一些程序员应该在工作中时刻注意的事情,一些关键的信息如下: 1.处理问题的态 ...

  6. 软工读书笔记 week 6 ——《疯狂的程序员》Part 1

    这本小说以主人公绝影上大学后初次接触编程开始讲起,这周主要看的就是绝影还在大学的那段经历,虽然故事背景很多年前,但很多地方仍然会引发我的共鸣. 第一个梦想 在“第一个梦想”一节讲了作业布置做一个通讯录 ...

  7. 软工读书笔记 week 7 ——《构建之法》

    总时长近两周的结对项目终于算是结束了,马上要重新开启团队项目.于是这几天决定对<构建之法>一书中与团队项目及需求分析有关的章节进行重点阅读,希望能够从中得到启发,并运用到接下来的团队项目中 ...

  8. 软工读书笔记 week2

    <程序员修炼之道>这本书后面一部分则是更深入.更具体.更细致地就程序员应该注意的事项做一些讨论,书中说的很多在过去的经历中都有较深的体会,同时也给了我很多启发.以下是一些我感悟较深的点: ...

  9. 《代码大全2》读书笔记 Week3

    <代码大全2>第六.七章 作者在第六章中从抽象数据类型(Abstract Data Type)出发阐释类(class)的概念,给出创建类的原因以及创建高质量的常涉及的设计问题.抽象数据类型 ...

随机推荐

  1. 蓝桥杯-Anagrams问题

     算法训练 Anagrams问题   时间限制:1.0s   内存限制:512.0MB      问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写 ...

  2. 区间DP的学习(持续更新)

    例题: 1.Multiplication Puzzle 原题地址:http://poj.org/problem?id=1651 2.Dire Wolf 原题地址:http://acm.split.hd ...

  3. 【实战】Weblogic反序列化Getshell

    修仙就是干,直接操作起来 1.访问http://x.x.x.x:7001/wls-wsat/CoordinatorPortType 2.加入Content-Type:text/xml 3.在body中 ...

  4. JavaSwing程序设计(目录)

    一.JavaSwing 概述 JavaSwing 图形界面概述 二.JavaSwing 基本组件 JLabel(标签) JButton(按钮) JTextField(文本框) JPasswordFie ...

  5. 关于README的内容

    如何在开发项目的时候写出标准的README文件? 为什么要写这篇博客? 关于README的编写,这个也十分的重要,如果你觉得只是随便写写,那么你就错了:编写这部分也是相当的重要的.工欲善其事,必先利其 ...

  6. activity启动模式launchMode区别和优化

    初学android的开发人员,可能会经常忽略这个重要的设置. Activity一共有以下四种launchMode:1.standard2.singleTop3.singleTask4.singleIn ...

  7. java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可!

    java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可! 通过 云寻觅 javacallcsharp 生成器 自动生成java jni类库,  ...

  8. Jmeter创建一个 JMS 主题的测试计划

    新建一个 JMS 主题的测试计划 JMS 需要下载一些可选的jar 文件.详细信息请参阅 第一章:新手入门.在本章节,将学习如何创建测试计划来测试JMS提供程序.创建5个订阅者和1个发布者.创建2个线 ...

  9. Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标

    十月 17, 2016 10:14:30 下午 org.springframework.context.support.AbstractApplicationContext prepareRefres ...

  10. Javac的命令

    关于命令,还可以查看<Java 7程序设计>一书后面的附录A As per javac source docs, there are 4 kinds of options: standar ...