There are a number of different ways to begin your study of Computing Science. Which course you choose depends on your background and interests. If you are interested in a taste of what computing is all about, but not thinking of pursuing study in an area that makes heavy use of computing, **CMPUT 101** is the course for you.

If you are interested in obtaining the deeper introduction to Computing Science that is necessary for more advanced courses, there are two distinct course sequences that you can take: **CMPUT 174/175** or **CMPUT 274/275**.

**CMPUT 174/175**is the standard introductory course sequence which provides the foundation for taking the more advanced 200-level computing courses.**CMPUT 274/275**is a new advanced introduction (replaces CMPUT 296/297), intended for Honors and Specialization students, which combines the material of four courses (i.e., 174, 175, 201, 204) into two in a non-traditional studio-style format.

**NOTE: (Added March 31, 2014)** If you have credit in **any** of CMPUT 174, 175, 201, or 204, you cannot register in CMPUT 274 or 275. Similarly, if you have credit in CMPUT 274 or 275, you cannot register in **any** of CMPUT 174, 175, 201, or 204. If you have credit in CMPUT 274, but do not intend to take CMPUT 275, you can register in CMPUT 175, 201, or 204 with special permission; contact the Computing Science Undergraduate Advisor. Finally, you cannot register in CMPUT 275 unless you have credit in CMPUT 274.

CMPUT 101 is a general broad introduction to the discipline of Computing Science. It covers the general ideas behind computation, some simple programming, and gives you an idea of how the machines that compute are constructed. This course is primarily targeted at students who are in disciplines other than Computing Science. No background or experience in computing is assumed. Although there is some low level programming using very simple languages, it is not intended to be a programming course, but rather a presentation of elementary computing science concepts.

**CMPUT 101** course does not give you sufficient background to take the more advanced second year courses, but it is good preparation for our more general courses such as:

- CMPUT 206 - Introduction to Digital Image Processing
- CMPUT 250 - Computers and Games
- CMPUT 300 - Computers and Society

If you want to learn even more about **CMPUT 101 **then please look at the course notes.

*Important Note: *CMPUT 101 can be taken for credit before or concurrently with CMPUT 174. However, you cannot take CMPUT 101 for credit after taking CMPUT 174 or any other 200 or greater level CMPUT course. CMPUT 174 assumes no prior programming experience, and in general, you should not need to take CMPUT 101 prior to CMPUT 174, so it's not recommended to take CMPUT 101 and 174 at the same time. Many students who take CMPUT 101 discover that they are interested in computing, and thus follow it with CMPUT 174 or CMPUT 274.

**CMPUT 174/175** is our standard 2-course introduction to Computing Science. This sequence introduces you to the fundamental ideas of computing, and gives you the skills to write programs to solve small problems of the kind you will encounter both in computing and in your other studies. Our goal is to enable you to start using computing as a tool as soon as possible, which is why we use the Python programming language. The first course, CMPUT 174 makes no assumptions about your prior programming experience, and most students have very little prior experience. **CMPUT 174/175** are especially recommended if you are only planning to take two Computing Science courses during your studies.

*Important Note:* Honors students in Computing Science, and Computer Engineers should be taking CMPUT 274/275.

**CMPUT 274/275** (replaces CMPUT 296/297) is our new advanced introductory sequence to Computing Science. The courses are taught in studio-style, where lectures and labs are blended into 3 hour sessions, twice a week. The course is based on the notion that computing is more than the screen, keyboard, and mouse that sits on your desk or your carry in your backpack. Most computers are behind the scenes, inside devices such as your cell phone, toaster, car, furnace, elevator, music player, hearing aid, glasses, camera, and so on. For most people, this kind of computing is hidden inside a box that they cannot open. It might as well be magic.

**CMPUT 274/275** is about opening the box. Our goal is to liberate you from being a consumer of magic technology to a creator of it. You will not only understand what is in the box, but be able to build your own.

In CMPUT 274 the key concepts of procedural programming, basic algorithm design and analysis (lists, queues, trees, sorting, searching), and reactive interfacing with the world are learned by solving a series of problems using the Arduino platform and C/C++. The use of a resource-limited processor with no operating system opens up the inner workings of computing. Development is done using the Linux operating system with the exposed compiler tool chain.

CMPUT 275 expands to add object-oriented programming, the Python programming language, and more complex algorithms and data structures such as shortest paths in graphs; caching, memoization, and dynamic programming; client-server style computing; recursion; and limited distributed of computation tasks between the Arduino platform and the traditional desktop in order to explore design tradeoffs.

The integrated studio-style structure of **CMPUT 274/275** enables us to cover four courses worth of material in two: introductory programming, systems, and algorithms and data structures. This means that if a course requires one or more of CMPUT 174, 175, 201, and 204 as pre-requisites, then these requirements are satisfied by taking the **CMPUT 274/275** sequence. Thus successfully completing **CMPUT 274/275 **enables you to take more advanced Computing Science courses sooner.

If you want to learn even more about **CMPUT 274/275 **then please look at the course notes.

*Important Note: *All BSc Honors Computing Science students must take CMPUT 274/275, and any BSc Specialization Students with prior programming experience should take them. CMPUT 274/275 cannot be taken if you have completed CMPUT 175, or any advanced computing courses. Enrollment is limited by the capacity of the combined lecture/lab facilities.