快速的掌握一门语言
最近在读 CSDN 孟岩写的技术博客,很有感触,其中有一篇“快速掌握一个语言最常用的 50%”,感觉讲的很有道理。
自己也曾经学习过几门语言,在这个过程中对如何初步掌握一个语言多多少少也有了一些想法,读了他的这篇文章,才发现他写的更深入。
他的这篇文章针对的是有经验的人,不适合初学者,适用于“庸俗编程语言”(流行编程语言排行榜上排前 20 的基本上都是庸俗语言)。
1.首先了解该语言的基本数据类型,基本语法和主要语言构造,主要数学运算符和 print 函数的使用;
2.其次掌握数组和其他集合类的使用;
3.简单字符串处理。所谓简单,就是 Regex 和 Parser 以下的内容,什么查找替换,截断去字串之类的
4.面向对象或者函数式编程的特征(继承、多态、Lambda 函数之类)
5.异常、错误处理、断言、日志和调试支持,对单元测试的支持
6.程序代码和可执行代码的组织机制,运行时模块加载、符号查找机制,这是初学时的一个难点,因为大部分书都不太注意介绍这个极为重要的内容
7.基本输入输出和文件处理,输入输出流类的组织
8.该语言如何进行 callback 方法调用,如何支持事件驱动编程模型。.NET的 delegate,Java 的 anonymous inner class,Java 7 的 closure,C++0x 的 tr1::function/bind 等等
9.如果有必要,可在这时研究 regex 和 XML 处理问题,如无必要可跳过
10.序列化和反序列化,掌握一下缺省的机制
11.如果必要,可了解一下线程、并发和异步调用机制,主要是为了读懂别人的代码,如果自己要写这类代码,必须专门花时间严肃认真系统地学习,严禁半桶水上阵
12.动态编程,反射和元数据编程,数据和程序之间的相互转化机制,运行时编译和执行的机制(进阶之道)
13.如果有必要,研究一下该语言对于泛型的支持,会用语言提供的泛型技术就好
14.如果还有时间,了解这个语言较常用的特色 features
15.在工作的闲暇时间,可以着重考察两个问题,
第一,这个语言有哪些惯用法和模式,
第二,这个语言的编译/解释执行机制
至此语言的基本部分就可以说掌握了,之后是做数据库、网络还是做图形,可以根据具体需求去搞,
找相应的成熟框架或库,边做边学,加深理解。
其中,上述的建议中,加粗的部分是需要重点看的。
对语言有了基本的了解和认识以后,掌握其常用的部分,然后通过实战及阅读经典源码加深理解,提升对语言的认知,是一个很好的方法。
这样既避免了只看语法,边开发边搜索的埋坑式编码,也避免了一上来花费大量的时间研究语言的各个方面而没有多大效果的弊端。
对于语言中太复杂,不常用的部分,还是要慎重。否则很有可能花费了太多的时间,收效很小,得不偿失。譬如 C++ 中的模板部分,真的是又爱又恨。
之前投入了很多的时间去学习模板,也没有学习个所以然来,加之用的少,之前明白的那部分也忘记的差不多了。
当对语言有了一定的认知后(该语言不要太复杂,C++ 就太复杂了,语言本身有太多东西要学,并且不一定能够很好的理解),
应该注重的是对于数据结构、算法、操作系统、编译、调试。如果之前学的是 C 语言,那么就会把很多时间和精力放在内功的修炼上,
而不是花在语言本身上。
如果早些看到孟岩的文章,在学习语言这块就不会走那么多弯路了,会将更多的时间和精力用在底层相关的学习上,
譬如操作系统,编译原理,汇编语言,数据结构与算法,调试技能上。语言只是一个工具,不应该在语言层面发费太多的时间。
现在越来越感觉语言之争是没有必要的,每种语言都有其应用场景,都有其优势,不能以“田忌赛马”的方式去比较不同语言。
记住,重要的是修炼内功,而不是语言本身,语言只是工具。