如何学习编程语言(四)
这是本文的原始稿,仍在更新,获取最新的版本请到:
http://htlpl.42qu.com
===========
入门一个编程语言,肯定是从语法结构开始的。
各种各样的标识符和字面量的构成、支持的数据类型、对应类型的各种操作和如何添加自定义结构(类型、函数、宏等等)。如果之前有学习语言的经验的话,对比学习则会有更好的效果。而且如果是特定类型的语言,语法结构上很大程度上是相通的,类比学习更会正方向的促进学习效率的提高。
单只知道语法是不顶用的。“回字有四种写法”,知道了如何写却写不出内容来。那么,下一个需要了解的就是一个语言的core library & std library(核心库和标准库),以及各种有用的API。这样子你才可能会去通过对库的使用来做出一些实用工具。因为对基础的库的理解可以促使你形成一种思想:如何去利用已有的东西来构建自己新的东西。
那够了吗?当然不够。如果没有解决问题的思想方法,那么你还要去学习如何去组织和管理数据,和如何进行算法设计。没有要求去形式化的学习数据结构/算法分析,但至少要知道分析和解决问题的思想,并且能够有效运用。不要让程序成为一团乱麻,跟流水帐似的一条条语句罗列下来的样子。
嗯,还不够。因为就算能够解决问题了,还是不足以让你形成一个系统化的思维模式。要想更好一点,拿一个该语言擅长的领域的完整程序来,分析一下他的源代码,顺便自己再模仿实现一个。从架构成面上如果能够设计出一个完整的应用程序来,则是这一项训练的最高目标。
好吧,如果你想停止,那么可以了,至少你可以依照这这项能力找一个不错的码农工作了。但如果你还想继续,还觉得没有虐够的话,去读一下标注库/核心库的实现吧:能够被语言采纳为库的代码往往都是优秀的,无论是风格还是效率还是解决核心问题的处理方法。那么,学习库的实现则更是一个提升层次的方式:当然,如果你想,也可以自己试着扩展一下标准库。
没,还没完呢。
至少还有很多东西给忘了呢。
语言总会有不足之处,也总会有过人之处。但是,如果当你好奇,想了解一下该语言的特性如何实现的,或者是想通过对底层代码的修改来扩展该语言,那么,下一个要做的就是去读语言的源代码吧,或者是去实现一个吧。
当然,这是对于那些自扩展性不强的语言来说的。否则,添加语言特性这东西完全可以通过语言本身实现(如C++、Ruby、Lisp等),总之,对语言的hack绝对是受欢迎的。而且,什么时候送给官方一个patch的话,那你就真正为一个大神了。
http://htlpl.42qu.com
===========
入门一个编程语言,肯定是从语法结构开始的。
各种各样的标识符和字面量的构成、支持的数据类型、对应类型的各种操作和如何添加自定义结构(类型、函数、宏等等)。如果之前有学习语言的经验的话,对比学习则会有更好的效果。而且如果是特定类型的语言,语法结构上很大程度上是相通的,类比学习更会正方向的促进学习效率的提高。
单只知道语法是不顶用的。“回字有四种写法”,知道了如何写却写不出内容来。那么,下一个需要了解的就是一个语言的core library & std library(核心库和标准库),以及各种有用的API。这样子你才可能会去通过对库的使用来做出一些实用工具。因为对基础的库的理解可以促使你形成一种思想:如何去利用已有的东西来构建自己新的东西。
那够了吗?当然不够。如果没有解决问题的思想方法,那么你还要去学习如何去组织和管理数据,和如何进行算法设计。没有要求去形式化的学习数据结构/算法分析,但至少要知道分析和解决问题的思想,并且能够有效运用。不要让程序成为一团乱麻,跟流水帐似的一条条语句罗列下来的样子。
嗯,还不够。因为就算能够解决问题了,还是不足以让你形成一个系统化的思维模式。要想更好一点,拿一个该语言擅长的领域的完整程序来,分析一下他的源代码,顺便自己再模仿实现一个。从架构成面上如果能够设计出一个完整的应用程序来,则是这一项训练的最高目标。
好吧,如果你想停止,那么可以了,至少你可以依照这这项能力找一个不错的码农工作了。但如果你还想继续,还觉得没有虐够的话,去读一下标注库/核心库的实现吧:能够被语言采纳为库的代码往往都是优秀的,无论是风格还是效率还是解决核心问题的处理方法。那么,学习库的实现则更是一个提升层次的方式:当然,如果你想,也可以自己试着扩展一下标准库。
没,还没完呢。
至少还有很多东西给忘了呢。
语言总会有不足之处,也总会有过人之处。但是,如果当你好奇,想了解一下该语言的特性如何实现的,或者是想通过对底层代码的修改来扩展该语言,那么,下一个要做的就是去读语言的源代码吧,或者是去实现一个吧。
当然,这是对于那些自扩展性不强的语言来说的。否则,添加语言特性这东西完全可以通过语言本身实现(如C++、Ruby、Lisp等),总之,对语言的hack绝对是受欢迎的。而且,什么时候送给官方一个patch的话,那你就真正为一个大神了。