LINUX.ORG.RU

Расскажите, как изучали C++

 , , , ,


0

4

Какие учебники использовали, ресурсы? Что порекомендуете (сложность ресурса неважна), исходя из своего опыта? Как применили язык в первый раз на практике? Какие плюсы языка для себя вывели, сравнивая с чистым C? Как долго программируете (-овали) на C++? Заучивали ли UB? Помню из лекций по cpp Ильи Мещерина постоянные странные примеры, с которыми сталкивался он на практике, наподобие «int i = 0; i < v.size(); ++i = UB», куда резольвится имя, если using namespace N внутри цикла и в N есть x, и x есть в global namespace.



Последнее исправление: shfp (всего исправлений: 1)
Ответ на: комментарий от qulinxao3

...аристотелианец...

Это в наши дни ничего не значит.

Я, может быть тоже этот , как его, ну, аристотелианец в общем. :⁠-⁠D И ведь не жужжу же.

sparkie ★★★★★
()

Взял исходняк Задней Дыры by Dildog и вперёд. Долго думал, как функцию вызывать, почему она не вызывается? А первая попытка была как в ассемблере : call myfnc смехота типа? Тогда, мне было не до смеха, интернета не было, спросить неукого. Додумался. Было это в начале столетия.

jnz
()

Советовать не нужно здесь. Программирование не семечки, не насладишься. Мне нужно было, чтобы прогу переделать и антивирус её не определял, а всё для того, чтобы доступ в интернет был. Денег у и меня небыло, а карточку для телефонного коннекта минимум от тридцати рублей был, что по деньгам как сейчас около двухсот. Днём за эту сумму можно было минут пятнадцать посидеть. После часа ночи можно до утра. В общем смысл в том, что сложно это программировать лишь для того, чтобы типа умею. Без практики, через две недели всё забудешь.

jnz
()
Ответ на: комментарий от mittorn

Нет, это для того чтобы можно было объявлять глобальные переменные объектного типа. Возможность инициализаторов это побочный эффект.

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

Да, но вполне могли бы ввести ограничения как для constexpr выражений, например требовать доступный тривиальный конструктор и тогда бы реализовывать глобальные конструкторы не понадобилось. Могу предположить, что хотели сделать возможность инициализировать глобалки типов std::string, std::vector

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от mittorn

Эти ограничения смотрелись бы крайне странно. Объявляешь ты some_class x; а тебе в ответ ругань что у него неправильный конструктор. Причём конструктор мог стать неправильным из-за изменения версии какой-нить библиотеки. А ещё вовсе не везде конструктор инлайновый (реализован в хедере), точнее даже раньше он почти никогда таким не был.

С constexpr ситуация другая - ты явно указываешь что хочешь compile-time вычисление, соответственно ругань на невычислимый в compile-time конструктор смотрится уже понятнее. Ну и constexpr появились сильно позже.

хотели сделать возможность инициализировать глобалки типов std::string, std::vector

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

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

а вот указанные типы (как и вообще STL) появились чуть позже чем язык.

Лучше бы не появлялись :)
Но да, ограничения создали бы больше проблем и проще было реализовать глобальну инициализацию

mittorn ★★★★★
()

Какие учебники и ресурсы? Зачем вообще нужны книги когда учишь какой-то язык программирования? Что мешает начать писать программы и по ходу дела разбираться в деталях, просто читая документацию, и спрашивая у ИИ не совсем понятные вещи?

Что за идея вот сесть читать какие-то талмуды нихера не делая? В голове ничего не отложится таким образом.

Мне вообще никогда не была понятна вот эта концепция сесть и начать учить некоторый язык программирования. Это че, как в видеоиграх типа, должно работать? Сел «учить», над тобой растет полосочка экспы, она заполнилась, и тут раз и выучил - и теперь эксперт. Так что ли?

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

lovesan ★★☆
()

Как долго программируете (-овали) на C++?

меньше, чем на С

Как применили язык в первый раз на практике?

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

Какие плюсы языка для себя вывели, сравнивая с чистым C?

мощнейшие механизмы абстракции. Статически компилируемые шаблоны - непревзойдены в индустрии. Полноценное ООП, с каким угодно наследованием. RAII позволяет детерминированное освобождение ресурсов без костылей типа defer в гошке, «with» в питоне. Единственное, чего нет - мултиметоды, но они вообще очень мало, где есть. Самая простая интеграция с С кодом в индустрии. И при всём при этом, ЯП не морализирует, высасывая «чистоту парадигмы», как в Java и проч. Естественно, уже есть ЯП типа Kotlin, которые убирает кондовость Java, но они для ВМ.

Если конкретно с сишкой сравнивать - наличие STL с контейнерами, в которых использование сырых указателей сведено к минимуму.

Заучивали ли UB?

естественно, нет. Достаточно знать про целочисленные заморочки из C и кое-какие вещи по теме владения объектами. Зубрёжка - это не про программирование вообще. Программисты либо наступают на грабли сами, либо читают об этом из книг. Я в основном из книг читал. На грабли наступил один единственный раз, и то, потому что особо не думал о деинициализации приложения, потому что всё выполнянось в полноценной ОС, которая сама все ресурсы освободила. Но команда QA ко мне привязалась с тикетом, и пришлось пару строк кода с «умным указательством» добавить.

«Учился» просто читая всё, что попадёт под руку. По плюсам на вскидку книг 6 прочитал точно.

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

Какие учебники и ресурсы? Зачем вообще нужны книги когда учишь какой-то язык программирования? Что мешает начать писать программы и по ходу дела разбираться в деталях, просто читая документацию, и спрашивая у ИИ не совсем понятные вещи?

Что за идея вот сесть читать какие-то талмуды нихера не делая? В голове ничего не отложится таким образом.

не согласен. Потому что чтобы ИИ задавать нужные вопросы, надо уже знать базу. К тому же, ИИ надо постоянно проверять, чтобы не было сюрпризов. От того, что ты видишь, что программа работает, у меня лично в голове ничего не откладывается. «Вау, работает!» - это психологическая болезнь школоты.

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

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

Так это потому что массовая школа - институт индоктринации, а не развития отдельных личностей.

seiken ★★★★★
()

До сих пор помню свой первый класс. :) List. :) Список не помню чего, не шаблон. Простенький, на 1 экран (25x80). Я его два дня не мог заставить скомпиляться, не то что работать. Нынче, конечно, с интернетом и ИИшечой – любой дурак справится.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от lovesan

Всегда любил начинать с книги. Книга дает целостную картину, понимание «философии» языка, его особенностей, возможности, «фич». Да, ты это все в деталях не запомнишь, но будешь знать, что тебе доступно среди инструментов и в какую сторону смотреть при необходимости.

urxvt ★★★★★
()

Расскажите, как изучали C++

«Покажите на манекене, где Вас трогали»

Помню из лекций по cpp Ильи Мещерина постоянные странные примеры, с которыми сталкивался он на практике, наподобие «int i = 0; i < v.size(); ++i = UB», куда резольвится имя, если using namespace N внутри цикла и в N есть x, и x есть в global namespace.

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

Какие плюсы языка для себя вывели, сравнивая с чистым C?

Только те, которые в названии.

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

это было бы так если бы не было бы социального заражения

т.е. сами индоктринаторы редко когда достигали уровня школ иезуитов

т.е. гладко было на бумаге и т.п.

в целом «социальный бильярд» приводит к очень неочевидным гитикам

qulinxao3 ★☆
()

@lovesan : ) : кстати коли речь зашла за бесполезность учебников

вот прорешая на плюсах все упры да и в целом реализуй на плюсах по возможности все предложенные инструменты и всяческие жужалки из мюнхенсого? учебника для первокуров середины 70ых в авторах толи сам толи ученик того кто стек запатентовал в конце 50ых:

Гооз Бауэр Информатика (в двух томах)

https://de.wikipedia.org/wiki/Gerhard_Goos

https://en.wikipedia.org/wiki/Friedrich_L._Bauer

ну и в целом полезно Дугласа Роса plex ужаснуца насколько всё таки гумманы Дал/Хоар/Дейкста/Вирт/Симулянты и насколько Страуструп смог(до сих пор) на всех стульях сразу усидеть

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

Лютый антипаттерн если что. Потому что где один - там и несколько, а когда их несколько - становится непредсказуемо в каком порядке они запустятся

Есть редкие ситуации, когда это вовсе не антипаттерн, и когда «где один - там только один, потому что мы всем миром собрались и договорились». Например, телеметрия клиент-серверных систем. Грубо говоря, разработчики приложений могут открывать сколько угодно каналов для связи со сколькими угодно серверами, и вся эта коммуникация осуществляется с использованием публичной части API. А на фоне нам надо гарантировать, что в пространстве одного процесса ОС есть только один экземпляр класса телеметрии, который будет мониторить всё сетевое взаимодействие. И C++ (с определенной версии ЕМНИП) даёт инструменты для гарантированного создания только одного инстанса подобного класса.

seiken ★★★★★
()

Кстати, на счёт изучения, нашёл тут на Амазоне книгу Богуслава Цыганека про C++ высших версий (20-26), правда она ещё не вышла. Но зато там автор в качестве примера строит компилятор FORTH. Но я не к тому пишу этот коммент. Главное в при изучении C++ сразу вбирать в себя относительно простые фичи именно новых стандартов, с 2020 и выше. Но не сильно расстраиваться, если что-то сложное сразу не заходит. Например, «std::expected, круто, Берём, чтобы писать x.doIt(y).and_then(z).or_else(0), им коробки». Или наоборот, «и куда я прикручу эти корутины в моём хелловорлде… Да ну их, отложим пока в сторонку».

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от seiken

Кстати, на счёт изучения, нашёл тут на Амазоне книгу

Я считаю что по эффективности обучения ничто не сравнится с работой в реальных проектах под пристальным присмотром старших коллег. Довольно быстро получаешь ответы на вопросы «а зачем это (конкретно взятая фича языка) вообще нужно?». Другими словами, как по мне - понимание «зачем / почему» гораздо важнее начального «как», и практика здесь решает всё.

bugfixer ★★★★★
()
Последнее исправление: bugfixer (всего исправлений: 1)
Ответ на: комментарий от bugfixer

ну вот я, например, сейчас в команде, в которой знают C++98 и немножечко C++11. Что они могут рассказать мне о практике применения std::ranges или о новых высокоуровневых примитивах синхронизации?

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

Это просто означает что вы, скорее всего, один из самых опытных в этой команде, что кардинально отличается от ситуации ТСа. С чем я однозначно соглашусь - конечно всё определяется уровнем «наставников», от людей застрявших в условных 90ых ничему «модному / молодёжному» вы не научитесь, что может быть и не так печально (по крайней мере с точки зрения того чем в данной конторе заниматься приходится).

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

И хорошо что не могут научить плохому.

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

Лучше быть здоровым и богатым чем не здоровым и не богатым

экономика(не хрематистика) на том и собаку ест что задача не как имея всё получить оптимальным путём - а имея дисбалансы получить устойчивую траекторию роста (т.е не жадно и «динамическое_программирование Белмана» да ещё и с почти угадываением будущего)

ии отличный агрегатор_поисковик эдакаая википедия на максималках -

и да Программирования вторая граматность Ершова уже как полвека тому назад писаная - показыает что иишка это улучшеная книга - книга интерактивная как прям Алмазный Букварь для девиц из Смольного

опыт очевидно нужен - ибо иишка не научит буквально жонглировать - но вот бать годные советы вполне

зы. то что для существенной части что коллектив старых передовиков что автоконсультант подрукой морфируют в Жужалу из Анафема - ну сами буратины глиняные ;(

qulinxao3 ★☆
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.