Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Coursera

The C++ Programmer's Mindset

Packt via Coursera

Overview

Google, IBM & Meta Certificates – 40% Off
One Coursera Plus subscription covers most Professional Certificates on Coursera.
Unlock All Certificates
Learn how to use the computational thinking framework and modern C++ features to tackle complex programming challenges and build scalable, reusable solutions. Develop a problem-solving mindset that sets you apart. This resource equips C++ developers with the tools to think like computer scientists, using computational thinking to solve complex problems. It bridges theory and practice, helping you build efficient, scalable, and maintainable code through real-world examples and modern C++ techniques. This course is ideal for intermediate C++ developers, software engineers, and computer science students looking to enhance their problem-solving skills. A basic understanding of C++ syntax is required to get the most out of the content. This course starts by introducing the computational thinking framework, followed by a deeper dive into abstraction, algorithms, and data structures all illustrated by small examples. Then we explore a large case study, covering each challenge in detail before reflecting on the full solution. We conclude with ways to accelerate your code using parallelism and CUDA, and by profiling your code. This course is based on The C++ Programmer's Mindset, by Sam Morley. Packt is one of the world's most prolific publishers of cutting-edge technical content. For over two decades we've made it our mission to curate and publish the knowledge of only the very best technical experts. We focus on real-world courses that help our customers get the job done, with coverage that extends across a wide range of established and cutting-edge technical topics. If you're an individual or an organisation that embraces learning by doing, Packt is the perfect fit for you.

Syllabus

  • Thinking Computationally
    • This module introduces the core principles of computational thinking, including problem decomposition, pattern recognition, and algorithm design. Learners will develop skills to break down complex problems into manageable parts and apply structured approaches to solve them effectively. The content also covers practical aspects of algorithm characteristics and error handling in programming.
  • Abstraction in Detail
    • This module explores the concept of abstraction in C++ through functions, classes, and templates, showing how to design efficient and reusable code. Learners will gain an understanding of when and how to apply abstraction mechanisms to solve complex programming problems. The focus is on implementing abstractions that enhance code organization and maintainability.
  • Algorithmic Thinking and Complexity
    • This module covers key concepts in algorithmic thinking, including how to analyze and design efficient algorithms, understand computational complexity, and apply techniques like divide and conquer and optimization. Learners will develop skills in evaluating algorithm performance and selecting appropriate methods for various problem types.
  • Understanding the Machine
    • This module provides an in-depth exploration of computer hardware and its impact on software performance. Learners will gain a clear understanding of processor architectures, memory hierarchies, and key optimization techniques such as SIMD and branch prediction. The module equips students with the knowledge to write more efficient and performant code.
  • Data Structure
    • This module explores various data structures and their implementation in C++, focusing on memory management, container types, and performance characteristics. Learners will gain an understanding of how to effectively use and manage data in different scenarios.
  • Reusing Your Code and Modularity
    • This module covers strategies for creating reusable C++ code through modularity, focusing on designing stable interfaces, managing dependencies, and using C++ modules to organize large projects effectively.
  • Outlining the Challenge
    • This module explores how to break down a large, complex problem into manageable components, focusing on data handling, clustering, and integration. Learners will develop skills in identifying challenges, designing modular solutions, and constructing cohesive datasets. The module emphasizes the importance of maintaining a holistic perspective while working on technical tasks.
  • Building a Simple Command-Line Interface
    • This module explores how to build and configure a robust command-line interface, including logging, error handling, and output formatting. Learners will gain practical skills in managing user interactions and ensuring reliable application behavior through real-world implementation examples.
  • Reading Data from Different Formats
    • This module covers the process of reading and parsing data from different file formats, with a focus on CSV and JSON. Learners will learn to design consistent interfaces, implement file type dispatching, and write tests for their code. The module emphasizes practical skills in data handling and software development.
  • Finding Information in Text
    • This module teaches how to extract meaningful information from unstructured text files using regular expressions and custom parsing strategies. Learners will gain hands-on experience with implementing a FileReader, designing regex patterns for dates and coordinates, and writing tests to validate their solutions. The focus is on developing robust text-processing techniques for real-world data.
  • Clustering Data
    • This module introduces the k-means clustering algorithm and its application to geographic data analysis. Learners will explore techniques for determining the optimal number of clusters and validate their implementations through testing. The focus is on building and evaluating clustering solutions for real-world data.
  • Reflecting on What We Have Built
    • This module guides learners through testing their application with sample data, analyzing challenges in implementation, and reflecting on lessons learned to improve future projects. It emphasizes the importance of evaluation and iterative development in software building.
  • The Problems of Scale
    • This module examines the challenges of scaling computational systems, including data access control, inter-process communication, and bottleneck identification. Learners will gain insights into managing distributed systems and optimizing performance through synchronization and resource allocation strategies.
  • Dealing with GPUs and Specialized Hardware
    • This module introduces learners to GPU architecture and parallel programming techniques, covering essential tools like CUDA C++, SYCL, and Thrust. It emphasizes thread coordination, memory management, and cross-device development strategies, providing hands-on knowledge for optimizing performance on specialized hardware.
  • Profiling Your Code
    • This module covers techniques for profiling code to improve performance, focusing on identifying memory bottlenecks, analyzing slow computations, and using tools like perf to optimize application speed and efficiency.

Taught by

Packt - Course Instructors

Reviews

Start your review of The C++ Programmer's Mindset

Never Stop Learning.

Get personalized course recommendations, track subjects and courses with reminders, and more.

Someone learning on their laptop while sitting on the floor.