CS313E: Fall, 2012
Elements of Software Design
Instructor: Dr. Bill YoungUnique number: 52765
Class time: MWF 9-10am; Location: RLM 5.104
Office: MAIN 2012 Office Hours: MW 10-noon and by appointment
Office Phone: 471-9782; Email: email@example.com
TA: Joyce Whang; Email: firstname.lastname@example.org
TA Office Hours: PAI 5.33 Thur. 3-5pm, Desk 4; Fri. 3-5pm, Desk 6
TA: Kai-yang Chiang Email: email@example.com
TA Office Hours: Tues. 3:30-4:30pm
This website: www.cs.utexas.edu/users/byoung/cs313e/syllabus313e.html
Important Class Announcements:Breaking news important to the class will be posted here. Consult this spot often.
Here are the three quizzes we took this semester: Quiz 1, Quiz 2, Quiz 3, and the midterm: Midterm. Several of the programming questions on the midterm have solutions here:midterm answers.
I will drop your lowest assignment grade.
I messed up on the quizzes. I didn't realize that I'd advertised that quizzes would count 10% of your total grade, probably because I intended to give a lot more than 3 quizzes this semester. To deal with that, I will compute your quiz grade as follows: quizzes will count 10% of your grade, as advertised. But each individual quiz will only count 1%. That means you'll each get a "free" 7% on quizzes.
This is a flyer describing the Elements classes being offered in the Spring semester: Elements flyer.
Some Interesting Links:Wikipedia page on sorting algorithms
Algorithms rule the world
The Beloit Mindset List
For some tips on porting code from Python 2 to Python 3, use the following website:
The following is a list of hints for successful Python programming that I put together:
Course Description:CS313E is the second course in the Elements of Software series. It is assumed that you know some high level programming language (C / Java / Python) at the level taught in CS303E. The emphasis of this course will be on software development and data structures using object-oriented methodology. You will learn how to analyze and design software and learn how to create reusable software components and to compose programs from already available components. You also will learn some basic data structures and algorithms and how to match the data structures and algorithms to problems. You will test and evaluate programs for their functionality and their performance.
We will have readings from the text. Supplemental notes on various topics may be made available on the web. Unlike the traditional lecture format, our classes largely will be a venue for solving problems, writing programs, and exchanging ideas. Attendance and participation are mandatory.
Prerequisites:You are expected to have experience programming in some high level programming language. If you are uncertain about your preparation for this course, please consult with Dr. Young. Some helpful links on Python are included at the bottom of this page. The initial few weeks of the class will be a review of elementary Python (or a crash course for students new to Python).
Required text:Kenneth Lambert, Fundamentals of Python: From First Programs Through Data Structures, Cengage, 2010.
Using Piazza: This term we will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TAs, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza. If you have any problems or feedback for the developers, email firstname.lastname@example.org. Our class page will be set up shortly and announced here.
Getting an Account:You can request a computer account here: Request an Account
Class Notes:Handouts of all class slides will be made available over the course of the semester (via links below). Slides are available in PostScript (PS) or in PDF format. The PostScript files can be viewed with Ghostview or printed on any postscript-compatible printer. The PDF files can be viewed with Acroread.
Slide set 0: The Elements Program PS-4up PDF-4up PDF
Slide set 1: Introduction PS-4up PDF-4up PDF
Slide set 2: Basic Python PS-4up PDF-4up PDF
The CokeMachine example: Coke Machine program.
The Calculator example without classes: Calculator.
Slide set 3: Turtle Graphics PS-4up PDF-4up PDF
Slide set 4: Classes PS-4up PDF-4up PDF
Slide set 5: Abstract Data Types and Stacks PS-4up PDF-4up PDF
Slide set 6: Another ADT: Queues PS-4up PDF-4up PDF
Slide set 7: Lists PS-4up PDF-4up PDF
Slide set 8: Recursion PS-4up PDF-4up PDF
Slide set 9: Efficiency of Algorithms PS-4up PDF-4up PDF
I've decided to do slidesets 10 and 11 out of order.
Slide set 11: Hash Tables PS-4up PDF-4up PDF
Slide set 10: Trees PS-4up PDF-4up PDF
Slide set 12: Mergesort and Quicksort PS-4up PDF-4up PDF
Assignments:Programming is not a spectator sport. The only way to learn programming is to program. Doing the programming assignments is crucial to performing well in class. Assignments will be given almost every week. Each assignment will have a clearly stated due date. Assignments start out being easy but get harder over the semester. If you are having considerable difficulty with the first few assignments, please see the instructor immediately.
All assignments will be in Python. Please make sure that you use Python 3 (not Python 2). The differences aren't great, but they are enough to make it hard for the TA if you're not all using the same version of the language; unfortunately it appears that our textbook is oriented to Python 2.
Also, some of the assignments will build upon one another, so if you get behind, you'll be seriously disadvantaged. Make sure you keep up with the programming assignments.
Links to assignments will appear here.
For the reading assignments, the care you put into them depends on how much you remember from CS303E. If your Python knowledge is good, you can just skim them.
Read Chapters 1 and 2 in your textbook: due 9/5/12
Simple String Processing: Assignment 0: Due 9/10/12
Here's a solution to Assignment 0: solution 0
Read Chapter 3 in your textbook: due 9/12/12
File and String Processing: Assignment 1: Due 9/17/12
Here's a solution to Assignment 1: solution 1
Read Chapters 4 and 5 in your textbook: due 9/19/12
Turtle Graphics: Assignment 2: Due 9/24/12
The potential solutions to Assignment 2 are so varied that I really can't show you a solution.
Poker Hands: Assignment 3: Due 10/1/12
Here's a solution to Assignment 3: Card.py, Deck.py, Hand.py, and Poker.py.
Building a Stack-based Calculator: Assignment 4: Due 10/8/12
Here's a solution to Assignment 4: Calculator.py
Widget Ordering System: Assignment 5: Due 10/15/12
Here's a solution to Assignment 5: WidgetWorks.py
Jumble Solver (Flat Wordlist): Assignment 6: Due 10/29/12
Here are two possible Solver and Wordlist classes for Assignment 6: Solver.py, Wordlist1.py.
Radix Sort: Assignment 7: Due 11/5/12
Here's a solution to Assignment 7: RadixSort2.py
Jumble Solver (Sorted Wordlist): Assignment 8: Due 11/12/12
Here are two possible Solver and Wordlist classes for Assignment 8: Solver2.py, Wordlist2.py.
Jumble Solver (Hash Table): Assignment 9: Due 11/28/12
Here are two possible Solver and Wordlist classes for Assignment 9: HashSolver.py, Wordlist3.py.
Jumble Solver (Binary Search Tree): Assignment 10: Due 12/5/12
Programming assignments can be completed in the CS elements Lab (PAI 5.38) or you may choose to use your own computer to work on these assignments. Almost all modern computers have Python and related tools installed. If you find that yours does not, let us know. But, please make sure that it's Python 3 you are using, not Python 2.
The assignments will require a substantial time commitment over several days (an average of 8 hours per week should be expected). Be sure to budget sufficient time to complete assignments before the deadline.
Turn in your assignments on time. This permits grading to start promptly after the submission deadline so that assignments may be returned promptly. Programs will be graded on a 10 point scale with 1 point deducted for each day the program is late, up to two days late. The TAs may turn off the turnin program after the due date, but will accept late assignments by email. Please coordinate with the TAs regarding late submissions, or if you desire to re-submit an assignment following the due date. The date of a submission is purely a function of the timestamp. That is, the day ends at midnight and anything up to midnight is assumed to have been submitted on that day.
Specific grading criteria vary on each assignment. However, in general, programs that do not compile correctly on the Elements Lab configuration will receive no more than 50% of the possible points. Other point deductions are given for such things as: incorrect results, missing features, bad solution logic, no documentation, etc. No matter what configuration of software that you have on your home computer, the assignment that is turned in must run successfully on the Elements Lab configuration in order to be graded. Here is some general grading criteria for programming assignments.
All assignments must be submitted using the web based turnin program. Always make a backup copy of the Python source code (i.e. the .py file) on your removable secondary storage device such as a USB device (thumbdrive). This will be necessary in cases where your program gets lost, is corrupted, or if there is some dispute over what was turned in when.
If you cannot get the turnin program to work in the Elements Lab, then have a TA or proctor in the lab email the assignment for you to your TA, with a copy to you or the proctor for proof of mailing. For assigned programs, the source code (.py file) must be turned in; no credit will be given for turning in a compiled, executable, or other file. The source code must be a text file that can be compiled and run. Word processing files will not be accepted. If you are using Eclipse always submit the .py file or files.
If you want help debugging your program, bring your laptop or your program (on a portable storage device like USB drive) during office hours. Do NOT just e-mail the program for us to debug it for you.
Assignment Identification: All assignments must be submitted with the proper header, containing your name (as registered) and the assignment number at the top of the assignment. The format for the header will be specified in the assignment. That specification will override any other header specification (e.g. the header description in the documentation for the turnin program).
Because assignments are submitted as files by the turnin program, they must have the correct file name, which will be specified in the assignment handout. Lost assignments are typically caused by turning in an incorrect file name and/or turning a file into the wrong section folder. Assignments, which omit the header or are incorrect in any one or more of these requirements, may have the grade reduced.
Graded Assignments: Assignments submitted via the turnin program are placed in your directory on the turnin server. Graded assignments will be returned by placing a copy of the graded assignment in the same directory. The copy will contain comments and your grade and will have a file name similar to the name of the file turned in. These files can be viewed with any text editor such as Notepad. Once you have submitted an assignment for a grade, do not delete the submitted file or the returned file from the server. These files are part of your record for the course and must be saved by you in case of a lost file or grade dispute. You have one week from the day the assignment grades were posted to dispute your grade. After this time we will not make any changes to your grade.
Readings:I will post below the sections in your book that contain information on the material we are covering in class. These sections may also contain some topics we did not cover. Read selectively to improve your knowledge, but you will not be expected to know material we did not cover in class.
- Basic Python: Chapters 1-6
- Turtle Graphics: Chapter 7
- Simple classes: Chapter 8
- Stacks and Stack Appications: Chapter 14
- Queues and Simulation: Chapter 15
- Linked lists: Section 13.5-13.7
Quizzes:Short in-class quizzes may be given at any time. These will cover material covered in previous classes. The goal of quizzes is to test your understanding of the material and to give you an idea of the types of questions that will appear on exams. There will be no makeups for quizzes you miss, but any single quiz is only a small proportion of your final grade. So, if you miss a quiz don't sweat it; but make sure you get a copy and review it on your own.
Tests:There will be two major tests during the semester: a midterm and a final. Exams are closed-book, closed-notes tests, except that you may bring a single handwritten 8 1/2 by 11 inch sheet of notes (both sides). The midterm will be held on Wednesday, October 17 at the regular class time. The final exam will be held on Thursday, December 13 from 2--5pm, in RLM 4.102. Please don't schedule anything to conflict with these tests. A study guide will be posted before each test.
No laptops:Students are asked not to have their laptops or other electronic devices open during class.
Grading policies:Class attendance is mandatory and will be checked on a majority of class days. Excessive unexcused absences will result in a reduced grade. If you don't plan to come to class regularly, please don't register for this class. Signing in for another student not present will be considered cheating by both students.
Grades are averaged using the weighting below:
Component Percent Attendance and Participation 10% Quizzes 10% Assignments 40% Midterm Exam 20% Final Exam 20%
Course grades are assigned on the scale: A = 90-100; B = 80-90; etc. (I don't grade on the +/- grading system.) Also, I reserve the right to be more generous than these ranges indicate. That is, I may enlarge any of these ranges; I will not shrink any range.
Scholastic Dishonesty:Academic dishonesty will not be tolerated. See http://www.cs.utexas.edu/academics/conduct for an excellent summary of expectations of a student in a CS class.
While you are free to discuss the course material with your classmates and are encouraged to form study groups for the exams, collaboration on homework or programming assignments generally is not permitted. We may have some assignments on which you are allowed to work with a partner. This will be clearly stated in the assignment.
Helping a friend understand the intent of a homework or programming assignment specification is permitted. Students who work together too closely (e.g. design their solution together) should be aware that this is a form of cheating called "collusion" and is subject to academic penalties. Penalties for academic misconduct include a failing grade in this course, and may involve additional penalties.
Acts that exceed the bounds defined by the approved collaboration practices will be considered cheating. Such acts include:
We urge everyone in the class to take appropriate measures for protecting one's work. You should protect your files, homework solution sheets, etc. as deemed reasonable.
- Copying solutions, code, or programs from someone else or giving someone else your solutions, code, or programs
- Participation in a discussion group that develops a solution that everyone copies
Your Responsibilities in This Class
- Your performance in this class will be determined by you! It will require a strong dedication to learning the material and may require a substantial time commitment to complete the programming assignments.
- You are expected to show up on time for class and stay for the whole lecture.
- You are required to have your cell phones off at all times during the lecture. You may not make or receive calls on your cell phone in the lecture hall.
- You may NOT use your laptop in class.
- You are responsible for all material posted to the web site and sent as email. Ignorance of such material is no excuse.
- You are responsible for all material presented in the lectures. Note that lectures will include some material that is not available elsewhere.
- You are responsible for turning in your own work on all assignments. Unauthorized collusion is not allowed and constitutes a violation of the university's policies on academic integrity. See above guidelines for more information on what is or is not allowed.
- You are responsible for protecting your work from being copied by others.
- Your conduct in class should be conducive towards a positive learning environment for your class mates as well as your self.
Some Helpful Links
Python Tutorials and Books
- Writing Your First Python Program
- Official Python Tutorial
- How to Think like a Computer Scientist
- Dive Into Python
- Comprehensive Python Resource
Miscellaneous Information on Python