요즘 ChatGPT의 Tutor me로 하는 개인 강습에 빠져있다.
Tutor me는 GPTs중 하나로 Khan Academy와 OpenAI의 AI 기술을 활용해서 만들어졌다.
가장 맘에 드는 부분은 학생이 스스로 답을 찾을 수 있도록 질문을 유도하는 소크라테스 식 교육 방식이었다.
개념을 잘 이해할 수 있도록 간단한 문제를 내고, 채점을 해주고 질문하면 설명도 잘해준다.
이런 방식으로 내가 배우고 있는 주제는 고급 C++다.
각자 배우고 싶은 주제를 던져서 인내심 많은 개인 교사에게 배워보자.
Tutor Me 실행하기
먼저 ChatGPT에서 Tutor Me를 활성화한다.
- ChatGPT에 로그인
- Explore GPTs(탐색하기) 클릭
- ‘Tutor Me’ 검색
- 또는 아래 링크 클릭하여 직접 접속
➡ Tutor Me 바로가기
학습 목표 입력하기
학습하고 싶은 스킬을 아래의 프롬프트 형식으로 입력한다.
I want to learn [배우고 싶은 스킬] in 30 days.
Please act as an expert coach in [배우고 싶은 스킬] and create a detailed learning plan that will help me become proficient in this skill.
The plan should include daily tasks, exercises, and goals for each day, progressively increasing in difficulty.
Each day's plan should be achievable within [하루 학습 가능 시간], and by the end of 30 days,
I should have a strong foundational understanding of [배우고 싶은 스킬].
Present all info on table for easy understanding.
나는 배우고 싶은 스킬로 Advanced C++를 입력했고 아래와 같이 30일 기준 커리큘럼을 짜주었다.
30-Day Advanced C++ Learning Plan
Week 1: Modern C++ & Compiler Insights | Topic | Tasks & Concepts | Exercises |
1 | C++23 Overview | Learn deducing this, if consteval, std::expected, std::mdspan | Write a function using if consteval for compile-time optimization. |
2 | Compiler Internals | Compare Clang, GCC, MSVC, explore optimizations, AST, IR | Compile a simple program using all 3 compilers and analyze output. |
3 | Build Systems & Tools | Learn CMake, Conan, Ninja, g++ flags, link-time optimization (LTO) | Set up a C++ project using CMake and build with Ninja. |
4 | Type Deduction & Concepts | auto, decltype, requires, C++20 Concepts | Implement a template function using constraints (std::integral). |
5 | Coroutines | co_await, co_yield, std::generator | Write a coroutine that lazily generates Fibonacci numbers. |
6 | Memory Safety (RAII & Smart Pointers) | unique_ptr, shared_ptr, weak_ptr, avoiding leaks | Implement a custom smart pointer with RAII. |
7 | Memory Safety (Bounds & Sanitizers) | Use AddressSanitizer (ASan), std::span, StackProtector | Debug an out-of-bounds error using AddressSanitizer. |
Week 2: Advanced Concurrency & Multithreading | |||
8 | Thread Management | std::thread, joining/detaching, thread local storage | Implement a multi-threaded logger class. |
9 | Mutexes & Synchronization | std::mutex, std::lock_guard, std::unique_lock, std::scoped_lock | Avoid race conditions in a shared counter using a mutex. |
10 | Condition Variables & Atomic Operations | std::condition_variable, std::atomic | Implement a producer-consumer queue using condition variables. |
11 | C++23 std::jthread & Thread Pools | std::jthread, cancellation tokens, efficient thread pools | Implement a thread pool with std::jthread. |
12 | Futures & Async Programming | std::async, std::future, std::promise | Implement parallel matrix multiplication using std::async. |
13 | Fiber-like Execution | std::stop_token, resumable functions | Implement an interruptible long-running task. |
14 | High-Performance Multithreading | False sharing, memory ordering, NUMA awareness | Optimize a parallel vector sum using proper memory alignment. |
Week 3: Advanced Data Structures, Networking & Filesystems | |||
15 | Advanced STL & Ranges | std::views::transform, std::views::filter, std::ranges::sort | Rewrite a classic for-loop using C++23 ranges. |
16 | Allocators & Custom Memory Management | std::pmr::vector, custom allocators | Implement a memory pool allocator for custom allocations. |
17 | Networking with ASIO | boost::asio, sockets, non-blocking IO | Implement an async TCP server with boost::asio. |
18 | HTTP & REST APIs | cpp-httplib, cpr, RESTful client | Make a GET request to a public API and parse JSON. |
19 | C++23 Filesystem & Virtual Files | std::filesystem, file watching | Create a file synchronization utility. |
20 | Debugging & Profiling | gdb, valgrind, perf, address/leak sanitizers | Use gdb to debug a segfault in a multi-threaded program. |
21 | Benchmarking & Performance | std::chrono, google/benchmark, cache locality | Benchmark an optimized vs unoptimized loop. |
Week 4: Final Project - To-Do List (Advanced) | |||
22 | Database Integration | SQLite with sqlite-modern-cpp, file-based storage | Design the database schema for the To-Do List. |
23 | UI/CLI Design | Use ncurses, TUI, CLI enhancements | Build an interactive command-line UI for the To-Do List. |
24 | Event-Driven Architecture | Observer pattern, message queues | Implement an event-driven task notification system. |
25 | Thread-Safe Task Management | Multi-threading, atomic counters | Optimize the To-Do List for multi-threaded access. |
26 | Serialization & Exporting | JSON/YAML serialization using nlohmann/json | Allow tasks to be exported/imported as JSON. |
27 | Networking Features | Expose API endpoints via REST (cpp-httplib) | Build a basic REST API for remote task management. |
28 | Testing & CI/CD | Unit tests (Catch2), CI/CD with GitHub Actions | Write unit tests for To-Do List features. |
29 | Final Debugging & Optimizations | Profiling, performance tuning | Analyze bottlenecks and optimize critical paths. |
30 | Wrap-Up & Deployment | Package app for cross-platform release, Docker, WebAssembly | Deploy the app as a standalone binary. |
나는 여기에 C++ 최근 표준에 대한 학습 내용을 추가로 요청해서 커리큘럼을 수정하였다.
학습 시작하기
그 이후에는 언제든지 학습을 시작할 수 있다.
역시 가장 마음에 드는 부분은 내가 드는 의문점이나 개념 정립에 대한 질문을 언제든지 던질 수 있다는 점이다.
돌아오는 대답도 아주 훌륭하다. 현재까지의 GPT 경험 중에 가장 좋다.
현재 일주일차인데 다 마무리하게 되면 그 후기도 남겨봐야겠다.
'IT 교양' 카테고리의 다른 글
최대 10배 이상 빨라진 Typescript와 MS의 과감한 결정 (0) | 2025.03.14 |
---|---|
Domain-Driven Design: 도메인 주도 설계 (0) | 2025.02.21 |
eBook은 어떻게 동작할까? (0) | 2025.01.22 |
Actor Model에 대하여 (1) | 2025.01.07 |
OpenAPI 생성 코드 변경에 무관한, BASE_PATH 주입 (Angular) (3) | 2025.01.04 |