笔记

标签: 读书 编程 | 发表时间:2011-08-13 18:08 | 作者:Fox 毛毛
出处:http://www.yulefox.com
Author: Fox (yulefox at gmail.com)
Site: http://www.yulefox.com
Date: Aug. 13, 2011

Contents

INTRODUCTION

之前没有把 Paul Graham 的 <黑客与画家> 一书读完, 上周就从同事那里把书带回家, 也一直没读, 到这周才有时间读完. 很久没有更新了 (一看时间, 整整 5 个月), 顺便把这篇写了几个月的感想放出来.

前几章的一点看法

这本书前面 8 章讲述的内容, 大多是我并不太感兴趣的, 比如财富, 比如创业. 不是因为它们本身怎么样, 而是因为我一直认为, 它们是没有办法复制的, 我宁可依循我自己的原则. 其中 Graham 的一些观点我比较不能赞同, 有一些我认为可以拿出来讨论.

Graham 用一种颠覆性的观点表达了他对计算机科学的看法. 不得不说, 我并不能完全同意他把计算理论对黑客的重要性等同于颜料化学成分对画家的重要性. 他甚至认为, 黑客新想法的最佳来源, 并非那些名字里有计算机三个字的理论领域, 而是来自于其他创作领域. 与其到计算理论领域寻找创意, 你还不如在绘画中寻找创意.

我无意带着恶意去揣测这与他攻读人工智能博士学位时遭受的挫折是否有关, 显然, 那应该不是一段愉快的记忆, 但这并没有妨碍他成为一名优秀的黑客. 只是, 我们无法也不应该告诉那些试图成为黑客的学生们, 计算机理论基础是多么的无足轻重. 如果需要做一些说明, 我相信大家对黑客的定义或许是有区别的.

我赞同 Graham 所讲的如果你不爱一件事, 你不可能把它做得真正优秀, 要是你很热爱编程, 你就不可避免地会开发你自己的项目. 我也强烈反对多人共同开发同一模块, 说的更直白一点, 我不喜欢别人弄脏我的设计.

从第 9 章开始, Graham 阐述和设计编程相关的内容, 这里就摘抄一些我认为比较重要的 (其实我只是把第 9 章看的比较细致, 其它章节基本都是扫过…).

什么是好的设计

  • 好设计是简单的设计

    少即是多. 当你被迫把东西做得很简单时, 你就被迫直接面对真正的问题, 当你不能用表面的装饰交差时, 你就不得不做好真正的本质部分.

  • 好设计是永不过时的设计

    数学家哈代说: 丑陋的数学在世界上无法生存. 飞机设计师凯利.约翰逊说: 如果解决方法是丑陋的, 那就肯定还有更好的解决方法, 只是还没有发现而已. 显然, 这些经典的观点也同样适用于编码设计.

  • 好设计是解决主要问题的设计

  • 好设计是启发性的设计

    其实, 任何设计是都启发性的, 只是坏设计会成为项目中的 "破窗户".

  • 好设计通常是有点趣味性的设计

    好的设计并非一定要有趣, 但是很难想像完全无趣的设计会是好的设计.

  • 好设计是艰苦的设计

  • 好设计是看似容易的设计

    只见贼吃肉, 没见贼挨打. 结合这句话, 你就很容易理解上面两条的含义了.

  • 好设计是对称的设计

    这条要看怎么理解了. 对称的危险在于它可以用来取代思考, 在大量使用重复的时候这种危险性更大. 只有知道什么是对称, 为什么需要对称才能做到好的对称.

  • 好设计是模仿大自然的设计

  • 好设计是一种再设计

    很少有人一次就把事情做对. 犯错误是很正常的事情. 扔掉早期原型是需要信心的.

  • 好设计是能够复制的设计

  • 好设计常常是奇特的设计

    唯一达到奇特的方法, 就是追求做到好作品, 完成之后再回过头看.

  • 好设计是成批出现的

    这是一个残酷的现实, 因为从历史来看, 大师的时代就是大师的时代. 不管你信不信, 反正我是信了.

  • 好设计常常是大胆的设计

    优秀作品的秘诀就是: 非常严格的品味, 再加上实现这种品味的能力.

我关于写代码的一些琐碎的看法

最后, 我想插一段自己关于写代码的一些想法. 之前我曾试图分析自己现在为什么会对代码的美感如此纠结, 那是无关乎代码运行的.

我有一个与自己要求完美的内心并不一致的方面, 我往往只是提出自己的要求和看法, 但并不会强制要求别人. 我觉得每个人有他自己的自由和尊严, 尤其是聪明的程序员. 但这与项目管理的要求或许是相悖的, 或许是因为自己比较希望自己的信念得到别人的尊重, 我会尽量尊重别人的观点, 至少表面上是这样.

我写代码的时候容易分心. 往往会因为环境不称心, 而分心去改善, 如果碰壁, 会挫伤我的积极性. 举个例子, 为了阅读代码, 我一定会努力寻求一个自己觉得舒服的编辑器, 于是我会在 Emacs 和 Vim 之间徘徊很久; 在发现 Vim 有很多强大的命令时, 我一定试图掌握更多的命令, 直到自己满意为止; 当我再次用 Vim 打开代码后, 我发现我虽然不需要一个强大的 IDE, 但我至少需要 tags, 在遇到不能跳转的 tag 时, 我会变得很烦躁, 进而无所适从.

在编码和其他一些事情上, 我不喜欢将就, 我希望能够尽我所能, 能够把一件事做好. 而且会为了达到这样的目标, 不惜花费掉很多在他人看来不必要的时间.

写代码的时候, 我不会满足于手动编写简单的 makefile, 我希望自己写出的 makefile 看上去足够 "专业", 于是会转去了解 makefile 规则; 然后会尝试 autotools…

这些毛病的一个直接表现是, 我为了解决过程中遇到的一点不爽, 强迫自己去 fix 它, 结果招致更多的不爽, 然后不断的去 fix 它们. 后果就是, 当我再回头的时候, 发现时间已经过去了很久, 我的精力大量投入其中, 耽搁了本来的工作, 虽然时间不能说是浪费, 但效果却并不是很好.

如果说有时候的付出是值得的, 但另一些时候的做法则有 "睡不着觉怨床歪" 的嫌疑. 比如, 比较烦躁的时候, 会觉得鼠标不给力, 耳机/音箱不给力, 显示器不给力… 转去考虑如何让这些莫名其妙的需求被满足.

其实, 回头想想, 这些东西不但没有让我感到羞愧, 而且得到了我内心的纵容, 至少在目前这段时间里, 我的思想就是这个样子, 也决定了我如何去做.

相关 [笔记] 推荐:

笔记

- 毛毛 - 游戏人生
我关于写代码的一些琐碎的看法. 之前没有把 Paul Graham 的 <黑客与画家> 一书读完, 上周就从同事那里把书带回家, 也一直没读, 到这周才有时间读完. 很久没有更新了 (一看时间, 整整 5 个月), 顺便把这篇写了几个月的感想放出来.. 这本书前面 8 章讲述的内容, 大多是我并不太感兴趣的, 比如财富, 比如创业.

Textmate笔记

- Sean Lee - Reborn
过去在Windows上还真的没有怎么太在意文本编辑器(也跟自己不是职业程序员有点关系吧. ),近来常在Mac上使用Textmate,真觉得一款好的文本编辑器实在非常必要. Textmate售价$58,很多人觉得贵,不过它真的不错. 为Finder加上“Open in textmate”按钮. 作者Henrik的主页上有详细的介绍.

OSX 笔记

- - C++博客-首页原创精华区
在vbox中安装10.7的方法:. 首先使用OS_X_Lion.iso.torrent下载操作系统的iso文件. 直接使用OS_X_Lion.iso安装,安装完之后使用HJMac.iso进行启动. 在win7 64bit上通过,但是在linux上没有通过. 升级,可以把10.7升级为10.7.4,方法是去苹果官方 http://support.apple.com/downloads 网站下载:.

笔记--redis

- - 移动开发 - ITeye博客
接着准备面试内容,今天学习了下redis,继续我的笔记加深印象. 1.为什么要使用redis.  答:主要是 性能和 并发两个方面,另外redis也可以做分布式锁和消息队列等其他功能. 但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis.

云笔记:跨平台笔记服务

- one dollar - 天涯海阁-Web2.0Share
云笔记是一款跨平台的笔记服务,目前提供了Android、iPhone、iPad客户端(FIT写字板、FIT Paper). 最早知道云笔记也是因为一直使用FIT写字板,发现FIT写字板更新之后支持了云同步,才发现了云笔记. 云笔记是新点科技旗下的产品,相信Mac用户都会知道FIT输入法,Mac和iOS上面很棒的输入法应用.

小岛笔记 Day1

- Qian - 吃素菜,彼此相爱。
去巴厘岛之前,我们对旅行进行了明确分工,我负责研究攻略. 我特意买了09年版的孤独星球,像小学生一样注了注,贴了几溜彩色便签. 临行前,我被各种词条式的信息膨胀着,能在10秒内,标出7座海神庙9座指示方位神庙的地图方位. 状态好时,能说出哪家餐馆在哪页地图的横几格竖几格. 包哥最怕坐飞机,又贵看着又不安全的事儿,有悖他的人生信条.

笔记本爱经

- Yuheng Kuang - 煎蛋
oioi:sein已经回家过年 :|. 名为KamaSutra(爱经)Lap,看看你与笔记本最亲近的姿势会是怎样 :) link. 老实说大部分时间,这玩意并没有让我感觉舒服. © oioi for 煎蛋 / 20回复 / 投稿 / 图片托管于又拍网. geek:极客2011日历(图集). 数码看新鲜:Dell 旋转屏幕笔记本.

shell 学习笔记

- tiger - 游戏人生
将脚本目录加到 PATH 中. 在 dash 中如何进行字符串替换. 将 rst 格式文档转换为 blog 可用的 html 代码. shell 脚本虽然不是非常复杂的程序, 但对于首次接触的我来讲, 多少还是有些忌惮. 不过, 接触任何新事物都需要勇敢面对, 逐步树立信心. 我是冲着把脚本写好去的, 所以, 我的目标是能够写出友好, 健壮, 优美的脚本..

OAuth学习笔记

- 宋大妈 - FeedzShare
来自: 标点符 - FeedzShare  . 发布时间:2011年08月29日,  已有 2 人推荐. OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.

用PPT做笔记

- winners - 蔡學鏞【言程序】部落格
我具有十多年的讲师经历,这让我浅意识里「随时准备开发新课程教材」. 开发教材的方式有两种:「由上而下」或者「由下而上」. 这次我在QCon的演讲有两场,刚好分别是用这两种不同的方式做出来的. 对于我熟悉的主题,我采用由上而下的方式制作教材PPT;例如,我已经相当熟悉REBOL,所以我可以先决定要讲哪些内容,然后安排这些内容的次序,再加上一些润饰,就OK了.