怎样才能快速掌握一门编程语言?

几周前一个朋友也打算通过跑步来甩一甩脂肪,控制一下自己那已经严重扭曲了的身材 —— 他便求教我从衣服到鞋,从腕表到心率带,都买了什么装备,性能如何,他好照着原样来一套。我告诉他我什么装备都没买,跑了半年多了,我还是随便套上件纯棉的T恤,穿条舒服的运动短裤,蹬着跑鞋,抓着手机,就这么跑将起来。他连连说不信,一个连排汗速干的衣服,臂包,运动腕表都没配的人,怎么也能(配得上)跑步?纽约娱乐城

这让我想起了经常会遇到的一些读者留言:

「我想学rails,有没有推荐的ruby的入门书籍?」

「我想学android,对java掌握到什么程度才能开始呢?」

「我c/c++还没入门,能直接学python么?」

这些问题都是初学者常常萦绕心头的疑虑。在我们自己的现状和想要达成的目标间,总是横亘着一条名为「先决条件」的大河,似乎除了花费巨大的精力游过这条大河外,别无他法。很不幸,大部分人还没能够接近目标,便被湍急的水流冲走了。然而,还是有少部分人似乎坐上了阿拉丁的魔毯,毫无迟滞地直达彼岸,好像学什么技术都不那么费劲。这是怎么回事?

学一门新的语言,或者新的技术,与其说是一种能力,不如说是一种方法。试问什么样的人,或者说人在生命的什么阶段,学习效率最高?效果最好?答案显而易见:婴儿期。我的不到两岁的女儿估计现在也就掌握了几十个名词,十多个动词,三五个形容词和介词而已,但每天从她口中蹦出来的话不下几百句。想想我们自己学了多少年英语,才能从口中完整地说出:”hello everybody, so glad to see you”,初中?高中?抑或大学?想想我们单词量三千的时候能做什么程度的沟通,交流?

如果你仔细观察,你会发现,婴儿的学习方法极尽实用之能。模仿,试错,练习,不管一切所谓「权威」的语法,词法,一切以用为主。还是以我女儿为例,她的表达是以短语和句子为主:

「爸爸抱抱小宝」- 求安慰

「小宝要喝奶奶」- 饿了

「要是小宝不听话呢」- 学会了反问之后你跟她说话她时不时就将你一军

「妈妈妈妈快回家,让我亲亲你吧」- 跟唱歌机学的,卖萌

「goodbye so long farewell my friend」- 跟音乐课学的,卖萌

说出的大部分的句子,她并不知道每个词的具体含义,但她知道这个句子的模糊的意思,而且从大人的反应中,她能知道她理解的意思是否正确,就这样,一次又一次模仿,试错,获得反馈,不断地累积自己直接能用的「知识」。

这是实用主义者的学习方法:绕过障碍,直奔主题,专注那些你马上需要学的。几年前,我在开始学某样东西前,会上网搜罗几乎所有能找到的从入门到进阶再到专家的书籍,在看了一大堆各式各样的评论后,心满意足地筛选出所谓的「精品」购买回家,然后把他们垒在书桌前,仿佛这是学习之前必要的仪式。但这样的做法仅仅是成就了豆瓣和亚马逊,堆积的图书往往在我豪气万丈地看到第一本的第X章(X<=5)后便被束之高阁。后来我发现,我被所谓的「学习要先系统地打下扎实的基本功」坑了 —— 我不断地陷入「基础知识」的泥沼,越陷越深,越学越苦,只能苦苦挣扎。这挣扎的结果,80%的情况变成了放弃。

其实我大可不必去担心这些「基础知识」,把它们先放在一边,用到多少,便学多少。比如说,我要学rails,那就直接从rails开始,遇到有关ruby的语法障碍,回过头来看看ruby文档中相关的内容,扫清障碍立刻回到rails本身,而不是先从ruby啃起。要知道,rails里用到的ruby特性,可能占ruby总体语言和类库特性的20%都不到!从ruby学起,便是走了岔路。

软件开发是个手艺活,它的学习不是各种可能很少用到的知识一股脑的堆积,我们没法在一切理论知识准备就绪以后再开始学习。scala的作者批评java的低效时曾经说过,java把写程序变成了做仪式,因此毫无乐趣可言。那么,当我们在桌前堆满了从入门到专家的各种书籍,是不是也把学习变成了一场盛大庄重的仪式?重要的不是堆砌了多少知识,而是学以致用。

仅仅专注并直奔主题还远远不够。学习过程中你需要大量练习和获得反馈。 婴儿并没有在累计了3000个词汇之后才开口说话,而是当身体和大脑准备好后的第一天就张口说话了,并且,尽管说得错误百出,他们依然越挫越勇,屡败屡战。同样的道理,当你学习python而不使用ipython在REPL环境下尝试各种使用技巧,当你学习django而没有从搭建一个可运行的web项目开始,那学习效率肯定不高,效果也必然马马虎虎。在健身房里,就算观摩教练的动作一百遍而不是自己亲自尝试,并接受对方的纠正建议,你还是无法掌握正确的动作要领。我见过有人把书中的例子一个个敲到编辑器中,全部运行正确,然后就心满意足地认为自己「掌握」这门技术了。殊不知,这种「练习」并非有价值的练习。我们需要试错,就像婴儿学步那样,模仿,迈步,摔倒,爬起来,再迈步。犯错是学习的一部分,当你看完教程掌握了里面所述的内容后,可以自己构思某个应用或者某个使用场景,然后从头写起。你会发现很多问题,也会加深对教程的理解。自己无法回答的问题,可以寻求社区的帮助,大部分和开发有关的问题都能在stackoverflow上得到解决。这样不断地练习和获取反馈,你的开发功底会很快提升。很多非系统的知识和能力(甚至洞见)就是这样通过不断练习和试错在下意识间学到的 —— 它们来得如此悄无声息,以至于除你之外,别人都将其视为你的一种天赋。

那么,什么时候需要系统地学习呢?当你有了实战所需的技术和经验,需要宏观上对自己所学的内容做一个升华时,或者当你的实战能力遭遇到了瓶颈的时候。有句话说得好:你不需要成为一个优秀的ruby工程师才能用好rails,但如果你想成为一个优秀的rails工程师,则你必须很好地掌握ruby。遗憾地是,很多初学者的问题是:想对一门技术快速入门,却使用了系统学习的方法,还未入门,便倒在了艰苦修行的路上。

时间: 2025-01-13 06:49:37

怎样才能快速掌握一门编程语言?的相关文章

12种方式让程序员快速掌握一门编程语言

[IT168 评论]你决定学习一门新的编程语言了吗?怎么开始呢?本文列举了12项关于快速掌握一门编程语言的方法,如果你有其他更好的建议,欢迎分享! 1.比较与之类似的编程语言 这点对于程序员而言,应该很容易吧!你可以通过观看该语言的教程或读取示例代码,来尝试猜测该语言的特点,并将其记录下来,比如: ·该语言与哪些编程语言相似,相似点是什么? ·该语言的不同之处在哪,哪些特点超乎了你的想象. ·该语言主要用来干什么呢? 如果条件允许,你可以寻找身边同在学习该门编程语言的朋友,互相交流,或许会有更清

快速学习一门编程语言的方法

现在的开发工作要求我们能够快速掌握一门语言.一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习:其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作.然而这两种方法都有弊病. 第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高.因为没有实际问题驱动的语言学习通常是不牢固不深入的.有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的. 第一种路子也有问题,在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧

如何快速掌握一门编程语言

我想学php,有没有推荐的php的入门书籍? 我想学android,对java掌握到什么程度才能开始呢? 我c/c++还没入门,能直接学python么? 这些问题都是初学者常常萦绕心头的疑虑.在我们自己的现状和想要达成的目标间,总是横亘着一条名为「先决条件」的大河,似乎除了花费巨大的精力游过这条大河外,别无他法.很不幸,大部分人还没能够接近目标,便被湍急的水流冲走了.然而,还是有少部分人似乎坐上了阿拉丁的魔毯,毫无迟滞地直达彼岸,好像学什么技术都不那么费劲.这是怎么回事? 学一门新的语言,或者新

快速学习一门新的编程语言

为什么 Objective-C 很难 - linux,dev - 博客园http://www.cnblogs.com/huapox/archive/2012/12/01/3251600.html 9 个指导开发者快速编码/学习的网站推荐 - 楚广明 - 博客园http://www.cnblogs.com/chu888chu888/archive/2012/02/16/2354813.html 教是最好的学 - MNight - 博客园http://www.cnblogs.com/mnight/p

如何创造一门编程语言?

编程语言,作为人与计算机沟通的桥梁,有着重要和深远的意义.有过计算机编程经验的人,多少学习或掌握过一到多种编程语言.计算机专业领域的编程语言成百上千种,主流的编程语言也有数十种之多.每种编程语言面向的领域和特性都不尽相同,不过归根结底是为了解决人与计算机之间沟通的效率问题,提高计算机的生产力.想必有不少人对那些主流编程语言的创造者十分倾佩,也相信有不少人会好奇一门编程语言是如何诞生的.那么如何创造一门编程语言呢? 总的来看,创造一门编程语言需要有以下几个过程: (1)设计语言的特性. (2)定义

初学者该如何选择一门编程语言?

用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的github,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路!!! 为什么会出这样一篇文章? ?本来想写点最近学习的东西,但是最近好多粉丝再问我一个问题. image-20200105164345384 于是我决定把我这个过来人的一些建议给到你们,希望大家少一些不必要的迷茫,多花点时间去学习该学习的东西,去做一些重要的事情. 刚开始学习

菜鸟程序员如何才能快速提高自己的技术

菜鸟程序员如何才能快速提高自己的技术? 导语:很久没有这么悠闲的在家撸一篇文章了,最近也在思考怎样才能写一些对程序员帮助非常大的文章,怎样去运营好我们这个移动开发者聚集地的公众号:非著名程序员.当初弄这个公众号的本意就是为广大的开发者提供各种技术分享,发布最前沿的科技信息和技术.核心观念是:分享.认为只有分享,共享才能让我们开发者团队更强大. 好了,言归正传,进入今天的主题,菜鸟程序员如何才能快速提高自己的技术,为什么要写这篇文章呢,因为有很多程序员给我留言,说我们这些初入社会,走向工作的程序员

如何快速切入一门语言?

从业2年,头半年做flex移动开发,后1.5年专注于安卓开发.虽阅历看似还不够丰富,但对软件这块摸出了不少门道."若问山多高,请问过来人",曾经以为世上没有所谓太深的门道,多年以后,终于领会到其中的境界. 尝试.曾经总以为,什么事情,一定要去尝试一下,才能体味其中的酸甜苦辣.记得大学时,班主任说过,"有些东西根本就没有尝试的必要,那必然是一条死路".当时我最强烈的感觉 是,没试过,怎么知道是不是死路.我现在的观点是,一半一半,确实很感兴趣的,一定要尝试(一个人连兴趣

如何快速掌握一门新技术/语言/框架

IT行业中的企业特点是都属于知识密集型企业.这种企业的核心竞争力与员工的知识和技能密切相关.而如果你在企业中扮演的是工程师的角色的话,那么你的核心竞争力就是IT相关的知识与技能的储备情况.而众所周知,IT行业是一个大量产生新知识的地方,就拿Web前端举例,短短的5,6年时间,Web前端已经经历了数次变革,就目前来看变革还将继续下去.从以前的div+css网格化布局到JavaScript的方兴未艾,然后是各种JavaScript框架的百家争鸣,HTML5和CSS3的落地,移动web冲击下带来的响应