Підвищення рівня мого C / C ++ коду


16

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

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

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

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

Яку пораду ви б дали, щоб виростити та розширити мої знання та вміння? Конкретні ресурси були б дуже вдячні.


Для книг C ++ дивіться це запитання: stackoverflow.com/questions/388242/…
Naveen

Відповіді:


10

Якщо ви говорите про C / C ++, то ви неодмінно можете скористатись додатковим досвідом. Перша підказка, яку я вам надам, - це те, що C і C ++ - це абсолютно різні мови . Найкращий ресурс для вивчення C ++ - StackOverflow - там багато людей, які мають величезну кількість досвіду та знань.

Наступне, що потрібно зробити, - це розпочати великий проект, як-от спробувати написати 3D-графічний двигун в API низького рівня, як DirectX, і коли ваш дизайн нещасно не вдається, як це роблять усі перші проекти, тоді ви дізнаєтесь щось про те, як ні програмувати.

Ви можете перевірити це посилання на StackOverflow для отримання великого списку хороших книг для вивчення C ++.


3
Ні, найкращий ресурс для вивчення C ++ - це хороша книга, або бажано книги.
Ніл Баттерворт

+1 Для початку великого проекту. Я навчився більше, ніж боротися за допомогою 3D-графічного двигуна, ніж усе, що я читав у книзі. Це змушує вас потрапити в незнайомі ситуації, для вирішення яких потрібні дослідження. Це не дуже, це не ефективно, але ви чомусь навчитесь.
SC Ghost

+1 для "Якщо ви говорите про C / C ++, то ви неодмінно можете скористатись додатковим досвідом". -1 за "Найкращий ресурс для вивчення C ++ - це StackOverflow", тому голосу немає.
Residuum

5

Перш за все, розширіть основні теоретичні знання в тому, що ви ще не знаєте. Вивчіть теорію і напишіть кілька коротких прикладів.

Приклад базового теоретичного підгрунтя включає:

  • Алгоритми та структури даних
  • Дизайн програмного забезпечення (UML, моделі дизайну, OOP)
  • Операційні системи та паралельне програмування

Потім подумайте про вивчення додаткової мови (наприклад, 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 років реальної світової практики, з різним контекстом та видом проектів, платформ тощо.

Ви тільки починаєте свою подорож.


3
Не кажучи вже про те, що "зрілий", як ви його використовуєте, далеко не "нічого, що залишається вчитися". Чим більше ви дізнаєтесь, тим більше речей, яких ви знаєте, не знаєте.
Девід Торнлі

0

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

  • Якщо вам не подобаються основи OOP - вивчіть їх першими. Зрозумійте основи успадкування та інкапсуляції. Знайте, як поводяться віртуальне, публічне / захищене та приватне та статичне ключові слова.

  • Будьте комфортні, використовуючи покажчики та посилання (і загалом віддайте перевагу посиланням). Вивчіть та використовуйте конструкцію smart_ptr <> для досягнення "автоматичного" управління пам'яттю.

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

  • Вивчіть STL: використовуйте рядки, iostream, винятки та класи контейнерів, і віддайте перевагу їм над типами даних char *, FILE * та char [], коли це практично.

  • Почніть використовувати частини бібліотеки Boost - я б рекомендував спочатку вивчити їхню бібліотеку азіо та ниток, враховуючи ваші інтереси. Це дуже потужна, з відкритим кодом, кросплатформна база C ++, що дозволяє вам писати високоякісний код, який також є портативним. (Багато доповнень до основного стандарту C ++ виникли у програмах Boost)

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.