We may earn an affiliate commission when you visit our partners.
Course image
Scott Rixner, Joe Warren, and Luay Nakhleh

This two-part course introduces the basic mathematical and programming principles that underlie much of Computer Science. Understanding these principles is crucial to the process of creating efficient and well-structured solutions for computational problems. To get hands-on experience working with these concepts, we will use the Python programming language. The main focus of the class will be weekly mini-projects that build upon the mathematical and programming principles that are taught in the class. To keep the class fun and engaging, many of the projects will involve working with strategy-based games.

Read more

This two-part course introduces the basic mathematical and programming principles that underlie much of Computer Science. Understanding these principles is crucial to the process of creating efficient and well-structured solutions for computational problems. To get hands-on experience working with these concepts, we will use the Python programming language. The main focus of the class will be weekly mini-projects that build upon the mathematical and programming principles that are taught in the class. To keep the class fun and engaging, many of the projects will involve working with strategy-based games.

In part 2 of this course, the programming portion of the class will focus on concepts such as recursion, assertions, and invariants. The mathematical portion of the class will focus on searching, sorting, and recursive data structures. Upon completing this course, you will have a solid foundation in the principles of computation and programming. This will prepare you for the next course in the specialization, which will begin to introduce a structured approach to developing and analyzing algorithms. Developing such algorithmic thinking skills will be critical to writing large scale software and solving real world computational problems.

Enroll now

What's inside

Syllabus

Searching and Data Structures
This week, we will explain the importance of searching. We will also explore various data structures and learn about inheritance.
Read more
Recursion
This week, we will explain the importance of recursion.
Trees
This week, we will explain the importance of trees. We will also explore how to set up game trees so that we can efficiently search them.
Modeling, Assertions, and Invariants
This week, we will explain the importance of modeling. We will also explore how to use assertions and invariants to ensure that our models are always consistent and correct.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Core audience includes absolute beginners who are looking to approach this topic for the first time
Intermediate learners can join to reinforce and expand their foundational knowledge and skillsets
Covers core concepts such as searching, trees, and recursion
Uses Python as the programming language which is highly relevant in industry and academia
Focus on hands-on projects helps learners apply concepts practically

Save this course

Save Principles of Computing (Part 2) to your list so you can find it easily later:
Save

Reviews summary

Challenging but rewarding python

According to students, Principles of Computing (Part 2) is challenging, but rewarding. The course is designed to help students gain a solid foundation in Python and computer science concepts like recursion and BFS. Students say the projects are well-designed and force them to think independently. While some students found the course material difficult, many say that they learned a lot and gained confidence in their coding abilities.
Learners gain a solid foundation in Python and computer science concepts.
"This course is perfect. It helped me to step into Python in a very interesting way."
"Helped me gain a lot of insight on Python coding."
Projects are well-designed and require independent thinking.
"The projects are carefully designed in that they don't hold their hand out while one writes the code."
"The final project requires you to independently think and write 200+ Lines of code easily."
Course topics are tough but rewarding.
"Challenging, but I learned so much."
"A big step up in terms of difficulty compared to the rest of the specialization."
"This was easily one of the hardest Programming courses I have taken."
Some weeks may take longer than a week.
"Interesting, but challenging course. Some weeks might take longer than a week, but don't give up."
"little bit hard to solve the assignment"

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Principles of Computing (Part 2) with these activities:
Create a comprehensive study guide
Organize and review course materials to create a study guide that will help you prepare for exams and assignments.
Show steps
  • Gather all relevant course materials.
  • Review the materials and identify key concepts.
  • Create a summary of each topic.
  • Include examples and practice questions.
Participate in study groups
Collaborate with other students to discuss course concepts, solve problems, and share knowledge.
Show steps
  • Find a study group or create your own.
  • Meet regularly to discuss the course material.
  • Work together to solve problems.
  • Share resources and knowledge.
Read 'Introduction to Algorithms'
Gain a deeper understanding of fundamental algorithms and data structures by reading the classic textbook 'Introduction to Algorithms'.
Show steps
  • Read one chapter per week.
  • Summarize the key concepts in your own words.
  • Solve the practice problems at the end of each chapter.
  • Discuss the book with other students or online communities.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Follow tutorials on recursion and data structures
Deepen your understanding of recursion and data structures by following guided tutorials and applying them to coding exercises.
Browse courses on Recursion
Show steps
  • Search for tutorials on recursion and data structures.
  • Choose a tutorial that aligns with your learning style.
  • Follow the tutorial step-by-step.
  • Complete the coding exercises.
  • Review the concepts and apply them to your own projects.
Solve Python programming challenges
Practice solving Python programming challenges to solidify your understanding of programming concepts like iteration, conditionals, and data structures.
Browse courses on Python Programming
Show steps
  • Choose a challenge website or book.
  • Start with easier challenges and gradually increase the difficulty.
  • Break down the problem into smaller steps.
  • Implement your solution in Python.
  • Test your solution and debug any errors.
Develop a game using recursion and data structures
Apply your knowledge of recursion and data structures to create a game that demonstrates these concepts.
Browse courses on Game Development
Show steps
  • Design the game and choose the appropriate data structures.
  • Implement the game logic using recursion.
  • Test the game and debug any errors.
  • Share your game with others.
Contribute to open-source projects related to programming
Gain hands-on programming experience and contribute to the community by volunteering for open-source projects.
Browse courses on Open Source
Show steps
  • Find open-source projects related to your interests.
  • Review the project documentation and code.
  • Identify an area where you can contribute.
  • Submit a pull request with your changes.
  • Collaborate with other contributors to enhance the project.

Career center

Learners who complete Principles of Computing (Part 2) will develop knowledge and skills that may be useful to these careers:
Computer Programmer
Computer Programmers write, debug, test, and maintain the code that runs computers and applications. They design and implement algorithms and data structures to solve problems. This course provides a solid foundation in the principles of computation and programming. It can help Computer Programmers develop the skills needed to write efficient and well-structured code. The programming portion of this course will cover topics such as recursion, assertions, and invariants. These skills are essential for writing large scale software and solving real world computational problems.
Software Developer
Software Developers write, debug, test, and maintain code. They design high-level system requirements and turn these low-level design specifications. This course may help prepare you for this role by teaching you programming principles including recursion, assertions, and invariants. These are concepts that are essential to creating correct and efficient software. Additionally, this course teaches students Python, a programming language that is commonly used by Software Developers.
Data Scientist
Data Scientists gather, analyze, and interpret data to find patterns, trends, and insights. They use this information to make informed decisions about products, services, and strategies. This course can help you build skills that are essential for this role, such as data modeling, data analysis, and programming. Specifically, this course teaches the fundamentals of searching, sorting, and recursive data structures. These skills can help a Data Scientist be more effective at working with data.
Web Developer
Web Developers design and develop websites and web applications. They work with a variety of programming languages and technologies to create websites that are both functional and visually appealing. This course may be helpful for Web Developers who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code. Additionally, this course teaches Python, a programming language that is commonly used for web development.
Database Administrator
Database Administrators manage and maintain databases. They ensure that databases are running smoothly and that data is secure and accessible. This course may be useful for Database Administrators who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for managing databases.
Network Administrator
Network Administrators design, implement, and maintain computer networks. They work with a variety of hardware and software to ensure that networks are running smoothly and efficiently. This course may be helpful for Network Administrators who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for network administration tasks.
Information Security Analyst
Information Security Analysts protect computer systems and networks from unauthorized access, use, disclosure, disruption, modification, or destruction. They develop and implement security measures to protect data and ensure that systems are running smoothly. This course may be helpful for Information Security Analysts who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for security applications.
Computer Systems Analyst
Computer Systems Analysts design, implement, and maintain computer systems. They work with a variety of software and hardware to ensure that systems are running smoothly and efficiently. This course may be helpful for Computer Systems Analysts who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for system administration tasks.
Software Quality Assurance Analyst
Software Quality Assurance Analysts test and evaluate software to ensure that it meets requirements and is free of defects. They work with developers to identify and fix bugs. This course may be helpful for Software Quality Assurance Analysts who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for testing and debugging software.
Systems Analyst
Systems Analysts design, implement, and maintain business systems. They work with a variety of software and hardware to ensure that systems are running smoothly and efficiently. This course may be helpful for Systems Analysts who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for system analysis tasks.
Computer Teacher
Computer Teachers teach students about computers and programming. They work with students of all ages to develop their computer literacy skills. This course may be helpful for Computer Teachers who want to learn more about the principles of computation and programming. It can help them teach their students more effectively.
Data Analyst
Data Analysts collect, analyze, and interpret data to find patterns, trends, and insights. They use this information to make informed decisions about products, services, and strategies. This course may be helpful for Data Analysts who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for data analysis tasks.
Mathematician
Mathematicians conduct research in mathematics and develop new mathematical theories and techniques. They use mathematics to solve problems in a variety of fields, including science, engineering, and business. This course may be useful for Mathematicians who want to learn more about the principles of computation and programming. It can help them develop more efficient and well-structured mathematical algorithms.
Game Developer
Game Developers design and develop video games. They work with a variety of software and hardware to create games that are both fun and challenging. This course may be helpful for Game Developers who want to learn more about the principles of computation and programming. It can help them write more efficient and well-structured code for game development.
Technical Writer
Technical Writers create documentation for software, hardware, and other technical products. They work with engineers and other technical professionals to gather information and write clear and concise documentation. This course may be helpful for Technical Writers who want to learn more about the principles of computation and programming. It can help them write more technical documentation that is accurate and easy to understand.

Reading list

We've selected 13 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Principles of Computing (Part 2).
Classic textbook on algorithms and is widely used in computer science courses at universities worldwide. It provides a comprehensive overview of fundamental algorithms and data structures, and valuable reference for students and professionals alike.
Provides a comprehensive introduction to data structures and algorithms in Python. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Comprehensive introduction to algorithms and data structures. It is written in a clear and engaging style, and is suitable for both beginners and experienced programmers.
Provides a concise and accessible introduction to the fundamental concepts of computer science. It is written in a clear and engaging style, and is suitable for both beginners and experienced programmers.
Provides a comprehensive guide to the technical and behavioral aspects of programming interviews. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Collection of short essays on programming techniques and algorithms. It is written in a clear and engaging style, and is suitable for both beginners and experienced programmers.
Multi-volume encyclopedia of computer science. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Provides a comprehensive introduction to mathematical concepts used in computer science. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Provides a comprehensive introduction to discrete mathematics. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Provides a comprehensive introduction to set theory. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Provides a comprehensive introduction to category theory for programmers. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.
Provides a comprehensive introduction to computability and complexity. It is written in a clear and concise style, and is suitable for both beginners and experienced programmers.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Principles of Computing (Part 2).
Principles of Computing (Part 1)
Most relevant
Algorithmic Thinking (Part 2)
Most relevant
Algorithmic Thinking (Part 1)
Most relevant
Introduction to Quantum Computing for Everyone
Creative Coding for Designers Using Python
408: Advanced Artificial Intelligen
Introduction to Mathematics for Finance and Business
Four Facets of Contemporary Japanese Architecture:...
Optimization with GAMS: Operations Research Bootcamp A-Z
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser