This question is centered around Scheme but really could be applied to any LISP or programming language in general.
Background
So I recently picked up Scheme again having toyed with it once or twice before. In order to solidify my understanding of the language, I found the Revised^5 Report on the Algorithmic Language Scheme and have been reading through that along with my compiler/interpreter’s (Chicken Scheme) listed extensions/implementations.
Additionally, in order to see this applied I have been actively seeking out Scheme code in open source projects and such and tried to read and understand it.
This has been sufficient so far for me understanding the syntax of Scheme and I’ve completed almost all of the Ninety-nine Scheme problems (see here) as well as a decent number of Project Euler problems.
Question
While so far this hasn’t been an issue and my solutions closely match those provided, am I missing out on a great part of Scheme?
Or to phrase my question more generally, does reading the specification of a language along with well written code in that language sufficient to learn from? Or are other resources, books, lectures, videos, blogs, etc necessary for the learning process as well.
1
Generally, programming language specifications are not very good tutorials. They are worded so as to be prescriptive rather than descriptive, although I think the best specifications identify discrete, separable requirements in simple, disjoint shall statements that are pretty easy to evaluate, and are further documented with a description and an example.
Bjarne Stroustrup weighs in on just this question about the recent C++ standards work in his C++ FAQ.
Be warned that the standard is not a tutorial; even expert programmers
will do better learning about C++ and new C++ features from a
textbook.
1
This is how I learn programming language in general:
First I check out a tutorial book NOT written by the author of the language. This gets you the view of programming the language from a perspective of the person who didn’t implement the language. (This is important as you also have NOT authored the programming language in question).
THEN I pick up a book written BY the author of the programming language. For SCHEME I would suggest “SICP”. This gives you a much deeper insight into the programming language and WHY it was written and the problems its used to solve by the author of the programming language.
Then I read code and specification, which is a much more detailed report on the programming language in question. Its STANDARDS and CONSTRUCTS. This should always be the last step in learning by theory.
In the meanwhile – I program and toy with the language until I feel comfortable with it. By the time you reach the third step in the “THEORY” section you will be comfortable enough to program a decently complex program using the programming language.
In short, to really master the language, there are no shortcuts.
1
Would reading a book on English grammar bell you everything there is to know about using English? Of course not. It might teach you enough to get by, but you’ll have a deeper appreciation if you read some Shakespeare, etc.
If you can understand enough about Scheme (or any language) from reading the spec, great! That may be all you need to know. If you’re really interested in the language, though, you’ll probably want to read more about it, see how other people use it, and enjoy the process of discovering more. The spec tells you what the language is and how it works, experience (your own and other people’s) informs what you decide to write and how you decide to write it.