Experienced Computer Scientists analyze and solve computational problems at a level of abstraction that is beyond that of any particular programming language. This two-part class is designed to train students in the mathematical concepts and process of "Algorithmic Thinking", allowing them to build simpler, more efficient solutions to computational problems.

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.

Our course syllabus can be viewed at www.codeskulptor.org/coursera/algorithmicthinking.html.

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.

The first part of this course will consist of two two-week modules. Each module is comprised of a set of video lectures along with three assignments. The first assignment, a homework, emphasizes the mathematical portion of the module. The second assignment, a programming project, covers the programming aspects of the module. Finally, the third assignment, a peer assessment, focuses on a practical application that ties the mathematical and programming aspects of the module together.

**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!