CS Undergraduate Handbook (2022-2023) - CS 1030/1400/1420
University of Utah, School of Computing

Where to Start - CS 1030, 1400, or 1420

Welcome to computing at the University of Utah! The following advice is given to help you be successful and avoid common difficulties previous students have had when taking CS 1400 and CS 1410, or CS 1420. Wisely choosing your first CS course is essential to your success this semester and in the future. If your first course is too challenging, you may have to back up, retake classes, and add several extra semesters to your degree.

Use the following guide to help you choose the course sequence that is a good fit for you:

  1. The most common path for students is to take CS 1400 followed by CS 1410. This two-course sequence teaches students two of the most popular programming languages (Python followed by Java) and presents material at a pace designed to help inexperienced students make a successful start.

    Choose this course sequence if you are just getting started in a computing major, if you perform better when introduced to new topics at a comfortable pace, and/or if you appreciate extra class time to practice new skills. If you are new to college and need time to develop good study habits, this two-course sequence will help you stay on track. If you are looking to make connections with other students to help with studying, this sequence has activities to support this.

  2. The alternate path is CS 1420. This Java-only programming course is designed for students who arrive most prepared for a computing major.

    Choose this course if you are ready for an intensive introduction to programming. You will be required to complete substantive work at a faster pace (as we assume that you are prepared for this course). You are most likely to succeed in this course if you previous exposure to programming, you have a course load under 15 hours, your extracurricular/home/work time commitments will not interfere, and/or you have good study habits (time management, independence, etc.).

    Historically, the single-course path (CS 1420) has a significant number of students who drop, withdraw, or fail, as well as others who do not perform to the level they expect or find they do not have the time needed each week for coursework. (Do not choose this class for convenience or planning reasons -- be ready for it! Take the CS 1400/1410 sequence if you are not prepared for this course.)

If you feel that you need additional guidance, please reach out to either the undergraduate advisors (ugrad-help@cs.utah.edu) or the course instructors: Daniel Kopta (kopta@cs.utah.edu) for 1400 and Peter Jensen (pajensen@cs.utah.edu) for 1420.


Expanded Advice

Students pursuing a degree in computer science come from many backgrounds. Some took programming classes prior to attending the University of Utah, while others have just decided to learn about software. Likewise, some students place into advanced math courses, while others are just starting their journey. Regardless of your background, the variety of courses offered by the School of Computing are designed to meet you where you are.

Join the SoC Canvas Page

If you are planning to pursue CS and have not already done so, you must join the School of Computing Canvas page (where you will need to log in with your CIS credentials). At that point please click 'Enroll in Course'. All students are then encouraged to take the Pre-Major Survey.

What Course Should I Start In?

The School of Computing offers multiple entrance points based on past experience. Below are some of the courses a new student may want to take along with advice on which course to take:

  • CS 1030 - Foundations of Computer Science.

    This course offers a gentle introduction to, and background about, what computers do and how they work, as well as how they interpret software instructions (i.e., programs) to do useful work. Students who are brand new to computing may want to take this course. Further, students who are not pre-calculus ready could take this course while they get ready for Math 1080.

  • CS 1400 - Introduction to Computer Programming

    This course begins a two semester sequence (1400 then 1410) teaching students how to write programs. It is designed for students with no programming experience and is designed to give them the time and practice necessary to succeed in future CS courses.

  • CS 1420 - Accelerated Introduction to Object-Oriented Programming

    Students with strong problem solving and algebraic skills, strong academic skills, and/or previous programming experience have the option of completing the equivalence of CS 1400 and CS 1410 in a single semester. This course is rigorous and time consuming, but allows prepared students to jump start their academic program.

  • CS 2420 - Algorithms and Data Structures

    Typically no new student will take this course, as it has 1410 or 1420 as a prerequisite. Students who have taken the AP Computer Science A course in high school and passed the test with a 5, can move directly into this course. Transfer students who have taken a rigorous introduction to object-oriented programming course may also qualify to take this course first.

Below is more information about each course, as well as a list of questions you can ask yourself as you decide your best path forward.


Introductory Course Options

CS 1030 - Foundations of Computer Science

The material taught in CS 1030 helps prepare students for taking CS 1400 or CS 1420. It is for students who have no background in computing. CS 1030 provides a gentle introduction to the fundamental concepts of computer science. In particular, students learn problem-solving skills and apply them by writing programs in a visual and fun programming environment that is friendly to beginners. Students also study, simulate, and visualize the inner workings of a simple computer. CS 1030 gives students a sampling of what makes computer science an innovative and exciting field, preparing them for CS 1400 (or 1420) and the rest of a degree program.

The following are some of the expected outcomes for students completing CS 1030:

  • Students learn how to approach (simplified versions of) scientific problems. The problem-solving skills acquired include how to follow and compose algorithms, as well as, how to use variables, assignment, selection, repetition, and lists. Students gain experience solving problems and applying these concepts through the use of a beginner-friendly, graphical programming environment.
  • Students study and simulate the fundamental workings of a simple computer. Concepts of data representation, logic gates and Boolean algebra, and digital circuits are highlighted. Students "program" a simple computer (made up of RAM, registers, an ALU, and a control path) to solve simple problems in a variety of ways (including direct manipulation of the control path, machine language instructions, and assembly language instructions).
  • Students begin to understand abstraction as a crucial mental technique of devising simple models for complicated things by selectively ignoring details. Students observe abstraction at work in the simple computer and in problem-solving techniques.

CS 1400 - Introduction to Computer Programming

Programming is the art of describing the steps necessary to solve a problem in a way that a computer can understand them. This involves writing "code" that processes data. The code usually tells the computer to repeatedly make decisions until a final outcome is achieved. Unfortunately, as computers do not "speak our language", we must learn to speak "theirs".

CS 1400 introduces the basics of programming and leads to CS 1410, where more concepts, such as object-oriented programming, are introduced.

The following are some expected outcomes for students completing CS 1410. Students who complete the course will be able to:

  • Learn about variables, assignment, decision making, and repetition in computer programs.
  • Learn how to "abstract" away extraneous details and focus on "high-level" solutions and simple algorithms.
  • Use data to solve real problems, much like is done in the world.
  • Learn how to use a professional level development environment to write, test, and deploy code.

CS 1420 - Accelerated Introduction to Object Oriented Programming

CS 1420 is a course for students who are interested in jump starting their CS degree by completing the equivalent of 1400 and 1410 in one semester. Students who enroll in this class will need strong academic skills, mathematical understanding, and/or prior experience in computing. Students will very quickly learn to make use of assignment, conditionals, loops, and function calls to express simple algorithms. They will then work on more advanced object-oriented techniques. While all the programming in CS 1410 is done in Java, all of the fundamental concepts are applicable to programing in other languages.

The following are some of the expected outcomes for students completing CS 1410. Students will be able to:

  • Start with a problem statement and then design, implement, and test an object-oriented computer program that solves the problem.
  • Exploit procedural abstraction (non-recursive and recursive methods), data abstraction (classes), and polymorphism (inheritance and generics) as cornerstones of the program design process.
  • Leverage tools and techniques from software engineering (such as the Eclipse IDE, unit testing, pair programming, and documentation standards) to amplify their programming abilities.
  • Assess the basic efficiency of a simple algorithm.

Deciding on Your First Course

Deciding between 1030 and (1400/1420)

If you have some background in computing and are already familiar with many of the concepts mentioned in the description of CS 1030 (such as using variables, assignment, selection and repetition in problem solving; as well as, data representation, logic gates and Boolean algebra), you are likely ready for CS 1400 or 1420. Even if you have little background in computing, but have a strong problem-solving nature and have done well in your previous math courses, you may be ready for CS 1400 or 1420.

Deciding between 1400 or 1420

All students have the option to take (and thus the need to decide between) CS 1400 and CS 1420. Students will find that all CS courses (e.g., 1400, 1410, and 1420) require extensive time outside of the classroom; that being said, the more discipline, exposure, and background/experience they have, the smaller the time commitment will be.

For those students with the academic preparation, CS 1420 will reduce the on ramp to computer science by one semester. For those students who need the extra time to either "catch up" on their math requirements, or to full understand the nature of programming, CS 1400-1410 may be the best alternative.

Programming is an art and a science. Unlike many subjects where a partial understanding can be beneficial or useful, a "partial understanding" in programming will lead to, at best, faulty code, and at worst, many (many!) hours of time used in an unproductive fashion. Any gaps or misconceptions in understanding will lead to errors (and increase time requirements) down the road. Further, unlike when transitioning from a subject like "History of America" to a subject like "History of Ancient Rome", subsequent programming assignments and courses directly build upon every topic learned before. Thus, a student who only marginally understands the concepts in CS 1420, will find that CS 2420 can take double the normal 10-15 hours a week.

Thus CS 1400 allows students a (somewhat) lighter workload, but more importantly, twice as much time to master each concept as the semester goes on. By taking extra time "up front" in the programming sequence, the overall time necessary to excel in all future courses can be greatly reduced.

The Final Decision is Yours

The School of Computing places a great deal of trust in our students. We believe you will make the best decision based on your own background. Each student can choose either to start with CS 1030, CS 1400, or CS 1420. Below are a list of questions that will lend themselves to choosing. The more questions you can say "yes" to, the further along the course chain you may want to start.

  • Do you have strong academic habits, such as always doing your homework early without being prompted?
  • Do you already have a strong desire to major in $major_long_and_upper and build a career in Software and/or Computing?
  • Do you have a strong Math background, having excelled in Algebra, Trig, and/or Calculus?
  • When solving a homework question, do you typically read extra material unrelated to the direct answer and then go above and beyond when answering?
  • Did you graduate with a strong high school GPA?
  • Have you had some experience with programming, such as a programming camp or course?
  • Is school your "full time job"? (i.e., can you apply yourself to your school work 40+ hours a week)? Will you be "on campus" most days of most weeks?
  • Do you like solving problems? When you don't know the answer do you keep at it "as long as it takes" or do you find that you give up easily?
  • Are you open to asking a teacher (or teaching assistant) for help? Are you willing to seek out your professor during their office hours?

Remember, the School of Computing wants you to succeed! Talk to the SoC staff advisors and talk to the course instructors. Choose the course that you think is best for you, but if in the first weeks it doesn't seem right, switch to a different course.