怎样练习一万小时

《新知客》,2010年8月。本来应该等到8月1日再发,但今天突然发现此文已经被在网上泄漏出来了!) 随着畅销书《异类》的流行,“练习一万小时成天才”这个口号现在是尽人皆知。也许仍然有不少人相信那 些不世出的天才必有天生的神秘能力,但科学家通过大量的调查研究已经达成共识,那就是所有顶级高 手都是练出来的。不但如此,最近几年的科学进展,人们可能第一次拥有了一个关于怎样炼成天才的统 一理论。 好消息是除了某些体育项目对天生的身高和体型有特殊要求之外,神秘的天生素质并不存在,也就是说 人人都有可能成为顶级高手。早在20多年以前,芝加哥大学的教育学家 Benjamin Bloom 就曾经深入考 察过120名从音乐到数学多个领域内的精英人物,发现他们幼年时代没有任何特别之处。后人的研究更证 明,在多个领域内,就连智商都跟一个人能不能达到专家水平没关系。 有个匈牙利心理学家很早就相信只要方法得当,任何一个人都可以被训练成任何一个领域内的高手。为 了证明这一点,他选择了一个传统上女性不擅长的项目,也就是国际象棋。结果他和妻子把自己的三个 女儿都训练成了国际象棋世界大师,这就是著名的波尔加三姐妹。这个实验甚至证明哪怕你不爱好这个 领域,也能被训练成这个领域的大师,因为三姐妹中的一个并不怎么喜欢国际象棋。 而坏消息是成为大师需要长时间的苦练。每天练三小时,完成一万小时需要十年时间,但这只是达到世 界水平的最低要求。统计表明对音乐家而言,世界级水平要求的训练时间是十五到二十五年。但最关键 的并不是练习的时间,而是练习的方法。 天才是怎样炼成的?中国传统思维比较强调一个“苦”字,冬练三九夏练三伏,甚至是头悬梁锥刺股。而近…

Continue Reading →

突破自己,挑战10K

绿色代表熟悉、红色达标不熟悉、黄色(橙色)代表中间值 其他:SVN、GIT、MAVEN 算法:基本排序算法、了解队列、栈、二叉树 服务器:tomcat、nginx、linux常用命令 缓存:redis、ehcache 数据库:基本SQL语句、mysql java基础:JAVA SE基础、servlet、JDBC、jsp(EL表达式、常用C标签) web基础:html、css、jquery、ajax 框架:灵活使用spring各种注解、spring mvc、mybatis、hibernate、权限框架shiro 努力方向:1.熟悉spring、mybatis的底层实现原理,最后能阅读源码                 2.spring-cache搭配redis使用缓存…

Continue Reading →

大型网站技术架构的核心原理与案例分析

第一章:大型网站架构演化   1.1大型网站软件系统的特点:高并发、大流量,高可用,海量数据,用户分布广泛、网络情况复杂,安全环境恶劣,需求快速变更、发布频繁,渐进式发展。   1.2大型网站架构演化发展历程 1.2.1初始阶段:应用、数据库、文件在同一台服务器上。 1.2.2应用服务和数据服务分离 1.2.3使用缓存改善网站性能,二八定理80%的业务集中在20%的数据上,缓存又分为本地缓存和分布式缓存 1.2.4应用服务器集群 1.2.5数据库读写分离 1.2.6使用反向代理和CDN加速网站响应 1.2.7使用分布式文件系统和分布式数据库 1.2.8使用NoSql和搜索引擎 1.2.9业务拆分 1.2.10分布式服务   第二章:大型网站架构模式   模式:经过验证的,描述并解决某一类问题的固有方案。  …

Continue Reading →

Java工程师成神之路

一、基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://ifeve.com/jmm-faq/ 1.1.2. 了解JVM各种参数及调优 1.1.3. 学习使用Java工具 jps, jstack, jmap, jconsole, jinfo, jhat, javap, … http://kenai.com/projects/btrace…

Continue Reading →

为什么程序员不喜欢写文档?

一提到文档,肯定会有人向你大谈外国公司、大公司、正规公司是怎么怎么重视文档的,什么2/3时间用于写文档,1/3时间才用来编程序;写文档要按照什么ISO、什么CMM、什么什么标准;不按这些标准写出来的就不是文档,就不是好文档。不重视文档就是不正规等等等。当问及他自己写过什么文档,编写过什么文档标准的时候,这种人就哑口无言了。这种人就是一种媒体一种广告。 不管怎么说,文档绝对是程序员最大的软肋。一些被称之为高手的程序员,往往是文档方面的低能儿。不管这个程序员是在大公司、还在小公司、不管程序是写文档的、还是不写文档的,大部分程序员在内心深处中是不愿意写文档的。 天下的怪事特别多,有时让人不能理解。程序员一般不愿意写文档,但是程序员却喜欢看别人的文档。即使写了文档,程序员一般不会把所有功能都写入文档,却抱怨别人文档有的功能没有说明。即使写了某段文档,程序员一般不不想把文档写的很详细,却抱怨别人写的文档不够详细。文档绝对是摆在程序员面前的一个矛盾,如果让程序员选择是喜欢写文档,还是喜欢看文档,我估计大多数程序员都会选择后者。 那么程序员为啥不愿意写文档呢?个中原因很多,我自己不妨归纳几点: 一、 怕烦 程序员从入门之日起,就在心里埋藏了一个编程的种子,认为程序员就是编程序的,就是和计算机打交道的,程序就是程序员的全部。无论是在编程之前要写文档,还是在编程之后要写文档。他们都认为写文档很烦人。 (1) 文档种类太多。越是正规越是多。一想到要写那么多的文档程序员头都要大了。 (2) 文档写作要求不低。有格式要求、有内容要求、还需要画各种流程图、示意图、关系图、界面图、还需要填写各种表格说明,要收集各种资料。虽然没有技术含量、但是时间要花的比编程序要多的多呀,而且也不一定能写好。 (3) 在正规的开发公司一般一个变更就要编写一系列的变更文档。当变更不断的时候,只有最后的变更文档是最重要的,当我们不知道当前是不是最后一个文档的时候,我们就不可能愿意写将被后面替代的文档。 (4) 当你写了文档后,就会不断有使用文档的人来问这问那,这些询问往往会让你崩溃。因为,你很难写出让每个人都提不出问题的文档。 二、 没空 在很多情况下,程序员处于一种“时间紧,任务重”状态。在急于看出编程结果的驱使下,程序员一心扑在编程上,恨不得一分钟一个变化。哪有心思和时间先把文档写好再去编程呀。即使他们想先把程序编出来,然后补写一下文档想法,但是一旦他们一个段程序完成之后,就会立即扑向第二段程序的。如此下来,编写文档只能放在项目开发的后期了。要是你真的写文档,那写文档的时间早已将编程时间给挤占了,你的编程工作就完不成了。 三、 没有用…

Continue Reading →

康奈尔学习法

  一、5R笔记法   5R笔记法,又叫做康乃笔记法,是用产生这种笔记法的大学校名命名的。这一方法几乎适用于一切讲授或阅读课,特别是对于听课笔记,5R笔记法应是最佳首选。这种方法是记与学,思考与运用相结合的有效方法。具体包括以下几个步骤: 1.记录(Record)。在听讲或阅读过程中,在主栏(将笔记本的一页分为左大右小两部分,左侧为主栏,右侧为副栏)内尽量多记有意义的论据、概念等讲课内容。 2.简化(Reduce)。下课以后,尽可能及早将这些论据、概念简明扼要地概括(简化)在回忆栏,即副栏。 3.背诵(Recite)。把主栏遮住,只用回忆栏中的摘记提示,尽量完满地叙述课堂上讲过的内容。 4.思考(Reflect)。将自己的听课随感、意见、经验体会之类的内容,与讲课内容区分开,写在卡片或笔记本的某一单独部分,加上标题和索引,编制成提纲、摘要,分成类目。并随时归档。 5.复习(Review)每周花十分钟左右时间,快速复习笔记,主要是先看回忆栏,适当看主栏。 这种做笔记的方法初用时,可以以一科为例进行训练。在这一科不断熟练的基础上,然后再用于其他科目。 二、符号记录法 符号记录法就是在课本、参考书原文的旁边加上各种符号,如直线、双线、黑点、圆圈、曲线、箭头、红线、蓝线、三角、方框、着重号、惊叹号、问号等等,便于找出重点,加深印象,或提出质疑。什么符号代表什么意思,你可以自己掌握,但最好形成一套比较稳定的符号系统。这种方法比较适合于自学笔记和预习笔记。在操作时你应注意以下一些准则: 1.读完后再做记号。在你还没有把整个段落或有标题的部分读完并停下来思考之前,不要在课本上做记号。在阅读的时候,你要分清作者是在讲一个新的概念,还是只是用不同的词语说明同样的概念,你只有等读完这一段落或部分以后,才能回过头来看出那些重复的内容。这样做可使你不至于抓住那些一眼看上去仿佛很重要的东西。 2.要非常善于选择。你不要一下子在很多项目下划线或草草写上许多项目,这样会使记忆负担过重,并迫使你同一时刻从几个方面来思考问题,也加重你的思维负担。你要少做些记号,但也不要少得使你在复习时又只好将整页内容通读一遍。 3.用自己的话。页边空白处简短的笔记应该用你自己的话来写,这是因为自己的话代表你自己的思想,以后这些话会成为这一页所述概念的一些有力的提示。 4.简洁。在一些虽简短但是有意义的短语下划线,而不要在完整的句子下面划线,页边空白处的笔记要简明扼要。它们会在你的记忆里留下更为深刻的印象。在你背诵和复习的时候用起来更可得心应手。 5.迅速。你不可能一整天的时间都用来做记号。你先要阅读,再回过头来大略地复习一遍,并迅速做下记号,然后学习这一章的下一部分内容。 6.整齐。你作的符号要尽量整齐,而不要胡写乱画,否则会影响你以后的复习和应运。当你以后复习的时候,整齐的记号会鼓励你不断学习,并可以节省时间,因为整齐的记号便于你迅速回忆当初学习时的情景,能使你容易而清楚地领悟书中的思想。   三、笔记整理法…

Continue Reading →

周鸿祎:很多程序员一看就知道不会创业

很多人都向往着有一天自己创业,程序员更是如此。如果你想创业,那么该怎样创业、需要有哪些准备、自己还有什么不足等等这些问题你考虑过吗?本文就跟大家分享周鸿祎在接受某媒体采访时给程序员上的创业课。 程序员创业的特别之处 关于程序员创业,我之所以愿意谈我的观点,是因为我是程序员出身,也是从小公司做起来的,我自认为对待很多程序员个人包括共享软件作者和一些小网站还是很好的。我希望分享一些经验和体会。 首先,我想说的是聪明人不一定能成功,很多程序员很聪明,但我一看就知道他们不会成功。 因为我看到了一些问题,而且现在太多程序员存在很多误解。因此,我希望把我的观点告诉程序员。或许有一些程序员能够清醒,某个人可能因为我的某一句话有了感觉,对他以后的成长产生了帮助,这就足够了。 要知道,程序员总是以为自己优秀所以就能成功,其实不是。 中国的程序员大部分是盲目的:看看一些论坛就能够感觉到,要么有一群人自我感觉极端的良好,以专家自居,要么就是一群蓝领埋怨公司和社会环境不行,待遇不好。 应该说,中国程序员创业的成功率也是很低的。放眼望去,中国互联网成功的人士有几个是真正写过十年软件的。事实上,现状和我们所能听到的媒体宣传的故事很不一样。 很多程序员的最高理想就是写一个共享软件,一年可以挣几百万。但我希望谈的不是告诉程序员如何挣钱,挣钱很容易,而是要告诉程序员如何去创业。比如虽然 FlashGet 的作者收入很高,衣食无忧,但从创业的角度看,它并没有以商业公司的方式创业成功。 程序员在创业方面的欠缺 首先,我看到中国程序员的合作心态非常缺乏,我认为这是中国程序员最大的问题,当然这是有很多原因的。 大家经常说这句话:态度决定一切。但事实上好程序员基本上都比较傲气,因为程序员往往会觉得自己在做世界上一件十分伟大的事情,这就是驱动机器,修改一行代码,机器就能够工作,可以产生各种不同的行为。这很容易会让程序员产生一种错觉,认为自己可以 Control Everything。 程序员的自信在编程上是非常需要的,但不是适合一切场合。 如果我们不说这些,可能很多程序员到现在还不知道自己错在哪里,仍然认为自己是 King of…

Continue Reading →

Get IT技能知识库 50个领域一键直达

成长的因素有很多,你知道知识图谱的作用吗?本文GET了当下最热门、最火爆的技术知识点,让你一库在手,技术全有! 众所周知,我们的每个知识库都是邀请专家精心绘制图谱,并依据每个图谱的知识结构,筛选该技术分支知识点下的优质资源,经特邀编辑一一审核、精心挑选后,形成该技术点的知识库。节省开发者学习时间和成本,最大化的满足和解决大家的日常技能问题,开发者还可以在上面绘制专属于自己的技能图谱(图谱+干货)。 成长的因素有很多,你知道图谱都作用吗?       操作系统 管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。     下载操作系统知识图谱高清大图     计算机网络 利用通信设备和线路将地理位置不同、功能独立的多个计算机系统互联起来,以功能完善的网络软件实现网络中资源共享和信息传递的系统,它是计算机基础知识的重要分支。       下载计算机网络知识图谱高清大图  …

Continue Reading →

高效程序员的 7 个共同特征

导读:要想成为一个伟大的程序员,需要的可不仅仅是能够编写出可以正常运行的代码。Justin James给出了能够成为业内顶尖高手的程序员应该具有的几个典型特质。 要想成为高效的程序员,你需要具备一定的综合素质才能够让你用你所掌握的技能、经验和知识编写出有效的代码。有一些开发人员在技术方面具备一定的技巧,但他们永远无法成为高效的程序员,就是因为他们缺乏所需的其它几项特质。本文将给出成为一个伟大的程序员所必须具备的7项特质。 1.主动学习新的技术和非技术两方面的知识 不好的程序员只有在实在不行的时候才开始进行知识学习。良好的程序员会主动学习新的技术知识。伟大的程序员不仅会自行学习新的技术知识, 而且还会学习非技术方面的知识,对各种知识来源都有一种开放的心态,而不会象有的人那样固步自封。 具体点说,不好的程序员只有在参加了采用WPF的项目时才开始学习XAML;良好的程序员一年前就学习了XAML,因为他感觉它很有意思;而伟大的程序员还阅读了WPF应用程序的设计指南、可用性(usability)理论或者什么类似的学习课程,因而他能够制作出卓尔不群的UI。 2.务实而不教条 严格遵守那些不成文的“编程规则”往往是一种奢侈品,没有多少开发人员能够承受得起。如果你们的规格说明书不是由顶尖的开发人员编写的,也不是在顶尖的开发人员指导下编写的, 我就可以向你保证,你可能也承受不起。 我经常能够碰到一些程序员,他们无法或者拒绝做某个任务只是因为完成这个任务的做法通常不为最佳实践所接受。业务需求很少会受到实现需求所采用的技术的制约;没有人会说,“这我们不应该把这个需求写到规格说明书里,因为要实现这个需求,程序员就不得不写一段很臭的代码。” 在结束的那一天,程序员的任务是要生成一个有效的应用程序,而绝不是要求在技术方面达到十全十美。我可不是在为垃圾代码做辩护。我想说的是,总会在有些时候,你会写出一些代码,这些代码你永远不会作为范例向别人展示做事的正确方法。如果只有一种写法,那么这种代码就不是糟糕的代码 —— 但要保证你已穷尽了其它所有可能的方案。 3.懂得如何通过研究找到答案 通过研究找到答案可不仅仅只是在搜索引擎中键入几个关键字那么简单, 也不是到Stack Overflow或者MSDN forums这类网站发个问题帖。我就碰到过在搜索引擎里根本搜不到答案的问题,然后我Stack Overflow…

Continue Reading →

清华人都如此努力,那我们呢?

看看清华人是如何学习与生活,再看看自己是如何度过一天的,本来聪明的人就很厉害,而既聪明又努力的人简直无敌了,还在堕落和迷茫的同学,赶快醒醒吧! 一、永远不要说你已经尽力了 我在高中时体育特别差,跑 1000 米都很要命,从来都是不及格。到了清华之后,第一节体育课,老师告诉我们每年要测 3000 米长跑,跑不过不许毕业,取消推研资格。 怎么办?于是每天晚上 10:30,我们的自习教室关门,操场上的人就多起来了。跑半个小时再回寝室继续学习,练了一个学期,我瘦了 40 斤,最后考试的时候我仅用了 12 分 56 秒就跑下了 3000 米,我们班最胖的人也在 15 分钟以内跑完了。 清华校训“自强不息”给我的影响非常大。所以永远不要说自己已经尽力了。什么叫成功?人们死活不相信你能做到的事情,你做到了,这就叫成功。…

Continue Reading →