Nanodegree key: nd213
Version: 5.0.0
Locale: en-us
Learn C++, a high-performance programming language used in the world's most exciting engineering jobs -- from self-driving cars and robotics, to web browsers, media platforms, servers, and even video
Content
Part 01 : Welcome
-
Module 01:
Orientation
-
Lesson 02: Introduction to C++
C++ is one of the most important programming languages in the world. It is particularly important for high-performance software.
-
Lesson 03: Workspaces
Lean about the in-browser coding environments that are available to you as you go through the Nanodegree program.
-
Module 02:
Career Support
-
Lesson 01: Get Help with Your Account
What to do if you have questions about your account or general questions about the program.
-
Lesson 02: Knowledge, Community, and Careers
You are starting a challenging but rewarding journey! Take 5 minutes to read how to get help with projects and content.
-
Part 02 : Foundations
-
Module 01:
Foundations
-
Lesson 01: Welcome
Meet your instructors, David and Stephen, and hear from the inventor of C++, Bjarne Stroustrup.
-
Lesson 02: Introduction to the C++ Language
In this lesson, you will build on your previous programming experience to learn the basics of the C++ language.
- Concept 01: Intro
- Concept 02: CODE: Write and Run Your First C++ Program
- Concept 03: Compiled Languages vs Scripted Languages
- Concept 04: C++ Output and Language Basics
- Concept 05: CODE: Send Output to the Console
- Concept 06: How to Store Data
- Concept 07: Bjarne Introduces C++ Types
- Concept 08: Primitive Variable Types
- Concept 09: What is a Vector?
- Concept 10: C++ Vectors
- Concept 11: C++ Comments
- Concept 12: Using Auto
- Concept 13: CODE: Store a Grid in Your Program
- Concept 14: Getting Ready for Printing
- Concept 15: Working with Vectors
- Concept 16: For Loops
- Concept 17: Functions
- Concept 18: CODE: Print the Board
- Concept 19: If Statements and While Loops
- Concept 20: Reading from a File
- Concept 21: CODE: Read the Board from a File
- Concept 22: Processing Strings
- Concept 23: Adding Data to a Vector
- Concept 24: CODE: Parse Lines from the File
- Concept 25: CODE: Use the ParseLine Function
- Concept 26: Formatting the Printed Board
- Concept 27: CODE: Formatting the Printed Board
- Concept 28: CODE: Store the Board using the State Enum
- Concept 29: Great Work!
-
Lesson 03: A* Search
In this lesson, you will learn about the A* search algorithm. Over a sequence of exercises, you will use your A* search implementation to plan a path through the obstacles in the ASCII board.
- Concept 01: Intro
- Concept 02: Motion Planning
- Concept 03: Maze
- Concept 04: Maze 2
- Concept 05: Coding the Shortest Path Algorithm
- Concept 06: A* Search
- Concept 07: Lesson Code Structure
- Concept 08: CODE: Starting A* Search
- Concept 09: CODE: Writing the A* Heuristic
- Concept 10: Pass by Reference in C++
- Concept 11: CODE: Adding Nodes to the Open Vector
- Concept 12: CODE: Initialize the Open Vector
- Concept 13: CODE: Create a Comparison Function
- Concept 14: CODE: Write a While Loop for the A* Algorithm
- Concept 15: CODE: Check for Valid Neighbors
- Concept 16: Constants
- Concept 17: CODE: Expand the A* Search to Neighbors
- Concept 18: Arrays
- Concept 19: CODE: Adding a Start and End to the Board
- Concept 20: Congratulations!!
- Concept 21: How to Become More Proficient at C++
-
Lesson 04: Writing Multifile Programs
In this lesson, you will learn the syntax for C++ language features that you will need for the next steps in the course. This includes an overview of header files, pointers, build tools, and classes.
- Concept 01: Intro
- Concept 02: Header Files
- Concept 03: Using Headers with Multiple Files
- Concept 04: Bjarne on Build Systems
- Concept 05: CMake and Make
- Concept 06: References
- Concept 07: Pointers
- Concept 08: Pointers Continued
- Concept 09: Bjarne on pointers
- Concept 10: References vs Pointers
- Concept 11: Bjarne on References
- Concept 12: Maps
- Concept 13: Classes and Object-Oriented Programming
- Concept 14: Classes and OOP Continued
- Concept 15: This Pointer
- Concept 16: How Long Does it Take to Learn C++?
- Concept 17: Outro
-
Lesson 05: Build an OpenStreetMap Route Planner
In this project you will extend the IO2D map display code to use A*, so your program will be able to find a path between two points on the map.
- Concept 01: Project Intro
- Concept 02: The OpenStreetMap Project
- Concept 03: Building and Running
- Concept 04: Testing
- Concept 05: Project Code Overview
- Concept 06: Project Starter Repository
- Concept 07: The src Directory
- Concept 08: The src Directory Additional Files
- Concept 09: Steps to Complete the Project
- Concept 10: Project Submission and Workspace
-
Part 03 : Object-Oriented Programming
-
Module 01:
Object-Oriented Programming
-
Lesson 02: Intro to OOP
In this lesson, you will explore some of the basic object oriented functionality of the C++ language.
- Concept 01: Classes and OOP
- Concept 02: Bjarne On Classes In C++
- Concept 03: Jupyter Notebooks
- Concept 04: Structures
- Concept 05: Member Initialization
- Concept 06: Access Specifiers
- Concept 07: Classes
- Concept 08: Encapsulation and Abstraction
- Concept 09: Bjarne on Encapsulation
- Concept 10: Constructors
- Concept 11: Scope Resolution
- Concept 12: Initializer Lists
- Concept 13: Initializing Constant Members
- Concept 14: Encapsulation
- Concept 15: Accessor Functions
- Concept 16: Mutator Functions
- Concept 17: Quiz: Classes in C++
- Concept 18: Exercise: Pyramid Class
- Concept 19: Exercise: Student Class
- Concept 20: Encapsulation in C++
- Concept 21: Bjarne On Abstraction
- Concept 22: Abstraction
- Concept 23: Exercise: Sphere Class
- Concept 24: Exercise: Private Method
- Concept 25: Exercise: Static Members
- Concept 26: Exercise: Static Methods
- Concept 27: Bjarne On Solving Problems
-
Lesson 03: Advanced OOP
In this lesson, we'll get into some of the more advanced topics in object oriented programming, including inheritance, polymorphism and templates.
- Concept 01: Polymorphism and Inheritance
- Concept 02: Bjarne on Inheritance
- Concept 03: Inheritance
- Concept 04: Access Specifiers
- Concept 05: Exercise: Animal Class
- Concept 06: Composition
- Concept 07: Exercise: Class Hierarchy
- Concept 08: Exercise: Friends
- Concept 09: Polymorphism: Overloading
- Concept 10: Polymorphism: Operator Overloading
- Concept 11: Virtual Functions
- Concept 12: Polymorphism: Overriding
- Concept 13: Override
- Concept 14: Multiple Inheritance
- Concept 15: Generic Programming
- Concept 16: Bjarne on Generic Programming
- Concept 17: Templates
- Concept 18: Bjarne on Templates
- Concept 19: Exercise: Comparison Operation
- Concept 20: Deduction
- Concept 21: Exercise: Class Template
- Concept 22: Summary
- Concept 23: Bjarne on Best Practices with Classes
-
Lesson 04: Project: System Monitor
Time to build the project! In this lesson, you'll get the tools you need to build the project for this course, a system monitor application similar to htop!
- Concept 01: Introduction
- Concept 02: htop
- Concept 03: Starter Code
- Concept 04: Project Structure
- Concept 05: Build Tools
- Concept 06: System Class
- Concept 07: System Data
- Concept 08: LinuxParser Namespace
- Concept 09: String Parsing
- Concept 10: Processor Class
- Concept 11: Processor Data
- Concept 12: Process Class
- Concept 13: Process Data
- Concept 14: Goal
- Concept 15: Project Workspace
Part 04 : Memory Management
-
Module 01:
Memory Management
-
Lesson 02: Overview of Memory Types
This lesson covers basic concepts such as cache, virtual memory, and the structure of memory addresses. In addition, it is demonstrated how the debugger can be used to read data from memory.
-
Lesson 03: Variables and Memory
In this lesson the process memory model is introduced, which contains the two fundamental memory areas heap and stack, which play an important role in C++.
-
Lesson 04: Dynamic Memory Allocation (The Heap)
This lesson introduces dynamic memory allocation on the heap. The commands malloc and free as well as new and delete are introduced for this purpose.
-
Lesson 05: Resource Copying Policies
This section describes how to customize resource copying using the Rule of Three. Also, the Rule of Five is introduced, which helps develop a thorough memory management strategy in your code.
-
Lesson 06: Smart Pointers
In this lesson the three types of smart pointers in C++ are presented and compared. In addition, it is shown how to transfer ownership from one program part to another using copy and move semantics.
-
Lesson 07: Memory Management Chatbot
The ChatBot project creates a dialogue where users can ask questions about some aspects of memory management in C++. Your task will be to optimize the project with modern memory management in mind.
Part 05 : Concurrency
-
Module 01:
Concurrency
-
Lesson 01: Introduction and Running Threads
Learn the difference between processes and threads, and write your own concurrent program running multiple threads at the same time.
-
Lesson 02: Passing Data Between Threads
Learn to use promises and futures to create safe communication between threads. Also learn about tasks as an alternative to threads. Finally, understand data races and how to avoid them.
-
Lesson 03: Mutexes and Locks
Use mutexes and locks to safely access shared data from various threads.
-
Lesson 04: Condition Variables and Message Queues
Use condition variables as a basic synchronization tool between threads. Understand and implement a concurrent message queue for flexible inter-thread communication
-
Lesson 05: Program a Concurrent Traffic Simulation
Build a multithreaded traffic simulator using a real urban map. Run each vehicle on a separate thread, and manage intersections to facilitate traffic flow and avoid collisions.
Project Description - Program a Concurrent Traffic Simulation
-
Part 06 : Career Services
-
Module 01:
Career Services
-
Lesson 01: Industry Research
You're building your online presence. Now learn how to share your story, understand the tech landscape better, and meet industry professionals.
- Concept 01: Self-Reflection: Design Your Blueprint for Success
- Concept 02: Debrief: Self-Reflection Exercise Part 1
- Concept 03: Debrief: Self-Reflection Exercise Part 2
- Concept 04: Map Your Career Journey
- Concept 05: Debrief: Map Your Career Journey
- Concept 06: Conduct an Informational Interview
- Concept 07: How to Request an Informational Interview
- Concept 08: Ways to Connect
- Concept 09: Ask Good Questions
- Concept 10: Debrief: Sample Questions Quiz
- Concept 11: Keep the Conversation Going
-
Lesson 02: Optimize Your GitHub Profile
Other professionals are collaborating on GitHub and growing their network. Submit your profile to ensure your profile is on par with leaders in your field.
- Concept 01: Prove Your Skills With GitHub
- Concept 02: Introduction
- Concept 03: GitHub profile important items
- Concept 04: Good GitHub repository
- Concept 05: Interview with Art - Part 1
- Concept 06: Identify fixes for example “bad” profile
- Concept 07: Quick Fixes #1
- Concept 08: Quick Fixes #2
- Concept 09: Writing READMEs with Walter
- Concept 10: Interview with Art - Part 2
- Concept 11: Commit messages best practices
- Concept 12: Reflect on your commit messages
- Concept 13: Participating in open source projects
- Concept 14: Interview with Art - Part 3
- Concept 15: Participating in open source projects 2
- Concept 16: Starring interesting repositories
- Concept 17: Next Steps
-
Lesson 03: Take 30 Min to Improve your LinkedIn
Find your next job or connect with industry peers on LinkedIn. Ensure your profile attracts relevant leads that will grow your professional network.
- Concept 01: Get Opportunities with LinkedIn
- Concept 02: Use Your Story to Stand Out
- Concept 03: Why Use an Elevator Pitch
- Concept 04: Create Your Elevator Pitch
- Concept 05: Use Your Elevator Pitch on LinkedIn
- Concept 06: Create Your Profile With SEO In Mind
- Concept 07: Profile Essentials
- Concept 08: Work Experiences & Accomplishments
- Concept 09: Build and Strengthen Your Network
- Concept 10: Reaching Out on LinkedIn
- Concept 11: Boost Your Visibility
- Concept 12: Up Next
-
Part 07 : Capstone
-
Module 01:
Capstone
-
Lesson 01: Capstone
In this lesson, you will build your own C++ application, following the principles you have learned throughout this Nanodegree Program.
-