About COP 3223H

This page provides general information about COP 3223H (Honors Introduction to Programming with C) at the University of Central Florida. The course's home page is http://www.cs.ucf.edu/~leavens/COP3223H/.

This page is organized as follows:

  1. Meetings
  2. Course Textbooks
  3. Required Software
  4. Computer Accounts
  5. Accommodations for Disabilities
  6. Course Description and Credit Hours
  7. Course Learning Objectives
  8. Course Learning Outcomes
  9. Prerequisites
  10. Acknowledgments

The course grading policy and syllabus (which includes the time of the final exam) are on separate web pages. Also on a separate page is our contact information.

Meetings

Lecture attendance is required. The meeting time and location is as follows:

Lectures: Mondays, Wednesdays, and Fridays from 9:30AM to 10:20AM, in Engineering 1, room 286.

Return to top

Course Textbooks

There are no required textbooks for this course. However...

Recommended Texts

The following two books are recommended.

Additional Readings

If you want more reading material, or help with background and concepts, then you may want to check out the following books.

We may use other material as described in the syllabus's bibliography.

Return to top

Computer Accounts

You should either use your own computer or have an account on the Eustis cluster to run software for this course. The Eustis cluster can be reached at eustis.cs.ucf.edu.

Return to top

Accommodations for Disabilities

An important goal is that this class is accessible and welcoming to all students, including those with disabilities that may impact learning. If you believe that this course poses barriers to effectively demonstrating your learning or to your participation in this class, please meet with me. We can meet with or without a letter from Student Accessibility Services (SAS) to discuss options or adjustments. At such a meeting I may suggest the possibility/necessity of your contacting SAS (Ferrell Commons 185; 407-823-2371; sas@ucf.edu) to talk about academic accommodations. Your input on any design concerns is always welcome, but it is best if we talk about any modifications to the course at least a week prior to the need for any such modification.

-- adapted from the faculty center for teaching and learning's web site.

Return to top

Course Description and Credit Hours

This 3 credit course is titled "Honors Introduction to Programming with C."

From the University of Central Florida Catalog: "PR: Consent of Honors. Programming with C including arrays, pointer manipulation and use of standard C math and IO libraries. With Honors content."

Explanation

A programming language is a language capable of expressing everything computable. Examples include general purpose programming languages, such as C, Python, Basic, C++, C#, COBOL, FORTRAN, Java, Lisp, as well as special purpose programming languages like the Unix Shell, JavaScript, Perl, PHP, and the macro language of Microsoft Excel.

C is a general purpose programming language that has seen wide use in low level programming, for example in writing operating systems and device drivers. It is often used as a modern substitute for assembly language in tools (such as compilers) that generate code.

An array is a data structure (way of organizing information) that permits constant-time access to each element. A pointer is the address (in a computer's memory) of some data; pointers are often used to provide quick but indirect access to memory and are a foundational building block for more complex data structures such as trees and lists.

A library is a collection of functions that can be used to ease some programming task. For example C has a math library that has functions implement various mathematical concepts such as exponentiation (exp), square root (sqrt), and trigonometry (such as cos and sin). C also has an I/O (Input and Output) library that allows programs to read and write files and interact with users.

Motivation for the Course Objectives

Programming is the gateway to the world of computation. A computer program is a list of instructions that tells a computer, in exacting detail, what to do at each moment. Computation is what happens when computer programs run, and thus a program is a description of a computation. This is why programming is at the heart of Computer Science.

Computation and computer programming have a great deal of intellectual interest. Computation poses one of the earliest and the most natural example of mathematically unsolvable problems (the Halting Problem). This means that solving problems with computers can be both arbitrarily difficult and can never be completely reduced to an algorithm. It follows that computation poses an infinite field for human creativity and insight. You will find this reflected in the vast arena of potential improvements to processes and procedures for applying computers.

Computation also has a great deal of practical interest, as it has become increasingly important to humanity since the advent of the first digital computers in the 1940s. In part this is because computers are increasingly used to control devices (such as airplanes and cars) as well as to add flexibility to products (such as televisions, phones, and even lightbulbs). Computer programs are the key to building flexible behavior into such devices. You probably do not even think about the computers you use on a daily basis, such as those inside phones, watches, and cars; all of these are controlled by software programs.

Moreover, computers and thus computer programs are used in many applications that benefit humanity and enable businesses, entertainment, and science. Computers and text editing software (like Microsoft Word) have replaced typewriters as the tool of choice for writing. Spreadsheet programs such as Microsoft Excel make many business functions easier, such as budgeting and tracking expenses. Computers make possible payments by check and credit card. Computers and computer programs make possible space travel, the world-wide web, digital cameras, and digital maps.

The proliferation of computers and computer software has two effects that are important for you: jobs and the ability to get ahead in the modern world.

Job prospects in computing are very good. According to the US Bureau of Labor Statistics Occupational Outlook Handbook, computer programmers earned an average of $79,530 per year (or $38.24 per hour, in 2015) with a BS degree. Moreover software developers earned an average $100,690 per year (or $48.41 per hour, in 2015) with a BS degree. And job growth for software developers is "much faster than average". However, these jobs are not the only ones that are enabled by a knowledge of programming; others include: computer and information research scientists, computer and information systems managers, computer hardware engineers, computer network architects, computer systems analysts, and several others.

Even if you don't have a job that requires you to write programs, it is very helpful to know how software works and what one can expect it to do easily. Learning to program will give you an intuitive understanding of what software can do. Thus it is fair to say that the basics of programming are important both for computer scientists and for other fields.

The C programming language is tied closely to computer hardware by design. Thus, learning C helps one learn how a computer works. Moreover, C has been widely used in systems software, for example to implement operating systems and device drivers (such as network cards), due to how it lets programmers manipulate bits at particular addresses, and due to its run time efficiency. Thus it is important to understand C programs in order to do both practical work and some kinds of research in (computer) systems. For the same reason, C is also important to operating system and network security. And for similar reasons, C is also important to practical work and some kinds of research in the area of computer programming languages.

To learn to program in C, and to have an appreciation for the features of programming languages such as C, it is useful to first learn Python. Python is less closely tied to computer hardware than C, making it easier to write more interesting programs and making the language and its tools more forgiving of mistakes. Writing code in C is a bit like driving an Indy race car; it goes very fast, but you have to be skilled to control it properly. Writing code in Python is more like driving a family sedan; while it can also go fast, Python is more forgiving of mistakes in general. For this reason Python makes a better language for starting out in programming.

Python is also a widely used language in its own right. Moreover Python has several features that are different from C, including dynamic typing and a module system that supports programming in the large. These contrasts will help you appreciate and understand the features of both C and Python.

Motivation for the Course Plan

The overall plan of the course is to first spend some time learning to program using Python, and then to transfer that knowledge to programming in C. This is designed to be more friendly for students with little programming experience, and will give those with some programming experience exposure to another important programming language.

Return to top

Course Learning Objectives

The objectives for this course are divided into two parts: a set of essential objectives, and a set of enrichment objectives. The essential objectives will be helpful for your career as a computer scientist or software developer; hence they lead to the course's essential outcomes that we want to help you master. The enrichment objectives are less important for the course, but lead to enrichment outcomes that you are encouraged to explore both for their own sake and because learning more about those will help deepen your understanding of the essential objectives.

This course's objectives are linked to the computer science program's learning objectives (in references that look like this: [CSObj1]).

Essential Objective

The essential objective for this course are that you will be able to:

A program is correct with respect to a problem specification if and only if the program exhibits the specified behavior for all possible specified inputs.

Enrichment Objectives

Enrichment objectives could be multiplied without limit, but the following seem most important, especially in relation to the computer science program's learning objectives.

The course's enrichment objectives are that you will be able to:

Course Learning Outcomes

This course's learning outcomes are divided into two parts: a set of essential outcomes, and a set of enrichment outcomes. The essential outcomes are designed to support this course's essential learning objectives, and thus to be helpful for your career as a computer scientist or software engineer; hence we want to help you to master them. They also form the basis for grading and assessment of your learning. The enrichment outcomes are not used directly for assessment. However, you are encouraged to explore topics related to the enrichment outcomes both for their own sake and because learning more about those will help your performance relative to the essential outcomes.

The course's outcomes are linked to the course's objectives and to the computer science program's outcomes. The links to this course's objectives are shown in references that look like this: [Solve]. The links to the computer science program's learning outcomes are shown in references that look like this: [CSOut1]).

Essential Outcomes

In one sentence, this course's main expected learning outcome is that you will be able to write sequential programs that correctly solve a specified problem [Solve] [CSOut1] [CSOut2].

In more detail the essential learning outcomes for this course are that you will be able to:

Other conditions: You will be permitted to use your own books and course notes for all graded quizzes, homework, and exams (and assessments).

For purposes of grading (and assessment) a program correctly solves a problem in a given programming language if: it follows the syntax and semantic constraints of the given programming language (e.g., it has no syntax, type, or runtime errors), it only uses the specified features and libraries in the given language, it does not exhibit any maintenance problems (such as repeated code or lack of information hiding), it exhibits the specified behavior on all possible specified inputs, obeys any specified constraints on time and space efficiency, and if the solution is no more than 25% as long (counted in non-commentary tokens) as the instructor's solution. Of course, there may be many correct solutions to a given problem.

Note that we take points off for syntax errors and type errors on exams as a way to make sure that you are doing the homework and having that learning experience. Students who do not do the homework typically make large numbers of syntax errors.

Enrichment Outcomes

Enrichment outcomes could be multiplied without limit, but the following seem most important, especially in relation to the computer science program's learning outcomes.

The course's enrichment outcomes are that you will be able to:

Return to top

Prerequisites

The formal prerequisite in the University of Central Florida catalog is "Consent of Honors" for this honors section of COP 3223.

Please see the professor if you have questions about the prerequisites.

Return to top

Acknowledgments

Thanks to Arup Guha and Annie Wu for help with this course's materials.

Thanks to Curtis Clifton for his initial work on the HTML for these web pages, which I have adapted from another course, and his style sheets, which I have also adapted. Thanks to Steve Shaner for getting me to use an RSS feed for these web pages, and thanks to Evagoras Charalambous for the XSL style sheet and style sheet for showing such RSS feeds as a web page.

Return to top

Last modified Wednesday, January 4, 2017.

This web page is for COP 3223H at the University of Central Florida. The details of this course are subject to change as experience dictates. You will be informed of any changes. Please direct any comments or questions to Gary T. Leavens at Leavens@ucf.edu. Some of the policies and web pages for this course are quoted or adapted from other courses I have taught.