We may earn an affiliate commission when you visit our partners.
Course image
Jonas Latt, Bastien Chopard, and Jean-Luc Falcone

Learn how to write efficient, maintainable C++ code for data-intensive applications in this hands-on course. Key application areas include scientific simulation software, statistical data processing, and computer graphics.

You’ll begin by exploring how modern C++ supports high-efficiency programming and review the principles of a central piece of hardware in data-intensive applications: computer memory.

Read more

Learn how to write efficient, maintainable C++ code for data-intensive applications in this hands-on course. Key application areas include scientific simulation software, statistical data processing, and computer graphics.

You’ll begin by exploring how modern C++ supports high-efficiency programming and review the principles of a central piece of hardware in data-intensive applications: computer memory.

Next, the course shifts to software design. You’ll examine performance shortcomings of traditional object-oriented programming and dive into data-oriented perspective, which improves performance by structuring code around the data itself. You’ll learn how this paradigm overcomes bottlenecks and leads to more scalable, high-performance solutions.

Finally, you’ll apply these principles to modern multi-threaded systems. Through hands-on experience you will learn to use C++'s built-in parallel features to target both multi-core CPUs and GPUs.

Enroll now

Here's a deal for you

Save money when you learn with a deal that may be relevant to this course.
All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Syllabus

Refresher: Basics of modern C++ and class-based polymorphism
To follow this MOOC, you should be familiar with the fundamentals of the C++ language. In this first module however, you will find a refresher on the most important concepts needed to complete the course. You will (re)discover variable types (stack variables, references, smart pointers), containers and algorithms, classes and polymorphism. If you already master these notions but your knowledge predates the C++11 standard, we still encourage you to follow this module for up-to-date recommendations on the efficient use of C++. In particular, have a look at Lesson 4 if you are not yet familiar with the notion of ranges in C++20 and later versions.
Read more

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Activities

Coming soon We're preparing activities for Data-Oriented C++ in Scientific Programming. These are activities you can do either before, during, or after a course.

Career center

Learners who complete Data-Oriented C++ in Scientific Programming will develop knowledge and skills that may be useful to these careers:
Scientific Software Engineer
As a Scientific Software Engineer, you develop, maintain, and optimize software for scientific research and simulation, directly aligning with this course's focus. The course emphasizes creating efficient, maintainable C++ code for data-intensive applications, including scientific simulation software. You will learn to overcome performance shortcomings of traditional object-oriented programming by adopting a data-oriented perspective, improving scalability and ensuring high-performance solutions crucial for complex scientific computations. Practical experience with C++'s parallel features for multi-core CPUs and GPUs will enable you to build tools that efficiently process vast datasets and run intricate models, making this course an essential step for aspiring Scientific Software Engineers.
Computer Graphics Software Engineer
A Computer Graphics Software Engineer develops the algorithms and software tools for creating and manipulating digital images and 3D environments. This course provides essential skills for a Computer Graphics Software Engineer by focusing on efficient, maintainable C++ code for data-intensive applications, explicitly citing computer graphics as a key area. You will gain a thorough understanding of computer memory and learn a data-oriented perspective, which is critical for optimizing renderers and simulation engines by structuring data efficiently. Practical experience using C++'s parallel features to target multi-core CPUs and GPUs is paramount for accelerating rendering pipelines and achieving real-time interactive graphics.
Rendering Engineer
A Rendering Engineer specializes in developing the graphics pipelines and visual systems that bring digital worlds to life, a domain absolutely dependent on extreme performance. This course provides invaluable skills for a Rendering Engineer by teaching how to write efficient C++ code specifically for data-intensive applications like computer graphics. You will learn to optimize performance by understanding memory access patterns and implementing a data-oriented design. This approach improves how visual data is processed, overcoming bottlenecks. Crucially, the practical experience gained with C++'s built-in parallel features for multi-core CPUs and GPUs directly translates to creating the highly optimized, scalable rendering solutions required for realistic and interactive graphics.
Computational Scientist
A Computational Scientist applies advanced computing techniques to solve complex problems across scientific disciplines, heavily relying on high-performance simulation and data analysis. This course directly addresses the core needs of a Computational Scientist by teaching how to write efficient, maintainable C++ code for data-intensive applications, including scientific simulation software. You will learn to optimize performance through a deep understanding of computer memory and by applying a data-oriented perspective. The course's focus on C++'s parallel features, targeting multi-core CPUs and GPUs, is essential for accelerating large-scale computations and simulations, making it instrumental for advancing scientific discovery. This role typically requires an advanced degree, such as a PhD.
High-Performance Computing Engineer
A High Performance Computing Engineer designs and optimizes software solutions to achieve maximum computational speed for complex problems across various domains. This course deeply aligns with the needs of this specialized field by focusing on writing efficient, maintainable C++ code for data-intensive applications. You will develop highly scalable solutions by mastering modern C++ features, understanding computer memory intricacies, and applying data-oriented design principles to overcome performance bottlenecks. The hands-on experience with C++'s built-in parallel features, targeting multi-core CPUs and GPUs, is particularly relevant for creating the cutting-edge, high-speed applications central to high performance computing. This experience will strengthen your ability to build robust, performant systems, making it an excellent foundation for an HPC Engineer career.
Research and Development Software Engineer
A Research and Development Software Engineer explores new technologies, designs innovative solutions, and optimizes complex systems, often pushing the boundaries of what's possible. This course is exceptionally well-suited for a Research and Development Software Engineer, focusing on writing efficient, maintainable C++ code for data-intensive applications. You will learn to tackle performance challenges by understanding computer memory, adopting a data-oriented perspective, and overcoming traditional bottlenecks. The hands-on experience with C++'s parallel features, targeting multi-core CPUs and GPUs, is crucial for prototyping and implementing high-speed computational solutions that are at the heart of R&D efforts. This role often requires an advanced degree.
Physics Engine Developer
A Physics Engine Developer creates the software responsible for simulating realistic physical interactions in applications like games or scientific models. This specialized role demands extreme performance and optimization, areas where this course excels. Learners will gain the ability to write efficient C++ code for data-intensive applications, directly applicable to complex physics calculations. By understanding computer memory and employing a data-oriented perspective, you can design physics engines that minimize bottlenecks and maximize scalability. The hands-on work with C++'s parallel features for multi-core CPUs and GPUs is crucial for distributing intensive calculations, enabling the development of responsive and highly accurate physics simulations.
Game Engine Programmer
A Game Engine Programmer develops the core software architecture that powers video games, a field where performance and efficiency are paramount. The course's focus on writing efficient, maintainable C++ code for data-intensive applications, explicitly mentioning computer graphics, is directly applicable. Understanding computer memory principles and adopting a data-oriented perspective to structure code around data will significantly enhance your ability to build high-performance, responsive game engines. Furthermore, hands-on experience with C++'s built-in parallel features to target multi-core CPUs and GPUs is essential for optimizing rendering, physics, and gameplay systems, preparing you to create the robust and scalable solutions demanded by modern game development.
Quantitative Developer
A Quantitative Developer builds sophisticated models and high-performance trading systems or analytical tools within finance. This role demands exceptional proficiency in writing efficient C++ code, especially for data-intensive applications, which is precisely what this course provides. Understanding how to structure code around data to improve performance, as taught through the data-oriented perspective, is crucial for developing low-latency and scalable financial applications. The course's deep dive into memory optimization and utilizing C++'s parallel features for multi-core CPUs and GPUs will directly equip you to create the high-speed, robust systems required in quantitative finance. This field often requires an advanced degree, such as a Master's or PhD.
Systems Software Engineer
A Systems Software Engineer develops low-level software, such as operating system components, device drivers, or utility programs, where performance and resource efficiency are paramount. This course directly contributes to the skills needed by a Systems Software Engineer, emphasizing writing efficient C++ code and a deep understanding of hardware interaction. The detailed exploration of computer memory and how to translate this knowledge into clearly structured, efficient code is fundamental for this role. Learning a data-oriented perspective significantly improves the performance of system-level software, overcoming traditional bottlenecks. Additionally, compile-time code execution offers strategies for offloading complexity, leading to simpler and more efficient execution paths.
Machine Learning Systems Engineer
A Machine Learning Systems Engineer builds and optimizes the infrastructure and low-level components that power machine learning models. This course provides a strong foundation for a Machine Learning Systems Engineer by focusing on writing efficient C++ code for data-intensive applications. Understanding memory access patterns and utilizing a data-oriented perspective to structure code around data directly translates to optimizing computational graphs and inference engines for performance. The course's hands-on experience with C++'s built-in parallel features for multi-core CPUs and GPUs is particularly valuable for accelerating numerical computations and deploying models efficiently, especially in high-throughput or real-time scenarios. This field often prefers an advanced degree.
embedded systems developer
An Embedded Systems Developer designs and implements software for specialized computing systems, often with strict memory and processing power constraints. This course provides highly relevant skills for an Embedded Systems Developer, emphasizing writing efficient C++ code for data-intensive applications. The deep dive into computer memory principles and translating this knowledge into clearly structured, efficient code is directly applicable for optimizing resource usage in constrained environments. Furthermore, concepts of compile-time code execution, which offload complexity to the compilation stage, can lead to simpler and more efficient execution environments crucial for embedded systems. Adopting a data-oriented perspective can also improve performance on such hardware.
Compiler Developer
A Compiler Developer designs and implements compilers and related tools that translate source code into machine-executable instructions. This course provides a strong foundation for a Compiler Developer by offering a deep understanding of C++ language features and performance optimization techniques. The module on compile-time code execution, which focuses on offloading complexity to the compilation stage to keep the execution environment simple and efficient, is directly relevant to compiler design principles. Furthermore, the course's emphasis on memory optimization, data-oriented design, and efficient C++ programming helps understand how to generate highly optimized machine code and build efficient compiler infrastructure. This role often prefers an advanced degree.
Bioinformatics Programmer
A Bioinformatics Programmer develops software tools and algorithms to analyze large biological datasets, a field that increasingly requires high-performance computing. This course provides a strong foundation for a Bioinformatics Programmer by focusing on writing efficient C++ code for data-intensive applications, including statistical data processing. Understanding computer memory principles and applying a data-oriented perspective for structuring code can significantly improve the performance and scalability of genomic or proteomic analysis tools. The experience with C++'s parallel features for multi-core CPUs and GPUs will enable you to process vast datasets more rapidly, overcoming computational challenges common in bioinformatics. An advanced degree is often beneficial for this role.
Data Infrastructure Engineer
A Data Infrastructure Engineer designs and builds scalable systems for collecting, processing, and storing large volumes of data. This course provides valuable insights for a Data Infrastructure Engineer, particularly when dealing with performance-critical components. By mastering efficient C++ code for data-intensive applications, you can develop optimized data pipelines and processing engines. The focus on understanding computer memory and utilizing a data-oriented perspective helps design systems that overcome bottlenecks, ensuring high throughput and low latency. Furthermore, applying C++'s parallel features to multi-core CPUs and GPUs is essential for building highly performant data processing frameworks capable of handling massive workloads.

Reading list

We haven't picked any books for this reading list yet.
Provides a collection of 42 specific guidelines for writing effective modern C++ code. These guidelines cover a wide range of topics, from basic coding practices to advanced design techniques.
Provides a comprehensive overview of C++ templates, covering everything from the basics to advanced topics such as metaprogramming. It great resource for both beginners and experienced C++ programmers who want to learn more about templates.
Provides a comprehensive overview of C++ concurrency, covering everything from the basics to advanced topics such as thread synchronization and parallelism. It great resource for both beginners and experienced C++ programmers who want to learn more about concurrency.
Provides a collection of 55 specific guidelines for writing effective C++ code. These guidelines cover a wide range of topics, from basic coding practices to advanced design techniques.
Provides a comprehensive overview of modern C++ design, covering topics such as generic programming, design patterns, and metaprogramming. It great resource for both beginners and experienced C++ programmers who want to learn more about modern C++ design.
Provides a comprehensive overview of C++ templates, covering everything from the basics to advanced topics such as metaprogramming. It great resource for both beginners and experienced C++ programmers who want to learn more about templates.
Provides a comprehensive overview of the C++ programming language, covering everything from basic syntax to advanced topics such as templates and the Standard Template Library (STL). It great resource for both beginners and experienced C++ programmers.
Provides a comprehensive overview of different architectures used in parallel computing, as well as programming models, and their applications.
Focuses on programming high-performance computers and great resource for learning parallel programming models and techniques.
Introduces concepts that are especially relevant to scientific computing, such as programming models, linear algebra for HPC, and the numerical solution of partial differential equations.
Combines scientific computing with MATLAB and Octave. It teaches the basics of scientific computing and gives readers the opportunity to gain proficiency in a high-level programming language.
Is for those who want to learn about OpenMP, which is an API and a set of compiler directives that can be used to parallelize applications.
Is great for a general overview of the fundamentals of parallel computing, such as basic concepts of parallel computing, and parallel algorithms. These topics underlie and form the foundation of High-Performance Computing.
Focuses on MPI, which popular programming model for parallel computing. It provides a comprehensive overview of MPI, including its features and how to use it.
This comprehensive textbook covers a wide range of parallel programming techniques using various platforms, including networked workstations and parallel computers. It emphasizes practical applications and provides hands-on exercises. (fit_score: 75, difficulty_score: 80)
This practical guide focuses on programming techniques for massively parallel processors, covering topics such as vectorization, multithreading, and distributed memory programming. It includes hands-on exercises and case studies to reinforce concepts. (fit_score: 80, difficulty_score: 75)
This classical textbook provides an accessible introduction to parallel computing. It covers fundamental concepts, programming models, and algorithms, making it ideal for students and professionals alike. (fit_score: 90, difficulty_score: 60)

Share

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

Similar courses

Similar courses are unavailable at this time. Please try again later.
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 - 2025 OpenCourser