Information Technology 307

ITEC 307: Programming Practicum

Prerequisite: ITEC 220 or permission of instructor

Credit Hours: (1)

Provides practical experience writing programs to solve non-trivial, self-contained problems.  The course includes lectures teaching and reviewing standard algorithms and data structures (e.g. searching a state space, and graph representations), discussion on how they might need to be adapted to a particular task at hand, and supervised lab time coding solutions.  Problems are similar to those on programming contests, although participating in such contests is not required for the class (nor vice versa).
This course may be taken more than once for credit. This course may not be used to satisfy a major requirement, including technical and B.S. electives.  This class cannot contribute more than one hour of credit towards a minor within the Information Technology department.  A student can repeat ITEC 307 but cannot receive more than 4 credit hours.


Detailed Description of Content of Course

This course will provide skills for, and practice in, solving programming programs similar to those used in programming competitions.  The course will include topics such as:

1. Data structures: practical use of container classes (w/ generics), graph representations, and designing data representations for sample contest problems.
2. Demonstrate and perhaps implement algorithms dealing with
    a. graphs and searching (shortest paths; applications of depth- and breadth-first searching; using ad hoc pruning vs. brute force; topological sort)
    b. generating permutations
    c. numeric computing
    d. 2-D geometry
    e. simple parsing, and recursive-descent parsing
3. Dealing with issues such as floating-point arithmetic error, memory efficiency and time efficiency, and I/O libraries.
4. Team programming tactics for a contest environment, including editing and debugging tactics.
5. Programming tips (e.g. wrapping array and map lookups in a helper function which is given a default result)
    
The exact topics and their order will vary from semester to semester, depending on the sample contest questions used, and particular interest expressed by students.  For students who have been exposed to these topics in other courses, this course will provide familiarity and/or mastery.


Detailed Description of Conduct of Course

Each weekly class meeting will involve discussion of a data structure or algorithm with respect to a particular problem, lab time spent implementing a solution (sometimes in teams, sometimes individually), and reviewing some actual implementations of previous weeks' problems.  Each class will be 2 hours long, including supervised lab time.


Goals and Objectives of the Course

At the completion of this course, students will be able to take natural-language descriptions of programming-contest problems, and

1.Identify relevant abstract data types (e.g. graphs, trees, dictionaries)
2.Use standard, relevant container classes (with generics)
3.Identify concrete steps to solve the problem
4.Identify whether the problem is amenable to brute-force search
5.Quickly implement working programs solving simple problems


Assessment Measures

Students will be assessed on the successful completion of practice programming problems, both individually and team-based.  Grading will also be based on attendance; for each class session missed, a student can instead solve an assigned problem from a previous programming contest.


Other Course Information

None.


Review and Approval

February 2, 2010        Initial course approval     Art Carter, Chair

Revised: June 1, 2012