A language that doesn't affect the way you think about programming, is not worth knowing.
-- Alan Perlis
-
Focus on semantics, instead of syntax.
For example, it really does not matter a lambda is expressed as
lambda {|x| x + 1}
,lambda do |x| x + 1 end
or->(x) {x + 1}
,-> x {x + 1}
in Ruby. Rather than focus on these syntax differences, you'd better focus on semantic differences: the differences among lambda, block,Proc.new
,def
anddefine_method
. -
Focus on concepts, instead of concrete details.
For example, functions, closures, types, classes, objects, prototypes, structures, pointers, lazy-evolution, coroutines, callback. Once you understand them, you can learn new languages quickly.
-
Focus on good parts, instead of all parts.
Usually you do not need to master every corners of a language. You'd better rather focus on good parts.
Sometimes you even need to focus on good parts outside the language. Just like you can use vi mode in Emacs, you can borrow good parts from other language.
-
Modeling is an effective way of learning. Thus learning the implementation of the language is a good way.
You can even implement the language yourself. To learn a language, you does not need a full implementation. Also you do not need to worry about performance. You can just implement a interrupter with basic and important concepts.