Files
lnet_tutor/learning_plans/cpp/02_INITIAL_ASSESSMENT.md
2025-10-22 20:14:31 +08:00

9.7 KiB

C++ Initial Assessment

🎯 Purpose

This assessment will help determine your current C++ proficiency level and create a personalized learning path.

📋 Assessment Structure

Part 1: Self-Assessment Questionnaire

Part 2: Practical Coding Challenges

Part 3: Knowledge Gap Analysis


Part 1: Self-Assessment Questionnaire

Rate yourself honestly on each topic (0-4):

  • Level 0: Never heard of it
  • Level 1: Basic awareness
  • Level 2: Can use with documentation
  • Level 3: Proficient, use confidently
  • Level 4: Expert, can teach others

C++ Basics

Topic Level (0-4) Notes
Variables & Data Types
Operators
Control Flow (if/switch)
Loops (for/while)
Functions
Arrays
Strings (std::string)
Input/Output (cin/cout)
Compilation process

Pointers & Memory

Topic Level (0-4) Notes
Pointer basics
Pointer arithmetic
References
new & delete
Memory management
nullptr
Pass by reference/pointer
Function pointers

Object-Oriented Programming

Topic Level (0-4) Notes
Classes & objects
Constructors/Destructors
Access specifiers
Inheritance
Polymorphism
Virtual functions
Operator overloading
Abstract classes
Multiple inheritance

Templates

Topic Level (0-4) Notes
Function templates
Class templates
Template specialization
Variadic templates
SFINAE
Type traits
Concepts (C++20)

Modern C++ (C++11/14/17/20)

Topic Level (0-4) Notes
auto keyword
Smart pointers
Move semantics
rvalue references
Lambda expressions
Range-based for
constexpr
Structured bindings (C++17)
std::optional/variant

STL (Standard Template Library)

Topic Level (0-4) Notes
vector, list, deque
set, map
unordered containers
Iterators
Algorithms (sort, find, etc.)
Function objects
std::function

Advanced Topics

Topic Level (0-4) Notes
Multithreading (std::thread)
Mutexes & locks
std::atomic
Exception handling
RAII pattern
Custom allocators
Template metaprogramming
Build systems (CMake)
Design patterns

Part 2: Practical Coding Challenges

Challenge 1: Basic C++ (Beginner)

// Write a function that takes a vector of integers and returns
// a new vector with only the even numbers, sorted in descending order
// Example: {5, 2, 8, 1, 9, 4} -> {8, 4, 2}

#include <vector>

std::vector<int> filterAndSort(const std::vector<int>& nums) {
    // Your code here
}

// Test
int main() {
    std::vector<int> input = {5, 2, 8, 1, 9, 4};
    auto result = filterAndSort(input);
    // Should print: 8 4 2
    return 0;
}

Can you solve this? ☐ Yes ☐ No ☐ With hints


Challenge 2: Pointers & Memory (Intermediate)

// Implement a dynamic array class that manages its own memory
// Should support: add, remove, access by index, size

class DynamicArray {
private:
    int* data;
    size_t capacity;
    size_t size;
    
public:
    DynamicArray();
    ~DynamicArray();
    // Add more methods
};

// Implement proper memory management (no leaks!)

Can you solve this? ☐ Yes ☐ No ☐ With hints


Challenge 3: OOP & Polymorphism (Intermediate)

// Create a Shape hierarchy with:
// - Abstract Shape base class with virtual area() and perimeter()
// - Circle, Rectangle, Triangle derived classes
// - Demonstrate polymorphism with a vector of Shape pointers

class Shape {
public:
    virtual double area() const = 0;
    virtual double perimeter() const = 0;
    virtual ~Shape() = default;
};

// Implement derived classes and demonstrate usage

Can you solve this? ☐ Yes ☐ No ☐ With hints


Challenge 4: Templates (Advanced)

// Write a template function that works with any container
// and returns the sum of all elements

template<typename Container>
auto sum(const Container& cont) {
    // Your code here
    // Should work with vector<int>, list<double>, array<float>, etc.
}

// Test
std::vector<int> v = {1, 2, 3, 4, 5};
std::list<double> l = {1.5, 2.5, 3.5};
// Should compile and work for both

Can you solve this? ☐ Yes ☐ No ☐ With hints


Challenge 5: Modern C++ (Advanced)

// Implement a simple unique_ptr from scratch
// Must support: move semantics, custom deleters, operator*, operator->

template<typename T, typename Deleter = std::default_delete<T>>
class MyUniquePtr {
private:
    T* ptr;
    Deleter deleter;
    
public:
    // Implement move constructor, move assignment, etc.
    // Should be move-only (no copy)
};

Can you solve this? ☐ Yes ☐ No ☐ With hints


Challenge 6: Concurrency (Expert)

// Implement a thread-safe queue using std::mutex and std::condition_variable
// Should support: push (blocking/non-blocking), pop (blocking), empty check

template<typename T>
class ThreadSafeQueue {
private:
    std::queue<T> queue;
    std::mutex mutex;
    std::condition_variable cv;
    
public:
    void push(T value);
    T pop();  // Blocks if empty
    bool tryPop(T& value);  // Non-blocking
    bool empty() const;
};

Can you solve this? ☐ Yes ☐ No ☐ With hints


Part 3: Knowledge Gap Analysis

Based on Self-Assessment

Count your scores:

  • Topics at Level 0: ___
  • Topics at Level 1: ___
  • Topics at Level 2: ___
  • Topics at Level 3: ___
  • Topics at Level 4: ___

Total topics assessed: ___

Based on Coding Challenges

Challenges solved:

  • Challenge 1 (Basic): ☐
  • Challenge 2 (Pointers): ☐
  • Challenge 3 (OOP): ☐
  • Challenge 4 (Templates): ☐
  • Challenge 5 (Modern C++): ☐
  • Challenge 6 (Concurrency): ☐

Total solved: ___ / 6


📊 Assessment Results & Recommendations

Proficiency Level Determination

If you scored:

Absolute Beginner (0-20% Level 2+, 0 challenges)

  • Recommendation: Start with Phase 1 (Foundations)
  • Timeline: 3-4 months for Phase 1
  • Focus: Master basics, pointers, and basic OOP
  • Study Time: 2-3 hours daily
  • Resources: "C++ Primer", learncpp.com

Beginner (20-40% Level 2+, 1-2 challenges)

  • Recommendation: Review Phase 1, focus on Phase 2
  • Timeline: 1 month review + 3-4 months Phase 2
  • Focus: Strengthen OOP, learn templates basics
  • Study Time: 2-3 hours daily
  • Resources: "Effective C++", cppreference.com

Intermediate (40-60% Level 2+, 3-4 challenges)

  • Recommendation: Phase 2-3 (OOP to Modern C++)
  • Timeline: 2 months Phase 2 + 4-5 months Phase 3
  • Focus: Templates, STL, Modern C++ features
  • Study Time: 2-4 hours daily
  • Resources: "The C++ Programming Language", "C++17 STL Cookbook"

Advanced (60-80% Level 2+, 5 challenges)

  • Recommendation: Phase 3-4 (Modern to Advanced)
  • Timeline: 2 months Phase 3 + 4-5 months Phase 4
  • Focus: Concurrency, performance, advanced patterns
  • Study Time: 2-4 hours daily
  • Resources: "C++ Concurrency in Action", "Modern C++ Design"

Expert (80%+ Level 3+, 6 challenges)

  • Recommendation: Phase 4-5 (Advanced to Specialization)
  • Timeline: 2 months Phase 4 + specialization
  • Focus: Deep expertise in chosen domain
  • Study Time: 1-2 hours daily (maintenance + specialization)
  • Resources: C++ standards documents, source code reading

🎯 Personalized Learning Path

Your Starting Point

Based on assessment: _______________ (Fill after completing)

Start at Phase: _______________

Topics to Review First




Topics to Skip (Already Mastered)




Weak Areas to Focus On




Estimated Timeline to Expert

From your starting point: ___ months


📝 Action Items

Immediate Next Steps (This Week)

  1. ☐ Complete this assessment
  2. ☐ Set up C++ development environment
  3. ☐ Install compiler (GCC/Clang/MSVC)
  4. ☐ Choose IDE (VS Code/Visual Studio/CLion)
  5. ☐ Write and compile "Hello World"
  6. ☐ Review recommended phase in Master Plan
  7. ☐ Join C++ community (r/cpp, C++ Slack)

First Month Goals

  1. ☐ Complete ____ modules
  2. ☐ Build ____ small projects
  3. ☐ Read ____ chapters from recommended book
  4. ☐ Solve 20 coding problems
  5. ☐ Take monthly comprehensive exam

🔄 Reassessment Schedule

  • Week 4: Quick progress review
  • Month 3: Comprehensive reassessment
  • Month 6: Mid-journey assessment
  • Month 12: Full reassessment
  • Month 18: Expert level assessment

📚 Additional Resources

Online Assessments

  • HackerRank C++ Certification
  • LeetCode C++ Problems
  • Codewars C++ Kata
  • C++ Quiz at cppreference

Practice Platforms

  • LeetCode (algorithms)
  • HackerRank (C++ track)
  • Codewars (C++ challenges)
  • Project Euler (math problems)
  • Exercism (mentored practice)

Books by Level

  • Beginner: "C++ Primer" by Lippman
  • Intermediate: "Effective C++" by Scott Meyers
  • Advanced: "The C++ Programming Language" by Stroustrup
  • Expert: "Modern C++ Design" by Alexandrescu

Date Completed: _______________ Next Reassessment: _______________ Notes: