CSCI 201 Computer Science Fundamentals

Syllabus

 

Meeting Time/Place:             MF 1-2:15pm, Fitzelle 218

Prerequisites:                        Grade of C or better in CSCI 116; or consent of the instructor

Instructor:                      Don Allison

Office:                           225 Fitzelle Hall

Phone:                           (607) 436-3439

Email:                            allisodl@oneonta.edu

Office Hours:                  Wednesday 1:40-4pm

                                                Friday 2:15-5pm

                                    Others by appointment (or just drop by)

 

Text:  There are three required texts for this course.  The first is Computer Science: An Overview, by Glenn Brookshear, 10th edition, published by Pearson/Addison-Wesley, ISBN 978-0-321-52403-4.  This is the text for the computer science content of the course.  The second text is C++ Distilled by Ira Pohl, published by Addison-Wesley in 1997, ISBN 0-201-69587-1.  This book serves as a quick reference manual for the programming language we will be using, C++, and covers extra features that we don’t cover in 116.  It should prove useful not only for this course but for the rest of your time here in Oneonta.  The third book is Expert C Programming: Deep C Secrets, by Peter van der Linden, published by Prentice-Hall in 1994, ISBN 0-13-177429-8.  Even though this book is mainly about C and the C-like part of C++, Peter van der Linden wrote compilers for Sun Microsystems, and so he had to have a deep understanding of all those icky undefined corners of the language.  Because C and C++ are strongly connected, most of what he says is directly applicable to C++ as well.  This book has one of the best explanations of pointers I have ever seen, and explains what the differences are between and array and a pointer so that even I can understand it!  This is a book I read every two or three years just to refresh my memory of the way C and C++ work, and I strongly recommend you do the same.

 

Software:  For this course we will be programming in C++ using the Visual C++ 2008 Compiler in the Windows environment.  Every machine in the departmental lab should dual boot both SUSE Linux 11.1 and Windows and have Visual Studio 2008 installed on it, so finding a machine to work on should not be a problem.  All your work should be stored on your personal jump drive when working in the lab.  (Jump drives have come down in price to the point that you can get a 1-2GB one for the price of a slice of pizza and that is more than adequate to hold all your programs for this course!).  You should copy your files to the D:\temp directory while working on them (to save write cycles to your jump drive, and to make things run faster), but you should copy everything back to your jump drive when you are done, and delete all your files from the lab machine before you log out.  Anyone found leaving files lying around on the lab machines will be penalized appropriately.  If you wish to do the projects on your personal machine, Visual Studio 2008 is available for free for students from Microsoft DreamSpark (http://www.microsoft.com/Presspass/press/2008/feb08/02-18GSDPR.mspx).

 

Course Description:  (from the catalog) An introduction to the fundamentals of computer science.  This course provides a survey of topics used in later computer science coursework.  Course includes an introduction to topics selected from: Data representation, binary arithmetic and radix positional notation, Boolean and propositional logic, combinational circuitry, program language specification, assembly language, automata theory, operating systems, computer communication, computational theory, artificial intelligence. Course includes implementation of algorithms in a contemporary computer language (like C++ or Java).

 

Course Goals:  The purpose of the course is to expose students to the wide range of topics that fall under the computer science umbrella.  It is also intended to give students more practice programming, using projects slightly larger than those used for CSCI 116.  At the end of the course students should be better able to define and describe computer science, give examples of the gamut of topics it covers, and should be reasonably fluent C++ programmers.

 

Tentative Schedule:

 

Date

Monday

Tuesday

Wednesday

Thursday

Friday

Jan 12-Jan 16

 

Last day to register

Classes begin

Add/drop begins

Background email assignment due

 

Read Expert C Programming

Look through C++ DIstilled

Jan 19-Jan 23

Martin Luther King Day – admin offices open

Add/drop ends

Last day to sign up for P/F

Inauguration Day

 

Getting Started program due

Jan 26-Jan 30

Chinese New Year

Last day to add a full semester course

 

Read Chapter 0, Introduction, and Chapter 1, Data Storage

Feb 2-Feb 6

Superbowl was yesterday

Groundhog Day

May graduation application deadline

 

 

Program #1 due

Read Chapter 2, Data Manipulation

Feb 9-Feb 13

 

 

TAP Certification begins

Read Chapter 3, Operating Systems

Feb 16-Feb 20

President’s Day

EXAM #1

College closes after last class

Read Chapter 4, Networking and the Internet

Feb 23-Feb 27

Graduate admissions applications due

Break

Mardi Gras

Break

Ash Wednesday

Break

Break

Break

Mar 2-Mar 6

Classes resume

Summer session registration begins

Dr. Suess birthday

Read Across America Day

 

 

 

Read Chapter 5, Algorithms

Mar 9-Mar 13

Daylight Savings Time started yesterday morning…did you set your clock ahead?

Purim

Interim grades due from faculty

 

Read Chapter 6, Programming Languages

Mar 16-Mar 20

St. Patrick’s Day

 

LAST DAY TO DROP A CLASS

First day of spring

Read Chapter 7, Software Engineering

Mar 23-Mar 27

Program #2 due

Read Chapter 8, Data Abstractions

Mar 30-Apr 3

 

April Fools

 

College closes after last class

Program #3 due

Read Chapter 9, Database Systems

Apr 6-Apr 10

Break

Break

Break

Break

Passover

Break

Good Friday

Apr 13-Apr 17

Easter Monday

Last day for students to make up I or P grades from fall 2008

Classes resume

Income Taxes Due

 

Last day for faculty to turn in grades to replace I/P grades

EXAM #2

Program #4 due

Read Chapter 10, Computer Graphics

Apr 20-Apr 24

Begin fall pre-enrollment

Earth Day

Administrative Professional’s Day

Last day to withdraw from college

Arbor Day

Read Chapter 11, Artificial Intelligence

Apr 27-May 1

 

 

May Day

Program #5 due

Read Chapter 12, Theory of Computation

May 4-May 8

Cinco de Mayo

National Teachers’ Day

Last day of class

Final Exams Begin

8-10:30am TR10

11am-1:30pm TR4

2-4:30pm TR12

8-10:30am MWF10

11am-1:30PM MWF2

2-4:30pm MWF12

May 11-May 15

Mother’s Day was yesterday—did you remember??

8-10:30am MWF9

11am-1:30pm MWF1

2-4:30pm MWF11

Final Exam 11 am

Nurses’ Day

8-10:30am TR8

11am-1:30pm TR2

8-10:30am MWF8

11am-1:30pm MWF3

Final Exams End

 

Commencement, Saturday May 16

Armed Forces Day Saturday May 16

 

 

General Policy Information: All college policies will be adhered to, including policies on attendance, academic honesty, etc.  Students are expected to be familiar with and adhere to these policies as outlined in the student handbook, this syllabus, and other administration publications.

 

Attendance Policy:  Attendance is STRONGLY encouraged.  Although it will not enter into your grade computation directly, I will be taking attendance occasionally, especially at the beginning of the semester to start putting names with faces.  However, students who attend class regularly generally do much better in their classes than their peers who attend sporadically.  You will be responsible for material covered in class as well as the material in the text.  In addition, we will be discussing the exams and programming projects in class, writing sample code for them, and so on, as well as answering questions about the assigned material, so it is in your best interest to attend class as much as possible.  Finally, the college has a requirement that students attend one of the first two lectures and the first lab for any course or they can be administratively dropped from the course and their space given to someone else.  Additionally, anyone missing 25% or more of the class meetings to that point at any time up through midterm can be involuntarily dropped from the course.  Depending on the number of people on the waiting list for this course, these policies will be enforced more or less stringently.

 

Collaboration Policy:  Cheating or other academic dishonesty hurts others as well as yourself and will not be tolerated!  For this course, however, it IS acceptable to collaborate with your classmates, under certain conditions.  All work submitted on the exams should be yours and yours alone, as should any code you submit.  If you are working on a project and run into a problem, it is acceptable to ask a classmate or other person a general question (such as, “what are the two conditions needed to guarantee termination of a recursion”), AS LONG AS you actually do the work yourself.  For instance, it is unacceptable to ask someone (other than your instructor) to write code for you to handle argument passing for a function, or code for opening a file for input.  You can share code that was discussed in class however.  In other words, discussing algorithms or the lecture content is okay, but discussing specifics of the programming assignments is not.  You should be the physical creator of everything you turn in that wasn’t provided by the instructor.  You should also be able to answer any question I have about how every one of your programs works.

 

Let me reiterate: it is all right to ask others general questions about computer science, programming, C++, or the assignments.  HOWEVER, it is NOT acceptable for you to ask others (except the instructor) specific questions about your programs, such as how you should code something specific.  It is okay to occasionally ask a class member if they know why you are getting a particular compiler error, but it is not okay to ask them to help you write part of a function.  Code plagiarism or code sharing will be dealt with as academic dishonesty, for which there are severe repercussions, so make sure that what you turn in is the product of your own work and not someone else’s!  You should be able to explain to me everything about any program that you turn in, and I will occasionally ask you specific questions about your programs (such as, “Why did you use a for loop here?”) and expect you to be able to answer them easily!  (These will be a part of your program grade.)  One of the objectives of this course is for you to improve your programming skills, and as such everything you turn in should be your work alone.  You will have plenty of opportunity in other courses to work collaboratively.  If you have any questions about whether some type of collaboration is allowed or not, ask me first.  Better to know for sure than to risk your program (or semester) grade on a guess!

 

 

Programming Style Guidelines:  Programming style is an important part of coding, and programs you write for this class will be expected to follow the style guidelines discussed in class and illustrated by the programs we write in class.  You should indent your code to reflect its internal structure.  You should use block comments to explain what your code is doing at a high level.  Each function should have a header that gives the function name, the inputs, the output(s), and lists any side effects, as well as providing a two or three sentence summary of what the function does.  In addition, your main program file should have a block header similar to the following:

 

// CSCI 201, Computer Science Fundamentals, Spring 2009

// Program #1: Getting started

// Author: Don Allison

// Date Due: 23 January 2009

//

// This object of this program is to verify that we can compile and

// execute programs using a C++ compiler.

 

Your header should include the course name and number, the assignment number, your name, the program due date, and a two or three sentence description of the purpose and function of the program.

 

Program Turn-in Procedure: You should print out your source and include file(s), along with a sample output, and staple them together.  These should be turned in at the beginning of class on the day they are due.  Make sure you turn in all the required parts!!!  You should also email me a zip file containing your source code, makefile, test data, etc, along with a README file that describes how to recreate your executable, any special instructions needed to run your program, etc.

 

Grading and Other Administrivia:

Exams: There will be two exams and a final.  Each exam will contribute 15% of your grade, while the final will contribute 20%.

 

Programming Projects: The programming projects are an integral part of the course.  There will be a “getting started” project to familiarize you with the programming environment, C++, etc, and then 5 or 6 larger programming projects.  The “getting started” project will be considered part of your homework grade, while the larger projects will combine to contribute 40% to your final grade.  All programs will be completed in C++ in the Windows environment.

 

Homework, etc:  The remaining 10% of your grade will be determined by your grades on homework assignments, class participation, etc.

 

Grade Computation:

 

Weight

Tentative Date

Exam 1

15%

16 February 2009

Exam 2

15%

30 March 2009

Final Exam

20%

11 May 2009 11am

Programming projects

40%

 

Class Participation / Homeworks / Getting Started Program

10%

 

Total

100%

 

 

Make-up Test and Late Assignment Policy:  Assignments are considered due by 11:59PM on their due date, and any turned in after that time will be considered late.  To allow for differences in clock settings and for mail delays, you should plan on emailing your assignments in by ~11:45PM.  If an assignment is late, there is a 10% penalty for each day it is late (Saturday and Sunday count as a single day).  Any assignment more than 10 days late will not be accepted.  All assignments must be turned in by the last day of classes for them to count toward the course grade.  You should plan to be present for all the tests and the final exam.  Any makeups will be allowed only for legitimate, school-approved excuses, and should be arranged with the instructor as soon as possible after you discover you can’t attend the exam (before the exam is given whenever possible).  In any case, all work must be completed by the last class, including any makeup exams.  Exams missed for unexcused absences, or exams not made up by the last day of classes will be recorded as a zero grade.

 

Additional Resources:  For those who want to do more work with user interfaces, you might check out the extensive documentation on line for fltk, glui, glow, and other user interface toolkits.  Specifically, see http://www.fltk.org/, http://www.fltk.org/, and http://glow.sourceforge.net/.  See me if you need any pointers or suggestions.  If your C++ skills could use some help, you might check out the short and cheap book from Barnes & Noble, C++ Programming in Easy Steps, by Mike McGrath…192 pages, under $10 http://www.ineasysteps.com/books/?1840782331.