Помогите составить план изучения С++

Помогите составить план изучения С++

Привет всем. У меня вопрос к людям знающим плюсы, можете помочь составить план изучения этого языка, в программировании я не полный нуб), есть неплохие знания Java, C# и базовые Python и Django, ну и в принципе я немного знаю C/C++, несколько лет назад написал пару простеньких программ на qt и на linux api, немного прожу на микроконтроллерах stm, есть какие-никакие знания паттернов. В этом году ходил на собеседование, на позицию Java Jun. Dev. - не получилось, не взяли, а может оно и к лучшему). Java - как-то уже изрядно надоеда, мне плюсы начали нравится тем, что нужно думать. Если честно мне не интересно и влом читать книги на 100500 страниц, в которых описана сырая теория, без практики, мне проще изучать все на практике. Может кто-то посоветует какой-то Open Source проект чтобы прокачать скилы или кому-то нужен помощник который за него будет делать простую роботу) Заранее спасибо за ответ.

Начни с C, потом переходи на C++.

Если честно мне не интересно и влом читать книги на 100500 страниц, в которых описана сырая теория

тогда тебе не стоит работать программистом

мне не интересно и влом читать книги на 100500 страниц, в которых описана сырая теория, без практики, мне проще изучать все на практике

Начать с учебника Липмана для начинающих, если C++. Да, 100500 страниц. Да, теория. Посмотри там на план обучения, книга отличнейшая.

Как вариант, придумать себе более-менее сложный проект. Например, можно написать небольшой интерпретатор выдуманного языка.

Oчевидно, так нельзя делять. Знаю нескольких человек, пишущих на плюсах «как на си».

Я знаю людей, которые пишут на C++ абсолютно без понимания что происходит под капотом, и получается тот ещё быдлокод.

Для понимания происходящего под капотом надо вообще ассемблер изучать.

Архитектуру компьютера - да. Ассемблер - нет.

Какую-нибудь работу со стеком можно понять, изучая архитектуру. А вот ABI и его проблемы — нет.

Т. Пратт, М. Зелковиц - Языки программирования. Разработка и реализация. - эта книжка описывает то, что «под капотом» конструкций полутора десятков ЯП.

А чего там понимать? И главное, когда тебе эти проблемы ABI важны?

1. Ставишь себе компилятор, текстовый редактор с подсветкой синтаксиса, при желании и умении можешь поставить IDE (в которой тоже нужно разбираться). 2. Берёшь книгу по С++ - коих большое множество. Но выделить могу три по мере их чтения.

1 - Прата С. - Язык программирования С++. Лекции и упражнения - 2011

2 - Страуструп - Язык программирования С++. Специальное издание.

3 - Липпман - Язык программирования С++. Базовый курс. 5 изд.

Читаешь их, выполняешь примеры в конце глав - что немаловажно.

5. Задаёшь вопросы на форумах, занимаешься всякой фигнёй вроде собственных попыток что то стоящее написать. 6. Страдашки о том какой ты бездарь (Опционально), осознание себя. 7. Труд. Труд. Труд.

А чего там понимать? И главное, когда тебе эти проблемы ABI важны?

Когда разрабатываешь любую библиотеку, которая потенциально может быть использована другими людьми, ну или тобой же в нескольких проектах под оффтоп. То есть полноценному C++ программисту следует разбираться как в задокументированном и используемом в Linux Itanium ABI, так и в слабо документированном MSVC ABI. Не в деталях, а в общем: как можно сломать ABI библиотеки, а какие паттерны помогут этого избежать; как поддержка исключений сказывается на ABI; как работает stack unwinding при исключениях и как работают функции для печати стека вызовов; для оффтопика — как работает загрузка библиотек через манифесты.

Java Jun. Dev. - не получилось, не взяли

Сдаётся мне, одна из черепашек врёт.

Человек план попросил, а ему сплошные вводные книжки дают.

В общем, после введения лучше идти по дорого Мейерс->Саттер->Александреску (сейчас уже не сильно актуален, но интереса ради почитать стоит).

Человек план попросил, а ему сплошные вводные книжки дают.

Так с чего начинать то нужно знать) -а дальше после копаний на форумах, изучения небольших библиотек найдёт куда дальше двигаться. Или я не прав?)

В том то и дело, что «с чего начинать» - это не план

Нельзя составить план, не зная цель. ТС не сказал, зачем ему нужно изучить плюсы. Устроиться на работу? Расширить кругозор? Выпендриться перед одноклассниками и учителем информатики? Троллить в темах о rust на ЛОРе?

немного прожу на микроконтроллерах stm

Значит имеешь представление о таких вещах как регистры, стек, указатели?

Т.е. ты имеешь хотя бы базовое представление об ООП, зачем нужны инкапсуляция, наследование, полиморфизм?

Это разные языки, хоть один и является некоторым подмножеством другого. Не пиши так, а то напоминаешь авторов книжек про C с классами из 90-ых.

Java - как-то уже изрядно надоеда, мне плюсы начали нравится тем, что нужно думать.

На плюсах все тоже самое, только больше низкоуровневой возни и неочевидных с первого взгляда способов стрельбы по ногам.

Если честно мне не интересно и влом читать книги на 100500 страниц, в которых описана сырая теория

Читать книжки просто так - бесполезное занятие. Только практика, с обращением к книгам в случае необходимости.

В итоге, если все действительно так, как ты говоришь, подразумеваем, что ты имеешь представление об архитектуре компьютера, основных структурах данных, алгоритмах и ООП. Следовательно тебе нужно получить больше практики конкретно с C++. Поэтому просто придумай себе небольшой проект и делай его потихоньку. Хотя бы элементарную игрушку на SDL (для игрушек хорошо подходит ООП), какой-нибудь очередной клон арканоида или тетриса, не суть важно.

Ну и расскажи нам, как поломать ABI библиотеки не разработчику компилятора, сохранив при этом API?

Может кто-то посоветует какой-то Open Source проект чтобы прокачать скилы или кому-то нужен помощник который за него будет делать простую роботу)

Лучше брать проект, которым вы пользуетесь. Используете QtCreator?

Ну и расскажи нам, как поломать ABI библиотеки не разработчику компилятора, сохранив при этом API?

Сделать невиртуальную функцию виртуальной; добавить виртуальную функцию в класс, ранее их не имевший;изменить размер класса за счёт новых полей и множество других увлекательных способов на kde.org.

та просто там начали спрашивать про EJB 2)

А теперь при чём тут ассемблер?

Неделя желающих обучиться c++ на лоре?

Посоветовал тут в соседнем треде попилить qtc, чего и вам желаю.

Значит имеешь представление о таких вещах как регистры, стек, указатели?

Да, имею понятие что такое указатель, ссылка и регистр, и архитектура мк/компьютера.

Т.е. ты имеешь хотя бы базовое представление об ООП, зачем нужны инкапсуляция, наследование, полиморфизм?

Да, имею, но только на языка более высокого уровня, понятия те же, но реализация немного другая

Это разные языки, хоть один и является некоторым подмножеством другого. Не пиши так, а то напоминаешь авторов книжек про C с классами из 90-ых.

Я это понимаю что это разные языки, и наверное там 20 лет разницы в их возрасте, но я как-то хотел обобщить понятие для большей краткости сообщения

В итоге, если все действительно так, как ты говоришь, подразумеваем, что ты имеешь представление об архитектуре компьютера, основных структурах данных, алгоритмах и ООП. Следовательно тебе нужно получить больше практики конкретно с C++. Поэтому просто придумай себе небольшой проект и делай его потихоньку. Хотя бы элементарную игрушку на SDL (для игрушек хорошо подходит ООП), какой-нибудь очередной клон арканоида или тетриса, не суть важно.

Спасибо, за идею

Выпендриться перед одноклассниками и учителем информатики?

Скажу сразу, я не школьник.

Наверное первым делом расширить свой кругозор, а потом, может быть, думать про роботу.

Nicolai M. Josuttis «The C++ Standard Library A Tutorial and Reference» Second Edition

Есть только один путь изучения крестов:

1) учишь высокоуровневые языки: питон/схем

2) изучаешь программирование:

2.1) введение, очевидный sicp

2.2) алгоритмы, структуры данных и все остальное (параллельное программирование, ооп, функциональщина и т д).

2.3) пишешь что-то на высокоуровневых языках для закрепления результата

3) учишь сишку и асм (можно простой, вроде mips или даже 8051 какой)

3.1) разбираешься в низкоуровневом программировании, прерываниях, указателях и т д.

3.2) пишешь что-то низкоуровневое на си, применяя все накопленные знания (в том числе приемы и знания, полученные в пункте 2)

Соответственно если не полный нуб и писал на жабе/питоне/шарпе, начинаешь с пункта 3.

3) учишь сишку и асм (можно простой, вроде mips или даже 8051 какой)

Я немного программирую для мк на С под stm32f3 и atmega, в следующем семестре в институте будем программирование на асм, если не ошибаюсь, под mc-51

3.1) разбираешься в низкоуровневом программировании, прерываниях, указателях и т д.

В принципе, у меня есть понятие что это такое и зачем оно нужно

Плохо. Поздновато ты как-то программировать взялся.

This. Ниже что-то про ejb2, но в любом случае идти на «jun» c неплохими значниями Java делит на 0.

Если честно мне не интересно и влом читать книги на 100500 страниц, в которых описана сырая теория

Понимаю, сам через это проходил. Но теория, в любом случае, нужна будет, если собираешься к делу серьёзно подойти. Ну и как уже посоветовали, можно разбавлять чтение теории практикой.

План я тебе не помогу составить. Но кирпичиков для него добавлю.

Поскольку C в твоем списке нет, я бы начал с некоторых аспектов именно С. Указатели, передача значений в функции по значению и по ссылке, поработай с С-style строками, С-style массивами и т. п. (printf, scanf, malloc и т. п.). Напиши на C программу, которая принимает формулу и раскрывает скобки. Кинь сюда на LOR чтобы покритиковали.

Держи в уме, что почти все из этого скорее всего нужно будет забыть в С++ (ну, кроме передачи значений по ссылке), но это даст понимание что творится под капотом.

Начни с потоков (cin, cout), исключений, контейнеров.

Повтори программу выше на C++. Никаких указателей -> контейнеры, никаких printf/scanf -> cin/cout, никаких «кодов возвратов из функции» -> иcключения. Вот еще забавная задачка: Подкиньте небольшое задание на С++. (комментарий) (и вообще тред просмотри).

Почитай про классы, особенно про виртуальные и статический ф-ци-члены класса.

Сделай свой класс, представляющий неважно что (например, геометрический вектор, матрицу) и поперегружай для него операторы +, - и т. д.

Попытайся написать свой контейнер, даже если у него под капотом будет другой контейнер - познакомишься с шаблонами.

Почитай про rvalue, пересмотри свой класс и контейнер.

Обязательно проштудировать вот это: Jon Kalb: Exception-Safe Coding in C++ (вторую часть сам найдешь) - это просто must. Пересмотри код того, что уже написал.

Можешь попытаться сунуться в многопоточное программирование. Я когда-то туда сунулся, но понял, что это отдельная бездонная степь, и там много чего. Но, если все же решишься, то напиши программу нахождения простых чисел, а потом просмотри мои потуги здесь: Мне всегда казалось, что несколько потоков должны грузить все ядра процессора.

Hope this helps

очердной флэйм, однако. Много правильных букавок уже напИсали. Практика - прежде всего. Изучение чужого кода. Например, qt. Подключение к open source проекту. Например, qt, с предложениями своего кода и по улучшению их кода. У меня друг работает у них, btw, единственный русский из всех разработчиков, что меня удивило. Если надо будет наладить личные контакты, думаю, он поможет.

📎📎📎📎📎📎📎📎📎📎