Skip to content
Nathan Perkins edited this page Dec 3, 2017 · 22 revisions

CS 165 - ACCELERATED INTRODUCTION TO COMPUTER SCIENCE

Official Description

Overview of the fundamental concepts of computer science. Introduction to problem solving, algorithm development, data types, and basic data structures. Introduction to analysis of algorithms and principles of software engineering. System development and computer programming using procedural/object-oriented paradigms.

Quick Info

  • 8 units (replaces CS 161 and CS 162)
  • Prereq Courses: none (there might be a math placement test requirement, ask your advisor)
  • Languages: C++ and some makefile

General Links

Class Links

  • Canvas (main course information)
  • Piazza (online discussion)
  • Mimir (assignment submission)
  • TEACH (for flip account and other resources)

Warning! Consider taking CS 161 instead!

CS 165 is intended for students that already have experience with programming and/or have a LOT of time. There are a few official and unofficial online resources that show how much time that students spent on this class. Keep in mind that many of those students already know how to program fairly well and did not need to spend extensive time studying the concepts. If you are coding for the first time, CS 161 will be a much gentler introduction and CS 162 will dive into the concepts with more depth, leaving you better prepared for the rest of the program. The professor might give a similar warning at the beginning of the course.

Tips From Other Students

  • Join Slack for a great community of students helping each other!
  • Compile with these g++ options to get as many warnings about potential issues as possible -std=c++11 -g -Wall -pedantic -Wextra -Wno-c++11-extensions
  • Complete assignments early and come back to them with fresh eyes to refactor things and squash bugs.
  • Chapter 11 has a lot of material. Try to get a head start on it during the two weeks before, which are relatively short and easy.
  • Try to help other students by explaining concepts and helping them debug. It will help you learn the material better.
  • Read the assignment specifications very carefully. If something is mentioned in the spec, make sure that it is accounted for and tested in your program. If a function or special behavior is not mentioned in the specification, it is very likely that you do not have to implement it or worry about it. You can always ask on Piazza if you are unsure.
  • Learn to use git, and commit often while working on assignments. Optionally, push your assignments to a private GitHub repository.
  • Use PythonTutor to step through your code step by step and help you understand how things work.
  • Experiment with a few IDEs and code editors.
  • Some IDEs use compilers that cover up for some small mistakes by default and flip/mimir are not as lenient. In addition, you will not have your IDE to point out bad syntax or code warnings when you are working on your exams. It might be good to use a simple editor without those features in this class so that you are better prepared for exams.
  • macOS uses the LLVM compiler by default, even though you invoke it using the g++ command. You can install g++ so that your environment more closely matches flip/Mimir.
  • Test your code on flip before submission. This is easiest to do when you're utilizing git because you can easily replicate your code by pulling from GitHub, without having to mess with SCP.
  • Testing, testing, 1 2 3. Testing is the most important part of programming. Test your program thoroughly before you even consider submitting to Mimir. Your tests should work on all expected behavior and return paths of all the classes and functions in your program.
  • The visible test on Mimir is NOT a complete test. Just because Mimir passes does not mean your program won't fail on the hidden tests.
  • Once you've gotten a handle on headers and multi-file projects, learn how to implement automated tests and makefiles. These will save you a ton of time.
  • Once you've learned automated testing, write your tests before your implementation. Confirm that they fail and then code the implementation until they pass. You don't have to do the entire program at once, just one function or behavior at a time.

Recommended Outside Resources