From: George Hunka
To: ask_tim@oreilly.com
Subject: Learning Programming
Tim,
Add my voice to those who want to express their appreciation for O'Reilly products. I've been working on the Internet and the Web for well over five years now and have found O'Reilly books on HTML, Unix, and Linux to be the top of the heap.
While Learning Perl and Learning Python are excellent books, they aren't geared at the entry-level programmer. Guido van Rossum, in the interview on your Web site, admits himself that Learning Python is not for a beginning-level programmer--and this for a language which is being geared for newbies!
There are very few books out there about introductory programming that explain the terminology, grammar, and structure behind computer languages, and those that do seem to be written, if not "For Dummies," then "By Dummies." Has ORA given any thought to a high-quality introductory text on programming for non-programmers?
George
George,
We've actually had a number of debates on this topic among our editors, and the fact that it keeps coming up means that we aren't entirely satisfied with our answers. Let me give you the flavor of some of our thinking by sharing some of the comments made in response to your question by a couple of our editors.
First, Frank Willison, our editor in chief, noted:
- Our current "Learning" books tend to assume that the reader already
knows how to program in some language and wants to learn, in addition,
the language that is the focus of the book. For this class of readers, these
books have been very useful.
- The goal of teaching programming to non-programmers is a difficult one. Such a book doesn't teach the language as such, but teaches programming concepts through the language. Therefore, it's important to use a language that makes sense both on a practical and conceptual level; that is, the constructs of the language should correspond well with the programming concepts you want to teach. We're contemplating which languages fit that model, and we are currently looking closely at Java and Python.
That being said, one of the things that we've always found intriguing is that many people "back in" to programming. As I said in UNIX Power Tools, that has always seemed to me to be one of the real beauties of the UNIX command line--that there's an imperceptible progression from the command line to simple shell programming, to tools like sed and awk, and on from there to Perl, as you get increasingly proficient at "letting the computer do the dirty work."
The Web has much the same quality, where people start out with HTML, but then find themselves stretching to master a bit of JavaScript or a little bit of CGI programming with Perl.
Now, you'd think that this vast population of amateur programmers would be an ideal target for a book on the principles of programming. But as our Web design editor, Richard Koman, remarked:
I don't think non-programmers want to "learn programming;" I think they want to do stuff and are willing to "learn programming" in order to accomplish their goals. Thus, JavaScript or Lingo or other similar high-level languages are where people will want to start. Designing with JavaScript is our entry-level book. That book will get basic programming concepts under your belt. Where do you take it from there?We've certainly seen a huge upsurge in sales of JavaScript books, suggesting that Richard may be onto something. The question is whether (and how) people make the transition from "scripting" to programming proper. Do people who've started with JavaScript know how to make the leap to a full-featured language like Java or C? It's a stretch.
We think this may be one clue to the enduring popularity of Perl. As Larry Wall likes to say, "Perl makes easy things easy and hard things possible." Advanced Perl code (or bad amateur perl code!) can seem impenetrable to outsiders, but a surprisingly large number of people do manage to work their way up from "baby talk" hacks on existing CGI scripts to becoming fluent speakers of the language. Larry's somewhat unconventional views on the design of computer languages don't seem to find much favor with hard core computer scientists, but they have proven surprisingly effective. Simon Cozens made this same point in a recent interview with Nat Torkington on perl.com:
One of the criticisms often leveled against Perl is that it's too big and too complicated for people who haven't programmed before. Simon Cozens disagrees. He teaches Perl to first-time programmers and says, "Perl is an ideal first programming language."But in some sense, the whole issue of which language is best is really beside the point of your question. All languages have good points and bad points, and some are better at solving particular classes of problems than others, but at some point, a grounding in the more rigorous side of programming is important. The question is when you give that grounding. A book like Mastering Algorithms with Perl is one answer: it assumes that someone has come to the point of being a fairly experienced Perl programmer without having necessarily been exposed to some of the discipline of computer science. But you're asking the question of why not start with the discipline of programming?
The answer, most likely, is that we will one day give that a try, and do a real introductory programming book. But I have a feeling that the people who Richard is talking about won't want to start there.
--Tim
Return to: Ask Tim Archive
