LINUX.ORG.RU

Есть пару вопросов про C++

 , , ,


0

4

Если будет у кого-то время для ответа.

1. STL+IDE - это благо или зло? Ускоряет процесс создания или это для быдлокодеров, а программисты используют только Vim и встроенные инструменты?

2. Если в планах только системное программирование в Linux на C, можно ли обойтись без ООП C++ или всё же закупаться книгами по крестам?

Заранее благодарен.

Ответ на: vimtutor от le_legioner

Не советую сильно прислушиваться к вимерам. Sunk cost fallacy плюс стокгольмский синдром. А замеров увеличения производительности нигде нет.

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

А замеров увеличения производительности нигде нет.

У меня есть знакомый вимер. И я видел с какими муками он выполняет навигацию по проекту. Я имею ввиду переход между определением и реализацией методов. Особенно, если у метода есть перегрузки. Ну или в случае виртуальных функций. Когда я вижу, как он грепает исходники, мне хочется плакать. В общем вим сливает QtCreator с огромным счётом.

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

Именно так.

Уже давно не так. И вряд ли когда либо было так.

С и C++ — это разные языки, программировать на них нужно по-разному. И то, что изрядная часть C является подмножеством C++, этого факта не отменяет.

Так и я то же самое сказал:

Это и есть Си, только с классами.

Когда-то так и было (лет 30 назад). Сейчас — не совсем так.

Но только в отличие от вас, я не выдёргиваю фразу из контекста, а отвечаю на вопрос в контексте ситуации, описанной ТС'ом в верхнем и других постах. И вот что он, среди прочего, писал:

Есть вакансия в конторе, которая пишет разный низкоуровневый софт для UNIX-only. Обещали стажёром взять, если C/C++ основы освою. Дали полгода для этого.

говорят они - учи С++. Это и есть Си, только с классами. ;-) Боюсь, что и классы не выучу и Си не осилю с ними. ;-)

Т. е. мы имеем:

  1. Есть контора, в которой пишут низкоуровневый софт и на си, и на си++.
  2. Си++ они называют «си с классами», из чего можно сделать вывод, что реально фичи крестов они не используют. Максимум — иногда добавляют в структуры методы, называя это классами.
  3. У ТС'а не так много времени на всё это.

Соответственно, исходя из дефицита времени, необходимости изучить и то, и другое, а также из того, что си

  1. проще для изучения
  2. судя по всему более актуален для этой конторы

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

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

я посоветовал не валить всё в одну кучу, а начать изучать си, после чего перейти к си++.

Это и есть вредный совет. Даже «Си с классами» требует других подходов к проектированию и разработке программ, нежели чистый Си. Особенно если там не застряли на C++98.

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

Особенно если там не застряли на C++98.

Из рассказанного ТС'ом, у меня сложилось впечатление, что там застряли на неофициальном стандарте, описанном в 1-ом издании книжки Страуструпа «Язык программирования Си++» в середине 1980-х. Хотя, конечно, впечатления бывают ложными.

А по мне, так главная сложность обоих языков — это совсем не классы и даже не шаблоны, а указатели. Т. е. понять, что это такое, — несложно, но вот применять их так, чтоб программа не падала через раз, куда сложнее. И на это, имхо, стоит обратить первостепенное внимание, т. к. без умения работать с указателями двигаться дальше — просто бесполезно. Исходя из этого, я бы посоветовал сначала яву или паскаль, а уже потом си/си++. Но на такое обучение может уйти слишком много времени, и ТС просто не успеет.

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

Как раз сейчас читаю учебник по Паскалю. ;-) Чтобы разобраться с указателями и подходом к программированию. Благодарю за все советы.

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

Как раз сейчас читаю учебник по Паскалю. ;-) Чтобы разобраться с указателями и подходом к программированию.

Паскаль для обучения тем и хорош, что он не так сильно завязан на эти самые указатели. Ну и ещё намного строже, чем си и даже чем си++. Т. о. можно отложить борьбу с указателями и неправильным приведением типов на конец, когда уже появится какой-никакой опыт программирования хотя бы учебных программ.

Однако, когда в запасе только 6 месяцев, и надо изучить 2 языка, пусть и близких, да ещё очень желательно библиотеки posix (т. к. в unix без них никуда), и, наверно, есть и другие дела, кроме изучения языков... может банально не хватить времени. В результате паскаль ты изучишь, а к си и крестам даже не приступишь. Изучать си с крестами и без них в качестве первого языка действительно не лучшая идея, но мне кажется, что в данном случае другого выбора у тебя нет. Вот если бы ты был студентом первокурсником, и впереди у тебя было 5 лет учёбы, тогда другое дело.

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

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

У меня да, такая ситуация - или понять тот язык, вакансию на котором предлагают или не рыпаться, т.к. академически изучать программирование и затем искать работу - не тот возраст. Молодёжь на рынке труда.

Благодарю за подсказки.

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

Когда изучишь Прата и попрактикуешься, напиши о впечатлениях от книг, если не сложно, и кастани меня. Просто чтоб знать, стоит ли рекомендовать этого автора. А то однажды я прочитал очень хорошие отзывы о какой-то книге по крестам (по-моему Шилдта, но не гарантирую) и порекомендовал её человеку, основываясь на отзывах. А потом у него в книге в учебных примерах ошибки обнаружились.

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

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

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

Почему бы вам не взять «Язык программирования C++» Б.Страуструпа и не учить C++ по этой основополагающей книге? Не знаю, как в 4-ом издании, а в предыдущих в конце каждой главы были упражнения для закрепления пройденного материала. Читайте, делайте упражнение, что не понятно, спрашивайте. Некоторые упражнения там были вполне себе приличные по сложности и интересные.

Это не «Освой C++ за 21 день», но если у вас полгода впереди, то некий базовый уровень при должном желании получить сможете.

При этом из C++ в чистый C вы сможете перейти без особых проблем. А вот освоить нормально C++ после C будет гораздо сложнее.

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

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

В чём сила, брат?

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

Я сам учился по книге Страуструпа, но это было очень давно и это было еще 2-е издание. Потом учил других, уже по третьему изданию. Как по мне, то более фундаментального труда по C++ нет. Все остальное должно изучаться уже после Страуструпа.

Кстати, упражнения там были реально хорошие. Если главу просто пробежал «по верхам», то споткнешься даже на простых задачках.

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

Ну и вы это: к советам с форумов относитесь с опаской. Вы же не знаете, кто вам что советует. Говорить красиво на форумах могут многие. Писать нормально программы получается уже не у всех. Научить чему-то, будучи при этом хорошим программистом, могут тем более не многие.

Почему бы вам не спросить рекомендации по литературе у тех, кто собирается брать вас на работу. Заодно и задать вопрос: «Почему именно эта книга?»

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

программистам не нужно делать странных вещей с текстом

Врёти. Взять хоть переход между началом/закрытием оператора, крайне неудобно без этого навигироваться по коду; оно без вимоуправления вообще где-то есть?

bodqhrohro_promo
()
Ответ на: комментарий от linuhs_user

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

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

Я не учу Паскаль. Просто книжка для детей. И книг по Си для нулевиков нет.

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

Ну тащемта, тачпад-то под руками в основной позиции. А если ещё и трекпоинт есть...

bodqhrohro_promo
()
Ответ на: комментарий от linuhs_user

Я имею в виду, что Ctrl+←/→ в CUA-шном софте обычно используется для навигации по словам. Если в кодоредакторах оно на навигацию по открывающим/закрывающим операторам перебиндено, то чем тогда по словам бегать?

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

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

linuhs_user
()
Ответ на: комментарий от bodqhrohro_promo

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

Я имею в виду, что Ctrl+←/→ в CUA-шном софте обычно используется для навигации по словам. Если в кодоредакторах оно на навигацию по открывающим/закрывающим операторам перебиндено, то чем тогда по словам бегать?

Ну вот я тоже не люблю чересчур навороченные ide'шки, но и с vim'ами/emacs'ами разбираться неохота. Т. е. vim'ом я пользоваться умею, но по-минимуму (если надо что-то отредактировать на сервере, где ничего кроме vim'а нет). А из редакторов мне нравится kwrite (я вообще ко многим kde'шным программам привык ещё со времён kde3, хотя после выхода kde4 перестал пользоваться этой de). В kwrite блоки можно просто сворачивать и разворачивать мышкой, а при установке курсора на границу блока, он подсвечивается другим цветом.

Наверно, все эти вимовско-емаксовские навороты удобны, и я не раз порывался нормально освоить имакс, да всё как-то руки не доходили. Однако, имхо, человеку, которому надо за пол года освоить 2 языка, осваивать ещё и vim — чересчур. Вот когда освоится в си и крестах, устроится на фирму, успешно пройдёт испытательный срок, изучит всё, что ему нужно по основной работе, тогда и вимом можно будет заняться на досуге. :-)

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

смотря что считается словом

Ну вот стою я, допустим на

for (i = 0, y = 2; i < y + z; i += y) {
              ^
Как в пару нажатий перепрыгнуть на z, чтобы заменить его на что-то другое? В виме даже по словам бы прыгать не пришлось, просто fz.

bodqhrohro_promo
()
Ответ на: комментарий от linuhs_user

если в каэсочку играть то можно довольно быстро наводиться

А каэсочка требует постоянно перебрасывать руку с клавы на мышь и обратно?

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

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

linuhs_user
()
Ответ на: комментарий от bodqhrohro_promo

В виме надо еще постоянно режимы клацать.

перебрасывать руку с клавы на мышь и обратно?

Для текста это все равно быстрее.

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

В виме надо еще постоянно режимы клацать

Так кнопки ж под руками, в отличие от мыши, чего там клацать.

Для текста это все равно быстрее.

Быстрее, чем тачпад/трекпоинт?

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

Да ладно?!

Поставь нормальный редактор.

Так кнопки ж под руками, в отличие от мыши, чего там клацать.

Помню была картинка про эмаксера, где пальцы такие длиннющие.

Быстрее, чем тачпад/трекпоинт?

Быстрее чем чистая клавиатура.

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

Поставь нормальный редактор.

Конкретнее. И покажи, как в этом редакторе тогда перемещаться по символам, если просто по стрелочкам он прыгает по целым словам.

где пальцы такие длиннющие

И восемь?

Быстрее чем чистая клавиатура.

Пони едят меньше, чем лошади; давайте выкинем автомобили и заменим их пони.

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

Конкретнее. И покажи, как в этом редакторе тогда перемещаться по символам, если просто по стрелочкам он прыгает по целым словам.

Ctrl+Arrow слова, Arrow символы.

Пони едят меньше, чем лошади; давайте выкинем автомобили и заменим их пони.

Я только мышку видел. Говорить про что то другое не буду.

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

Ctrl+Arrow слова, Arrow символы.

Ёханыйдрын, а это тогда как?!

for (i = 0, y = 2; i < y + z; i += y) {
                 ^
    ...
}
Как на нижнюю скобку прыгнуть?

Я только мышку видел

Верни машину времени на место.

bodqhrohro_promo
()

Про IDE - мне очень нравился CLion, навигация по коду нравилась, вообще его эргономика и то что все из коробки работает, особенно нравилось как он умел понимать шаблоны и метапрограммирование, sfinae даже подсвечивал (типа если шаблон не может быть актуализирован).

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

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

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

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

и стандартых решений типовых задач

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

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

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

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

Быстро нажимаешь стрелочку не отпуская Ctrl.

Знатное задротство, почему бы не перейти в нужное место в пару нажатий? Эдак можно одним геймпадом по коду бегать и даже текст вводить (на соснолях для этого экранная клавиатура с навигацией стрелочками), всего-то надо быстро-быстро нажимать стрелочки.

Ctrl+Down

Это уже интереснее; гхде работает? И что, если я хочу перейти не в конец всего блока for, а в конец текущей пачки операторов? Тут бы исконное значение Ctrl+↓ «к концу абзаца» как раз пригодилось.

for (....) {
  abc();
   ^
  def();
  ghi();

  jkl();
  mno();
}

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

ну, по сути так оно и есть. а насчёт осцилла: а чем же ещё узнать то, что происходит на плате? других методов не существует.

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

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

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

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.