Lower-level college math courses usually avoid using formalism, in both definitions and proofs. Later, when students have mastered definitions and proofs written largely in English, they may be shown how informal reasoning could be formalized, but the impression is left that such formalization would not be worth the effort. The design of proofs is also not taught. Students see proofs and may be asked to develop a few themselves, but there is little or no discussion of principles or strategies for designing proofs. Few are happy with the results of these courses. Generally, students reasoning abilities are poor, even after several math courses. Many students still fear math and notation, and the development of proofs remains a mystery to most. In short, students are not being equipped with the tools needed to employ mathematics in solving new problems. We believe that this state of affairs can be improved. This article describes our approach. Formal logic, Equational reasoning, Discrete mathematics, Computer science education.