LINUX.ORG.RU

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

 


2

4

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

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

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

Harald ★★★★★
()

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

[badАdvice] http://shop.oreilly.com/product/0636920015482.do [/badАdvice]

Old_Hamster ★★★
()

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

kalterfive ★★
()

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

Deleted
()
Ответ на: комментарий от anonymous

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

hateyoufeel ★★★★★
()
Ответ на: комментарий от devsdc

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

anonymous
()

Так...

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

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

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

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

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

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

temakonkin
()
Ответ на: комментарий от peregrine

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

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

quiet_readonly ★★★★
()

есть неплохие знания Java

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

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

fluorite ★★★★★
()

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

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

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

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

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

temakonkin
()
Ответ на: комментарий от yoghurt

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

fluorite ★★★★★
()

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

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

есть неплохие знания Java, C#

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

я немного знаю C/C++

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

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

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

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

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

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

m0rph ★★★★★
()

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

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

quiet_readonly ★★★★
()
Ответ на: комментарий от peregrine

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

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

quiet_readonly ★★★★
()
Ответ на: комментарий от fluorite

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

swfvova
() автор топика

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

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

pon4ik ★★★★★
()
Ответ на: комментарий от m0rph

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

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

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

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

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

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

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

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

swfvova
() автор топика
Ответ на: комментарий от fluorite

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

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

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

swfvova
() автор топика
Ответ на: комментарий от swfvova

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

fluorite ★★★★★
()

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

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

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

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

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

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

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

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

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

4) изучаешь cpp

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

Freyr69 ★★★
()
Ответ на: комментарий от Freyr69

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

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

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

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

swfvova
() автор топика
Ответ на: комментарий от swfvova

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

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

peregrine ★★★★★
()
Ответ на: комментарий от fluorite

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

anonymous
()

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

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

DarkEld3r ★★★★★
()
Ответ на: комментарий от hateyoufeel

Начни с C, потом продолжи на C

Fixed.

loz ★★★★★
()

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

Поскольку 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

Kroz ★★★★★
()

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

Valeriy_Onuchin ★★
()

Берешь и учишь. Зачем в интернетах лишний раз ныть.

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

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

a1batross ★★★★★
()

Насчет Java (возможно поможет безотносительно языка) - достаточно часто компании устраивают бесплатные курсы для студентов или выпускников по тем или иным языкам и технологиям. В Саратове, к примеру, этим занимались NetCracker, EPAM, Неофлекс. Думаю при желании в своем городе ты тоже найдешь компанию которая проводит такие курсы. Либо иди недоджуниором на стажировку. Недо - это значит, что зарплата чисто видимость. Но при этом ты получаешь хороший опыт. То же самое могу сказать про любой другой язык/технологию.

Кстати зря ты так о Java - вполне себе хороший и удобный язык. Есть как плюсы так и недостатки в сравнении с C++. Можешь любопытства ради посмотреть видео HolyWar Java vs C++, где некий разработчик довольно солидного возраста, руководитель проекта по разработке геномного ассемблера в одном из питерских университетов сравнивает Java и C++ в применении к их задаче.

TheKnight ★★★
()

устройся на работу плюсокодером

lazyklimm ★★★★★
()
Ответ на: комментарий от TheKnight

Я из Киева, и как раз ходил на собеседование в офис NetCracker'а, вроде ответил правильно на все вопросы, а в итоге не позвонили, может я им по возрасту не подходил, потому что был на 3-м курсе, меня собеседовал тех. лид, в конце я спросил все ли нормально и может что-то подтянуть на будущее, мне ответили что я нормально ответил и что я не синиор, и не обязан все знать. Я просто в последнее время заинтересовался схемотехникой и микроконтроллерами и решил прокачать свои знанию по С и С++.

swfvova
() автор топика
Ответ на: комментарий от swfvova

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

TheKnight ★★★
()
Ответ на: комментарий от TheKnight

В свое время я почти посмотрел все видео с JUG Украины и России, в частности и то, что Вы мне скинули, но все равно спасибо

swfvova
() автор топика

Если честно мне не интересно и влом читать книги на 100500 страниц

Не стоит браться за этот язык тогда, правда.

есть неплохие знания Java

Java - как-то уже изрядно надоеда

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

Стоило бы посмотреть в сторону Scala тогда. Я серьезно: и думать нужно будет (о чем-то реально полезном: о действительно интересных задачах, а не о надоедливых низкоуровневых проблемах) и уже полученные из JVM-мира знания и проверенные временем библиотеки применять.

// Сам я в основном на C++ программирую, но мягко говоря поднадоело это.

sbar
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.