### About The Course

When presented with a problem from a scientific domain, a Computer Scientist goes through a set of steps in order to provide a solution for the problem. These steps include: (1) understanding the problem; (2) formulating the problem mathematically; (3) designing an algorithm; (4) implementing the algorithm; and (5) solving the original scientific problem. This course will train students in how to employ algorithmic thinking by following these five steps to solve real-world problems.

Understanding the problem entails holding conversations with domain experts to understand the parameters of the problem, what data they can provide to the computer program, what answers they expect, etc. Formulating the problem mathematically is basically the step of turning the problem from an English description to a mathematical description that is amenable to further computational analyses.

While the course emphasizes implementing the algorithms and solving the original problems that gave rise to the need for these algorithms in the first place, much of this two-part course (part 2 is available here) will be devoted to the third step, namely, algorithm design. Here, the course will introduce students to different algorithm design strategies, as well as mathematical tools for reasoning about the correctness and efficiency of algorithms.

### Frequently Asked Questions

- Will I get a certificate after completing this class?

Students who enroll in Signature Track will receive a certificate signed by Luay, Scott, and Joe. Note that the class does not offer a Statement of Accomplishment to students who are not enrolled in Signature Track. - What resources will I need for this class?

The only requirement for the class is access to a modern web browser. All coding and program development will be done in a web-based programming environment that supports building applications in Python. The programs that you create will be saved, shared and graded via the cloud. -
What is the most useful thing I'll learn if I take this class?

The ability to think and solve computational problems at a higher level of abstraction, allowing you to create programs that are simpler and more efficient. - Where can I learn more about the Fundamentals of Computing Specialization?

You can learn more about this Specialization in the Specialization FAQs!

### Recommended Background

Prior mathematical and programming experience at the level of "Principles of Computing" (PoC). Students that have not taken PoC are welcome, but should be comfortable writing intermediate size (300+ line) programs in Python and have a basic
understanding of searching, sorting, and recursion. Students should also have a solid math background that includes algebra, pre-calculus and a familiarity with the math concepts covered in PoC. The first week of class will include material designed to help students accurately assess whether they have the necessary background to take this class.