王垠这个人,从他的博文来看,是真正的特立独行,有自己的思想的,更重要的是,我很喜欢这种人,说不清为什么。。。(详细还是百度好些)
写点这个,是因为平时看的各种文章一看即过,自己没有意识,更谈不上思考。所以,利用下这点小小的时间,试验一段时间,亦或者纯粹是为了自己好玩,就是这样。
《DRY原则的误区》
突然发现博客更新了两篇,立马看了,对这篇文章比较感兴趣,先写点。
一、感慨!第一次接触DRY原则是研一时实习的一个敏捷项目。在一次迭代回顾会上从QA口中听到了这句“ Don't repeat yourself ”,瞬间一种高大上的感觉有木有,于是立马就喜欢上了这句话,还因此改了一年的企鹅签名...想想工作至今近一年,依然还是怀念当时的情景氛围...
二、抽象的时机,“我会等到事实证明重用一定会带来好处的时候,才会开始提取模板,进行抽象。经验告诉我,每一次积极地寻找抽象,最后的结果都是制造一些不必要的模板,搞得自己的代码自己都看不懂。” 很朴实的一句话!联系到自己,真的有时候片面追求代码的美观、或者抽象(?目前还达不到这个程度,但有这个意思),本来一笔下来,自然流畅的代码,最终都自己给自己挖了坑,下了套!记住这句,“如果你不能写出“可用”(usable)的代码,又何谈“可重用”(reusable)的代码呢?”
三、防止过早抽象的方法,先“可用”,再“可重用”,避免没有实际效果的抽象。
四、文章结尾的一句话,非常喜欢。“世界上有比这些喜欢提出‘原则’的软件工程专家深邃很多的人,他们懂得真正根本的原理。” 自认为,不管我们承认不承认,我们大部分人每天的工作其实真的非常肤浅,并且最罪恶的是我们并不自知!这里肤浅这个词并不表示贬义,而是“不自知”实在让我很不舒服,不多说!毕竟,这个世界上真正懂得本质原理,并且在做着创造性事情的人只占少数。也因为意识到这一点,我更深刻理解山外山,人外人,从而保持谦谨的道理。
-- 6.17
《什么是启发》
一、“在你的头脑里随时准备好12个问题。每当发生一件有趣的事情,就检查一下其中是否有问题可以由此获得线索。久而久之,人们就会称你为天才。” -- by Richard Feynman
二、为什么这种题材也需要写进博文呢?我突然意识到,是否王垠本人在工作(亦或生活)中并不是过的那么顺利?不然,即便说一句“你启发了我”,然后让人觉得高我一筹又如何?反正最终结果是人家帮助“我”解决了问题,这就是重要的。其他的,随便?
-- 4.25
《爱因斯坦谈教育》
一、“教一个人专业知识是不够的。通过专业知识,他可以变成一个有用的机器,但却不具有和谐的人格。”
二、“独立的,批判性的思维,必须从小培养。过度的,过于多样化的科目(分数制度)会破坏这种思维的发展。”
三、“教育应该是这样:被传授的知识应该被当成宝贵的礼物,而不是沉重的任务。”
-- 4.10
-- 4.9
《编程的宗派》
函数式编程,听着就很高大上。。虽然我不太懂,但我感觉就是在玩概念,跟面向对象编程一丘之貉。。
一,“在我的心目中其实只有一个概念,它叫做“编程”(programming)” -- 霸气测漏,喜欢
二,“编程最重要的事情,其实是让写出来的符号,能够简单地对实际或者想象出来的“世界”进行建模。” -- 大道至简。
三,对象思想,就是对数据访问的抽象。它的价值在于改变语义,却不需要修改代码。
四,对象思想与量子力学的“不可观测性”。
-- 4.5
《谈“测试驱动开发”》
大概去年九十月份接触TDD(Test-Driven Developmen),这种开发方式确实有效果,但是只适合团队工程项目,个人的话看下面两点。。
一,“测试的构建,应该是在程序主体已经成形的情况下才能进行。如果程序属于创造性的设计,主体并未成形,过早的加入测试反而会大幅度的降低开发效率。”非常有道理!很赞同!盲目的构建测试用例费力不讨好!
二,对于测试的副作用,盲目依赖。个人倒是认为写完代码就跑测例不是依赖而是一种正确偷懒的方式。以我个人为例,写代码之前我肯定就自己脑子里逻辑验证,但我不能保证我逻辑想的跟我手动输入的代码完全保持一致,所以,对于我个人来说,写完代码再自己逻辑验证,简直是要命!
另外,盲目依赖似乎也是个伪命题。依赖就是偷懒,盲目依赖就是盲目偷懒。那我随便增加或修改代码,跑测例跑一次失败一次,失败又得自己找原因,这个过程不更费精力和时间?简直得不偿失啊!
三,关于代码“覆盖”的问题。“覆盖只是说你的代码被测试碰到过了,可是它在什么条件下碰到的却没法判断。”,测试用例不就是不断增量补充的啊?
四,测试驱动开发,所以重点在开发阶段。开发阶段只能尽量保证正确性,不能要求所有场景都能覆盖,完整的测试必然还是需要专门级的测试咯。
五,“美的程序不可能从修修补补中来。它必须完美的把握住事物的本质,否则就会有许许多多无法修补的特例。” 赞同!
-- 4.3《谈程序的“通用性”》
这不就是我关于之前《解密“设计模式”》中简评的核心思想么?...
一、谨防“过度工程”,代码需要实际被“重用”的地方要比想象中用到的少。
二、“考虑”到了通用性,并不等于实际“把握”住了通用性。因为,“能够准确的预测将来的需要,能够从代码中抽象出真正通用的框架,是一件非常困难的事情。它不止需要有编程的能力,而且需要对真实世界里的事物有强大的观察能力。”
三、程序初期设计过程中,过早的考虑到将来,并由此带来的多余的复杂性,有可能出现问题,导致无法设计出优雅的程序,效果适得其反。
四、结论,“在设计程序的时候,我们最好是先把手上的问题解决好。如果发现这段代码还可以被用在很多别的地方,到时候再把框架从中抽象出来也不迟。”
-- 4.2“看微信朋友圈有一个好处就是,它可以让你清楚地看透一个人的内心和价值观。人总是会宣传符合自己价值观的内容。”
-- 3.26《程序语言与……》
与微波炉:
单一职责不逾矩,一类事物一类功能,同样,一种程序语言设计对应一类软件开发。与减肥:
一,减肥真理,让每天摄入的热量比消耗的少一些,跟《富爸爸穷爸爸》的理念如出一辙,追求财富自由,不过就是每天的收入比支出多一些…
二,编程跟减肥,不是看看编程宝典跟吃吃减肥灵药,需要付出,世上没有简单的事情,也更没有尤其艰难的事情,一切只取决于自己的思想觉悟深浅。
与棋:
一,可以了解下国际象棋、围棋规则。
二,什么是简单?直接,屈指可数但组合起来又有足够变化。这一条个人认为也是普世的准则。与音乐:
“我知道这些话说了也白说,因为他们没有用过我用过的语言,他们只看到名字却感觉不到本质,他们靠别人的评价来判断,而不是靠自己的心。所以像音乐一样,只有等有一天他们忽然觉悟,就像很多年前的我一样。”
不能说啥,还是境界问题…
与AK47
一,“程序员的武器应该像士兵的武器一样,方便他们找到问题…”
从这个角度说,C指针问题确实是坑爹,费了半天劲,不是在解决原问题。还有那么多人因为熟悉指针而自豪,显得自己牛逼…可是指针的优势怎么解释,存在即合理呀?这个正反面问题咋看待?
二,“AK 的美,在于它身上没有部件具有不必要的精确性。”
三,“Kalashnikov 不是天才,他不是为了发明而发明,他解决不了问题的时候就高兴地从别人那里学过来。”《不要做聪明人》
一,这个世界需要可爱的人。
二,不管是否有意,对比自身,我发现自己现在正慢慢变得孤僻,也一直在与“优秀人”比较,追求所谓“优秀”…我似乎已经走在成为傻B的康庄大道上,简直荣幸…需要反思哪个环节出了问题。
(再次查看,一直在与“优秀人”比,跟上篇评论不跟王垠比自相矛盾,说明潜意识里我就是在意这个的,只不过我潜在认为比不上他,所以不比,而跟自己身边看得到的人却还是在比较,所以归根结底我还是一个追求“做聪明”的人!)《我为什么不开发Yin语言》
一,如果只单单读这篇文章,两个字,自大!
二,真的是特立独行,敢说真话。这点之前也从各方面稍有了解,凭自己的直觉,我相信他有自己所说的实力。
三,开源精神扯淡说。开源越流行,成分越复杂,所谓林子大了鸟多。。从结果导向来说,开源的结果确实是成就了一批人的名气,但不否认我们这些人确实也看到了很多自认为优秀的代码。毕竟,境界不同。
四,工作生活需要平衡,享受生活。观点从来相同,但实践却未达到他的高度,我不去跟他比,跟每一天的自己比。
《解密“设计模式”》
一,设计模式只是经验积累,不是教条,需要了解,不能硬搬。
二,个人认为提出设计模式的初衷是为了使代码更加稳定,健壮,便于扩展,拥抱变化。这就注定了使用了设计模式的代码是个大而全的东西,而大而全的东西必然导致多出“绕弯”的地方,这是避免不了的。所以,代码写的短而精巧没有错,大而周到也没有错,关键是要清楚写代码的初衷。如果是系统化,平台化的工程,考虑周全,使用设计模式无可厚非。