Name Office Phone Sections Office Hours Zachary Scherr Dana 311 570-577-1276 zls002 01, L61, L62 M 3-4, T 1-3, W 10-11, F 11-12
(all emails are at bucknell.edu)
Course OutcomesAfter completing the course, students will be able to
- explain and use fundamental data structures, data types, and programming techniques;
- explain and use introductory algorithm analysis techniques;
- design, implement, and test programs for problems using algorithms and data structures.
The course textbook is Data Structures and Algorithms Using Python by Rance Necaise, Wiley 2011
Students are expected to actively participate in the learning. Discuss topics and their related contents in the class. Ask and answer questions. Finish homework, labs, and projects on time. Complete any reading assignments by the due date. Be prepared to discuss the reading material in class. Readings are listed on the course schedule. In particular, students are expected to pursue information on their own when there are questions or issues. Students are encouraged to use help whenever is needed. We have help sessions and students are encouraged to come to the office hours of the instructors.
Courses at Bucknell that receive one unit of academic credit have a minimum expectation of 12 hours per week of student academic engagement. (See this page for details.) Student academic engagement includes both the hours of direct faculty instruction (or its equivalent) and the hours spent on out of class student work. This course meets five hours a week (classroom and lab) so you should expect to spend at least seven hours a week working on it outside of class.
The following are the major topics to be covered in the course.
Standard Data Structures A data structure is a particular way of organizing and manipulating data (for instance, Python's list introduced in CSCI 203 is an example of a data structure). Smart choice of data structures can dramatically speed up program execution (and poor choice of data structures may render a program so slow that it becomes unusable). We are going to learn organization and proper use of classical data structures (stack, queue, array, linked list, tree).
Data Abstraction Throughout the course, we will be familiarizing ourselves with a very powerful notion of separating abstract properties of data types from their concrete implementations in Python. We will learn to view complex programs as combinations of individual pieces and reason about the behavior of those pieces independently of their actual implementation. This will ultimately help you develop more versatile software that is easy to update and reuse.
Algorithms and Algorithm Analysis Programs are often judged by how fast they run and how effectively they utilize the available memory space. Interestingly, how fast one program runs compared to another program can be established by looking at their underlying algorithms in theory only (without bothering with the actual implementation, or characteristics of a particular computer on which the programs are run). We will study the way to describe the efficiency of algorithms and evaluate various approaches to implementing data structures and algorithms. This will allows us to make an intelligent choice and alter of a data structure suitable for a particular program.
Advanced Python Programming This course builds on the foundation established in CSCI 203 and provides you with further programming experience in Python. You will be implementing the abstract data types that we discuss, and algorithms involving them, and utilize object-oriented programming concepts (such as instance variables, methods, constructors, inheritance, and overriding).
Locations for Course Information
The course uses various sites for contents and management. Please visit these sites often, e.g., daily.
- Course website is at http://www.eg.bucknell.edu/~csci204/ which contains most of the information.
- Moodle site is at http://moodle.bucknell.edu/course/view.php?id=27444 where students submit their work. They can check the grades there as well once their work is graded.
The course grade consists of the following components.
Professionalism 8% Projects 16% HW 10% Labs 16% Mid-term Exams 30% (15% each) Final Exam 20% Total 100%
Professionalism and Engagement
Professionalism is defined by many criteria, most of which are common sense and common courtesy rules. As a general guideline, behave as you would in your dream workplace. To encourage a professional, respectful atmosphere that is conducive to maximal learning in the classroom:
- Silence cellphones and other notifications during classroom;
- Arrive on time and do not leave before the class is over;
- Notify your instructor of any absence ahead of time;
- Stay awake, alert, and actively participate in class;
- Complete all work in a neat and organized fashion.
There will be several programming projects during the semester. Each project is broken into phases. Each phase is due by 11:59 P.M. on the due date. Projects are submitted to the course Moodle site.
Late projects will receive a 10% penalty per day overdue. Projects that are over three calendar days late will not be accepted. You get three free late days to use on projects as you see fit. You do not have to inform the instructor when you are using a late day, when your work comes in late, it will be assumed you are using a late day.
Projects are individual work! While discussion is encouraged, give or receive code segment is not allowed. You may not copy code for the ADTs off the internet or from sources outside of the course.
Some weeks there will be a short homework. You can choose to do this homework in pairs of two. If you do so, put names of both person on EVERY file you turn in. Only one of you should submit the assignment. No late homework will be accepted.
You may not copy code for the ADTs off the internet or from sources outside of the course. You may communicate with other people about the homework so that you understand it. You may NOT show your code to other people outside the group. (Not on email, text, yikyak, twitter, github, paper, public space, the web, etc.)
We will have a total of 12 labs. There will be no lab during the week of mid-term exams. Typical lab assignment should be completed within four hours, some may be a bit shorter, others may be a bit longer. The labs are due on Moodle 11:59 p.m. on the Wednesday after the lab is assigned.
Lab attendance is mandatory. If you do not attend a lab, your maximum grade for that lab assignment is 80%.
Lab are individual work. While discussions are encouraged, each student must work on their own assignment. You may not copy code for the ADTs off the internet or from sources outside of the course. You may SHOW your code to other people in CSCI 204. Do all of the typing yourself. Do not make a copy of your code available to other people. (Not on email, text, yikyak, twitter, github, paper, public space, the web, etc.)
There will be two mid-term exams and one final exam. The dates for the mid-term exams are published in the course schedule. The final exam is at the time specified by the university. The mid-term exams are sectional, meaning they cover the contents between the exams. The final exam is comprehensive.
If you need special accommodation for exams, you must notify the instructor at least one week before the exam with sufficient evidence, e.g., letter from the Office of Accessibility Resources.