分享 怎样快速学习一门新技术

seabornlee · 发布于 2014年5月28日 · 最后由 lavender 回复于 2015年2月26日 · 17106 次阅读
5196
本帖已被设为精华帖!

前几天fork了Ruby China的源码,面对陌生的Ruby技术栈,一头雾水。 我fork它并不单为了学习,而是要在最短的时间搭建起我脑海中的社区网站。所以我不可能针对每一门新技术都去买一本书来读上半个月。

我在本机运行起Ruby China,新注册一个用户,发现不能发帖,提示说要注册一个月以上才可以。于是我去找相关代码:

# 是否能发帖
def newbie?
  return false if self.verified == true
  self.created_at > 1.week.ago
end

明明是一星期嘛,代码是不会说谎的。于是把文字改掉,顺便提个pull request。 扯远了,代码说如果是self.verified就不是新手了,我先去管理后台看了一下,没有修改这个字段的界面。于是我不得不去数据库里更新这个字段。我大概知道mongodb是数据库,但我不知道该怎么操作。

从宏观出发

当我了解到一个新的技术名词,不会直接陷入细节,而是从宏观上把握它。了解它的背景,为何出现,解决什么问题,有什么同类技术,没有它之前我们如何工作。因为有了宏观的了解,我就能很容易把它和我熟悉的技术去建立关联,从而更快地理解它。

实践出真知

打开官网,发现有个非常棒的Try it out,先花10分钟玩一下,对其玩法有个大概了解,然后再来解决实际的问题。

从前面的Try it out中我知道了help命令,于是便通过help知道了show dbsuse ruby_china_dev。根据使用SQL的经验,我想当然地认为更新一条记录的一个字段应该是这样:

db.users.update({"_id":3}, {verified: true})

但我悲剧地发现,整条记录被替换了,好吧,这就是文档型数据库。于是放狗搜索:How to update specific field in mongodb,很快便找到了答案。

db.myCollection.update({condField: 'condValue'}, { $set: { dateField: new Date(2011, 0, 1)}}, false, true); 

对应我这里的需求就是:

db.users.update({_id:3}, {$set:{verified:true}}, false, true)

问题解决了。

随着接触的越来越深,遇到的问题就会越来越多。我会把每一个解决掉的问题放到我的Evernote里,这样下次再遇到就能很快找到答案。当我发现postach.io这个可以和Evernote同步的博客系统后,就开通了这样一个博客,其他人遇到同样的问题时也更容易找到答案了。

当我真正对一门技术感兴趣并且有足够的时间去学习时,我通常会按照下面的步骤去学习。

教是最好的学

实践足够多后时,我可能觉得已经掌握这门技术了。但当我尝试去表达的时候,会惊讶地发现还有很多概念是似懂非懂的。于是我会去查资料,完善自己的体系。只有当我把学到的东西用自己的语言表达出来,并且能让听众明白的时候,才是真正掌握了该技术。

学会分享是很重要的,把在该技术上的经验总结出来,写成博客,集结成书出版,再到行业会议上分享实践经验。这样才能成为该领域公认的专家。

推迟学习

一位一年读100多本书的同事说:

你一年才能读几十本书,就不要什么书都看了,多花点时间挑书吧。

现在新技术层出不穷,我们没有那么多时间去深入学习每一门。对于大多数技术,我们只需要搞懂概念部分,从宏观上了解一下,决定我们要不要深入地去学习它。有了这些了解,就能轻松地与别人聊天了,也可以为以后技术选型做一些储备。当面对真正的需求时,或者你有足够的时间做技术储备时,才去进入实践部分。

编程是一个知识更新很快的行业,只有真正有热情并掌握了好的学习方法的人,才能走的长久。

共收到 47 条回复
1667
serco · #1 · 2014年5月28日

:plus1:

4090
zhanglinjie · #2 · 2014年5月28日

👏

12284
ucooling · #3 · 2014年5月28日

很赞同,感觉自己现在就是钻在牛角尖里,可悲的是知道自己在钻牛角尖自己还出不来。向楼主学习

12788
ddyy · #4 · 2014年5月28日

屌丝心态,注定孤独一生

7643
5swords · #5 · 2014年5月28日

@Seabornlee, :plus1:
"一年读100多本书的同事" 和 "技术选型" 的链接网址好象反了。

8100
evnton · #6 · 2014年5月28日

楼主用的是什么mind map软件,是mac下的吗

5196
seabornlee · #7 · 2014年5月28日

#6楼 @evnton 是的mind node

5196
seabornlee · #8 · 2014年5月28日

#5楼 @5swords 谢谢,不过没有错。

5196
seabornlee · #9 · 2014年5月28日

#4楼 @ddyy 不明白您什么意思 : (

12638
hiluluke · #10 · 2014年5月28日

:plus1:

96
yiming · #11 · 2014年5月28日

和楼主类似,我目前的学习过程很大程度上是问题驱动。在解决问题的过程中会学到不少东西。但这有明显的缺陷,那就是不够系统,基础不够稳固,难以看清全貌。因此,我觉得还得定期拿书本出来系统地学一学。看书时因为有先前的实践,所以会比较有感觉,容易产生共鸣或加深理解。

在本科时对着大部头的教科书,基本上不出半小时肯定犯困。。。learn by doing对我来说是不错的学习方式。

12楼 已删除
13楼 已删除
7733
yukihiro_matz · #14 · 2014年5月28日

👏

5759
diguage · #15 · 2014年5月28日

不错。有时间我也总结一下。献个丑。哈哈

5196
seabornlee · #16 · 2014年5月28日

#11楼 @yiming 是的,第三部分教是最好的学,意思就是当尝试去教别人的时候就会发现之前实践总结出来的东西并不够系统,会发现很多自己还不清楚的地方,就需要去查阅更多的资料把这些地方填上。

5196
seabornlee · #17 · 2014年5月28日

#15楼 @diguage 交流使人进步 : )

96
timothyye · #18 · 2014年5月28日

拿一个实际的项目和例子来练手感觉进步最快,而且有疑问马上google

5196
seabornlee · #19 · 2014年5月28日

#18楼 @timothyye duckduckgo更适合程序员哦

7907
besfan · #20 · 2014年5月28日

赞一个!学习ing。 能够快速分析问题、快速学习新技术, 比累积的经验更为重要。

2471
msms · #21 · 2014年5月29日

点个赞,学习一下,

827
chairy11 · #22 · 2014年5月29日

赞思维导图……

3045
hpyhacking · #23 · 2014年5月29日

各位搞技术的朋友,可以用比特币来实践一下。

1674
bigpig85 · #24 · 2014年5月29日

太赞了,非常实用。

172
ibachue · #25 · 2014年5月29日

一年读100多本书的同事 超过犹太人了。。。

4257
greatghoul · #26 · 2014年5月30日

这个学习新技术的方法超级赞呀。

1326
crabby · #27 · 2014年5月30日

感谢楼主分享

96
yobi · #28 · 2014年5月30日

很实用呢,数据分析学习http://t.cn/Rv50Vfr

910
robertyu · #29 · 2014年5月30日

手动赞!

7550
summer_charlie · #30 · 2014年5月31日

很清晰的思路.

96
lixiphp · #31 · 2014年6月03日

写的不错。

1401
tianshuai · #32 · 2014年6月03日

写的太好了!

96
new_birld · #33 · 2014年6月04日

怎么下载rubychina的源码啊

10653
cdx_net · #35 · 2014年6月07日

fine

96
Guest · #36 · 2014年6月08日

关注下~

96
cughuan · #37 · 2014年6月09日

很不错~

13116
gothic · #38 · 2014年6月11日

赞,写的太好了!

13856
jasjia · #39 · 2014年6月28日

说得好! 赞一个!

13869
jasonmiao · #40 · 2014年6月30日

很好的一个技术学习方式,值得尝试!

96
yang3141314 · #41 · 2014年7月02日

对于程序员这个行业,还是要看自己是不是喜欢

96
aaron_ny · #42 · 2014年7月17日

good, mark.

5003
jerossh · #43 · 2014年7月18日

看书……嘿嘿,楼主不错~能做到的人,不多哦。

96
nicolas · #44 · 2014年7月21日

不错!

8187
mr_zou123 · #45 · 2014年7月22日

刚开始接触语言时只是大概了解了语言的类型,却没有和其他语言比较,更没有去了解这种语言和其他语言的优缺点和解决了什么问题,而且为什么会出现这一步也没有做好,觉得走了很多的弯路,而且之前也有一个错误的观点,觉得语言先学通一门再去学其它的,现在觉得要了解一些主流的,然后深入一门.看了楼主的贴,感触更深了,谢谢1

5196
seabornlee · #46 · 2014年8月06日

#45楼 @mr_zou123 很多人一上来不问what和why,直接进入how的阶段,就容易陷入细节,走弯路,浪费时间。

8187
mr_zou123 · #47 · 2014年8月07日

@Seabornlee 谢谢指正!

6266
zhangyanan · #48 · 2014年8月07日

非常励志!

96
lavender · #49 · 2015年2月26日

不错,很有激励的文章,学习了!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册