黑客与画家(2)

编程到底能有多酷,取决于我们能够用这种新媒介做出怎样的工作

黑客应该知道什么是创作

  • 创造优美事物的方式,往往不是从头做起,而是在现有成果的基础上,做一些小小的调整,或者将已有的观点用比较新的方式组合起来。
  • 黑客搞懂“计算理论”(theory of computation)的必要性,如同画家搞懂颜料的化学成分的必要性。一般来说,知道“时间复杂度”和“空间复杂度”(time and space complexity);可能还需要知道状态机(state machine)的概念(写解析器的话)。

黑客怎么创作

  • 黑客从实践中而不是课程中学会编程
  • 应该定期的从头开始而不是常年累月在一个项目上不断工作(试图把新想法都以修订版的形式包括进去)
  • 创作者除了动手实践,还有一个学习途径是通过范例,比如画家仔细观察、临摹;作家总结和模仿大师的文章;黑客也可以通过观察优秀的程序来学会编程,看源代码,开源运动使得学习编程更加容易
  • 不能盼望先有一个完美的规格设计,过早设计和过早优化都是不好的
  • 一种好的编程语言,应该像油画颜料一样让我们可以很从容地改变下想法(动态类型语言);同时这种语言应该非常抽象,简短才容易修改。
  • 预料中没有人看的部分,也应该是优美的
  • 修bug才更像传统的工作,更接近大家想象中的样子

黑客应该跳出教条主义,有自己的思想

  • 作者认为,学校教的很多都是错的,把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在之前;调试不是最后的步骤,编程的过程就是在不断调试。学校里教的那种“一二三四”的做法其实很蠢。
  • 编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。
  • 编程语言首要的特性应该是允许动态扩展(malleable),作者表明他认识的黑客没有一个喜欢静态类型语言编程(static typing)
  • 其他人和数学家自己都相信数学家更聪明:一张写满了数学公式的纸真是令人印象深刻——如果用希腊字母来表示变量名,那就更深刻了(笑)
  • 大学和实验室强迫黑客做科学家,而企业强迫黑客做工程师

黑客为什么应该创业

  • 黑客不应该成为技工,把产品经理的构想翻译成代码;黑客不是忙于用软件实现功能,而应该是设计软件。
  • 大公司的管理层很难正确识别到底应该把设计软件的任务交给谁
  • 然而事实上,你很难单单依靠软件设计去和大公司竞争
  • 真正竞争软件设计的战场是新兴领域的市场,几乎所有的创业公司都是这样取得成功的
  • 赚钱的软件往往不是好玩的软件

黑客如何规划自己

  • 在职业生涯的早期,找一份与你的“真正工作”非常相关的“白天工作”,首先解决生计
  • 在业余时间,开发优美的软件
  • 如果你不爱一件事,你就不可能把它做的真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目

黑客应该换位思考

  • 正确的合作方法,是吧项目分割成严格定义的模块,每一个模块由一个人明确负责;模块之间的接口精心设计,如果可能,就把文档说明写的像编程语言规范那样清晰
  • 从他人的角度思考问题正是成功的奥秘。
  • 换位思考不意味着自我牺牲,了解别人的看法,不等于你要为他的利益而服务
  • 判断一个人是否具备“换位思考”的能力:就是看他怎样像没有技术背景的人,解释技术问题
  • 软件的部分功能,就是解释自己;源代码也应该可以解释自己;“程序是写出来给人看的,附带能在机器上运行”——《计算机程序的结构与解释》卷首语
  • 换位思考和智商之间关系不大,有些地方却把“自行其道、完全不替他人着想”看成高水平、高智商的表现甚至风尚