TO:The Board of Trustees of Hanover College

FROM:Barbara Wahl

DATE:August 10, 2006

SUBJECT:Proposal for Sabbatical Leave

1. A short intellectual history of the applicant, containing a convincing demonstration of his or her preparation for the project to be undertaken during the leave.

I have a B.S. from the University of Michigan (1982) in mathematics and computer science, a M.S. from the University of Louisville (2003) in computer science, and a Ph.D. from the University of Texas (1993) in mathematics. I have taught mathematics at HanoverCollege since joining the faculty in 1993.

During the 2001-02 academic year I was on leave from Hanover College to attend classes at the University of Louisville toward my degree in computer science;since then I have taught both mathematics and computer science courses. Because this proposal concerns computer science especially, I’ve listed belowthe computer science courses I have taught (or will soon teach). I have also included my curriculum vitae as Appendix 1.

  • CS 223, Data Structures and Algorithm Analysis (Fall 2002, Fall 2006)
  • CS 335, Theory of Computation (Winter 2003, Winter 2006)
  • CS 348, Artificial Intelligence (Winter 2004)

2. A description of the purpose of the leave.

Theory of computation is a standard course in the computer science curriculum; it introduces students to the use of formal abstract models of computation for understanding the fundamental capabilities and limitations of computers. Many students struggle with formal definitions of computational models such as the deterministic finite automaton (DFA) [taken from Sipser, M. Introduction to the Theory of Computation, Second Edition. Thomson, 2006]:

A deterministic finite automaton (DFA) is a 5-tuple (Q, Σ, δ, q0, F), where

  1. Q is a finite set called the states,
  2. Σ is a finite set called the alphabet,
  3. is the transition function,
  4. q0is the start state, and
  5. is the set of accept states.

To a mathematician, such an abstract description is lovely in its clarity and precision, and gives us a useful notation for expressing our thoughts clearly. The typical computer science student, however, does not have a mathematician’s appreciation for or facility with abstraction.

When I first taught the theory of computation course, in Winter 2003, it was not required of all computer science majors at Hanover. Those students planning to attend graduate school were encouraged to take it as a major elective, and only the strongest students even attempted the course. Those who found it too difficult could withdraw and take a different elective instead.

More recently, we have decided to require the course for all computer science majors at Hanover. Now it is critical that even our weakest students come to grips with the required level of abstraction for this course. To this end, I decided for my CS 335J course in Winter 2006 to include a programming component. My idea was that by implementing models of computation in a high-level language such as C++ or Java, the studentswould come to view them as concrete rather than abstract. Unfortunately, even after quite a bit of searching about on the Internet, I found no ready resources for devising programming projects in theory of computation. I did create a few of my own laboratory assignments as the term progressed, but due to the press of many obligations I was unable to assignas many labs as would be optimal. (See Appendix 2 for a sample lab assignment from CS 335J.) I was very pleased with the effectiveness of the programming assignments I used, but I wished for quite a few more.

My proposed sabbatical project is to draft a laboratory manual to accompany CS 335: Theory of Computation. It will contain a broad range of programming assignments, each designed to be begun by the class as a whole during a weekly laboratory period and completed individually by students outside of class. The assignments will be in the style exemplified in Appendix 2, where I outline a suggested approach to the problem and provide extensive comments, leaving most of the actual code to be supplied by the students.

I plan to use the resulting lab manual with my next incarnation of CS 335, probably during Winter 2008. After some fine-tuning based on that experience, I will find a way to make my lab assignments available to other professors of computer science, either as a published supplement to a textbookor as a self-published document on the Internet.

In summary, this proposed sabbatical leave will benefit me by giving me time to prepare a much-needed course supplement for CS 335: Theory of Computation. Because I have training in both mathematics and computer science, it naturally falls to me to teach the course as often as it’s needed, about every two years. Now that the course is required of all our computer science majors, it is essential to find a way to help the students understand these challenging concepts. Of course, the project will benefit the College by improving the substance of CS 335, and I believe it will benefit the discipline of computer science more broadly when I make my materials available to others.
3. The term or terms of the academic year for which the leave is requested. This item should include the reasons for the timing of the leave.

Dean Graham has encouraged me to apply for sabbatical leave a year earlier than the usual schedule would permit. The plan is for Dr. Jagels and me to have our leaves in the same year, since it is much easier to hire a qualified mathematician for a full-year replacement than for a
1-semester replacement. Dr. Jagels wants to have his sabbatical during Winter-Spring 2008, so I am applying for a Fall 2007 sabbatical leave.

Beyond the convenience of Dr. Jagels and I having our sabbaticals during the same academic year, there is a second and more important reason for my early application for a sabbatical leave. During Winter 2006 I was denied promotion to full professor. Dean Graham’s subsequent letter of June 27, 2006 (to President Nichols) states that I am “a very dedicated and effective professor” and that I have “performed extraordinary service to the College.” However, Dean Graham and the Faculty Evaluation Committee conclude that I need to show “development of and progress in a scholarly program” before re-applying for promotion. When I met with Dean Graham to discuss the findings of the FEC, he offered me this chance at an earlier-than-usual sabbatical to help me in my efforts to develop a scholarly program.

4. The site or sites of residence during the leave period. This item should include the rationale for the site or sites chosen.

Due to family obligations,I do not plan to relocate during the sabbatical period. This will not be a problem since the resources I need to complete my project are available here on campus. I will abstain from typical faculty activities such as attending meetings, advising students, serving on committees, and so on, in order to reserve time and energy for my sabbatical project.

5. An abstract (a short paragraph) to be shared with the Board of Trustees.

My proposed sabbatical project is to draft a laboratory manual to accompany CS 335: Theory of Computation. It will contain a broad range of programming assignments which require the students to implement models of computation such as DFAs in a high-level programming language. For each assignment I will outline a suggested approach to the problem and provide extensive comments, leaving much of the actual code to be supplied by the students. This proposed sabbatical leave will benefit me by giving me time to prepare a needed course supplement. Now that CS 335: Theory of Computation is required of all our computer science majors, it is essential to help the students understand these challenging concepts.

Appendix 1: Curriculum Vitae

Barbara J. Wahl

1901 Wells Drive

Madison, IN47250

812-273-5717

EDUCATION

The University of Louisville, Louisville, KY

M.S. in Computer Science, November 2003

Thesis: A Software Tool for Analysis of Risk Tradeoffs in Computer Security

Advisor: James H. Graham

The University of Texas at Austin – GraduateSchool, Austin, TX

Ph.D. in Mathematics with Concentration in Functional Analysis, August 1993

Thesis: Unconditional Averages in the Banach Spaces C(α)

Advisor: Edward Odell

The University of Texas at Austin – College of Natural Sciences, Austin, TX

Attended classes as a non-degree student, 1984-86

The University of Michigan, Ann Arbor, MI

B.S. in Mathematics and Computer Science, August 1982

Eastern MichiganUniversity, Ypsilanti, MI

Studied Music Performance (flute), 1979

PROFESSIONAL EXPERIENCE

Hanover College, Hanover, IN1993 – present

Associate Professor of Mathematics and Computer Science

Courses Taught Recently

  • 2005-06: Applied Statistics (MAT 217, 6 sections); Theory of Computation
    (CS 335); Directed Study (Real Analysis)
  • 2004-05: Applied Statistics (MAT 217, 2 sections); Calculus with Review (MAT 111-112, 3 sections); Calculus I (MAT 121); Problem Solving with Elementary Mathematics (MAT 212, 2 sections); Directed Study (Numerical Analysis)
  • 2003-04: Applied Statistics (ID 147, MAT 217); Artificial Intelligence (CS 348); Calculus with Review (MAT 111-112, 2 sections); Discrete Mathematics
    (MAT 343)
  • 2002-03: Calculus with Review (MAT 111-112, 2 sections); Data Structures and Algorithm Analysis (CS 223); Discrete Mathematics (MAT 343); Logic, Sets, and Relations (MAT 220, 2 sections); Theory of Computation (CS 335)

Major Service Contributions

  • Chair of Math/CS Dept., 2003 – present
  • Chair of Mathematics Search Committees, 2004-05 and 2005-06
  • Chair of Faculty Steering Committee, Sept. 2003 – Dec. 2004
  • Chair of Merit Scholarship Committee, 1995-97
  • Other Committee Service: Faculty Evaluation, Faculty-Staff Salaries, Faculty Steering, Vision Taskforce, Merit Scholarship, Physics Search, Political Science Search, Dean of Admission Search

SonomaStateUniversity, Rohnert Park, CA1991-92

Adjunct Mathematics Instructor

  • Taught two sections of Calculus III
  • Used Mathematica and student research projects in my courses

MATH/CS DEPARTMENT CHAIR RESPONSIBILITIES, June 2003 –June 2006

  • Hold regular department meetings
  • Document the need for increased math. staffing (Fall 2004)
  • Chair Math. Search Committees
  • Negotiate with administration regarding departmental offices and facilities
  • Plan departmental course offerings and negotiate with dept. staff and Registrar
  • Coordinate math. comprehensive exams
  • Coordinate math. placement exams
  • Coordinate and administer Putnam Mathematical Competition exam
  • Coordinate (and often draft) curricular change proposals as needed
  • Coordinate assessment activities
  • Prepare departmental budget requests
  • Approve expenditure of departmental funds and file for reimbursements for faculty out-of-pocket expenses
  • Assist all students who need help completing the form Pre-Approval for Transfer Credit for math. courses (help them find appropriate courses at other institutions)
  • Coordinate departmental volunteers for college-wide activities
  • Coordinate departmental nominations for Honors Day awards
  • Coordinate departmental gatherings (fall picnic, Math/CS night at the Shoebox, comprehensive exam dinner, commencement reception)
  • Handle student complaints for all mathematics and CS courses
  • Maintain interdepartmental communication with other academic departments, Admission Office, Registrar, CareerCenter, Dean of Academic Affairs, Office of Student Life

PUBLICATIONS

  • Gasparis, I., E. Odell, and B. Wahl, Weakly Null Sequences in the Banach Space C(K), Proceedings of the V Conference on Banach Spaces, 13-17 September 2004, Cáceres (Spain), London Math. Soc. Lecture Notes Ser., CambridgeUniversity Press, Cambridge. Jesús M. F. Castillo and William B. Johnson (eds.)

RECENT CONFERENCES ATTENDED

  • Consortium for Computing Sciences in Colleges, Midwest Meeting 2005, Millikin University, Decatur, IL, Sept. 2005
  • Mathematical Association of America, MathFest 2004, Providence, RI, Aug. 2004
  • Consortium for Computing Sciences in Colleges, Midwest Meeting 2003, Denison University, Granville, OH, Oct. 2003

OUTREACH EFFORTS TO PUBLIC SCHOOLS

  • Scottsburg H.S., Scottsburg, IN. Nov. 2005. Met with the mathematics faculty to share my expertise about how writing is used in mathematics at the college level. Showed them examples of my assignments and samples of student work. Provided them with a bibliography of resources for learning more about incorporating writing in the high school math. curriculum.

INVOLVEMENT WITH THE COLLEGE COMMUNITY

  • Adopted an international student as part of the “Friendship Families” program at the Haq Center, 2005-06
  • Regularly attend HaqCenter events
  • Meet with parents at the Parents’ Day reception each November
  • Interview Merit Scholarship candidates each March
  • Participate in the HC Baccalaureate and Commencement Choir each May

TECHNICAL EXPERTISE

  • TI graphing calculators
  • SPSS and Minitab statistical software
  • Maple computer algebra software
  • Microsoft Office Suite (Word, Excel, PowerPoint)
  • Programming in C++, Java, Prolog

PROFESSIONAL MEMBERSHIPS

  • Mathematical Association of America

Appendix 2: SampleLab Assignment Created for CS 335J, Winter 2006

CS 335J

1-31-06

Lab 1: Implementing a DFA class

  1. Start Microsoft Visual C++.
  2. Create a new project and give it a useful name like “DFA1 myname” (use your last name).
  3. Make it a Win32 Console Application. In the “Win32 Console Application” dialog, choose to create a “Hello, World” application.
  4. Execute your “Hello, World” application successfully before continuing.
  5. Add a new C/C++ Header File to your project, named DFA.h. See the following page for the DFA interface code (initial version). Enter the code in DFA.h and save.
  6. Add a new C++ Source File to your project, named DFA.cpp. See the following page for the DFA implementation code (outline). Enter the code in DFA.cpp and save.
  7. Finish coding the DFA constructor. Save.
  8. Back in Main.cpp, add “#include “DFA.h” toward the top of the file.
  9. Edit Main.cpp so it no longer prints “Hello, World.” Add the necessary code to call the DFA constructor and create a dfa called “dfa1”. Save.
  10. Execute your project and fix syntax errors as needed so the program compiles error-free.
  11. You are finished with lab 1 when the constructor is working correctly.

WHAT TO TURN IN: Paper listings of Main.cpp, DFA.h, DFA.cpp. Disk with executable file so I can test it out.

DUE by Monday 2/6/06.

// DFA.h

// 1-31-06

// Interface for the DFA (deterministic finite automaton) class.

//

// The input alphabet of a DFA is assumed to be {0,1}, the number of
// states is limited to 20, and the length of a string to be tested on
// the DFA is limited to 100 characters. These values can be changed
// before recompiling if the user needs more states or longer strings.

//

// A DFA is represented internally as a 2D array of integers.

// For any integer (n) from 0 through 19, array position [n][0]
// indicates where to transition (from state n) on "0", array position
// [n][1] indicates where to transition (from state n) on "1", and
// array position [n][2] is a bit to indicate whether or not state n is
// final.

//

// State 0 is the starting state.

//

// In addition to the array for storing information about states and

// transitions, a DFA has a counter to indicate the total number of

// states for that machine.

//

#ifndef DFA // prevents header file from being included more than once

#define DFA

class DFA

{

public:

// Public Methods

DFA();// default constructor queries the user to

// create the desired DFA

int getNumStates();

int testString(char s[100]);

// Change "100" to desired max string length before compiling

// Input: a string of up to 100 chars (string of 0s and 1s,

// or 'e' for the epsilon string.

// Output: return 0 if the DFA rejects the string, 1 if it

// accepts.

// Note: Print a useful error message to the screen if the input

// string is invalid, then return 0.

private:

// Private Attributes

int stateArray[20][3];

// array for storing info on states and transitions; change "20"

// to desired max number of states before compiling

int numStates;

// counter to indicate total number of states for the machine

};

#endif

// DFA.cpp

// 1-31-06

// Implementation of the DFA class

#include "DFA.h"

#include <iostream.h>

#include <stdin.h>

using std::cin;

using std::cout;

using std::endl;

DFA::DFA()

// default constructor queries the user and constructs the desired DFA object

{

int n;

numStates=0;

// Determine number of states for the DFA

cout < .. ;// ask how many states user desires for the DFA

cin > n;// read response and store in n

if ...// if n is a valid number of states, initialize

// numStates = n.

else ...// otherwise chide the user and ask again

// Fill in the array which defines the states and transitions

for(int i=0; i<numStates; i++)// i is the state number

{

for(int j=0; j<2; j++)// j is the input being read,

// 0 or 1

{

// Ask user where to transition to (from state i) on
// reading j

// Record answer in stateArray[i][j]

}

// Ask user whether or not state i is final.

// Record the proper bit in stateArray[i][2].

} // ends outer for loop

for(i=0; i<numStates; i++)

{

// print the array to the screen so we can know

// if the constructor is working or not

}

}

int DFA::getNumStates()

{

return numStates;

}

int DFA::testString(char s[100])

{

return 0;// stub

}