接口!接口!接口!

今天坐车回学校时,一直在思考“设计模式”与“接口“这两个问题。在某个时候,忽然车主大喊:”交佳节又重阳警来了,没座家赶紧蹲下。“(这丫超载了- -)就在这个时候,我来了灵感,想到了一个很好的类比。

 

我们都知道,每个学驾驶、考驾照的人都要学交规。可以说,这里的”交规“就是一个接口。为什么呢,因为”交规“规定了驾驶员什么可以做,以及什么不可以做,相当于驾驶员的行为规范准则。每个学过驾驶、考上驾照的驾驶员,都知道“交规”,并能够在自己驾驶的过程中履行之。换言之,每个驾驶员,都实现了(做到了)“交规”中规定的行为。

 

接口,就是一个协议、一个规范。一方面,接口这个协议,告诉所有实现了此接口的类的用户,这个类能够做什么,或者说这个类拥有哪些能力;另一方面,接口这个规范,告诉实现此接口的所有类,“你们必须实现我拥有的所有方法,否则你就不具备我所具备的能力!”。

 

此外,在OO的设计与实践中,使用接口:一方面,带来统一性和一致性;另一方面,我们知道所有实现了此接口的类的共性,所以我们可以统一地、一致的针对接口编程,而不是针对某一个具体的类来编程。而针对接口编程的好处,就是当需求变动时,我们不必改动和接口有关的实现代码,而只需要增加新的类型。这就是所谓的”以不变应万变“(Strategy模式和Observer模式就是两个很好的例子)。

 

下面来说说C++中的“接口“,与JavaC#中”接口“。

 

C++中,多重继承是允许的。在某种程度上说,虽然多重继承有很多缺点,但这为多重继承却为类的扩展带来了便利。另一方面,在C++中并没有接口(不同于作为OOP概念的接口,这个接口泛指类的公有成员函数)这样的构造,所以用OO方法构建软件系统时,我们只能用包含纯虚函数的抽象类来“模拟”接口。此外,由于抽象类无法生成其实例,所以我们只能声明或定义抽象类的指针或引用,而指针对于那些粗心大意的程序员而言,则是一颗颗地雷。

 

JavaC#中,不允许多重继承,但是,JavaC#却提供了接口这个构造,并将之提升为first-class element。虽然我们无法多重继承多个类,但是我们却可以多重继承多个接口并实现之。

有人说,光是记住了语言中那些支持OOP的语言机制,并不等于掌握了OOAOODOOP。何故?我们说,OOP绝不是那些语言机制的堆砌,更多的则是语义的表达,是设计意图的表达。学习OOP,绝不是单纯的记忆那些OOP机制,更多的、更重要的则是去深入的发掘那些OOP机制背后的深层语义,是大量的进行OO分析、设计、实践然后学会如何将那些语言特性有机的整合在一起(在OO设计准则的指导下)。唯有这样,我们在进行OOP时,才能发现设计意图与语言机制背后语义之间的对应,才能真正准确的表达出我们的设计意图,才能做出真正满足我们需求并符合我们期望的软件系统。

 

从现在开始,我们不妨去发掘一下”接口“这个东东,其真正的语义是什么?它和我们要表达的设计意图,又是什么关系?:)

Posted in Coding | Leave a comment

给兄弟的话

哈哈,等你睡了才能给你说这些话。别嫌我罗嗦。

 

魁子,我知道你有自己的想法,自己的习惯,自己的计划,写这些文字,不是为了改变你的想法,你的习惯,或是你的计划。我只是以一个朋友的身份,或者说局外人的角色去说点事情。

 

1. 一说专业课

 

我觉得这学期的专业课都挺好,没有说是垃圾的。且不论老师如何,更重要的是自己去学习,当然老师的引导作用也不容忽视(虽然在我这里老师无所谓)。

 

我以为,学习专业课,其内容分为一下几个部分:

 

其一,知识性内容。这些内容,是指导实践的基础,是将来不论找工作还是工作都需要的,需要不断的学习,不断的重复,不断的深入。说真的,计算机这一切理论,就怕深入了,唯有深入,才能发现其理论的本质,而唯有掌握了本质,才能做到真正的融会贯通。

 

其二,实践性内容。这些内容,是培养将来我们工作技能的东西,我们应该积极努力去尽一切可能创造实践的条件,去尽可能的将所学的知识投入到实践中去,去尽可能的从实践中总结出自己做事的方式方法,并积累经验。

 

其三,思想性内容。这些内容,是我们走出大学校门,真正能带走的,是指导我们从事计算机工作一辈子的东西。要成为一个计算机高手不难,但要成为一个真正的大师,就很难。何故?一曰理论知识积累难;二曰实战技能培养难;三曰思维思想形成难。其中,最重要的是思维、思想。

 

但是,思维、思想也不应该建立在空中楼阁之上。我举一个例子,那就是计算机科学中最为重要的思想——抽象。这里我只列举它在计算机各个领域出现的身影:

 

1. 计算机组成原理。想想那个计算机系统的多级层次结构:从物理级到应用语言级,其抽象层次越来越高,对低层细节的隐蔽越来越多。我们应该思考这样一个问题?我们为什么要抽象?目的在于:人的大脑应对的复杂度是极其有限的,而通过抽象,得以突出主要矛盾,忽略次要矛盾,使我们的注意力与行动更加富有成效,此其一;其二,通过将复杂系统分为不同的抽象层次,得以明确工作于系统各个抽象层次的系统交互人员的职责,同时也大大简化了他们的工作,使得他们更好的完成工作;其三、抽象能帮助我们更好更快的认识到事物的本质,从而更好的指导我们的实践。

 

2. 数据库系统。我想你还记得数据库系统的三级模式结构和两级映像吧。这里我就不多说了。

 

3. 计算机编程。实际上,计算机语言,无非就是机器语言、低级语言和高级语言。这个分类标准实际上是按照语言所工作的抽象层次来指定的。此外,构建一个软件系统,从设计到实现,也是一个抽象层次逐步降低的过程。我们首先进行概念性设计,不论是软件系统还是数据库系统,然后我们在概念模型的基础上,再进一步结合具体的软硬件环境,考虑实现的问题。但实现的问题也不是一蹴而就的。我们还得考虑逻辑层,然后在考虑物理层。

 

不知道你发现没有,不论是数据库系统,还是计算机系统,都不可避免的涉及到了物理层与概念层。其原因在于计算机的本质就是硬件和软件。

 

还有一点,我们的学习,我们的工作,其实就是在不同的抽象层次上去学习,去工作;在不同角色之间去切换,一会儿是程序员,一会儿又成为了架构师。这里我还有一个建议:那就是——制定自己的读书计划,至少要保证在计算机每一个抽象层次上都有一本真正经典的名著。

 

2. 二说编程(特别是C++)

 

随着我阅读C++书籍的不断增多以及不断深入,我发现中国的C++书籍作者,完全不能做到传道受业解惑,所以我强烈建议你去多多阅读国外大师的作品。

 

我觉得,学习的过程其实就是一个过程改进过程。也就是说,学习其实是一个迭代的过程:我们去学习,然后发现学习中出现了一些问题,使得学习并不那么富有成效,然后我们去反思这个学习的过程,结合自己平时的所见所闻,来改进之。然后将这种方法继续放入迭代式,继续检验是否是一个好的方法。

 

注意,这里我提到了两点:一是反思,我觉得现在的学习,不光是努力就可以学好的,但是努力显然是首要条件;在学习的同时,更应该注意学习方法的改进,或者说不断的反思。其实,古今中外的所有计算机牛人,都是做了一辈子过程改进的人,而不是一辈子匆匆忙而不反思的人。第二点是,自己平时的所见所闻。我觉得,人类的综合思维真的是很好的东西,正是因为有了综合,牛顿这小子才能发现万有引力,才能发现太阳系行星的运行规律,这小子才当上了近代物理的第一人。一样的,所有牛人,不是天生下来就是牛人,而是他/她善于综合别人之所长,来补己之短(啊哈!这就是所谓的过程改进,不是么?),从而使得自己不断的进步。而为了综合,我们就得有综合的材料,而这个材料就是自己平时的见闻,所以,平日里,学习累了,不想学习了,不妨阅读一些别人的文章,我们并不要求一定要读懂或者说精读,有时候只需要一个印象就可以了。事实上,往往有的时候,这些琐碎的“印象”,往往是问题解决的灵感的来源,或者说是创新的来源。创新不是上帝创造男人女人,而是在前人的基础上,以一种独到的角度,将前人的知识、思想,辅以自己思考,把所有的这些综合起来的结果。

 

3. 三说什么呢,我也不知道,哈哈。

 

或许你应该说说这个第三部分。:)

 

盼兄认真阅之,予我回复之。无意彰显什么,这些我也做的不好,是写给你,也是写给我的。未来,是那么近,又是那么远。我看不到现在的我,能否进入微软、IBM、Google这些公司,我也不知道我能否一个月拿一万,娶一个好老婆,给父母以幸福的晚年。但是我相信,所有的这些,只要我们不断的努力,不断的反思,不断的改进,我们就一定能接近我们的梦想。

 

梦想,就在脚下,所以,我们每天都要继续行走,不论走了多少步。梦想,就在远方,虽然看不到,但它就在哪里,在哪里等着我们,所以我们要继续行走,这样我们才能接近梦想。

 

让我们的梦想燃烧,让我们在梦想之上飞翔!

Posted in Nonsense | Leave a comment

O'Reilly - Beautiful Code: Leading Programmers Explain How They Think

期待已久的一本书,今天看到,第一时间分享给大家。

Beautiful Code:

Leading Programmers Explain How They Think

How do the experts solve difficult problems in software development? In this unique and insightful book, leading computer scientists offer case studies that reveal how they found unusual, carefully designed solutions to high-profile projects. You will be able to look over the shoulder of major coding and design experts to see problems through their eyes.

This is not simply another design patterns book, or another software engineering treatise on the right and wrong way to do things. The authors think aloud as they work through their project's architecture, the tradeoffs made in its construction, and when it was important to break rules. Beautiful Code is an opportunity for master coders to tell their story. All author royalties will be donated to Amnesty International.

Product Details

  • Paperback: 593 pages
  • Publisher: O'Reilly Media, Inc. (June 26, 2007)
  • Language: English
  • ISBN-10: 0596510047
  • ISBN-13: 978-0596510046
  • Product Dimensions: 9 x 7 x 1.6 inches
  • Shipping Weight: 2.2 pounds (View shipping rates and policies)
  • Average Customer Review: based on 8 reviews. (Write a review.)
  • Amazon.com Sales Rank: #1,049 in Books (See Bestsellers in Books)

Download: http://www.mediafire.com/?ejhg9xizmft

Posted in Book | Leave a comment

天才式思考

Source: http://www.studygs.net/chinese/genius.htm 

 

天才式思考

 .

"即使你不是一位天才,你照样可以使用象爱因斯坦和亚里士多德一样的思考战略与战术来增强你的思维创造性并更好地设计你的未来。

"为了找出解决问题的方法,下列的八种战略与战术可以帮助你提高工作效率,避免单纯的重复式思维。"这些战略与战术是历史上在科学界、美术界以及工业领域内有作为的天才们通用的创造性思维模式。"

.

1.从不同的角度去看问题,发现别人从未想到(或还没有公开发表过)的新论点

列奥拉多.达 芬奇认为:为了找出问题的本质,你应用不同的方法重新组合它。他觉得他第一次看某个问题时总是不全面的。通常情况下,重新组合后的问题本身会以一种新的方式呈现出来。

2.具体化!

当爱因斯坦遇到一个难题时,他总是使用尽可能多的不同方法来展示问题,包括使用多种图表。他坚信在他的思考过程中,一万句话或数字所起的作用远不如一张图表给他的启发能形象地说明问题。

3.亲自动手!天才们最大的特点是高生产率

汤姆斯·爱迪生拥有1093种发明创造。为了保证工作效率,他给自己以及助手们规定新点子配额。

加州戴维斯州立大学的校长凯斯·辛姆敦通过研究历史上的2036名科学家发现:最受人尊敬的科学家们不仅有非常伟大的创新,同时也有许多"不佳"的想法。但是,这些科学家们从不怕失败,也不怕平庸,通过坚持不懈的努力,最终取得胜利。

4.做新组合不怕与别人不一样或不合常理,将所有的看法、想法和想象以不同的方式重新组合

现代遗传学是以奥地利修道士戈瑞高·麦戴尔的遗传法则为基础发展而来,戈瑞高·麦戴尔将数学和生物学结合起来创立了一门新的科学。

5.找出彼此之间的关系,将不类似的事物联系起来

达芬奇通过将铃声和石头落水声联系起来找到了声音是以波浪式传送的。莫尔斯通过观察驿站而发明了莫尔斯电码中继站。

6.反向思维

物理学家奈尔斯·鲍尔相信,假如你将物质的对立面放在一起来思考,那么你的思维运动就可以上升到一个新的高度。他能够将光想象成粒子与波浪的能力促使他发明了互补定律。悬念(逻辑思维)可以让你的大脑 创造出新的模式。

7.形象思维

亚里士多德认为比喻是天才的一种象征,一个能够看到两种不同领域的相似之处的人是天才,再能把这些相似之处联系起来是需要特殊天赋的。

8.增强应变能力

每当我们尝试做什么事失败后,我们就该做别的。这就是发明创造的第一原则。如果我们不单纯地认为失败是没有任何意义的,不单纯地局限于失败本身,而是重新分析整个过程,所有的成份,以及如何改变它们以达到不同的结果,我们就可以转败为胜,变失败为成功。不要问:"为什么我失败了?",而应问:"我做了什么?"

Posted in Study | Leave a comment

这几天看书之所得

1. 停止内心无谓的语言之争,Java和C#都是C++的儿子,而且Java和C#中也有OOP和Generic。我对Java和C#不甚了解,但是我以为,那些编程准则,那些设计模式,如果真正心神领会了,到哪里都一样用。

2. 先掌握语言的核心类库,因为不论从事何种开发,只要所用的编译器支持标准C++,就要用到这些核心类库。因此,接下来的目标就是STL和Boost,至于其他C++类库如MFC、ATL、Qt等,有必要在去研习。当然,如果确定了未来的发展方向,可能就要有选择的深入了。

3.  良好的编码习惯,大大降低了编码的劳动量,提高了程序员的效率,减轻了程序员的负担。我们只有理解了良好的编程准则并在编码过程中灵活的运用之,才有可能构建良好的大型程序。

4.  我们为什么要说:写程序,想清楚后在写,不要“靠偶然编程”。因为只有我们想清楚了,分析透彻了,有了一个设计了,有了一个规范了,才能清楚应该用什么语言特性来表达我们的设计意图(思想),才能清楚期望编译器的行为是什么,才能清楚我们期望程序的运行结果是什么。最终,我们才能写出符合规范,具有良好品质的大型软件产品。毕竟,人脑只能应对一定程度的复杂性,在进行大规模编程时,不可能在编码阶段考虑到方方面面。

Posted in Coding | Leave a comment

Bruce G. Buchanan - Brief History of Artificial Intelligence @ Part One

[Source] http://www.aaai.org/AITopics/bbhist.html

[Author] Bruce G. Buchanan

[Translator] Stone Shi (welovecs)

.

NO PART OF THIS DOCUMENT MAY BE DISTRIBUTED IN ANY MEANS WITHOUT ATTACHING THE TRANSLATOR'S SIGNATURE.

.



Introduction  导言

.

The intellectual roots of AI, and the concept of intelligent machines, may be found in Greek mythology. Intelligent artifacts appear in literature since then, with real (and fraudulent) mechanical devices actually demonstrated to behave with some degree of intelligence. Some of these conceptual achievements are listed below under "Ancient History."

人工智能的思想起源(intellectual roots),及智能机器的概念,最早见于希腊的神话。自古希腊时代起,有关人工智能体的描述便有了文字记载。中世纪前后,一些机械装置已经能够表现出一定的智能。这些思想上的成就,部分被列于"古代史"中。

After modern computers became available, following World War II, it has become possible to create programs that perform difficult intellectual tasks. From these programs, general tools are constructed which have applications in a wide variety of everyday problems. Some of these computational milestones are listed below under "Modern History."

现代计算机诞生后,第二次世界大战爆发。这样的历史背景,使得编写能够完成困难智能任务的程序,成为了可能。人们在编写这些程序的过程中,也构建了一些通用工具性质的程序,后来这些程序广泛应用于解决各个领域的一般问题。这些计算科学的里程碑,部分被列于"近代史"中。

.

Ancient History  古代史

 .

Greek myths of Hephaestus and Pygmalion incorporate the idea of intelligent robots. Many other myths in antiquity involve human-like artifacts. Many mechanical toys and models were actually constructed, e.g., by Hero, Daedalus and other real persons.

智能机器人的思想,最早始于希腊神话中的赫菲斯托斯(Hephaestus)和皮格马利翁(Pygmalion)。其他古代神话,也有类人智能体的相关记载。事实上,古希腊人已经能够制造出许多机械玩具和模型,其中杰出的代表有希罗(Hero),代达罗斯(Daedalus)等人。

5th century B.C.  公元前五世纪

Aristotle invented syllogistic logic, the first formal deductive reasoning system.

亚里士多德提出三段论。其三段论是逻辑史上第一个形式演绎推理系统(formal deductive reasoning system)。

13th century  十三世纪

Talking heads were said to have been created, Roger Bacon and Albert the Great reputedly among the owners.

据说,Roger BaconAlbert the Great等人创造出了可以回答任何问题的Talking Head

Ramon Llull, Spanish theologian, invented machines for discovering nonmathematical truths through combinatories.

一位名叫Ramon Llull的西班牙神学家发明了一个机器,这个机器可以通过组合一系列的字母或符号,来发现非数学领域的一些事实。

15th century  十五世纪

Invention of printing using moveable type. Gutenberg Bible printed (1456).

Gutenberg发明活字印刷术[1]。古腾堡圣经(Gutenberg Bible)印刷出版。

15th-16th century  十五-十六世纪

Clocks, the first modern measuring machines, were first produced using lathes.

第一个现代测量工具--钟表,通过车床被生产出来。

16th century  十六世纪

Clockmakers extended their craft to creating mechanical animals and other novelties.

钟表制造工艺的发展,使得钟表制造者们可以制造出仿真机械动物,以及其他在当时看来是新奇的玩意。

Rabbi Loew of Prague is said to have invented the Golem, a clay man brought to life (1580).

据说布拉格的犹太学者Loew发明了Golem,一个有生命的假人(1580)。

17th century  十七世纪

Early in the century, Descartes proposed that bodies of animals are nothing more than complex machines. Many other 17th century thinkers offered variations and elaborations of Cartesian mechanism.

十七世纪初,笛卡尔(Descartes)提出这样一种论断: 所有物质的东西,都是为同一机械规律所支配的机器,甚至人体也是如此。其后,许多十七世纪的思想家发展了笛卡尔的机械主义(Cartesian mechanism)思想,并在此基础上提出了不同见解。

Hobbes published The Leviathan, containing a material and combinatorial theory of thinking.

Hobbes出版了《利维坦》(The Leviathan)一书。书中提出了思维的辨证组合论[2]

Pascal created the first mechanical digital calculating machine (1642).

帕斯卡(Pascal)发明了第一台机械式数字计算器,这台机器可以进行加减运算(1642)。

Leibniz improved Pascal's machine to do multiplication & division (1673) and envisioned a universal calculus of reasoning by which arguments could be decided mechanically.

莱布尼茨(Leibniz)改进了帕斯卡的计算器,使之可以进行乘除运算(1673)。莱布尼茨认为,推理可以归结为一种普遍的演算,而这些演算最终可以被机器完成。

18th century  十八世纪

The 18th century saw a profusion of mechanical toys, including the celebrated mechanical duck of Vaucanson and von Kempelen's phony mechanical chess player, The Turk (1769).

十八世纪是一个盛产机械玩具的世纪。这些机械玩具的代表之作有Vaucanson著名的机械鸭子,以及Kempelen那"所谓智能"的土耳其行棋傀儡The Turk, 1769)。

19th century  十九世纪

Luddites (led by Ned Ludd) destroyed machinery in England (1811-1816).

Ned Ludd为首的卢德派成员(Luddites),在1811年到1816年期间制造了骚乱,并捣毁了节省劳动力的纺织机器。

Mary Shelley published the story of Frankenstein's monster (181 8) .

Mary Shelley出版了她的小说Frankenstein (1818)。书中的主人公Frankenstein是一名生理学家,他亲手创造了一个怪物, 但结果自己被怪物所毁灭。

George Boole developed a binary algebra representing (some) "laws of thought."

George Boole创立二值代数(binary algebra),用来表示一些逻辑推理规则。

Charles Babbage & Ada Byron (Lady Lovelace) worked on programmable mechanical calculating machines.

Charles BabbageAda Byron发明了可编程的机械式计算器(差分机)。

.

20th century - First Half

二十世纪前半叶

 .

Bertrand Russell and Alfred North Whitehead published Principia Mathematica, which revolutionaized formal logic. Russell, Ludwig Wittgenstein, and Rudolf Carnap lead philosophy into logical analysis of knowledge.

罗素(Bertrand Russell)和怀特海德(Alfred North Whitehead)发表三卷本《数学原理》(Principia Mathematica),此书是形式逻辑发展史上的里程碑。此外,罗素同维特根斯坦(Ludwig Wittgenstein)、卡尔纳普(Rudolf Carnap)一起创立了分析哲学(analytic philosophy)。

Karel Capek's play "R.U.R." (Rossum's Universal Robots) opens in London (1923). - First use of the word 'robot' in English.

卡雷尔·恰佩克(Karel Capek)的科学幻想戏剧《罗素姆万能机器人》在伦敦公演(1923)。这是历史上首次在英语中使用'robot '一词。

Warren McCulloch & Walter Pitts publish "A Logical Calculus of the Ideas Immanent in Nervous Activity" (1943), laying foundations for neural networks.

Warren McCullochWalter Pitts发表"A Logical Calculus of the Ideas Immanent in Nervous Activity"(1943),这篇论文奠定了神经网络的理论基础。

Arturo Rosenblueth, Norbert Wiener & Julian Bigelow coin the term "cybernetics" in a 1943 paper. Wiener's popular book by that name published in 1948.

Arturo RosenbluethNorbert WienerJulian Bigelow,在他们1943发表的论文中,定义了"控制论"(cybernetics)这一术语。1948年,Wiener出版了一本与此术语同名的畅销书。

Vannevar Bush published As We May Think (Atlantic Monthly, July 1945) a prescient vision of the future in which computers assist humans in many activities.

Vannevar Bush发表了一篇题为" As We May Think "(Atlantic Monthly, July 1945)的文章。在文中他预半夜凉初透言:在不远的将来,计算可以在很多领域协助人们工作。

A.M. Turing published "Computing Machinery and Intelligence" (1950). - Introduction of Turing Test as a way of operationalizing a test of intelligent behavior.

图灵(A.M. Turing)发表《计算机器与智能》("Computing Machinery and Intelligence" ,1950)。这篇论文通过一个测试机器智能行为的实验,介绍了图灵测试(Turing Test)这一概念。

Claude Shannon published detailed analysis of chess playing as search (1950).

香农(Claude Shannon)于1950年发表了一篇题为"Programming a Computer for Playing Chess "的论文,文中论述了如何实现机器或计算机博弈。

Isaac Asimov published his three laws of robotics (1950).

阿西莫夫(Isaac Asimov)于1950提出"机器人三定律Three Laws of Robotics)"。

 

译者注:

[1] 尽管活字印刷术数百年前在中国就已经出现,但并未流行,因而近代的活字印刷术主要来自古腾堡的发明。--维基百科

[2] 这里有些不太明白,不过查到这样一句话,现摘于此:

莫道不消魂国人的帕斯卡在莱布尼茨之前做出过算术计算器,英国的霍布斯(1588~1679)在他之前提出过思维可计算的观点,法莫道不消魂国人的笛卡儿(1596~1650)提出普遍数学的理念,他们的思想都比莱布尼茨早。

Posted in Translation | Leave a comment

“我不会”与“我要去学”

作 者: baosheng
标 题: "我不会"与"我要去学"
时 间: Fri Jun 15 11:52:31 2007
原文地址
 
遇到一个新的东西(比如一个新的算法,或者一个新的软件),一种人说"我不会",然后就跑开了,另外一种人说"我要去学"
 
于是大学四年这样的过程周而复始,repeat了多少次之后,这两种人的差距就拉大了。后一种人往往实现了自己满意的人生目标(想加入的公司,想就读的大学, etc.),而前一种人则开始抱怨诸如"出国形势不好是因为xx系烂"或者"自己被学校耍了"。
 
比如很多人号称要学linux,当你真的把一个运行linux的计算机放到她面前的时候,她说什么不会用。而另外一种人听说"Linux has many exciting features",于是自己就去学。四年后,这两种人已经没有共同的语言了。

不过中国的大学里面说"我不会"的人是远多于说"我要去学"的人,所以大部分的大学生是除了老师上课讲的那些东西,就其他什么都不知道了。所以我们的大学只是分为白天的宿舍和晚上的宿舍罢了。
 
无数的人坐在教室里面听临毕业的学长介绍经验,但是他们的心还是停留在"我不会"的阶段,空想如何成为学长那样的牛人,却又没有"我要去学"的实际行动。

于是不会TeX的人,终究还是不会TeX,虽然他和数模的队友一起知道TeX这个东东;不会Linux的人终究还是不会Linux,虽然他和舍友一起听学长介绍Linux;没做过project的人终究还是两手空空,虽然他和同学一起去找老师号称要进实验室;没发过paper的人还是不知道简历上写什么,虽然他总想着要看多少书;没玩过ARM的同学终究还是没有看到Qtopia如何在开发板上跑起来,虽然他和师兄一起去买ARM开发板。
 
四年,人的差距就是这样拉开。后面的岁月,差距会继续拉大。Palo Alto的天才在改变着世界,而你也许只有在别人提到新的奇迹的时候说,"我和xx是同学",但是你却记不得和他的往事,也许当你在追mm的时候,他正在图书馆看书。

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

感言

.

我看《数据库系统导论》,想着关系代数忘的差不多了,看关系型数据库理论肯定不行,所以我看了两、三章就扔掉了,因为"我不会"。我看《算法导论》,貌似不简单,所以我从来没想过去认认真真的去啃它,因为"我不会"。我要学Python,人家说Vim不错,我装上后不会用,于是我说这是个什么破烂,还不如VS 2005那熟悉的界面爽,因为"我不会"。

上面的叙述,虽有夸张之处,但也反应了问题。最近,我有所觉悟,先是把那几本杀脑细胞的书都搬出来,然后一脚踹开了"我不会",最后我发现:那几本书也不是想象中的那样难。:)

于是乎,我就觉得Motivation很重要。记得盖茨说过:

每天早晨醒来,一想到所从事的工作和所开发的技术将会给人类生活带来巨大的影响和变化,我就会无比兴奋和激动。

事实上,如果微软没有这个"兴奋和激动",恐怕我们还得整天面对DOS那黑底白字。我想说的是,如果我们被某个事物所鼓舞,或者因为某个事物而激动、而兴奋,那么,事情就好办了。因为这种兴奋和激情,会带给我们一种Motivation。这种Motivation,可以是研究某个事物的Motivation,也可以是在某个方面做出成果的Motivation,更可以是为这个让你激动、让你兴奋的事业奋斗终身的Motivation。

"我不会"是一个Excuse,而"我要去学"是一个Motivation。其实,做事情也一样。有些事情,乍一看貌似高不可攀,于是我们就气馁了,放弃了。我想,个中原因,是自己的"我不能"思想作怪。我觉得,在对自己说"我不能"之前,最好列出自己起初认为做不到的那些事情,冷静片刻,然后思考自己究竟能不能做到这些,如果能,打算如何做。我想,只要一个人有一定的能力,最后都会发现:原来我能做到这些,原来之前的"我不能"统统是Excuse,原来我缺乏只是一个Motivation。

那么,我们所需要的Motivation,从哪里找呢?刚才所说的列表方法是一个不错的选择,其本质在于让自己对自己的能力有一个清醒认识,建立一种自信。自省、自信是Motivation的来源之一。另外,兴趣也可以是一个Motivation的来源,古往今来这样的例子太多了。再者,勤奋也是Motivation的来源,只要我们勤奋的去做事,只要我们在做事的过程中找到了乐趣,那么我们就有了一个Motivation。在奋斗中发现Motivation,在Motivation下去奋斗,一个良性循环就这样形成了。最后,也是最重要的,Motivation来自于自己的内心。一个人,只有摆脱了"我不会"、"我不行"、"我不能"等诸如此类的思想,才能真正的获得Motivation。如果真正想做某事,那么请找到Motivation之后立刻行动,别给自己的懒惰留下任何机会,别给自己的借口留下任何温床,别给自己的遗憾留下任何可能。

在这个温饱基本解决,美女帅哥越来越多,人口素质不断提高的时代,傻子是越来越少了。很多时候,有些理论搞不定,有些事情做不到,与其说是智商问题,不如说是动机问题、方法问题、个人素质问题。这方面我推荐大家搜索一下"GTD"、"个人发展"、"时间管理"等关键字,肯定会有很大收获的。

我们整日在网络上游荡,我们眼前的牛人一个接一个飞过。过去的日子,牛人成就了什么,我们又成就了什么。我们是否知道:我们在游戏时候,人家却像牛一样在知识的田地上耕耘。我们不如现在就行动起来,去读一本自己以前读不懂的书,去搞定一个自己以前无法搞定的问题,去写一个自己以前写不出的程序,去学一门自己从未接触过的语言。我相信只要有了Motivation,加上勤奋和方法,我们一定可以搞定这些事情。

最后送给我自己一句话(如果您听了觉得还不是bullshit,那么我也愿意送给您):

You are bright, you are clever, you are smart.
So, Just try to crack the god damned hard nut.
You will make it.

Posted in Study | Leave a comment

对学生的建议:如何做好研究

下个月7日西安有个微软技术开放日,免费的,去凑凑热闹,嘿嘿。这两天一直在看书,写程序,有些想法,还没成型,都放到OneNote里了,过几天整理了拿出来。:)这里转一篇文章,我觉得很不错。

对学生的建议:如何做好研究

  • 1. 做计划!  我告诉我的学生, 写研究论文的第一步就是要明确你真的有一份研究论文要写. 写一份计划书, 其中应当包括在某一天需要完成的一系列的重要进展. (例如: 9月20日前找到10份资料, 10月15前完成初步的研究). 按照计划来执行. 你也需要时间来看看自己还缺什么材料, 什么材料在图书馆中可以查到, 选择相关的材料, 阅读并做笔记, 并整合之. 之后, 你需要弄清自己要在论文中提出的观点.
  • 2. 开始使用Wikipedia, 不要停下. Wikipedia是一个很适合开始进行你的研究的地方, 你可以搜寻与你的主题相关的关键词, 浏览每页上的链接, 并且接着看它所建议的资源. 做笔记, 尤其是对任何它推荐的好的资源. 我们在这里的目标是: 获取对你要写的主题的一个相对较好的综览. 并且由于它的超链接的特性, Wikipedia比大多数纸质的资料更有用. 到你准备好动笔写之前, 你应该已经由此得到了许多比Wikipedia上所呈现的更好的资料. 所以, 不要直接在你的论文中引用Wikipedia.
  • 3. 整理自己的参考书目.一旦你找到了关于你的主题的一本好的学术书籍或是一份文献,  那很棒. 在它的最后将会出现几十甚至上百份资料供你去查阅. 通常, 你可以略读这份参考书目并且将标题看起来与你的研究相关的东西记下来. 学术文献的作者们并不会竭尽心机来给标题起一个很有创造力的名字,  所以通常你可以很容易的从标题与子标题中了解他们的研究方向. 接下来, 返回开头并且寻找你是否认识哪位作者的名字, 这将很有用.对第一本书完成这样一份工作之后, 你可以接着对后面的书继续做这样的工作.这样, 你将迅速获得远比你所需要的多得多的资源. (但是你确实需要这样做, 因为你的图书馆不一定拥有所有这些提及的书籍以及期刊, 馆际间的图书传递速度很慢以致于对于需要在学期末完成论文的学生来说并没有多大价值.)
  • 4. 脑海里要有研究的问题. 学术的说, 当数据展现在你面前的时候, 你的主题应当从你的研究中浮现出来. 当你做研究的时候, 你需要一个”研究主题”, 也就是你想回答的问题. 当你遇到新的材料的时候, 问问自己这对回答你的问题有没有帮助. 你应当放弃那些看起来相关但实际上对回答你的问题没有帮助的资料. 找到一大堆资料看起来很有吸引力, 的确, 找到一些资料是必要的, 但是太多就会浪费你的做研究的时间. 找一两个好的资料做背景(你最初在Wikipedia上找到的在大多数情况下足够了), 然后坚持把精力放在向着回答自己的研究问题的方向上.
  • 5. 一次只处理一个论点. 不要试图一次把你的主题搞定. 对整个主题有一个大概的感觉, 为你需要了解的东西建立一份大纲. 之后每次处理一个论点. 在完成初稿之后,  你将发现论点间的联系.
  • 6. 使用信息组织系统. 开始你的研究时, 应当对计划如何收集和组织你的笔记与数据有个概念. 尽管我曾经利用过索引卡片来写过论文, 但我最喜欢的系统还是一个关于单一主题的笔记本. 在新一页的最上面, 我写上参考书目的名字, 然后抄写需要引用的, 并且做笔记.  在旁边, 我会加上它们的页码做标签,  并且记下我阅读时突然萌生的一些想法.  我喜欢有效率的使用电脑, 我尝试过做数据库, 使用Wiki软件, 做Outline以及其它软件, 但是我从没有发现哪个系统特别卓有成效.  我的时间都花在与软件本身打交道了,而不是做我的研究. 无论使用何种系统, 确保每一个引用, 事实以及思想都能找到它的来源. 这样你就可以在写作的时候方便的添加上参考文献了.
  • 7. 了解你要用的资源.  花点时间去了解你的图书馆究竟提供哪些在线或者离线的资源. 大多数图书馆都为学生提供介绍, 或者是让学生可以与图书管理员交流.至少, 你应当在图书馆里面走一遍并且知道什么东西在什么地方放着. 对微缩胶卷的储藏室以及期刊室要特别留心, 你将在许多研究项目中使用到它们. 多数大学的图书馆订阅了许多学术的数据库, 其中许多是在线的. 你要了解那些是从家里就可以连接的. 例如, J-stor储存了数百种学术期刊的全文图片, 并且它们都很容易搜索. 你可以半夜突然有点思想, 然后登录, 把两三篇相关的论文打印出来留到早上看.
  • 8. 寻求帮助. 不仅要利用这些材料, 你同样应当利用你能利用的人力资源. 很多教授失望地在办公室里花时间等待,希望某位学生能够闯进来提出一个值得他们花这么长时间等待的问题. 要做这样的学生! 在寻找, 评价资料的时候可以寻求帮助. 你也可以请人帮助你指出你已经收集的资料的用途. 另一个经常忽略掉的资源是友好的图书管理员. 在我眼中,他们是世界上最好的人: 在他们的管理范围内的资料, 他从头到尾都知道. 他们很关心这些资料的利用, 他们的任务就是使信息更好的利用. 多数的图书管理员很高兴帮助你去找和你的项目相关的资料. 一些图书管理员甚至能将那些很难找到的信息定位到具体的一卷书中. 当然, 不要忘记向学生们寻求帮助. 有些人可能正好和你的主题相关.
  • 9. 带一个记录思想的笔记本. 当你真正开始你的项目时, 你的大脑也同时在搜寻你所读过的资料. 如果你像我一样的话, 你可能在最不方便的时候突然获得启发. 比如说在浴室里, 超市里, 或者是准备睡觉时. 随身携带一个小笔记本以及一支笔. 将你的灵感记下来, 然后尽快的把它转移到你的研究日志上(或是软件等).
  • 10. 使研究跟上时代. 要注意你的材料的发表日期 — 尽管使用旧的材料也可以, 但是你肯定还是希望你的参考资料都来自近十年. 如果关于你的主题的研究在近十年几乎枯竭, 那么可能是研究领域改变了, 但还可能是资助消失, 主要研究者去世, 或是其它偶然因素.一个小技巧是 去Google搜索主要的研究者, 看看能不能找到他们的主页. 在 主页上, 多数人会将最近的研究活动以及发表的文章列出来.  如果这样的话, 你可以尝试去馆际互借, 或是联系这位研究者本人然后询问能否发给你一份草稿或是复印件. 要有勇气, 你要解释你在研究什么, 你希望发现什么, 你的研究进展如何, 他们的文章能给你的主题什么启示等. 不要去要求一份参考资料或是你的主题具体是什么, 没有人愿意帮助你做本应属于你自己的工作.

这些技巧将帮助你在写作之前获得一份不错的参考书目以及充实的笔记和数据资料. 尽管评估资料也是做好研究的一个重要部分, 但我将独立的来写这一部分, 因为它涉及的东西在一点中很难说清. 图书管理员或是你的教授可以帮助你, 尤其是你的资料都限制在你的图书馆可以获得的资料时. 网络资源更难处理些. 但是记住, 没多少年以前, 我们都没有互联网但成功的做研究. 打字机而已. 这就像在雪中赤足爬到山顶一样.


Advice for Students : 10 Steps Toward Better Research From lifehack.org by Dustin Wax

翻译 by 河流 @ LifePro

欢迎访问 LifePro:提高你的生活质量

Posted in Study | Leave a comment

几种代码编辑器的[配色-字体]方案

今天晚上身体不太舒服,无聊中看了别人关于代码编辑字体、配色的讨论,自己也琢磨了一下。成果如下:

Font: 字体名

RGB: 背景色

I - l - 1 o- O -0 可辨性对比

(Click image to enlarge)

 

 

 

Posted in Coding | Leave a comment

如何通过脑图软件帮你整理信息

Source : http://www.lifebang.com/archives/166

如何通过脑图软件帮你整理信息

发表于Monday, 九月 18th, 2006

脑图(mind mapping)是一种整理思路,启发创造性和寻求解决方案的实用技能。通过脑图,你可以很快将凌乱的信息结构化,以一种易写易读的方式组织起来,帮助你理解问题本身。
脑图可以用于完成下列工作:

  • 总结归纳信息
  • 汇总来自不同资源的信息
  • 辅助思考复杂问题
  • 展示问题的主要框架


脑图因为非常形象,还很适合于辅助记忆。
下面是一个脑图的简单例子:

Mindmap脑图

将一个问题化解成一个脑图,可以按照下面的步骤:

  1. 在中间写下问题的标题。
  2. 将主题分解成若干子问题,作为主题的分支。
  3. 如果子问题还可以化解,或者某些信息属于子问题,还可以继续产生下一级分支。
  4. 对于相关的事实或者产生的想法,都可以标注在相关节点周围,层层发展下去。

每出现新的情况、信息或者想法,很容易将它们添加到脑图合适的位置。一个完整的脑图就是以主题为中心放射性发展的结构。子主题或者相关信息都是一个个的分支。
一旦你开始熟悉脑图的实用方法,就可以自己总结一些技巧和使用习惯。这里有一些建议:

  • 尽量使用简洁的文字来描述信息。
  • 字迹清晰。如果用脑图软件应该没有这个问题。
  • 使用不同的颜色区分不同的想法。
  • 善用符号和图标。
  • 对于不同部分有关联的内容可以使用交叉连接。

脑图是一种非常有效的记录整理工具,不仅可以展示事实,还可以表现它们之间的关系,甚至发现你本来没有发现的联系。

Posted in Tools | Leave a comment