Continuing Revision of Discrete Mathematics Courses with Attention to Computer Science Curricula 2013

This posting continues my last two:

(Gosh, this sequence of musings is just like a … blog! ;-)

Specifically, I want to present how revision of our first Discrete Mathematics course is proceeding here at GVSU.

For starters, in the first lecture I greet students saying “Bonjour! Bonjour!”, and then I actually start lecturing in French for the first minute or so, and then I shift into English, saying: “…<French words> gradually here you’ll gain familiarity with all this notation, terminology, and operations, so whenever you may need to use them in later courses and work, you’ll be comfortable and handy with them — again, from having learned this language.”  And I really do have the material I display for that first lecture written in both languages, English and French. As I hinted in my earlier posting regarding Math, I started the first lecture this way to indicate to students the perspective I’m developing/promoting: that for CS, the mathematical material in this course can serve as basic language which the students can then recall and use throughout the CS curriculum, e.g. set notation and quantifiers such as ‘exists’ in a course on databases, and binary and hexadecimal numbers in a course on computer organization and architecture.

Then, beyond starting my first lecture that way, the list of topics I’m settling on in this course is as follows (note that some of these topics require less than a week):

  1. Introduction / L’Introduction
  2. Different Language(s) Used in Computer Science for Representing Numbers: Binary, Hexadecimal, and Octal
  3. Introduction to Python and Its Facilities for Discrete Mathematics
  4. Some Other Data Representation in Computers: Characters (Application: Cryptography)
  5. Basics of Arithmetic in Computers Using Binary Numbers: Addition and Multiplication
  6. Low-level Computer Processing Using Binary: Bitwise Operations
  7. Further Representation and Processing of Numbers in Binary: Negative Integers, Subtraction, and “Decimal”s (i.e. Fixed-Point Fractions)
  8. Language for Handling Truth Values in Computer Hardware: Boolean Algebra
  9. Obtaining Simple Boolean-Algebra Expressions Using Karnaugh Maps
  10. Classic Propositional Logic
  11. Logical Statements Regarding Variables: Predicates and Quantifiers
  12. Strategies for Constructing Proofs to Confirm Claims
  13. Some Software Which Facilitates Constructing Proofs: ProofBuilder
  14. Notation and Fundamental Operations for Collections of Data: Set Language
  15. Tuples and Relations (Application: Databases)
  16. Assaying Amounts/Extents: Counting
  17. The Most Powerful Way to Prove Claims for All the Values 0,1,2,3,… : Induction
  18. Comparing Functions to Assess Performance of Computing Systems: O(), Θ(), etc.

As some things in that list indicate, I connect this mathematical material to the rest of Computer Science. But I must admit that this list of topics is a work in progress: the sequence of topics I used this past semester was actually somewhat different from that; so to be honest I’m hoping to settle things this Fall.

One element there I want to highlight is Python. I hadn’t mentioned it in my previous postings. I knew that I wanted to include some actual computing in this course, but I hadn’t settled on exactly what to do. An issue is that — like tendencies Pete Henderson criticizes in his last “Math CountS” column — my institution starts the Computer Science major with a very low threshold for problem solving and mathematics: only pre-college (remedial) algebra as the prerequisite for our initial “Computer Science 1″ course!!  And speaking of that, oddly this Discrete Mathematics course I’m discussing here doesn’t even have our initial “Computer Science I” course, which uses Java, as a prerequisite! So if I want to use computing in this Discrete Mathematics course, I actually can’t expect students to possess any background other than college admission.

Last Fall, I tried having students use Haskell. It’s cool; it would add a functional, curried language to the repertoire of languages that they experience in college; and it has list comprehension and lazy evaluation (so for example it can represent ℕ). But while Haskell could be used as a discrete-structures expression evaluator like general mathematical packages such as Maple and Mathematics, I felt that it was a bit of a stretch for me to try to teach actual programming in Haskell to students with such unsure computing/mathematical backgrounds/maturity.

And then one day I tried Python — like Perl, Python is already available on systems that I use (Mac & Linux). And I fell in love with it!!! 😍  Python can be used interactively as just an expression evaluator, so students can start using it without knowing programming already! And it straightforwardly handles expressions I want to use such as exponents and binary and translation between characters and numbers! And it’s not necessary to have overhead such as “... public static void main(String[] args) { ...“! And it actually uses braces “{ }” for sets! And it features set comprehension and unlimited iterators (so it can represent ℕ: basically N = itertools.count()) and tuples! And its syntax is simple and clear! And the students here can do coding in it such as Caesar encryption and decryption after just a week and a half of exposure to the language! And of course it has great capabilities beyond Discrete Mathematics — how could anyone not love a language that has Turtle programming built into it?!? ☺

    
    from turtle import *
    color('red', 'yellow')
    begin_fill()
    while True:
        forward(200)
        left(170)
        if abs(pos()) < 1:
            break
    end_fill()
    done()

    # The Python Standard Library, Section 24.1: "turtle — Turtle graphics"

There’s more to say about this course; but I think it’ll ‘gel’ more this Fall. And there are associated things I want to discuss, including Henry Walker’s recent Inroads article, “Why a required course on theory?”  So I’ll pause for now, with the concluding question: What do you think about using Python in a Discrete Mathematics course?

Regards,
Hugh

P.S. Regarding the punctuation in the paragraph above about features of Python, yes, I admit that I’ve read classic newspaper cartoons / comic books! ;-)

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>