diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..bc9543c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: GitHub Discussions + url: https://github.com/salmer/CppDeveloperRoadmap/discussions + about: Please ask and answer questions here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..6d8c57d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ +## Description +Please include a summary of the change and which issue is fixed. + +## Checklist +- [ ] Content changes have been applied to all three languages (English, Russian, Chinese) OR a follow-up issue has been opened to track missing translations. +- [ ] Any new external links have been verified. (If a link is bot-blocked and fails CI, it has been added to `.lycheeignore` with a comment). +- [ ] I have run `lychee` locally to verify links according to `CONTRIBUTING.md`. diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index a0d50aa..814a65b 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -13,21 +13,39 @@ permissions: jobs: lychee: runs-on: ubuntu-latest + permissions: + contents: read + issues: write steps: - name: Checkout uses: actions/checkout@v4 + - name: Restore lychee cache + uses: actions/cache@v4 + with: + path: .lycheecache + key: cache-lychee-${{ github.sha }} + restore-keys: cache-lychee- + - name: Check links in markdown files uses: lycheeverse/lychee-action@v2 + id: lychee with: - # Relative links are resolved against each file's own directory - # (lychee's default); 429 (rate limited) is accepted so busy sites - # don't fail the run; the timeout is raised above the 20s default - # because some sites (e.g. sfml-dev.org) respond slowly to runners. args: >- --no-progress --accept 200..=204,429 --max-retries 2 --timeout 45 + --cache + --max-cache-age 1d "**/*.md" fail: true + output: ./lychee/out.md + + - name: Create Issue From File + if: failure() && github.event_name == 'schedule' + uses: peter-evans/create-issue-from-file@v5 + with: + title: Link Checker Report + content-filepath: ./lychee/out.md + labels: report, automated issue diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml new file mode 100644 index 0000000..eacdbc8 --- /dev/null +++ b/.github/workflows/typos.yml @@ -0,0 +1,15 @@ +name: Spell Check + +on: + pull_request: + push: + branches: + - main + +jobs: + typos: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check spelling + uses: crate-ci/typos@master diff --git a/.lycheeignore b/.lycheeignore index 97a3021..13878cf 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -14,3 +14,5 @@ https://medium\.com/.* # their CDN returns 403 to GitHub-hosted runner (datacenter) IPs. https://(en|ru|zh)\.cppreference\.com/.* https://isocpp\.org/.* +# Intel blocks automated clients (bots) +https://www\.intel\.com/.* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e6e4441 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,34 @@ +# Contributing to C++ Developer Roadmap + +Thank you for your interest in contributing! To maintain consistency and quality across the roadmap, please adhere to the following guidelines. + +## Language Sync Rule + +This project maintains parity across three languages: English (`English/`), Russian (`Russian/`), and Chinese (`Chinese/`). +**Any content change (e.g., adding a book, updating a tool, fixing a description) MUST be mirrored across all three languages.** +If you are unable to translate the content into all languages, please create an issue or note it in your Pull Request so someone can help translate it. + +## Local Jekyll Preview + +To preview the site locally using GitHub Pages: +1. Ensure you have Ruby and Bundler installed. +2. Install dependencies: `bundle install` +3. Serve the site: `bundle exec jekyll serve` +4. Open the provided localhost URL in your browser. + +## Link Policy + +We use `lychee` to ensure all links are valid. + +* **.lycheeignore**: Some valid domains (like Amazon, Reddit, or CppReference) block bots or CI IPs, resulting in false positives (403 or redirect loops). These are added to `.lycheeignore`. +* **Dead Links**: If you find a dead link, please replace it with a Wayback Machine snapshot. Note it as an "(archived copy)" in the file's respective language. +* **Manual Sweep**: Since Amazon links and other bot-blocking domains are in `.lycheeignore`, they are invisible to CI. A periodic manual sweep is required to ensure these links remain active. + +### Local Link Checking + +Before opening a PR, please run `lychee` locally to verify links. Run the following command (requires `lychee` to be installed): + +```bash +lychee --no-progress --accept "200..=204,429" --max-retries 2 --timeout 45 --exclude-path IMPROVEMENTS.md --exclude-path TODO.md "**/*.md" +``` +This command must exit with code 0. Run this after ANY link change. diff --git a/Chinese/Books/Middle.md b/Chinese/Books/Middle.md index dd3dba8..8965aa1 100644 --- a/Chinese/Books/Middle.md +++ b/Chinese/Books/Middle.md @@ -6,6 +6,16 @@ 这是 Scott Meyers 的书籍系列中的新章节。本书汇编了一组针对 C++11 / 14 标准的技巧。 +- Nicolai Josuttis: + - [C++17 - The Complete Guide(英文)](https://www.cppstd17.com) + - [C++20 - The Complete Guide(英文)](https://cppstd20.com) + + Meyers 的书止步于 C++14,这两卷正好接续其后。每一卷都系统地讲解了对应标准新增的全部内容——语言特性和标准库——并配有实用示例,以及何时(和何时不)使用这些新工具的建议。 + +- [Klaus Iglberger - C++ Software Design:高质量软件的设计原则与模式(英文)](https://www.amazon.com/Software-Design-Principles-Patterns-High-Quality/dp/1098113160) + + 一本专为 C++ 撰写的现代设计模式著作。它展示了经典模式基于当今惯用法——值语义、类型擦除、`std::variant`——而非深层继承体系时的样子,是从掌握语言到用语言做设计之间的绝佳桥梁。 + - [Anthony Williams - C++ 并发编程实战](https://book.douban.com/subject/35653912/) 本书是多线程编程和使用标准库特性的全面指南。它提供了有关所有原语及其“幕后”复杂性的详细说明。 diff --git a/Chinese/Books/Senior.md b/Chinese/Books/Senior.md index 10a7eaa..a9433eb 100644 --- a/Chinese/Books/Senior.md +++ b/Chinese/Books/Senior.md @@ -2,7 +2,13 @@ ## :pencil: C++ -- 对于高级学生,没有特定的书籍推荐。在这个层次上,假设您已经对 C++的基础知识有很好的理解。唯一的挑战是要了解 C++生态系统中最新标准、新功能和工具。 +- 高级阶段的书籍推荐较少:假设您已经牢固掌握了语言本身,主要挑战是紧跟新标准、新特性和新工具。以下渠道会很有帮助: + - [Standard C++ Foundation 新闻和 WG21 trip report](https://isocpp.org/) - 面向实践者撰写的标准委员会工作摘要。 + - 会议演讲 - 参见[会议 YouTube 频道](../CommunitySources.md)(CppCon、Meeting C++、C++Now);主题演讲和"C++XX 新特性"类演讲是保持更新的高效方式。 + +- [John Lakos - Large-Scale C++ Volume I: Process and Architecture(英文)](https://www.informit.com/store/large-scale-c-plus-plus-process-and-architecture-volume-9780201717068) + + 关于物理设计的深入著作——如何组织组件、包和依赖关系,使 C++ 代码库在增长到数百万行时仍然易于维护。最适合负责大型长期项目结构的高级开发者。 ## :muscle: 团队管理 diff --git a/Chinese/Grades/Overview.md b/Chinese/Grades/Overview.md index 9d9298d..ed4194d 100644 --- a/Chinese/Grades/Overview.md +++ b/Chinese/Grades/Overview.md @@ -11,7 +11,14 @@ 每个公司都有自己对开发人员评估和不同等级所声明的技能和责任视野。通常会遇到以下情况:您可能会在一家公司晋升为高级角色,但在另一家公司中被评估为中层开发人员。尽管如此,仍然可以针对每个等级引入共同期望。我们将使用先前描述过程来描述每个等级。 **示例:** 您可以查看此网站以了解不同公司中关于定位系统知识:[levels.fyi](https://www.levels.fyi/) -![定位](../../assets/GradeTable.PNG "GradeTable") +| 级别 | Apple | Amazon | Google | Facebook | Microsoft | +|---|---|---|---|---|---| +| 初级 (Junior) | ICT2 | SDE I (L4) | L3 | E3 | SDE (59-60) | +| 中级 (Middle) | ICT3 | SDE II (L5) | L4 | E4 | SDE II (61-62) | +| 高级 (Senior) | ICT4 | SDE III (L6) | L5 | E5 | Senior SDE (63-64) | +| 专家 (Staff) | ICT5 | Principal SDE (L7) | L6 | E6 | Principal SDE (65-67) | +| 首席专家 (Principal) | ICT6 | Senior Principal (L8) | L7 / L8 | E7 / E8 | Partner (68-70) | +| 杰出专家 (Distinguished/Fellow) | Distinguished / Fellow | Distinguished (L10) | L9 / L10 | E9 | Distinguished / Fellow | ## 级别说明 diff --git a/Chinese/Graph/README.md b/Chinese/Graph/README.md index 97cec73..f9cea5a 100644 --- a/Chinese/Graph/README.md +++ b/Chinese/Graph/README.md @@ -4,4 +4,6 @@ GraphML 是一种基于 XML 的图形文件格式。许多应用程序都支持 例如,您可以使用[yEd](https://www.yworks.com/products/yed)来查看 graphML 文件并根据需要进行修改。 -![示例](./example.png) +*最后与 Miro 同步:2023-09-19* + +![示例](../../assets/example.png) diff --git a/Chinese/Graph/roadmap-svg.md b/Chinese/Graph/roadmap-svg.md new file mode 100644 index 0000000..3fe003d --- /dev/null +++ b/Chinese/Graph/roadmap-svg.md @@ -0,0 +1,4 @@ +--- +layout: svg_viewer +title: C++ Developer Roadmap (Chinese) +--- diff --git a/Chinese/HowToStudy.md b/Chinese/HowToStudy.md index 9e91425..a9db0c9 100644 --- a/Chinese/HowToStudy.md +++ b/Chinese/HowToStudy.md @@ -14,7 +14,7 @@ - 在[C++会议](CommunitySources.md)中的演示 - 在[CppReference](https://en.cppreference.com/w/cpp)主页上,您将找到链接到最新功能概述列表页面的链接 -- 您可以阅读[Bjarne Stroustrup - A Tour of C++](https://www.amazon.com/Tour-2nd-Depth-Bjarne-Stroustrup/dp/0134997832)这本书。定期检查该书以获取更新,因为它会随着每个新版本的 C ++标准进行修订。 +- 您可以阅读[Bjarne Stroustrup - A Tour of C++](https://www.amazon.com/Tour-C-Depth/dp/0136816487)这本书 (第3版/覆盖 C++20)。定期检查该书以获取更新,因为它会随着每个新版本的 C ++标准进行修订。 - 专业论坛/聊天/讨论等。 - 社区 YouTube 上的概述视频 - [现代 C ++语言和库功能速查表]( https://github.com/AnthonyCalandra/modern-cpp-features ) diff --git a/Chinese/README.md b/Chinese/README.md index 5279bba..3bb2f36 100644 --- a/Chinese/README.md +++ b/Chinese/README.md @@ -46,11 +46,11 @@ C++ 仍然是 [2025 年](https://survey.stackoverflow.co/2025/technology#most-po 您可以通过 Github 中的以下渠道之一联系我们: * 如果对存储库内容进行任何建议或修改 - 在[Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls) 中创建新 PR -* 如果对存储库内容进行任何建议或修改 - 在[Issues](https://github.com/salmer/CppDeveloperRoadmap/issues)中提交新问题。(不幸的是,Miro 框架没有历史跟踪器并且无法访问路线图。所有更改都是在审核和批准后手动添加。) +* 如果对 **Miro 路线图** 有任何建议或修改 - 在[Issues](https://github.com/salmer/CppDeveloperRoadmap/issues)中提交新问题。(不幸的是,Miro 框架没有历史跟踪器并且无法访问路线图。所有更改都是在审核和批准后手动添加。) -# :telephone: Contacts +# :telephone: 联系方式 -Creators: +作者: - [Evgenii Melnikov](https://github.com/salmer), - [Dmitrii Dmitriev](https://github.com/DmitrievDmitriyA), - [lusipad](https://github.com/lusipad) diff --git a/Chinese/Tooling.md b/Chinese/Tooling.md index 973e653..5b1680c 100644 --- a/Chinese/Tooling.md +++ b/Chinese/Tooling.md @@ -112,6 +112,13 @@ PC 和 C++应用程序的项目构建管理器。该管理器的主要优点是快速项目组装。它支持跨平台开发,并与所有流行的编译器兼容。 +* :arrow_forward: **ccache** + + 网址:https://ccache.dev + 价格:免费 + + 编译器缓存:它会存储以前的编译结果,并在再次进行相同的编译时重用它们,这可以极大地加快重新构建的速度。它透明地位于 GCC 或 Clang 之前,并只需几行代码即可与 CMake 集成,使其成为中大型项目中在构建时间方面最廉价的收益之一。 + ## :mag: 代码分析器和格式化工具 * :arrow_forward: **clang-format** @@ -138,7 +145,7 @@ * :arrow_forward: **PVS Studio** 网址:https://pvs-studio.com - 价格:30 天免费试用 + 价格:付费;开源项目和学生免费 由 PVS-Studio 开发的跨平台(Windows、Linux、MacOS)静态代码分析器。该分析器的主要目标是对源代码进行分析,以检测编译器或代码审查期间可能未被发现的各种错误。它有助于减少与语言语法和陷阱相关的错误数量。 @@ -172,6 +179,29 @@ 来自 LLVM 项目的调试器,也是 macOS 上的默认调试器(Xcode 使用它)。它提供与 GDB 类似的功能,但架构更现代。在 Windows 上,随 IDE 一起提供的 Visual Studio 调试器扮演着相同的角色。 +## :stopwatch: 性能分析器 + +* :arrow_forward: **perf** + + 网址:https://perfwiki.github.io/main/ + 价格:免费 + + Linux 上的标准采样性能分析器,内置于内核中。它能显示应用程序实际消耗 CPU 时间的位置,并在需要时提供硬件计数器细节(如缓存未命中、分支预测错误)。通常与火焰图 (flame-graph) 可视化一起使用,使性能瓶颈一目了然。 + +* :arrow_forward: **Tracy** + + 网址:https://github.com/wolfpld/tracy + 价格:免费 + + 一种实时帧性能分析器,在游戏开发中尤为流行。你可以使用轻量级宏在代码中标记区域,并在图形客户端中实时观察计时,精确到各个帧和线程。它跨平台且开销极低。 + +* :arrow_forward: **Intel VTune Profiler** + + 网址:https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html + 价格:免费 + + 一款功能强大的性能分析器,用于 x86 架构上的深度性能分析:瓶颈、线程效率、内存访问模式以及微架构级别的指标。当 `perf` 输出不够详细时的首选工具。在 Windows 上,Visual Studio IDE 也内置了功能强大的 CPU 和内存性能分析器。 + ## :floppy_disk: Git 客户端 * :arrow_forward: **SmartGit** diff --git a/English/Books/Middle.md b/English/Books/Middle.md index 99a20a9..8bab566 100644 --- a/English/Books/Middle.md +++ b/English/Books/Middle.md @@ -6,6 +6,16 @@ It's a new chapter in the collection of books by Scott Meyers. This book compiles a set of tips for the C++11/14 standards. +- Nicolai Josuttis: + - [C++17 - The Complete Guide](https://www.cppstd17.com) + - [C++20 - The Complete Guide](https://cppstd20.com) + + Meyers' book stops at C++14, and these two volumes pick up where it leaves off. Each one systematically walks through everything its standard added — language features and library alike — with practical examples and advice on when (and when not) to use the new tools. + +- [Klaus Iglberger - C++ Software Design: Design Principles and Patterns for High-Quality Software](https://www.amazon.com/Software-Design-Principles-Patterns-High-Quality/dp/1098113160) + + A modern take on design patterns, written specifically for C++. It shows how classic patterns look when built on today's idioms — value semantics, type erasure, `std::variant` — instead of deep inheritance hierarchies, and is a great bridge between knowing the language and designing with it. + - [Anthony Williams - C++ Concurrency in Action](https://www.amazon.com/C-Concurrency-Action-Anthony-Williams/dp/1617294691/ref=sr_1_3?keywords=C%2B%2B+Concurrency+in+Action%3A+Practical+Multithreading&qid=1636314477&s=books&sr=1-3) This book is a comprehensive guide to multithreading programming and the use of standard library features. It provides detailed explanations about all primitives and their intricacies "behind the scenes." @@ -65,7 +75,7 @@ This book delves into the same topics as the previous book, but with a focus exclusively on the Microsoft Windows operating system. It provides a deep and detailed look at every aspect of the OS with a specific focus on Windows and covers various nuances and aspects that may not be officially declared by the developers. It is a useful resource for those who develop low-level applications that require intensive interaction with the OS system libraries. -- [Christopher Negus - Linux Bible](https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/1119578884) +- [Christopher Negus - Linux Bible](https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/1394317468) This book can serve as a follow-up to Tanenbaum's work, delving into the intricacies of the Linux operating system. The book includes detailed analysis of various aspects of the OS, with a focus on popular distributions like Red Hat, Ubuntu, and Fedora. It is an ideal resource for developers who use Linux on a daily basis @@ -76,7 +86,7 @@ ## :globe_with_meridians: Computer networks -- [Andrew S. Tanenbaum - Computer Networks](https://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958) +- [Andrew S. Tanenbaum - Computer Networks](https://www.amazon.com/Computer-Networks-Andrew-Tanenbaum/dp/0136764053) A classic book on the theoretical foundations of computer networks provides a detailed description, starting from the physical layer and ending with data transfer protocols. It will be extremely useful for developers who are closely involved in projects that interact with networks. diff --git a/English/Books/Senior.md b/English/Books/Senior.md index 890f62e..36d0fc8 100644 --- a/English/Books/Senior.md +++ b/English/Books/Senior.md @@ -2,7 +2,13 @@ ## :pencil: C++ -- There are no specific recommendations for books for senior level students. At this level, it is assumed that you have a good understanding of the fundamentals of C++. The only challenge is to stay updated on the latest standards, new features, and tools in the C++ ecosystem. +- There are few book recommendations at the senior level: it is assumed that you have a solid command of the language, and the main challenge is staying current with new standards, features, and tools. Useful channels for that: + - [Standard C++ Foundation news and WG21 trip reports](https://isocpp.org/) - summaries of what the standardization committee is working on, written for practitioners. + - Conference talks - see the [conference YouTube channels](../CommunitySources.md) (CppCon, Meeting C++, C++Now); keynotes and "What's new in C++XX" talks are an efficient way to keep up. + +- [John Lakos - Large-Scale C++ Volume I: Process and Architecture](https://www.informit.com/store/large-scale-c-plus-plus-process-and-architecture-volume-9780201717068) + + A deep treatment of physical design — how to organize components, packages, and dependencies so a C++ codebase stays maintainable as it grows to millions of lines. Most relevant for seniors who own the structure of large, long-lived projects. ## :muscle: Team management diff --git a/English/CommunitySources.md b/English/CommunitySources.md index 38b4fb6..c35d837 100644 --- a/English/CommunitySources.md +++ b/English/CommunitySources.md @@ -25,8 +25,8 @@ ## :exclamation: Alternative sources for learning C++ - [Learncpp.com](https://www.learncpp.com/) - It is a free website devoted to teaching you how to program in C++. It's being updated regularly. -- [Hackingcpp.com](https://hackingcpp.com/index.html) - The all-in-one web portal with diffenent collections of materials related to C++: books, cheat sheets, recordings from conferences, etc. -- [Awesomecpp.com](https://awesomecpp.com) - The set of different sources about the C++. +- [Hackingcpp.com](https://hackingcpp.com/index.html) - The all-in-one web portal with different collections of materials related to C++: books, cheat sheets, recordings from conferences, etc. +- [Awesomecpp.com](https://awesomecpp.com) - A curated collection of C++ resources. - [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e) - [C++ Weekly](https://www.youtube.com/@cppweekly) - Jason Turner's YouTube show with short weekly episodes about C++ features and best practices. - [CppCast](https://cppcast.com/) - A podcast for C++ developers with interviews about the language, libraries, and community. diff --git a/English/Grades/Overview.md b/English/Grades/Overview.md index b7dfaaf..44c3862 100644 --- a/English/Grades/Overview.md +++ b/English/Grades/Overview.md @@ -10,7 +10,14 @@ Nowadays, you can encounter the following common grading approach. The following Each company has its own vision of developer grading and a set of skills and responsibilities declared for different levels. It's common to encounter the following situation: you may be promoted to a senior role in one company, but in another company you might be assessed as a mid-level developer. Despite this, it's possible to introduce common expectations for each level. We will use the simplified approach described previously to describe each grade. **Example:** You can check this website to get knowledge about leveling systems in different companies: [levels.fyi](https://www.levels.fyi/) -![](../../assets/GradeTable.PNG "GradeTable") +| Level | Apple | Amazon | Google | Facebook | Microsoft | +|---|---|---|---|---|---| +| Junior | ICT2 | SDE I (L4) | L3 | E3 | SDE (59-60) | +| Middle | ICT3 | SDE II (L5) | L4 | E4 | SDE II (61-62) | +| Senior | ICT4 | SDE III (L6) | L5 | E5 | Senior SDE (63-64) | +| Staff | ICT5 | Principal SDE (L7) | L6 | E6 | Principal SDE (65-67) | +| Principal | ICT6 | Senior Principal (L8) | L7 / L8 | E7 / E8 | Partner (68-70) | +| Distinguished/Fellow | Distinguished / Fellow | Distinguished (L10) | L9 / L10 | E9 | Distinguished / Fellow | ## Level Descriptions diff --git a/English/Graph/README.md b/English/Graph/README.md index bd39c88..e0a473d 100644 --- a/English/Graph/README.md +++ b/English/Graph/README.md @@ -1,7 +1,9 @@ # How to view and modify the roadmap in graphML format -GraphML — is an XML-based file format for graphs. It is supported by many applications for viewing it. +GraphML is an XML-based file format for graphs. It is supported by many applications for viewing it. For example, you can use [yEd](https://www.yworks.com/products/yed) to view graphML file and modify it as you want. -![](./example.png) \ No newline at end of file +*Last synced with Miro: 2023-02-17* + +![Roadmap example](../../assets/example.png) \ No newline at end of file diff --git a/English/Graph/example.png b/English/Graph/example.png deleted file mode 100644 index ed7e28d..0000000 Binary files a/English/Graph/example.png and /dev/null differ diff --git a/English/Graph/roadmap-svg.md b/English/Graph/roadmap-svg.md new file mode 100644 index 0000000..8a6dfe0 --- /dev/null +++ b/English/Graph/roadmap-svg.md @@ -0,0 +1,4 @@ +--- +layout: svg_viewer +title: C++ Developer Roadmap (English) +--- diff --git a/English/HowToStudy.md b/English/HowToStudy.md index 96ef555..2fe358f 100644 --- a/English/HowToStudy.md +++ b/English/HowToStudy.md @@ -15,7 +15,7 @@ C++, like other languages, evolves by incorporating popular ideas from computer - Presentations among [C++ conferences](CommunitySources.md) - On the main page of the [CppReference](https://en.cppreference.com/w/cpp) you will find links to pages with overview lists of the newest features -- You can read the following book by [Bjarne Stroustrup - A Tour of C++](https://www.amazon.com/Tour-2nd-Depth-Bjarne-Stroustrup/dp/0134997832). Regularly check the book for updates, as it is revised with each new release of the C++ standard +- You can read the following book by [Bjarne Stroustrup - A Tour of C++ (3rd Edition, covers C++20)](https://www.amazon.com/Tour-C-Depth/dp/0136816487). Regularly check the book for updates, as it is revised with each new release of the C++ standard - Professional forums/chats/discussions/etc. - Overview videos on YouTube by community - [A cheatsheet of modern C++ language and library features](https://github.com/AnthonyCalandra/modern-cpp-features) diff --git a/English/Tooling.md b/English/Tooling.md index 82ef4cd..934bde0 100644 --- a/English/Tooling.md +++ b/English/Tooling.md @@ -147,6 +147,14 @@ Newborn developers often have a limited understanding of the tools available to Project build manager for C and C++ applications. The main advantage of this manager is quick project assembly. It supports cross-platform development and works with all popular compilers. +* :arrow_forward: **ccache** + + Site: https://ccache.dev + + Price: free + + A compiler cache: it stores the results of previous compilations and reuses them when the same compilation happens again, which can dramatically speed up rebuilds. It sits transparently in front of GCC or Clang and integrates with CMake in a couple of lines, making it one of the cheapest build-time wins on medium and large projects. + ## :mag: Code analyzers and formatters @@ -178,7 +186,7 @@ Newborn developers often have a limited understanding of the tools available to Site: https://pvs-studio.com - Price: 30 days trial + Price: paid; free for open-source projects and students Cross-platform (Windows, Linux, MacOS) static code analyzer by PVS-Studio. The main aim of the analyzer is to analyze the source code for various errors that may go undetected by compilers or during code review. It helps reduce the number of errors related to language syntax and pitfalls. @@ -218,6 +226,32 @@ Newborn developers often have a limited understanding of the tools available to The debugger from the LLVM project and the default debugger on macOS (used by Xcode). It offers capabilities similar to GDB with a more modern architecture. On Windows, the same role is filled by the Visual Studio debugger, which ships with the IDE. +## :stopwatch: Profilers + +* :arrow_forward: **perf** + + Site: https://perfwiki.github.io/main/ + + Price: free + + The standard sampling profiler on Linux, built into the kernel. It shows where an application actually spends its CPU time, with hardware-counter details (cache misses, branch mispredictions) when you need them. Often used together with flame-graph visualizations to make hotspots obvious. + +* :arrow_forward: **Tracy** + + Site: https://github.com/wolfpld/tracy + + Price: free + + A real-time frame profiler that is especially popular in game development. You annotate zones in your code with lightweight macros and watch timings live in a graphical client, down to individual frames and threads. Cross-platform and remarkably low-overhead. + +* :arrow_forward: **Intel VTune Profiler** + + Site: https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html + + Price: free + + A powerful profiler for deep performance analysis on x86: hotspots, threading efficiency, memory access patterns, and microarchitecture-level metrics. The go-to tool when `perf` output is not detailed enough. On Windows, the Visual Studio IDE also ships a capable built-in CPU and memory profiler. + ## :floppy_disk: Git clients * :arrow_forward: **SmartGit** diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..75d9835 --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source "https://rubygems.org" +gem "github-pages", group: :jekyll_plugins diff --git a/README.md b/README.md index 948878f..c2a447e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## :speech_balloon: Additional languages: [Русский](Russian/README.md) [中文](Chinese/README.md) -C++ is still one of the most popular development languages in [2025](https://survey.stackoverflow.co/2025/technology#most-popular-technologies). There are quite a few people who want to start learning C++ and become a developer. They face the questions: "Where should I start? What and in what order should I study? What books should I read? +C++ is still one of the most popular development languages in [2025](https://survey.stackoverflow.co/2025/technology#most-popular-technologies). There are quite a few people who want to start learning C++ and become a developer. They face the questions: "Where should I start? What and in what order should I study? What books should I read?" We have tried to answer these questions through the presented roadmap. The roadmap focuses on the general competencies and skills that are commonly found in most projects. It is designed to assist those who are just beginning their education or have limited experience. You can create a more effective learning plan without being sidetracked by irrelevant information if you study the materials listed. It will aid you in mastering C++ to the level commonly used in many commercial projects. @@ -47,7 +47,7 @@ In the event of any comments, proposals, or ideas, please do not hesitate to con You can reach us through one of the following channels via Github: - In case of any proposal or modification in the **repository** content - create a new PR in [Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls) -- In case of any proposal or modification in the **repository** content - submit a new Issue in [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (Unfortunately, the Miro framework does not have a history tracker and access to the roadmap is restricted. All changes are added manually after they have been reviewed and approved) +- In case of any proposal or modification in the **Miro roadmap** - submit a new Issue in [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (Unfortunately, the Miro framework does not have a history tracker and access to the roadmap is restricted. All changes are added manually after they have been reviewed and approved) # :telephone: Contacts diff --git a/Russian/Books/Middle.md b/Russian/Books/Middle.md index 2d20c6b..65d9ac8 100644 --- a/Russian/Books/Middle.md +++ b/Russian/Books/Middle.md @@ -6,6 +6,16 @@ Продолжение предыдущей книги Скотта Мейерса. Сборник советов для работы с новыми стандартами C++11 и C++14. +- Николай Джосаттис (Nicolai Josuttis): + - [C++17 - The Complete Guide (ENG)](https://www.cppstd17.com) + - [C++20 - The Complete Guide (ENG)](https://cppstd20.com) + + Книга Мейерса останавливается на C++14, а эти два тома продолжают с того места, где она заканчивается. Каждый из них системно разбирает всё, что добавил соответствующий стандарт — как возможности языка, так и библиотеки — с практическими примерами и советами, когда стоит (и когда не стоит) применять новые инструменты. + +- [Клаус Иглбергер - C++ Software Design: Design Principles and Patterns for High-Quality Software (ENG)](https://www.amazon.com/Software-Design-Principles-Patterns-High-Quality/dp/1098113160) + + Современный взгляд на паттерны проектирования, написанный специально для C++. Книга показывает, как классические паттерны выглядят на базе современных идиом — семантика значений, type erasure, `std::variant` — вместо глубоких иерархий наследования. Отличный мост между знанием языка и умением проектировать на нём. + - [Параллельное программирование на С++ в действии. Практика разработки многопоточных программ](https://www.ozon.ru/product/parallelnoe-programmirovanie-na-s-v-deystvii-praktika-razrabotki-mnogopotochnyh-programm-217051361/?asb=uff2kmWPtH7totJyGfGyYsPFkTR%252BIxeTdrNvGvZlqzc%253D&asb2=L78tfqOpsfrZsUEmgaZ9kZgbmpv4Jyn9UhBcKxIEO3Q&keywords=%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+C%2B%2B&sh=nq_ppy1R) Отличное руководство по многопоточному программированию в составе стандартной библиотеки C++. Представлено подробное описание ко всем примитивам библиотеки. Также даются объяснения работы этих примитивов, скрытыми под абстракциями. diff --git a/Russian/Books/Senior.md b/Russian/Books/Senior.md index 0dfc105..8b79b16 100644 --- a/Russian/Books/Senior.md +++ b/Russian/Books/Senior.md @@ -2,7 +2,13 @@ ## :pencil: C++ -- Сложно посоветовать что-то конкретное для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков. +- Сложно посоветовать что-то конкретное для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков. Полезные каналы для этого: + - [Новости Standard C++ Foundation и trip-репорты WG21](https://isocpp.org/) - выжимки о том, над чем работает комитет по стандартизации, написанные для практикующих разработчиков. + - Доклады с конференций - см. [YouTube-каналы конференций](../CommunitySources.md) (CppCon, Meeting C++, C++Now); ключевые доклады и обзоры «Что нового в C++XX» — эффективный способ оставаться в курсе. + +- [Джон Лакос - Large-Scale C++ Volume I: Process and Architecture (ENG)](https://www.informit.com/store/large-scale-c-plus-plus-process-and-architecture-volume-9780201717068) + + Глубокая работа о физическом дизайне — как организовать компоненты, пакеты и зависимости, чтобы кодовая база на C++ оставалась сопровождаемой при росте до миллионов строк. Наиболее актуальна для сеньоров, отвечающих за структуру больших долгоживущих проектов. ## :muscle: Управление командой diff --git a/Russian/Grades/Overview.md b/Russian/Grades/Overview.md index bfa2e94..aedcbf7 100644 --- a/Russian/Grades/Overview.md +++ b/Russian/Grades/Overview.md @@ -10,7 +10,14 @@ Многие компании имеют персональное видение по набору обязанностей и компетенций, предъявляемые к разработчикам. Легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотягиваете до Middle. Тем не менее можно охарактеризовать общие ожидания для любого уровня во многих компаниях. В дальнейшем будет использоваться упрощенная классификация, описанная выше. **Пример:** Ознакомиться с принятыми классификациями в различных компаниях можно здесь: https://www.levels.fyi/ -![](../../assets/GradeTable.PNG "GradeTable") +| Уровень | Apple | Amazon | Google | Facebook | Microsoft | +|---|---|---|---|---|---| +| Junior | ICT2 | SDE I (L4) | L3 | E3 | SDE (59-60) | +| Middle | ICT3 | SDE II (L5) | L4 | E4 | SDE II (61-62) | +| Senior | ICT4 | SDE III (L6) | L5 | E5 | Senior SDE (63-64) | +| Staff | ICT5 | Principal SDE (L7) | L6 | E6 | Principal SDE (65-67) | +| Principal | ICT6 | Senior Principal (L8) | L7 / L8 | E7 / E8 | Partner (68-70) | +| Distinguished/Fellow | Distinguished / Fellow | Distinguished (L10) | L9 / L10 | E9 | Distinguished / Fellow | ## Описание diff --git a/Russian/Graph/README.md b/Russian/Graph/README.md index facc448..ccca56a 100644 --- a/Russian/Graph/README.md +++ b/Russian/Graph/README.md @@ -4,4 +4,6 @@ GraphML — язык описания графов на основе XML, кот Например, можете открыть graphML файл в [yEd](https://www.yworks.com/products/yed) и модифицировать карту, как вам захочется. -![](./example.png) \ No newline at end of file +*Последняя синхронизация с Miro: 2026-07-10* + +![Пример карты](../../assets/example.png) \ No newline at end of file diff --git a/Russian/Graph/example.png b/Russian/Graph/example.png deleted file mode 100644 index ed7e28d..0000000 Binary files a/Russian/Graph/example.png and /dev/null differ diff --git a/Russian/Graph/roadmap-svg.md b/Russian/Graph/roadmap-svg.md new file mode 100644 index 0000000..d02a7c9 --- /dev/null +++ b/Russian/Graph/roadmap-svg.md @@ -0,0 +1,4 @@ +--- +layout: svg_viewer +title: C++ Developer Roadmap (Russian) +--- diff --git a/Russian/Tooling.md b/Russian/Tooling.md index 3ece415..0343ae9 100644 --- a/Russian/Tooling.md +++ b/Russian/Tooling.md @@ -148,6 +148,14 @@ Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ менеджера: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы. +* :arrow_forward: **ccache** + + Сайт: [https://ccache.dev](https://ccache.dev) + + Стоимость: бесплатно + + Кэш компилятора: он сохраняет результаты предыдущих компиляций и повторно использует их при повторной компиляции того же кода, что может значительно ускорить пересборку. Он прозрачно работает поверх GCC или Clang и интегрируется с CMake парой строк кода, что делает его одним из самых простых способов ускорения сборки в средних и крупных проектах. + ## :mag: Анализаторы и форматтеры кода @@ -179,7 +187,7 @@ Сайт: [https://pvs-studio.com](https://pvs-studio.com) - Стоимость: триал на 30 дней, далее платно + Стоимость: платно; бесплатно для open-source проектов и студентов Кроссплатформенный (Windows, Linux, MacOS) статический анализатор кода от российской компании PVS-Studio. Основная задача анализатора - провести анализ исходников на предмет различных ошибок, которые не обнаруживаются компиляторами или на этапе ревью кода. Благодаря ему можно минимизировать ошибки, связанные с синтаксическими конструкциями языка и их подводными камнями. @@ -219,6 +227,32 @@ Отладчик из проекта LLVM и отладчик по умолчанию в macOS (используется в Xcode). По возможностям близок к GDB, но имеет более современную архитектуру. Под Windows эту же роль выполняет отладчик Visual Studio, поставляемый вместе с IDE. +## :stopwatch: Профилировщики + +* :arrow_forward: **perf** + + Сайт: [https://perfwiki.github.io/main/](https://perfwiki.github.io/main/) + + Стоимость: бесплатно + + Стандартный сэмплирующий профилировщик в Linux, встроенный в ядро. Он показывает, на что приложение фактически тратит процессорное время, с детализацией аппаратных счетчиков (промахи кэша, ошибки предсказания переходов), когда это необходимо. Часто используется вместе с визуализацией flame-graph, чтобы сделать узкие места (hotspots) очевидными. + +* :arrow_forward: **Tracy** + + Сайт: [https://github.com/wolfpld/tracy](https://github.com/wolfpld/tracy) + + Стоимость: бесплатно + + Профилировщик кадров в реальном времени, особенно популярный в разработке игр. Вы размечаете зоны в своем коде легковесными макросами и наблюдаете за таймингами в реальном времени в графическом клиенте, вплоть до отдельных кадров и потоков. Кроссплатформенный инструмент с удивительно низкими накладными расходами. + +* :arrow_forward: **Intel VTune Profiler** + + Сайт: [https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html](https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html) + + Стоимость: бесплатно + + Мощный профилировщик для глубокого анализа производительности на архитектуре x86: узкие места, эффективность многопоточности, паттерны доступа к памяти и метрики уровня микроархитектуры. Инструмент первого выбора, когда вывода `perf` недостаточно. В Windows встроенный в Visual Studio IDE профилировщик процессора и памяти также предоставляет хорошие возможности. + ## :floppy_disk: Git клиенты * :arrow_forward: **SmartGit** diff --git a/_config.yml b/_config.yml index da043d0..4aec19d 100644 --- a/_config.yml +++ b/_config.yml @@ -1,4 +1,6 @@ title: C++ Developer Roadmap +url: https://salmer.github.io +baseurl: /CppDeveloperRoadmap description: >- A roadmap for learning C++: what to study and in what order, book recommendations per level, developer grading, pet-project ideas, and tooling. @@ -9,6 +11,8 @@ remote_theme: pages-themes/cayman@v0.2.0 plugins: - jekyll-remote-theme - jemoji + - jekyll-seo-tag + - jekyll-sitemap # Rewrites relative *.md links to the generated *.html pages, so navigation # works on the published GitHub Pages site, not just in the repo view. - jekyll-relative-links diff --git a/_layouts/svg_viewer.html b/_layouts/svg_viewer.html new file mode 100644 index 0000000..8c807cf --- /dev/null +++ b/_layouts/svg_viewer.html @@ -0,0 +1,14 @@ + + + + + {{ page.title }} + + + + {{ page.title }} + + diff --git a/_typos.toml b/_typos.toml new file mode 100644 index 0000000..78f8f71 --- /dev/null +++ b/_typos.toml @@ -0,0 +1,13 @@ +[default] +extend-ignore-re = [ + # Ignore Cyrillic and CJK text, and any markdown links that might trigger typos + "(?i)[а-яё]", + "[\u4e00-\u9fff]", +] + +[files] +extend-exclude = [ + "*.graphml", + "*.svg", + ".lycheecache" +] diff --git a/assets/GradeTable.PNG b/assets/GradeTable.PNG deleted file mode 100644 index 42fc267..0000000 Binary files a/assets/GradeTable.PNG and /dev/null differ diff --git a/Chinese/Graph/example.png b/assets/example.png similarity index 100% rename from Chinese/Graph/example.png rename to assets/example.png diff --git a/goto/svg.html b/goto/svg.html index f400248..4306f9f 100644 --- a/goto/svg.html +++ b/goto/svg.html @@ -3,7 +3,7 @@ permalink: /goto/svg/ format: svg targets: - en: "https://github.com/salmer/CppDeveloperRoadmap/blob/main/English/Graph/roadmap.svg" - ru: "https://github.com/salmer/CppDeveloperRoadmap/blob/main/Russian/Graph/roadmap.svg" - zh: "https://github.com/salmer/CppDeveloperRoadmap/blob/main/Chinese/Graph/roadmap.svg" + en: "/CppDeveloperRoadmap/English/Graph/roadmap-svg.html" + ru: "/CppDeveloperRoadmap/Russian/Graph/roadmap-svg.html" + zh: "/CppDeveloperRoadmap/Chinese/Graph/roadmap-svg.html" ---