FIRST DRAFT PROPOSAL :

Tcl/Tk book for 'By Example' series
ms solicited by Gretchen Ganser via email
June 1 2000


author

D. A. Clarke
151 Dufour St
Santa Cruz
CA 95060
de@ucolick.org

831 459 2630
(you will have difficulty reaching me by phone; recommend you use email)

I don't give out my home phone number.


author background:
Misc applications programming, sysadmin, network engineer, scientific applications, database applications, realtime control, test suites. 20 years in various software positions at Lick Observatory (Univ. of CA).

Tcl programmer since fairly early days of the language; not a founding community member but one of the older turks. Have written mid-to-large projects in Tcl/Tk since 1990 or so, mostly database apps and realtime machine control apps. Presented papers/posters at each of the last few Tcl conferences; co-chair of Tcl/2K Usenix conference in Austin TX. Author of 1 chapter in O'Reilly book 'Tcl/Tk Tools'. My chapter was on TclX and should constitute the "published writing sample" on similar topic required by the proposal guideline. An unpublished writing sample on Tcl and database applications has already been submitted to Gretchen.

See my home page for information about Tcl projects, published papers, etc.


(answers to questions from author's kit)

I. Book Contents

Why do you think this book should be published?
Actually you called me, I didn't call you, so presumably Macmillan already feels this book should be published :-) one reason is that tcl/tk is becoming better known, and a number of books now exist; so each publisher probably wants to offer at least one title about tcl/tk. I didn't really see a crying need for another intro book on Tcl, but I like the series concept (a real app gets built in the course of the lessons, which the user can enjoy later and take some pride in having written).

Provide a brief, but detailed background of the topic.
Umm, see www.scriptics.com, www.tcltk.com...

What key features will make this book different in the marketplace?
This is a hard one for me to answer. Being an experienced tcl/tk programmer I have not read every beginner book on the subject, so I am not sure what the strengths and weaknesses of various other competing books might be.

What I would try to do with a book of this kind is show the reader that Tcl/Tk is a *friendly* language, as friendly as BASIC but much more powerful; that even a person without a computer science degree or a formal software engineering background can write useful and even fairly sophisticated applications using tcl/tk, and that applications can be tested and deployed very quickly using this language. In particular, that a rather important kind of application, i.e. data mining/management/visualization apps, can be quickly and easily built and tested using tcl/tk.

While trying to write about programming for the ordinary person, I'd still want to stress bread-n-butter "good coding" practises, because these are as much for the programmer's own good as for compliance with some abstract standard or management-enforced style guide.

I'd like to stress the practical aspect, as in Brent's excellent book, but use the pedagogical model of building an entire functioning app rather than presenting many unrelated code fragments as examples.

What new industry topics or trends may this book touch upon? List them even if they are addressed by only one chapter.
Mining simple web pages is something I have done for years with tcl, and now I hear that it's a moderately hot topic, so this may be a "trendy" feature of the book.
II. Audience and Marketing Information (Define and Describe Audience )
What minimum skills must they have?
how about this (my first draft):

The first chapter of this book is for the absolute beginner, the person who has never written a line of code. It will explain, at a non-expert level, the meaning of basic programming language concepts like 'variable,' 'subroutine,' 'scope,' 'interpreter,' 'compiler,' 'boolean expression,' 'array,' 'sort,' 'argument,' 'GUI,' and so forth.

Many readers, however, will have written some code at some time in some language, whether it was a shell script, a complicated Excel macro, or a massive FORTRAN card deck back in the Middle Ages. These readers can skip the first chapter and get right to work. For the rest of the book, a basic understanding of the concepts and terms in the first chapter will be assumed.

For all readers, I assume that you know how to load software from a CDROM or from a web site onto your target machine, and that you know what an operating system is. You should have a text editor with which you can create plain text files, and you should understand what a command line is and how to type commands on a command line.

I assume that you have not programmed in Tcl/Tk before, or that you never got past "hello world" when you tried it. I assume that you want to know not only the bare syntax of a new language, but what particular strengths the language has and what approaches to a problem are best suited to it. I assume that you have never designed a GUI before, or that you have designed one only with point-drag-n-click tools, without understanding the underlying code. I assume that you want to know more about GUI design and the philosophy behind successful GUIs. I assume that you may never have written a complete small application before (i.e. more than 1000 lines of code) and that you may not be familiar with code management tools, good documentation practise, or the maintenance of moderate to large bodies of source.

What software / hardware capabilities must they have?
I work exclusively in the Linux/Unix world, so we will need some help from a Windoze Tcl programmer to discover what will and won't work for Wi/NT users. Ideally the reader should have a Solaris, Linux, or other mainstream Unix workstation to which tcl/tk has been stably ported; they should have a working CDROM drive and a decent colour screen, and a simple text editor. The not-quite-ideal reader would have a Windows box with similar hardware. The Mac user is likely to be something of a poor relation, since Tcl/Tk support for the Mac exists but is not a high priority for Scriptics.

How would you classify them? Power users? Programmers? Hobbyists? Describes who your audience is and what assumptions you are making about them.
Gretchen instructed me to direct the book at "beginners", and the "by example" series concept doc confirms this. This series is described as being for the beginner who wants to learn some programming skills quickly and easily, with immediate results. Tcl/Tk is a good language for this type of learning. I would like if possible to keep two types of reader in mind: the reader who has written some kind of code before but is absolutely new to tcl/tk, and the reader who has never programmed before. Perhaps we can work out a typographical convention for notes to the absolute newbie, or alternatively for notes to the person with experience in some language like C. Perhaps something like this:

Throughout the book I assume that there are two classes of reader; the reader who has programmed in other languages before and is familiar with concepts from C or FORTRAN, and the reader for whom Tcl/Tk is their first venture into real programming. Comments directed to the experienced programmer who is new to Tcl will be provided as marginalia or footnotes, or otherwise extracted from the main flow of the text which is directed to the real beginner.

What will readers be able to accomplish after reading this book?
The reader should be able to design and write a Tcl/Tk GUI, or other tcl application, which uses the filesystem, manages data, queues asynchronous events, and accesses remote data stores like Web servers or RDBMS. The reader should be able to make a simple plot of some data using the BLT graph widget, and should have a good idea of what more complicated and useful things are possible along thes lines. The reader will not be qualified to write a 100K line commercial app in teamwork with several other programmers and compliance with ISO9000 standards, but he/she should be able to read and understand other people's tcl code -- unless it is intentionally obfuscated :-) -- and solve his/her own small-business-scale programming problems using tcl/tk.

Which books will this book compete against? How are they similar? How will they be different?
Here I am ignorant. I haven't surveyed every other tcl/tk book for beginners. Presumably Macmillan's management feels that the By Example concept is a good one and fills a niche not already filled in the tcl/tk literature. I agree the concept is good but I can't guarantee that no other tcl/tk book takes this approach.

What do you think is the estimated market size for the book?
Hard to say. Tcl/Tk is growing a bit, but it's not clear to me how many people are beginners and how many are just applying tcl for the first time to large visible applications.

List New Software / Features the Book Covers
???
Tcl/Tk is not new. It is new to public recognition, but the language has been around quite a while and its fundamental strengths have not changed -- though the feature set has grown a lot. By the time the book hits the shelves, any "new" features covered will no longer be new.

Unique, Value-Added Benefits that Reader will Receive
???
Sorry this is marketing jargon and I don't understand what it really means. The reader may end up with some nice little tools for personal use; or with a strategy for an existing programming or porting problem.


Rough Chapter Outline

Sorry, I am hopeless at estimating page counts. If you guesstimate 20-30 pages per chapter, there seem to be about 14 chapters in this rough outline, and that would come out to 300-350 pages more or less, exclusive of indices, appendices, etc.

The idea is to guide the reader through the creation of a series of simple, basic applications. No application will be ambitious in scale, but each one will teach a few basic concepts and be either useful in itself, or easily adaptable for the reader's use. Basic concepts of automation and event processing, as well as data retrieval and massaging, will be covered.


Author's concerns

I want to include some kind of disclaimer like

This is a book for beginners; hence a number of interesting Tcl/Tk topics are outside its scope. This is not a book about object-oriented programming technique. There are other books about OO programming in Tcl/Tk. This is not a book about benchmarking or benchmark design. Tcl internals will not be mentioned except in brief, oblique references. This book will not teach you how to write a Tcl extension, but it will discuss the utility of Tcl extensions and how to make use of them, and we will use a couple of the most popular ones. This is not a book about CGI programming, although some HTTP client code will be used.

Other concerns (some have already been discussed in email but I wish to keep them fresh)