C++ & JavaScript
Master low-level logic with C++ and interactive web experiences with JavaScript.
Prerequisites
No prior experience required β open to beginners.
Certificate
Awarded by Rescue Academy on successful completion of the program's assessments and final project.
Learn Online β Live Classes
Register, receive your schedule, and join live instructor-led C++ & JavaScript classes on Zoom. Assignments, instructor feedback, and a certificate on completion.
Learn In Person
Attend C++ & JavaScript classes in person in Juba with hands-on labs, instructor mentorship, and a certificate on completion.
What You'll Learn
- C++ fundamentals: variables, loops, functions
- Arrays, strings, and basic problem-solving
- Intro to memory concepts (pointers at a safe level)
- JavaScript fundamentals and the browser DOM
- Mini projects: forms, timers, simple interactive pages
Curriculum
Beginner
Full lessons available belowModule 1: Low-Level Memory Management & Pointers (C++)
Learning objectives
- Understand pointers and manual memory management
Lessons
- Pointers & References
- Stack vs Heap Memory
Module 2: Asynchronous Programming & Event Loops (JavaScript)
Learning objectives
- Understand async/await and the event loop
Lessons
- Callbacks & Promises
- Async/Await in Practice
Module 3: Object-Oriented vs. Functional Programming
Learning objectives
- Compare OOP and functional approaches
Lessons
- OOP in C++
- Functional Patterns in JavaScript
Module 4: Modern ES6+ Scripting Standards
Learning objectives
- Use modern JavaScript syntax confidently
Lessons
- Arrow Functions & Destructuring
- Modules & Template Literals
Module 5: Hardware Interfacing & Performance
Learning objectives
- Reason about performance across both languages
Lessons
- Why C++ is Used for Performance
- Profiling & Optimizing JavaScript
Intermediate
Outline β full lessons coming soonModule 1: C++ Standard Template Library (STL)
Learning objectives
- Use STL containers and algorithms
Lessons
- Vectors, Maps & Sets
- STL Algorithms
Module 2: Node.js Fundamentals
Learning objectives
- Build simple server-side JavaScript programs
Lessons
- Node.js Basics
- Building a Simple CLI Tool
Module 3: Memory Safety & Debugging in C++
Learning objectives
- Avoid and fix common memory bugs
Lessons
- Common Memory Bugs
- Using Debugging Tools
Module 4: Working with the Browser DOM
Learning objectives
- Build interactive browser features
Lessons
- DOM Manipulation Patterns
- Event-Driven UI Building
Module 5: Intermediate Project
Learning objectives
- Build a small performance-aware tool
Lessons
- Planning a Dual-Language Project
- Build & Test It
Advanced
Outline β full lessons coming soonModule 1: Advanced C++ (Templates & Smart Pointers)
Learning objectives
- Use templates and modern memory-safe C++
Lessons
- Templates & Generic Programming
- Smart Pointers
Module 2: Building APIs with JavaScript
Learning objectives
- Build a simple backend API
Lessons
- Building a REST API
- Handling Requests & Responses
Module 3: Systems Thinking Across Both Languages
Learning objectives
- Choose the right language for a given problem
Lessons
- When to Use C++ vs JavaScript
- Interfacing Between Systems
Module 4: Performance Optimization
Learning objectives
- Optimize real programs for speed
Lessons
- Profiling C++ Code
- Optimizing JavaScript Execution
Module 5: Capstone Project
Learning objectives
- Build a complete performance-conscious application
Lessons
- Planning the Capstone
- Build, Test & Present
Full Lessons β Beginner Level
1. Low-Level Memory Management & Pointers (C++)
C++ gives you direct control over memory using pointers. A pointer stores the memory address of a variable instead of its value. You access the address with the & operator and the value through the pointer using *. This is essential for writing fast, resource-efficient programs β especially on constrained devices.
- A pointer is declared as
int* ptr = &x;β it "points to" the location ofx. - Use
&to get the address of a variable; use*to get the value at that address (dereferencing). - Pointers let you work directly with hardware, manage dynamic memory, and optimize for speed.
- Compile C++ code with GCC/G++ in your terminal or use VS Code with the C++ extension.
π‘ Practical Skill: Efficient resource management is critical for systems programming, game engines, and embedded devices. Use VS Code and the GCC/G++ compiler to build and test your C++ programs.
Try it Yourself β Pointer Basics
C++
#include <iostream>
using namespace std;
int main() {
int score = 85;
int* ptr = &score; // ptr holds the memory address of score
cout << "Value of score: " << score << endl;
cout << "Address of score: " << ptr << endl;
cout << "Value at address (dereference): " << *ptr << endl;
*ptr = 95; // change score through the pointer
cout << "New score: " << score << endl;
return 0;
}
2. Asynchronous Programming & Event Loops (JavaScript)
JavaScript is single-threaded β it can only do one thing at a time. But thanks to the Event Loop, it can handle slow operations (like fetching data from an API) without freezing the UI. Modern JavaScript uses async/await to write clean, readable asynchronous code.
- The Event Loop checks a queue of pending tasks and runs them one by one when the main thread is free.
async functionreturns a Promise;awaitpauses execution until the Promise resolves.- Use Chrome DevTools to inspect network requests and debug async code in the console.
- Node.js uses the same Event Loop for server-side async I/O β perfect for building fast APIs.
π‘ Practical Skill: Build interactive web apps that fetch data without lag, or write Node.js scripts that handle many users at once. Debug with Chrome DevTools and run with Node.js.
Try it Yourself β Async Data Fetch Simulation
JavaScript
// Simulates fetching user data from an API
function fetchUser(id) {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ id, name: "Student " + id, course: "C++ & JavaScript" });
}, 1500); // simulates 1.5s network delay
});
}
async function loadUser() {
console.log("Fetching user data...");
const user = await fetchUser(101);
console.log("User loaded:", user);
// Output after ~1.5s:
// { id: 101, name: "Student 101", course: "C++ & JavaScript" }
}
loadUser();
console.log("This logs immediately β UI is not frozen!");
3. Object-Oriented vs. Functional Programming
OOP (Object-Oriented Programming) groups data and behavior into classes (common in C++). Functional Programming (FP) uses pure functions and avoids changing state β modern JavaScript embraces FP with methods like .map(), .filter(), and .reduce(). Both paradigms help you write clean, maintainable code.
- C++ OOP: create a class with properties and methods, then instantiate objects.
- JavaScript FP: use
.map()to transform arrays without modifying the original β this is immutability. - Choose OOP when modeling real-world entities (a Car, a Student); choose FP for data transformations.
- Many modern projects use both β C++ for performance-critical objects, JavaScript for flexible data pipelines.
π‘ Practical Skill: Use VS Code for both C++ and JavaScript. In C++, write classes for structured systems. In JavaScript, chain functional methods for data processing.
Try it Yourself β Transform an Array: OOP vs Functional
C++ (OOP approach with a class)
#include <iostream>
#include <vector>
using namespace std;
class NumberProcessor {
public:
vector<int> numbers;
NumberProcessor(vector<int> nums) : numbers(nums) {}
vector<int> getDoubled() {
vector<int> result;
for (int n : numbers) {
result.push_back(n * 2);
}
return result;
}
};
int main() {
NumberProcessor np({1, 2, 3, 4, 5});
vector<int> doubled = np.getDoubled();
for (int n : doubled) cout << n << " ";
// Output: 2 4 6 8 10
return 0;
}
JavaScript (Functional approach with .map())
const numbers = [1, 2, 3, 4, 5];
// Pure function: does NOT change the original array
const doubled = numbers.map(n => n * 2);
console.log(doubled);
// Output: [2, 4, 6, 8, 10]
console.log(numbers); // Original unchanged: [1, 2, 3, 4, 5]
4. Modern ES6+ Scripting Standards
Modern JavaScript (ES6 and beyond) introduces features that make code cleaner, safer, and more expressive. Arrow functions (=>) provide a shorter syntax, template literals (backticks ` `) let you embed variables in strings, and destructuring extracts values from objects or arrays in one line.
- Arrow functions:
const add = (a, b) => a + b;β no need forfunctionkeyword. - Template literals:
`Hello, ${name}!`β much cleaner than string concatenation. - Destructuring:
const { name, age } = user;β extract fields in one step. - These features are fully supported in all modern browsers and Node.js in 2026.
π‘ Practical Skill: Write concise, readable code for both browser and Node.js environments. Debug with Chrome DevTools Sources panel.
Try it Yourself β ES6+ Features in Action
JavaScript
// Arrow function
const greet = (name) => `Welcome to Rescue Academy, ${name}!`;
// Object with destructuring
const student = { name: "John", age: 20, city: "Juba" };
const { name, city } = student;
// Template literal with embedded expression
const message = `
Student: ${name}
City: ${city}
Greeting: ${greet(name)}
`;
console.log(message);
// Output:
// Student: John
// City: Juba
// Greeting: Welcome to Rescue Academy, John!
5. Hardware Interfacing & Performance
C++ is the language of choice for high-performance and hardware-level programming β it runs on microcontrollers, game engines, and operating systems. JavaScript (Node.js) handles the server-side: file systems, network requests, and lightweight background tasks. Together, they cover everything from sensor data to web APIs.
- C++ compiles directly to machine code β no interpreter, maximum speed.
- Use C++ for resource-constrained devices (IoT sensors, Raspberry Pi, embedded systems).
- Node.js uses the V8 engine to run JavaScript on servers β great for handling many concurrent connections.
- Both languages are essential for full-stack development: C++ in the backend engine, JavaScript on the web layer.
π‘ Practical Skill: Optimize C++ code for resource-constrained systems and build Node.js scripts for data processing. Use VS Code for both β install the C++ extension and Node.js runtime.
Try it Yourself β Sensor Simulation (C++) vs Server Logic (Node.js)
C++ β Mock Hardware Sensor Toggle
#include <iostream>
using namespace std;
class TemperatureSensor {
private:
double currentTemp;
public:
TemperatureSensor() : currentTemp(25.0) {}
void readSensor() {
// Simulate a fluctuating sensor reading
currentTemp += (rand() % 10 - 5) * 0.5;
if (currentTemp < -10) currentTemp = -10;
if (currentTemp > 50) currentTemp = 50;
}
double getTemperature() { return currentTemp; }
};
int main() {
TemperatureSensor sensor;
for (int i = 0; i < 5; i++) {
sensor.readSensor();
cout << "Reading " << i+1 << ": "
<< sensor.getTemperature() << "Β°C" << endl;
}
return 0;
}
JavaScript (Node.js) β Simple Server Logic
// Simulate checking if a server is healthy
const http = require("http");
const server = http.createServer((req, res) => {
if (req.url === "/health") {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ status: "OK", uptime: process.uptime() }));
} else {
res.writeHead(404);
res.end("Not Found");
}
});
server.listen(3000, () => {
console.log("Server running on http://localhost:3000");
console.log('Try: curl http://localhost:3000/health');
});
Quick Quiz β C++ & JavaScript Basics
Tools & Technologies
- VS Code
- Node.js
- Chrome DevTools
Career Opportunities
- Junior web or software developer
- Freelance developer for local businesses and NGOs
- IT/software role in a company or government office
Practical Projects
- Build a small performance-conscious tool in C++ paired with an interactive JavaScript front end
- Compare and document memory/performance behavior between a C++ and a JavaScript implementation of the same task