Theory in Programming Practice
Course Introduction

In theory, there is no difference between theory and practice. In practice, there is.
-- Yogi Berra

He who loves practice without theory is like the sailor who boards ship without a rudder and compass and never knows where he may cast.
-- Leonardo da Vinci

Who Am I?

Instructor: Mary Eberlein, Ph.D.

• Lecturer in CS department since 2000
• Undergrad: math major, cs minor
• Grad: M.S. in mathematics, University of Illinois; Ph.D. in computer science, University of Tennessee
• taught at Tennessee Tech for 1 year
• 2 1/2 years working for small software engineering firm: software development in C++, Java; improved algorithms used in company software; taught week-long software engineering classes to clients
• Husband Scott is a software engineer
• Two children, Nathan and Lily

Plan for Today

• Discuss course content and procedures
• What will we do in this course?
• Strengthen your programming and theoretical skills
• Analyze problems in several important areas of computing at an overview level
• Theoretical bounds: what is possible? Feasible vs. infeasible?
• Experimental data: what does it indicate about similar problems
• implementation: some basic implementation, so we have rudimentary understanding of wide range of factors that affect algorithm choice - clarity, modularity, stability, cost in programmer time, etc.
• Usually when we are trying to solve a complicated problem - like picking a compression algorithm for our company's new product that transmits digitized radio signals - there is "no free lunch". There is no one "best" choice for all situations and domains. Knowing the basics of both theory and practice allows us to analyze the problem effectively and choose a good algorithm. Too often, algorithms are chosen because they are familiar, or part of a familiar library.
• Pigeonhole Principle - One Application:
Any lossless compression algorithm that makes at least one input file smaller, will make some input file bigger. Or: For any lossless algorithm, if all files can compress to smaller sizes, there will be two files that compress to the same file(!).

Course Materials and Procedures

• Class website:
• www.cs.utexas.edu/~eberlein/cs337/cs337.html
• Most class information is on the website: programming projects, homeworks, syllabus, discussion section time and location, contact info for instructor and TAs
• class schedule
• on the website
• schedule of topics and reading assignments
• links to notes I use in class
• usually posted a day or two in advance
• not comprehensive - we will diverge from them in class
• Book: by Professor Jayadev Misra
• available online
• required - most reading assignments will come from the book
• Piazza: discussion board and grades. You are responsible for reading class announcements on the discussion board.

Class Time and Discussion Group

• Lecture with instructor MWF
• discussion of topics covered in online notes
• Q&A - I will ask you questions, and encourage you to ask questions of me as well
• no open laptops in class
• arrive on time and don't leave early
• minimize distractions to others: no texting, silence your cell phone
• Discussion section on Tuesdays or Thursdays
• smaller group meeting with TA
• Q&A on programming projects and homework assignments
• Quizzes common in discussion
• Homework collection
• Homework will be posted on the schedule page - complete before discussion section meetings
• Class Discussion Board and Communication
• Piazza
• Post questions about class, assignments, programming concepts here - anything of general interest
• I will post updates and class information on the discussion board and in the announcements section of the class webpage
• Emails to instructor and TAs: subject should begin with "cs 337:" and also include a brief description of your message
• Anything of general interest should be posted on discussion board, not emailed
• For questions about projects: first ask the TA responsible for that project
• Study groups: 4 to 7 students
• meet once a week
• one member of each group should email names of members and meeting time and location to his or her TA

Assignments and Practice Exercises

• Programming Projects
• posted on class webpage
• general guidelines on assignments page
• Projects done in pairs, using pair programming rules (on class webpage)
• Different partner for each project
• After each project, you will submit feedback about your partner's contributions to the project
• Programs that do not compile receive 0 points
• Must use linux account and submit projects via turnin
• slip days for projects - total of 3 for semester
• cannot be used on last project
• maximum of 2 slip days per project
• if slip day(s) used, both pair partners must use a slip day
• programming assignments graded by TA responsible for the project
• grades will be posted within two weeks of due date
• scores posted on blackboard and feedback file returned via turnin
• sharing solution code is cheating -> F in the class
• solution similarity monitored with plagiarism detection software
• Exercises and Homework
• prepare you for quizzes and exams
• homework is due at the beginning of discussion meeting, and will sometimes be collected and graded in lieu of an in-class quiz
• quiz grades posted on blackboard within one week of the day it was given
• Exams and Quizzes
• You will be asked to complete a form in discussion section indicating how you wish to have work returned to you.
• Quizzes will be frequent (usually at least one a week), given in both lecture and discussion, and both announced and unannounced
• Quizzes are used to assess your understanding of homework assignments, lecture material, and discussion assignments
• Exams will be closed book. We will have 3 exams, and the 3rd exam will be given during the final exam slot.