Course Syllabus

COS 121 Course Description

Foundations of Computer Science

This 4-credit hour course builds on COS 120 by emphasizing object-oriented programming and including concepts of computer science such as computational complexity, simulation, and recursion.  The use and implementation of data structures such as lists, stacks, queues, and trees are introduced as they are needed in developing algorithms for problems studied.  Additional topics include the Linux operating system and tools, source code versioning, unit testing, and code refactoring.  A grade of C- or better in COS 120, COS 130, or SYS 120 is a prerequisite for this course.

The course serves as a prerequisite for a number of other computer science courses.

Instructor

Jonathan Geisler

Contact: (765) 998-5269 and jgeisler@cse.taylor.edu, but best found on the CSE Slack.

Hours

Lecture: MWF 13:00 - 13:50 in Euler Room 201

Lab: R 13:00 - 14:50 in Euler Room 201

Office: M 14:00 - 15:00, 16:00 - 17:00; T 10:00 - 12:00; W 11:00 - 13:00; R 8:00 - 10:00 (except 2nd week of month); and F 8:00 - 9:00 in Euler Room 212

Course Outcomes

The course can be divided into three key learning topics: Unix, programming tools, and C++.  During the discussion of those topics students will work toward completing the following course outcomes:

  • Learning
    • Able to learn a new imperative programming language independently
    • Develop an approach to learn new CS concepts
    • Learn how to effectively use a new tool
  • Object-Oriented Programming (OOP)
    • Explain why OOP is used
    • Design OOP solutions for various types of problems
    • Explain what an Abstract Data Type (ADT) is
    • Develop an ADT for use in a larger application
  • C++ specific outcomes
    • Learn basic C++ constructs including variables, constants, structs, arrays, functions, control structures, and I/O
    • Implementing OOP designs in a C++ context
    • Using an ADT in the form of a C++ class
    • Effectively use pointers for various data structures
  • General programming outcomes
    • Understand and develop recursive solutions to problems
    • Be familiar with computational complexity and using big-O notation
    • Able to use and implement various ADTs including lists, stacks, and queues
  • UNIX
    • Can work on the command-line comfortably
    • Able to use man to learn how a UNIX tool works
    • Able to use redirection and pipelines to create more complex scripts
  • Professional practices and tools
    • Become adept in using a programmer's editor (vim)
    • Work in a pair-programming environment
    • Use a source code versional tool (git)
    • Introduced to a debugger (gdb)
    • Explain what unit testing is and what its benefits are
    • Explain what refactoring is and when it should be utilized

Course Philosophy

Learning Expectations

One of the biggest outcomes for this course is for the student to develop the skill of independent learning.  Since our field is constantly changing, you will be expected to learn new concepts and technologies as a computing professional.  We will begin to develop this skill as we explore the course topics together.  I see my job not as imparting specific content from my lips to your brain through your ears, but as helping you figure out the best way for you to be a learner in the midst of a rapidly changing environment.

The content will focus on UNIX, C++, and professional software tools (e.g., vim, gcc, gdb, etc.).  The topic for each class period will be posted on Canvas.  My expectation is that you can begin to learn the material prior to meeting because you may be called upon to share your learning with others during class.  You do not have to accomplish this learning by yourself.  In fact, you are encouraged to form learning groups, work with the student TAs, or meet with me.

Learning Environment

To facilitate your process of learning, we are going to work within the context of the Linux operating system studying the C++ programming language.  We will begin to introduce tools used by computing professionals so that you can develop your expertise in these areas.  I expect that most of this learning environment is new and thus will require you to learn what it is and how it works.

The course assignments will be written for the CSE lab setup (GNU C++ on Linux), but you may use other computer systems (e.g., MacOS) as long as the assignments work in the prescribed CSE environment.  You should not, however, use Windows tools for this course as you will be circumventing the intended learning for this class.

This course is required for all CSE majors and is a prerequisite for most future programming courses.  This course will lay the foundation for the rest of them.  It is imperative that you understand the material in this course because future courses build upon the knowledge in this course.  For this reason, the class will be structured to ensure you finish with a solid grade reflecting a solid understanding of the core concepts.  You will have an easier time succeeding in future classes if you do well in this one.

Texts

For the UNIX portion of the course, we will use The Linux Command Line, 2nd Edition by William Shotts.  ISBN: 9781593279523.  You can purchase a PDF copy of the book from No Starch Press. For $8 extra, you can get a print copy, too.

For the C++ portion of the course, we will use a variety of online resources.  If you are looking for a print book to help, you could use either

  • Programming:  Principles and Practice Using C++, 2nd Edition by Bjarne Stoustrup.  ISBN: 978-0-321-99278-9.  This is by the inventor of the C++ programming language.
  • C++ Primer, 5th Edition by Stanley Lippman, Josee Lajoie, and Barbara Moo. ISBN: 978-0321714114.

Assessment

Grade

The final grade will be assigned on the following scale:

≥ 93 A ≥ 90 A-
≥ 87 B+ ≥ 83 B ≥ 80 B-
≥ 77 C+ ≥ 73 C ≥ 70 C-
≥ 67 D+ ≥ 63 D ≥ 60 D-
< 60 F

Attendance

Attendance is expected and can alter the course grade. Situations such as illness or serious illness/death of a family member are valid reasons for an absence to be excused. Prior notification of excused absences is expected if possible. Documentation may be required. It is the student’s responsibility to verify that the instructor has been notified of excused absences for any reason, including official university functions. The due date of an assignment will not be automatically extended as the result of an excused absence.

Missed Work

The CSE Department has established a policy that we will not accept late work (other than in special cases).

  • Excused absences: Work due during an excused absence should be submitted or taken early if possible, e.g. quizzes and tests.
  • Missed quizzes: Quizzes missed due to an unexcused absence will receive a 0. Quiz grades will be automatically dropped as stated in the Performance Assessment section.
  • Work submitted late: The material may be graded to provide feedback, but will receive a 0; the exception is if you contact me, preferably in advance, to explain why an exception is justified.
  • Work not submitted: Assignments not submitted will receive a grade of 0 and may not be made up later.

Quizzes

There will be a quiz most weeks.  The quiz will cover the assigned reading for the week.  The quiz is your chance to determine whether you've understood the class material.

Labs

Each lab will have assigned work that will be submitted.  The goal is to be able to complete most of the lab work during the assigned lab period, but will be due later to allow finishing the work afterwards.

Programming Problems

The programming problems will give you a chance to apply what you are learning in class within the context of designing and implementing a solution to a specified problem.  These will be more complex than your lab assignments and are intended to enhance your maturity as a problem solver and programmer.  Each problem will have a set of accompanying instructions and data.

Exams

Periodically, you will have exams that will cover the material since the last exam.  They will be a mixture of short answer, multiple choice, and short essay questions.  The questions may require you to explain a programming concept or how a piece of code may execute.

The final exam will be comprehensive, but focusing on the material covered since the last exam.  The final exam will be Monday, December 9 at 8:00.  Students must take their final examinations at the assigned time.  Exceptions will be made only because of serious illness or the death of an immediate member of the family.  Reasons such as plane schedules, availability of flights, and rides leaving early are not acceptable exceptions.  Students having three or more examinations in one day should report this to the Registrar's Office ten days prior to the beginning of finals week.  Reasonable alternatives in alleviating this dilemma will be pursued by the registrar and the student in consultation with the appropriate faculty.

Computer Use

In order to complete this course, access to the CSE computer labs may be necessary.  The relevant departmental and university policies will be enforced.  Serious violations may result in the loss of computer privileges, which could result in failure in the course.  Laptop computers are allowed during the class period, but the student is expected to use them appropriately and exclusively for class-related work.

Academic Resources

Academic Integrity Policy

Course specific policy

Students in COS 121 are encouraged to help each other understand problems and approaches to solving problems; you are allowed to talk to others about your work.  Copying or transcribing what others (at Taylor or elsewhere) have done previously typically does not lead to significant learning.  Additionally, it is taking credit for work done by others.  As a result, both are considered cheating.

For individual work, you may have

  1. A high-level discussion of the problem and possible approaches to solving the problem.
  2. A discussion about how to implement a specific algorithm

You may NOT

  1. help write actual lines of code
  2. look at other students' solutions (either to try helping or for receiving help)--this is the purview of the student TAs and/or instructor

For group work, you may work together in a group, but should follow the same rules when interacting with students outside your group.

Any cheating is very serious and will be dealt with strictly.  To avoid getting into trouble, always list the people and websites that you used to help you solve the problem.

Remember, the whole point is that you are learning.  Collaboration is good--copying code is not.  If a cheating situation does arise, the minimum penalty will be at least as severe as if you had not done the work.  If you get behind and start to panic, come talk to me and we'll figure out a solution together.  I want to help you learn the material.

Taylor University Plagiarism Statement

Definition:  In an instructional setting, plagiarism occurs when a person presents or turns in work that includes someone else's ideas, language, or other (not common-knowledge1) material without giving appropriate credit to the source.  Plagiarism will not be tolerated and may result in failing this course, and may also result in further consequences as stipulated in the Taylor catalog: https://public.taylor.edu/academics/files/undergrad-catalog/current/policies.pdf.

Academic dishonesty constitutes a serious violation of academic integrity and scholarship standards at Taylor that can result in substantial penalties, at the sole discretion of the University, including but not limited to denial of credit in a course as well as dismissal from the University. ... In short, a student violates academic integrity when he or she claims credit for any work not his or her own (words, ideas, answers, data, program codes, music, etc.) or when a student misrepresents any academic performance.

1 Common knowledge means any knowledge or facts that could be found in multiple places or as defined by a discipline, department, or faculty member.

Course Summary:

Date Details