瞎扯淡 如何学好一门编程语言技巧方法一粒

xds2000 · 2014年02月26日 · 最后由 shangrenzhidao 回复于 2014年06月04日 · 6816 次阅读

从踏入计算机领域的第一课起,我就在学习各种编程语言,并且每种语言的学习方法我还尝试变换过多次。一路过来,14 年的修炼让我对学习编程语言的方法有了一个自己的心得。我想这里分享出来应该可以让更多的 Coder 在阅读完我的心得后顺便可以改进自己的学习方法,让自己变得更强。

practice make perfect。这是我从《纸牌屋》里听到的一句台词。我很容易就能体会出这个道理,但还是有一些怪问题需要解开。练习本身是很枯燥的,要我说完全就是苦行僧干的事情,一般很难在期望的时间內达到目标。这里有一个关键字,目标。拿我来说,我在学习一些编程语言的时候很容易就迷失了方向,比如 C++ 语言学习的时候,我从一开始就不知道我能用它干什么,只是觉得这个很底层的语言学会一定能成为 牛人 ,实际上只知道语法,日常也就只能编写一些书本中的例子。我相信即使是现在,仍然会有这样的人,和我一样,漫无目的的学习。这就像慢性自杀一样可怕,不知道何时是个头。解决办法只有一个,立即停下来,重新设定 目标 。我并不是一个训练有序的机器人,所以在想停下来的时候会纠结一段时间。在我经历过多次这样的场景后,现在已经可以快速的做出判断并执行这个技巧了。我相信任何人如果能意识的训练这种技巧后,以后尽快结束这种不必要的纠结时间,那就是万幸。

I love this game。这是我看 NBA 广告中一句台词。我非常羡慕 NBA 球员在场上精彩的比赛。但电视仍然欺骗了我,为什么呢?因为事实上电视台转播的都是精华版,常规赛仍然是难看的,并不精彩。像我这样的伪观众更本没有耐心去天天看这个。学习编程语言也是这么个样子,谁也逃不了枯燥无聊的重复代码练习。这个谁都明白,所以我在这里不提这个,我想说说的是另外的一个事情, 。程序员的工资水平相对其他行业,总的来说还是过的去的。所以,如果你给我一个不可接受的价钱,我绝对是立即走人的。我看到的这样的场景无数次,包括我也有这样的想法,钱太少了。在经历过无数次的历练后,发现一个事实:你用一门编程语言,是因为你很喜欢使用它,这和钱一点关系没有。你为了能天天编程,你必须要找一个地方施展开。所以无论别人给多少钱,你都不应该为此而诱惑。这里给一个简单的公式,应聘这个可以让你有多大的施展空间,这个才是关键。别用钱来限制自己,应该用舞台来展示自己。

remote by 37singals,这是一本书的名字。我看完后产生一个观点,那就是 独立开发者 在未来的时代将会有更好的施展空间。已经有很多人早就实现了这个,非常让人羡慕。但我仍然非常坦陈的想告诉你,改变并不容易。不如把当下的你的工作做的更出色。不要再局限于一种语言或者技能上,你要全面的自我学习,超越自己现有的编程能力就是进步。

effective learning。学一门语言到底需要多少时间,大家有自己的判断。但我想给大家一个方法。一本书看一周,就算入门了。不要自己欺骗自己,就一周最多 30 个小时,就可以入门。很多人一直 迷恋入门阶段 ,即使已经入门了,还在那里原步踏步踏就是不在前行。还有些人更是把读一门语言的源码作为入门的最高境界,比如我买过一本这样的书《Python 源码剖析》,至今没有完整看过一遍。其实学编程语言最大的用处是用它,而不是造它,那是孔乙己的学法,过时了。

open source。学一周语言编程,就可以参与开发了。但没人会给你一个赚钱的项目让你练手。所以更多的人,就闭门造车。模仿复制只有少数人能做的漂亮。不如 参与一个开源项目 ,练手比创造要来的容易。随着时间的积累,你随时可以加入新功能,并能快速体会到用户的反馈。这是最真实的,也是最有效的。

个人认为实践中学习最见效,纯粹看书写 demo,只能是初学中的初学。 实践中学习,你会在解决问题的时候查看工具书籍、浏览牛人的 blog、写写阶段性收获,提升的速度不是一点点快。

有些想法我也很赞同,顶一个!

3 楼 已删除

Ruby Rogues podcast 在 131 期 How to Learn 很深入的探讨了学习这个问题,顺带推荐下

学习易懂的脚本语言可以一周过一遍,但是至于随后能不能马上找个一个合适的开源项目就有点难说了

我比较喜欢这个,但我做不到

对我来说动手实践的学习方式是次好的,最好的学习方法是教别人。为了教会别人需要做大量的准备,搜集很多资料,反复确认细节,教会别人的同时自己也能学很多东西。

#7 楼 @PrideChung 是的,还记得以前公司每周都会做分享,分享的主题很多都是自己不熟悉的,然后研究一个星期,然后分享给团队头的人。。这个一般效率很高的。。。

解开我多年的疑惑。

#7 楼 @PrideChung #8 楼 @small_fish__

我觉得能说跟会做还是有些距离的。

正好这几天我有这么个体验。动手实践需要查阅的资料那才多. 我这几天在做一个 iOS 的 Library. 我不是 iOS 开发者,也没有做过一个成型的 APP, 算是个初学者. 而就在这三天的时间里,我查阅了 3 个项目,和相关的官方文档。大概有 10 个文档左右。有如下内容:

  • 学习 view 的 frame, bounds 和它的 transform 之类的。(View Programming Guides)
  • 把 view 和 controller 的 基本层级关系 也弄明白了。因为我在这也需要做一些 trick. (View Programming Guides)
  • 熟悉了 UITextViewUITextField 还有相关的 delegate, dataSource, Notifications 类以及 RSRangeNSString . 因为我要对它做一些 trick. (UITextView/UITextField Class Reference; Text Programming Guide; NSString Class Reference )
  • 查阅了 Notifications 相关的官方文档。我需要用到。
  • 还有 delegate 模式和 block 的使用学习了下。这是在考虑对外接口问题。

而为了让这个 Libray 好用。我需要去调查使用场景。也就是去阅读多些项目代码,看看大家是如何使用 UITextView 或者 UITextField 的。

而最重要的是,我阅读这些文档是为了解决问题并去实现了的。那感觉是比较深刻的,而且是掌握了如何使用它们的。更何况我需要用来实现一些比较不一样的有趣效果。

所以,我觉得动手实践还是比教会人学得东西来得多。

匿名 #12 2014年02月27日

学习了,顺便顶一个!

@ichord 的经验分享还是听给力的,这正是我原文中提到的 设定目标 的概念

#11 楼 @ichord 如果你是为了教会别人的话会需要查阅更多的资料。教自己需要做到优秀,教别人需要做到完美。

迷恋入门阶段,很多时候可能花了许多时间,但觉得自己进步小,很大程度上可能是这样,觉得掌握的还不够全面,不敢参与到实际,深怕出状况。

还有点个人认为更具体的点就是,在学习与实际操作的时候不要复制粘贴,不便于记忆使用。

关于钱的问题,我不太认同。我 08 年的时候在一家创业公司,有段时间,老板说公司紧张,一个月拿 600,我们一群年轻人觉得能做自己喜欢的工作,于是还是充满了激情,拼命的干。后来公司还是倒闭了。老板把这个公司残骸包装包装卖了自己赚了一笔。我们啥都没有。

我个人觉得钱和你的兴趣是没有任何关系的。你完全可以找到一个让你感兴趣,也有对得起你的薪水的工作。

我 10 年的时候,去一家比较牛的公司面试,老板问我钱和兴趣哪个重要。我选择了钱。我需要钱养房,养车,当然现在更需要了,还要养孩子。

我经历过不在乎钱只在乎兴趣的年纪,但是我现在回头看,其实完全当时可以找到兴趣和钱不冲突的工作。

我一直觉得,如果一家公司整天拿前景,拿兴趣,拿方向来忽悠员工,却不给一点钱的话,那就是耍流氓。

#14 楼 @PrideChung 嗯.... 我找个人教教看。😄

K&R 在第一章就说了嘛:

学习一门新程序设计语言的唯一途径就是使用它来编写程序

迷恋入门阶段的原因是不会把握边界. 孟岩这篇快速掌握一个语言最常用的 50%讲得比较好

写得不错受教了!

学东西的关键就是“敢”和“干”这两个字。

其实学编程语言最大的用处是用它,而不是造它

不过有时候了解一点语言的某个特性是如何实现的,有助于更好的理解。

匿名 #22 2014年03月12日

這完全是實用主義的思想。按這思想,肯定不會像 linus 創造什麼的新的軟體。當然了,我們都是一般人。

拜读了你的 博客,看了几篇帖子,觉得受益匪浅,感谢。

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