Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<<importTiddlers>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
Aaron Liu's Wiki
Type the text for 'Aaron Liu'
<<options>>
!!!1, Arel做什么?
Arel是ActiveRecord中的一个组件,他的主要作用是将Rails代码通过DSL生成SQL语句.
[[源码地址|http://github.com/rails/arel]]

官方介绍是这样说的:
Arel is a SQL AST manager for Ruby. It

1. Simplifies the generation of complex SQL queries
2. Adapts to various RDBMS systems

!!!2, Arel原理是什么?
整个Arel的作用大家应该都知道了,那么它的原理是什么呢?就是将Rails的query代码转化为AST(不了解AST的可以上维基百科进行查询),最后遍历并拼接为一段SQL语句.分为以下几步.:
1. 将Rails的query语句解释为一个AST.
2. 将AST的每个node翻译为SQL语句.
3. 遍历SQL语句,拼接为SQL字符串.

!!!3, Arel和ActiveRecord的关系是什么?
ActiveRecord将查询代码交给Arel,然后由Arel转化为SQL语句,再将SQL语句交由ActiveRecord去进行数据库查询.
[[有关创业的一些资料(zz)]]

[[雕爷:创业公司如何管理员工(zz)]]
[[Study Resources]]
[[Ruby and Rails]]
[[Thinking and study]]
[[一些经济方面的参考资料]](zz)

[[给股票投机新手的读书建议]](zz)
 
[[我所知道的金融数据库]](zz)
   
[[经济学入门书籍推荐]](zz)

[[投资者进阶分级阅读书单]](zz)
 
[[金融学教科书目录推荐]](zz)

[[i美股:美国另一位94岁股神的投资思想作者:理想便宜]](zz)
 
[[(转)查理芒格资料整理]](zz)

[[艾智仁大学经济学&经济学原理【经济学入门第一神贴,...]](zz)
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
*[[标题]]
*[[文字格式]]
*[[等宽文字]]
*[[引言区块]]
*[[列表]]
*[[表格]]
*[[水平线]]
*[[外部连接]]
*[[显示图片]]
How update gems in ruby project?

1) Do not use “bundle update" update all gems in one command, because you don’t know which updating wrong if project appear bug.

2) Use “bundle outdated" command will display all outdated gems.

3) Use “bundle update Gem_name" command update one gem and check change log of the gem. After you do it, you need run automatic test or manual test features of gem in your project.

4) You need run “git commit" once you updated one gem, so it will help you positioning bugs by every updating. (the git is a version controller system.) if updating have conflict with your gem, fix it and use git commit it.

5) Updating all gems step by step .
摘自 http://kenbeit.com/blog/2012/03/25/javascript-note/

!!!数据类型和内存分配
1.基本数据类型,Undefined,Null,Number,String,Boolean,存放在栈中。
2.符合数据类型,Object,Function,Array,自定义对象,存放在堆中,栈中存放的是指针,指向堆中的对象。

例:
{{{
var name = "kenshin";
var user = new User();
}}}

“kenshin”直接存在栈中,name指向它。user存在栈中,它指向堆中的new User()。
基本数据类型和其包装类型
来看看String,Number,Boolean这3个数据类型。

{{{
var primitive = 1;
var box = new Number(1);
primitive instanceof Number // => false
primitive instanceof Object // => false
box instanceof Number // => true
typeof primitive // => "number"
typeof box // => "object"
}}}

直接用字面量定义值,返回的结果直接是基本类型,不是自己的包装类型的实例,也不是Object类型。

不通过new关键字,直接像调用方法一样调用Number,String,Boolean,功能是将包装类型转换为基本类型。

以下都会返回基本数据类型的1

{{{
var num1 = Number(1);
var num2 = Number(new Number(1))
}}}

''对于基本类型,不要用其包装类型来创建对象,直接用字面量定义,用typeof而不是instanceof来判断是何种类型。''
!!!== 和 ===
ECMAScript对于==的处理顺序很复杂。有10条大规则,在比较 x == y时,当typeof(x)等于typeof(y)时,还有6个细分规则,当typeof(x)是Number时,还有更细的6条规则,所以不一一列举。有兴趣可以看[[Ecma-262.pdf|http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf]]中的11.9.3小节。

这里主要列举些常用的但是不容易注意到的情况:

以下全部为true

{{{
1 == "1"
1 == true
0 == false
undefined == null
1 == new Number(1)
"a" == new String("a")
}}}

以下例外,返回的false
{{{
new String("a") == new String("a")
}}}

===被称为全等操作符,ECMAScript中有7条大规则,当typeof(x)是Number时有6条细规则。但是它其实比==好理解,它把类型判断放在了第一位,即只要typeof(x)不等于typeof(y),就返回false。有兴趣可以看Ecma-262.pdf中的11.9.6小节。

''所以除非你明确需要==的功能,否则你都更应该用===来做条件判断。''


!!!3. 理解undefined和null
{{{
undefined是Undefined类的唯一值
null是Null类的唯一值
undefined == null // => true
undefined === null // => false
typeof(undefined) // => “undefined”
typeof(null) // => “Object”
null可以和其他对象进行计算
null + 1 // => 1
null + “abc” // => “nullabc”
null + true // => 1
null + null // => 0
null + new Object() // => “null[object Object]”
}}}
''虽然null可以和其他对象进行计算,但编程中应该避免这样的编码。''

!!!4. 闭包
简单地说,''一个函数持有了原本在外部函数作用域内的局部变量的引用。''

最简单的例子:
{{{
function sayHello(name){
  var local = "Hello, " + name;
  return function(){console.log(local);}
}

sayHello("kenshin")(); // => Hello, kenshin
}}}

来看以下代码

{{{
var funcs = [];
function foo(data){
  for (var i = 0; i < data.length; i += 1) {
    funcs.push(function(){return "Num " + data[i];});
  }
}


function bar(){
  foo([1,2,3,4,5]);
  for (var i = 0; i < funcs.length; i += 1) {
    console.log(funcs[i]());
  }
}

bar();
}}}
在foo函数内有局部变量data和i,循环体创建了10个匿名函数,闭包了data和i,在循环体执行完后,i最后会变成5,由于匿名函数闭包了i,所以在bar中执行匿名函数是其实执行的都是return "Num" + data[5];, data[5]超出了数组范围,所以结果是Num undefined。

闭包本身不难,但是一不注意,就会发生意想不到的结果。

以上代码改成这样,又会输出什么结果?

{{{
var funcs = [];
function foo(data){
  for (var i = 0; i < data.length; i += 1) {
    funcs.push(function(){return "Num " + data[i];});
  }
  i = 0;
}


function bar(){
  foo([1,2,3,4,5]);
  for (var i = 0; i < funcs.length; i += 1) {
    console.log(funcs[i]());
  }
}

bar();
}}}
前面过程是一样的,在最后i被赋值0,所以匿名函数中执行的都是return Num + data[0];, 结果就是Num 1了。

那怎么改代码才能让我得到想要的结果输出Num 1, Num 2, Num 3, Num 4, Num 5这种结果?
{{{
var funcs = [];
function foo(data){
  for (var i = 0; i < data.length; i += 1) {
    funcs.push((function(num){
      return function(){
        return "Num " + num;
      };
    })(data[i]));
  }
}


function bar(){
  foo([1,2,3,4,5]);
  for (var i = 0; i < funcs.length; i += 1) {
    console.log(funcs[i]());
  }
}

bar();
}}}
首先有一点要说明,js中方法的参数传递都是值传递,和ruby一样,上面的写法主要利用的就是这一点。
{{{
(function(num){
  //...
})(data[i]);
}}}
定义了一级匿名函数(a1),同时执行a1,将data[i]作参数传给a1,由于参数都是值传递,所以a1的形参num在内存中是另外分配的地址,在将传来的data[i],放到num里。

{{{
return function(){
  return "Num " + num;
};
}}}
在a1中返回同时创建匿名函数(a2),a2的函数内部闭包了a1的局部变量num,所以a2中的num和a1中的num是同一块内存区域。

{{{
funcs.push(…)
}}}
由于a1是立即执行的,所以a2被返回同时push到了funcs的数组中。

在来看个jquery中经常会写到的,由于this引起的闭包问题:

{{{
$('#foo').click(function(){
  $.get('/bar', function(data){
    $(this).append(data);
  });
});
}}}
本办法的原本意义是当点击了foo以后,异步请求/bar,将返回结果添加到自己的后面。但是像上面这样写是错误的,因为在callback这个匿名函数中的this,已经不是foo了。该调用可以理解是jquery发起的回调。this是一个jquery的内部对象。

如何解决?使用闭包!

{{{
$('#foo').click(function(){
  var _this = this;
  $.get('/bar', function(data){
    $(_this).append(data);
  });
});
}}}
''彻底理解原型链 (prototype chain)''
在 ECMAScript 中,每个由构造器创建的对象拥有一个指向构造器 prototype 属性值的 隐式引用(implicit reference),这个引用称之为 原型(prototype)。进一步,每个原型可以拥有指向自己原型的 隐式引用(即该原型的原型),如此下去,这就是所谓的 原型链(prototype chain) (参考资源)。在具体的语言实现中,每个对象都有一个 __proto__ 属性来实现对原型的 隐式引用。程序清单 4说明了这一点。

!!!清单 4. 对象的 {{{__proto__}}} 属性和隐式引用
{{{
 function Person( name ) { 
    this.name = name; 
 } 
 var p = new Person(); 
 // 对象的隐式引用指向了构造器的 prototype 属性,所以此处打印 true 
 console.log( p.__proto__ === Person.prototype ); 

 // 原型本身是一个 Object 对象,所以他的隐式引用指向了
 // Object 构造器的 prototype 属性 , 故而打印 true 
 console.log( Person.prototype.__proto__ === Object.prototype ); 

 // 构造器 Person 本身是一个函数对象,所以此处打印 true 
 console.log( Person.__proto__ === Function.prototype ); 
}}}

有了 原型链,便可以定义一种所谓的 属性隐藏机制,并通过这种机制实现继承。ECMAScript 规定,当要给某个对象的属性赋值时,解释器会查找该对象原型链中第一个含有该属性的对象(注:原型本身就是一个对象,那么原型链即为一组对象的链。对象的原型链中的第一个对象是该对象本身)进行赋值。反之,如果要获取某个对象属性的值,解释器自然是返回该对象原型链中首先具有该属性的对象属性值。图 1说名了这中隐藏机制:

''图 1. 原型链中的属性隐藏机制''
[img[image001.png|http://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/image001.png]]
参考:http://www.ibm.com/developerworks/cn/web/wa-javascriptstart2/


JavaScript 提供几种函数可以使您控制并设置某些动作的时间控制。最常用的函数是:
#setInterval
#clearInterval
#setTimeout
#clearTimeout

!!!setInterval 函数
不断地执行某个function:
{{{
 setInterval(myFunction, 10000, 'sample'); 
 function myFunction(myArg) 
 { 
   alert('myFunction argument value: '+ myArg); 
 } 
//每过10000毫秒就执行一次myFunction
}}}

!!!clearInterval 函数
用于中止setInterval 函数
{{{
 function myFunction(myArg) 
 { 
   alert('myFunction argument value: '+ myArg); 
   clearInterval(myInterval); 
 } 
var myInterval = setInterval(myFunction, 10000, 'sample'); 
//执行一次myFunction后停止执行。
}}}

!!!setTimeout 函数
用于延迟某个函数的执行时间
{{{

 setTimeout(myFunction, 10000, 'sample'); 
 function myFunction(myArg) 
 { 
   alert('myFunction argument value: '+ myArg); 
 } 
//10000毫秒后执行MyFunction
}}}

!!!clearTimeout函数
用于中止setTimeout
{{{
var myTimeout = setTimeout(myFunction, 2000, 'sample');
clearTimeout(myTimeout);
//什么都没执行
}}}
[[Javascript 系列笔记(zz)|http://kenbeit.com/blog/2012/03/25/javascript-note/]]

[[非常全的JavaScript语言机制参考|http://dmitrysoshnikov.com/]]
 
[[理解JavaScript对象]] 
 
[[JavaScript原型链]]

[[JavaScript中的数据类型,内存分配,==和===,undefined和null,闭包]]

[[JavaScript时间控制]]
 
[[梦旅人]]
 
[[昙华林]]
[[Unix Toolbox|http://cb.vu/unixtoolbox.xhtml]]
!!!IT
[[Unix & Linux]]
[[Ruby and Rails]]
[[Javascript]]
[[Lisp]]
[[Programing paradigm]]
[[Thinking and study]]

!!!Others
[[Study Resources]]
[[Finance]]
[[Business]]
[[Psychology]]
[[Math]]
[[Novels]]
[[Photos]]
[[Draw]]
[[Life]]
 
!!!Settings
[[Grammar]]
[[MainMenu]]
[[SiteTitle]]
[[SiteSubtitle]]
[[DefaultTiddlers]]
[[自学心得(zz我一个非数学的学长写的)]]
 
[[旗手与旅人]]
 
[[从《西游降魔篇》谈剧作要素]]
 
[[对小说写作的一些迷思(一),微观与宏观]]

[[对小说写作的一些迷思(二),四步骤]]
 
[[编剧桥段wiki|http://tvtropes.org/pmwiki/pmwiki.php/Main/HomePage]]
Note:some codes are sourced by《Refactoring(Ruby Edition)》

In a static language,design pattern can decouple or put off conditional logic(if,else,switch,case……).So let us look at what ruby do that only use polymorphism

<html>
<pre>
class Rental
  def charge
      result = 0
      case movie.price_code
      when Movie::REGULAR
          result += 2
          result += (days_rented -2) * 1.5 if     days_rented > 2
      when Movie::New_RELEASE
          result += days_rented * 3
      when Movie::CHILDRENS
          result += 1.5
          result += (days_rented - 3) * 1.5 if days_rented > 3
      end
      result
  end
end
#You can look at the "charge" method should belongs to Movie class.And Movie class inhert Rental class:

class Movie
  def charge
      result = 0
      case movie.price_code
      when Movie::REGULAR
          result += 2
          result += (days_rented -2) * 1.5 if days_rented > 2
      when Movie::New_RELEASE
          result += days_rented * 3
      when Movie::CHILDRENS
          result += 1.5
          result += (days_rented - 3) * 1.5 if days_rented > 3
      end
      result
  end
end
</pre>
</html>
[[类型的本质和函数式实现(zz)]]
 
[[The 100+ most followed psychologists and neuroscientists on Twitter ]]
[[Ruby中的几则调试小技巧]]

[[Arel(ActiveRecord核心组件)源码学习笔记]]

[[Ruby解释器学习笔记]]
 
[[How update gems in ruby project ?]]
 
[[在rails中创建嵌套表单(nested form)]]
 
[[ruby中class_eval和instance_eval的区别]]
 
[[Ruby里yeild和block的用法]]

[[浅析Ruby里的几个动态方法(一),send方法]]

[[浅析Ruby里的几个动态方法(二),method_missing方法]]
 
[[Ruby中Proc和lambda的区别]]
 
[[Polymorphism and Duck Type in Ruby]]
Proc和lambda有两个区别,一个是return的作用范围,另一个是参数的处理方式。我们来用几个例子解释一下:

<html>
<pre>
def foo
  f = Proc.new{|a,b| return [a,b]}
  puts f.call(1)
  return "I'm not display"
end

def bar
  b = lambda{|a,b| return [a,b] }
  puts b.call(1,2)
  return "I will display"
end

foo
# =&gt; [1, nil]
bar
# 1 
# 2
#=&gt; "I will display" 
</pre>
</html>
参数处理
我们可以看到,假设Proc和lambda两者都定义了2个参数,但在实际调用时,只传一个的话,lambda 会报错,Proc 将缺失的参数设为 nil,然后正常调用。 f.call(1)时,得到的是[1,nil] 而b.call(1)时,则会报错:ArgumentError: wrong number of arguments (1 for 2)

return范围
在一个方法内使用Proc/lambda时,在bar方法中,如果Proc内包含了return,则执行到Proc内的return就不再往下执行。换言之,proc的return是作用于整个方法的。 而在bar方法中,lambda的return将不会影响方法的继续执行,lambda的return仅仅作用于代码块的内部。
''先进入ruby console''
!!!方法调试
1,methods grep
 查询某个方法是否存在
{{{
#查询'test'方法或者包含test字符的方法是否存在
> User.methods.grep(/test/)
}}}
methods用于列出对象所有的方法,grep则是从所有方法中过滤出程序员想查询的方法
与methods类似的方法还有:
singleton_methods, protected_methods, private_methods, public_methods

2, method source_location
 查询某个方法的详细信息.
{{{
> User.method(:where).source_location
#=>["/home/liush/.rvm/gems/ruby-2.0.0-p195/gems/activerecord-3.2.13/lib/active_record/querying.rb", 8]
}}}
 如果你是使用的pry作为console,可以直接使用"show-method"或"show-source",我猜测它是调用的Ruby中的method方法:
{{{
> show-method Refinery::User.where
#=>From: /home/liush/.rvm/gems/ruby-2.0.0-p195/gems/activerecord-3.2.13/lib/active_record/querying.rb @ line 8:
#Owner: ActiveRecord::Querying
#Visibility: public
#Number of lines: 1
#
#delegate :find_each, :find_in_batches, :to => :scoped
}}}

3, reload-method, reload-code

!!!变量调试
local_variables, instance_variables

!!!类调试
1, ancestors
2, ls cd gem-cd 

3, show-models
这个方法只有在pry的rails console下才可以使用,irb下不可使用
{{{
> show-models
}}}
用于查看该文件目录下所有被定义的非rails的class及其属性,意思就是说显示所有的class,但不包含rails和gem本身的class.一般用于查看数据表对应的ORM类和表之间的关系.
前置知识:
常用编译器/解释器开发工具:Lex,Yacc,Bison

1,Yacc,和是Unix/Linux上一个用来生成编译器的编译器,是一个parser(语法解析器)。

2,GNU bison是一个parser generator,维基百科解释:
     GNU bison, commonly known as Bison, is a parser generator that is part of the GNU Project. Bison reads a specification of a context-free language, warns about any parsing ambiguities, and generates a parser (either in C, C++, or Java) which reads sequences of tokens and decides whether the sequence conforms to the syntax specified by the grammar. Bison by default generates LALR parsers but can also create GLR parsers.[2]
     In POSIX mode, Bison is compatible with yacc, but also supports several improvements over this earlier program. flex, an automatic lexical analyser, is often used with Bison, to tokenise input data and provide Bison with tokens。Bison, Yacc and other parser generators require you to express your grammar rulesusing “Backus–Naur Form” (BNF) notation(巴科斯范式表示法。它能表示一部分自然语言的语法,它还是更广泛地使用于程序设计语言、指令集、通信协议的语法表示中).
      巴科斯范式拓展阅读:http://en.wikipedia.org/wiki/Backus_Normal_Form ftp://ftp.rfc-editor.org/in-notes/rfc4234.txt

3,Lex is a computer program that generates lexical analyzers ("scanners" or "lexers").Lex通常用于Tokenization。
 
     不过Ruby没有使用Lex,而是手写了一个词法分析器。因为Lex并不支持某些Ruby的tokenization规则。同时,Ruby uses an LALR parser generator called Bison. The most widely used and well known parser generator is called Yacc (“Yet Another Compiler Compiler”), but Ruby instead uses a newer version of Yacc called Bison, part of the GNU project.
Section 1:Tokenization, Parsing and Compilation

     First, Ruby tokenizes your code. During this first step, Ruby reads the text characters in your code file and converts them into tokens. Think of tokens as the words that are used in the Ruby language. In the next step, Ruby parses these tokens; “parsing” means to group the tokens into meaningful Ruby statements. This is analogous to grouping words into sentences. Finally, Ruby compiles these statements or sentences into low level instructions that Ruby can execute later using a virtual machine.

     1)What is Tokenize(符号化)
          Tokens are the words that make up the Ruby language.
          符号化就是给代码赋予意义,符号化之前,代码就是个单纯的字符串,是没什么意义的,但符号化之后,代码被分为了一个个词,每个词都有它的类型。所以符号化分为三步:1)给一个.rb文件分行,2)给每行代码分词,3)给词分类。

     2)Tokenize and Parsing
          As a simplification I’m describing tokenization as an independent process; in fact, the parsing engine I describe in the next section calls this C tokenize code whenever it needs a new token. Tokenization and parsing are two separate processes that actually happen at the same time.
 
         动态语言的特征也许就是:Tokenization and parsing are two separate processes that actually happen at the same time.(不确定)
 
     3)Ruby中的几类常见Token
          句号:. (Period)
          竖杠:|
          tInterger,整数,比如10
          tIDENTIFIER,标识符,usually they refer to variable, method or class names.比如"times"
          keyword_do,保留字,比如do
          
     4)Tokenization源代码:
          https://github.com/ruby/ruby/blob/trunk/parse.y (Yacc Bison文件)第754行:
          %token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL 
    %token <node> tINTEGER tFLOAT tSTRING_CONTENT tCHAR
    %token <node> tNTH_REF tBACK_REF 
     %token <num> tREGEXP_END

          6852 line:parser_yylex,This complex C function contains the code that does the actual work of tokenizing your code.  
          6885 line :retry
          https://github.com/ruby/ruby/blob/trunk/defs/keywords 文件:保留字
          https://github.com/ruby/ruby/blob/trunk/defs/lex.c.src :#define rb_reserved_word(str, len) reserved_word(str, len)

          Experiment 1-1: Using Ripper to tokenize different Ruby scripts

                the Ripper class allows you to call the same tokenize and parse code that Ruby itself uses to process the text from code files.
                我的代码地址:https://github.com/WhiteCrow/learn_ruby_internals/blob/master/lex1.rb https://github.com/WhiteCrow/learn_ruby_internals/blob/master/lex3.rb
                Finally, notice that Ripper has no idea whether the code you give it is valid Ruby or not. If I pass in code that contains a syntax error, Ripper will just tokenize it as usual and not complain. It’s the parser's job to check syntax, which I’ll get to in the next section.
 
          1.2 Parsing: how Ruby understands the code you write
                Now that Ruby has converted your code into a series of tokens, what does it do next? the next step on your code’s journey through Ruby is called “parsing,” which is the process for grouping the words or tokens into sentences or phrases that make sense to Ruby.           
                The parse.y file is really the heart and soul of Ruby – it is where the language itself is actually defined!

 
                Using the Bison/Yacc grammar rule syntax – the “Backus–Naur” notation – I can write a simple grammar rule like this with the rule name on the left, and the matching tokens on the right:
                LALR parser 如何工作,它为什么被称之为LALR parser?

                    “Look Ahead LR parser.” We’ll get to the “Look Ahead” part in a minute, but let’s start with “LR:”
                    • “L” (left) means the parser moves from left to right while processing the token stream; in my example this would be: le, gusta, el, ruby.
                    • “R” (reversed rightmost derivation) means the parser uses a bottom up strategy for finding matching grammar rules, by using a shift/reduce technique.
                    分为3步。
                     1,建立Rule:
                           SheLikes: le gusta {
                                 $$ = "She likes";
                            }
                            VerbAndObject: SheLikes | ILike {
                                 $$ = $1;
                             }
                     2,从左边第一个字母开始推送Token:(推送的步骤称为shift)
                           Grammar Rule | Stack Tokens
                                                le | gusta el ruby
                     3,匹配Rule,如果不匹配,则继续推送:
                           Grammar Rule | Stack Tokens
                                      le gusta | el ruby
                     4,匹配Rule:(匹配并转变的步骤称为reduce)
                           Grammar Rule | Stack Tokens
                                    SheLikes | el ruby
                     5,继续匹配Rule
                           Grammar Rule | Stack Tokens
                           VerbAndObject | el ruby
                     But let’s stop for a moment and think about this a bit more carefully. How did the parser, know to reduce and not continue to shift tokens? And if it reduces, how does it decide which grammar rule to reduce with?
                     Here’s where the “LA” (Look Ahead) portion of LALR comes in: in order to find the proper matching rule it looks ahead at the next token:
                            Grammar Rule | Stack Tokens
                                      le gusta --> el ruby ( --> mean Look Ahead)


                     Inside the Ruby parse.y source code file, you’ll see hundreds of rules that define the structure and syntax of the Ruby language. There are parent and child rules, and the child rules return values the parent rules can refer to in exactly the same way, using the $$, $1, $2, etc. symbols.



 
Ruby里yeild和&block的用法
 
例子:
<html>
<pre>
class Box
   def do(who,kind,&block)
     "#{who} #{yield} #{kind} #{self.class}"
   end
end

#这个方法里,&block作为一个代码块参数,被yield所调用。
#注意这里的&block只能作为最后一个参数,否则会报错。

box = Box.new
box.do("I","iron"){ return "open" }
# "I open iron Box"

box.do("She","wooden"){ "kick" }
# "She kick wooden Box"
</pre>
</html>
让我们来做一个改进版:
<html>
<pre>
class People
  def initialize(name)
      @name = name
  end
  attr_reader :name
end

class Box
  def initialize(kind)
      @kind = kind
  end
  def is_done(who, &block)
      if who.class == People
          "#{@kind} #{self.class} #{yield} by #{who.name}"
      else
          "#{who} not a people"
      end
  end
end

#因为kind并非is_done的固有属性,而是Box的属性,所以它是作为一个参数传进box对象
#而is_done则是作为Box的被动语态,所以is_done方法属于box

daniel = new people("Daniel")
box = Box.new("wooden")

box.is_done(daniel){ "open" }
# "wooden Box open by Daniel"

box.is_done("bird"){ "open" }
# "bird not a people"
</pre>
</html>
 
 
Hi, my name is Aaron Liu. I'm Chinese. My Chinese name is 刘思昊. 
This is my personal Wiki that meant to share with you those common technical problems and My picture in your work or your life, especially in web related development. 
I am mainly working on Ruby on Rails related projects.

‘’除(转载)和(zz)标记外,wiki其它内容皆为本人原创‘’

Aaron Liu's Wiki
*[[日文版Ruby API|http://doc.ruby-lang.org/ja/]] 
*[[Railscasts免费视频下载|https://gist.github.com/samqiu/1472142]] 
*[[Tiddly Wiki使用教学中文版|http://web.nlhs.tyc.edu.tw/~lss/wiki/TiddlyWikiTutorialTW.html]]
*[[Code School code TV|http://www.codeschool.com/code_tv]]
*[[Railscast China|http://railscasts-china.com/]]
*[[happycast|http://www.happycasts.net/]]
Here are the 100+ most followed psychologists and neuroscientists on Twitter based on follower counts recorded over the last few weeks. If we've missed anyone who should be here, please let us know via comments and we'll add them in. This is an update to our September 2011 post "Psychologists who Tweet ". Check the comments to that earlier post for even more psychologists on Twitter than we were able to include here.

Kiki Sanford . Neurophysiologist turned sci communicator. Followers: 150106
Richard Wiseman . Psychologist, blogger and author. Followers: 121261
Laura Kauffman. Child psychologist. Followers: 106623
Steven Pinker . Evolutionary psychologist, author. Followers: 74775
George Huba. Psychologist. Followers: 53644
Leah Klungness . Author and psychologist. Followers: 53063
Dolors Reig. Social psychologist (tweets in Spanish). Followers: 51383
Dan Ariely. Behavioural Economist, author. Followers: 49533
Travis Langley . Psychologist. Followers: 33621
Marsha Lucas. Neuropsychologist. Followers: 31273
BPS Research Digest. The BPS Research Digest! Followers: 30007
Melanie Greenberg. Clinical health psychologist. Followers: 28104
Miguel Escotet . Psychologist. Followers: 25464
Aleks Krotoski . Psychologist, tech journalist. Followers: 22583
Neuroskeptic . Blogger and neuroscientist. Followers: 19851
Jo Hemmings. Celebrity psychologist. Followers: 19548
Vaughan Bell. Clinical neuropsychologist, blogger. Followers: 17992
Melissa McCreery. Clinical Psychologist. Followers: 17289
Richard Thaler. Behavioural economist. Followers: 16709.
Jeremy Dean. Blogger. Followers: 16404
Mo Costandi. Writer, blogger. Followers: 15689
David Eagleman. Neuroscientist, author. Followers: 15509
Sun Wolf . Social neuroscientist. Followers: 14728
David Ballard. Work psychologist. Followers: 14479
The Psychologist magazine. Followers: 14176
BPS Official . Followers 14169
Anthony Risser. Neuropsychologist, blogger. Followers: 13245
Daniel Levitin. Psychologist, author. Followers: 12985
Craig Malkin . Clinical psychologist. Followers: 12066
Honey Langcaster-James. Psychologist and coach. Followers: 11291
Sarah-Jayne Blakemore. Cognitive neuroscientist. Followers: 10373
Ciaran O'Keeffe. Parapsychologist. Followers: 10251
Todd Kashdan . Psychologist. Followers: 9991
Dorothy Bishop. Developmental neuropsychologist. Followers: 9976
Petra Boynton. Psychologist, sex educator. Followers: 9895
Andrea Letamendi . Clinical psychologist. Followers:
Susan Whitbourne . Psychologist. Followers: 9593
Dean Burnett . Neuroscientist and comedian. Followers: 9216
Jay Watts. Clinical psychologist, Lacanian. Followers: 8719
Amy Cuddy . Work psychologist. Followers: 8409
Jonathan Haidt . Psychologist. Followers: 7899
David Webb. Psychology tutor, blogger. Followers: 7851
Uta Frith. Developmental neuropsychologist, autism expert. Followers: 7774
David Rock . Work psychologist. Followers: 7611
Micah Allen . Cognitive neuroscientist. Followers: 7537
Dan Gilbert . Psychologist. Followers: 7529
Simon Baron-Cohen. Developmental psychologist. Followers: 7383
Professor Bob . Psychologist. Followers: 7275
Graham Jones. Internet (cyber) psychologist. Followers: 7255
Lee Keyes . Psychologist. Followers: 7229
Christian Jarrett. Editor of the BPS Research Digest. Followers: 7135
Margarita Holmes. Psychologist and sex therapist. Followers: 7053
Paul Bloom . Psychologist. Followers: 7050
Cary Cooper. Occupational psychologist. Followers: 6876
Bruce Hood. Cognitive scientist. Followers: 6814
Susan Weinschenk. Psychologist and author. Followers: 6561
Timothy Lomauro . Clinical psychologist. Followers: 6123
Todd Finnerty. Psychologist. Followers: 5783
Bradley Voytek. Neuroscientist and self-professed geek. Followers: 5775
Miriam Law-Smith. Clinical evolutionary psychologist. Followers: 5700
Claudia Hammond. Radio presenter. Followers: 5661
Pam Spurr . Agony aunt. Followers: 5646
John Grohol. Founder of Psychcentral. Followers: 5612
Maria Konnikova . Neuroscience blogger and author. Followers: 5588
Jason Goldman. Developmental & evolutionary psychologist, blogger. Followers: 5382
Andrea Kuszewski . Robopsychologist. Followers: 5329
G. Tendayi Viki . Social psychologist. Followers: 5224 
Kathleen Young . Clinical Psychologist. Followers: 5116
Sophie Scott. Neuroscientist. Followers: 4954
Neuro Bonkers. Blogger. Followers: 4944
Jon Sutton. Editor of The Psychologist. Followers: 4448
Marco Iacoboni . Neuroscientist, mirror neuron expert. Followers: 4396
Jesse Bering. Psychologist, blogger. Followers: 4154
Rita Handrich. Psychologist, editor. Followers: 4152
Sandeep Gautam. Blogger. Followers: 4022
Steven Brownlow. Clinical and forensic psychologist. Followers: 3979
Joseph LeDoux. Neuroscientist, rocker. Followers: 3911
The Neurocritic. Blogger. Followers: 3894
Chris French. Anomalistic psychologist. Followers: 3818
Gary Marcus . Psychologist, author and blogger. Followers: 3801
Lyle Becourtney. Specialist in anger management. Followers: 3739
Mark Changizi. Cognitive psychologist, author. Followers: 3610
Judith Beck . Clinical psychologist. Followers: 3420
Pam Dodd. Organisational psychologist. Followers: 3321
Kevin Mitchell . Neurogeneticist. Followers: 3317
Maria Panagiotidi. Grad student. Followers: 3263
Hugo Spiers . Neuroscientist. Followers: 3137
John Cacioppo. Psychologist, social neuroscientist. Followers: 3133
Daniel Simons. Cognitive psychologist, author. Followers: 3285
Scott Kaufman. Cognitive psychologist, author. Followers: 3190
Rory O'Connor. Health psychologist, suicide researcher. Followers: 3162
Andy Field . Psychologist and stats whiz. Followers: 3015
Brian MacDonald. Clinical psychologist. Followers: 3015
Geraint Rees . Neuroscientist. Followers: 3005
Wendy Cousins. Psychologist and skeptic. Followers: 2881
Roxana Rudzik-Shaw . Counselling psychologist. Followers: 2862
Prerana Shrestha . Neuroscientist. Followers: 2833
Björn Brembs . Neurobiologist. Followers: 2828
Aaron Kucyi . Neuroscientist. Followers: 2818
Molly Crockett . Neuroscientist. Followers: 2726
Chris Atherton. Cognitive psychologist. Followers: 2718
Rebecca Symes. Sports psychologist. Followers: 2559
Charles Fernyhough . Developmental psychologist, author. Followers: 2545
Andrew and Sabrina. Psychological scientists. Followers: 2540
BPS Occupational Digest. The BPS Occupational Digest. Followers: 2497
Daniel Willingham . Psychologist. Followers: 2390
Atle Dyregrov. Psychologist, expert in crisis psychology. Followers: 2381
Jon Simons . Cognitive neuroscientist. Followers: 2380
Ana Loback. Psychologist. Followers: 2348
Fretes Torruella. Educational psychologist. Followers: 2301
Tom Stafford. Psychologist, author. Followers: 2298
Jon Simons. Cognitive scientist. Followers: 2151
Jon Brock. Autism blogger, wannabe neuroscientist. Followers: 2125
Tom Hartley. Neuroscientist. Followers: 2030
Keith Laws . Cognitive neuropsychologist. Followers: 2007
Chris Chambers . Psychologist and neuroscientist. Followers: 1917
Rolfe Lindgren. Psychologist, personality expert. Followers: 1860
Patricia Lockwood . Psychologist, cognitive neuroscientist. Followers: 1860
Wray Herbert. Writer for APS, author. Followers: 1859
Frederik Anseel . Work psychologist. Followers: 1805
Rob Archer. Organisational psychologist. Followers: 1781
Adam Alter . Marketing psychologist. Followers: 1748
Michael Britt . Podcast host. Followers: 1747
Graham Davey . Psychologist. Followers: 1734
Jonathan Wai . Psychologist. Followers: 1722
Michelle Dawson. Autistic researcher. Followers: 1666
Alex Linley. Positive psychologist. Followers: 1611
Jamie Madigan . Cyberpsychologist. Followers: 1610
Manon Eileen . Clinical psychologist and criminologist. Followers: 1595
Michael Hogan. Psychologist and neuroscientist. Followers: 1570
Mark Stokes . Cognitive neuroscientist. Followers: 1560
Karen Pine . Psychologist, author. Followers: 1546
Monica Whitty. Cyberpsychologist. Followers: 1543
Pete Etchells . Biological psychologist. Followers: 1536
Ioannis Nikolaou. Organisational psychologist. Followers: 1534
David Matsumoto. Psychologist and judoka. Followers: 1527
Victoria Galbraith. Counselling psychologist. Followers: 1482
Dave Brodbeck. Comparative/evolutionary psychologist. Followers: 1474
Christine Allen. Clinical psychologist and executive coach. Followers: 1470
Daryl O'Connor. Health psychologist. Followers: 1470
Sally Canning . Clinical Psychologist. Followers: 1469
Peter Kinderman . Clinical psychologist. Followers: 1464
Christopher Chabris . Cognitive psychologist. Followers: 1398
Jonathan Firth. Psychology teacher and author. Followers: 1393
Voula Grand. Psychologist and writer. Followers: 1355
Jenna Condie. Environmental psychologist. Followers: 1320
Ciaran Mc Mahon. Psychologist. Followers: 1304
Matt Wall. Neuroscientist. Followers: 1293

If we've missed any psychologists or neuroscientists who should be in the top 100 please let us know via comments and we'll add them in.

Thanks to Emma Smith for help with compiling the update. 
 
2013/07/25 [[阅读源代码的几个步骤]]
 
2013/07/25 [[如何对某一点知识进行深入学习——从《程序员的思维修炼》中SQ3R阅读法想到的]]
 
2013/07/25 [[最近的学习心得]] 
 
2013/07/25 [[专业人生]] 
 
2013/07/25 [[模式识别]]
 
2013/07/25 [[程序员的十层楼(转载)]]

2013/01/06 [[我老板是如何教学生做research 的(转载)]]
[[Unix Theory]]
[[Linux Common Command]]
[[Vim]]
[[Git]]
[[AIX and UNIX 系统管理员系列文章|http://www.ibm.com/developerworks/cn/aix/lp/speakingunixnew.html]]
 
[[shell输入数据、输出数据和数据传输]]
[[vim字符串替换(zz)]]

[[我的vim安装地址|https://github.com/carlhuda/janus]]
Walter Schloss 
  他不是很多人眼中的股神,但他是“股神”眼中最伟大的投资人之一。他曾经为价值投资之父,也是巴菲特的老师Ben Graham,工作将近十年。自立门户后一直坚持独立投资,直到今天,对,94了,他还在价值投资。   巴菲特2006年致股东信,专门重点讲到Walter Schloss 
  “最后我想谈谈我在华尔街的一位老朋友,Walter Schloss,他去年已经90岁高龄。从1956年至2002年,他的投资都非常成功,而且除非他的基金赚钱,否则他一分钱手续费也不收。我对他的敬仰不是马后炮,我在五十年前就把他推荐给St. Louis家族,建议由Walter来管理他们的财富,他是我当时唯一推荐人选。Walter没有上过大学,或者商学院。他的办公室只有1间,直到2002年才扩到4间。而且没有秘书,没有任何办公人员,只有他的儿子帮他。他们从来不靠内幕信息,确切的说,内幕信息至少离他们有1英里远。他们就设定几条标准挑选股票。1989年父子俩接受采访,被问及投资理念,回答"我们尽量买便宜的股票"。听到这些,什么现代组合理论,技术分析,宏观判断和复杂模型,都歇了吧。 
  Walter的策略是不要冒"真正的风险"(资本的永久损失)。以此为依托,他的投资回报远超大盘,特别值得注意的是,他投资过超过1000只股票,大部分看上去都没什么吸引力。他多年来的成功不是依靠几只股票,也不可能是因为偶然。我第一次向公众推荐Walter Schloss是在1984年,那时主流商学院盛行"市场有效理论",即认为股票价格不会明显被错估,所以仅仅利用公开信息,投资者无法超越市场平均水平。无数本来前途无量的年轻人就被灌输了这样的思想,而另一边Walter却继续用事实说话—跑赢大盘。市场有效理论反而"帮助"了Walter,就像如果你从事航运业,而你的竞争对手都被教育说,地球不是圆的,而是方的。从这个角度讲,对Walter的投资者来讲,他没有上过大学,是件好事。” 
  巴菲特在The Superinvestors of Graham-and-Doddsville这样形容Walter Schloss: 
  “他真的知道怎样找到"比卖给私人投资者价格低得多"的股票。他持有股票数量比我多得多,他对公司所处行业的性质等,没有我关心得多。我也影响不了他。不过这是他的优势之一,因为没有人影响得了他”。 
  开场笑话,哈哈 
  1998年Walter Schloss参加了Jim Grant投资论坛,演讲题目是“我的华尔街六十五年”,开场时他先讲了一个笑话。“我有个朋友,在精神病院当医生,他请我去给他的病人讲讲投资。我应邀前往,刚讲了几句,一个坐在前排的病人,站起来冲着我喊,"闭嘴,白痴,坐下!"我顿时傻了,问我的朋友该怎么办,他说,"那你就坐下呗,这是他这几个月来说的最明智的一句话"”。 
  在那次演讲中,Walter给大家介绍了他眼中的“价值投资之父”Ben Graham。Graham从哥伦比亚大学毕业后,聪明的他将自己的理念应用于投资,他定下的规矩是,有回报他要提取50%,而出现损失,他也会承担50%。不过,1929年的市场也让他损失惨重,投资者纷纷赎回。1946年,Graham-Newman基金已经成立10年,表现一直很好。主要原因是Graham二战前买入很多规模和盈利一般的二线公司,这些公司不用缴纳超额盈利税,因此战后反而经营和股价都表现很好。两个小例子。Ben Graham的坚持。曾经有人给他推荐未来业绩很看好的公司,他说“这不是我们的风格”。他所倡导的价值投资并不是预测企业未来几年的盈利和增长。哪怕“机会”再“确定”,他也会坚持原则。Ben Graham的价值发现。二战前,市场热捧波音公司,认为其前景巨大;而战后,很多人都认为公司没有前途,于是Ben Graham得以在20元股价买入(当时账面价值为40美元)。当时没有多少人会专门在股价跌时买入,Ben Graham已经在这样做了,不过他不愿意用逆向投资形容自己,他认为自己是在买入价值。所以你要教育你的投资人,除了浮盈,也要习惯浮亏,而且越跌越买。

  其他场合,Walter Schloss精彩问答: 
  1、你和巴菲特等人都曾师从Ben Graham,今天你们也成为非常成功的投资人,你们的共同点是什么? 
  都不抽烟,呵呵。我想我们都很理性(rational),即使在非常不利的情况下,我们也不会很情绪化。当然,巴菲特是这方面做得更极致些。而且我们都很诚实,我们知道有些人赚了很多钱,但别人并不愿意投钱给他们,因为他们人品有问题。 
  2、Tweedy Browne偏定量,而巴菲特偏定性,你呢? 
  我不是很擅长判断“人”,我更喜欢跟数字打交道,除非上市公司离得很近,否则我不会去调研。我会从公司是否愿意分红,来判断管理层是否为股东利益着想。因为我们很“小”,所以我们不会去约见管理层,除非你是富达(Fidelity),否则他们怎么会听你的呢?在基金规模小的情况下,还是同数字打交道更容易些。 
  3、买卖原则? 
  不要着急卖。如果股价已经到了你认为合理的价格,那你卖掉可以。但如果因为已经涨了50%,别人劝你要锁定利润,你不要急着卖。至少卖之前要重新评估一下公司,要考虑当时市场的情绪(点位)是否对股价构成影响,人们是不是特别乐观?买股票时,根据我个人经验,买在过去几年的历史低点总归会有好处。你看到股价从125跌倒60,你认为有吸引力了,但可能三年前低至20,这说明这公司股价确实很脆弱。 
  4、你自己经历了很多次经济衰退(18次),还包括二战后的市场,历史在重复,还是你也在改变? 
  市场呈现两极分化,一方面有些股票跌去50-60%,而有些股票创了新高。人们总喜欢买入表现很好的公司,而不喜欢那些表现糟糕的公司。有些人也许在想,如果我现在卖掉这些差的公司,还可以抵消一些要缴纳的盈利税,不得不承认很多人为了各种各样的原因卖股票,所以股价总是会比“应该”跌得更多。以前的价值投资我们会买入股价跌到“流动资本以下”的公司,但现在这一条很难适用。现在的原则是买入股价被“打压”的公司,股价在历史低位(而不是创新高)的公司。当然我们得弄明白,其他投资者为什么不喜欢它们,是因为没有业绩,还是因为季报比市场预期低了一点点,我们愿意与市场不同,因为我们不认为一个季度表现很重要。 
  5、你的投资很分散 
  巴菲特曾说我这样做是为愚蠢进行对冲,我告诉他我们不会对公司盈利进行预测,而我们买入的又是些二线公司,我知道这里面一定能出来不错的公司,但我并不知道是哪个,所以只能每个先买点。一定要买,哪怕只有一点点,这样你才会记住它。遇到真正喜欢的公司,随着股价下跌,还会继续买。 
  6、很多人由于贪婪,撑不了你这么久,你的秘诀? 
  很多人本不应该来这个市场,由于贪婪,才有他们的出现。我们有自己的潜在买入名单,当这个名单由50只减少到3只,我知道市场很危险了,也没有那么便宜了,于是是时候彻底撤出了。再说市场几十年前哪有那么多CFA。。。。。。 
  7、给年轻人忠告 
  对自己要坦诚,不要让情绪左右你的判断,要明确自己这辈子要什么,不要因为华尔街赚钱就做这行。要与受人尊敬的人和好人打交道。   
Walter Schloss工作习惯 
  他从来不用电脑,但坚持每天早上读报,唯一其他参考资料是ValueLine杂志,最喜欢看“表现最差股票列表”,找到理想标的后买入一些(股价较账面价值有折价,债务少最好没有,管理层有一定持股比例),然后让上市公司将财务报表邮寄到自家信箱。每天工作时间坚持上午九点半到下午四点半。1956年自立门户后,将近50年(2003年基金清盘,专门为自己理财)年复合收益率16%。难怪,Forbes杂志曾在封面说,听Schloss谈“简单”的价值投资对现代人是一剂“补药”。
(1) C.class_eval “eval_str" 等价于在C中放入eval_str这段代码:class_eval只有类对象(Class Object)才能执行,普通对象没有这个方法。

(2)obj.instance_eval “eval_str" 等价于class « obj eval_str end,也就是在obj的单例类中放入eval_str这段代码,同时还能访问obj的实例变量!instance_eval对任意实例都可以运行。

原理简记:
(1)The Module class defines a method named class_eval . (module_eval is a synonym for class_eval .) ,Class < Module < Object

(2)The Object class defines a method named instance_eval. ruby中都是对象,所以都可以运行哈。

示例:
<html>
<pre>
class Test;end
Test.class_eval do
    def class_eval_test
        puts "class_eval"
    end
end

Test.new.class_eval_test
#=>class_eval

Test.class_eval do
    puts "class_eval_2"
end
#=>class_eval_2

t = Test.new
t.instance_eval do
    def instance_eval_test
        puts "instance_eval_test"
    end
end

t.instance_eval_test
#=>instance_eval_test

Test.instance_eval_test
#=>NoMethodError: undefined method `instance_eval_test' for #<Class:0x00000002a84df8>::Test
</pre>
</html>
!!!shell输入数据、输出数据
独立使用 find 时,总是以文件系统的内容作为输入数据。但是 sort 和 uniq 则需要从标准输入设备 (stdin) 请求数据输入。多数情况下,您会使用键盘作为 stdin:例如,您需要输入要排序的数据行。
默认情况下,find 在标准输出设备(stdout,通常是您的终端窗口)上打印结果。sort 和 uniq 都将输出打印到 stdout。
为了说明 stdin 和 stdout,您可在终端窗口中输入以下文本(假设前面的百分号 (%) 为您的 shell 提示符):

stdin 和 stdout
{{{
                % sort
mustache
horn
hat
Control-D
}}}
sort 从 stdin 读取您输入的三行文本,并对其进行排序,然后将结果写出到 stdout。图 1 所示为从命令行运行 sort 和多数 UNIX 命令行实用工具的示意图。

''图 1. 典型 UNIX 命令行实用工具从 stdin 读取并写入到 stdout''
[img[IO|http://www.ibm.com/developerworks/cn/aix/library/es-unix-commandline/IO.gif]]

某些实用工具,例如 find 并不从 stdin 读取内容。它们是从系统资源(例如文件系统或系统内核)读取需要处理的数据,然后将结果写入到 stdout。要直观查看 find 的工作方式,请参见以下的图 2。

''图 2. 某些实用工具从系统资源读取数据并将结果写入到 stdout''
[img[find|http://www.ibm.com/developerworks/cn/aix/library/es-unix-commandline/find.gif]]

除了使用 stdin 和 stdout 之外,UNIX 命令还将生成的错误消息输出到一种特殊出口以便进行诊断,该出口通常并不是强制的。此出口称为标准错误设备(通常简称为 stderr)。图 3 所示为运行实用工具的简单命令行。

''图 3. UNIX 命令生成错误并输出到特殊通道,即标准错误设备''
[img[stderr|http://www.ibm.com/developerworks/cn/aix/library/es-unix-commandline/stderr.gif]]
 
如图 3 中所示,多数 UNIX 命令从终端读取输入,将结果发送到终端,并将错误打印到终端上。默认情况下,除非另行指定,您的终端既是 stdin 的数据源,也是 stdout 和 stderr 的输出目标。

!!!shell数据传输
不过,您可更改 stdin 的源以及 stdout 和 stderr 的目标。您可强制 stdin 从文本文件、设备(比如连接到计算机的探头)或网络连接中进行读取。类似地,您可将输出结果发送到文件、设备或网络连接。在 UNIX 中,所有资源都被视作文件,因此某种源或目标很容易作为另外的源或目标而被接受或产生。
更改进程数据的源和目标被称为重定向。您可重定向 stdin 以从文件或其他源读取数据,还可分别对 stdout 和 stderr 重定向以将数据写到终端窗口之外的其他位置。在许多情况下,如前面所列出的初始 find 命令中,您还可重定向实用工具以从其他工具接收和为它们产生所需的数据。这就是管道 (|) 的用途。您可在命令中通过管道来生成进程链路,即将某条命令的数据发送到下一条命令,这类似于通过铜管将水从热水器传输到洗手池中。
图 4 所示为 find . -type f -print | sort | uniq 命令的示意图。

''图 4. 通过管道进行链接的三个实用工具的示意图''
[img[chain|http://www.ibm.com/developerworks/cn/aix/library/es-unix-commandline/chain.gif]]
vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
{{{
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
 :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
   :s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
   :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
   (n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
   :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
   :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

5. 删除文本中的^M
   问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

#使用命令:cat filename1 | tr -d “^V^M” >newfile;
#使用命令:sed -e “s/^V^M//” filename >outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
#在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。
#:%s/^M$//g
  如果上述方法无用,则正确的解决办法是:
 · tr -d "r" dest
  · tr -d "5" dest
 · strings A>B

6. 其它
   利用 :s 命令可以实现字符串的替换。具体的用法包括:
   :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
   :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
   :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
   :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
   :g/str1/s//str2/g 功能同上
   从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
}}}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50685/showart_1072908.html 
 
[[总统经济报告|http://www.gpoaccess.gov/eop/index.html]]
 
 
有这样一种精神,在日本被称之为“职人精神”,在美国被称之为“Profesional”。体现了这种精神的最典型的人物,我以为当属是《奇特的一生》的主角——柳比耶夫。我已经不止两三次听到各种行业内的专家提到这个名字。他除了是一位杰出的昆虫学家,更为著名的是他的神奇的笔记本:他将他自己所做的每一件事所花费的每一分钟都记在了他的笔记本上,就像是对自己人生的调焦,由朦胧、重叠、双影,最后无比清晰。

他什么时候捕捉昆虫,什么时候坐标本,什么时候学习,什么时候睡觉,对时间记录的误差不超过五分钟,完完全全地诚实地记录在册。到最后他发展 出了一种神奇的能力:能够将一件事所用的时间精确地估计到每一分钟上。时间的汹涌暗流滚滚无声,呼啸而过,他静默地前伸手掌,捕捉到暗流的每一滴水滴,编织成一次次诚实的实践。对他来说,时间的急流,是看得见,摸得着的。抓住了细密的网眼,抓住了我们没有察觉的,无意间流逝的人生。

他不忙,却比任何人都要干得多。

一个人,如果想认清自己真正想要的是什么,那么他必须深刻地了解自己;如果他想深刻地了解自己,他必须对自己绝对地诚实。清晰、透明、不自欺。而柳比耶夫记的笔记,几乎是绝对的诚实。

康德大师则是第二类实践者,他完全精确到分钟的作息时间,几点起床,几点看书,几点讲课。他每天下午五点钟都会准时出门,到不远的小树林去散步,而正好这时,教堂的钟声也随之敲响。仅有一次,康德因为看《爱弥尔》而忘记了时间,并没有准时出去散步,而的镇子里的人因为熟悉康德的十年如一日的作息时间,却认为是教堂的钟声敲错了时间。

在我们软件开发行业,近年来敏捷开发很火,他要求开发人员不仅是一名编程者,更是一位“开发专家”,懂得与客户沟通,制定和修改计划,积极并认真仔细地实践,管理时间和进度。对团队诚实、对客户透明。中文虽翻作“敏捷”,但其核心思想不如说是Profesional。

在《寿司之神》中,全世界最年长的米其林三星大厨小野二郎,他的团队在制作寿司时,从食材、制作到入口的瞬间,每个步骤都经过精密的计算。在偌大的日本,竟然被称为寿司之神,这份水准可想而知。而他的徒弟打了15年的下手才开始被允许开始学习蒸蛋。15年,通常是大部分开发人员职业生涯中,在程序员这个职位的时间的一到两倍。

保持这种状态,会丧失娱乐?变得木头?变得书呆子吗?没有人这样规定过,几乎所有成功的漫画家的作品都是非常幽默的,冯·诺依曼和罗素年轻可都是帅气浪漫的公子哥。:)相反,如果这样诚实专业地对待自己的话,反倒不会患得患失,得到的是平和、自信与长久平稳的幸福。

纵览历史,卓有成就者在”专业精神”上无不有着鲜明的实践——康德、柳比耶夫、查理·芒格、巴菲特、包括所有成功的漫画家……这份精神可说是追求人生成就所必备的基石——无论是那些大师的大成就,还是平凡人的小成就。这也许就是敏捷开发的核心思想,XP也好、Scrum也好,外在的方法论若没有了这份核心思想,想必很难长久地坚持下去。

许多开发人员担心自己的学习速度不够、解决问题的本领弱、基础知识不牢固、英语能力欠缺……知识也好,才能也好,金钱也好,都是专业人生的副产品。最应该担心的不是薪资,不是经验,不是知识,更不是金钱,而是缺乏小野二郎所说职人精神!如果长久保持下去,财富和才能将以副产品的形式,滚滚而来。

“那到底什么才是职人精神?”拍摄《寿司之神》时,摄影师问道。

不远处的小野二朗的眼神很是诚恳平实,诚恳平实地震撼人心。

“就像小野二郎那个样子。”一个店员说道,那个做了七十多年寿司的男人。

真是奇特的一生。
《西游降魔篇》是一部非常典型,简洁的商业电影,层次分明,便于理解,我就这部电影简单谈谈其中的剧作核心要素在电影中所起到的分布和作用。因为通俗故事的创作所包含的元素和技巧非常繁杂零散,我其中5个最核心也使最本质的说说——它们分别是:

激励事件
故事脊椎
故事鸿沟
人物塑造
人性弧光
我并非专业人士,这篇文字是给非科班出身而对故事创作有兴趣的同学(也就是麻瓜)看的,对专业人士不敢献丑,还请多多指教。

1,激励事件

所谓激励事件是“一个事件打破一个人物生活的平衡,使之变好或变坏,在角色心里激发其一个自觉或不自觉的欲望,意欲恢复生活平衡,于是这一事件就把角色送上一条追寻欲望对象的求索之路,一路上角色必须与各种(内心的、个人的、外界)对抗力量相抗衡,也许他不能实现欲望,但这种抗衡却是故事的要义。”

在《西游降魔篇》中,主角唐三藏的日常便是捉妖降魔,追寻世间大爱,而打破这一日常生活的情节分别是两次“驱魔失败”,使主角内心产生了“怀疑自己能否成为驱魔师”的冲突;“舒淇的告白”,使主角内心产生了“追寻大爱,却放不下小爱”的矛盾。

唐三藏的日常信念与日常生活皆被激励事件打破,降妖除魔的信念因为驱魔失败而产生动摇,开始怀疑自己的能力,但为了追寻“驱魔”这个信念对象——他做出了这样一个抉择:继续驱魔以贯彻信念,否则日常信念将会荡然无存,情节由这个抉择而被推进。

而日常生活平衡被舒淇的告白与追求所打破,与舒淇的信念形成冲突,情节也为了平复这个冲突而被推进。

(所有的通俗故事中皆有激励事件的存在,比如《倚天屠龙记》中张无忌的父母被逼死,自己流落到冰火岛,《哈姆雷特》中主角父亲死去,自己逃亡,《秒速五厘米》中女主角转学,相亲的二人因此分离等。)

2,故事脊椎

唐三藏追求日常信念的能量形成了故事设计中一个被称为“故事脊椎”的重要成分(又称为贯穿线或超级目标),脊椎是角色为恢复生活平衡所表现出的深层欲望所进行的不懈努力,它将故事的其他要素融为一体,这个脊椎便是“回复日常信念与日常生活”。

《哈姆雷特》中主角复仇的能量,《秒速五厘米》主角相爱的能量。

3,故事鸿沟

主角经过激励事件而打破生活平衡后,形成故事脊椎,而故事脊椎则促使主角行动——恢复生活平衡。

但主角的第一个行动已经激发了对抗力量(他没有降服沙僧,反被胖揍了一顿),对抗力量阻挡了欲望实现并在预期和结果之间横亘了一道鸿沟,粉碎了他对生活平衡的幻想,使他与世界处于一种更大的冲突之中,并把他推向了更大的风险。现在他必须采取第二个行动,一个更困难更冒险的行动,一个为了将现实拉回平衡的行动,一个立足于他对世界的新的期望的行动——去降服这个区域内最难对付的猪刚烈,但是,他的行动又一次激发了对抗力量,在他的现实中掘开了一道鸿沟。所以他调整自己以适应这一意外,再一次加大赌注,并决定采取一个更冒险的行动。他更加深入挖掘自己的潜能和意志力,使自己冒着更大的风险来采取第三个行动

也许这个行动或取得正面的结果,也许鸿沟又会轰然中开。这一模式在不同的层面上循环往复——内心冲突层面/个人冲突层面/外部冲突层面,渐次增加风险和危难,直到故事的高潮。

4,人物塑造

人物真相只有当一个人在压力下做出选择时才能得到揭示——压力越大,揭示越深,该选择也越真实地表达了人物的本性。这里的“本性”并非人物的的性格表现,而使他在各个层面冲突下所呈现的抉择。

在人物塑造的表面之下,无论其面貌如何,这一个人到底是谁?在他的人性最深处,我们将会发现什么?充满爱心还是残酷无情?慷慨大方还是自私自利?英勇无畏还是胆怯猥琐,得知真相的唯一办法就是看他在压力下做出的选择。

舒淇则是一个敢爱敢恨,勇于把握机会,大大咧咧的形象,她与唐三藏短暂相处之后便想方设法追求他,被一再拒绝(压力一),伙伴的不解继而反对(压力二)也不放手,反倒死缠烂打,变本加力,甚至牺牲自我,是一个不折不扣的浪漫主义者。

而与之相对的唐三藏,追求的是用大爱来降魔,无论如何失败(压力一),面对他人的怀疑和讽刺(压力二),长途艰辛跋涉(压力三)也未曾放弃,展现了一个坚定的理想主义者面对残酷现实的形象。

5,人性弧光

把人物塑造这一原则更进一步:优秀的作品不但揭示人物真相,而且还在讲述过程中表现人物本性发展轨迹,无论变好还是变坏。

实际上,在舒淇告白后,主角因为内心深处喜欢舒淇的感情而产生了不自觉的欲望,与“驱魔”的自觉欲望相矛盾,产生了角色的内心冲突,一个不自觉欲驱动故事时,它将使作者创造出一个远为复杂的人物,“不自觉欲望”不断改进“自觉欲望”,形成人性的弧光——就如同《哈姆雷特》中哈姆雷特最初是位善良而勇敢的王子,而到最后却一面在冷漠地执行复仇计划,一面又愧疚自己杀害叔叔和母亲。

唐三藏的不自觉欲望通过在舒淇的不断表白和帮助,一步步膨胀,而与之相抗衡的自觉欲望也一步步加深:

1)舒淇表白

2)舒淇被猪刚裂追杀时救了主角

3)舒淇在主角的伴奏中月下跳舞

4)舒淇为救主角死在孙悟空手下

主角的对抗行动呈现为:

1)逃跑

2)感动但表面冷漠

3)痴迷

4)与自觉欲望和而唯一,在其它元素的不断积累和推进下迸发高潮。

到最后,主角的人物弧光完善的表现了出来,故事脊椎呈现出最强的能量,故事最大的鸿沟则被能量给彻底填上,再加上精彩绝伦的视觉效果和感人肺腑的人物告白——这几个要素合力迸发出最顶端的高潮。

而相比之下,女主角舒淇的人性弧光则不那么明亮——她在喜欢主角的不断积极行动,而不自觉欲望只是犹豫自己这么做值不值得,犹豫形成的人性对抗比冲突形成的人性弧光会弱很多。但不断的自我牺牲,后来加上月下跳舞这一节(美得让人惊叹,与前半段形象形成鲜明对比),使人物其它在层面上增加了光彩。

而几个配角包括孙悟空则完全看不到人性弧光,他们是依靠情节推进而改变际遇,是被动的。

在人性弧光这个要素上,《西游降魔篇》处理得有些粗糙,但因为在其它元素(各种笑点,精彩的表演,视觉效果等)的融合下,电影表现得非常不错。

P.S.

参考:《西游降魔篇》、《故事——材质、结构和银幕剧作的原理》、《你的剧本逊毙了》
----
*說明
數列 用井字號#起始一行, 越多#號階層越低, 最後用一空白行結束

----
* 範例
 #項目1
 #項目2
 ##項目2.1
 ##項目2.2
 #項目3
 ##項目3.1
 ###項目3.1.1

----
*顯示

#項目1
#項目2
##項目2.1
##項目2.2
#項目3
##項目3.1
###項目3.1.1

----
首先处理需要嵌套表单相关的model,在这里我们是用tile来嵌套attachment,所以model的代码分别是:
<html>
<pre>
	class Tile < ActiveRecord::Base
	  has_many :attachments, :as => :attachable, :dependent => :destroy
	  accepts_nested_attributes_for :attachments, :allow_destroy => true
	  .....
	end

	class Attachment < ActiveRecord::Base
	  belongs_to :attachable, :polymorphic => true
	  .....
	end
</pre>
</html>
这里accepts_nested_attributes_for的作用是允许tile去嵌套attachment的属性,接下来我们看如何在view中代码:
<html>
<pre>
	<%= form_for @tile do |f| %>
	  ....
	  ##@tile本身的一些属性
	  f.fields_for :attachments do |builder|
	  	##这里注意,使用了fields创建了一个和attachment相关的fileds
		<% unless builder.object.new_record? %>
  		  <p id = "<%= builder.object.id %>">
			<%= image_tag file_type_icon_path(builder.object.file_type) %>
			<%= builder.object.file_name %>
			<%= check_box :_destroy, style: 'display:none' %>
		  </p>
		<% end %>
	<% end %>
</pre>
</html>
需要注意的是,在这段代码中,除了自己创建的一部分fields外,fields_for还会创建一个隐藏field用于处理每一个attachment,他的HTML代码类似这样:<input id="action_tile_attachments_attributes_0_id" name="action_tile[attachments_attributes][0][id]" type="hidden" value="53" />


代码中的builder.check_box :_destroy 被勾选后会自动生成一些参数给params[:tile]去删除attachments参数类似a于"tile" => {"attachments_attributes"=>{"0"=>{"_destroy"=>"1", "id"=>"54"}}。
当参数传递给tile.update_attributes后就会自动删除被勾选的attribute了。这就是在rails中构建嵌套表单的方式了。
----
*說明
要連結到外部網址,可以直接輸入原來的網址,系統會自動擷取。
或者是用下列的格式去處理:

----
*範例
{{{http}}}://www.tiddly.com
{{{[[}}}一般網址|{{{http}}}://www.tiddly.com{{{]]}}}
{{{[[}}}相對網址|path/filen{{{]]}}}
{{{[[}}}Windows 的網路芳鄰|file://server/share/folder/path/file{{{]]}}}
{{{[[}}}Windows 的本機檔案|file:///c:/path/file{{{]]}}}
{{{[[}}}Unix-style 的本機檔案|file:///path/file{{{]]}}}

----
*顯示
http://www.tiddly.com
[[一般網址|http://www.tiddly.com]]
[[相對網址|path/filename]]
[[Windows 的網路芳鄰|file://server/share/path/file]]
[[Windows 的本機檔案|file:///c:/path/file]]
[[Unix-style 的本機檔案|file:///path/file]]

----
Andy Hunt在《程序员的思维修炼》中谈到一个学习方法,这个方法的想要达到的目的是“为解决问题而阅读”。我觉得有必要分享一下,该方法叫做SQ3R阅读。SQ3R是具体阅读步骤的首字母缩写:

调查(Survey):扫描目录和每章总结,得出总体看法。

问题(Question):记录所有问题

阅读(Read):阅读内容

复述(Recite):总结

回顾(Review):重读,拓展笔记,与同事讨论。

1)为什么这个方法比普通地读书方法好?
首先Andy Hunt认为阅读是一种非常低效的学习方法(经过十多年地阅读,我非常同意他的观点),因为大脑处理语言的部分只占非常小一部分,而且很低效,大家应该都有过这样的经历:有些知识用文字描述很难理解,但用一副图画说明时,大脑却能很快明白。实际上大脑最擅长地学习方式是模仿,人类天生就会模仿,看见别人做什么,自己也会跟着做。

阅读如此低效,我们为什么还要进行阅读呢?因为太多知识我们没有这个环境去模仿,而大多数高质量的知识都被记录在书中,换句话说:“我们是不得以而为之。”好在,经过十多年地阅读,我们阅读的速度越来越快,吸收速率也越来越高。

首先看SQ3R的1,2步,这两步都是为了定位问题,定位问题有3个好处:
1,帮助我们理清思路。
2,减少不必要的阅读,打个比方,如果我们到一个地方旅行,我们是不会记得那些寻常小路,我们直奔风景名胜,用最快的交通工具,走最短的路线,欣赏这一块最棒的景色,即使我们要走过某些路程,但这些路程是为了我们能够达到目的。我们会阅读非必要的序言,前置知识,感想等,但我们最终是要找到问题解决方法所在。
3,增加阅读时的注意力。

而第4,5步,则是为了将解决问题的方法,经过复习,内化为一个人本身的能力。这5步都非常精辟,必不可少。 第5步中“与同事讨论”,除了增加记忆和理清思路外,还能够获得反馈,反馈会帮助你更加精确地理解知识

2)对于程序员来说,如何对某项知识进行主题学习? 我以前读过《如何阅读一本书》,里面谈到一个概念叫做“主题阅读”,意思是在读书时参考同类的经典书籍,就某个范畴的知识进行阅读。但经过应试教育的荼毒,我总是习惯一本书拿上来,了解个大概就顺着读了,一直到一本书读完,美名曰“有始有终”。在书比较少,难以获取的前提下,这样当然没什么问题,但在这个时代,书几乎是无法读完的,信息量大得让人接受不完,这时候主题阅读的好处就出来了。

我们之所以习惯于通读一本书,还有两个原因分别是“侥幸”和“不安”: “侥幸”在于人阅读时会带着这样一个假设:“这本书中很可能存在对我极有价值的知识,从某种程度上改变我的知识。”但事实上,作为改变自我的阅读,从心理学上来讲这种概率是非常小的。 而更多的人是出于“不安”而通读一本书,害怕自己遗漏了书中某个重要的知识点,说不定以后会用到。这种情况当然发生,但从效率上来看,是不值得顾虑的。打个夸张的比方:我猜测今年中国某个地方会发生地震,所以我现在就得卷铺盖逃离中国吗?

说到技术书籍,除非你是新手,在读一本很薄的入门书,否则任何时候通读全书都不是一个好的选择。

后来,我发现主题阅读仍然不够好,因为“某个范畴的知识”也实在太大,而在这个范畴中,你所用到的少之又少,而遗忘的速度却比你想象得要快。所以我只取出某一个问题,对该问题进行主题学习。比如今天的问题是“理解Ruby中的self”,那么我会这么做:

1.《Ruby元编程》第三章; 2.上Ruby China搜索关键词“Ruby Self” 3.上Stack Overflow搜索关键词"Ruby Self" 4.在自己的RSS阅读器和Evernote中搜索"Ruby Self" 5.在我的文献管理工具Zotero中搜索“Ruby self” 7.进行Google blog搜索关键词 8.如果你在这个知识点上依然有某些部分不理解,分解出不理解的部分,上论坛和Stack Overflow提问。 9.练习,并整理成笔记放进Evernote;或者整理成博文和帖子在论坛进行分享。 10.获取论坛的反馈,你会因为帮助了别人,而让自己更有成就感,形成良性循环。

理解知识点时,尽量不要直接在Google上搜索,会浪费你很多时间。

3)改变你的好习惯。

相比与改变坏习惯,更难的是改变自己的好习惯,使之变得更好。

我从小自阅读中获益良多,阅读与无疑是一个好习惯,当我想改变学习方式,缩减阅读时间时,我的感性却告诉我,我在冒着这样一个风险:“不一定会变得更高效,相反一定会浪费时间,并在一开始一定会降低效率,除此之外,你得承受改变的痛苦,以及十多年因为这个好习惯所带来益处的质疑。”

但改变习惯后产生的复利,却会实实在在地,在大时间周期上改善你的人生。

如果你同意我的看法,对你有帮助,请点击下方的“喜欢”,如果觉得这篇文章太烂,或者有问题,请多拍砖。
1.微观部分:
微观部分就是写片段。在片段上,我的写作角度一切以表现和感染为中心。如果写作者想在小片段上体现出什么人生哲理,文以载道之类,几乎不可能。就算周作人和村上春树这个档次的作家,也是写感染,然后用感染去让人明白一些称之为“意义”的东西,事实上,读者对于这些“意义”也大多似懂非懂,其实是受到了感染。而所谓“文以载道”是一个文化现象,无数读者和考据者添加到原作中,拓展描述原作,以至于成为文史的一部分。如同金融游戏,某个蓝筹股固然让人看好,但你炒我也炒,炒到后来便成了天价。

所以微观描写,要砸碎概括,点细的写。要表现力,要感染。

表现力:或约传神,或约生动。靠比喻、拟人、写细,写精,一目了然,如同拨开云雾见青天,令人拍手叫绝。

感染力:比表现力更高一层,表现好了事物,再混入人物情绪,自然而然能感染到读者。另外可加排比、对偶中表现气势,或层层递进,增进程度。

写片段要像照着真实的景物画素描,要掌握一套模式,什么都能画,什么都能画得像,不要像临摹画稿似的,你临摹过猫狗就只会画猫狗,给个老鹰就傻眼了。

写好片段很容易,多读多看那些牛人的,抄十几万字他们的优秀的描写绝逼可靠:我比较喜欢村上春树和周作人、另外刘小枫、康 巴斯乌托夫斯基、里尔克的小说和散文、北岛的、冯至的,还有其它著名诗人写的或翻译的小说散文。这个方面要学习文学的“刀尖”——诗人写的东西。虽说看不懂诗,但看他们写的文,是那种把心力铺在一个个字词上的。很容易就让自己的文字水平上几个台阶。

2.宏观部分:
宏观就是指整个小说的结构:场景安排、人物命运、文化氛围、矛盾冲突等。在宏观部分,写得很少。列的小说大纲大多都没有完成。一来自己没有坚持下去,越写感觉越不对,仿佛心里堵了车;二来大纲写得太粗糙,一个百万字的小说起码要十万到三十万字的大纲,一个十万字的小说起码要一到三万字的大纲。

很多人写散文,写短篇、中篇写得很传神,很牛逼,就是不懂怎么写长篇?什么原因,不会呗。

我也不会,恰好很少看到教写长篇的好书,如果哪个有著名长篇小说家或剧作家写过这方面的书,望推荐。我现在能拿着编剧书依样画葫芦。 《你的剧本逊毙了》这本书比较简单,如果实在不知道怎么写长篇,它直接给你上一个小说框架——从矛盾冲突到人物出场的整个大结构,往里面填填人物、情节、场景,再加点噱头创意,一个还不错的小说/剧本大纲就出来了。

缺点是:只适合写比较商业性的小说,比如美剧、好莱坞电影,既好看又快餐,读者又买账。但是要写《情人》、《挪威的森林》这类比较“另类的”,或是《三体》这种超复杂的,帮不上多大忙。

宏观方面是我的弱项,但却是长篇小说的精髓。现阶段改进:
(1)好好写大纲,争取写个几万字的大纲出来。五脏俱全的那种。然后照着大纲在写好小说。否则这个瓶颈跨不过去。
(2)试图将软件设计中的设计模式引人小说写作,暂时有些技术上的问题,如何埋伏笔、抖包袱,控制缓急节奏。
小说写作的过程中,一般分为四步:设计、执行、重构、优化。

设计
也就是列大纲,在这个阶段不用考虑真实性、合理性、是否俗套、是否有难度,甚至不用考虑如何结尾。你需要设计的只有人物、背景和情节,越多越好,让人物的命运相互碰撞,登上你的舞台。这里没有不切实际的剧情美学、黄金结构。这里并不是该卡尔维诺或者昆德拉说教的时候,创意乃设计之王,天马行空,无所顾及。

执行
开始写吧,哪怕最庸俗的开头,最无生气的人物,先让那些作家的敦敦教诲站到一边,写就够了,执行你的创意。哪怕完全说不通的创意,让那些闪电般的东西注入你的文字,不管它是否将美感和结构劈得一塌糊涂。你是创作命运之人,你是作品的王,它们是你的奴隶,想怎样摆弄它们就怎么样摆弄它们。文字粗糙?剧情烂俗?先让评价退位,你需要保持写作的热情,不应该让它们来打搅你。这一阶段,耐性和热情才是你最应该看重的。

重构
现在你写得有点累了,是时候回过头来修缮一下。不过等待,这里并不是要你去增加美感、表现力和感染力,保持通顺就好,笑料?泪点?疑点?这些锦上添花之物,暂且放在一旁,保持通顺就好。重点在于:该是做铺垫的时候了。有什么伏笔、包袱,让它们深深嵌入你的作品。清理一些障碍,剔除部必要的桥段,然后添加些铺垫性的桥段,不要让作品难以继续写作,给出一段大路,让你的文字在以后的道路上继续高速飞驰。耐心在这个阶段是你最应当看重。暂时的重构,是为了以后的写作更加顺畅。你会感到像是在修缮毫无意义的杂草,你的工作会暂时地显得没有价值。但请坚持下去,保持下去,安静地习惯下去。

优化
写完了吗?还没有,写道某个阶段即可,或许在整本书的转折点,整个三幕中的某一幕。来优化吧,先不慌,美感依然不是最重要的。你首先需要下意识地注意叙述结构、角度和重心。清扫一下,渐渐将小说的主线露出来,将那些不合理的情节修改一下,或者添加、删除一些情节将它变得合理。优雅的小说架构并非一开是就被设计出来的,它是被不断优化的渐渐显露。

泪点、疑点、笑点,在每一章都添加几个吧,该是让你的作品焕发出张力的时候了。

唔,现在有了结构和张力,不错,但从微观的角度,文字的角度读起来依旧索然无味。这是该美感发力的时候了,请用写散文或者写诗的方式来对待这部小说,着重于表现力和感染力,越是高潮前后,越是开头结尾,着默就越重。

迭代和收尾

经过这四步骤,你会发现一部小说该有东西你都有了,而且看起来还很优秀。那么不断迭代这四步吧,直到小说的完成。在最后收尾时,稍加修饰即可,某个错别字,某个不和谐的用词等待。
----
*說明
#以一個大於符號>起始一行, 越多>以決定階層數

----
*範例二

 >階層 1
 >>階層 2
 >>>階層 3
 >>階層 2
 >階層 1

----
*顯示二

>階層 1
>>階層 2
>>>階層 3
>>階層 2
>階層 1
----
2012-01-02 21:47:29
 平时工作中用了很多数据库,有国内的,也有国外的,每一个数据库都有它自己的特点,今天总结一些不同的数据库的优势和劣势。

国内主要数据库及数据终端: Wind\恒生聚缘\锐思数据库\CSMAR数据库\中国统计局数据库\巨潮数据库\巨灵数据库
国外主要数据库及终端:路透社(datastream)\CEIC\OECD\Haver Database\Thomson Financial One Banker\Capital IQ\

先说国内主要数据库及数据终端的特点:
要评价一个数据库质量,有以下几个标准:
(1)及时性 (2)精确性 (3)全面性 (4)数据结构科学性  (5)提取数据API兼容 

先说说中国金融数据各个优点和缺点以及做的比较好的数据模块

Wind 
定位:高端机构客户
机构市场占有率:80%
优势:(1)数据表结构还是比较科学,而且还有很多不同工具,例如WACC计算小插件、贝塔计算小插件、另外还有直接在EXCEL估值的模版。
(2)用户体现非常好,界面体验一流,符合中国人的使用习惯。
(3)特色数据库有中国A\B股数据、基金数据、债券数据和期货数据都非常突出。
(4)资讯内容结构严重模仿BLOOMBERG 
(5)支持API插件

缺点
(1)其实我想突出数据质量只是一般,有一些还是很多错误、例如指数的数据库的错误和雅虎Finance几乎是一样的。
(2)世界指数等国际数据库还是一般。
(3)主要是提供资讯,下单通道没有Bloomberg没有那么强大。
(4)行业数据严重缺乏,而且质量真的不太好。

恒生聚缘
这个数据库其实也是定位为机构的,还有一套完全的信息技术系统解决方法。但是这个数据库不太出名,但是这是我用过价格便宜然后质量非常高的数据库。
优点:
(1)界面设计虽然没有万德那么花哨,但是非常实在,非常实用,而且很方便。数据结构也科学,不会出现过多冗余的状况。
(2)价格比万德便宜,但是性价比挺高的。
(3)A\B股数据是强项  
(4)研究报告更新速度比较快,比较全面、质量比万德好。
(5)数据质量过硬。

缺点:
(1)资讯更新速度不高,其中资讯类的星期六和星期日是暂停的。
(2)宏观数据和行业数据不出色。
(3)不支持API插件。

CSMAR数据库
定位:中国80%的学术机构和香港高效都是使用CSMAR,美国大部分的大学例如沃顿等是使用CSMAR数据库
优点
(1)公司金融数据是强项,非常强大和齐全,我经常使用哈哈。
(2)数据库做学术还是比较全面的。年份比较早的数据都会有收录。
(3)高频数据是全国第二好。 
(4)公司治理数据比较好,详细,包括公司控制链图均有收录。
缺点:
(1)由于是学术数据库关系,更新速度不够快。机构是绝对不会使用的。
(2)数据结构有些设计是有问题。
(3)缺乏资讯类的数据。
(4)行业数据是更新速度是所有数据库中最慢的,建议不要使用行业数据库。 

锐思数据库
定位:学术机构
特点:
基本上是Copy外国的数据库结构,而且数据字段不够丰富,建议不要使用。

巨潮数据库
深交所旗下的一个数据库公司,有这个得天独厚的优势
(1)交易所的公告、董事会决议总是最快可以知道。
(2)异动数据库中的异动记录肯定不止前十名,获取还能看到前15名,哈哈!
缺点
(1)数据结构太老的了,严重有问题,见过5个字段来做表主键的,无语。
(2)好像异动数据库,把所有的债券、股票、衍生证、涡轮全部放在一起,结果有一次踩地雷,把债券和股票都提了出来,原因是股票的代码=债券的代码,真的囧死了。
(3)异动数据中的计算方法严重不正确,如果你查阅交易所对涨跌幅偏离值的计算方法,你会发现在2006年8月4日前后会非常不同。结果又一次让我踩到地雷。
(4)数据质量一般,算不上好。

清科数据库
用的比较少,专做Pe,风险投资数据的。

剩下的外国数据库可以简介一下
Bloomberg就不用说了,一个字:快!
下单通道快,数据品种全、资讯全面、而且还有business week\ TV\radio等等,主要是资讯比较全面。
数据质量好,虽然有时会出错,但是其他还是蛮好的。

路透社
Bloomberg的死对头,但是终端实在做的不太强大,只是注重资讯和新闻。而且Thomson旗下的Onebanker 数据库更新太慢,中国公司在美国上市的数据库错误太多,ISIN代码在新加坡市场上市的太少。

OECD和CEIC
这两个是投资银行经常有的两个数据库,主要集中在宏观数据和行业数据,非常强大。但是对于中国的数据来说质量不高。其中能源类的数据库比较好。
http://www.oecdchina.org/statistics/index.htm 

Haver 
高级数据库,IMF经常援用,我比较少用,专注于美国的经济行业数据库。
http://www.haver.com/databaseprofiles.html 

Capital IQ 
和CSMAR一样专注于做公司数据的,是Standard and poor旗下的一个产品,其中最厉害的是公司金融的所有数据了,上次还和它有商务联系,关于公司治理的数据库结构的。做的非常好。


总结一点:中国的行业数据质量非常不好,而且很多都是缺的,可能是因为以前的人还没有做数据收集的习惯。所以中国的行业数据都是卖得非常贵的,尤其是和上市公司非常密切的行业竞争对手数据。所以很多分析师都是使用购买协会的数据来做研究,连Wind这种数据库基本不能满足现在的行业数据需求。

如果大家还知道什么数据库,欢迎大家补充! 
2013-01-16 22:27:48
说明一下,我研究领域的大方向是计算机无线网络,这里只是总结一下自己这几年观察到的老板做研究的思路,作为以后对自己的提醒和借鉴。另外我老板本身很牛,不到40岁已经是IEEE fellow。

如何找题目:
1,首先general的看top conference的paper,或者看看这个领域的大牛写的survey paper。了解各个细分领域大概是在做什么样的问题。这个阶段只需要看paper的abstract,introduction,related work和conclusion。看完每篇paper后主要要弄清楚四个问题:
(1)What is the topic?这个paper研究了一个什么样的研究课题
(2)Why this topic?这个课题为什么有意义
(3)What is the challenge?这个课题有什么难点,challenge
(4)What is the key idea?这篇paper是从什么思路来解决这些challenge的,它与已有的工作相比有什么好的地方。

2,dive into一个自己比较感兴趣的具体的细分领域,了解这个领域近几年的工作。
这个阶段有点像在画一个表格。每个具体的细分领域中的问题都可以包含几个不同的维度。大多数paper都是着重解决其中的一个或者几个维度的,而对其他的维度不作考虑,或者放松了假设的条件。
假设有这样一个大表格,y轴是所有的paper,x轴是所有可能的看问题的维度。看paper的时候,把每篇paper解决的维度勾上。我们甚至可以加上z轴,表示这个paper在这个维度上解决的效果,例如算法的效率,额外的开销之类。通过画表的方法,我们可以知道这个细分领域中,有哪些维度的组合的问题还没有被人解决过,以及解决的程度如何。
这个阶段,仍然不需要太细看paper具体的solution,而是更深入的理解paper所解决的problem本身。

3,找到具体的自己想要解决的问题。
这个问题可以是表中空缺的地方,或者是别的paper都解决得不够好的地方。

接下来就是要解决这个具体的问题了。
首先你要有一个可能的idea,这个idea有希望能够解决前人所不能解决的问题。它可以是从别的领域的方法借鉴来的,也可以完全是你自己的突发奇想。

(当然,如果你先有了idea,找题目的顺序可以是1-->3-->2。)

其次,你要verify你的这个idea,至少能用一个简单构造出来的motivated example来从直观上证明你的idea能比所有的方法做得更好。并且这种example是足够广泛的。也就说,大部分的情况下,你能做的更好。

这个阶段,需要dive into所看的paper的solution的细节。如果你的idea来自某一篇别人的paper,你得完全看懂paper中方法的实现细节。如果你的idea是某一类的数学工具或者模型,你得了解这种数学工具如何推导和正确使用。

要注意的是,如果别的领域或者别的问题里面的方法,已经可以直接搬到你要解决的问题里面了。那么,你也不能算是在做research,只能说是在做课程project,因为你没有任何的contribution。所以你需要找到你要解决的问题里面的uniqueness。并通过对原方法的改进,解决好这个uniqueness带来的新问题。

3中的每一步一旦不顺利,你都可能需要重新回到2甚至是1。例如你可能发现你的idea实际上别人用过了,之前你survey不够细,没看到这样的paper。或者你发现你的idea根本不work,或者只是在很有限的例子中work。或者你发现你其实没法看懂所需要用到的数学工具。等等等等。

如何写paper:
1,想象你是一个推销员,你怎么介绍你的paper,从而使能够别人appreciate你的工作。
2,如果让你用中文说,你会怎么组织你的paper,从而让别人明白你具体做了什么。你的逻辑会是怎样的。
3,英文的表述主要学习借鉴native speaker写的paper。

1,2其实是最重要的,实际上就是逻辑是最重要的。不管是中文还是英文,你的presentation都需要有条理。你首先得讲清楚你为什么要做这个研究。比别人的好在哪里。为什么要让你的paper中。你得讲清楚你研究的是个什么问题。每一个section或者段落,你得有中心句让人一眼就看出来你要说什么。

如果你用中文口语,能够清楚的推销你的paper,你就能用英语写好paper。

几个注意的点:
1,从问题本身出发而不是通过工具套问题。
我老板倾向于这个思路,当然也很多research做得很好的group,他们的风格就是拿到一个好用的数学工具或者思路,然后尽可能的套到很多问题上面。
2,做任何具体topic前都要问的问题:你的问题和已有paper中解决过的问题有什么不一样。
3,在model问题的时候,如果解法需要加/减某个assumption,一定要问自己为什么可以这么假设。
4,不要过度纠结于解法,要问自己为什么一定需要用某种方法来求解。
5,看别人paper的时候,一定要critical thinking。只要写过paper就知道自己写的时候都会有很多的局限,所以别人的paper也不会是十全十美的。要做一个thinker而不是learner。批判要大于接收。抓住paper解决的问题本身,而不要被漂亮的解法亮瞎。从更大的背景上去将paper“庸俗化”而发现其中真正高明或者烂俗的地方。

最后总结一下我个人认为的好的research的几个特征。
大致按时间顺序排列是:
1,interesting problem;2,reasonable formulation;3,beautiful solution;4,surprising results(最好是有别于常人的直观或极大推进现有的局限);5,excellent presentation。按照重要性,排序大概是1>2>4>3>5。但这几点是互相耦合的,牵一发动全身。做好的研究着实不容易。
2009-11-20 23:13:34 来自: 穆非

投资者进阶分级阅读书单 

Hidden Gems Reading List 

(注:中文名我已尽量用从网上找到的中文版译名) 

Elementary School (小学) 

- One Up on Wall Street,(彼得·林奇的成功投资)by Peter Lynch(彼得·林奇) 
  - Buffett: The Making of an American Capitalist(一个美国资本家的成长-巴菲特传), by Roger Lowenstein 
  - value Investing With the Masters(跟大师学价值投资), by Kirk Kazanjian (0735203210) 
  - The Davis Dynasty(戴维斯王朝——五十年华尔街成功投资历程), by John Rothchild 
  - valuegrowth Investing(价值成长型投资), by Glen Arnold 

Junior High (初中) 

- The 5 Keys to value Investing(价值投资五大关键), by J. Dennis Jean-Jacques 
  - Beating the Street(战胜华尔街), by Peter Lynch(彼得·林奇) 
  - Investment Fables(打破神话的投资十诫), by Aswath Damodaran 
  - The Vest Pocket Guide to value Investing(价值投资手册), by C. Thomas Howard 
  - Common Stocks and Uncommon Profits(怎样选择成长股), by Philip Fisher (菲利普.费雪) 

High School (高中) 

- Made in America(美国制造), by Sam Walton (萨姆.沃尔顿) 
  - Forbes' Greatest Investing Stories( 福布斯最大投资传奇), by Richard Phalon 
  - John Neff on Investing(约翰.聂夫谈投资), by John Neff (约翰.聂夫) 
  - The Intelligent Investor(聪明的投资者), by Benjamin Graham (本杰明.格雷厄姆) 
  - The Money Masters(金融大师), by John Train 

University (大学) 

- Stocks for the Long Run(股史风云话投资(第3版散户投资正典)), by Jeremy Siegel (西格尔) 
  - Quality of Earnings(盈利的质量), by Thornton Oglove (0029226309) 
  - Investing in Small-Cap Stocks(投资小盘股), by Christopher Graja and Elizabeth Ungar 
  - The Book of Investing Wisdom(投资智慧书), by Peter Krass 
  - You Can Be a Stock Market Genius(你能成为股市天才), by Joel Greenblatt 

Grad School (研究院) 

- Break Up!(分裂), by Campbell, Koch & Sadtler 
  - Investment Gurus(投资大师), by Peter Tanous 
  - value Investing: A Balanced Approach(《价值投资:平稳途径》), by Martin Whitman 
  - value Investing: From Graham to Buffett and Beyond(价值投资:从格雷厄姆到巴菲特及其他), by Bruce Greenwald 
  - The Road to Serfdom(通往奴役之路), by F.A. Hayek (哈谢克) 


  Post-Doc 1: (博士后1) 
  - It's Earnings that Count(起作用的是盈利), Heiserman 
  - The Five Rules for Successful Stock Investing(股市真规则), Dorsey 
  - Inside Intuit(Intuit公司内幕), Taylor & Scroeder 
  - Pour Your Heart Into It(星巴克咖啡王国传奇), Schultz & Yang 
  - Investment Philosophies(投资哲学), Damodaran 

Post-Doc 2: (博士后2) 
  - Damodaran on Valuation(价值评估,另一个译本译名:论价值:投资与公司财务安全性分析), Damodaran 
  - Contrarian Investment Strategies: The Next Generation(反向投资策略:升级版), Dreman 
  - Moneyball(钱与球: 在不公平比赛中获胜的艺术), Lewis 
  - Investment Intelligence From Insider Trading (从内线交易中获得的投资情报) 
  - Financial Shenanigans(财务诡计), Schilit 

Post-Doc 3: (博士后3) 
  - Bull! A History of the Boom, 1982-1999,(牛市!1982-1999的市场繁荣历史) Mahir 
  - Wall Street: A History,(华尔街史) Geisst 
  - The Effective Executive(有效的管理者), Drucker (彼得.德鲁克) 
  - The Essential Drucker(管理大师德鲁克精华), Drucker (彼得.德鲁克) 
  - The Essays of Warren Buffet(巴菲特致股东的信:股份公司教程), Buffet 

Post-Doc 4: (博士后4) 
  - Letters to Shareholders: Warren Buffet (巴菲特致股东的信) 
  - Letters to Shareholders: Charlie Munger (芒格致股东的信) 
  - Bershire Hathaway Owners Manual(伯克夏所有者手册), Buffet (以上三个见伯克夏网站) 
  - The Dark Side of Valuation(深入价值评估), Damodaran
----
* 說明
標記格式之文字,前後各連續兩個相同符號

----
*範例
{{{''}}}粗體{{{''}}}
{{{==}}}刪除線{{{==}}} 
{{{__}}}底線{{{__}}}
{{{//}}}斜體{{{//}}}
上標 2{{{^^}}}3{{{^^}}}=8
下標 a{{{~~ij~~}}} = -a{{{~~}}}ji{{{~~}}}
{{{@@}}}強調{{{@@}}}
{{{@@color(red):}}}前景顏色{{{@@}}}
{{{@@bgcolor(red):}}}背景顏色{{{@@}}}

----
*顯示
''粗體''
==刪除線==
__底線__
//斜體//
上標 2^^3^^=8
下標 a~~ij~~ = -a~~ji~~
@@強調@@
@@color(red):前景顏色@@
@@bgcolor(red):背景顏色@@
----
很久前写的小说,太监了。

Chapter 1

今天的天气有些不一样。

24岁的里尔克端坐在马车上。颠簸的车厢穿过厚重的迷雾,趋身停靠在奥迈神学院的大门前,11月砭人肌肤的冷雨,将大地涂得一片阴沉。使得身披黑袍的教士,呆然垂向地面的堡垒上的旗,以及大天使路西菲尔塑像的一切的一切,看上去竟同佛伦派抑郁画幅的背景一致。罢了罢了,又是雷雨,他想。

马车刚一停下,十人高的铁门倏然打开,门后低声传出赞美诗的唱声,那是一个童声合唱团沉闷地高唱着圣徒阿约翰所作的《旗手与旅人》。那旋律一如既往地使里尔克难以自已。不,比往日还要强烈地摇撼着他的身心。

为了不使头脑涨裂,他弯下腰,双手捂脸,一动不动。很快,一个黑衣教士走来,问他要不要紧。他答说不要紧,只是有点晕。

“真的不要紧?”

“不要紧的,谢谢。”他说。教士于是莞尔一笑,转身走开。音乐变成了哈雷的圣歌。他仰起脸,望着路西菲尔的塑像——那个天使一边是黑色蝠翅一边白色羽翼,天使左手提着人头,人头是个中年人,眼睛外凸,嘴巴大张,惊愕的样子仿佛刚刚被斩首;右手提着冒火的圣剑,即是雷雨天依然熊熊无惧.天使没有眼白,他抬头的样子,又仿佛在凝望远方。里尔克不禁出神,浮想联翩。他想起在人生旅途中失却的东西——蹉跎的岁月,死去或离去的人们,无可追回的懊悔。

马车继续往前走,旅客收拾行李,从储物箱里取出衣物。而里尔克,仿佛置身于那道回廊之中之中,闻着红茶的芳香,感受着风的轻柔,谛听着鸟的鸣啭。那是4年前的秋天,他快满二十岁的时候。

身后的一位吟游诗人移了过来,在他身边坐下,问他是否需要帮助。

“可以了,谢谢。只是有点伤感。”里尔克微笑着说到。

“这在我也是常有的,很能理解您。”说罢,他低下头,拿上竖琴和行李,欠身下车,转给里尔克一张楚楚可人的笑脸。“祝您愉快,再会!”

“再会!”

即使在经历过六载沧桑的今天,他仍可真切地记起那片回廊的风景。连日温馨的霏霏轻雨,将夏日的尘埃冲洗无余。片片山坡叠青泻翠,抽穗的芒草在10月金风的吹拂下蜿蜒起伏,逶迤的薄云仿佛冻僵似的紧贴着湛蓝的天壁。凝眸远望,直觉双目隐隐作痛。清风拂过草地,微微卷起她满头秀发,旋即向杂木林吹去。树梢上的叶片簌簌低语,狗的吠声由远而近,若有若无,细微得如同从另一世界的入口处传来似的。此外便万籁俱寂了。耳畔不闻任何声响,身边没有任何人擦过。只见两只火团样的小鸟,受惊似的从草木从中蓦然腾起,朝杂木林方向飞去。安娜一边移动步履,一边向里尔克讲述水井的传奇。

说道安娜,得先说说里尔克是怎么遇见她的。

里尔克本是遥远的圣克莱尔帝国的一位公爵之子,但从生下来,脑袋里的魔力源泉便被封印。他出生的时候,便有位黑袍巫师出现在他家中,公爵之家突然出现这等人物,甚为不详,按理是要上报教廷。不过黑袍巫师露了一手,她双手上举,一道绿光刹那间笼罩整个公爵家的花园,花园中所有的鲜花便瞬间绽放,枯萎的植物焕发生机。

公爵知是大师,便将其请进屋内。黑袍巫师也不客气,说为公爵独子而来,又说公爵独子的魔力是被传说中的“六界无生术”给封印住了,这种魔法,公爵家中上上下下无一听说过,请教大师。大师说她便解释了,也无人可懂,又留下一个魔杖,说魔力虽被封印,依靠这魔杖也可引导一二。公爵家人又谢过后,黑袍巫师便随即消失。只剩一柄魔杖留存于此。

但里尔克依旧平平安安地长大了。这天,18岁的里尔克抬头看墙上的一张表:初阶法师录取名单,几十个名字,他看了几遍。没有自己,又落选了,这是第三次了。他摸了摸自己的下巴,出乎意料地感觉到了愤怒,这件事,几乎到了可笑的地步。他的魔法理论和实验成绩都是全院前十,但法力实在太差劲。他走出自己的炼金实验室,走在还显稀疏的落叶上。然后他忽然想到,因为这次落选,他再也不可能呆在魔法研修分院了。他没觉得那么难过,他想自己的封印无论如何也无法解开,也许真是上天赐予了他卓远的出生和才能,便要拿走一些东西才行。

里尔克五岁时就知道了自己的人生目标,他想成为一个大法师。就像大多数魔法学徒,他仰慕魔法王朝达拉希尔,站在魔法王朝顶端之一的银法师希罗多德、开创奥法的法神萨缪尔、咒术天才卡尔,并暗暗希望有一天自己的法术施展得能像这些大师一样好。至于怎么才算那种程度的“好”,他心里也没个谱。

里尔克连续三次递交初阶法师申请,三次都被拒绝,除了用魔杖才能施展出一些玩具法术,在实际施法中毫无建树,他因为脑袋里那可恶的连院长也解不开封印而与初阶法师失之交臂,无奈之下成了神学院的学生,好歹学点神术,弥补无法使用魔法的遗憾。

因为神学院对学生有出学院独自朝圣才能毕业的要求,这一年他踏上了未知旅途。什么才叫朝圣,他的老师说每个人朝圣的方式都不同,用经典《德米安》的一句话做了回答。

里尔克想他这辈子也忘不了这个素来柔和的老师念到这句话时,铿锵如山岳的语气:“对每个人而言,真正的职责只有一个:找到自我。他的职责知识找到自己的命运——而不是他人的命运——然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人逃避的方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧。”

但按常理说,学生如果选择直接徒步跨越千山万水到奥迈神学院去朝圣,一般是准能批准毕业,成为一个合格的牧师。

但里尔克却踏上了前去魔法王朝达拉希尔的路上。

那一年里尔克走出学院,好奇地想要飞起来。

他出城的第一站便是了无边际的永恒众森。

这个精灵们所居住的“永恒的梦想乡”仍然十分宏伟,尤其是在西北部,通往大雪山的路上,人烟稀少,只有这天的大树和一些古怪的小动物。

一些小刺猬样的生物扇起绿色的翅膀,像跳跃的火花似地飞向高远的半空树干。

透明的鱼从水里跳起来,身体里闪着飘飞的小星星。

即便是在沿湖那些村庄边,也很少见到人烟。连接着一簇簇高耸入云的大树,以及碧绿的湖水与瀑布。在一片片梯田中蜿蜒伸展着,而这地方不久之后就要被人类给买下来。规划成伐木和开采矿石的地方。

这些年来,处于永恒众森边缘处的精灵村庄和人类的通商越加频繁,精灵们虽聪明,但抵不过混迹多年人类商人和领主。一开始精灵只当人类乐善好施,时不时送些小玩意儿,特产来,轻易打开了通商之路。来回交易几年后,不知不觉精灵发现他们自己已经欠了人类一大笔债,几番谈判之下,那些湖水、瀑布、梯田和土地不得已成了抵债之物。

不过这并不关里尔克的事,他就像所有踌躇满志的年轻人一样,只不过选了一条不那么大众化的道路——踏过“永恒的梦想乡”,翻越大雪山诸部落、航行过黄金之海,造访魔法的王朝。

在白天,他根据所罗门图鉴里的生物说明,小心翼翼地采摘着人类能吃的蔬果,捕捉的无毒的肉食。黑夜里,布置好警戒所用的魔法阵,升起营火,火光蔓上眼眉,大地沉入无边的静谧,他在孤独的阅读中沉沉睡去。

他爱仰望大树,那些树怎么能长那么高,遮天蔽日,他在自己的国家从没见过,偶尔能从繁茂树枝间的书屋里看到几个精灵,他们最常干的事就是祈祷和阅读,比学院里的那些牧师们还要娴静。

精灵们的生活像山谷间风声的回音,永远以同一种姿势吹拂着自然,以同一种节奏,回响着同一种声音——直到他隐约听到身后传来的喘息声。

一时间,劲风从他耳边呼啦窜过,肩膀上被一团带刺的暖物压下,身体因为承受不住背后的重压而屈身倒下,他用力转过头来,终于看到了那个生物——一头雄壮的黑豹笑眯眯地俯视着他,带着七分好奇,三分轻蔑。道:

“告诉我你的名字,人类。”

Chapter 2

漫长的符号组合,现实感和虚幻感交错。德鲁伊————精灵之中修行自然魔法有成者会被冠以这个名号,这个词语的原本意思是“熟悉橡树的人”,他们常年游走于梦境与自然之间,以获得造物之神的青睐。

精灵相信万物有灵,每一件事物都有它的真名————火、云、风暴、闪电,但万物都想法设法隐藏它们的真名,因为念出这些事物的真名,便可以操纵它们。但总有些法师能够找到真名,将其凝结为咒语,掌控万物。

安娜依然记得她被父亲带到达拉希尔时的第一天。

那时达拉希尔还未被灌上魔法王朝之名,它是一个由巫师、灯神、炼金术士、妖精和特例独行者们在极北之地组成的城邦,城邦外终日大雪飘扬,传闻是冰雪女神和泰坦大战所造成的自然奇景,而城邦内则温暖如春,浩大的魔法结界将冰雪隔离在外。达垃希尔中最神秘的一派是离城邦更北边的大雪山上的云霄神殿,由一群奥术师和泰坦所建,常年云雾缭绕,因此得名。

安娜的父亲是德鲁伊公会的会长,素来和达拉希尔交情非浅。但见到那位大雪山的黑袍女巫时,这位会长却诚惶诚恐,眼神姿态无不恭敬。

安娜好奇地在神殿里乱逛,看到神殿穹顶上上奥术师和泰坦联军与神魔的在云端交战的壁画,安娜初知,凡间尚有生物可对战神魔。

“安娜,你愿意跟她相处吗?”会长的声音尽量柔和道。

安娜犹豫楞一下,轻声问道“你打得过她吗?”

会长的眼神瞬间清亮起来,可又黯淡下去,充满歉意道:“安娜,父亲无能。”

"承蒙照顾,女士。"安娜微笑着对女巫欠身一躬。

会长觉得的事态荒谬的女儿一点都不笨,从小就懂得谁拳头硬就跟谁混的,这难到不是一个优秀的精灵贵族才能与生俱来的品质吗?当然,这需要稍加修饰地解释成“贵族永远知道如何优雅地进退。”

女巫终于答应了会长,收下了安娜,但条件让她可自由进出梦境神龙为德鲁伊们建立的永恒之梦,并且在安娜生命的前两百年中随她处置,要一位大德鲁伊请求他人教授自己孩子自然魔法,某种程度上,可算作一种耻辱,但会长此刻却非常欣慰。他知道,当大雪山的魔法由安娜传给精灵之时,精灵们的实力便能又上一个台阶。

女巫笑道:“孩子,你放心,我会带给你一个毕生难忘的回忆,因为聪明的孩子往往有更加深刻的记忆力。”

德鲁伊会长眼睛眯得更紧,盯着黑袍女巫,几乎眯成一条缝。

于是,在其他同龄孩子无忧无虑地享受着父母的溺爱时,安娜以德鲁伊公会会长小姐的身份开始了地狱般的生活。她很明白,这场政治交易,对她极为有利但冷漠无情。

女巫站在为安娜准备的私人书房,伸出右手虚空燎乱地画了一个符号,一大堆厚重泛黄的书籍凭空跌落,她瞧了瞧目瞪口呆的安娜,问道:“识字吗?”

安娜在她面前不敢装傻,点点头。她早就得知父亲已经是整个精灵族数一数二的高手,既然都要求她,她不认为自己能搞定这个女巫。

女巫轻描淡写道:“好,一个月内,全背下来。”

安娜颤颤微微捧起一本足足五六斤的宽厚古籍,抹去灰尘,依稀认得出,这本书用在古精灵语中叫《咒语分析和系统设计》,传说是上古先知精灵所作,除了一些隐秘的文献中隐约提到过这本咒术中的“集大成之经典”,谁也没看到过真本;放下,第二本书叫《奥术论与控制方法论》,这次这本书听都没听说过。接下来几本差不多都是魔法原理性质的古书,要多晦涩就多晦涩,绝对比精灵族内所谓深奥的自然哲学要更加狗屁不通。她小脸僵硬道:“一个月?”

“做不到也没关系,一个小惩罚而已。我会把你丢到北荒林。”

顿了一下,女巫微笑着对着安娜解释道:“那里盛产冰属灵物,比如食人冰魔,遍地的嗜血冰蚁,我相信到时候你一定觉得背书是件很幸福的事情。”

那一年,她在无休止的背诵中度过。

………………

“安娜,今天你就默写一遍《魔法世界的三维构筑基础》吧。”女巫声音冷漠地像块硬铁。

看着这个她古井无波的表情,安娜不禁腹诽:这种女人一定没有男性会喜欢!

她无奈地拿出那本能当砖头砸人的羊皮书。

“我能看穿你心里在想什么,安娜,再加两遍《两个坐标的契约空间》。”黑袍女巫留下这句话后,便打开次元门,传送到人类的地界去了。

安娜看到她走后,趁机想在诅咒几句,但想到女巫给她解剖吸血鬼的那一幕时,她边拉出吸血鬼红色的心脏边道:吸血鬼的心脏能够反弹低级诅咒,我把它做成标本随身携带来防止这方面的骚扰,安娜就忍不住瑟瑟发抖。

“今天那个恶魔跑到人类那去了?”安娜抓了几个低级的学徒询问,“我来了十年她就没出过神殿。”

“听说是北边穹宇星界塔的星界法师今天去世,寻找转世之体,灵魂飞到人类那边去了。”一个学徒道。

“那关那个恶魔什么事?”

“本来也不关老师的事,不过老先知哈尔米卡大师说这次星界法师这次再转生已经严重破坏了盖亚平衡,超出盖亚的底线了,一定失败了。这次是六界之龙派人来破坏星界法师的转生。他可是老师老对头了。”

盖亚,是这个位面维持众生平衡的“位面潜意识”,任何破坏位面规则的都会被潜意识惩罚,惩罚的方式就让人倒大霉——走路掉坑里,入海遇暗流,飞天被雷劈。

一个月后,安娜隐约听说星界法师已死,无尽的魔力全被六界无生术封印在一个人类体内。女巫则因为受了重伤,闭关不出,没想到这一闭关就闭关了20年,她出关的第一天,就命令安娜去找那个被星界法师转生的人类,将他带来神殿。而标志则是当年她送给那个人类的启示法杖。

………………

面对眼前的低嚎的黑豹,里尔克虽从小虽说不是养尊处优,但也从未见过这等阵势。愕然半晌,当即便吓得大叫救命,声音回荡在空无一人的森林里。

他暗中握紧手中的魔杖,寻找机会想来个翻盘,不过魔杖立刻被黑豹给踩在脚下,鲜血从被踩裂的伤口里潺潺流出。

“喊吧喊吧,你喊得在大声也没人来救你。说,你是谁,你从哪儿来,要往哪里去?”黑豹凑近来,抓紧他的脖颈,他能清楚地闻到那獠牙深处散发出刺鼻的腥味和蠢蠢欲动的食欲。

里尔克听到这个哲学的终极问题,猛然间哭笑不得,连忙道:“我叫里尔克?路德维希,我从圣克莱尔来的朝圣者,要到达拉希尔去。”

黑豹哈哈一笑,一阵蓝光从豹头往后褪去,变成了一个玲珑婀娜的精灵少女,笑声像风中的银铃,肩膀抖动得花枝乱颤。

“看你的打扮不像朝圣者,倒像一名巫师。”里尔克埋在一身黑袍下,手持魔杖,头发散乱,的确像是一名巫师。

黑豹明显是一位德鲁伊,里尔克只在图书馆古老的文献中看到过这种善于变身和操纵自然力量的精灵法师,它们无疑是精灵之中最为尊贵的一个族群,能变化成数百种生物,最强者甚至能够化身为龙,虚空造梦,召唤风雨和闪电,引动地震和火山。

此刻站在他眼前的少女,让他感到了些许不真实,像从古老遗迹中出土的文物。

“愿自然护佑梦想乡,女士。”形势比人强,里尔克用德鲁伊们惯用的问候语,尊敬地问候道。面对这个看似不到20岁的少女,只有造物主才知道她到底是不是早就过了她100岁的生日。

鲜血默默地从他的手掌向下流淌。

德鲁伊虚空画圆,轨迹形成一朵绿色的蒲公英飘向他的手掌,裂开的伤口竟慢慢蠕动,恢复如初。简直神乎奇技,里尔克在学院里从没见过不用念咒,还有这么快的施法速度。在他的映像中除了学院的几个常年隐居不出老古董,还真没有谁的法术强过这么一手。

“哈哈哈哈,愿自然护佑梦想乡,朝圣者,你可以叫我安娜。”她爽朗一笑,几年之后,当他想起第一次看见这个柔绿色光芒上的面颊时,时光便从身后迅疾地拉回过去,让人难以自已。

他觉得有些事不一样。

天空哗啦地划过一群大雁,悠远的鸣叫让寂静变得更加寂静,可是……什么都没有改变。

安娜,这个名字仿佛在哪里听过,里尔克的脑海里突然蹦出个名号:“半神帕提侬女儿,八大德鲁伊之一,风之安娜?”,随即驱出这个可笑的想法。

永恒众森内有四大半神秉承着精灵的祖先们的使命守护着梦想乡,帕提侬便是其中之一,用人类对物种分类,帕提侬是个精灵德鲁伊,另外三大守护者则分别是精灵龙、独角神兽以及一只冰凤凰。如果说守护者是永恒众森的第一梯队的掌权者,那么风之安娜可以说处在整个精灵族权利阶层的第二梯队。

“别发楞了,凡人,朝圣开始了。”

安娜不由分说,一阵飓风将他卷向半空,“你的第一站,魔法王朝,达拉希尔。到站之前,你就是我的人了。”

Chapter 3

“我尝试做一个这样的自己,做一个更有知识、成就、智慧与情感的自我。

但我不自觉地就这样看我的生活————一半是奇迹,一半是疯狂。不如就接受这样一个现实:我无法控制人和一个重要事件。我的生活是一连串触礁和起航。没有到达,没有目的地;有的只是搁浅和触礁;又是一阵风,又是一波潮。”

里尔克被卷进半空,冰冷的空气呼啸着穿过双耳,遮蔽眼睛。达拉希尔,达拉希尔,梦幻般的名字。你会在那,你会在那。

“那种东西对我来说是一种不治之症。”

“什么东西?”

“绝望,理想的绝望就意味着对世界的绝望。我是幸运的,也是不的,”里尔克顿了一会儿,“命运给了我所有我想要的东西,但它没有给我最想要的东西。”

“凡事如此,得不到的才最想要。”

“不,老师,那不一样,我无法成为国王,也未曾寻求真理,但是那东西不一样。”

“我想我懂了你的意思。坚持吧,会有好事发生。”

他勉力睁开双眼,阳光强烈的如同一场爱情。

零落的草木四散,像圣克莱尔议员们的秃头上仅存的几根头发,那是永恒众森后方稀疏的山脉。

“安娜小姐,已经第三天了,还未飞出永恒众森,这种速度,到达拉希尔,恐怕得花上几个月的时间。”

“很快就会到了。”

正说着,一栋比所有高山还要巨大的树木从地平线的末端升起。他们飞近看,连一片树叶也有一人之高。盖亚之树,在精灵久远的史诗中,它由造物主的妻子,地母盖亚的右手所化。这颗树远看,的确像只擎天的大手,托举天空。

历史是流动、变化、尝试和摸索,层出不穷的标新立异、偶然意外,决定命运的实验和中大彩一般的成功机会。而永恒众森正好是那个印着中奖号码的绿色小球。精灵沉默于乱世之中,成为了最长寿最快乐的一个种族。

里尔克初次见到盖亚之树时,脑袋里像有某种东西干净利落地裂开了,他身上的某种东西的一部分脱落,里面粗糙、原始,就像冬虫遇到夏季,处男进了妓院,生活在地下的矮人坐上了航向无尽之海的冒险船。他想到了一句象征诗“我认出风暴,而激动如大海”

没等他回过神来,安娜已然带他进入了这颗神树的体内。

他们屈身走进大树内的阴暗的洞穴时,一股亲切祥和的温暖涌上周身。

“那是一大堆寄树为生的不知名的小精灵在大笑。”安娜解释道。

“它们每时每刻都这样子吗。”

“一般来说,是的,他们笑的时候会不停地释放这种温暖,就像黑夜里萤火虫总会发光。”

除此之外,里尔克还隐约可见记录着精灵历史的潮湿的壁画,徐徐攀行的藤蔓以及时不时穿过他们身体的光球状的灵魂。

“我们祖先们的灵魂,他们没有记忆和精神,但保留着前世的感情,盖亚之树以这种方式使他们永生。”

真是丰厚而活泼的历史。里尔克试图去抚摸那些灵魂,好奇地跟过去。没多久那些灵魂就飞跑了。

“走快些,快到次元门了。”充溢的魔力像潮水般漫过里尔克的身体,是的,它在那里,它在眼前。

里尔克举起启示法杖,释放出光芒,像举着火把的冒险者发现了梦寐的宝藏。

那是一团悬浮着七彩的庞大漩涡的大门,巨大的魔力不断地散发出来,排斥着靠近它的人。是他无法再迈步向前。

安娜又卷起一阵飓风,比上次的要大的多,充斥着整个洞穴。

“里尔克。”

“是?”

“跳起来。”

“跳起来?”他纵身一跃。

半空中,飓风形成的冲击波将他打进了七彩的大门。

“难道你就不能温柔一些吗……”
光线从红茶杯的侧面透射过去,闪着黄昏的光彩,仿佛一个朝天躺在手术台上的病人。我在昙华林写着无谓的随笔。自从GL第一次带我来之后,我每周末都会一个人来这边坐一下午,这是一周中能让我感到最安静的一个下午,希望以后也能带几个喜欢这种环境的朋友来,LHQ、于望、卷春儿还有胡桃。客人们一波波来又一波波去,往往是两个人或者几个人,聊着八卦,吹着牛逼。时不时发出噪动的笑声,间而弄乱我读书的心情。而在下午四点钟过后,客人渐渐少了,任我一个人独享着静默的客房,这时写起东西来往往快得多。

这家店,不知是叫奶茶店还是咖啡屋,斑驳的红色油漆沁在木门上像上个世纪那种专门贩卖小玩具的阁楼式的店家。其中有些细节就像在故意告诉你它只是存在于许多年前的一间回忆,而非恒存于世间的真实处所,我仍然不记得店名。像某一个角度,由上往下看着石棉瓦的屋檐上的繁茂枝叶拥抱着阁楼,温暖气味的阳光和阴影会洒入每个可趁的缝隙,令人想到母亲怀抱着襁褓中的婴儿,体温的暖流也能渗透进最封闭的角落。原本分散几处的相片,朝着一个集中收束的漩涡汇聚。穿透过扑灭而来的那些煮茶的厨具、石砖的街角、花盆、生锈的栏杆、小轿车的鸣声……像是某些日本青春片的预告:大片荒漠般的白雪中,正在徒步去上学的两个学生,或是落雨似的樱花下,一个新近搬家的女孩忽然认出这绝景而激动如大海,然后缓慢地沉淀下去,呈现出她们如泣如诉的告白、大楼上的的拥抱、或者是电车铁道旁说出互相伤害的话而声音却被急驶而过的火车巨啸而掩盖掉……

我单点了一杯修女红茶。穿着白色围裙,散着淡金色长发的女店员端上一个金属小锅,不一会儿将暗绿色的茶叶煮沸,装腔作势地伸出大拇指和食指,捏起滤茶器,这时她的眼神会格外认真,将小锅里的茶水一滴不漏地滤入杯中。可以闻到水蒸汽溶得空气里到处都是茶香味。

在这样歪歪斜斜的记忆里,我不安地等待她煮茶时,环视了店内,背后是一排书架,摆着顾客的留言或是留下的照片,留言分为两类,一类是利落帅气的行书,多用黑色钢笔所写,另一类是可爱的圆角字,多数时候还会在一旁加上一两个笑脸图;而照片则大多为黑白或lomo式的,平添几许爵士乐般的怀旧感。断断续续,婉转低回。店里也会很给气氛地放上爵士乐,让顾客欣赏那些留言、相片和小纪念品。

“这曲子真好听,放得是什么歌?”有次一个胖乎乎的男孩问。 “《Fly me to the moon》。”他身边的女孩和店员一起含笑答道。

Fill my heart with songs.
And let me sing for ever more.
You are all I long for.
All I worship and adore.
In other words,
please be true.
In other words,
I love you.
----
*說明
插入圖片[img[說明文字|檔案位置], 最後以]結束

----
*範例
{{{[}}}img[logo|images/mptwlogosml.gif{{{]]}}}

----
*顯示
[img[logo|images/mptwlogosml.gif]]

----
我的计算机基础一直不是很好,但应用却都能做,很多人说“算法与数据结构”,“编译原理”之类的内功多么重要,但我认为在进行良好的工程训练之前,这种所谓的“重要”是难以习得的。在此之前,我认为真正的基本功应该是控制软件复杂度的能力(甚至可以说是经验带来的直觉)、refacting、版本控制、排错能力、测试等,再在这些保证构建复杂软件基础上去习得那些内功才是最更价值的。推荐博文有《习而时学之的》

1)扫读——实用——理论循环

以前看数据库看的一本《数据库概论》,结果是讲数据库软件的设计理论,几大范式也讲得懵懵懂懂,无法理解。后来做项目,各种查询用多了再回过头来看《深入浅出SQL》才对数据库设计的几大范式真正有了理解。而且因为实用为目的,对书籍的选择都不一样。听说有的211学校老师上操作系统课时,直接弄了一个linux version 0.11的源代码给学生看,然后让他们照着做一个操作系统出来,一个学期就做这个,比一般的念书讲题考试有用多了。以后我学编译原理肯定也要自己做一个编译器出来,不然怎么能叫学过编译原理呢?

2)学画手记 学画画的学习进度偏慢,一年下来认真画的不超过30幅,但所幸每一幅都较上一副有极大的进步,如果给自己学画一年的成绩打个分的画,70分吧。主要是因为时间每分配好,平均一个月才画一到两幅,而且每次画了一段时间注意力就分散,很看心情和时机,这也是我长久以来做事不够专注的原因。对我这段时间画画学习最有用的有两份教程:《像艺术家一样思考》和《成都美术学院:陈惟老师:动漫插画12堂课》,推荐给想自学绘画的同学。 想画漫画的梦想慢慢走岔了,往插画那边发展去了,这样下去可不行。从下次开始认真练习风景速写,模仿和研究小田健的漫画吧。

3)少吹牛,特别是少在SNS装逼了,别人夸你几句你就自以为是了?白乌鸦,你那些花架子太可笑了,安静做你该做的事吧。

4)近来开始学习摄影了,测光、曝光、预升不熟悉,赶快熟悉呀。但别把摄影列进主要的学习任务,记住,摄影是为了你学习画画而服务的!

5)接下来把SQL,《美国纽约摄影学院摄影教材》,尼康官网的摄影教程看完。每天记得画五张速写,每次限定在五分钟以内。这就是这一周和下一周的任务!!英语,下下周按照奶爸的方法给自己列个长时间的学习计划吧,另外《控制力》是本不错的书,有时间就看并做笔记。

我发现每次写这类博客和日志都能让我整理好过去,重新定位目标,为我提供激发前进的能量,虽然效果不大,但坚持下来一定会很有成效吧。
 
2013-05-17 13:53:19
@峰哥何峰

创了一次业后,更深刻体会了“知易行难”。有关创业的各种文章、书、视频、甚至Stanford的课程,我看过忒多了。本来以为已经了然于胸。但行动起来仍然差了很多。

虽然如此,看过还是有好处的。以下是我所见过的,有关创业“知”的材料中比较好的。至于“行”的部分,诸君自己努力吧。

1)Paul Graham. 他的所有文章 (essays)都值得反复读读。你可以在他的个人主页找到这些文章:
http://www.paulgraham.com/articles.html 

如果你时间紧迫,想找重点的来读,我推荐:
how to get startup ideas: http://www.paulgraham.com/startupideas.html 
startup = growth: http://www.paulgraham.com/growth.html 
a word to the resourceful: http://www.paulgraham.com/word.html 
how to do what you love: http://www.paulgraham.com/love.html 

此外,他所经营的 Hacker News 也是了解最新技术、硅谷创业圈新闻的好地方:
https://news.ycombinator.com 

他创立的Y Combinator 是硅谷举足轻重的早期投资机构
http://ycombinator.com 

每年从YC毕业的创业团队几成硅谷风向标。


2)Steve Blank 是Stanford的教授,本人曾创业。他最先提出了 Lean Startup 的概念,现在已经成为硅谷创业的主流思想。Blank最著名的一本书是“four steps to the epiphany”。该书1-3章由Stanford大学提供免费阅读:
http://www.stanford.edu/group/e145/cgi-bin/winter/drupal/upload/handouts/Four_Steps.pdf 

如果你没有耐心读书的话,Blank 在美国免费公开课平台 Udacity 开了一门课程 “how to build a startup”. 其中包含了他对创业的思想大成。一门课学习下来也就差不多了:
https://www.udacity.com/course/ep245 

Blank近期在Harvard Business Review 写了一篇文章,综述 lean startup,值得一读:

http://hbr.org/2013/05/why-the-lean-start-up-changes-everything/ 

2.5)把 Lean Startup 系统化并发扬光大的人物是 Eric Ries. 他曾经上过 Blank 的课程。Ries 的书 “the lean startup” http://book.douban.com/subject/6779576/ 


3)哈佛商学院教授 Clayton Christensen 的书 “Innovator’s Dilemma” 据说是老乔生前唯一喜欢的商业书籍。Christensen 做过一个比喻:
化学刚刚成为一门学科的时候,能够调制化学成分的都仿佛是艺术家,凭着自己的经验和感觉来工作。但随后人们对化学的理解逐渐完备,标准化,普通人只要按照标准方法做,也可以胜任化学工程师了。
创业也类似。以前人们对创业的过程不熟悉,看那些创业、创新成功的人都仿佛是艺术家(比如老乔)。但当人们对创业成功失败的原因越来越清楚的时候,或许有更多的人,不需要老乔的才华横溢,也能够创业。
除了他的书之外,如果你没有时间,可以看看他的这个讲座
http://v.youku.com/v_show/id_XNTIzODQ4MTA4.html 


4)有关创业的讲座视频太多了,就不一一列绝了。我最近印象很深的是 Airbnb 创始人/CEO 的这个长达2个多小时的访谈。此人真是一个讲故事高手,并有各种创业中的 insight. Airbnb 是Graham 麾下YC中孵化出来的最成功公司。他们的曲折创业经历足以 inspire!
http://v.youku.com/v_show/id_XNTU0OTAzMTE2.html 


先写这么多吧。以后再补充。
举报 
----
* 說明
標題 用驚嘆號!起始一行, 越多驚嘆號階層越低

----
* 範例
 !標題 1
 !!標題 2
 !!!標題 3
 !!!!標題 4
 !!!!!標題 5

----
* 顯示
!標題 1
!!標題 2
!!!標題 3
!!!!標題 4
!!!!!標題 5
----
几年前,蔡康永在他主持的节目《今天不读书》上介绍了本很有意思的书——《革命前夕的摩托车之旅》。在大陆,这本书并不太出名。但书中主角是很多人(特别是老一辈)熟悉而且感兴趣的人物——切 格瓦拉。

书名顾名思义,主要内容大致是切 格瓦拉在南美革命前,他一连串丰盛而动人心魄的旅行生活。

切 ·格瓦拉出身于一个生活富足中产阶级,年轻的他聪慧、敏感、富有洞察力却放荡不羁,但是书中的那个他却不是不同于大众所认识的那个勇敢、高尚的革命家。

切·格瓦拉在南美各地穿梭游历时,过惯了富足生活的他强烈地苦恼于南美的贫乏和不公。他感到了强烈的反差。

相反,本身贫穷的人反倒很难感受到“吃窝窝头是不公平的,政府应该提供有足够营养的饭菜”。

不仅如此,切 格瓦拉对底层的人并不只存在单纯的同情和浅薄的感动,他能深入人心。有一次,他在旅途中碰见一个在路边无家可归老妪在街边乞讨时,忽然了解到在贫穷的家庭中还需要老人去挣钱养家。当老人无法工作时,就会成为家庭的负累。——感到那种老人祈求家人原谅的卑微愿望时,忽然击中了他的心脏。这样一种打击对本身很有诗人气质格瓦拉无疑是种精神上的地震。

从书里面更多的可以看到的是作为追寻者、旅行者、革命家、梦想家的切·格瓦拉,面对现实产生了不可调节的矛盾。

革命家需要不停地去革命、不断地去革命。革命需要的是“不可能”,但政治恰恰需要的是“可能”。政治是被称为妥协的艺术,但革命不能妥协。这种对立为切 格瓦拉辞去中国央行行长一职埋下了伏笔。他以心以血要去当他的“玻利瓦尔”,去不断地革命。

这一群人,如此地处于一种浪漫的、理想化的气质之中,旅者那样不断流浪、发现、再流浪;革命、成功、再革命。就算抵达成功的彼岸,回望灯火阑珊时,依旧无法卸下旅行和梦想的翅膀。

历史中,当文化、社会出现巨大变化的时候总会出现他们的身影:盲人或先知般齐齐涌向时代的潮头——美国的披头士、垮掉的一代;《in the road》的乔治 凯鲁亚克、《嚎叫》的艾伦 金斯堡、《荒野生存》、《发条橙》;日本的夏目漱石、太宰治,充斥着自由、毒品、摇滚的那一代;中国宣扬着个性化和现代化,冒出一群又一群的诗人、文人和摇滚乐队的八十年代,他们或是反对物质,倡导精神独立,宣扬着绝对自由,鄙夷现状,摇旗呐喊。滑稽、悲哀而自得其乐地绽放着青春的曙光,某些人物,不自觉地标记着一代人最珍贵最隐秘的梦想,星散四处,你不以为意,像在盛大海洋中永不苍老的精卫的嘶鸣。
一:什么是模式
人类有许多智慧是存在于右脑的,右脑有一个非常重要的功能就是模式的判断和识别(参考《非理性市场与蜥蜴式大脑思维》和《程序员的思维修炼》),善用这一点,常常能极大的提高自己的能力。为了说明模式的威力,举几个例子:

棋类高手,许多人提到过,象棋或者围棋高手和一般棋手最大的区别在于精通许多模式(套路),能够快速的进行判断(御立上资《战略思维的艺术》)

科学模型,特别是经济模型和金融建模,比如经济学中的循环流量图,将繁复多变的现实转变为可以理解和运算的抽象。

(这个例子来源于另一网友) 数学,有一个好友是安徽省的高考状元,我和他谈及学习,他印象最深刻的是数学,他说他在北大学习期间经常做数学家教,虽然隔了几年,但许多题目一看上去就知道其套路,甚至答案都记得,因为做的太多,许多题目他都做过至少二十遍。

(这个例子来源于另一网友)咨询,我刚开始做咨询的时候,非常崇尚逻辑,认定这是解决问题的最佳方法。但参与一些项目,发现并不顺手,《金字塔原理》也起不到什么作用,后来经人指点,发现BCG和麦肯锡推崇的假设思考的方法非常有效,假设思考的本质,就是一种右脑进行模式识别(假定关键问题/解决方案等),左脑进行逻辑推理(寻找数据/事实和论证)的过程。

模式究竟是什么?它是可以是一套达成目标的实现流程,也可以是表现现实的抽象形态。

理解模式,即是理解什么样的事物倾向于联系到一起或一起发生。如果我们知道世界运作的模式,这个世界就会成为一个可以预测和控制的地方。

二:理解趋势:
理解模式之前,首先谈论一下“趋势、倾向、大势”一系列概念,实际上,它们所代表的都是一个意思:趋势指的就是一个大概率事件,随着时间的推移表现出发生的频率:吸烟者更容易得肺癌、受教育程度越高越容易获得高工资。解释某个趋势:猜测、验证趋势的变量及其相互作用,解释谁对谁正在做什么、在哪里做、怎样做的,以及为什么会这样做,是获得“真正的模式”的第一个步骤。看到趋势和倾向,只是理解这些事情的第一步,一旦我们确认了这一趋势,我们就可开始尽可能地识洞察别出产生它的人类行动,如果我们意识不到这一趋势,我们可能也就意识不到,在它背后到底有有什么行动值得关注。

通过辨认趋向,我们也可以获得一种关于我们将会往哪里去的看法。如果公司持续裁员和让人失业,结果会怎样呢?如果贫富差距持续拉大,又会怎样呢?如果越来越多的人都感觉到无法控制自己的生活,又会怎样?这些趋势会导向哪里?将会出现什么新的问题?

一个普通人看新闻也许只会看到媒体告诉你的趋势,但你一旦拥有足够的行业知识或科学知识,你就能验证这些趋势,获取它的原因和变量—>继而理解趋势(预测未来),—> 开始从事那些被低估的事情,学习被低估的经验和技能,买入被低估的资产。

如何理解趋势?

最简单的方法是运用别人已经给出的“模式”,当然在大多数时候,它们仅仅是“模式的碎片”——诸如金融模型、前人经验、麦肯锡的方法论、或者只是自身的直觉……

这个问题十本书也不见得写得完,何况是一篇小小的博文。这方面的方法论可以推荐时寒冰的 大道至简系列 和 查理芒格的 穷查理宝典 ,除此之外,统计学、逻辑学、心理学的等等一些基本功都必不可少。

三:再说模式
模式究竟是什么?,就是存在于我们大脑中的那幅图像,当我们面临一个问题的时候,有经验的人常常有一个立刻的判断Malcolm Gladwell 《Blink》。这种直觉的判断基于经验,立体而真实,没有经验的人,大脑中反映的则常常是一些散乱的信号。经验产生的这幅图像,客观的看,未必是正确的,就算是正确,也未必是最优的。善于建立这种图像,不断的更新这种图像,不断的提升模式的应用能力,才能产生经验的快速积累效应。

模式的缺点是什么呢?右脑是很感性的,形象的说,这幅图像,本身是残缺的、模糊的、充满了谬论、错误和噪音,并随着时间的流逝,记忆不断的淡化。如果固守自己仅有的经验,固守心中那个未必正确的图像,最终,这幅图像,或者说你的经验,一定会过时,因此建立和更新比不可少

四:更新模式
所以我们发现,我们实际上要学习的是建立模式和更新模式的能力,而实际上,模式并非creat出来的,而是update出来的。一开始,我们只能看到问题的一个角度:经济学者用经济学和数学模拟世界,哲学家用逻辑学和哲学猜想世界,计算机专家用硬件软件编译世界……然后慢慢的我们看世界的角度越来越多,也越来越看不懂,总觉得面前有层膜在阻挡着真理,实际上不只有一层膜,前面是无数的谬论、二阶不可知以及持续变化的事实。随着我们看问题的角度越来越多,也越来越深,我们不断update世界观。

“完成总比完美好”——Facebook创始人马克·扎克伯格。

这句话的意思是说完美的模式不存于世界,我们只能不断地完成,不断update。归结到最后的能力,其实是update模式的能力。

任何一种能力都是知识和经验的有机组合。更新模式的能力同样如此,最简便的方法就是研究和学习,这里所说的研究学习和人们所认为不一样。在以往的应试教育中,所谓的学习大多是捉知识点,去放到一个恰当的问题里解决。但在完成了应试教育后,很多人甚至不知道什么是”问题”,更谈不上解决。也就是“二阶不可知”:你不知道自己不知道什么。在真实世界里,信息点甚至很多知识点都是杂乱而低效的,而理论面又是抽象的,不具体,无执行步骤,更谈不上执行力。

模式的作用在于探索哪些是真正的点,而哪些是干扰的。就算一个很有用的点,放错了模式有害无益。好比做销售的注重于产品的实现技术而非用户体验,体验不行技术再好也是白搭。

高效的模式的特征必定是低投入高产出,简单而迅速。
*說明
新起一行, 內容為'{{{-----}}}'
* 範例
 ----
*顯示
----
动态方法,是去控制静态方法的方法,让静态方法的方法名和方法的内容会根据参数的变化而变化,简而言之,他使方法成为了一个变量。让我们通过一个多态实例,来理解一下最简单的动态方法send。

所谓多态就是把不同种类的东西当作相同的东西来处理。比如我要打开三个箱子,打开的方法都不同,如果发出同样打开箱子的命令,3个人都会以自己的方法来打开箱子。在编程中,“打开箱子”的命令,我们称之为消息;而打开不同箱子的具体操作,我们称之为方法。

示范程序:
<html>
<pre>
def box1.open
  puts("open box")
end

def box2.open
     puts("open lock and open box")
end

def box3.open
      puts("It's a open box")
end
</pre>
</html>
这里设置了box1、box2、box3三个方法,但是当我们预先并不知道要调用哪一个box方法时,就会写出类似下列这样的when……case表达式,在面向对象中这种写法是较为丑陋的:

<html>
<pre>
def open(num)
  case num
  when 1;puts("open box")
  when 2;puts("open lock and open box")
  when 3;puts("It's a open box")
  when 4;puts("I can't open box")
  when 5;puts("Oh shit box!")
  end
end

box.open(1)
</pre>
</html>
如果我们加上使用send方法,就可以将case……when给解藕,使程序降低了耦合性,增加了拓展性。send方法的作用是将一个方法传递给对象,例:

<html>
<pre>
1.send(:+,2)
>3
</pre>
</html>
下面的例子是解藕def open(num)

<html>
<pre>
class Box
  def open_1
      puts "open box"
  end

  def open_2
      puts "open lock and open box"
  end

  def open_3
      puts "It's a open box"
  end

  def open_4
      puts "I can't open box"
  end

  def open_5
      puts "Oh shit box!"
  end  
end

box = Box.new

box.send("open_#{num}")
</pre>
</html>
这样,将num作为参数,用的open_num方法。 但这里需要注意的是,send方法太过强大,可以调用任何方法,包括私有方法,使用public_send方法将能够尊重方法接受者的隐私权,可以用它来代替send方法。

send方法的函数式用法
最近看了这篇四个程序员的一天觉得很有意思,照着写了个ruby的函数式写法:

<html>
<pre>
def foo(op, a, b)
    a.send(op, b)
end
</pre>
</html>
method_missing 方法是什么?
method_missing方法是Kernel模块(也就是Ruby中最底层模块)的一个方法。 什么时候调用method_missing方法? 当一个对象调用它并没有定义的方法时,就会调用method_missing方法,听起来有点绕口,让我们来看一个例子:

<html>
<pre>
obj = Object.new
obj.send :undefined_method
#NoMethodError: undefined method 'undefined_method' for object
</pre>
</html>
当我们看到 "=> NoMethodError: undefined method ‘undefined_method’ for object"这短消息的之前,obj发现它并没有定义undefined_method方法,于是Kernel#method_missing就会抛出一个NoMethodError响应。就像你让一个人去回忆并非发生在他身上的事情时,他搜索了自己的所有记忆,最终回答:“唔,我不记得了。” 如果我们重写某个对象的method_missing方法,它调用并不存在的方法时,就会自动调用method_missing方法,因此我们称它为幽灵方法。当你在死亡笔记上写并不存在的人名时,幽灵就会出来代替那个名字哦。 :) 再举个例子看看:

<html>
<pre>
def obj.method_missing(method, *args)
   puts "You called #{method}"
end
obj.unknow_method(1,2)

# You called unknow_method
</pre>
</html>
注意,这里一定要写*args这个形式参数,否则调用unknow_method时包含参数的话,会抛出“ArgumentError: wrong number of arguments”的错误。

method_missing 的作用是什么?
我们再来举个例子看看method_missing 方法的强大之处:

<html>
<pre>
class Box
  def method_missing(method, *args, &amp;block)
      return
      return
      super
  end
end
</pre>
</html>
这里的super是调用祖先类的同名方法,因为只有Kernel 存在method_missing,它将最后调用Kernel#method_missing 如果说send方法是用于动态调用已经存在的方法,那么method_missing方法则是去动态生成并不存在的方法。那么我们能否动态地改变已存在的方法的内部信息呢?直接执行obj.method;puts “modified";end就行了。 :)

什么时候使用method_missing方法?
method_missing方法一般用于missing同一类命名模式中的方法。 例子:
<html>
<pre>
TEMPLATE_CALL_METHODS = [:email_template, :header_menu_msg_template, :recent_activity_msg_template]

def method_missing(str, *args)
    if TEMPLATE_CALL_METHODS.include? str
       @viewer = args.shift
       template = "#{str}_for_#{operation_name}"
       if respond_to? template
         send template
       else
         send email_template_name
       end
     else
       super
     end
end
</pre>
</html>
而不要这样单纯把method_missing方法用作一个防止抛异常方法。错误的用法:

<html>
<pre>
CATCH_METHODS = [:profile, :email, :full_name]
def method_missing(str, *args)
    if CATCH_METHODS.include? str
        nil
    else
        super
    end
end
</pre>
</html>
这时候可以用到用define_method:

<html>
<pre>
class Test;end
Test.class_eval do
    [:profile, :email, :full_name].each do |method_name|
        define_method method_name do
            nil
        end
    end
end
</pre>
</html>
*object
*function
*contructors
*prototype

Object是顶层对象,也是一个函数,任何在Object scope内创建的对象,都是一个Object的prototype.
example:
{{{
   var a = { p: 'test' }
   a.constructor()
   //Object {}
   a.__proto__
   //Object {}
   //此时a是Object function的prototype
}}}

第1层 菜鸟

第1层楼属于地板层,迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解 计算机专业的一些基础知识,掌握一门基本的编程语言如C/C++,或者Java,或者 JavaScript,…,均可入门迈进这层。

在这层上,中国有着绝对的优势,除了从计算机专业毕业的众多人数外,还有大量的通 信、自动化、数学等相关专业的人士进入这一行,此外还有众多的其他专业转行的人士,人 数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。 没有多少人愿意一辈子做菜鸟,因为做"菜鸟"的滋味实在是不咋的,整天被老大们吆喝 着去装装机器,搭建一下测试环境,或者对照着别人写好的测试用例做一些黑盒测试,好一 点的可以被安排去写一点测试代码。当然如果运气"好"的话,碰到了国内的一些作坊式的公 司,也有机会去写一些正式的代码。

所以,菜鸟们总是在努力学习,希望爬更高的一层楼去。

第2层 大虾

从第1层爬到第2层相对容易一些,以C/C++程序员为例,只要熟练掌握C/C++编程语 言,掌握C标准库和常用的各种数据结构算法,掌握STL的基本实现和使用方法,掌握多 线程编程基础知识,掌握一种开发环境,再对各种操作系统的API都去使用一下,搞网络 编程的当然对socket编程要好好掌握一下,然后再学习一些面向对象的设计知识和设计模 式等,学习一些测试、软件工程和质量控制的基本知识,大部分人经过2~3年的努力,都 可以爬到第2层,晋升为"大虾"。

中国的"大虾"数量和"菜鸟"数量估计不会少多少,所以这层上仍然远领先于西方。 大虾们通常还是有些自知之明,知道自己只能实现一些简单的功能,做不了大的东西, 有时候还会遇到一些疑难问题给卡住,所以他们对那些大牛级的人物通常是非常崇拜的,国 外的如Robert C. Martin、Linus Torvalds,国内的如求伯君、王志东等通常是他们崇拜的对 象。其中的有些人希望有一天也能达到这些大牛级人物的水平,所以他们继续往楼上爬去。

第3层 牛人 由于"大虾"们经常被一些疑难问题给卡住,所以有了"大虾"们只好继续学习,他们需要 将原来所学的知识进一步熟练掌握,比如以熟练掌握C++编程语言为例,除了学一些基础性 的C++书籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外, 更重要的是需要了解C++编译器的原理和实现机制,了解操作系统中的内部机制如内存管 理、进程和线程的管理机制,了解处理器的基础知识和代码优化的方法,此外还需要更深入 地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制方法,对 各种设计方法有更好的理解等。

学习上面说的这些知识不是一挥而就的,不看个三五十本书并掌握它是做不到的。以数 据结构算法来说,至少要看个5~10本这方面的著作;以软件设计来说,光懂结构化设计、 面向对象设计和一些设计模式是不够的,还要了解软件架构设计、交互设计、面向方面的设 计、面向使用的设计、面向数据结构算法的设计、情感化设计等,否则是很难进到这个楼层 的。

当然除了上面说的知识外,大虾们还需要去学习各种经验和技巧。当然这点难不倒他们, 现在出版的书籍众多,网络上的技术文章更是不胜数,然后再去各种专业论坛里泡一泡,把 这些书籍和文章中的各种经验、技能、技巧掌握下来,再去学习一些知名的开源项目如 Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下,菜 鸟和大虾们会觉得你很"牛",你也就爬到了第3层,晋升为"牛人"了。

看了上面所讲的要求,可能有些大虾要晕过去了,成为牛人要学这么多东西啊!要求是 不是太高了?其实要求一点也不高,这么点东西都掌握不了的话,怎么能让别人觉得你"牛"呢?

需要提一下的是,进入多核时代后,从第2层爬到第3层增加了一道多核编程的门槛。 当然要迈过这道门槛并不难,已经有很多前辈高人迈进了这道门槛,只要循着他们的足迹前 进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接: http://www.threadingbuildingblocks.org/ ),然后上Intel的博客 (http://software.intel.com/zh-cn/blogs/ )和多核论坛 (http://forum.csdn.net/Intel/IntelMulti-core/ )去看看相关文章,再买上几本相关的书籍学习 一下。

在国内, 一旦成为"牛人",通常可以到许多知名的公司里去,运气好者可以挂上一个 架构师的头衔,甚至挂上一个"首席架构师"或者"首席xx学家"的头衔也不足为奇。有不少 爬到这层的人就以为到了楼顶了,可以眼睛往天上看了,开始目空一切起来,以为自己什么 都可以做了,什么都懂了,经常在网络上乱砸板砖是这个群体的最好写照。由此也看出,国 内的牛人数量仍然众多,远多于西方的牛人数量,在这层上仍然是领先的。

也有不少谦虚的"牛人",知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴 子上树一样,往下看是笑脸,往上看是屁股。为了多看笑脸,少看屁股,他们并没有在此停 步不前,而是继续寻找到更上一层的楼梯,以便继续往上爬。

第4层 大牛

从第3层爬到第4层可不像上面说过的那几层一样容易,要成为大牛的话,你必须要能 做牛人们做不了的事情,解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统,不 会写编译器,不懂得TCP/IP协议的底层实现,如果你有能力将其中的任何一个实现得象模 象样的话,那么你就从牛人升级为"大牛"了。

当然,由于各个专业领域的差别,这里举操作系统、编译器、TCP/IP协议只是作为例 子,并不代表成为"大牛"一定需要掌握这些知识,以时下热门的多核编程来说,如果你能比 牛人们更深入地掌握其中的各种思想原理,能更加自如的运用,并有能力去实现一个象开源 项目TBB库一样的东西,也可以成为"大牛",又或者你能写出一个类似Apache一样的服务 器,或者写出一个数据库,都可以成为"大牛"。

要成为"大牛"并不是一件简单的事情,需要付出比牛人们多得多的努力,一般来说,至 少要看过200~400本左右的专业书籍并好好掌握它,除此之外,还得经常关注网络和期刊杂 志上的各种最新信息。

当"牛人"晋升为"大牛",让"牛人们"发现有比他们更牛的人时,对"牛人"们的心灵的震 撼是可想而知的。由于牛人们的数量庞大,并且牛人对大虾和菜鸟阶层有言传身教的影响, 所以大牛们通常能获得非常高的社会知名度,几乎可以用"引无数菜鸟、大虾、牛人竞折腰" 来形容,看看前面提过的Linus Torvalds等大牛,应该知道此言不虚。

虽然成为"大牛"的条件看起来似乎很高似的,但是这层楼并不是很难爬的一层,只要通 过一定的努力,素质不是很差,还是有许多"牛人"可以爬到这一层的。由此可知,"大牛"这 个楼层的人数其实并不像想像的那么少,例如比尔·盖茨之类的人好像也是属于这一层的 由于"大牛"这层的人数不少,所以也很难统计除到底是中国的"大牛"数量多还是西方的 大牛数量多?我估计应该是个旗鼓相当的数量,或者中国的"大牛"们会更多一些。

看到这里,可能会有很多人会以为我在这里说瞎话,Linus Torvalds写出了著名的Linux 操作系统,我国并没有人写出过类似的东西啊,我国的"大牛"怎么能和西方的比呢? 不知大 家注意到没有,Linus Torvalds只是写出了一个"象模象样"的操作系统雏形,Linux后来真正 发展成闻名全球的开源操作系统期间,完全是因为许多支持开源的商业公司如IBM等,派 出了许多比Linus Torvalds更高楼层的幕后英雄在里面把它开发出来的。

可能有些菜鸟认为Linus Torvalds是程序员中的上帝,不妨说个小故事: Linus,Richard Stallman和Don Knuth(高德纳)一同参加一个会议。 Linus 说:"上帝说我创造了世界上最优秀的操作系统。"

Richard Stallman自然不甘示弱地说:"上帝说我创造了世界上最好用的编译器。" Don Knuth一脸疑惑的说:"等等,等等,我什么时候说过这些话?"

由此可以看出,Linus Torvalds的技术水平并不像想像中那么高,只是"牛人"和"大虾" 觉得"大牛"比他们更牛吧了。在我国,有一些当时还处于"大虾"层的人物,也能写出介绍如 何写操作系统的书,并且书写得非常出色,而且写出了一个有那么一点点象模象样的操作系 统来。我想中国的"大牛"们是不会比西方差的,之所以没有人写出类似的商业产品来,完全 是社会环境的原因,并不是技术能力达不到的原因。

"大牛"们之所以成为大牛,主要的原因是因为把"牛人"给盖了下去,并不是他们自己觉 得如何牛。也许有很多菜鸟、大虾甚至牛人觉得"大牛"这层已经到顶了,但大多数"大牛"估 计应该是有自知之明的,他们知道自己现在还没有爬到半山腰,也就勉强能算个半桶水的水 平,其中有些爬到这层没有累趴下,仍然能量充沛,并且又有志者,还是会继续往更上一层 楼爬的。

看到这里,也许有些菜鸟、大虾、牛人想不明白了,还有比"大牛"们更高的楼层,那会 是什么样的楼层?下面就来看看第5层楼的奥妙。

第5层 专家

当大牛们真正动手做一个操作系统或者类似的其他软件时,他们就会发现自己的基本功 仍然有很多的不足。以内存管理为例,如果直接抄袭Linux或者其他开源操作系统的内存管 理算法,会被人看不起的,如果自动动手实现一个内存管理算法,他会发现现在有关内存管 理方法的算法数量众多,自己并没有全部学过和实践过,不知道到底该用那种内存管理算法。 看到这里,可能有些人已经明白第5层楼的奥妙了,那就是需要做基础研究,当然在计 算机里,最重要的就是"计算"二字,程序员要做基础研究,主要的内容就是研究非数值"计 算"。

非数值计算可是一个非常庞大的领域,不仅时下热门的"多核计算"与"云计算"属于非数 值计算范畴,就是软件需求、设计、测试、调试、评估、质量控制、软件工程等本质上也属 于非数值计算的范畴,甚至芯片硬件设计也同样牵涉到非数值计算。如果你还没有真正领悟 "计算"二字的含义,那么你就没有机会进到这层楼来。

可能有人仍然没有明白为什么比尔·盖茨被划在了大牛层,没有进到这层来。虽然比尔·盖 茨大学未毕业,学历不够,但是家有藏书2万余册,进入软件这个行业比绝大部分人都早, 撇开他的商业才能不谈,即使只看他的技术水平,也可以算得上是学富五车,顶上几个普通 的计算机软件博士之和是没有问题的,比起Linus Torvalds之类的"大牛"们应该技高一筹才 对,怎么还进不了这层楼呢?

非常遗憾的是,从Windows操作系统的实现来看,其对计算的理解是很肤浅的,如果 把Google对计算方面的理解比做大学生,比尔·盖茨只能算做一个初中生,所以比尔·盖茨永 远只能做个大牛人,成不了"专家"。

看到这里,也许国内的大牛们要高兴起来了,原来比尔·盖茨也只和我等在同一个层次, 只要再升一层就可以超越比尔·盖茨了。不过爬到这层可没有从"牛人"升为"大牛"那么简单, 人家比尔·盖茨都家有2万多册书,让你看个500~1000本以上的专业书籍并掌握好它应该要 求不高吧。当然,这并不是主要的条件,更重要的是,需要到专业的学术站点去学习了,到 ACM,IEEE,Elsevier,SpringerLink,SIAM等地方去下载论文应该成为你的定期功课,使 用Google搜索引擎中的学术搜索更是应该成为你的日常必修课。此外,你还得经常关注是 否有与你研究相关的开源项目冒出来,例如当听到有TBB这样针对多核的开源项目时,你 应该第一时间到Google里输入"TBB"搜索一下,将其源代码下载下来好好研究一番,这样 也许你的一只脚已经快迈进了这层楼的门槛。

当你象我上面说的那样去做了以后,随着时间的推移,总会有某天,你发现,在很多小 的领域里,你已经学不到什么新东西了,所有最新出来的研究成果你几乎都知道。此时你会 发现你比在做"牛人"和"大牛"时的水平不知高出了多少,但是你一点也"牛"不起来,因为你 学的知识和思想都是别人提出来的,你自己并没有多少自己的知识和思想分享给别人,所以 你还得继续往楼上爬才行。

我不知道国内的"专家"到底有多少,不过有一点可以肯定的是,如果把那些专门蒙大家 的"砖家"也算上的话,我们的砖家比西方的要多得多。

第6层 学者

当"专家"们想继续往上一层楼爬时,他们几乎一眼就可以看到楼梯的入口,不过令他们 吃惊的是,楼梯入口处竖了一道高高的门槛,上面写着"创新"二字。不幸的是,大多数人在 爬到第5层楼时已经体能消耗过度,无力翻过这道门槛。

有少数体能充足者,可以轻易翻越这道门槛,但是并不意味着体力消耗过度者就无法翻 越,因为你只是暂时还没有掌握恢复体能的方法而已,当掌握了恢复体能的方法,将体能恢 复后,你就可以轻易地翻越这道门槛了。

怎么才能将体能恢复呢?我们的老祖宗"孔子"早就教导过我们"温故而知新",在英文 里,研究的单词是"research",其前缀"re"和"search"分别是什么意思不用我解释吧。或许有 些人觉得"温故而知新"和"research"有些抽象,不好理解,我再给打个简单的比方,比如你在 爬一座高山,爬了半天,中途体力不支,怎么恢复体力呢?自然是休息一下,重新进食一些 食物,体力很快就可以得到恢复。

由此可知,对体能消耗过度者,休息+重新进食通常是恢复体能的最佳选择。可惜的是, 国内的老板们并不懂得这点,他们的公司里不仅连正常国家规定的休息时间都不给足,有些 公司甚至有员工"过劳死"出现。所以国内能翻越"创新"这道门槛的人是"少之又少",和西方 比起来估计是数量级的差别。

再说说重新进食的问题,这个重新进食是有讲究的,需要进食一些基础性易消化的简单 食物,不能进食山珍海味级的复杂食物,否则很难快速吸收。以查找为例,并不是去天天盯 着那些复杂的查找结构和算法进行研究,你需要做的是将二分查找、哈希查找、普通二叉树 查找等基础性的知识好好地复习几遍。

以哈希查找为例,首先你需要去将各种冲突解决方法如链式结构、二次哈希等编写一遍, 再试试不同种类的哈希函数,然后还需要试试在硬盘中如何实现哈希查找,并考虑数据从硬 盘读到内存后,如何组织硬盘中的数据才能快速地在内存中构建出哈希表来,…,这样你可 能需要将一个哈希表写上十几个不同的版本,并比较各个版本的性能、功能方面的区别和适 用范围。

总之,对任何一种简单的东西,你需要考虑各种各样的需求,以需求来驱动研究。最后 你将各种最基础性的查找结构和算法都了然于胸后,或许某天你再看其他更复杂的查找算 法,或者你在散步时,脑袋里灵光一现,突然间就发现了更好的方法,也就从专家晋升为" 学者"了。

学者所做的事情,通常都是在前人的基础上,进行一些小的优化和改进,例如别人发明 了链式基数排序的方法,你第1个发现使用一定的方法,可以用数组替代链表进行基数排序, 性能还能得到进一步提高。

由于学者需要的只是一些小的优化改进,因此中国还是有一定数量的学者。不过和国外 的数量比起来,估计少了一个数量级而已。 也许有人会觉得现在中国许多公司申请专利的数量达到甚至超过西方发达国家了,我们

的学者数量应该不会比他们少多少。因此,有必要把专利和这里说的创新的区别解释一下。 所谓专利者,只要是以前没有的,新的东西,都可以申请专利;甚至是以前有的东西, 你把他用到了一个新的领域的产品里去,也可以申请专利。比如你在房子里造一个水泥柱子, 只要以前没有人就这件事申请专利,那么你就可以申请专利,并且下次你把水泥柱子挪一个 位置,又可以申请一个新的专利;或者你在一个柜子上打上几个孔,下次又把孔的位置改一 改,…,均可申请专利。

这层楼里所说的创新,是指学术层面的创新,是基础研究方面的创新,和专利的概念是 完全不同的,难度也是完全不同的。你即使申请了一万个象那种打孔一类的专利,加起来也 够不到这层楼里的一个创新。

当你爬到第6层楼时,你也许会有一种突破极限的快感,因为你终于把那道高高的写着 "创新"二字的门槛给翻过去了,实现了"0"的突破。这时,你也许有一种"独上高楼,欲望尽 天涯路"的感觉,但是很快你会发现看到的都是比较近的路,远处的路根本看不清楚。如果 你还有足够的体力的话,你会想爬到更高一层的楼层去。

第7层 大师

从第6层楼爬到第7层楼,并没有多少捷径可走,主要看你有没有足够的能量。你如果 能象Hoare一样设计出一个快速排序的算法;或者象Eugene W. Myers一样设计出了一个用 编辑图的最短路径模型来解决diff问题的算法;或者象M.J.D. Powell一样提出了一个能够 处理非线性规划问题的SQP方法;或者你发现基于比较的排序算法,它的复杂度下界为 O(NLogN);或者你发现用栈可以将递归的算法变成非递归的;或者你设计出一个红黑树或 者AVL树之类的查找结构;或者你设计出一个象C++或Java一样的语言;或者你发明了 UML;…,你就爬到了第7层,晋升为"大师"了。

上面举的这些例子中,其中有些人站的楼层比这层高,这里只是为了形象说明而举例他 们的某个成就。从上面列出的一些大师的贡献可以看出,成为大师必须要有较大的贡献。首 先解决问题必须是比较重要的,其次你要比前辈们在某方面有一个较大的提高,或者你解决 的是一个全新的以前没有解决过的问题;最重要的是,主要的思路和方法必须是你自己提供 的,不再是在别人的思路基础上进行的优化和改进。

看了上面这些要求,如果能量不够的话,你也许会觉得有些困难,所以不是每个人都能 成为"大师"的。中国软件业里能称得上是"大师"的人,用屈指可数来形容,估计是绰绰有余。 值得一提得是,国外的"大师"就象我们的"大牛"一样满天飞的多。

我把我猜测本国有可能进到这层楼的大师列一下,以起个抛砖引玉的作用。汉王的"手 写识别"技术由于是完全保密的,不知道它里面用了什么思想,原创思想占的比重有多少, 因此不知道该把它划到这层楼还是更高一层楼去。原山东大学王小云教授破解DES和MD5 算法时,用到的方法不知道是不是完全原创的,如果是的话也可进到这层楼来。

陈景润虽然没有彻底解决哥德巴赫猜想,但他在解决问题时所用的方法是创新的,因此 也可以进到这层楼来。当然,如果能彻底解决哥德巴赫猜想,那么可以算到更高的楼层去。 求伯君和王志东等大牛们,他们在做WPS和表格处理之类的软件时,不知是否有较大 的原创算法在里面,如果有的话就算我错把他们划到了大牛层。由于所学有限,不知道国内 还有那些人能够得上"大师"的级别,或许有少量做研究的教授、院士们,可以达到这个级别, 有知道的不妨回个帖子晾一晾。

鉴于"大师"这个称号的光环效应,相信有不少人梦想着成为"大师"。或许你看了前面举 的一些大师的例子,你会觉得要成为大师非常困难。不妨说一下,现在有一条通往"大师" 之路的捷径打开了,那就是多核计算领域,有大量的处女地等待大家去挖掘。 以前在单核时代开发的各种算法,现在都需要改写成并行的。数据结构与算法、图像处 理、数值计算、操作系统、编译器、测试调试等各个领域,都存在大量的机会,可以让你进

到这层楼来,甚至有可能让你进到更高一层楼去。

第8层 科学家

科学家向来都是一个神圣的称号,因此我把他放在了“大师”之上。要成为科学家,你的 贡献必须超越大师,不妨随便举一些例子。

如果你象Dijkstra一样设计了ALGOL语言,提出了程序设计的三种基本结构:顺序、 选择、循环,那么你可以爬到第8层楼来。顺便说一下,即使抛开这个成果,Dijkstra凭他 的PV操作和信号量概念的提出,同样可以进到这层楼。 如果你象Don Knuth一样,是数据结构与算法这门学科的重要奠基者,你也可以进到这 层楼来。当然,数据结构和算法这门学科不是某个人开创的,是许多大师和科学家集体开创 的。

如果你象巴科斯一样发明了Fortran语言,并提出了巴科斯范式,对高级程序语言的发 展起了重要作用,你也可以进到这层楼来。 或者你象Ken Thompson、Dennis Ritchie一样发明了Unix操作系统和功能强大、高效、 灵活、表达力强的C语言,对操作系统理论和高级编程语言均作出重大贡献,那么你也可 以进到这层楼来。

或者你有Frederick P. Brooks一样机会,可以去领导开发IBM的大型计算机System/360 和OS/360操作系统,并在失败后反思总结,写出《人月神话》,对软件工程作出里程碑式 的贡献,你也可以进到这层来。

或者你提出了面向对象设计的基本思想,或者你设计了互联网的TCP/IP协议,或者你 象Steven A.Cook一样奠定NP完全性的理论基础,或者你象Frances Allen一样专注于并行 计算来实现编译技术,在编译优化理论和技术取得基础性的成就,…,均可进入这层。 当然,如果你发明了C++语言或者Java语言,你进不到这层来,因为你用到的主要思 想都是这层楼中的科学家提出的,你自己并没有没有多少原创思想在里面。

看了上面列出的科学家的成就,你会发现,要成为“科学家”,通常要开创一门分支学科, 或者是这个分支学科的奠基者,或者在某个分支学科里作出里程碑式的重大贡献。如果做不 到这些的话,那么你能象Andrew C. Yao(姚期智)一样在对计算理论的多个方向如伪随机 数生成,密码学与通信复杂度等各个方向上作出重要贡献,成为集大成者,也可以进入这层 楼。

成为“科学家”后,如果你有幸象Dijkstra一样,出现在一个非常重视科学的国度。当你 去世时,你家乡满城的人都会自动地去为你送葬。不过如果不幸生错地方的话,能不挨“板 砖”估计就算万幸了。

从上面随便举的一些例子中,你可能能猜到,西方科学家的数量是非常多的,于是你会 想中国应该也有少量的科学家吧?我可以很负责任地告诉你一个不幸的结果,中国本土产生 的科学家的数量为0。目前在国内,软件领域的唯一的科学家就是上面提过的姚期智,还是 国外请回来的,并不是本土产生的。

可能你不同意我说的本土科学家数量为0的结论,因为你经常看到有许多公司里都有所 谓“首席XX科学家”的头衔。我想说的是,这些所谓的“首席XX科学家”都是远远够不到这 层楼的级别的,有些人的水平估计也就是一个“牛人”或“大牛”的级别,好一点的最多也就一 个“学者”的级别。尤其是那些被称作“首席经X学家”的,基本上可以把称号改为“首席坑大 家”。

虽然我国没有人能爬到这层楼上来,但是西方国家仍然有许多人爬到了比这层更高的楼 上。如果要问我们比西方落后多少?那么可以简单地回答为:“落后了三层楼”。下面就来看 看我们做梦都没有到过的更高一层楼的秘密。

第9层 大科学家

进入这层楼的门槛通常需要一些运气,比如某天有个苹果砸到你头上时,你碰巧发现了 万有引力,那么你可以进到这层楼来。当然,万有引力几百年前就被人发现了,如果你现在 到处嚷嚷着说你发现了万有引力,恐怕马上会有人打110,然后警察会把你送到不正常人类 的聚集地去。因此,这里举万有引力的例子,只是说你要有类似的成就才能进到这层楼来。 牛顿发现万有引力定律开创了经典物理运动力学这门学科,如果你也能开创一门大的学 科,那么你就从科学家晋升为“大科学家”。比如爱因斯坦创建了相对论,从一个小职员变成 了大科学家。当然大科学家可远不止这两人,数学界里比物理学界更是多得多,如欧几里得 创建了平面几何,笛卡尔开创解析几何,还有欧拉、高斯、莱布尼茨等数不清的人物,跟计 算相关的大科学家则有图灵等人。

从上面列出的一些大科学家可以发现,他们的成就不仅是开创了一个大的学科,更重要 的是他们的成就上升到了“公理”的层面。发现公理通常是需要一点运气的,如果你的运气不 够好的话,另外还有一个笨办法也可以进到这层楼来,那就是成为集大成者。例如冯·诺伊 曼,对数学的所有分支都非常了解,许多领域都有较大的贡献,即使撇开他对计算机的开创 贡献,成为大科学家照样绰绰有余。

当然,程序员们最关心的是自己有没有机会变成大科学家。既然计算机这门大学科的开 创性成果早就被冯·诺伊曼、图灵等人摘走了,那么程序员们是不是没有机会变成大科学家 了呢?我们的古人说得好:“江山代有才人出,各领风骚数百年”,现在在计算机这门学科下 面诞生了许多非常重要的大的分支,所以你还是有足够的机会进到这层楼的。 如果你能够彻底解决自然语言理解(机器翻译)这门学科中的核心问题, 或者你在人 工智能或者机器视觉(图像识别)方面有突破性的发现,那么你同样可以轻易地晋升为“大 科学家”。这样当某天你老了去世时,或许那天国人已经觉醒,你也能享受到如Dijkstra一 样的待遇,有满城甚至全国的人去为你送葬。

现在还剩下另外一个大家感兴趣的问题没有讨论,那就是这层中已经出现了牛顿、爱因 斯坦、高斯等我们平常人都认为是顶级的科学家,是不是这层已经是楼顶了呢?相信还记得 本文标题的人应该知道现在仅仅是第9层,还有第10层没有到达呢。可能不少人现在要感 到困惑了,难道还有人站在比牛顿、爱因斯坦、高斯等人更高的楼层上?

这个世界上确实存在可以用一只手的手指数得清的那么几个人,他们爬到了第10层楼 上。因此,第10层楼不是虚构的,而是确实存在的。如果对此有疑惑或者认为我在胡诌一 番的话,那么不妨继续往下看下去,窥一下第10层楼的秘密。

第10层 大哲

看了这层楼的名字“大哲”,可能不少人已经猜到了这层楼的秘密,那就是你的成果必须 要上升到哲学的高度,你才有机会能进到这层来。

当然,上升到哲学高度只是一个必要条件,牛顿的万有引力似乎也上升到了哲学的高度, 因为不知道引力到底是怎么来的,但是牛顿没有被划到这一层,因为进到这层还有另外的条 件,那就是你的成果必须引起了哲学上的深度思考,并能让人们的世界观向前跨进一大步。 窃以为牛顿、爱因斯坦等人的成就还达不到让人们世界观向前跨进一大步的程度。

所以,这层楼中的人的成就对我们普通人认识世界非常重要,你可以不学相对论,但是 你不可以不对这层楼的人所作出的成就不了解,否则你的世界观就是极其不完整的,会犯许 多认识上的错误。不幸的是,中国的科普知识普及还不够到位,知道这层楼成就的人好像并 不多,程序员中恐怕更少。下面就来看看这些用一只手的手指数得清的大哲们,到底有什么 成就,能比万有引力定律和相对论还重要。

1、希尔伯特 (1862~1943)

第1位进到此楼层是一位名叫“希尔伯特”的大数学家,如果你学过《泛函分析》,那么 你在学习希尔伯特空间时可能已经对这位大数学家有所了解;如果你不是学数学出身的,又 对数学史不感兴趣的话,恐怕你从来没有听说过这个名字。不过如果我问一下,知不知道二 次世界大战前世界数学中心在那里,你肯定会有兴趣想知道。

不妨说一下,二战前整个世界的数学中心就在德国的哥廷根,而我们这位大数学家希尔 伯特便是它的统帅和灵魂人物。即使在二战期间,希特勒和丘吉尔也有协定,德国不轰炸牛 津和剑桥,作为回报,英国不轰炸海德堡和哥廷根。

整个二十世纪上半期的超一流数学家,几乎都出自其门下。这里不妨举几个我们熟悉的 人物,例如冯·诺伊曼就曾受到他和他的学生施密特和外尔的思想影响,还到哥廷根大学任 过希尔伯特的助手,钱学森的老师冯·卡门是在哥廷根取得博士学位的。顺便提一下,这位 大数学家发现当时物理学上出了很多大的成果如相对论和量子力学,但是这些物理学家的数 学功力明显不足,因此有一段时间带领他的学生们研究过物理学,并独立发现了广义相对论, 只是不好意思和物理学家争功劳,将广义相对论的功劳全部让给了爱因斯坦。

广义相对论相对于这位大数学家在数学上的贡献,其实是算不了什么的,只是由此可看 出这位大数学家品格的高尚之处。如果再去看看牛顿之流的人物的品行,整天和莱布尼茨、 虎克等人争功劳,利用自己的优势地位打压他人,甚至闹得上法庭,和这位希尔伯特先生比 起来,简直就是个小丑。

说到这里,你可能对这位大数学家“希尔伯特”有了一些初步映象,感觉到了他的重要性, 不过他在数学上的主要成就可不是几句话说得清楚的。首先,他是一位集大成者,精通当时 数学所有分支领域,在数学的各个领域都有较大的贡献,当然这些成就只能让他成为一个大 科学家,不能带他进入这层楼。事实上这位“希尔伯特”解决的任何一个数学问题都够不到这 层楼的高度,那么他怎么混到这层楼来了呢?

话得从1900年说起,当时还很年轻的希尔伯特在当时的世界数学大会上做了一个报告, 高屋建瓯地提出了著名的23个未解决的数学问题,然后整个二十世纪上半期,全世界的数 学家们都在这23个问题的指导下展开研究,直到现在仍然有许多数学家受这23个问题的指 导在进行研究。例如我们熟知的哥德巴赫猜想,就属于其中第8个问题素数分布的一个子问 题。

如果用“高瞻远瞩”来形容这位大数学家的话,那么这个世界上恐怕没有第二个人再配得 上“高瞻远瞩”这四个字,不论是欧拉、高斯、牛顿、爱因斯坦还是被誉为最有才华的数学家 伽罗华,概不例外。

虽然那23个问题是归纳总结出来的,并不全是原创,但是其中有不少问题是可以上升 到哲学的高度,引起深度思考的。可能大多数人都会觉得希尔伯特是进不到这层楼的,我们 知道提出问题的人和解决问题的人是一样伟大的,何况他提出的问题是如此之多,基于这点, 个人觉得应该让希尔伯特跨进这层楼的门槛里。

看完这位希尔伯特的成就,你可能会觉得对你的世界观并没有产生任何影响。确实如此, 他提出的问题不是用来影响你的,而是用来影响其他大科学家和大哲的,下面再来说说另一 位对他提出的23个问题中的第2个问题有杰出贡献的大哲,你就会感觉到大哲们的成果的 威力了。

2、哥德尔 (1906~1978)

这位大哲的名字叫“哥德尔 (Gödel) ”,你可能从来也没有听说过这个名字,即使 你读了一个数学系的博士学位,如果你的研究方向不和这位大哲对口的话,你也不一定了解 这位大哲的成就,更不知道他的成果对我们这个世界有何意义。

简单地说,这位大哲20多岁时就证明了两个定理,一个叫做“哥德尔完全性定理”,另 一个更重要的叫做“哥德尔不完全性定理”。你也许会觉得奇怪,第9层楼的成就就已经上升 到了公理的高度,这种证明定理的事情不是学者和大师们做的事情吗?怎么能比第9层楼的 成就还高呢?下面就来简单说一下这两个定理的含义,你就会明白这属于系统级的定理,绝

不是普通的定理和公理所能比拟的。

“哥德尔完全性定理”证明了逻辑学的几条公理是完备的,即任何一个由这些公理所产生 出的问题,在这个公理系统内可以判定它是真的还是假的,这个结论表明了我们人类所拥有 的逻辑思维能力是完备的。这条定理并不能将其带入这层楼来,带其进入这层楼的是另一条 定理。

“哥德尔不完全性定理”是在1930年证明的,它证明了现有数学的几条公理(ZF公理系 统)是不完备的,即由这些公理产生出的问题,无法由这几条公理判断它是真的还是假的。 例如希尔伯特23个问题中的第1个问题,也就是著名的康托尔连续统假设,哥德尔在1938 年证明了现有公理系统中不能证明它是“假”的,科恩(Cohen,或许也可以称得上是“半”个 大哲)在1963年证明了现有公理系统不能证明它是“真”的。最有趣的是,即使你将某个不 可判定的问题,作为一条新的公理加入进去,所组成的新的公理系统仍然是不完备的,即你 无法构造一个有限条公理的系统,让这个公理系统是完备的。

也许你仍然无法理解上面这段话的含义,不妨先说一下它对我们现实世界的影响。你可 能知道1936年出现的图灵机是现代计算机的理论模型,如果没有哥德尔不完全性定理的思 想,图灵机什么时候能出来是很难说的,所以这位哥德尔可以算作计算机理论的奠基者的奠 基者。计算机对我们这个世界产生的影响比原子弹大了多少,我想不用我说大家也都清楚。 当然,对现实世界的影响只能把哥德尔同图灵等人一样划到大科学家那一层去,能进入这层 乃是另有原因。

可能你看过《未来战士》、《黑客帝国》、《I,Robot》之类的科幻电影,于是你产生制造 一个和人一样或者比人更高一级的智能机器人的想法,这就引入了一个达到哲学高度的问 题,“人到底能不能制造出具有和人一样的思维能力的机器来?”。

我只能告诉你,“你的愿望是良好的,但现实是残酷的”。如果你仔细思考一下不完全性 定理的含义,并结合现代计算机所具有的能力分析一下,你会发现这个问题的答案暂时是否 定的。如果你想造出和人一样思维能力的机器,那么你需要去好好学习这位大哲及其后续研 究者的成果,并在他们的基础上有新的突破才行。

为了说明这位大哲所研究领域的重要性,这里顺便再讨论一个我们日常争议不休的问 题,那就是孔夫子的“人之初、性本善”以及西方认为“人之初、性本恶”的观点孰优孰劣的问 题。可能有许多人发现西方社会现在领先我们,于是就认为“性本恶”是对的,“性本善”是错 的,中国应该抛弃以前的旧思想,改用西方的思想。当然也有一些老学究们,认为中国的人 文思想是领先于西方的,自然而然地认为“性本善”是对的,“性本恶”是错的。

如果你学过大哲用过的公理化的分析方法,你就知道一套系统的多条公理间只要不会推 导出矛盾的地方,即可以自圆其说,那么它可以看作是对的。这样你可以很轻易地给这个问 题下一个结论,即“性本善”和“性本恶”是对等的,不存在孰优孰劣的问题,更不存在谁对谁 错的问题。只要你不同时将“性本善”和“性本恶”放入一个系统内,那么是不会有问题的,甚 至你也可以认为“人之初、既无善、亦无恶”,或者认为“人之初、部分善、部分恶”,都是可 以自圆其说的,所以我们的老祖宗提出的思想并没有问题,之所以落后乃是其他原因造成的。 这个问题其实在高斯所处的时代就有了结论,那时有人提出了非欧几何,即平行线公理问题, 有人认为过一点可以作多条平行线,还有人认为平行线在无穷远点是相交的,和欧氏几何关 于过一点只能作一条平行线的公理都是矛盾的,但是他们各自的系统内推导出的结论都是正 确的。

上面说的只是对哥德尔不完全性定理的一些粗浅解析,实际上如果深入思考一下它的含 义的话,你会发现它对物理学等许多学科有重大影响,包含的道理实在是深刻,远非一般的 思想所能比拟,有兴趣者不妨“google”或“百度”一下“哥德尔”。或许只有我们的老祖宗“老子” 提出的哲学思想,深度可以有得一比。

哥德尔不完全性定理也给那些认为科学是严谨的人当头一棒,原来连数学这样的纯理论 学科都是不严谨的,其他学科就更不用说了。

至此,已经说完数学上的大哲,下面不妨再看看物理学上的大哲,物理学上好像只出过 一位叫“海森堡”的大哲(注:由于本人对物理学不甚了解,不知道“霍金”够不够得上大哲的 称号)。 3、海森堡 (1901~1976) 海森堡这个名字相信没有几个人不知道的,大部分人在学习物理时都学过他的“测不准 关系”,也就是因为这个“测不准关系”,海森堡爬到了第十层楼。

如果你看过《时间简史》和《霍金讲演录-黑洞、婴儿宇宙及其他》,你也许已经了解 测不准关系的威力,所以这里不想做过多的讨论,只谈一些和本土产生的哲学思想相关的东 西。 首先看看争论了几千年,并且现在仍然有人在争论不休的“宿命论”问题。霍金认为,只 要这个宇宙有一个初始状态,粒子的运动是按照一定物理定律进行的(比如相对论、量子力 学属于这些物理定律的一部分),那么所有的粒子运动轨迹将是确定的,然后只要你承认唯 物论,即精神是由物质决定的,那么宿命论就是“对”的。当然由于测不准关系的存在,对人 而言,又是无法准确预测的,因此也可以将其看作是“不对”的。简单的说,可以认为宿命论 是“对”的是绝对的,宿命论是“不对”的是相对的。

可能上面这段话你现在仍然难以理解,或许你又觉得你的命运并不是上天注定的,而是 可以通过自己的努力可以改变的。我要告诉你的是,你在想什么也是事先已注定的,包括你 在预测本身也是事先注定的,因为大脑思考问题最终是基本粒子运动的结果,而这些粒子的 运动必然要遵循物理定律进行,所以你会不会努力,想不想努力,包括你在想你该不该努力 这件事本身也是事先注定的。顺便说一下,你现在正在看这篇文章,可能正在想这个宿命论 问题值得怀疑,或者觉得写得不够好,准备砸个板砖上来;或者你在想这篇问题写得有点意 思,准备看完后转给朋友看一看;又或者你看到这里,觉得很累了,准备休息一下;…;这 些都是上天事先就注定的。从你自身的相对角度看,因为你事先不知道后来会发生什么,也 可以认为不是事先注定的,可能这句话有些不好理解,不妨好好理解前面说过的公理化思想。 如果你没看过《霍金讲演录-黑洞、婴儿宇宙及其他》,你可能会觉得很惊讶,宿命论 历来不都被认为是唯心论吗,怎么由唯物论推导出了宿命论呢?现实就是这样和你开了一个 大的玩笑,不过这个玩笑也是事先注定的。如果你再仔细用公理化的方法思考一下唯物论和 唯心论的矛盾性,就像前面分析性善论和性恶论一样,你会发现唯物论、唯心论不一定就是 冲突的,矛盾的双方是可以统一的,只要你不要同时将唯物和唯心放进同一个系统中就行。 当然也有聪明者仍然会怀疑宿命论问题的正确性,因为这里有一个前提条件,即宇宙要 有一个初始状态。宇宙有没有初始状态,我们并不知道啊,虽然有大爆炸学说,但那也只是 假说而已,并没有得到确证,有些人就认为宇宙是一直都存在的。这样看来似乎你又有合理 的理由在怀疑宿命论了,不过我仍然要告诉你,你现在在怀疑宿命论仍然是事先注定的,不 相信的话就来看看下面的分析。

虽然宇宙的初始状态值得怀疑,但是这个宇宙至少已经存在了一段时间,这点我想是毋 庸置疑的。我们可以在我们已知的宇宙存在的这段时间内,任意取一个时间点t0,那么在这 个时间点t0上,所有的粒子都有一个运动状态。在时间点t0之后的时间里,由于粒子运动 是按照物理定律进行的,因此粒子运动轨迹由时间点t0的状态决定。说白一点,如果取100 年前的一个时间点作为t0,那么现在的所有粒子运动状态100年前就已经确定了,如果取 10000年前一个时间点作为t0,那么最近10000年内所有粒子运动的轨迹在10000年前就确 定了,当然,你可以取更早的时间,比如100亿年前的时间点。

总之,现在你会发现宇宙有没有初始状态并不会影响宿命论的正确性,所以这个世界的

一切都是注定的。只不过由于粒子间相互影响过于复杂,我们无法知道这些粒子的运动轨迹 而已。当然,如果将测不准关系用上的话,那么就是这个运动轨迹对人来说是无法准确预测 的,所以不妨开个玩笑:“算命先生经常算得不准大概是测不准关系的缘故吧”。 如果你再深入思考一下测不准关系,你会发现这是一个测量系统的问题。由于宿命论的 存在,这个世界本身实际上是确定的,是“准“的,之所以测不准乃是我们人类所具有的测量 能力依赖于基本粒子造成的。所以我在前面说宿命论是“不对”的是相对的,它是相对于我们 人类的测量能力而言的。根岑(Gentzen,曾任希尔伯特的助手)在一个更强的系统内证明 了ZF系统内的问题都是可判定的,从一个侧面说明这个世界本身是确定的。(注:它和哥 德尔不完全性定理并不矛盾,由于数学上的复杂性,这里就不详细解释了) 不妨再想想我们老祖宗提出的“是庄周梦见了蝴蝶?还是蝴蝶梦见了庄周?”,“风动? 幡动?还是心动?”之类的问题,当然以前你都认为这是纯粹的唯心主义,甚至认为是封建 糟粕,但是如果结合测不准关系的内涵,再结合前面所说的公理化分析方法进行分析,估计 你现在不敢轻易地下结论。

也许到现在你仍然无法理解为什么把大哲们划在了大科学家的上一层,你可能仍然觉得 万有引力、相对论等成果是最伟大的。下面就来谈谈为什么大哲比大科学家高一层。

如果把人类在现有能力情况下,将来所能够拥有的知识总集看成是一个集合A,人类现 在已有的知识总集看成是集合B,显然,集合B只是集合A的一个子集,并且是很小的一 个子集。牛顿力学、相对论这些理论只能算作集合B里的一个子集,相对于集合A,只能 算作是沧海一粟。 换句话说,在人类现有能力可做的事情集合中,牛顿力学和相对论等理 论给出了详细的办法让你可以做其中的一些事情,当然剩下的更多的事情是牛顿力学和相对 论所无法解决的。

哥德尔不完全性定理和测不准关系的意义在于,它指出集合A的范围,即将人类现有 能力发挥到极限的情况下,那些事情是你能做到的,那些是你不能做到的。当然,它并没有 给出具体的方法让你去做你能做到的事情,它只是告诉我们我们人类现在发现的能力所能达 到的极限。或许将来发现人类有其他新的未发现的能力,那么这个极限就被打破了。比如将 来能发现不依赖于基本粒子的其他测量方法,并且测量过程中不会改变其他粒子的状态,那 么测不准关系就被打破了。

看到这里,估计你已经发现了一些秘密,科学兜了一大圈,最终还是回到了哲学,也就 是我们所认为的玄学上。同时你也会发现,我们老祖宗提出的所谓玄学,原来和现代科学是 相通的,并非象某些人想像的那样全是糟粕。如果有人认为西方现代暂时领先我们,进而就 认为西方古代就已经超越我们,我们老祖宗就已经落后西方,他们的思想都是糟粕的话,那 么我认为他可能犯了崇洋媚外的毛病。我不得不化用一句周杰伦在春晚上的歌词送给他:“你 不妨抓一副我们祖传的中医良方,治一治你那崇洋媚外的内伤”。顺便告诉他一下,中医用 的阴阳五行理论,它的前提假设就是宿命论。

上面说的这几位大哲的成果,可能对你的世界观会有很大的影响,于是你可能会羡慕起 这些大哲们的成果来。如果你有大志的话,你会希望有朝一日你也能变成大哲,但是你发现 上面的大哲是研究数学和物理学的,而你是学计算机的程序员,那么是不是没有机会变成大 哲呢?

如果你能将NP难题给彻底解决掉,意味着计算机内的计算的奥秘基本被揭开,或许你 可以进到这层楼来;或者你能发现另外一套计算机可以理解的数学公理系统,并且这个公理 系统是完备的,那么计算机取代人类进行思维的一个必要条件就满足了,计算机将具有真正 意义上的“逻辑思维和推理能力”,你可以轻松地进到这层楼来。如果你发现了新的方法可以 打破测不准关系,同样你也可以轻松地进到这层楼来。

如果你能彻底揭开人类抽象思维的奥妙,并让计算机懂得了如何创建抽象,具备抽象思 维能力,那么也就具备了“设计能力”,可以取代人类进行各种设计了,你也可以轻松地进到 这层楼来。顺便说一下,如果你对软件设计有真正深刻理解的话,就会明白这不是在写科幻 小说。对此感兴趣者,不妨好好地研究一下程序切片方面的技术,会让你对软件设计和测试 等方面的理解有质的提高,或许有一天你能打开这扇大门。

当然,计算机要完全取代人还有其他必要条件,后面还会提及。

值得一提的是,虽然第10层楼是本文中所写的最高层,但是大哲们并没有觉得他们到 了顶层,他们通常都还会努力寻找通往更高一层的楼梯。如果你也有成为天下第一的想法, 那么你或许会想要做什么事情才能超越大哲们的成就,当然,这都得依赖于找到更高一层楼 的楼梯。

个人认为,再往上一层楼的楼梯是通往天堂的道路,也就是说第11层楼的名字叫“天 堂”,是“上帝”住的地方,而不是人住的地方。如果将来某天有人能爬到天堂的话,那么他 已经不是人了,而是由人变成了“上帝”。

你也许会怀疑这个世界到底有没有“天堂”,“上帝”是否根本就不存在,我也很有同感。 因此有必要再写上一段文字,讨论一下“上帝”的问题。如果你想了解天堂的奥妙,有没有办 法让你变成“上帝”,不妨看看继续往下看看第11层楼的玄妙。注意我这里用的是“玄妙”二 字,因为上帝在大部分人眼里估计都是“玄之又玄”的东西。

第11层 上帝

看了上面的小标题,你可能会觉得奇怪,这篇文章不是讲“程序员的十层楼”吗?怎么冒 出了第11层来了?

其实这并不矛盾,程序员确实只有十层楼,因为爬到第11层时,已经变成上帝,不再 是程序员了;所以超出10层楼本身并不重要,关键的问题是看你有没有能力变成上帝。 1、谁是上帝?

菜鸟们认为Linus Torvalds是程序员中的上帝,看完了前面各层楼的介绍,此时再看到 这句话,相信你要忍不住在心里笑起来。当然,你会不会笑起来是事先注定的。Don Knuth 也不是上帝,他离上帝还有三层楼的距离。即使是大哲们,他们离天堂也还差一层楼,因此 这个世界上有史以来还没有任何一个人变成过上帝。

我们感兴趣的是,将来会不会有人爬到比大哲们更高的楼层上,变成了上帝。 要变成上帝,你得有上帝一样的能力,上帝会造人,你会吗?

你也许会怯生生地问:“我可以和爱人生小孩,算不算造人?”,你可能还会理直气壮地 说:“现在生物学上都可以克隆人了,早就有人掌握了造人的方法”。

事实上克隆人需要有人的体细胞,必须要先有人才会有体细胞。上帝造人时,这个世界 上并没有人,是从无生命的物质“尘土”中创造出的人。因此,用最原始的方法生人和克隆人 都是从有生命信息的物质中生人,不能算作造人。

这样看来,你根本不会造人,不过我可以告诉你一个“玄方”,让你有机会学会如何造人。 如果你揭开了人类情感的奥秘,让计算机也可以拥有和人类一样的情感,那么计算机将 可以理解人类的需求,具有了“情商”,将具有完整的和人一样的能力。此时,人类进化到了 机器人,科幻小说将变成现实,也就是说你已经掌握了真正的造人能力,晋升为“上帝”了。 未来到底有没有人能变成“上帝”,人能不能进化到机器人,这是宿命论中事先注定了的。 说到这里,不妨再告诉你一个打破宿命论的方法,这个方法就是你要爬到比上帝还要高的楼 层。

“还有比上帝还高的楼层?”,你可能会第1时间内冒出这个问题,其实我也有同样的怀 疑。因此在写第12层楼前,有必要弄清楚它到底存不存在,即你可不可以骑到上帝的头上 的问题。

骑到上帝的头上?

为了解决是否可以骑到上帝的头上这个问题,不妨先假设存在比上帝高的楼层,也就是 存在打破宿命论的方法。
宿命论的本质原因是因为时间是单向运行,不可逆转造成的。如果你找到一种可以使时 间逆转的方法,那么你就打破了宿命论,爬到了比上帝还高的楼层。

看到这里,你也许会摆脱刚才陷于宿命论的困惑情绪,变得充满希望般高兴起来。不过, 如果你的逻辑思维能力足够好,仔细思考一下,会发现存在一个逻辑上的悖论。

在你找到时间逆转的方法之前,显然这个世界仍然是需要服从宿命论的,也就是说你能 不能找到打破宿命论的方法是事先注定的。假设你在某个时间点t0处找到了打破宿命论的 方法,你在打破宿命论后,想利用时间逆转的方法回到某个时间点t2。下面来看看你到底能 不能回到时间点t2。

取位于t0和t2之间的任意一个时间点t1,你在回到时间点t2之前,必须先经过时间点 t1,考虑你到达t1的那一时刻,由于t1比t0要早,这个时间点上你还没有找到时间逆转的 方法,所以到了时间t1点后,你无法再使用时间逆转的能力回到时间点t2去,所以你永远 也回不到时间点t2,由于时间点t2是任意取的,因此,你永远也无法使时间逆转,或者说 你根本就没打破过宿命论,这与你在时间点t0打破了宿命论产生了矛盾。

上面这段话看起来似乎有点像“人永远迈不出一步”的诡辩一样,你可能会想返回到时间 点t1时,仍然可以拥有时间逆转能力啊。不过你又会发现一个新的问题,时间点t1本来是 没有时间逆转能力的,现在又认为时间点t1又有时间逆转能力,那时间点t1到底是有还是 没有时间逆转能力呢?或者说在时间点t0前,宿命论注定了时间点t1是没有时间逆转能力 的,现在你又认为时间点t1具有时间逆转能力,那么这两个时间点t1究竟是不是同一个时 间点?如果不是同一个时间点,说明你没有回到过去;如果是同一个时间点的话,岂不是自 相矛盾吗?

为了说得更形象一些,不妨假设你坐一艘超光速飞船,准备从时间点t0回到时间点t2 去,假设你回到t2后,随着时间的流逝,又达到了时间点t0,如果这时你又再次坐超光速 飞船返回时间点t2,那么一个值得思考的问题就出现了,“你在时间点t2能不能看到上次返 回时间点t2的飞船?”

如果回答不能看到飞船,那么上次返回的飞船那里去了呢?显然很难解释通。如果回答 能看到飞船,那么你可以到达时间点t2后,下次时间到达t0时,你又坐飞船返回t2,这次 你将可以看到上两次的两艘飞船。如果这样一直循环下去,最后你会发现你可以在时间点t2 看到无穷多的飞船。用程序员的术语说,叫做“程序陷入了死循环”,最后系统必然会出现“Out of Memory”现象而崩溃。

当然,你也可以认为有其他的方法,不需要飞船,可以一次性从时间点t0直接跳跃到 时间点t2,并不需要经过时间点t1。下面不妨来分析一下这个方法是否可行。

既然是直接跳跃到时间点t2,那么你必然是在一个无穷小的时间里出现在时间点t2的 某个空间里,例如你要在时间点t2回到某个广场上。首先说明一下为什么是无穷小的时间 里出现的,因为如果不是无穷小的时间里出现的话,那么必然可以取到一个时间点t1,会导 致前面所说的时间点t1上出现悖论。

你在广场上出现的时,广场上的空气必然要为你让开空间,而这是在无穷小的时间里完 成的,那么很容易推导出你周围的空气获得的加速度和速度都是无穷大,因而它具有的动能 也是无穷大,无穷大的能量和无穷大的速度意味着什么?一只鸟都可以将飞机撞下来,如果 宇宙是有限大的话,它可以让这个宇宙炸毁无穷次;即使宇宙是无限大,它也足以让宇宙炸 毁一次。宇宙都毁灭了,又何来的时间?还能说你回到了时间点t2吗?

也许上面说的这些你仍然难以相信,不妨再说得更现实一些,假设你要回到100年前的 一个时间点,这100年中,天上有多少流星湮灭了?有多少新星生成了?宇宙膨胀了多少?

你有能力让湮灭的流星复原、生成的新星重新返回未生成前的状态,膨胀的宇宙收缩回去 吗?如果这些东西的状态没有回复到100年前,又怎么能说明你回到的是100年前的时间点 呢?

根据上面的推导和分析,个人认为使时间逆转的方法是不存在的,所以第12层楼是不 存在的,自然没有人可以骑到“上帝”的头上。

宿命论将在有时间的时间里永远统治这个世界。
----
*說明
使用 [[等寬文字]] 區塊 (適合用於程式碼): 分別用三層大括號{, }, 包住要套用的區塊

----
*範例
 {{{
var posTop = findPosY(e);
var posBot = posTop + e.offsetHeight;
var winTop = findScrollY();
var winHeight = findWindowHeight();
var winBot = winTop + winHeight;
if(posTop < winTop)
 return(posTop);
else if(posBot > winBot)
 {
 if(e.offsetHeight < winHeight)
 return(posTop - (winHeight - e.offsetHeight));
 else
 return(posTop);
 }
else
 return(winTop);
 }}}
----
*顯示
{{{
var posTop = findPosY(e);
var posBot = posTop + e.offsetHeight;
var winTop = findScrollY();
var winHeight = findWindowHeight();
var winBot = winTop + winHeight;
if(posTop < winTop)
 return(posTop);
else if(posBot > winBot)
 {
 if(e.offsetHeight < winHeight)
 return(posTop - (winHeight - e.offsetHeight));
 else
 return(posTop);
 }
else
 return(winTop);
}}}
----
在上一篇文章《二叉树迭代器算法》中,我介绍了一种基于栈的二叉树迭代器实现。程序设计语言和Haskell大牛@九瓜 在看过之后评论到:
>这里用了 stack 来做,有点偷懒,所以错失了一个抽象思考机会。如果我们能够理解二叉树到线性表的转换过程,完全可以把 Iterator 当作抽象的线性表来看,只要定义了关于 Iterator 的 empty, singleton, 还有 append 操作,实现二叉树的 Iterator 就变得非常直观。
“错失了一个抽象思考机会”是什么意思呢?我理解九瓜的意思是基于栈的实现虽然是正确的,但它缺乏对于迭代器类型本质的理解,不具有通用性。如果能对迭代器进行合适地抽象就可以像二叉树递归遍历一样自然地得出二叉树迭代器,甚至其他更复杂的数据结构,只要我们能写出它的遍历算法,迭代器算法都可以自然推出。
!!!类型的本质
九瓜提到了通过empty, singleton和append操作对Iterator进行抽象,我本来打算直接根据这个思路介绍函数式的二叉树迭代器实现,但是考虑到其实首要的问题在于理解类型的本质,而并不是所有人都具备这个基础,不如先普及一下类型基础再进入具体实现。那么下面就先以表示元素对的Pair类型为例子认识一下类型到底是什么?可能有人一提到Pair类型马上就会在脑海中浮现出下面的结构:
{{{
struct Pair {
    int left;
    int right;
}
}}}
其实,这种理解是非本质的,Pair完全可以用2个元素的数组来表示,第一个元素表示left,第二个元素表示right:
{{{
struct Pair {
    int elements[2];
}
}}}
上面的两种不同表示是类型的不同实现,而类型的本质是由操作(Operation)和操作间的关系或不变式(Invariant)所定义的,我们称之为类型规范(Type Specification)。比如,Pair类型是这样定义的:
{{{
Type Pair:
    Operations:
        Pair make_pair(int x, int y)
        int get_left(Pair pair)
        int get_right(Pair pair)
    Invariants:
        get_left(make_pair(x, y)) == x  //对x, y构造的Pair取左元素等于x
        get_right(make_pair(x, y)) == y  //对x, y构造的Pair取右元素等于y
}}}
也就是说只要是满足Pair类型规范,即定义了make_pair,get_left, get_right这3种操作,并且这些操作满足上面两个不变式,那么它这就是Pair类型。我们再来看看稍微复杂一点的Stack类型:
{{{
Type Stack:
    Operations:
        Stack make_stack()  //构造空栈
        Stack push(Stack stack, int x)  //将元素x压栈,返回新栈
        int top(stack)  //获取栈顶元素
        Stack pop(Stack stack)  //将栈顶元素弹栈,返回新栈
    Invariants:
        top(push(stack, x)) == x  //栈顶元素为最后一次压栈值
        pop(push(stack, x)) == stack  //对stack压栈后再弹栈等于原来的stack
}}}
Stack类型规范简言之就是FILO(先入后出),如果要形式化就是上面的不变式。为了加深理解,我们现在切换到测试视角来看一看,如果请你来编写一个Stack类的单元测试用例,你应该怎么写呢?许多朋友都不清楚单元测试到底测什么?怎么测?我见过不少人用一个测试用例单独对push做测试,用另一个测试用例对pop单独做测试,其主要原因就在于缺乏对类型本质的理解。其实,只要理解了类型的本质我们就知道孤立地看push或pop是没有任何意义的,它们的意义是在FILO关系下相互解释的,所以测试当然是基于类型规范来测试FILO不变式!这种基于类型规范的测试是一种黑盒测试,与类型的内部实现细节无关,只要单元测试覆盖了类型所定义的所有操作和不变式,那么不管内部怎么实现或优化,测试用例都不需要调整。反之,如果深入到了类型的内部实现做白盒测试,那这样的测试用例实际上就不再是反映其类型规范了,它会随着实现细节的调整而失效。
更深一层来看,不仅是在Pair,Stack这样的微观层面,在一个系统的宏观层面同样可以采用类型视角,即考察系统定义了哪些操作?这些操作之间有什么样的关系或不变式?比如,你如何从类型的角度来看待MySQL这样一套数据库系统?MySQL系统定义了哪些操作?这些操作之间必须满足怎样的关系和不变式?不仅如此,类型视角除了可以应用于计算机系统,甚至还可以应用于生活中的事物,比如,你到超市购物可以寄存自己的包,在寄包的时候会获得一张密码条,取包时可以通过密码条打开箱子。你能从超市寄包这个例子中看出类型来吗?如果你看出来了,说明你对类型的理解真正融会贯通了!

!!!类型的函数式实现
上面我们介绍了类型的本质在于操作和操作间的关系,下面我们要关注的是类型的实现。在上面的例子中,Pair的内部结构到底是什么,是一个left和一个right成员?还是一个两元素的数组?没有讲,也没关系,就好像Windows的Handle和Linux的FileDescriptor一样,它们都是一个标识,你并不需要关心它的值本身,你只需要用几个相关的函数创建和操作它就行了(上面超市寄包例子中的密码条和Windows中的Handle是什么关系,你看出来了吗?你需要理解密码条的内容吗?)。换句话说,只要满足类型规范,具体实现是可变的,使用者只依赖于类型规范而不依赖于其具体实现。这在面向对象语言中意味着接口保持不变而具体实现可以变化(这里把public方法视为一种广义的接口)。
下面,我们还会看到的是不仅类型的内部实现可以变化,而且可以根本没有什么所谓的内部实现。这是什么意思呢?让我们来思考一下,是不是Pair内部一定要有什么东西来保存构造函数传入的left和right?我们能跳出这个定势吗?在函数式编程中,我们能做到:
{{{
//Javascript
function make_pair(x, y) {
    // 返回一个支持get_left和get_right操作的闭包(Closure)
    return {
        get_left : function() { return x },
        get_right : function() { return y }
    }
}
function get_left(pair) {
    return pair.get_left();
}
function get_right(pair) {
    return pair.get_right();
}
// Test case
console.log(get_left(make_pair(1, 2))) //1
console.log(get_right(make_pair(1, 2))) //2
}}}
上面的关键代码在于make_pair的内部返回的不是一种具体的数据结构,而是一个支持get_left和get_right操作的闭包(Closure),将来可以通过get_left和get_right来提取x, y。这种基于闭包的实现和我们通常采用的基于数据结构的实现的本质区别在哪里呢?不难发现,基于闭包的实现和类型规范是直接对应的,它并没有引入类型规范之外的东西,而基于数据结构的实现则隐藏了实现的细节。换句话说,如果要验证实现代码的正确性,对于前者只需要比对着类型规范,对于后者我们可能需要去仔细理解推敲其所采用的数据结构。对于Pair这样简单的结构二者差别不大,甚至基于数据结构的实现更简单,但是对于复杂的类型就容易体现出闭包实现的优势了。为了加深理解,我们再来看一个Stack的函数式实现:
{{{
//Javascript
function make_stack() {
    return null
}
function push(stack, x) {
    return {
        top : function() { return x },
        pop : function() { return stack }
    }
}
function top(stack) {
    return stack.top()
}
function pop(stack) {
    return stack.pop()
}
// Test case
var stack = make_stack()
stack = push(stack, 1)
stack = push(stack, 2)
stack = push(stack, 3)
console.log(top(stack)) //3
stack = pop(stack)
console.log(top(stack)) //2
stack = push(stack, 4)
console.log(top(stack)) //4
}}}
上面的所有函数都是采用了无副作用的纯函数式设计,可能习惯面向对象编程的朋友不是很习惯,不过这不影响我们对类型的讨论,而且它也很容易改造成面向对象的风格,感兴趣的朋友可以自己尝试对上面的代码进行简单的包装让它看起来像面向对象的样子。

!!!函数式二叉树迭代器
上面我们介绍了类型的本质和函数式实现,下面我们再来看看Iterator类型又该如何定义和实现呢? 思路当然还是从操作入手,考虑Iterator类型对应了哪些操作,它们的关系是什么?上面九瓜提示了Iterator类型可以抽象为线性表List类型,或者说Iterator本质上是一个List。为什么呢?其实,只要跳出“如何表示数据结构”的思维,从类型角度思考就很容易理解,因为Iterator和List都定义了相同的操作,Iterator的使用者完全不关心也不知道它背后到底是链表还是二叉树,你对Iterator的操作和一个List的操作完全一样。正是这个原因,STL等范型库才能通过Iterator将算法和数据结构解耦。
怎么定义一个List类型呢?九瓜提到的empty(), singleton()和append()实际上就是和List打交道最多的Lisp语言的经典定义方式。Lisp是基于s-expression的,s-expression既可以视为线性表又可以视为树,本质上Lisp为List类型定义了构造、取首元素和取剩余元素等几种操作:
{{{
Type List:
    Operations:
        List empty()  //构造空表,通常由()这个文字量表示
        List singleton(Element e)  //构造包含一个元素的表,通常由(e)这个文字量表示
        Element first(List list)   //取list的第一个元素,通常又叫car操作
        List rest(List list)  //取list除第一个元素外的剩余部分,通常又叫cdr操作
        List append(List list1, List list2) //连接两个表
    Invariants:
        append(empty(), list) == list  //空表和表list连接后等于表list
        append(list, empty()) == list  //空表和表list连接后等于表list
        first(singleton(e)) == e  //对singleton(e)取首元素等于e
        rest(singleton(e)) == empty()  //对singleton(e)取首元素外的剩余部分的结果为空表
        append(first(list), rest(list)) == list  //对list的首尾两部分进行连接等于list本身
        if list1 is not empty then
            first(append(list1, list2)) == first(list1)  //对非空表list1于表list2的连接取首元素等于对非空表list1取首元素 
        if list1 is not empty then
            rest(append(list1, list2)) == append(rest(list1), list2)  //对非空表list1于表list2的连接取首元素等于对非空表list1取首元素 
}}}
有了上面的分析,我们相应地写出下面的List实现:
{{{
//Javascript
function empty() {
    return null
}
function singleton(e) {
    return {
        first: function() { return e },
        rest: function() { return null }
    }
}
function first(list) {
    return list.first()
}
function rest(list) {
    return list.rest()
}
function append(list1, list2) {
    if (null == list1) return list2
    if (null == list2) return list1

    return {
        first : function() { return first(list1) },
        rest : function() { return append(rest(list1), list2) }
    }
}
}}}
在此基础上可以进一步实现二叉树迭代器:
{{{
function make_binary_tree_iterator(node) {
    return {
        first : function() {
            return null != node.left ? first(make_binary_tree_iterator(node.left)) : node
        },
        rest : function() {
            var left_it = (null == node.left ? null : make_binary_tree_iterator(node.left))
            var root_it = singleton(node)
            var right_it = (null == node.right ? null : make_binary_tree_iterator(node.right))
            var it = append(append(left_it, root_it), right_it)
            return rest(it)
        }
    }
}
//======== Test case ========
var tree = { 
    value : 1, 
        left : {
            value : 2,
            left : { value : 4, left : null, right : null },
            right : null
        },
        right : {
            value : 3,
            left : null,
            right : { value : 7, left : null, right : null }
    }
}
for (var it = make_binary_tree_iterator(tree); null != it; it = rest(it)) {
    console.log(first(it).value)
}
}}}
上面的make_binary_tree_iterator在List类型的基础上按照二叉树遍历过程构造了一个List。不知道你是否注意到了,为什么它不像下面这个例子一样直接返回一个List,而要构造一个闭包呢?
{{{
function make_binary_tree_iterator(node) {
    var left_it = (null == node.left ? null : make_binary_tree_iterator(node.left))
    var root_it = singleton(node)
    var right_it = (null == node.right ? null : make_binary_tree_iterator(node.right))
    return append(append(left_it, root_it), right_it)
}
}}}
这里关键的区别在于闭包是惰性求值的,也就是说只有当真正开始迭代遍历的时候才会逐渐对各个函数进行求值,而上面的函数递归调用是非惰性的,会从一开始就把所有结点展开成线性表。如果你对这一点还不能很好地理解,可以尝试在各个函数中加log跟踪函数的调用过程。

!!!总结
本文介绍了类型的本质在于它所定义的操作以及操作之间的关系和不变式。类型的实现关键在于满足类型规范的要求,而具体实现是可以变化的,使用者和测试用例都应该只依赖于类型规范而不依赖于具体实现。函数式的类型实现往往和类型规范是直接对应的,简单通用且容易验证程序的正确性,但可能有性能问题,而命令式的类型实现往往会引入复杂的内部数据结构和算法,不具有通用性但是一般比较高效。这两种实现并不是完全互斥的,有时候可以将二者相结合达到简单与高效的结合。
(转自http://www.douban.com/note/201020832/)
2012-02-17 11:13:43
见到很多朋友推荐了金融学教科书目录的帖子http://www.douban.com/note/94646533/ ,
这里顺便把以前写过的经济方面的帖子集中一下,希望对大家有所帮助,也欢迎补充指正。

一、微观经济学系列:
第1章:需求、供给、价格理论
(1)http://www.douban.com/note/100055059/ 
(2)http://www.douban.com/note/100949588/ 
(3)http://www.douban.com/note/101388784/ 
(4)http://www.douban.com/note/187387410/ 
(5)http://www.douban.com/note/187387578/ 
第2章:合作与分工 
(1)http://www.douban.com/note/187387733/ 
(2)http://www.douban.com/note/187387774/ 

二、货币金融系读书笔记:
(1)美联储,谁做主 http://www.douban.com/note/187388074/ 
(2)美联储的资产与负债 http://www.douban.com/note/187388148/ 
(3)准备金率有什么用?http://www.douban.com/note/187388229/ 
(4)货币供给有多复杂?http://www.douban.com/note/187388265/ 
(5)加入利率一起玩 http://www.douban.com/note/187388303/ 
(6)什么是锚?http://www.douban.com/note/187388339/ 

三、国际货币史读书总结:
(1)《嚣张的特权》-美元、欧元的前世今生 http://book.douban.com/review/5285708/ 
(2)《资本全球化》-金本位的兴衰  http://book.douban.com/review/5304861/ 

四、中国经济读书总结:
(1)《地产霸权》-香港地产经济得失 http://book.douban.com/review/5131275/ 
(2)《经济发展中的中央与地方关系》-建国后的三次税制分权 http://book.douban.com/review/5264476/ 
(3)《走出神话 》-国企、银行改革与增长模式 http://book.douban.com/review/5264479/ 
(4)《国资迷局》-国有资产解析 http://book.douban.com/review/5267311/ 
(5) 从“限购令”看房地产市场困局 http://www.douban.com/note/136148781/ 

五、杂
(1)费雪去按摩 http://www.douban.com/note/187388477/ 
(2)费雪 pk 马克思 http://www.douban.com/note/177642282/ 
(3)经济学的落魄,和落魄的经济学家 http://www.douban.com/note/187388551/ 
杰西·利物莫,被几代交易员所敬仰的大投机者。

  书籍是前人智慧的结晶,在投机市场,通过自己的实践来总结经验,时间和金钱上的代价极为昂贵。但我们可以通过阅读书籍,聆听大师们的声音,当我们在交易中犯了错误后,便能够想起这些教诲,给我们以指导。

  但书籍也并不总是“智慧”的结晶,尤其是现在这个出版泛滥的年代。本文会推荐一些投机经典给股票投机的新手,并告诉大家,在新手阶段,什么书不应该读,也就是说,不应该在什么理念上浪费时间,并搅乱自己的思路。

  向股票投机新手推荐的书:

  炒股的智慧
  http://www.douban.com/subject/1182173/

  以交易为生
  http://www.douban.com/subject/2031890/

  股票作手回忆录
  http://www.douban.com/subject/1021346/

  股票大作手操盘术
  http://book.douban.com/subject/1131736/

  日本蜡烛图技术
  http://www.douban.com/subject/1087737/

  期货市场技术分析
  http://www.douban.com/subject/1089991/

  虽然只有几本书,但都是经典,需要反复阅读,并在实践中去领会。它们会在很长一段时间内陪伴一名投机者在市场中成长。

  那么,什么样的书,股票投机新手不应该在上面浪费时间呢?

  沃伦·巴菲特相关书籍

  巴菲特是一位投资者,他不像绝大多数散户一样,通过低买高卖(投机行为)获利。因此,巴菲特的投资理念对绝大多数散户没有指导意义。巴菲特之所以火,是出于出版商的利益,事实上,巴菲特自己从未写过一本书。对绝大多数散户来说,不要在巴菲特身上浪费时间,会节省很多自己进步的时间。

  乔治·索罗斯的书

  索罗斯和绝大多数散户一样,他是一位真正的投机者。但是,索罗斯的书大都讳莫如深,普通读者根本不知所云。在新手阶段,甚至是在较为成熟的阶段,索罗斯的书都不太适合于普通投机者。

  本杰明·格雷厄姆的书

  格雷格姆是使用基本面作为投机分析方法的创始人,他的《证券分析》和《聪明的投资者》在西方社会拥有《圣经》般的地位。但他的著作并不适合普通散户。首先,阅读他的书,需要有一定的财务知识;其次,书中所述内容的背景离普通散户太遥远,不太容易理解。因此,格雷厄姆的书并不是每个人都可以耐心读下去;退一步说,即使花费时间,将它读完,收获同所花费的时间和精力相比,会让你很失望。

  拉尔夫·纳尔逊·艾略特和威廉·江恩的书

  他们两位的书需要有丰富的投机经验才能够读懂,并付诸实践,建议新手先不要阅读他们的书,否则很容易被表面性的知识所误导。

  基本面分析相关的书

  大家一定发现,这篇短文推荐的书都是技术分析相关书籍,没有基本面分析。这并不意味着基本面分析不是一种好的方法,而是基本面分析不适合于绝大多数散户。如果你的生活背景和知识背景同其他散户没有什么大的区别,我建议你放弃基本面分析,至少在新手阶段不要涉及这个领域。

  国人写的书

  不推荐国人写的书,主要有两个原因。第一,中国投机市场的历史不及西方投机市场历史的零头,很难有真正的见地出现;第二,当前国内的投机市场和出版行业很浮躁,造就了劣质书的滋生环境。

  虽然以上建议未必适合每一位新手,但它应该适合绝大多数新手。关于对基本面分析和巴菲特的评论,可能会有豆友提出异议。这篇短文中的建议是面向大多数的情况,但是几率再大也会有例外,诚如上面所说,如果你的生活背景和知识背景为基本面分析提供了有利的支持,那么基本面分析也不失为一种好方法。不过,还是建议大家在决定使用基本面分析时要慎重,可能我们并没有那么好的运气成为那个例外。
2009-12-13 17:55:39 来自: 诡辩 (人生都浪费在对人生的争论中了)

这篇文章的作者是一个非数学专业的自学心的 
作者分享了自学中的一些个人的见解 或许对很多科班数学的朋友并不适用 由于并未得本人允许就转载了 所以评价时请注意各位的言语 对于对作者的人身攻击我不加通知的删除了 请原谅 
[最后说下作者的背景:JLU地球科学本,陈省身数学所硕,JHU Phd] 


在网上常看到朋友问很多有关于数学学习的问题,有数学系的,也有纯自学的,许多问题我都亲身经历过。在这里就简单说一下我的个人经验,希望对大家有一定的借鉴作用。如果你智商非常高或者成绩非常好的话,可能本文不太适合你,因为本文作者智商一般,成绩也很差,应该不会想到你们想不到的东西首先,选择学数学,那说明这个人还是比较聪明的,至少他应该知道如何利用自己的智商,这点很重要。学习最重要的是要量力而行。掂量一下自己的分量再说。不止一次看到朋友说自己爱学微分几何拓扑什么的,但是作为基础的一些科目,掌握的却不甚好,这样就说明大家有盲目追前的弊端,其实我个人也有这个毛病的。后来遇到了一些事,才开始意识到自己的不足。建议大家读读华罗庚的书,个人觉得对人有极大好处,一点也不是夸的,他的学术水平暂且不提,单就作学问的哲理,第一流的。说白了。就是八个字:本固枝繁,根深叶茂。我个人看过许多传记类的书,现在不爱看了。我相信很多朋友受它的影响很大的,总觉得应该像天才一样思考,要学习的多么多么的快,当然也有迫于一些外界因素必须要赶紧学习的。我个人的建议是:脚踏实地,学一点是一点,盲目的超前只能使你一事无成,自毁前途,一点不是吓唬人,我遇到的这样的人多了。学习要稳稳的,端正自己的态度,不要看那些天才,也不要看身边的什么什么人。不要搞革命英雄主义,成天想着:他能作到的我一定要作到。多想想为什么他能作到一件我作不到的而我做不到一件他做不到的。学数学重在个人见地,不在于硬和人家拼强项。端正了学习的态度(之所以第一个提它,主要是因为不光学数学,做任何学问都是如此)。然后就要问问自己:为啥学数学??你了解数学吗?? 
对两类人 
自学的:我接触的这些朋友比较多。每个人都说自己对数学多么的狂热。俺说句心理话,我就看不出来数学这枯燥的东西对人能有多大的魅力。很多人我感觉是受一些外在的因素的影响:比如学数学会使人很高深等等的。尤其是最近的风气也是对数学有利。所以迎风上。可能我的话有点尖刻。但事实就是如此!很多人对数学缺乏一些常识性的了解,仅仅看了几篇描写大师的作品,就声称自己爱数学,是很让人痛心的,学数学,比娶个老婆还更能影响人的一生,慎之!对于这类人。我的建议是冷静一下头脑。伟大的学科遍地都是,犯不着在一棵树上吊死。对于那些真正适合自学数学的人,我想好的方法一定比我还多,就用不到我罗嗦了。中国自从陈景润之后铺天盖地的出来很多数学爱好者,以前我以为都是夸张,现在接触到多了,才感觉这种浪费人才的现象真的很让人痛心。也许很多朋友看到我这句话很不中听,但是我觉得它是对的:数学只不过是一门学科,它没有任何理由凌驾与其他学科之上,为人民服务,你应该选择自己能做最大贡献的方式!数学系的:这些人我认识也不少,除了一些朋友之外,多数都是被调剂到数学系的。很多人都不爱学数学,甚至有本来对数学有一定的兴趣,学多了发现很难之后又不爱学的。对于这个,我的建议是:成熟一点,如果你没有别的理想代替的话,作好你的本职工作是本分!不爱数学并不能成为你不学它的借口。难更不是理由!天底下没有容易获得的成绩,怕苦怕难,那你什么都干不了。 

解决了这些基本的动力问题。就该好好谈谈细节了: 
学习需要一个过程,需要一个近期目标。我个人建议,跟着大学的进度就很合适了。尽管有各种各样不合理的呼声,但是大学课程的设置都是一些很有学问的人作出的,总比我们这些弱冠想的深想的远,不能盲目的迷信权威,但是不听从权威的建议,你走不远的。本科课程各个学校开设的都不太一样,有多有少,加上一些限制性,非限制性选修课就更加庞杂了。如何取舍呢?人的精力有限。但是至少我认为本科开设的所有课程,你都必须要精通。记得我们还很嫩,学的东西都是基础,以后无论你做哪个方向的学问,你都会用到的。现在就以“人的精力有限”为理由,是懒惰的表现。 
如何获得这些信息?一般网上就有。很多朋友不善于利用网络资源,这个不太好,要知道,尤其是那些自学的朋友,网络是我们和外界接触的几乎唯一手段。如何找它们?我不想说,因为我记得我找到那些东西一点也不费劲,自己去想。遇到问题了,多想想自己怎么解决,想不出来就再想,不要期待有人会给你直接的帮助。学什么东西都是这样。有很多人问我如何弄参考书,我觉得这种问题自己完全可以解决的,总期待着别人给你建议,不去自己找答案,会养成惰性的。在这里我就简单说一下: 
www.xxx.edu.cn 是中国的教育机构域名格式,在www. 后面加上math,一般你就会到达该学校的数学系,好好翻翻 ,一般在这里都能找到你想要的信息,找不到,那别的地方找到的可能性也就不大了。 
bbs.xxx.edu.cn是该大学的BBS地址,个人推荐www上站方式。去什么地方找朋友或者信息呢?全国只有北京大学和中国科技大学开设有数学研讨专栏,进“学术研讨”就可以了。别的大学,可以去院系一类,直接到学院版,去问一些你想问的问题,注意你提问的方式,有的时候不恰当的提问方式会让人不愿意回答的,那里没有人有义务给你回答问题。网上现成的问题,一般也不会有人回答的。多去精华区之类的翻翻。 
然后就是考研究生。永远也不要指望你个人的能力有多强,溶入正规学习途径是有成绩的唯一方法。至于考哪个学校的。这就是个有学问的问题了。很多朋友抱定北京大学,其实我觉得,北京大学也不见得就是国内最好的,而且由于众所周知的原因,竞争十分的激烈,所以不是很好的选择。不过考试不难,我看过试题,想要的话呢,可以联系北京大学的数学学院办公室,或www.kaoyantj.com 之类的网上,也有卖的。别的学校也差不多。不过有个特殊的就是中国科学院,它的试题网上是没卖的,我是现跑到北京买的,查点被隔离。做一做题,感觉一下再决定报考。另外很多朋友忽视了考研的公共课。这是很不好的。 
考研究生考的可不光是数学。再有有些朋友只准备考研的几个考试科目,那也不行!我可以很负责的告诉大家,只准备那么几科,研究生侥幸考上了你也念不下来。选导师呢,建议选些名气不是特别大的,名师一般不会有很多时间辅导你,所以不如找个实际点的。选择方向要根据自己的特长,记得你最喜欢的不一定就是你擅长的。另外各个大学擅长的科目都不太一样,不能盲目奔着名气去。 
然后买参考书,个人感觉,参考书纯属扯蛋,不理解为什么那么多朋友死活要买北大或某校的什么什么书争相传阅。所谓参考书,指的是说:我们的考试大纲基本和该书一致,一般不会超出该书程度很多。但是我遇到的多数是一些刚开始学习的朋友,给你们个建议,我一样也迷信过参考书,但是读完再看别的,就发现不少参考书都不太适合自行阅读,有很多甚至可以用“烂”来形容。比如北大的高代参考书,抽代参考书,个人感觉写的很详细也的确不错,但是就是不适合学习,没什么办法,太平淡了,从书里根本就看不出来什么新鲜的内容。看这个书有被误导的可能。好好学习就不怕什么参考书,这是我的个人意见,因为数学这个学科和别的不太一样有各自的特点。所以个人感觉参考书参考意义不大,尤其是对刚开始学习的人。 
当然,看参考书绝对没坏处www.chiuchang.com.tw/jiuzhang 是中国著名的唯一一个数学专业书店九章书店的网址,小书店不错的,海淀图书城2楼角落里,就是不知道为啥要在taiwan弄一个主页。一般市面上的书它那都有,想要什么就去邮购,就可惜不打折:(海淀的书都打的。再就是比较好的数学论坛,我只推荐北大的BBS,那里人气比较好,学院那个论坛早就没人管了,在哪基本的不到什么有用的信息。然后图书馆,这个是最重要的,很痛心很多朋友学数学却从来不知道进图书馆。非常非常多的好书,好习题集,市面上基本都买不到了,好多都是70、80年代出版的。有些图书馆是开放的,好象我家乡的省图书馆就是随便进,好在数学书人看的就不多,所以也没几本丢的。我从高一立志要看懂那两长排书架上的书开始学数学,现在看懂快一半了。呵呵。图书馆比什么都重要,一点也不假!什么样的书好呢?从上面网上得到信息以外,你就要自己去图书馆翻,那的书不管看不看的懂我几乎都看过,所以一般的图书馆能有什么样的书心里就有了数,学习下一个学科的时候,肚子里就知道了不少东西,就不着慌也能很好的那派一下学习步骤。我现在手里有一打图书证,不过学校封了很多书都没法还就慌了我了。多看书,比对一下,为什么有的书要这么讲,有的书要那么讲,马上你就能感觉到哪里有文章,哪里很俗了,好象我现在看的表示论,我看的是从GL(n)的线性群入手,但是有很多书是从G-模讲的,有些英文的书直接入手从复表示。都很有想法。这就是书看多了的好处。当然了,必须有一个中心,有一本吃的非常透的(最好是名著)就是华先生说的,要有看家本领。图书馆有很多英文书!这个就是学问了。我个人觉得,研究生的书如果不看英文的简直就是暴殄天物,GTM系列有的是好书,有些就已经很适合本科阅读了。对了追求,偶推荐你一个:real and abstract analysis。具体什么号不记得了,挺好的适合你们学测度的人看。数学专业英语不难,看看就会了。没啥特殊的,只要英语说的过去一般都可以阅读。不过大量阅读就头疼,不习惯啊~:)大多数图书馆的英文书都是开放初期复印的,连影印都不是。所以一般不入计算机库,如果想知道的话,可以去ww.nlc.gov.cn,一般你叫的出名字来的书那里都有。可以看看这本书在国内有没有。 
想大概了解一下书的内容的,去www.loc.gov 一般的好书都有点书评的。有条件的同学可以买一个超星的卡,支持正版!然后就是做题!个人感觉,做题的重要性不言而喻,至于怎么做呢?我喜欢苏联式的教育,就是地狱式学习法……不喜欢西方的讲求对知识的理解最重要,个人认为,不做大量习题,对知识的理解根本就不可能,至少我是,因为我比较笨,领会力差。大家都听说过田刚所谓的四年四万道题吧。其实那是吓唬外行的。算一算就知道每天努力学习,其实不难。 

我知道的各个学科的习题集或参考书呢: 
数学分析, 
这个不用说了,太多了,我首推机密多为期,但是这个绝对不够,偶还推一本高教的绿皮很厚姜什么的,然后是徐利治的典型例子(图书馆),再有一本武汉大学的超大46元很难。另外diadonne写过一个很好的《现代分析引论》有中译本,是用拓扑观点写的很高。这几本差不多了。 

高代, 
我现在看的是复旦的,很好很难,中科大其实也有好的,好象是查建国写的,但是买不到:(是内部讲义,哪为朋友帮我弄我感谢他。 

实变, 
有个实分析的反例,挺好,真正意义上的习题集有一本苏联人写的,叫什么鄂强,还有华中师范出了一本,白皮真正的习题集,适合考前冲刺(顺便说一句实变挺难,这本书由于有详细解答,其实是很不错的,但是可别过分依 
赖它) 

复变 
就我说的那个,不多alfors的到现在还是经典。 

常微 
推荐一个日本人写的,啥名忘了,全是解方程,我觉得这是基本功,必须扎实,所以推荐它,Arnold写的一本用拓扑的角度来看常微的也也很好。被我丢了…… 

拓扑 
偶这里有绝版苏联人的习题集,超厚。推荐amstrong的那本,比北大的好很多,尤其是hausdorff空间那。 

泛函 
没多少习题集,我这有南京工学院的一本,太简单了只适合看一个星期。对了泛函还有《hilbert空间问题集》halmos的名著。特难,呵呵。 

抽代, 
最气人。我学的时候翻遍了我能去的所有的图书馆,没有习题集,我看了几乎所有的抽代教材,勉强算是看完了北大的大蓝本。然后习题集出来了……吐血。不过挺好自己锻炼了许多。个人认为看jacbson的basic algebra需要勇气。serg lang的也不错的说,从范畴入手。再深一点的课程就没啥好的习题集了,好习题也不多。 

微分几何 
多卡摸那本就完全足够了,看完大家就会发现看陈维桓那本简直就是在浪费时间。 

交换代数 
看北大的那个《代数学》其实就很不错很不错了,深入浅出又不难。另外还有GTM,扎里司机和萨莫爱尔,两个wolf奖。 

数论, 
其实就是北大的大厚本最好,十分详尽,适合打基础。还有hardy的名著《Introduction to the number theory》一本定理集! 

fourier分析 
其实是非常非常重要得到一门学科,可惜很多人不重视。所以学泛函就吃力。偶推荐陈建功 

代数数论 
偶爱死冯可勤的那本中科院参考书了。还有潘氏(是兄弟不??)写的那个简单点的。 

李群 
还是北大的那个什么项武义的好了。 

实分析嘛, 
偶还没看,不过知道好书就是程民德的那本,当过几天 
枕头后来没时间就没看: 

偏微分 
就是偶发疯买的那本三卷的,好书是好书,太贵 
了……哎,入世后就这恶果啊。 

关于学数学,其实我推崇古典式训练法,在这种原则下,数学分析就变的不是特别的重要了。也许是我浅薄了吧,但是我始终觉得,反复的搞数学分析实际并没有什么好处,它的营养是有限的,应该把眼光放长一点。和你们举一个例子吧,现在出小学数学题,大多数人都会做全部,那你这几年都在学小学数学吗?那东西需要一段一段的回味提高的,闷头就知道学数学分析没什么出路的这个可以肯定。 


偶推荐的几个核心基础课是常微、数论、微分几何和拓扑, 


这几门学科都很重要的说(其实哪个都很重要)但是在这些上下工夫大一点,会使你收益终生的。再有数学史,这个太重要了。我觉得一定要好好学学它。和大家举几个好玩的例子,大家也许就明白了一些道理。学抽象代数,环有理想,有唯一分解,域有分裂域等等的,而这些概念,最早都是来源于数论的,以前是没有代数学这个学科的。直到galois发现可解群和方程的关系才诞生,而实变函数的研究晚于复变函数,和实数与复述相反,线性代数直到19世纪末才有突破,其实是很新的学科,这些如果不知道的话,学习的时候容易本末倒置的。 
关于边缘学科,我不喜欢那些捧着纯数学鄙视经济学或计算之类的人,因为即使是边缘的,也是有很深的学问的。但偶不了解,就没啥发言的权利了。 

多接触一些朋友对学习有极大的好处的他们会帮你少走不少弯路,但是走弯路是学习必不可少的过程,个人感觉,走的每一个弯路都是很有意义的。 
多学习,多作题,少谈些理想。 
很多人心都非常高,包括我,这是真的,但是我知道我的理想根本就实现不了。我是什么?一个普通的人而已,我能走多远,我比谁都清楚,是有理论限制的。我曾经在梦里想过做一个多么了不起的数学家。但是这东西,就好象缘分一样,可遇不可求的,真理大道上有伟人,更多的是倒下的无名的人士,我能做什么样的呢?学数学,多数只是为了一个信念,就是我要学好它,尽我最大可能学到最好。如果有些高度我到达不了,那我也不会很难过,因为我有过自己的贡献,我实现了我的人生价值,这就足够了。像我这样的人,不会是第一个,也不会是最后一个,多的很。眼光太高,反而容易形成急噪情绪。 
记得有一本书,忘了哪个了,说过一句话(好象是吧): 
Approach your problems from the right end and begin with the answers,then one day ,perhaps you will find the final problem.很精辟的,送给大家。


page 2
2011-10-28 20:37:47 零域 (我就是来学习的。)
我觉得题还是要做的。但是题海战也不好。不过楼主似乎说的也不是题海战。其实就是理论加实践。只理论没实践和只有实践没理论(就是盲目做题或者像ls某位大神说的“what”,"how",不知道“why”)都是没搞通数学。 
数学作为学科本来最初也就是一门工具。工具你说热不热爱它,各有各得看法。反正我学数学谈不上热爱,就是学计算机感觉需要良好的数学背景,最重要的是那种思考问题的方式是收益无穷的(严谨,细致,有条理,周密,全面,化简为繁等等)。养成这些思考习惯在各方面对自己都有帮助。
2011-12-01 07:30:59 来自: Humble (我想去CEMA死学5年)

寄语后学者: 

以大多数人的努力程度之低,根本轮不到去拼天赋。 
------------------------------------------------------------------------------------------------------------------------- 

说明:每次更新,我都会在下面的留言区先留言,提醒要点。 
------------------------------------------------------------------------------------------------------------------------- 


老帖新论 

http://www.douban.com/group/topic/27418564/ 经济学入门指南【☆☆☆☆☆推荐】 

【2月16日更新】 

--------------------------------------------2012年系统整理---------------------------------------------------- 
薛兆丰2011秋季经原 

1、http://www.douban.com/note/194652245/?start=0&post=ok#last 
2011年9月10日【1】 【1月9日更新】 

补充:http://blog.sina.com.cn/u/2571804103 Humble的经济学笔记 
【1月11日更 新】 

2、http://www.douban.com/note/195232063/ 2011年9月10日【2】【1月12日更新】 

3、http://www.douban.com/note/196332657/ 2011年9月10日【3】【1月17日更新】 

【2月3日 再次更新 3000字】 


3''' http://www.douban.com/note/200335210/ 2011年9月10日【4】 【2月14日更新】 

【亲们, 情人节更新的,苦逼学生有木有!没有女朋友,只能学习的苦逼!!】 

4、http://www.douban.com/note/196412302/ 2011年10月22日利息理论2 
【接2011年整理的利息理论1 】【1月21日更新】 

5、http://www.douban.com/note/196843924/ 2011年10月22日利息理论3 

【1月21日更新】 

6、http://www.douban.com/note/196920706/ 2011年10月22日利息理论4 

【1月21日更新】 

7、http://www.douban.com/note/197463102/ 2011年10月23日利息理论5 

【1月27日更新】 

8、http://www.douban.com/note/197556661/ 张五常08年西安交大两周讲学文字稿 

【九万字,慎入】 

【1月28日更新】 

9、http://www.douban.com/note/197635892/ 2011年10月23日利息理论6 

【1月29日零点更新】 

10、http://www.douban.com/note/197883179/ 2011年10月23日利息理论7 
【1月30日更新】 

11、http://www.douban.com/note/199070289/ 张五常 《企业的合约本质》 

【2月6日更新】 


------------------以下是2011年不系统整理------------------------------------------------------------------ 
http://www.douban.com/note/181170271/ 薛兆丰2011秋季《经济学原理》期中考试试题 

http://www.douban.com/note/181580145/ 薛兆丰《经济学原理》期中考试试题精讲 


http://www.douban.com/note/182886347/ 第四讲:利息理论1 【薛兆丰博士】 10月22日晚 


http://www.douban.com/note/183902709/ 经济学原理【薛兆丰博士】11月6日晚 【1】 

http://www.douban.com/note/184238937/ 经济学原理【薛兆丰博士】11月13日晚 【1】 

http://www.douban.com/note/187185993/ 11月26日晚【薛兆丰博士】经济学原理 第八讲 货币 


http://www.douban.com/note/188103574/ 11月27日晚【薛兆丰博士】经济学原理 【全,共两万字】 

寒假会有完整版,从9月10日的第一次课到12月17日最后一次课 

------------------------------------------------------------------------------------------------------------------ 


以下这篇提纲挈领,只有学完全程,才能更深刻理解。 

薛兆丰 
2011年10月3日 

这个秋天我在北大教《经济学原理》,是有史以来第一次。教学大纲开门见山:“经济学是一门研究人的行为规律的学科。普适的经济学原理,不仅被用来分析包罗万有的社会现象,而且还深刻地影响了历史学、社会学、政治学和法学等相关学科的研究方法。本课程向从未接触经济学的本科学生演示和传授这种分析技能。” 

临开课那晚,翻出由阿尔钦(Armen A. Alchian)和艾伦(William R. Allen)所著、由阿尔钦12年前签名赠送的老课本《交易与生产:竞争、合作和控制(Exchange & Production: Competition, Coordination, & Control)》。扉页上是老人家85岁时的笔迹:“给兆丰:感谢你向独特的人群——中国人——传播经济分析原理;尽管它与我们从中国人那里所学到的所有知识相比,只占微不足道的份量。” 

阿尔钦1950年的《不确定性、进化和经济理论》,为求索经济规律的事业,找到了坚实的理性基础;此后,他为“成本”、“租”、“产权”等主题所作的叙述,开辟了透过经济学理解世界的独特视野。不仅如此,他还致力于传授经济分析原理。阿尔钦的女儿告诉我,他当年还用磁带录音机来分析自己授课的效果。他的学生不仅有经济系学生和教师,还有大量的联邦法官,不仅影响了经济学的研究方向,还增进了美国司法界对产权和企业行为的理解。 

老人家送我《交易与生产》一书时,正在修订该书的新版,而我则在并行作中译。我有空闲就翻译,有问题就电邮,而他往往当天就回信。如此良辰美景,持续了两三年,译稿达数十万字。遗憾的是,老人家八年前起记忆力衰退,出版计划被迫搁置。今天他仍健在,记得往事,只是不再写书了。 

今天我上教坛,临门一脚,应该怎样踢?我想过好一阵,还是从阿尔钦开始。在他看来,不论各人怀有何种愿望,人类只有直面种种约束、选择这样或那样的竞争规则,才能存活和发展;而研究竞争规则的选择及其结果,就是经济学的目的。 

显而易见,人类至少面临四项普遍约束:(1)东西不够;(2)生命有限;(3)人际依赖;和(4)需要协调。人类种种制度安排,一概是为了应付这些约束而衍生的。它们对应着三套规律:(1)需求定律;(2)利息理论;(3)产业理论;和(4)宏观理论,而这就是通过经济学看社会万象的视角。 

第一项约束是“东西不够”。人类如何选择竞争的规则,如何解决资源争用的冲突?为了回答这个问题,我先让同学们读法国巴斯夏(Claude Frédéric Bastiat)在1850年发表的名文“看得见的和看不见的(“What Is Seen and What Is Not Seen”)。人类一切活动都事关选择,而经济学者的特长,是去看见那些一般人所看不见的代价,否则就无法合理地评估选择所引致的得与失。 

接着是介绍斯密(Adam Smith)眼中的人性。许多人以为,斯密将市场与道德对立起来,说他先写了《国富论》,后来又补充了《道德情操论》。其实,斯密先出版了《道德情操论》,而过了整整17年才出版《国富论》。在斯密看来,人人都有同情心,自我的感受永远是他猜想中的别人的感受的函数。无奈的是,同情心既走不远也靠不住,而人类无时不刻需要友侪的协助,所以只有依靠商业,才能使那些默默无闻的人们随时得到帮助。 

有了上述两点铺垫,就可以讨论阿尔钦的雄文了。先介绍“不确定性和生存进化”的框架,然后是解释不同的竞争规则会引致不同程度的社会浪费,最后咬紧“成本”的定义,冷静地剖析“物质主义”、“环保措施”、“中间商的作用”、以及“义务兵制与志愿兵制”。 

在详细讨论阿尔钦关于“产权”的论述后,我们引入科斯(Ronald Coase)的贡献。在存在交易费用的世界里,个人的权利与他人的权利必然存在冲突,而警句“每个人行使权利应以他人权利为限”却缺乏任何指导意义,只有科斯的洞见才为调和冲突指明了方向。不消说,需求定律和价格管制的理论分析,是这个一般化框架下的核心技术了。 

第二项约束是“生命有限”。由于没有人是长生不老的,所以世事的不确定性就会深刻地影响人的行为,而由此产生的“不耐(impatience)”便成了“真实利率(real rate of interest)”的决定因素。这是说,较有耐心者用“现货”与较无耐心者的“期货”交换,其比价便决定了利率。这个机制,不仅影响了人们究竟是生产草房还是砖房、吃饭还是酿酒、种树还是砍树等决策,而且为货币银行体系和金融投资市场,打下了深刻而广阔的根基。 

第三项约束是“人际依赖”。人不得不与他人为伍,而只要社会上超过一个人,人与人之间就必然存在知情不告、尔虞我诈、过河拆桥和互不信任等现象。于是乎,各种合约安排、组织结构和防范行为便应运而生。环顾我们的社会,法庭、警察、家庭、企业、学校、协会和政党,婚姻中涉及的钻戒、礼金、嫁妆,朋友之间的喝酒、聊天、讲粗话,企业主对员工往往具有较大的酌情控制权……种种现象,无一不是为了防范“人际依赖”的隐患而衍生出来的生存对策。 

第四项约束是“需要协调”。三个人制砖,两个人砌墙,本来合作得天衣无缝。后来一位砌墙的因为熟能生巧而提高了速度,五人的合作便出现了“失衡”,砌墙的劳动力出现了“闲置”或“失业”。要摸索出新的“和谐模式”,不论是让一位砌墙的人转业去帮助制砖,还是改造制砖设备以提高生产率,都需要花费时间和资源。种种宏观经济理论试图刻画、解释和调节的,不外乎是这种因为需要协调而产生的困境。 

在课程的每个环节,我们一以贯之地遵循“在约束条件下、通过平衡边际、来取得最大化”的思路;与此同时,“人权”、“道德”和“良心”等社会规范,也不再被视作开天辟地时“天赋”的内容,而将被理解为人际重复博弈后“人赋”的结果,而且它们也必将随着生产力和技术的变革而缓缓演化。 

关于经济学对人类世界观的贡献,经济学家德姆塞茨(Harold Demsetz)曾经总结道:自斯密以后、一个半世纪的经济学成就,就是“建立了高度分权的抽象模型,其中没有人可以控制价格或其他重要的市场指标。”不论是谁,对这句话的理解越深,世界观的变化就越大,而这既是我所理解的经济学原理,也是我授课的免责声明。 

------------------------------------------------------------------------------------------------------------------------ 
建议长期订阅张五常的新浪博客,80年代的文章也值得看。另外,李俊慧的经济学讲义正在上面连载。 

http://blog.sina.com.cn/s/blog_47841af70102du9k.html 经济学讲义-第十三讲:租值的概念 

http://blog.sina.com.cn/s/blog_47841af70102du6n.html 经济学讲义-第十二讲:成本的概念 

不再一一列出,感兴趣的按图索骥即可。 

------------------------------------------------------------------------------------------------------------------------- 


新制度经济学书籍推荐阅读 


http://www.douban.com/note/197574186/ 【原址】 

与行为经济学和奥地利学派经济学类似,新制度经济学也是我接触较早的经济学门类之一。从我自身的涉猎范围而言,觉得以下一些书籍是较为好的,列举出来仅作参考: 

入门篇: 

埃格特森《经济、行为与制度》:对于新制度经济学所涉及的各个领域有着比较清晰完整的阐述,而且阅读起来也不困难,也容易让人产生兴趣,是本很好的入门书籍。 

布坎南《自由、市场和国家》:对于了解布坎南的学术思想历程以及他在公共选择领域的基本观点可以有个初步的了解。 

交易费用经济学: 

1、科斯的《企业的性质》和《社会成本问题》:这是科斯的最经典的两篇论文,也是交易费用经济学和产权经济学的奠基之作。正是第一篇论文当中阐述了赫赫有名的“科斯定理”(Stigler命名的)。 

2、弗鲁博顿《新制度经济学:一个交易费用分析范式》:不用多介绍,这本书虽然年代久远,但是被学界普遍公认为是新制度经济学的经典书籍,虽然当今研究的前沿领域没有被反映在其中,对于交易费用的概念通常也用当中的解释。 

3、威廉姆森的《资本主义制度》和《治理机制》,威廉姆森是交易费用经济学的集大成者。科斯也认为正是由于威廉姆森致力于该领域的研究,使得交易费用经济学广为认知并被运用。个人觉得《治理机制》读起来更有兴趣一点,对于“资产专用性”和“纵向一体化”等以及文化在组织经济学领域的运用介绍的尤其深刻。 

产权经济学 

巴泽尔的《产权的经济学分析》和《国家理论》:巴泽尔在产权经济学方面是比较有建树的,这两本书也是值的阅读的。 

制度变迁理论: 

1、诺斯的《西方世界的兴起》、《经济史的结构和变迁》、《制度、制度变迁和经济绩效》以及《理解经济变迁的过程》:个人觉得《西方世界的兴起》可以作为制度变迁理论的入门读物,可以让读者了解到是什么让西方世界主编走向繁荣。而剩下的三本书当中个人觉得《经济史的结构和变迁》是写的最为透彻的,在该书中诺斯有效地把国家理论、产权理论和意识形态理论有机地结合起来,向我们阐述了制度是如何发生变迁的。诺斯也创造性地运用了“暴力潜能”一词。而《制度、制度变迁和经济绩效》一书是诺斯向行为主义的转型之作,不过个人觉得写的倒不是很好,很多地方逻辑不能自洽。不过在《理解经济变迁的过程》一书中似乎把诺斯的行为主义思路表述了出来,个人觉得是结合语言科学和人工智能或者脑科学进行深入分析。 

2、格雷夫的《大裂变》:这本书读起来感觉貌似是介绍伊斯兰世界的衰落和基督教世界的兴起,综合运用了经济学、历史学、博弈论等学科即方法,对中世纪后期东西方世界的大分叉给出了制度的解释。 

新政治经济学 

1、奥尔森的《集体行为的逻辑》和《权力与繁荣》,前者是新政治经济学的三大经典书籍之一。也是利益集团理论的奠基之作。而后者则是奥尔森的遗作,在书中阐述了奥尔森对于“民主”概念的新认识,强调政治竞争。 

2、阿罗的《社会选择与个人价值》:经济学大牛的经典书籍,不用多解释,社会选择理论不可不读之作。 

3、森的《以自由看待发展》、《伦理学与经济学》以及《身份和暴力》:提高阿罗就不得不说对于“阿罗不可能定理”进行扩展的森,森从自由的角度阐述了“阿罗——德布鲁模型”,也在《以自由看待发展》中批驳了所谓的“亚洲价值观”,申明了民主对于解决经济和社会问题的必要性。森的哲学和伦理学功底也是极其深刻,在《伦理学和经济学》表现地很清楚,至于现在的新作《身份和暴力》则是结合目前现实,阐述了人们把自己定义为单一身份的危险性。 

4、Acemoglu的《政治发展的经济分析》:2005年克拉克奖得主,主要研究领域涉及劳动、收入分配和经济增长,是位论文高产且质量很高的大牛。这本书提供一种理解民主的创立和巩固的统一框架。这一框架强调为什么政治制度变革与在非民主政体背景下的政策调整有何根本性的不同。 

此外,还有赫尔普曼的《利益集团与贸易政策》、佩尔森和塔贝里尼的《政治经济学:对经济政策的解释》,在此就不一一做介绍了。 
------------------------------------------------------------------------------------------------------------------------- 
友情贴:2012春 北大周其仁中国经济专题 

http://www.douban.com/group/topic/27617671/ 
------------------------------------------------------------------------------------------------------------------------ 
{ 隔壁老王神贴在此 http://www.douban.com/group/topic/15148901/ 

【经济学入门 (草稿) 劳动经济学更新ing 】 不敢造次 【2月2日更新】} 

【敦促老王勤奋手打】 

http://www.douban.com/note/201020832/ 老王第二神贴 【2月17日更新】 
-------------------------------------------------------------------------------------------------------------------------
本人之前就读于英国的两所大学,一是女王大学,二是华威大学,金融硕士研究生毕业。下面为大家列出就读四年所用的教科书,以求为那些想了解金融学的朋友一些帮助,豆列在此http://book.douban.com/doulist/1322614/: 

总的来说,金融学可以分为两大类:公司治理和投资学。金融学有趣的地方在于有的分支非常的文科化,有的却又极其数理化。这也是其中难学之处。 

只是想初步了解金融的朋友可以读读“本科第一年的2”和“第二年的1”; 

想系统学习公司治理的朋友可以读读“第二年的2、3”和“第三年的2、4”; 

金融很强调计量经济学的基础,因为学到后面需要用大量的数据来建造模型,大量的数据处理需要运用计量知识,这也是刚开始很多朋友刚开始觉得计量枯燥的地方,因为老是觉得不知所云,也不知有何用处。。。 

要系统学习投资学的朋友可以读读“第二年4、5”和“ 第三年的3” 

有些朋友认为金融属于微观领域,其实不然,金融其实是个交叉学科。公司治理应该属于微观领域,但是国际金融却是属于宏观经济的范畴,而且货币金融学也属于一个重要的分支,所以学懂宏观模型,如蒙代尔-弗莱明等,也是非常重要的。。。可见“第三年1” 

本科第一年: 
1.Atrill and McLaney: 《Accounting and Finance for Non-Specialists》, Prentice Hall 
介绍一些基本的会计知识,比如debt和credit之类的。 

2.Mishkin, F. S. and Eakins, S. (2009), “Financial Markets and Institutions”, Pearson/ 
Prentice-Hall (6th edition). 
这本是非常著名的教科书,国内好像也有译本。对于金融机构如央行等有很多介绍,是金融知识的入门书。 

3.Ian Jacques, Mathematics for Economics and Business, Pearson, 2009 
介绍最基础的统计知识,需要矩阵之类的。。 

4.Barrow, M, Statistics for Economics, Accounting and Business Studies, 5th edition, FT Prentice 
Hall, 2009. 
基础的计量经济学,包括概率论。 

5.Economics 
Michael Parkin, Melanie Powell, and Kent Matthews, 
7th edition, Pearson Education Limited. 
帕金的书很好的入门书,不深,数学也不多。喜欢读故事的人可以看曼昆的那本,也很不错。。。 

这个阶段主要是入门,掌握金融的大体结构,打牢数学基础,因为到后面,计量经济学虽然枯燥,但是非常重要,如果概率论都没学好,计量就学不上去。。。 

本科第二年: 
1.Cecchetti, Stephen G., 2007 Money, Banking and Financial Markets, 2nd edition,Mcgraw-Hill. 
介绍银行和货币,以及简单的货币政策和外汇市场,比mishkin那本而言,又深了一点。 

2.Richard Pike and Bill Neale, Corporate Finance and Investment, Decisions &Strategies, FT/ Prentice Hall, 5th Edition 
这本书是大块头,不晓得有没有译本,但是刚开始读的时候非常难,介绍很全面,是中级教科书。。。如果能啃下来,对日后深入将打好坚实基础。。。公司治理和投资学都涉及到了。。但是主要是公司治理和mm模型。。但是个人感觉期货期权那张写得不怎么样。。。之后还会介绍期货期权的权威教科书。。 

3.H. Varian, Intermediate Microeconomics: A Modern Approach 
范里安的书很著名,这位作者来头很大,之前是加州伯克莱信息管理学院院长,现在摇身一变,成了谷歌首席经济师。书写得相当清晰全面。。。基本没什么数学。。。中级教科书。。。掌握本书的基本框架就可以说是掌握了微观的基本框架。。。最后还加入了一般均衡。。。 

4.Advanced Level: Bodie Z., Kane A. and Marcus, A.J. 2009, Investments, 8th Edition, McGraw-Hill. 
这本书跟上面richard pike and Bill Neale一样,是本有分量的书,对于投资学介绍得非常系统,国内好像也有译本,在投资学方面想打好基础的朋友要狂啃这本,因为这本把投资组合理论(portfolio theory)和资产定价理论(CAPM)讲得很清楚,是我看过最清楚的一本。。。 

5.D Gujarati and D.C. Porter, Essentials of Econometrics 
计量方面公认的入门书就是这本,国内叫古扎拉蒂,作者很聪明,关于基础计量出了好几个版本,同样的内容翻来覆去的。。所以入门书用来用去都是他写的。。。这本前几章有一些基础的概率论,但是之后会向计量过渡了。。。初学者都觉得枯燥,很多老师也不会教计量,因为刚开始跟经济理论搭不上边,其实不难,如果能耐心点,这门往往能拿高分。不过计量常常是挂最多人的一科。。。 

6.James stock & Mark watson. Introduction to econometrics. 
一本中级计量教科书,对于古扎拉蒂的书是个不错的延伸,特别是time series和对于计量数据的解释。不过计量除了看书,主要是要做题和应用,应该配合书后的练习,这就要看导师的功力了。

本科第三年: 
1.Krugman, Paul R. and Maurice Obstfeld, 2009, International Economics, Theory and 
Policy. 8th edition, Pearson Addison Wesley 
相信很多人都听过克鲁格曼的大名,最近刚获得诺贝尔经济学奖。这本书前半部是他写的,关于贸易理论的。不过当时我们没学,学的是后半部分,obstfeld写的国际金融,写得相当impressive。很多人认为金融主要涉及的是微观经济,其实不然,国际金融就与宏观经济密切相关,所以学好宏观对金融也相当重要。本书的模型其实就是翻版的IS-LM模型。 

2.Copeland Thomas E and J Fred Weston, Financial Theory and Corporate Policy. 4th edition, Pearson Addison Wesley. ISBN-13: 9780321127211. 
本书算是中高阶的了,里面模型很多,文字较少,需要老师很详尽的讲解和资料才能读完,不大适合自学。 

3.John C Hull (2008), Options Futures and Other Derivatives. 7th edition,Prentice-hall International 
这本书是学期货期权的权威教科书,写的详尽有条理,非常适合自学,应有尽有。。。期货期权的种类也介绍得非常详尽。。如果数学好,又不怕烦的朋友,可以挑战其中的Black-scholes model(期权定价模型),数学论证极其复杂。当年老师考前直接了告诉我们5道选3道的大题里面,肯定会考这个,不过也没有几个学生愿意准备这道推理题。。。不过这个模型也得了诺贝尔。。。 

4.Corporate Finance", by Ross, Westerfield, and Jaffe 
McGraw-Hill Companies; 6th Pkg edition 
这本是麻省理工的大老写的《公司治理》,国内也翻成《公司理财》。浅显易懂,公司理财融合了会计知识和金融知识,相对来说比较容易学。难学的是mm模型,易学的是股票定价模型,学了之后对炒股可能有点用处。。不过这模型只在美国有用,国内就排不上用场了。。。 

研究生一年: 
1.Advances in Behavioral Finance by Richard H. Thaler. 
行为金融学是现代金融学的一个重要分支,融合心理学和生物学的知识,为了更好的判断人如何做出金融决策。这门课可以很浅显,也可以很数学化,有兴趣的朋友可以选修。 

2 Econometric Theory and Methods by Russell Davidson.Oxford University Press 
这本书是高级的计量了,相当难读,如果不是有很深的计量背景或是很牛的老师辅导,不建议挑战。我们当时是有老师的辅助教材才被老师硬推着读的。。 

3.Business Analysis and Valuation: Using Financial Statements, Text and Cases by Krishna G. Palepu... 
South-Western College Pub; 4 edition 
这是研究生的一门选修课,已经是纯会计学了,重点是杜邦财务比率分析法,一大堆财务比率公式,有四种方法算公式的股价,但是原理是四种方法算出来的股价要是同一个数。。。有点难度,不过很好玩。。。 

4.International Financial Markets by Richard M Levich
国际金融课到了研究生的层次比较注重实践性和理论的检验性。。。本书注重检查理论的有效性,一般导师会要求看很多实证的论文,所以教科书一般都是摆摆架子的。。。

5.International Financial Markets and the Firm by Piet Sercu
本书注重实践性,短期掌握得好可以去考虑去外汇交易所工作。。我们当年用的时候该书还未正式出版,导师只是说,这个作者去了普林斯顿给学生们用这本书,所以我就拿来用了。。。
需要技能:程序调试能力.

1,跑通程序.

2,运行程序的核心功能,从外部了解它的运行方式.

3,阅读核心功能相关的官方文档.

4,读核心功能对应的源代码(即核心模块),从内部大概了解一下核心模块之间的联系.

5,提出一个关于源码的问题(比如状态机如何运作,filters分为几层等),试图解决.

6,浏览该问题相关代码和测试,然后边调试边解决问题,(不要在代码非常不熟悉的情况下就开始调试,过长的程序栈会消耗太多时间).

7,继续提出问题,直至核心模块烂熟于心.

8,(可选)与同学同事交流学习该模块,或写成博客与网友分享,以加深记忆,获取反馈.这次你很有可能会发现理解上的漏洞或错误,进行查漏补缺吧.

9,开始阅读次核心模块,并重复3-7步骤.

10,如果还嫌不足,为该程序开发插件或库吧.

11,理解源码.

问题导向阅读代码的方法分为外部和内部两个部分.

外部阅读:带着问题去看,自己提出一个程序常用的应用场景,然后自己去在程序上测试一些主要逻辑,比如后台添加了A,前台是否就生成了B?服务端修改了C,客户端会不会出现D之类.  

内部阅读:带着问题去看,提出一个如何写程序拓展的场景,(你以后想拓展这一块逻辑该怎么做?有没有内建的现成API可供调用),总之不要被文档带着思路走,要被问题带着思路走.

请大家多拍砖或补充,多谢.
朋友来我公司溜达,惊讶于漂网小童鞋们的敬业,晚上九点,还一多半没走。晚上十二点,也肯定依然灯火通明——即使不少人没在办公室,也依旧还在公司Q群里谈事说事。 

他问道:“我嚓啊,我怎么招聘的九零后,个个都屌不拉几,不敬业也就罢了,还动不动就闹辞职,哄着都不行!离职率高得不像话。七零版我就会管理,九零版一筹莫展!” 

麻将法提升积极性 

好吧,如果我来回答这个问题,我就会先推荐他先去“快书包”买本书:《海底捞你学不会》。我认为我自己的答案,全都在那本书,某一页纸上了!哎,刚好那页,被我撕下来,去复印了。手头虽然没有,但可以用记忆,随便复述一下: 

某海底捞基层员工的总结说,其实,用打麻将的状态,去做工作,就成功了!你想想看,打麻将的时候,你坐在我对面,我不小心把麻将掉地上了,掉你脚底下了。你会抱怨说是我的错,还是直接把牌捡起来?OK,全都是立即默默捡起来对吧?为什么这时,不指摘别人犯错呢?因为,你如果想玩牌,想赢钱,就别那么多废话,直接能快点打牌,才是最重要的! 

打麻将的人,要凑一个“小团队”才能干活,如果大家约好了八点打牌,可是七点的时候,三个人就到齐了,三缺一啊,肯定给那个没到的打电话。想想,那家伙是埋怨对方三人,“不说好了八点么?你们早到了是你们错啊,催我干嘛?”还是赶紧说抱歉抱歉,我尽快赶到!狠不能平时不舍得打车,这时也为了对方三人,打车前来了! 

请问,这时的心态,用自己的行动,来安慰队友的心情,用来工作,那得多健康啊! 

往往打麻将的人,会提前说好几点散伙。但经常的状况是,说好12点散,可11点半时,输钱那家伙就提议了,哥几个,我今天背,能不能加会儿班,多打几圈?通常是不是大家都同意呢?这时的加班,怎么没人抱怨?都默认响应? 

打麻将的人,从来不会抱怨环境,天再热,光着膀子也打,也不觉得有多难受。没桌子,搬个箱子也打!年纪再老,身体再差,只要一开始摸牌,立即精神抖擞,精力无穷!投入其中后,所有外在糟糕环境,也如浮云一般,不在话下,浑然忘我了。 

打麻将的人,还都自觉自发,苦练技艺!九条和六条,七万和九万,纯用手摸,差别那真是微小啊!可是你看,打麻将的人,都没事就练,结果各个手指上仿佛长眼睛。这没人逼着,自觉苦练的劲头儿,到底哪儿来的呢? 

打麻将的人,还一巨大优点:输钱了,绝不怪罪别人。技不如人,都是骂自己笨,或者点背运气差。从没说,“你们肯定作弊了!都怪你们,老子才输的钱!”这他妈得多健康的心态啊!如果工作中,人人都是这种不抱怨别人,反而从自己身上找原因的态度,哪个企业不得噌噌的增长啊! 

基本上,每个人读完这些“打麻将论”,估计都会拍案叫绝。我要说的,和我们漂网一直在做的其实一样。我们的管理,其实就是我称之为“支桌子”的事。 

每个人天性中,都是喜欢玩,而不喜欢工作。只不过,七零版人,小时候穷,心重!所以肯压抑自己,去努力工作,默默奋斗。而现在九零后小孩,成长的时候,就相对富裕了,也更会为了自由,而放弃很多物质追求。所以,如果公司能够把工作,设置得天天玩一样,则很多管理问题,迎刃而解。 

所以,光把管理类比成打麻将没用,还得真的去做才行。所以我说是“支桌子”。在公司内把桌子支起来,让麻将飞一会。 

麻将的特点,一是公平,相对而言,大家都遵守规矩,一晚上下来,再背运的人,也有和几把牌的机会。所以人人爱玩,菜鸟也喜欢跟着玩。所以在漂网,有些奖励,比如某日上个硬广,当天能上40万,则公司人人都赢,赢得春装一件。每次周业绩新高,也必然全公司人人有奖励,已经形成不成文规矩。C店从一皇冠就开始吃,一直吃到五皇冠饭了…… 

第二个特点,是麻将多多少少有运气成分,使得游戏充满悬念。比如漂网有时候的奖励是扔飞镖,扎多少数得多少钱。有时候抽红包,也许一百,也许一千……有时候竞猜第二天营业额,最准确那个独得千元(其实90%得奖成分得靠蒙!)例如最近的新游戏是,如果第二天有首页硬广,谁先刷出来,第一个截图到Q群里,就独得999元,结果现在每个人都变夜猫子,拼人品,看谁先刷出来,并截图……就连最新清明小长假的“美食比赛”,也运气成分居多:每个人假期,都买来奇怪零食,然后放一起,比拼谁的美食更有创意,然后赢得大奖……妈的,谁买的酱鸭翅?老子今天拉稀一天了! 

麻将第三特点,是最终而言,谁更勤奋更用功更聪明,把时间拉长,就能赢得更多。比如漂网新近弄了个分库,在大山子,就叫“山库”。时间国际大厦这库,就叫“国库”。两个库,就开始玩游戏了,每日最快奖,每周最多奖,零差错大奖……总之,山库PK国库,玩着玩着,哪个库更勤奋,也就体现出来了……当然,最终顾客满意度,也就上来鸟~~~再比如如果五月份纯漂网的网络销售能过一千万,最勤奋最核心的一票人马,就马尔代夫度假了……这,比拼的说到底,是辛勤汗水。 

宏观而言,麻将管理法,一个核心要素是:快速输赢,快速开局。仿佛打麻将一晚上,其实是很多很多局的。如果玩一整晚,就只和一把牌,只有一个人胜出,我猜麻将绝对没现在这么兴盛。 

如果九零后小孩们每天的工作,都是这种极强游戏感,赢了固然开心,输了也不怕,只盼着快速开下一局,有赌未必输,能赢就下注!这种浓厚氛围一旦形成,只怕小童鞋们想不投入都难,玩嘛!(虽然,在别人眼中,管这叫“敬业”。) 

最后,我必须说明一下,也是黄铁鹰在《海底捞你学不会》一书,最后一章点题时所述,为什么海底捞你学不会?概因创始人性格使然。管理是艺术,而非科学。既然是艺术,就有天分的那个东东在里面,硬学,是学不来的。或者说,你可以发挥你的长项,却很难抄袭别人与生俱来的才艺。戴尔的极致运营效率,西南航空的低成本战略,苹果天马行空的创新能力,这些案例,商学院讲了N多年了,却为什么没一个COPY成功的案例?因为,那是创始人的基因 ,骨子里的天分……后天又磨砺多时,团队人人信奉,细节日日雕琢,哪能别人看着好,便说学就学呢?硬学,往往邯郸学步,最终南辕北辙,元气大伤。 

企业增长需与员工能力匹配 

谈到这里,就会有很多人出来驳斥:如果你的小企业,缺乏高增长,那么培养人就是为他人做嫁衣! 

好吧,我必须得说,这是个俺们屌丝创业界由来已久的“迷思”。 

首先我想,大家必须承认,一次创业,和组件一个家庭似的,有其生命周期,你不能把事情想得太美妙,但也别太沮丧。不太成功的小企业,通常是飞速走完其周期,而大企业,往往能在辉煌的时刻延续很久。但终究终究,每个企业都会衰亡的……就仿佛,一对少年少女,一想起组建家庭,就充满粉红色的憧憬,浪漫且美满,其实呢,一个家庭的周期,分为“单身期、新婚期、生育期、满巢期、离巢期、空巢期、鳏寡期”,有句话这么说,“我们的幸福,都只存在于别人的眼中”——只有“满巢期”的企业,才是别人眼中的完美。实际上,无论是家徒四壁的创业“单身期”,或举步维艰的草创“新婚期”,以及虽然高速成长但慌张混乱的“生育期”,都充满着艰涩与痛苦……而企业开始走下坡路的“离巢期”或之后的阶段,想想都令人心酸。 

回到培养人的问题,我先问句狠的:就算你不培养牛逼精英,你以为普通笨蛋,你就留得住么? 

我自己在初创阶段,就有过这样伤疤,明明平庸得不能再平胸的小出纳,突然告诉我,她家里个找了个大企业里的……还是继续当小出纳,但她妈说,毕竟大企业更稳定,看起来短期之内不会倒闭,然后,她还居然给我下通牒,“老板,那边要求我迅速到岗,我就明天天做交接哈,所以你明天最好能麻利点”,我当时心里那叫个千万头草泥马奔腾啊……可又能怎样。形势比人强, 一个屌丝小企业老板的辛酸,真不是一个安稳白领能理解的。 

这时,各位,就带出一个问题来了:你别以为你的企业不增长,就能留住武功同样不增长的普通员工——再烂的员工,也有攀高枝的心耶!你信不信?丫没离开你,是因为没遇到好机会而已……一旦遇到稍微好一点的机会,平庸员工离开你的动力,并不比精英员工的少半分! 

反过来想你就平衡了,你如果高速增长呢?你会始终留住那些不匹配的员工么?你业界增长十倍速了,有些员工还是一倍速的能力,你能忍受?他耽误的不仅仅是他自己的前途,还拖了整个团队的后腿。你是不是顶多再给这种苯苯几个月机会,还不行,也就挥泪劝退了?这时候,你怎么不骂自己没良心呢? 

所以,最终员工能否留得住的核心原则就一条:匹配。 

企业业绩的增长,和员工武功的增长,只要是匹配的,就能获得“动态稳定”。反之,无论是企业快,还是员工快,都会造成员工的流失,不以你的意志为转移。 

好了,接下来回到你培养人才被谁挖走的问题通常来说,挖你人的,通常是和你相似规模的企业,高一两个等级是有的,但数百亿规模的百度,跑个二十人小公司挖人,你信么?这就是另一种“匹配”的问题,换个角度,假如你是个200人公司的小型企业,从百度空降个高层给你,你敢要么?就算你给得起薪水,他的管理能力、或业务水平,是你能消化得掉的么?再过来,从一个10人小作坊给你挖来个副总,也给你当副总,你敢要么?200人小企业虽然小,但流程的建立,必定也初具成效,从10个人那种“沟通基本靠吼”的地方来个副总,你不得鸡飞狗跳? 

我想说的核心是:既然你挖人时会想,和你匹配,是指从100人到500人的企业挖来的才靠谱,那么别人挖你的人肯定也跑不出这个圈圈儿——OK,我想问,你难道就没跑赢同等竞争对手的雄心么? 

最后,我想说的第三个“匹配”是,你应该给你培养的精英,同等节奏的涨薪。你培养了他,不代表他就欠你半辈子。实际上,他的成长肯定是先出现,而你的涨薪往往落后半拍——嘿嘿,你已经占到便宜啦。但你不能“占便宜没够吃亏难受”啊!长时间占人便宜是不对D!差不多就行啦,看着明显该名员工的武功,已经明显领先于他的薪水了,你就应该用“匹配”原则,结找补上。 

比如我们的一个优秀美工,两年多以前不到四千薪水,每个月都涨薪,现在已经翻了四五倍了。我丝毫不觉得我给高了,因为我知道,这家伙如果出去,走到哪里,现在水平也值这个价码了。实际上不止这一个,我们很多员工都是这个幅度涨上来的……我作为一个臭奸商,内心何尝不希望业绩是现在这个业绩,而他们的薪水维持在两三年前的水平呢?但每次我这种邪念产生之时,都给自己一个嘴巴,“你丫清醒点,人家不欠你什么!你培养他们,也是为了企业的利益,而非特蕾莎修女那种无私的博爱好不好?” 

额外的好处是,我真正看重的员工,我从不担心被挖——外面多给个三五千,在他们心里很不在乎,因为他们知道,只要自己持续努力,这点“小钱儿”很快在我们这里也能涨上,并超出。而很多很多的企业,他们早就看清了,并不真的培养人,只想高薪挖来“能人”,来了立即就干活儿,往死里用,榨干为止。而一个人的能力开始停滞不前了,那他的薪水也肯定就涨到头了。 

刚才说的那个美工,我就曾直说,“你看,别的地方肯定愿意更高薪水挖你,但你为何在雕爷我这里更愉快?因为我给你发呆、走神、犯傻的时间与空间。”啥意思各位明自么?就是一个浑身充满艺术细菌的美工,不能往死里用,天天陷入具体作图,眼界与水平就很难真正提升。我甚至轰他们有些日子别来上班,给我看画展、听歌剧去。“功夫在诗外”,把脑袋放空,触类旁通,看别的艺术类别,才能使自己的眼界高上去。甚至,我淘上千块一张的门票,请美工去看美国ABT的《天鹅湖》——顺便说一句,ABT演绎的天鹅湖,真是教科书般完美。就是魔王的扮相很奇怪,怎么不是黑色羽毛大氅,而是绿毛水怪一样的紧身衣呢? 

所以,你真的用心培养,又辅以匹配的涨薪,何惧别人来挖? 

有人又说了, 两个精英极品的涨薪当然能承受,但公司很多人都这么涨,能行么?我的答案是:如果公司里大多数员工都发疯般努力,你自然能超越竞争对手,接下来自然是相匹配的利润,三个人拿四个人的薪水干出五个人的成绩,怎么会涨不了那点“匹配”的薪水呢? 
(一) 投资者文摘上到目前关于芒格文章汇总

1. 哈佛高中毕业典礼演讲 (第1辑)
2. Wesco金融公司董事长查理·芒格与股东的对话-2004年 (第2辑)
3. 查理·芒格素描 (第3辑)
4. 人类处世智慧的最基本分支:芒格论投资管理专长 (第3辑)
5. Wesco金融公司董事长查理·芒格与股东的对话-2002年 (第3辑)
6. 生活智慧 (第4辑)
7. 2003年度最大的财务丑闻 (第4辑)
8. 人类误判心理学(上)(第7辑)
9. 人类误判心理学(下)(第8辑)
(录音: http://www.aquamarinefund.net/archives/2005/10/twenty_four_cau.html)
10. 对实践思维的实践分析 (第11辑)
11. 需要多元学科技能教育 (第12辑)
12. 论领先慈善基金会的投资实践 (第13辑)
(二) value杂志、价值报告及书中等关于芒格的文章
1. 帐蓬中的投资福音-芒格2007威斯科股东大会讲话 (2007.11)
2. 巴菲特化身:芒格的智慧 (2007.1)
3. 思维模式栅格 (价值报告: 头头是道 P.142)
4. 倾听查理·芒格 (<学习学习再学习--生活中的投资经典>)
(三) 传记及关于芒格的书
1. Poor Charlie's Almanack Expanded Second Edition. The Wit and Wisdom of Charles T. Munger 
2. Seeking Wisdom: From Darwin to Munger, 3rd Edition 
3. Damn Right!: Behind the Scenes with Berkshire-Hathaway Billionaire Charlie Munger (查理·芒格传)
4. Latticework: The New Investing (从牛顿、达尔文到巴菲特-栅格理论)
(四) Wesco股东大会笔记 (英文)
1. 2006年: http://www.tilsonfunds.com/wscmtg06notes.pdf
2. 2005年: http://www.tilsonfunds.com/wscmtg05notes.pdf
3. 2004年: http://www.tilsonfunds.com/wscmtg04notes.doc
4. 2003年: http://www.tilsonfunds.com/wscmtg03notes.html
5. 2002年: http://www.fool.com/news/foth/2002/foth020515.htm
6. 2001年: http://www.fool.com/news/foth/2001/foth010508.htm
7. 2000年: http://www.fool.com/boringport/2000/boringport00051500.htm
8. 1999年: http://boards.fool.com/Message.asp?mid=10893331
(五) 其它关于芒格的文章
1. 2007 USC法学院毕业典礼演讲笔记:
http://www.chanticleeradvisors.com/files/107293/Charlie Munger - USC Law School Commencement - May 2007.pdf
2. Friendly investment advice from Warren Buffett's buddy
http://sanfrancisco.bizjournals.com/sanfrancisco/stories/1996/10/21/newscolumn6.html
3. Wesco's Munger Warns on Upbeat Stock Assessments 
http://findarticles.com/p/articles/mi_m5072/is_22_23/ai_75455080
4. 芒格名言搜集
http://www.theequitydesk.com/forum/printer_friendly_posts.asp?TID=799&SID=3f6a5ef41f3823b427zda3fb173f7be2
5. 芒格的投资原则清单
http://www.gurufocus.com/news.php?id=19331
6. The World According to "Poor Charlie"
http://www.kiplinger.com/features/archives/2005/11/munger.html
7. The Munger Network of Mental Models
http://www.focusinvestor.com/FocusSeriesPart3.pdf


(六) 芒格推荐的书
1. Deep Simplicity by John Gribbin 
2. F.I.A.S.C.O.: The Inside Story of a Wall Street Trader by Frank Partnoy 
3. Ice Age by John & Mary Gribbin 
4. How the Scots Invented the Modern World: The True Story of How Western Europe's Poorest Nation Created Our World and Everything in It by Arthur Herman
5. Models of My Life by Herb Simon 
6. A Matter of Degrees by Gino Segre 
7. Andrew Carnegie by Joseph Frazier Wall 
8. Guns, Germs, and Steel: The Fates of Human Societies by Jared Diamond 
9. The Third Chimpanzee by Jared Diamond 
10. Influence: The Psychology of Persuasion by Robert B. Cialdini 
11. The Autobiography of Benjamin Franklin 
12. Living Within Limits: Ecology, Economics, and Population Taboos by Garrett Hardin 
13. The Selfish Gene by Richard Dawkins 
14. Titan: The Life of John D. Rockefeller, Sr. by Ron Chernow 
15. The Wealth and Poverty of Nations: Why Some Are So Rich and Some So Poor 
by David S. Landes 
16. The Warren Buffett Portfolio by Robert Hagstrom 
17. Genome: The Autobiography of a Species in 23 Chapters by Matt Ridley 
18. Getting It Done: How to Lead When You're Not in Charge by Roger Fisher and Alan Sharp 
19. Three Scientists and Their Gods by Robert Wright 
20. Only the Paranoid Survive by Andy Grove 
21. The Contrarian’s Guide to Leadership, by Steven B. Sample
(七) 芒格批评的书
"The Future for Investors: Why the Tried and the True Triumph Over the Bold and the New"(投资者的未来) by Jeremy J. Siegel.
"(...) Question: Jeremy Siegel had some ideas in his second book. How would this impact your investment strategies?
Warren Buffett : It didn’t.
Charlie Munger : I think he is demented.
Warren Buffett : He is a very nice guy Charlie.
Charlie Munger : He may well be a very nice guy, but he is comparing apples against elephants in trying to make accurate projections." 
(2006 Berkshire Hathaway Annual Meeting)
行为金融与行为经济学

1. http://www.econ.yale.edu/~shiller/behfin/index.htm
Workshop in Behavioral Finance 由Robert J. Shiller and Richard H. Thaler组织每年两次,网站上有行为金融年会的所有文章。
2. http://www.cbdr.cmu.edu/
The Center for Behavioral Decision Research was founded in 2005 to help support and promote research on decision making.
3. http://www.econlab.arizona.edu/
The Economic Science Laboratory (ESL) at the University of Arizona was founded in 1985. The Director of ESL from 1985 to 2001 was Vernon L. Smith, 2002 Nobel Laureate in Economics. Since its inception, the ESL has been a leading laboratory in the study of economic behavior and market performance.
4. http://www.usask.ca/economics/SABE/
 Society for the Advancement of Behavioural Economics( SABE) is an association of scholars who are concerned with economic behavior. This site has SABE's newsletter, conference information, and publication information.
5. http://cebr.ust.hk/index.html
Center for Experimental Business Research The mission of theCenter for Experimental Business Research is to promote the use of experimental methods in business research, expand experimental methodology through research and teaching, and leverage the strengths of these methods to open up the frontiers of knowledge.
http://cebr.ust.hk/~guide/Experimental_Bibliographies/List_all/
Experimental Bibliographies they are a good resource tool to remind you about new articles and put them all in one place
6. http://www.behaviouralfinance.net/
这个网站上几乎汇集了所有行为金融的经典和非经典文献
7. http://www.aboutsociology.com/sociology/Behavioral_finance 行为金融的基本知识介绍
8. http://www.moneyscience.org/ 信息非常全的一个网站,涉及4个部分内容:
金融智能网络:包含金融的各种新闻和资源.
日历: 金融会议和培训的信息.
对冲基金: 对冲基金的新闻和连接
财经服务目录: 财经服务社区
9. http://www.jpmorganfunds.com/jpmam/index.jsp?p=Family+of+Funds&s=2
JP摩根的基金板块
10. http://icf.som.yale.edu/research/behav_finance.shtml
耶鲁大学管理学院国际金融中心行为金融项目是世界上最活跃的行为研究项目,目前研究的方向包括:
资产定价:泡沫、投资情绪、心理学的反应过度及反应不足
投资:投资者情绪、投资者信心、泡沫
管理:相对价值、动量、陈旧价格
市场营销:客户选择、顾客改变
11. http://www.fullerthaler.com/
 Fuller & Thaler 资产管理公司,使用行为金融和基础研究的方法进行投资决策。
12. http://www.lsvasset.com/jsps/index.jsp
LSV资产管理公司Josef Lakonishok 、 Rob Vishny 、Andrei Shleifer 创建的资产管理公司,其中包含基金和投资的研究报告。
(一) 投资者文摘上到目前关于芒格文章汇总
1. 哈佛高中毕业典礼演讲 (第1辑)
2. Wesco金融公司董事长查理·芒格与股东的对话-2004年 (第2辑)
3. 查理·芒格素描 (第3辑)
4. 人类处世智慧的最基本分支:芒格论投资管理专长 (第3辑)
5. Wesco金融公司董事长查理·芒格与股东的对话-2002年 (第3辑)
6. 生活智慧 (第4辑)
7. 2003年度最大的财务丑闻 (第4辑)
8. 人类误判心理学(上)(第7辑)
9. 人类误判心理学(下)(第8辑)
(录音: http://www.aquamarinefund.net/archives/2005/10/twenty_four_cau.html)
10. 对实践思维的实践分析 (第11辑)
11. 需要多元学科技能教育 (第12辑)
12. 论领先慈善基金会的投资实践 (第13辑)
13. “慈善圆桌”早餐会议 (第14辑)
14. 反思学科间互需之后:学院经济学的优缺点 (第15辑)
(二) value杂志、价值报告及书中等关于芒格的文章
1. 帐蓬中的投资福音-芒格2007威斯科股东大会讲话 (2007.11)
2. 巴菲特化身:芒格的智慧 (2007.1)
3. 思维模式栅格 (价值报告: 头头是道 P.142)
4. 倾听查理·芒格 (<学习学习再学习--生活中的投资经典>)
(三) 传记及关于芒格的书
1. Poor Charlie's Almanack Expanded Second Edition. The Wit and Wisdom of Charles T. Munger
2. Seeking Wisdom: From Darwin to Munger, 3rd Edition
3. Damn Right!: Behind the Scenes with Berkshire-Hathaway Billionaire Charlie Munger (查理·芒格传)
4. Latticework: The New Investing (从牛顿、达尔文到巴菲特-栅格理论)
(四) Wesco股东大会笔记 (英文)
1. 2006年: http://www.tilsonfunds.com/wscmtg06notes.pdf
2. 2005年: http://www.tilsonfunds.com/wscmtg05notes.pdf
3. 2004年: http://www.tilsonfunds.com/wscmtg04notes.doc
4. 2003年: http://www.tilsonfunds.com/wscmtg03notes.html
5. 2002年: http://www.fool.com/news/foth/2002/foth020515.htm
6. 2001年: http://www.fool.com/news/foth/2001/foth010508.htm
7. 2000年: http://www.fool.com/boringport/2000/boringport00051500.htm
8. 1999年: http://boards.fool.com/Message.asp?mid=10893331
(五) 其它关于芒格的文章
1. 2007 USC法学院毕业典礼演讲笔记: http://www.chanticleeradvisors.com/files/107293/Charlie Munger - USC Law School Commencement - May 2007.pdf
2. Friendly investment advice from Warren Buffett's buddy
http://sanfrancisco.bizjournals.com/sanfrancisco/stories/1996/10/21/newscolumn6.html
3. Wesco's Munger Warns on Upbeat Stock Assessments
http://findarticles.com/p/articles/mi_m5072/is_22_23/ai_75455080
4. 芒格名言搜集
http://www.theequitydesk.com/forum/printer_friendly_posts.asp?TID=799&SID=3f6a5ef41f3823b427zda3fb173f7be2
5. 芒格的投资原则清单
http://www.gurufocus.com/news.php?id=19331
6. The World According to "Poor Charlie"
http://www.kiplinger.com/features/archives/2005/11/munger.html
7. The Munger Network of Mental Models
http://www.focusinvestor.com/FocusSeriesPart3.pdf
8. 读书笔记:
http://www.amazon.com/review/R37DEU1WLA758L

(六) 芒格推荐的书
1. Deep Simplicity by John Gribbin
2. F.I.A.S.C.O.: The Inside Story of a Wall Street Trader by Frank Partnoy
3. Ice Age by John & Mary Gribbin
4. How the Scots Invented the Modern World: The True Story of How Western Europe's Poorest Nation Created Our World and Everything in It by Arthur Herman
5. Models of My Life by Herb Simon
6. A Matter of Degrees by Gino Segre
7. Andrew Carnegie by Joseph Frazier Wall
8. Guns, Germs, and Steel: The Fates of Human Societies by Jared Diamond
9. The Third Chimpanzee by Jared Diamond
10. Influence: The Psychology of Persuasion by Robert B. Cialdini
11. The Autobiography of Benjamin Franklin
12. Living Within Limits: Ecology, Economics, and Population Taboos by Garrett Hardin
13. The Selfish Gene by Richard Dawkins
14. Titan: The Life of John D. Rockefeller, Sr. by Ron Chernow
15. The Wealth and Poverty of Nations: Why Some Are So Rich and Some So Poor
by David S. Landes
16. The Warren Buffett Portfolio by Robert Hagstrom
17. Genome: The Autobiography of a Species in 23 Chapters by Matt Ridley
18. Getting It Done: How to Lead When You're Not in Charge by Roger Fisher and Alan Sharp
19. Three Scientists and Their Gods by Robert Wright
20. Only the Paranoid Survive by Andy Grove
21. The Contrarian’s Guide to Leadership, by Steven B. Sample
(七) 芒格批评的书
"The Future for Investors: Why the Tried and the True Triumph Over the Bold and the New"(投资者的未来) by Jeremy J. Siegel.
"(...) Question: Jeremy Siegel had some ideas in his second book. How would this impact your investment strategies?
Warren Buffett : It didn’t.
Charlie Munger : I think he is demented.
Warren Buffett : He is a very nice guy Charlie.
Charlie Munger : He may well be a very nice guy, but he is comparing apples against elephants in trying to make accurate projections."
(2006 Berkshire Hathaway Annual Meeting)

原文地址:http://blog.sina.com.cn/s/blog_4462623d0100mz1s.html