salmer / cppdeveloperroadmap Goto Github PK
View Code? Open in Web Editor NEWThe roadmap for learning the C++ programming language for beginners and experienced devs.
Home Page: https://salmer.github.io/CppDeveloperRoadmap
License: Other
The roadmap for learning the C++ programming language for beginners and experienced devs.
Home Page: https://salmer.github.io/CppDeveloperRoadmap
License: Other
Добрый день, предлагаю подсказать "как измерить" знания по алгоритмам и структурам данных. Например, указать на ваш взгляд примерное кол-во решенных задач на leetcode.com (для junior/middle/senior свои числа), или рэндж по цветам codeforces.com (например, junior это серый-фиолетовый и тп)
Надеюсь, это поможет адекватно и прозрачно оценивать начинающим свои силы, что от них ждут на собесе:)
С одной стороны, в первый этап включён отладчик:
С этим я согласен: надо уметь получать в итоге работающий код, а с первой попытки код работает редко. Отладчик очень сильно помогает.
С другой стороны, неопределённое поведение возникает только на третьем этапе, уже даже после ООП, правила трёх/пяти, ссылок, сырых указателей, утечек памяти:
Мне кажется, про неопределённое поведение надо рассказывать сразу же, как обучающийся может написать программу с UB. В противном случае интуитивное ожидание от программы с ошибкой — "произойдёт что-то логичное". Компьютеры же детерминированы и логичны. Да и на JavaScript/Java/Python/HTML/практически любом другом языке программирования ошибочная программа может выдать неверный ответ, зависнуть, упасть с исключением, но в любом случае проблему можно будет логично отследить до точки возникновения, а в подавляющем большинстве случаев укажут на строчку, где ошибка возникла.
В случае с C++ это категорически не так. Программа может падать, а отладчик может показывать на return 0;
в main()
, на int x = v.size()
, на последнюю }
в функции, на случайную }
в программе после выхода за границу массива. Это всё сильно сбивают с толку обучающихся. К тому же фразы вроде "нельзя читать из неинициализированной переменной" даже при расскаже об UB первые несколько месяцев воспринимаются не как UB, а как "в неинициализированной переменной, очевидно, лежит просто какой-то случайный мусор". В частности, легко предположить, что если нам неважно, что там за мусор, то программа хотя бы не упадёт, но это неверно. Легко предположить, что если мы прочитали что-то за границей массива, то у нас либо прочитался мусор, либо всё сразу упало, а не упало через десять строк в вообще другой функции.
И это всё не считая проблем, которые могут возникнуть при висячих ссылках, ручном управлении памятью, reinterpret_cast
.
Я предлагаю передвинуть неопределённое поведение в первый этап и считаю, что без этого отлаживать программы на C++ становится сильно сложнее. Необязательно его изучать досконально, но необходимо перестать считать, что "очевидно же, что выход за границы массива так не проявится". Например, вот здесь есть хорошее введение (исходник).
Ребят, у нас тут есть открытый проект https://ru.code-basics.com/ где дается база по кучке языков. Все это опенсорсное и у нас даже есть заготовка под cpp. Хотите поучаствовать? https://github.com/hexlet-basics/exercises-cpp
Привет.
Видимо, это единственный способ связаться по поводу созданной Mind-карты по изучению С++, так что пишу здесь. Рассчитываю на ответ :)
Я новичок в С++. Можно сказать, знаю базу языка, общепредоставленные основы, одинаковые от сайта к сайту и от книги к книге. От типов данных до классов.
Просмотрел всю вашу карту. Условно понятно, что чтобы быть разработчиком С++, надо понимать все перечисленные вещи. Даже указан порядок изучения. Однако совсем непонятно, а что собственно делать, что именно программировать, чтобы набираться опыта, какие задачи реализовывать на языке, чтобы осваивать навыки с mind-mapa. То есть на карте показано, ЧТО нужно знать, но не КАК это узнать, в каких ситуациях ЭТО нужно и нужно ли вообще. В целом-то не ясно даже, с чего начать.
Вот, и я, как новичок, в небольшом тупике. Базу усвоил, с алгоритмами и алгеброй поигрался. И хочется как-то развиваться дальше, в последствии трудоустраиваться. А что пытаться программировать-то.... И как эта карта вообще может мне помочь.
Mind-карта составлена вроде как и для новичков, а вроде и совсем никак неопределённость не уменьшает.
Может, будут какие-то общие советы, как использовать собранную карту с пользой? И как быть новоиспечённому зачатку программиста на С++? :(
I believe, that this is a good idea to add button in the end of the articles, so the user can return to page with other articles and links.
«Бритва Оккама» по-английски — это "occam's razor", а в карте сейчас "Okkama blade"
Hello,
First of all, great work!
I think that you should add FP (functional programming) paradigm to software design, mainly side-effect-less functions and immutability. I even think that those principles should be learnt prior to OOP. [https://www.manning.com/books/functional-programming-in-c-plus-plus](Ivan Cukic's book) is a great resource, but it's probably more for middle to expert level. There is also [https://www.packtpub.com/product/hands-on-functional-programming-with-c/9781789807332](Alexandru Bolboaca's book) which is less advance.
It's nice to have a topic with a list of validated and approved courses where people can start to learn the C++ language for a free or reasonable price.
Describe the solution you'd like
A clear and concise description of what you want to happen.
i try to translate that is it. :)
thank u
Думаю, что в цикл жизнии софта можно добавить. Например, в версионирование
On Learn C++ using the book by Stroustrup
Which states:
Learn C++ using the book by Stroustrup
A highly damaging thesis taking origin from the “Old Guard” or someone born with a keyboard in hand.Those who had extensive experience of development in other languages (C, Fortran, Delphi, etc.) and transitioned to C++ are most likely to give this piece of advice. Stroustrup wrote this book like a reference, therefore one needs to use it in the appropriate manner, which requires some knowledge of the language. Better look at the Books section, you’ll find books for any level of language proficiency.
What book are you referring to? BS has authored several books in the past few years including:
может этот плейлист?
https://www.youtube.com/playlist?list=PLmSYEYYGhnBu1fFtnzKx-pycYbJnb0rOl
It's nice to create a list of videos about common knowledge about C++ for juniors and middle developers. It's nice to have videos that explain the most useful technics and tricks in daily development: for example:
Добрый день. Предлагаю для каждого "дорожного пункта", где это возможно, добавить ссылку на godbolt, где будет приведен демонстрационный пример. Например, человек открывает карту, идет по пунктам Hard skills - Синтаксис языка - Базовые операции - Циклы for/while, щелкает на последний пункт и видит примеры живого применения циклов с комментариями.
Так же можно добавить ссылки на статьи по теме "дорожного пункта".
В майндмэпе в ветке ОС упомянута виртуализация. Предлагаю добавить контейнеразцию.
in the Russian version on the Mythbusters.md page, the link to the book file should be updated in the section "Изучайте С++ только по стандарту"
now the link leads to https://github.com/salmer/CppDeveloperRoadmap/blob/main/Russian/Books.md
but should lead to https://github.com/salmer/CppDeveloperRoadmap/blob/main/Russian/Books/Overview.md
I think it will be great to add databases for juniors-level. This skill is actually necessary nowadays.
In the section about multithreading, in addition to the standard library, you can add a topic about using OpenMP as a multithreaded programming tool in C++. Also tell the reader to read about the difference between the standard library and OpenMP.
There's some Russian characters after "choose one of the popular IDEs"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.