Home Page | The Book | The Courses |

While these courses borrow extensively from the book they are not taught directly from it. In the courses some topics from the book are reordered, changed, or eliminated, and some topics not in the book added. Participants in each course will receive notes designed specifically for that course. Participants in the first course will also receive a copy of

The courses are highly interactive, involve in class practice, and provide opportunity for individualized feedback. Courses can be customized to address the needs of specific organizations and individuals.

For more information contact me at rel@logicforsoftwaredevelopment.com.

Prerequisites: No knowledge of logic is presumed. Some knowledge of software development is presumed.

Emphasizes using logic to communicate effectively. Covers some purely logical skills such as being able to find and represent the logical forms of statements and conditions. As the required logical skills are covered, applications to software development are discussed, such as being able to:

- Express and clarify problem specifications, data structure definitions, program designs, and documentation,
- Find and eliminate vagueness and ambiguity,
- Translate algorithms expressed in English into pseudocode,
- Use logical English to describe sets, bags, sequences, relations, functions, and other data structures,
- Use truth functions to trace program execution forward and backward, and
- Understand literature that uses logical English and mathematical notation.

Prerequisites: Some knowledge of software development and L4SD 1 or equivalent background is presumed.

Emphasizes tests for logical truth, equivalence, implication, and validity. As the required logical skills are covered, applications to software development are discussed, such as being able to:

- Use logical equivalence to simplify statements, conditions, and program instructions,
- Recognize and reduce vagueness, ambiguity, logical inconsistency, incompleteness, and redundancy in problem specifications and program designs,
- Recognize arguments and distinguish them from definitions, explanations, and other uses of language, and
- Apply tests of validity and soundness to reasoning about software development.

Prerequisites: Some knowledge of software development and L4SD 2 or equivalent background is presumed.

Emphasizes using rules of inference and proof in aid of better reasoning. As the required logical skills are covered, applications to software development are discussed, such as being able to:

- Construct arguments using rules of inference and facts from specific subjects such as mathematics and computer science,
- Explain what it means for a problem to be algorithmically unsolvable,
- Describe the halting problem and explain why it is algorithmically unsolvable
- Describe the program equivalence problem and the verification problem and explain what their algorithmic unsolvability means for software developers,
- Describe the limits of testing as a verification method,
- Give informal proofs of program correctness expressed in English prose,
- Use Floyyd's method to prove the correctness of simple programs, and
- Use rules of inference about assignment and control structures to prove the correctness of simple programs.