Повышение уровня моего кода C / C ++

16

Я программирую уже 3-4 года и чувствую, что меня больше нельзя назвать новичком, но я читаю некоторые вопросы на этом сайте и думаю, о чём они говорят? Сейчас я чувствую то же самое, когда беру книги по программированию.

Я прочитал несколько начинающих книг по программированию, некоторые на C / C ++ и другие на тему игр. Я написал несколько более сложных вещей, таких как очень простой AI, последовательный интерфейс и интерфейс TCP / IP.

Я планирую стать программистом игры, но в последнее время я немного заинтересовался встраиваемыми системами, имея возможность поработать с ними (последовательный интерфейс).

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

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

Skeith
источник
Для книг на C ++ смотрите этот вопрос: stackoverflow.com/questions/388242/…
Naveen

Ответы:

10

Если вы говорите о C / C ++, то вы определенно могли бы использовать дополнительный опыт. Первый совет, который я дам вам, заключается в том, что C и C ++ - это совершенно разные языки . Лучший ресурс для изучения C ++ - StackOverflow - там много людей, которые имеют огромный опыт и знания.

Следующее, что нужно сделать, - это запустить крупный проект, например, попытаться написать движок трехмерной графики в низкоуровневом API, таком как DirectX, и когда ваш дизайн потерпит неудачу, как все первые проекты, вы узнаете кое-что о том, как программировать.

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

DeadMG
источник
3
Нет, лучший ресурс для изучения C ++ - это хорошая книга или, желательно, книги.
Нил Баттерворт
+1 За старт крупного проекта. Я многому научился, преодолевая движок трехмерной графики, чем все, что я читал в книге. Это заставляет вас попадать в незнакомые ситуации, которые требуют исследований, чтобы решить. Это не красиво, не эффективно, но вы чему-то научитесь.
Призрак SC
+1 за «Если вы говорите о C / C ++, то вы определенно могли бы использовать дополнительный опыт». -1 для «Лучший ресурс для изучения C ++ - это StackOverflow», так что голосования нет.
Residuum
5

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

Пример базового теоретического фона включает в себя:

  • Алгоритмы и структуры данных
  • Разработка программного обеспечения (UML, шаблоны проектирования, ООП)
  • Операционные системы и параллельное программирование

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

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

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

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


Специально для игрового программирования я рекомендую выбрать следующие домены / технологии:

  • Основы обработки изображений
  • Любая конкретная технология интерфейса
  • Основы компьютерной графики
  • Любой конкретный графический движок (например, DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Основы механической физики
  • Любой конкретный физический движок (например, PhysX, ...)
  • Любой конкретный игровой движок (например, XNA, ...)
  • Многопоточное программирование
  • Распределенное программирование


Редактировать:

Как научиться:

  • Прочитайте и запустите примеры из CodeProject.
  • Просмотрите несколько книг в библиотеке или магазине книг / электронных книг, пока не найдете пару книг, которые вам нравятся (которые соответствуют вашему стилю чтения + охватывают темы, которые вы хотите прочитать).
  • Читайте блоги.
  • Попробуйте вещи и спросите на StackOverlow, когда вы застряли.
Дэнни Варод
источник
Я знаю, прямой х. во-вторых, я думал об этом, но не могу найти никаких ресурсов, кроме самых базовых, есть ли у вас какие-либо советы о том, КАК изучать вещи?
Скит
2
Пишем примеры - метод проб и ошибок - лучший способ. Также см. Редактирование.
Дэнни Варод
1

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

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

Вот мой совет:

  • Прочитайте эти книги: /programming/388242/the-definitive-c-book-guide-and-list -> Начните с вводных книг, даже если вы не новичок, потому что у вас есть перед тем, как продолжить. Затем узнайте о шаблонном метапрограммировании и ограничениях встроенных систем.
  • Практикуйтесь много: чем больше вы применяете то, что вы изучаете, тем больше вы это понимаете. На данный момент, мой способ - это проверить любой уголок языков и контекста в маленьких тестовых проектах. У меня также есть «большие» домашние проекты, где я контролирую все, и я практикую новые методы и подталкиваю их, пока они не сломаются.

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

Вы только начинаете свое путешествие.

Klaim
источник
3
Не говоря уже о том, что «зрелый», как вы его используете, далеко не «нечему учиться». Чем больше вы учитесь, тем больше вещей, которые вы знаете, вы не знаете.
Дэвид Торнли
0

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

  • Если вы не знакомы с основами ООП - изучите их в первую очередь. Понимать основы наследования и инкапсуляции. Знать, как ведут себя виртуальные, публичные / защищенные и приватные, а также статические ключевые слова.

  • Будьте удобны, используя указатели и ссылки (и вообще предпочитайте ссылки). Изучите и используйте конструкцию smart_ptr <> для достижения «автоматического» управления памятью.

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

  • Изучите STL: используйте string, iostream, исключения и классы контейнеров и предпочитайте их более низкоуровневым типам данных char *, FILE * и char [], когда это возможно.

  • Начните использовать части библиотеки Boost - я бы рекомендовал вам сначала изучить их библиотеки asio и thread, учитывая ваши интересы. Это очень мощная, кроссплатформенная исходная база C ++ с открытым исходным кодом, которая позволит вам писать высококачественный и переносимый код. (Многие дополнения к основному стандарту C ++ произошли в материалах Boost)

  • Веселиться! Серьезно - выберите несколько любимых проектов для написания кода. Может быть, возиться с платами Arduino, если вам нравятся проекты встроенного программирования.

  • Получите некоторый опыт - если вы использовали только Windows / Visual Studio C ++, попробуйте написать код для Linux / g ++ или OS X / XCode (вы можете кодировать C ++ на Mac или вы действительно можете расширить свой кругозор и пойти для Objective-C, чтобы увидеть, как другая ветвь языков ООП решает проблемы!)

holtavolt
источник