这本书所提到的函数式编程的知识比较少,比我知道的还要少(虽然没正式学习过),但里面提到的关于创业,管理,编程语言的发展与进化,黑客精神以及公民自由等话题还是比较有意思的
关于公民自由
”公民自由并不仅仅是社会制度的装饰品,或者是一种很古老的传统。公民自由式的国家富强。一个人们拥有言论自由和行动自由的社会,往往最有可能采纳最优方 案,而不是采纳最有权势的人提出的方案。专制国家会变成腐败国家,腐败国家会变成贫穷国家。贫穷国家会变成弱小国家。经济学里有一条拉弗曲线 (Laffer curve),认为随着税率的上升,税收收入会先增加后减少。我认为izhengfu的力量也是如此,随着对公民自由的限制不断上升,政府的力量会先增加 后减少。至少现在看李艾,我们的政府(注:American Government)很可能蠢到会真的把这个实验付诸实施,亲自验证一下这个观点.但是,税率提高了还能再降下来,而一旦这个实验铸成大错,会悔之晚 矣,因为集权主义制度只要形成了,就很难废除"
摘自原书,这个要自己看自己体会的...
美国精神(American-ness)
如果读美国开国元勋的自述,你会发现他们听起来很想黑客"反抗政府的精神,"弗杰逊写道,"在某些场合实施如此珍贵,我希望他有缘保持活跃。"
关于良好的坏习惯
我一直以为有些东西不能以平常眼光来看,比如懒这个东西。懒有时对于程序员来说意味着高效率。以亲身经历来说,上小学那会老师布置作业会让 把所有生词抄写5 遍10遍的(应试教育哈),那时觉得这个巨无聊,但又不能不做,咋办?我当时是开始结尾照写,中间认为自己已经掌握的就少些或者直接跳过去了。至于数学题 要全做一遍的,其实有些题读完就知道怎么做的或者搭眼就知道答案的一律跳过,遇到那些需要思考一会的才动手做下。也许是每次考试成绩都还不错,大多是满分 或者接近满 分,数学老师也网开一面,没做追究,当然上交要批改的数学作业除外。最初知道懒这层书面含义的还是刚开始学习Perl的时候,Perl程序员认为懒,傲慢 是其美 德。比如有一大批需要输入数据库的记录,手工一条条输入会花费大半天时间,但是通过写个脚本来处理,估计最多也就还是百行程序的事,其实的时间可以喝喝咖 啡来休息下...
关于牛逼的程序猿
"黑客也是创造者,和画家,建筑师,作家没啥两样,也要通过动手实践才行.大多数黑客不是通过大学课程学会编程的,他们从实践中学习,他们从13岁时就开始自己动手写程序了;即使上了大学,黑客学习编程依然主要通过自己写程序"
个人观点,大多数牛B的人(特殊的绝顶聪明的名人不适合拿来举例子的)也有其苦逼的经历!在大多数人花前月下时可能他们还在不停的coding或者学 习;在大多数人早早入睡后也许他们还为了调试一个程序熬到很晚。就像武侠小说中的男猪角,除了奇遇外,他们耀眼的光环后也是经历过枯燥的修炼才有今日之成 果的
关于互联网软件的安全性
其实这个不是那么苟同作者的观点,如果一旦有漏洞,所有用户均受相等几率的影响与损失。 就像Amazon云事故一样,其实云计算的安全性还是有待完善的。另外,客户怎敢讲自己核心的资料都放在云端么,尤其是中国这个各方面还有漏洞和有待完善的互联网环境?
关于盗版和价格歧视
允许一定数量的盗版,提高影响力和知名度,但一般只对普通用户(最底层的消费者),企业级就不是这样,还存在价格歧视的(国内企业有些内部应该也有盗版的 吧?!) 这个有点老鹰和兔之间关系的味道.如果真的一刀切,一是企业也没这么大的经历,二是真扫静了,估计另一款相似的东西会流行起来,很大一部分用户或许会流失 掉
关于编程方式
i). 先做出雏形或者一部分,然后不断修正完善
其实在大学里做大作业时,估计大家大多都是采用这种方式的,不管性能和效率,先做出来,或者一部分也行,然后慢慢修改,直到完全符合要求为止. 这个也就是经常称为的"自底向上"的方法
ii).先写详细设计和设计接口,然后再编码
离开学校工作中的方法,从大的方面说,就是先搭一个框架,然后不断往里填东西,可以称为"自顶向上"
按照存在即合理的观点,两种方法也很难说孰优孰劣,只是后者用多了,是不是将人的思维就固定在一个模子里呢?
关于编程语言
一般来说,语言层次和抽象度成正相;和效率成反相。不过随着硬件处理能力的提升,是可以提高高层次语言的效率的
人总是有思维定势的, "如果你长期使用某种语言,就会慢慢按照这种语言的思维模式进行思考",这一点深表赞同。一些黑客只喜欢自己用的语言,反感其他所有的语言;另一些黑客则 说所有的语言都一样。前者有点偏执狂,后者则是搞得很玄乎的样子,从图灵完备的角度来说,各种语言理论上都是一样强大,注意是理论上,理论和实际还是有差别的。事实确实应该介于这两个极端之间。编程语言的编程能力之间确实有差异,但很难确定的说哪种是最好的,就像常说的寸有所长,尺有所短一样。什么样的场合选什么样的语言,这个其实是靠经验和积累的。
很多数据结构存在的原因都是和计算机的速度有关;程序代码本身很重要,其实代码以外的东西,比如设计思想,也是很重要的,就像linux kernel mm子系统中为啥slab-->slub,为啥这样设计?相关的数据结构的字段,少一个行不行? 如果自己设计会设计成神马样子? 多想想这个,也是很有好处的,用作者的话说,应该也是一种很有用的训练
语言设计者之间最大的分歧在于,有些人认为编程语言应该阻止程序员干蠢事,另一些人则认为程序员应该可以个用编程语言干一切他们想干的事。前者认为程序员 并不都是合格优秀的;而后者认为程序员都是绝顶聪明的,总是正确的。就像内存分配和回收一样,Java与C采用不同的方式,前者是不是存在一个线程,在后 台定时扫描相关的申请的内存是不是不在用了,可能有个标志啥的,没学习过Java纯猜测的,有可能不正确;而C则是你负责申请就要负责释放,有借有还再借 不难。相对其他语言,C语言给人的限制比较少,这个给了硬件,编译器或者程序员很大自由发挥空间。为大家所诟病的"缓冲区溢出攻击"依然继续存在下去,一 种可能是以便让人们时刻保持警惕
"面向对象编程由于增加代码不用考虑其他部分,结果往往导致写出性能不佳甚至有副作用的代码,就好比造房子不考虑已经完成的部分一样" 刚开始学习的是C++,之后很长一段时间比较迷这个,但写计算程序时,大多时候其实只用到带类的C :(,现在工作由于涉及的底层,还是C为主。对于OO,个人观点,这个应该是一种思想不是一种语言,C一样可以面向对象,比如linux kernel里也有OO思想,通俗点将,(类)Unix的一切皆文件也是这个思想的体现.C++也一样可以面向过程。 某些语言允许你以这种风格编程,也可以用另外一种风格;另一些语言则强迫你一定要这样编程,这个限制比较多,有点恶心的说~~
静态类型语言的拥护者认为这样可以防止bug,并帮助编译器生成更快的代码;动态类型语言的拥护者认为前者对程序构成了限制,对于喜爱自由的人当然不喜欢受太多约束的^_^P
"一般来说,条件越苛刻的项目,强大的编程语言就越能发挥作用;而对于条件不苛刻的项目,有没有一个强大的函数库比语言本身的能力更重要
优秀函数库的重要性将超过语言本身。某种语言是静态类型还是动态类型,是面向对象还是函数式编程,这些都不如函数库重要."
某些语言内核设计的并非很好,但却有着无数强大的函数库,可以用来解决特定的问题,比如Perl的CPAN,毕竟我们写程序的目的就是为了解决实际问题的嘛
"编程语言存在一个进化脉络;编程语言的进化与生物学进化还是有区别的,因为不同分支的语言会发生聚合"
比如Python,也是经历过..2.5,2.6,3.0...编程语言也是一个事物,按照辩证唯物论的观点应该是这样,而且在进化过程中还是借鉴吸收了别的语言的优秀的东西的,比如Lambda
"一旦未来硬件的性能大幅提高将会发生什么事:新增加的运算能力都会被糟蹋掉" 可能是OS也可能是应用程序,比如现在的Win7,上次给我妹买了本,z470,装的就是Win7,2G内存不怎么运行程序有时感觉还没有我那低配的 R52的机器跑Linux或者XP来的快(PM1.73G,768M内存)
"效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。浪费程序员的时间而不是机器的时间才是真正的无效率",对于这一点, 就像以前在物理上搞计算的那帮人,程序写的不一定高效,有时也没用动态分配内存,直接开个大数组,只要能保证逻辑上不出问题,慢一点无所谓的
题外话
感觉创新工场就是山寨版的Y Combinator公司(Paul Graham's )
比较搞的是书中所用Bill Gates的照片的一段说明:由于微软不同意授权使用使用它们手中的Bill的照片,从新墨西哥州阿尔伯克基(Albuquerque)市警察局提供了一张Bill年轻时无证或超速驾驶被逮捕后的照片,特意感谢了一番.
阅读(5615) | 评论(0) | 转发(1) |