Robert Oschler of Android Technologies, Inc. told me recently he rereads the manuals every month. I said “should I infer that you are rereading all manuals from scratch, because sometimes I slip in revised data and you want to know it all now?” I thought others might find his reply instructive on how to learn/think about CS, so I asked his permission to quote him here. He had written:
“Bigger issue. Pardon the cliche but I have found learning ChatScript to be like peeling an onion. I grimace when I remember all the recurring and simplistic questions I asked you at first, especially those that I now answer by interacting closely with :prepare reports. Here’s been my trajectory, badly paraphrased:
1) Learned the simplest pattern matching tokens and used CS in a very basic stimulus response manner. Fact system completely ignored. Word/user input marking a complete mystery. Control script was a magical entity like a unicorn that I dare not touch and was somehow completely different from other scripts ( I know it’s not now and it’s hilarious how many times you told may that before I understood it.)
2) Learned basic usage of the fact system, but any advanced usage beyond using it as a really simple “flat” database was a mystery. Started doing basic output macros, but nothing beyond that.
3) Started understanding some of the more advanced pattern matching elements like range restricted wildcards, optional and alternate elements, etc. ChatScript nuances like word compositing, etc. and internal string handling details were still a mystery.
4) (first jump to intermediate level) Deeper understanding of outputmacros and how they can be embedded in rule patterns. Also, started getting the hang of editing the control script. Early trace efforts through the C++ Match() function and watching how it parsed CS rules on the fly helped crystallize the truth that the control script is indeed just another script. Finally understood in greater depth what the $cs_token flags do and how files like substitutes.txt, etc. come into play during pre-processing.
5) (next phase of intermediate level) Finally “grokked” the fact system and it’s relationship through the “member” verb to concepts. Really started using it to greatly simplify my ChatScript code through the creation of fact tables. When I first saw the fact system I thought it was a simplistic database that was hard for me to work with. Completely changed my opinion at this point to view it as a tremendously flexible and versatile fast storage and retrieval system.
5a) Really started using more of the advanced input matching functions in pattern rules and IF statements, especially the “?” membership operator which is now my favorite operator.
6) (third, and most recent phase of intermediate level) Much of this came from working both on the C++ code and tracing through it and how that affected my ChatScript coding knowing those internals. Developing a grasp for how dictionary words are marked internally and used (as in IntersectWords, etc.) and how text is ground down to WORDP elements helped me greatly with structuring and debugging my ChatScript code. This jump in understanding coincides with my deeper understanding of the :prepare report tagging and that has vastly increased my ability to create terse code that has a lot more flexibility (understatement) than what I used to create with CS.
This is where I am now. As a final anecdote, the word marking system is finally becoming clearer to me. I am still not using it yet, but for the first time I get what the functions do and am starting to imagine possible uses of it. Again, traversing the CS C++ code in the Match() function and digging deeper into the CS parser has helped me a lot here.
I’m sure I’m leaving a lot out. But it is Sunday (my philosophical day) and I thought these CS journey notes might interest you. So to tie up the onion analogy, I keep re-reading the docs because each time a new layer of CS features that were previously opaque become transparent to me and I think about how I can do various tasks faster and better now, using previously unused features.”
He added “It is precisely this intricacy and nuance that CS has that makes it such a powerful tool for NLP processing.”