'''NOTE: If you see this, you're too close! Or the page is being edited by someone who types slowly. Give hime a few minutes and come back''' I'd like to take on the task of sorting through as many good Tcl Tutorials as we can find, and building clear way for someone who is not currently a Tcl'r to join us and find the information geared to their level of programming skill. It should be presented in a communicative, nurturing atmosphere that brings both the joy of Tcl and the fun of the community. '''5 Dec 01''' Below I've pulled some questions and responses together. My thanks to the folks who answered! The things that seem pertinent are: ---- ''Here is the survey part'' To that end I have some questions for the existing Tcl community. Please '''e-mail your responses to me directly''' ('' leam at reuel dot net ''), I'll collate them and bring back whatever trends and thoughts seem to surface. Also, if you have a question you feel pertinent, please add it! Please note that references to "Tcl" include the core language and its extensions. '''What drew you to Tcl? ''' Curiosity.. used to do Fortran and C before. But after some Tk demo programs I felt I had to look deeper into this. ... The power of an interpreted GUI, the Tk canvas in its extendability, the simplicity of the language, the joy of reading the Tcl/Tk source code. ... I've been a computer language geek for years. I love to learn about different programming languages. But what really drew me to Tcl was the prospect of writing cross-platform applications -particularly GUI apps. I use Macs at home, and the idea that I might be able to write apps on Unix that i might also use at home on the Mac was/is appealing. ... I first learned about Tcl when I saw John Ousterhout's paper announcing it at the 1990 Winter USENIX Conference. ftp://tcl.activestate.com/pub/tcl/doc/tclUsenix90.ps At the time, I didn't really understand the implications of an embeddable shell, and the proceedings gathered dust on my shelf. Later, in the Fall of 1991, I needed to do some quick-n-dirty GUI work, and a colleague lent me a copy of John's paper on Tk from the 1991 Winter USENIX conference: ftp://tcl.activestate.com/pub/tcl/doc/tkUsenix91.ps Since all I needed at the time was some rapid prototyping of some simple GUIs in a throwaway app, Tk looked like a good candidate, and I installed Tk 1.4 and whipped up my GUIs. One thing led to another, and within a few weeks I'd done quite an elaborate set of shell scripts and graphical prompts orchestrating a group of engineering application programs -- all, so far, without writing a line of C. John invited me to participate in a panel discussion of Tk users at the 1992 X Technical Conference, entirely without realizing that I'd been a user for less than two months! With use of Tk as a graphical shell under my belt, I tried my hand at a little bit of application embedding, making what actually turned out to be an interesting little system of embedded application content, with hyperlinks joining Xess spreadsheets, FrameMaker documents, Tk GUIs and legacy engineering codes. The idea was to create "electronic design notebooks" to hold all the computer artifacts of an engineering design. Mind you, this was before the Web revolution! I submitted a position paper on this work at the first Tcl/Tk Workshop: http://titania.crd.ge.com/papers/gecrd/mtl/mdip/tcl93.ps The program committee didn't see much in the work, but after the conference, it became something of an epiphany for John; it catalyzed his thinkingso that he started seeing Tcl as not only a shell but also an integration platform: http://tcl.activestate.com//doc/integration.html (By the way, he credits me in the "Acknowledgments" section of his Tcl/Tk book as "showing that Tcl can be used to interface to almost any conceivable application.) At this point, I still saw Tcl as primarily a prototyping vehicle. It wasn't until several years along the road that I realized that my prototypes were achieving production quality, and now I have some that run 24/7 in a mission critical environment: http://www.usenix.org/publications/library/proceedings/tcl98/angelovich.html '''What keeps you with Tcl?''' It's not the ideal language, but the best I've ever seen, regarding ease of use, user empowerment, rapidity of turnaround. And: the community, a small but powerful worldwide group, good for discussions and new ideas. I checked comp.lang.c and .python for a while, but just the tone wasn't exactly the same there. And the Wiki, allows me to make all my Tcl fun projects public and open for discussion... ... See above, plus the friendly community. ... Time invested. I've invested a lot of personal time, energy, and ego into the community. At times, I feel like giving up and moving on. But then, I look at other languages of similar ilk, realize how bad they are, and see that Tcl isn't as bad as I thought... ... Tcl remains a superb integration platform. It can connect easily with code in other languages, in particular both C/C++ and Java. It also hooks up readily with components in the environment ranging from shell scripts all the way to COM, CORBA, and ODBC. Its notifier is also readily extensible, allowing scripts to respond to a wide variety of external events. The language is also simple in concept: its typeless "everything is a string" architecture is deceptively powerful. Tcl also has a vibrant and friendly community. The amount of free support that I get from the Tcl'ers never ceases to amaze me. '''Describe your current level of skill and amount of experience, both with Tcl and other programming languages.''' Tcl - pretty experienced, but still learning new tricks. C - still able to write it, but do it only if I have to, so slowly drifting out of practice C++ - had a training course where I really got fluent, but no application on the job; when I look at C++ books, tutorials or so, I frequently think "Why does it have to be so complicated? just look at Tcl ;-)" ... Programming: 25 years Tcl/Tk: 5 years ... I've been programming since 1973 or so. I've programmed in BASIC, COBOL, FORTRAN, assembler on PDP 11 and IBM 360, PL/1, JCL, Unix shell, awk, C, Tcl, and piddled programming in Java, Perl, C++, ABC (predecessor to Python), Python, Scheme, and a number of other languages. My preferred programming language is Unix ksh shell. My second preferred language is awk. My third is probably C and fourth is Tcl... I'd consider myself an expert in ksh, intermediate at awk, expert at c, and slightly higher than a novice at Tcl. ... I can program at "guru level" in a number of languages including Tcl (I'm on the Tcl Core Team), C/C++, and Java. I have 25+ years of experience in the computer industry (ok, I started young 8^)) '''When you first started with Tcl, what did you think best about it? What made you think, "Oi, that's weird!"?''' One of the first points I liked were commonsense names like "string length". Tk of course, pipe servers with exec or open |..., list operations (I used to program LISP in a former job life, so felt quickly at home) - the power of canvas - the commonsensity of reading images in XBM format, so I could supply them from C servers... I liked Tcl since 7.4, and I started to love it from 8.1 when Unicode support was introduced, and I could do i18n *so* easily. Took me some time to get the feeling for braces, and misbehaving comments... I still hate to see things like "set x [expr {round($x)}]" ... Best: Only very few weird things Weird: Octal numbers, performance effects of shimmering ... I used Tcl a lot without programming in it initially. I used apps written by others a lot, or talked people into writing code for me. I learned Tcl academically (by reading several of the books). Then I gave up and actually took several classes in Tcl, itcl, etc. over the years. What I like best about Tcl is how simple it is. What I think is weird is that it makes some things so much harder than it seems like they should be - trying to write code that in shell would be almost nothing takes more effort in Tcl - try to write a tcl script that takes the output from several tcl applications and massages it seems to me to take more work than it does for me to do the same thing in ksh. ... What was best for me at the beginning was that simple things are simple. Tcl has less syntax even than the Unix shells, and Tk is wonderfully concise: the "hello world" program can be written as a single line of code: pack [button .hello -text {Hello, world!}] For someone accustomed to the bureaucracy of user interface systems like Motif or InterViews (and the modern MFC and Swing are no better!) this simplicity was a breath of fresh air. The "weirdness" primarily came from the implications of "everything is a string". For instance, the 'lindex', 'lappend', 'list', ... commands have a distinct Lisp flavor to them, and it took me a while to understand why I couldn't distinguish "lists" from "atoms". '''What resources did you use to learn Tcl? What resources have you used to learn other languages?''' Had a preprint (PS off the web) of Ousterhout and Welch books, later managed to get "real" hardcover copies (where I first heard of a thing called canvas ;-) ... Tcl/Tk: John-O's book, Man pages, Windows help file ... I started learning Tcl by signing up for a mailing list run by John Ousterhout. Then I worked with the group to get the usenet group created. I use postings there, web sites, tutorials made available on the net, a number of the books written, conference tutorials, and questions to specific people to learn more. ... I think that C was the last language I learned from a book. C++, Java, Tcl, Perl, Haskell, ... I've generally learned from reading the primary literature (conference papers, journal articles, standards documents) and examining the source code of reference implementations. This method, by the way, is very successful with Tcl; the source code is copiously commented and well-organized, and it's a pleasure to read. '''What things draw you to learn another programming language?''' Curiousity, frustration with the low percentage of community working to improve tcl, in the past the slow nature of getting changes into tcl (not so much a problem these days), lack of communication between pockets of community members, and the smaller library of reusable code. ... Generally, I learn another if either a customer wants me to use it (or has code in it that I need to interface with), or if someone tells me it's useful for a problem that I have. Those two criteria cover an awful lot of languages. '''What resources do you currently use to stay current with Tcl?''' comp.lang.tcl, Wiki, Tcl'ers chat; occasionally I drop in at ActiveState, but am mostly disappointed: the cookbook is not growing at a rate it should, and their treatment of Tcl compared to Perl and Python makes me remember Cinderella, the disregarded sister. ... comp.lang.tcl, ChangeLog ... comp.lang.tcl* usenet groups, misc mailing lists, and Tcler's Wiki. ... Beyond reading c.l.t, tcl-core, and the Wiki regularly and keeping my sandbox in sync with the CVS repository at SourceForge? 8^) Seriously, I'm in the thick of Tcl development -- one of the people that the community tries to stay current with. 8^)