知其所以然(续)

Posted on

知其所以然(续)

By 刘未鹏 – November 14, 2010

查了一下,上篇知其所以然(以学习算法为例)是08年7月写的,现在已经是10年11月,过去了两年零4个月,这说明了三件事情:1,一个问题其实你可以一直放在脑子里面,利用暗时间对其软泡硬磨,时间足够久你总会有一点新的感悟,问题其实就像那句老话说的那样,不怕贼偷就怕贼惦记,聚精会神的思考一天,也许比不上惦记一个星期(据说数学家庞加莱就特别会惦记问题)。2,事实上,当你感觉懂了的时候,你至少得反问自己一句,真的懂了吗?当你确信自己真的懂了的时候,你至少得讲给别人听,别人听懂了吗?考察你自己是否真懂了的一个很好的依据是,你是否有一种“哦,原来是这样啊,这下再也不可能忘记了”的感觉。3,我其实没有忘记这个博客。如我之前说的,记录只是学习和思考的副作用,只要还在学习和思考,就必然会有新的记录。

5分钟让你明白金融危机爆发原因

Posted on

5分钟让你明白金融危机爆发原因

5分钟让你明白金融危机爆发原因

一。 杠杆。目前,许多投资银行为了赚取暴利,采用20-30倍杠杆操作,假设一个银行A自身资产为30亿,30倍杠杆就是900亿。也就是说,这个银行A以 30亿资产为抵押去借900亿的资金用于投资,假如投资盈利5%,那么A就获得45亿的盈利,相对于A自身资产而言,这是150%的暴利。反过来,假如投 资亏损5%,那么银行A赔光了自己的全部资产还欠15亿。   二。 CDS合同。由于杠杆操作高风险,所以按照正常的规定,银行不运行进行这样的冒险操作。所以就有人想出一个办法,把杠杆投资拿去做“保险”。这种保险就叫 CDS。比如,银行A为了逃避杠杆风险就找到了机构B。机构B可能是另一家银行,也可能是保险公司,诸如此类。A对B说,你帮我的贷款做违约保险怎么样, 我每年付你保险费5千万,连续10年,总共5亿,假如我的投资没有违约,那么这笔保险费你就白拿了,假如违约,你要为我赔偿。A想,如果不违约,我可以赚 45亿,这里面拿出5亿用来做保险,我还能净赚40亿。如果有违约,反正有保险来赔。所以对A而言这是一笔只赚不赔的生意。B是一个精明的人,没有立即答 应A的邀请,而是回去做了一个统计分析,发现违约的情况不到1%。如果做一百家的生意,总计可以拿到500亿的保险金,如果其中一家违约,赔偿额最多不过 50亿,即使两家违约,还能赚400亿。A,B双方都认为这笔买卖对自己有利,因此立即拍板成交,皆大欢喜。   三。 CDS市场。B做了这笔保险生意之后,C在旁边眼红了。C就跑到B那边说,你把这100个CDS卖给我怎么样,每个合同给你2亿,总共200亿。B想,我 的400亿要10年才能拿到,现在一转手就有200亿,而且没有风险,何乐而不为,因此B和C马上就成交了。这样一来,CDS就像股票一样流到了金融市场 之上,可以交易和买卖。实际上C拿到这批CDS之后,并不想等上10年再收取200亿,而是把它挂牌出售,标价220亿;D看到这个产品,算了一 下,400亿减去220亿,还有180亿可赚,这是“原始股”,不算贵,立即买了下来。一转手,C赚了20 亿。从此以后,这些CDS就在市场上反覆的抄,现在CDS的市场总值已经抄到了62万亿美元。    

逃出你的肖申克(五):看不见的牢笼(上)

Posted on

逃出你的肖申克(五):看不见的牢笼(上)

By 刘未鹏 – June 4, 2012

《逃出你的肖申克》系列是从09年1月开始写的,到现在已经三年半了,这个系列几乎是我从03年写博客以来时间跨度最长的一个系列。从08年开始,我就开始大量阅读心理学、认知科学、神经科学方面的书籍,对于我们的思维如何工作,我有着深深的着迷(事实也证明心理学是一个太有趣的学科,例如这个系列最受欢迎的一篇文章《逃出你的肖申克(二):从视觉错觉到偏见》单单在http://mindhacks.cn上就有15万的访问量),虽然不能从事这方面的研究,但另一方面也避开了研究中难免的繁琐技术细节,从局外人的角度纯粹去欣赏也许更为有乐趣,而即便从现实的角度来说,心理学也俨然已成为当下社会的显学(我最爱的科幻作家刘慈欣在《三体》系列中甚至也涉猎到了进化心理学),其实这很容易理解,所谓心理学就是关于人脑如何工作的科学,既然社会是由一个个的人构成,而人的行为很大程度上又由我们的大脑所支配,那么从这个根本上去理解很多问题便非常深入本质,所以在科研方面心理学正在渗透进越来越多关于“人”的科学,形成一个个蓬勃的交叉学科,例如行为经济学(甚至还有叫神经经济学的)、计算神经科学等等,而心理学的现世价值更是无处不在(甚至都被有些书搞的有点恶俗了),例如工作中的问题解决、决策判断、人际关系,家庭中的亲密关系、育儿,个人成长方面更是有无数关于心智成熟的书,国内在近几年引进的国外经典的书籍也呈加速势态(但仍然跟国外市场有严重时滞,有些好书引进到国内居然跨度相差20年)。《逃出你的肖申克》系列就是源于我阅读国外的泛心理学书籍的一个不断积累的读书笔记,其中有我自己的思考,但更多的是对我看过的知识的归纳和贯通,这个系列的文章有一个鲜明的特点,就是其中有无数的外链,因为我觉得能在一篇文章中归纳的东西实在太少,好的文章并不是体现在文章本身,而是体现在它为读者打开的一扇扇窗。

windows

一,知识的诅咒

逃出你的肖申克(三)

Posted on

逃出你的肖申克(三):遇见20万年前的自己

By 刘未鹏 – March 18, 2010

《Synaptic Self》中曾提出一个发人深省的观点:由于人的大脑是经过漫长的进化年代“堆积”起来的,也就是说,从爬行动物到哺乳动物到高级灵长类这些进化阶段,我们的大脑从只有原始的反射模块,到拥有初步的情感区域,一直到神奇的具有6层结构的“新皮质”所支撑的高级认知能力,一步步走来。这个过程并非上帝预先编程架构好的,而更像是在既有结构上“叠床架屋”,比如,大脑从内到外基本上是按照进化年代来排序的,比如啮齿类等一些小型哺乳动物的新皮质是光滑的,这是新皮质在进化出高级灵长类之前的样子,后来为了解决大脑中空间不够的问题,进化之手发明了大脑皮层沟回,通过这些褶皱,在不增加太多占用面积体积的前提下使得大脑皮层表面积暴涨,正是这些褶皱使得灵长类进化出独特的高级认知活动,如工作记忆,语言。这种“堆砌式”的进化有它节省和复用的好处(《Kluge》),然而另一方面也带来了奇特的“进化时滞”效应——进化年代较近的大脑模块和较久远的模块之间要达成完美沟通需要一定的时间,在这之前便会造成多个模块之间面对同一个问题决策不一致的问题。

我们的高级认知模块明明知道有些事情很重要,必须提前准备并持之以恒,然而我们内心的另一个小声音却在万般阻挠我们把屁股从床上挪开或者把眼睛从网页上挪开;我们明明知道赌博,烟酒,犯罪是不对的,然而内心的一个小声音却在喋喋不休地催我们动手去做。我们明明知道高糖高脂肪的食物不宜多吃,但内心的一个小声音却总是怂恿着再吃最后一勺(不禁让人想起《傀儡人生》)。令人感到遗憾的是,很多时候在这个争端中败下阵来的却是代表更先进生产力的高级认知模块,更令人感到遗憾的是,在大多数时候我们的高级认知模块似乎根本就没有启用,而是凭借着本能或直觉“自动驾驶”自己的身体(《Gut Feelings》)。

How to be an Excellent Programmer for Many Years

Posted on

How to be an Excellent Programmer for Many Years

(Excellent==Successful. Money & fame are more difficult to control.)

  1. Choose a small subset of available technology, learn it intimately, and embrace it. Then evolve that subset.

  2. Understand the pros and cons of various data structures, both in memory and on disk.

  3. Understand the pros and cons of various algorithms.

  4. Understand your domain. Get away from your computer and do what your users do.

  5. Be ready, willing, & able to deep dive multiple levels at any time. You must know what's going on under the hood. There is a strong correlation between "number of levels of deepness understood" and "programming prowess".

  6. Use your imagination. Always be asking, "Is there a better way?" Think outside the quadralateral. The best solution may be one that's never been taken.

  7. Good programmer: I optimize code. Better programmer: I structure data. Best programmer: What's the difference?

  8. Structure your data properly. Any shortcomings there will cause endless techincal debt in your code.

  9. Name things properly. Use "Verb-Adjective-Noun" for routines and functions. Variables should be long enough, short enough, and meaningful. If another programmer cannot understand your code, you haven't made it clear enough. In most cases, coding for the next programmer is more important than coding for the environment.

  10. Decouple analysis from programming. They are not the same thing, require different personal resources, and should be done at different times and places. If you do both at the same time, you do neither well. (I like to conduct analysis without technology at the end of the day and start the next morning programming.)

  11. Never use early exits. Never deploy the same code twice. Never name a variable a subset of another variable. You may not understand these rules and you may even want to debate them. But once you start doing them, it will force you to properly structure your code. These things are all crutches whose use causes junior programmers to remain junior.

  12. Learn how to benchmark. Amazing what else you'll learn.

  13. Learn the difference between a detail (doesn't really make that much difference) and an issue (can end the world). Focus only on issues.

  14. Engage your user/customer/managers. Help them identify their "what". Their "how" is not nearly as important.

  15. Write a framework, whether you ever plan to use it or not. You'll learn things you'll never learn any other way.

  16. Teach others what you know, either in person or in writing. You'll accidently end up teaching yourself, too.

  17. Always tell your customer/user "yes", even if you're not sure. 90% of the time, you'll find a way to do it. 10% of the time, you'll go back and apologize. Small price to pay for major personal growth.

  18. Find someone else's code that does amazing things but is unintelligible. Refactor it. Then throw it away and promise yourself to never make the same mistakes they made. (You'll find plenty.)

  19. Data always > theory or opinions. Learn the data by building stuff.

  20. At some point, run your own business (service or product). You will learn things about programming that you'll never learn as an employee.

  21. If you don't love your job, find another one. 来源: [https://news.ycombinator.com/item?id=4626515](https://news.ycombinator.com/item?id=4626515) 译文:

程序员如何保持优秀

  1. 小范围的选择一些有用技术,透彻的学习它们,拥抱它们。然后不断的扩展这个范围。

  2. 理解各种数据结构的优点和缺点,包括它们在内存中和在硬盘上的各自表现。

  3. 理解各种算法的优点和缺点。

  4. 了解你的工作领域。关上电脑,去做你的用户们在做的事。

  5. 有准备,有愿望,有能力在任何时候投入到多种技术层面中。你必须知道表象下的技术原理。在“各个技术层面的掌握程度”和“编程能力”上有着密切的联系。

  6. 发挥你的想象力。永远都要问,“有更好的方法吗?”跳出常规思维约束。最好的解决方案也许还没有被发现。

  7. 优秀程序员:我优化代码。更优秀程序员:我设计数据。最优秀程序员:他们的不同之处是什么?

  8. 正确的构造你的数据。任何的缺陷都将造成你的代码里无尽的技术债务。

  9. 正确的命名事物。使用“动词-形容词-名词”格式来命名程序和函数。变量名要足够长,尽量短,有意义。如果其他程序员不能够理解你的代码,说明你写的不够清楚。在大多数情况下,针对下一个程序员而编码要比针对环境而编码重要的多。

  10. 把分析和编程分离开做。它们不是同类的事物,需要不同类型的劳力资源,需要在完全不同的时间和地点分开做。如果同时做它们,你一样都做不好。(我喜欢在一天的末尾做不涉及技术的分析,而在第二天早上进行编程。)

  11. 永远不要图省事走近道。永远不要把相同的代码部署两次。永远不要把一个变量命名成另一个变量名的一部分。也许你不明白这些规则,也许你要辩解。但如果你是遵守着这样做的,这些规则就会约束你正确的构造你的程序。图省事的做法是让那些低等级的程序员永远停留在低等级的原因。

  12. 学习如何测评程序性能。你会惊奇的发现从中能学到很多之外的知识。

  13. 学会区别对待问题细节和问题后果。问题细节不会导致太大的差别,而问题后果能导致世界灭亡。只关注后果。

  14. 密切关注你的用户/客户/管理人员。帮助他们认清楚他们的“what”,这比帮助他们明白他们的“how”要重要的多。

  15. 写一个框架,不论你是否打算用它。你将从中学到从其它途径中学不到的东西。

  16. 把你知道的东西教给他人——通过口口交流或通过写作。最终这将成为教育自己的机会。

  17. 永远要对你的客户/用户说“Yes”,即使在你不确定的情况下。90%的情况下,你会最终找到方法实现它。10%的机会,你将会去向他们道歉。这是重要的个人成长中付出的一点小代价。

  18. 寻找别人的做出神奇的事情但却一滩糊涂的代码。重构它。然后丢掉它,并发誓自己永远不要犯他们犯下的相同错误。(这样的程序你会发现很多。)

  19. 数据永远 > 理论或观点。通过开发东西来学习数据。

  20. 有可能的话,开创自己的业务(服务或产品)。你将从中学到很多你做雇员永远学不到的关于编程的知识。

[英文原文:How to be an Excellent Programmer for Many Years ]

来源: [http://www.aqee.net/how-to-be-an-excellent-programmer-for-many-years/](http://www.aqee.net/how-to-be-an-excellent-programmer-for-many-years/)