索鸟网

  1. 首页
  2. 设计_优美的软件_《黑客与画家》(n1

设计_优美的软件_《黑客与画家》(n1


内容摘抄自《黑客与画家》_____保罗·格雷厄姆
这本书不是很长,3天就能读完他
** 以下文章摘抄"黑客"以"程序员"替代。

程序写出来是给人看的,附带能在机器上运行。

《黑客与画家》传送门
注:文件中链接
博文
优美的软件不适合论文的题材:科学研究必须具有原创性、科学研究必须是能够产生大量成果(而那些不成熟的、障碍重重的领域最容易写出许多篇论文,你可以写那些为了完成工作、你不得不克服的障碍)、

(如果你假定,使用一系列的谓词逻辑(predicate logic)表达式,再加上代表抽象概念的参数,就能表达人类的知识,那么,你就可以写出许许多多的论文,解释如何完成这项工作。)

(创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。)

你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
(明白这一点对软件设计有重大影响)

静态类型
它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那样编程,那么静态类型(static typing)^是一个不错的槪念。但是,我认识的程序员,没有一个人喜欢用静态类型语言编程。我们需要的是一种可以随意涂抹、擦擦改改的语言。
(静态类型是某些计算机语言的一个特性,指编译时对变量类型进行严格检査,典型代表是C、C++和Java。在这一类语言中,声明变量的时候,必须指定类型,而且以后不能再改变。这必然意味着,只有在你对整个程序流程和细节思考成熟以后,才能编写代码。与之对应的则是动态类型(dynamic typing)语言,变量包含的数据类型可以随时改变。)

优秀的程序员被当作技工使用

“优秀的程序员”的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”(如果这个词是这么用的话)翻译成代码。

这似乎是大公司的普遍情况。大公司这样安排的原因是为了减少结果的标准差。因为实际上只有很少一部分程序员懂得如何正确设计软件,公司的管理层很难正确识别到底应该把设计软件的任务交给谁。所以,大部分公司不把设计软件的职责交给一个优秀的程序员,而是交给一个委员会,程序员的作用仅仅是实现那个委员会的设计。

如果某一天你想要去赚大钱,那么记住上面这一点,因为这是创业公司能够成功的原因之一。大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。

微软不鼓励雇员为开源项目做贡献,甚至业余时间也不行。但是,如此之多的一流程序员都在从事开源项目,所以这个政策主要的效果,可能就是使得微软公司很难雇到一流的程序员。

程序员就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。

合作
需要合作,但是不要“合”得过头。如果一个代码块由三四个人共同开发,就没有人真正“拥有”这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。你要明白,用户第一次使用你的软件的时候,不会预先做好功课,他们没有任何准备就开始用了,所以软件的使用方式最好能符合用户的直觉,别指望用户去读使用手册。在这方面,我见过的最佳系统是1984年原始的Macintosh电脑。它做到了那时别的软件都做不到的事情:它真的能用。

一种好的编程语言应该比英语更容易解释软件。只有在那些不太成熟、容易出现问题的地方,你才应该加上注释,提醒读者注意那里,就好像公路上只有在急转弯处才会出现警示标志一样。

相关标签: 设计

来源地址:http://www.imooc.com/article/20342 版权归作者所有!

相关教程

  • 《黑客与画家》——设计与研究

    15 设计与研究 设计与研究的区别看来就在于,前者追求“好”(good),后者追求“新”(new)。 最大的不同在于你会更多地考虑用户。设计的时候,一开始总是问:我为谁设计?他们需要什么?比如,优秀的建筑师不会先设计,然后强迫用户接受,而是先研究最终用户的需求,然后做出用户需要的设计。 注意,我说的是“用户需要的设计”,而不是“用户要求的设计”。我不想让
  • 《黑客与画家》——不能说的话

    3 不能说的话   但真正令人惊恐的是,流行一时的不仅有衣服,还有道德观念。明明是专横武断、毫无依据的错误观点,但是大多数人却深信不疑,受到影响而不自知。这是非常危险的。   历史的常态似乎就是,任何一个年代的人们,都会对一些荒谬的东西深信不疑。他们的信念还很坚定,只要有人稍微表示一点怀疑,就会惹来大麻烦。 你是一个随大流的人吗?   让我先问你一个问题
  • 《黑客与画家》——设计者的品味

    9 设计者的品味 现在流行“相对主义”,即认为真理是相对的。即使你已经从小孩变成了成年人,这种观点依然可能妨碍你思考“品味”。把品味说成个人的偏好可以有效地杜绝争论,防止人们争执哪一种品味更好。但是问题是,这种说法是不正确的。只要你自己开始动手设计东西,就能明白这一点。 所谓“伟大的艺术家”就是这个人的作品要比其他人的杰出,确实存在比其他设计更好的杰出设
  • python 爬虫利器优美的BeautifulSoup

        近期在研究py的网络编程,编写爬虫也是顺利成章的,开始在纠结与用正则表达式来匹配,到后来发现了Beautifulsoup,用他可以非常完美的帮我完成了这些任务:       Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规
  • 如何写出优美的 C 代码

    面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易读,易维护,复杂度较低的优美代码,本文将通过一个实际的例子来说明这一点。 基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体。结构体正是面
  • PHP学习必看的一些书

    对应初学的PHP,应该买什么样的书?到处问人,到处求助? 该文章列举了一些书籍,感觉还行,特此重新整理了一下。觉得有些言过其实了,或者是没必要去看的。 原文地址:http://blog.csdn.net/heiyeshuwu/article/details/8688324 该书单我经过一些调整。 PHP相关 《PHP程序设计》(第2版) –PHP语法和入门最好的书
  • github上有人推介的编程类书籍

    计算机系统与网络 《图灵的秘密》 《计算机系统概论》 《深入理解Linux内核》 《深入Linux内核架构》 《TCP/IP详解 卷1:协议》 《Linux系统编程(第2版)》 《Linux内核设计与实现(第3版)》 《深入理解计算机系统(原书第2版)》 《计算机程序的构造和解释(原书第2版)》 《编码:隐匿在计算机软硬件背后的语言》 《性能之颠:洞悉系统、企业与云计算
  • 如果有人让你推荐编程技术书,请叫他看这个列表

    如果有人让你推荐编程技术书,请叫他看这个列表 这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试 和 编程相关的经典书籍。 本列表综合了伯乐在线网站以往推荐经典书籍文章中的列表,以及在微信和微博中被广泛推荐的好书。虽然已经包括了 100 多本,覆盖的