Dear Updating Name,
Thank you very much for your kind advice, including your valuable experience.
I am probably much older than you and have no experience (other than a little Mathematica) with symbolic computation, etc. I have a lot of experience with FORTRAN programming and a little with assembler.
These older programs are written to execute in the order of the code statements, and the code looks spaghetti-complex because of the "go to" statements or jump statements, but the order of the operations is easy to understand, and debugging can be successful if done carefully, even if it takes time.
On the other hand, Mathematica's language is convenient for simple examples, but nasty pitfalls appear when I try to do anything even remotely complex. For example, is there an example of a function that needs to perform a symbolic computation in NMaximize[ ]? If numerical computation is inevitably assumed, shouldn't the argument be a number?
I am also still stumped by the difference between a list and a number: when I have multiple answers in a list to a function defined using Module[ ], NMaximize[ ] does not work without a message even when I use Part[ ] to extract one answer as a number.
Ever since I started using Mathematica, I have wondered about the initialization of Mathematica programs at the start of execution. I always put the line
Remove["Global`*"];
at the beginning of each program, which is a spell without understanding what ` and * mean.
In conclusion, Mathematica is very useful for computing simple problems such as those given as samples, but when users try to solve their own customized problems, they often end up in a swamp-like pit requiring unknown spells. Wolfram seems to have no intention at this time of removing such difficulties in its product specifications. I am like a pilot who is confused by the autopilot specifications of an airliner and crashes.