I'm very interested in on-ramps for hands-on learning about programming and computing concepts.
First, I agree with Robert that there is no perfect language for this. Wanting to choose a single language to start, and focus on it is a good idea, but that is to simplify all of the different things that are learned while you build a conceptual foundation. With a good foundation and some understanding of the concepts involved, you can learn additional languages. The rule of thumb used to be that around your third language, you would start to master a wide range of concepts and have a good way of understanding the differences in detail that matter.
So, don't be discouraged. There is no universal single tool in the programmer's toolbox, anymore than there is in other craft disciplines and even theory-based disciplines.
Now, about F#. I notice that I am shy about F#. I like the idea of it but I am hesitant to recommend it to raw beginners for a couple of reasons. First, the language and implementation haven't reached a solid stability point yet. I don't know if the changes coming will matter with regard to current books, but you will have to deal with that.
Also, without looking at any of the books, so I don't know how Robert has dealt with this, may books on programming languages are based on tacit knowledge of what programming languages and computing are about. There is especially tacit knowledge presumed about the operating system, how to organize and compile projects, how to find the output and to use it, etc. You may stumble on assumptions of knowledge that you haven't developed for yourself. You'll have to watch out for that with any language and tools that you choose.
Secondly, it is heavily connected with .NET concepts and libraries, and that is a big speed bump. This is the way of many contemporary languages, where the library is at least as important as the basic language itself. Java and C# (and all of the .NET languages) are this way. The problem with the .NET connection is that it is not documented or illustrated in F# but in the primary .NET languages, C# and Visual Basic.NET. Also, instructional materials and beginner information for .NET concentrate on those languages (which have free Express Editions).
Finally, F# does not have an Express Edition at this point. So to have IDE integration you either need to invest in a commercial Visual Studio version (or an academic version for personal use if you are a student) or you need to be willing to integrate with other tools or run command-line only. This will create dissonance with all of the work and examples that assume or even depend on Visual Studio features.
For a lower-cost approach, you can start with Scheme or use the languages of the One Laptop per Child initiative: Python and Squeek. Learning to develop for the OLPC machine, the XO, might be a great overall learning path too. It is perhaps the closest we can get you to the time when enthusiasts and today's seasoned developers teethed on microcomputer systems like the Apple IIe, Heathkits, and other early personal machines.
Ultimately, it depends on where you want to develop proficiency -- what kind of software would you like to build? -- and you need to choose a path that provides a foundation and experience that builds to that.
- Dennis
- Dennis
- - - - - - - - - - - - - - - - - -
dennis.hamilton@acm.org http://orcmid.com/