Что лучший способ состоит в том, чтобы углубить к усовершенствованному C++?

И что Ваше предложение состоит в том, чтобы переместить в следующий уровень программирования на C++ для кого-то, кого можно назвать, ну, в общем, промежуточным программистом на C++?

Промежуточный Программист: Понимает ISO C++ обоснованно хорошо, может прочитать и изменить код других с некоторой удачей, хорошей со структурами данных и алгоритмами, но не большой

  1. Изучите C++ 0x
  2. Учитесь, какой ассемблерный код сгенерирован для различных типов конструкции, возможно, для x86
  3. Забудьте нюансы языка и получите основные принципы - теория автоматов от где-нибудь как Sipser или Papadimitriou
  4. Если Вы знаете ООП или по крайней мере думаете, что делаете, рассматриваете, как включить навыки функционального программирования с C++
  5. Работа над чем-то на строках компилятора и открытого исходного кода как LLVM или Набор инструментальных средств GNU
  6. Вся эта мысль арестована - следующий уровень означает более сложные структуры данных. Таким образом, если Вы знаете AVL, рассматриваете изучение отклоняющихся налево красных черных деревьев и др.

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

Примечание: Спасибо всем за очень полезные ответы.

9
задан Fanatic23 5 July 2010 в 15:27
поделиться

12 ответов

Чтобы ответить на ваши конкретные вопросы:

Изучите C ++ 0x

Вам определенно нужно это сделать.Так что, возможно, у вас есть ответ прямо здесь ...

Узнайте, какой ассемблерный код создается для различных конструкций типы, возможно, для x86

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

Забудьте о языковых нюансах и получите основы - теория автоматов из где-нибудь вроде Сипсера или Пападимитриу

Если это вас заводит, я полагаю ...

Если вы знаете ООП или, по крайней мере, думаете, что знаете, подумайте, как включить навыки функционального программирования на C ++

Из всех поддерживаемых C ++ парадигм функциональное программирование, вероятно, поддерживается хуже всего - если вы хотите изучить FP, изучите Haskell (или что-то еще), а не C ++.

Работайте над чем-нибудь в духе компилятора и с открытым исходным кодом, например, LLVM или GNU Toolchain

GNU написан на C, так что вряд ли он улучшит ваши навыки C ++ - я мало знаю о LLVM.

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

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

9
ответ дан 4 December 2019 в 06:19
поделиться

Я бы сказал, что вы можете делать все из списка, но не все сразу. По крайней мере, ИМО, вы смотрите на вещи немного назад. Изучение C ++ (или любого другого языка) - это средство для достижения цели, а не самоцель.

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

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

14
ответ дан 4 December 2019 в 06:19
поделиться

Я был бы решительным сторонником пункта 4. Изучение функционального программирования очень ценно. Я не очень много делал этого на C ++, поэтому не знаю, насколько это естественно, но мне нравится, как Ruby и Scala делают функциональное программирование.

1
ответ дан 4 December 2019 в 06:19
поделиться

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

1
ответ дан 4 December 2019 в 06:19
поделиться

Изучите, как другие люди элегантно решают сложные проблемы. Очень важно: просто тренируйтесь, не забывая оценивать. Пересмотрите свой код или методы решения проблем.

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

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

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

1
ответ дан 4 December 2019 в 06:19
поделиться

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

0
ответ дан 4 December 2019 в 06:19
поделиться

Я бы узнал о BOOST .

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

  • Его использование сделает вас более продуктивный и лучший программист на C ++!
  • Понимание того, как это работает, даст Вы значок "гуру" !!
  • Содействие и расширение его будут обеспечить бессмертие !!!
8
ответ дан 4 December 2019 в 06:19
поделиться

Если вы знаете базовый язык:

Тогда в таком порядке (хотя будет некоторое обратное отслеживание)

  • Изучите изучение и дайджест RAII
    • Выясните, как использовать RAII во всех Контексты C, поэтому вы никогда не зацикливаетесь на коде C.
  • Выясните исключения и их гарантии.
    • Выясните, как реализовать методы, чтобы выполнялся каждый из различных типов гарантий.
  • Узнайте о стандартных контейнерах.
    • Узнайте о требованиях, предъявляемых к каждому контейнеру.
  • Подробнее об итераторах
    • Узнайте о свойствах итератора и о том, как они работают вместе с указателями.
  • Подробнее о библиотеке алгоритмов
  • Подробнее о потоковой библиотеке
    • Вернитесь назад и узнайте, как работают потоки и итераторы.
  • Узнайте об указателях методов и о том, как их можно использовать в алгоритмах.
    • Выясните, что такое функтор и как его использовать.
  • Узнайте о привязке и посмотрите на привязку ускорения.
  • Узнайте о контейнерах ускорения и о том, чем они отличаются от стандартных контейнеров.
  • Узнайте об умных указателях.
    • Какие бывают типы и когда эффективно использовать каждый из них.
  • Начните читать о других вещах, доступных в усилении.

На этом этапе вы начнете изучать, как использовать C ++

3
ответ дан 4 December 2019 в 06:19
поделиться

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

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

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

1
ответ дан 4 December 2019 в 06:19
поделиться

Не беспокойтесь сейчас о C ++ 0x слишком сильно ... сначала убедитесь, что вы действительно действительно понимаете основы. Это означает, что вы должны понимать ссылки, указатели, L-значения, R-значения, шаблоны, наследование, управление памятью и т.д. модель и что означает каждое выражение.

Мне очень нравятся №4 и №6. Что касается пункта 6, попробуйте кодировать некоторые действительно продвинутые структуры данных на C ++. Ничто не заставит вас выучить язык быстрее, чем попытка решить некоторые проблемы, связанные с расширенными структурами данных.

1
ответ дан 4 December 2019 в 06:19
поделиться

Для другой точки зрения: 7. Изучите другие языки программирования, настолько отличные от C ++, насколько это возможно. Обязательно узнайте о функциональном программировании и пока не беспокойтесь о том, как это применимо к C ++. Некоторые языки для рассмотрения: Scheme, Common Lisp, Haskell, Prolog, Forth, Smalltalk. Вам не обязательно овладевать ими, но вы должны попытаться понять, как они работают и какой хороший код на этих языках.

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

0
ответ дан 4 December 2019 в 06:19
поделиться

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

1
ответ дан 4 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: