** Summary ** Some of those [Learning Tcl%|%learning] to program in [Tcl] are also new to programming in general. This page approaches Tcl in that light. This page is just getting started so feel free to pitch in! ** Description ** There are, of course many resources out there in the world, that teach beginners the art of computer programming. One of the more well-known is ''[BOOK Structure and Interpretation of Computer Programs%|%The Structure and Interpretation of Computer Programs]'', but it uses [LISP] rather than Tcl. Tcl is a fantastic first language for someone interested in getting into computer programming, and this page teaches Tcl obliquely by teaching the general art of programming, using Tcl as a resource to illustrate the concepts. ** Values and side effects ** Some commands return useful values, some have side effects, and some do both. The value of `[[[puts]]` is invariant. It always returns the empty string, so it's never useful: ====== set a [puts hello] ====== Therefore, `[[[puts]]` has a side effect, but no useful value. `[[[set]]` has a side effect. It creates a new variable and assigns a value to it. `[[[set]]` also returns the value that it assigned to the variable, which can be useful sometimes. To set two variables to the same value, one could write: ====== set b [set a hello] ====== Therefore, `[[[set]]` has a side effect and also has a useful value. `[[[string length]]` is an example of a command that doesn't have any side effects but does have a useful value. It changes nothing in the world of a Tcl script. It doesn't create or delete any commands or variables, and it doesn't write any data to any channels. However, it returns a value that tells us something we might want to know: ====== string length hello ======