Что я должен кодировать для вхождения в глубины усовершенствованного C++?

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

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

Вот почему я ищу что-то, что я мог кодировать сам, с помощью предпочтительно только C++ (+ повышение, возможно) - утилита командной строки, никакая графика. И я действительно не хочу присоединяться к любому сообществу разработчиков ПО с открытым исходным кодом. Рассмотрение кода других полезно, я знаю. Но это - то, что я делаю на работе много так... нет, спасибо. Проект может быть чем-либо, значимым или бессмысленным, полезная утилита, или просто что-то составило, который не имеет никакого реального использования. Единственное требование, что оно вынудило бы меня действительно протестировать свои навыки C++. Или по крайней мере это должно быть очень трудно или даже невозможно кодировать с элементарными знаниями C++ - я - вид человека, который никогда не удовлетворен кодом, который просто работает, таким образом, я полагаю, что это вынудит меня учиться. Но примите во внимание, что я - рабочий, и мое время ограничено, так ответы как "код, Ваша собственная ОС" действительно не поможет многому.

10
задан 3 revs, 2 users 73% 12 August 2015 в 17:48
поделиться

11 ответов

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

  1. Узнать больше,
  2. узнать еще больше,
  3. узнать еще больше.

И, нет, я не шучу. Нисколько. Я начал изучать C ++ около 15 лет назад и до сих пор регулярно изучаю новые вещи.

Взгляните на The Definitive C ++ Book Guide and List и сделайте свой выбор.
Я бы порекомендовал Modern C ++ Design Андрея Александреску и C ++ Templates The Complete Guide Vandevoorde & Josuttis. Одних этих двух достаточно, чтобы один программист мог получать новые идеи на месяцы, если не годы. (Обратите внимание, что чтение их в таком порядке имеет то преимущество, что книга Андрея тоньше и заставляет вас захотеть прочитать вторую, просто чтобы полностью понять то, что он пишет. Чтение их в обратном порядке имеет то преимущество, что вы не будете так часто теряться. в книге Андрея. Как хотите.)

6
ответ дан 3 December 2019 в 23:48
поделиться

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

Опасность создания маленького глупого демонстрационного приложения, на мой взгляд, заключается в том, что у вас не будет стимула довести его до конца. Гораздо лучше иметь в голове цель - создать полезный для вас инструмент. Именно этим я сейчас и занимаюсь: У меня очень запутанный рабочий процесс импорта фотографий, их маркировки, переименования и редактирования, поэтому я решил написать приложение на C# и WPF, которое будет делать это за меня. Это дает мне стимул довести проект до конца".

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

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

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

2
ответ дан 3 December 2019 в 23:48
поделиться

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

1
ответ дан 3 December 2019 в 23:48
поделиться

Выберите любую продвинутую структуру данных (например, дерево, очередь приоритетов и т.д.) и реализуйте ее.

Таким образом, вы научитесь:
- Проектировать в стиле ООП
- Предоставлять полезный и последовательный API
- Правильно использовать наследование, шаблоны, встроенные функции для достижения целей реализации
- Писать кроссплатформенный код
-

Используйте код STL как образец того, как все должно быть сделано.

0
ответ дан 3 December 2019 в 23:48
поделиться

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

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

из математических библиотек, графики, коммуникаций, windows / x-windows / kde / gnome и т. Д.

если вы хотите изучить зрелую коммуникационную библиотеку, я предлагаю использовать ADAPTIVE Communication Environment (ACE (TM)) , которая немного старомодна, но имеет действительно хороший набор продвинутых концепций языка.

Имеют высокую кривую обучения, но им пользуются все мэры компаний по всему миру.

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

Вы можете использовать Netbeans или Eclipse в качестве мультиплатформенных, KDE Developer для Linux (с KDE), MS Visual Studio в Windows и т. Д.

0
ответ дан 3 December 2019 в 23:48
поделиться

Инструмент профилировщика C++ заставит вас заглянуть в глубины языка.

0
ответ дан 3 December 2019 в 23:48
поделиться

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

Итак, я рекомендую получить библию Design Pattern от GoF и написать код, который ее использует. Приложение? Может быть любым, как указывалось ранее, потому что ничто не заставляет вас использовать какие-либо расширенные функции чего-либо вообще.

( нужны доказательства? Некоторые из самых сложных систем в мире написаны на COBOL людьми с нулевым теоретическим знанием CS )

-1
ответ дан 3 December 2019 в 23:48
поделиться

Я выполнил все упражнения в книге Строуструпа "Язык программирования C++: Special Edition в течение примерно 6 месяцев. Это того стоило.

1
ответ дан 3 December 2019 в 23:48
поделиться

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

0
ответ дан 3 December 2019 в 23:48
поделиться

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

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

Единственное требование - чтобы он заставляют меня действительно проверить свои навыки C ++.

Хорошо, вот несколько идей, пришедших мне в голову:

Написать синтаксический анализатор для чего-нибудь (выражения, простой язык, XML, логические выражения?). Еще лучше напишите синтаксический анализатор / интерпретатор для языка, подобного прологу (вы определяете предикаты, объекты и отношения), а затем заставьте приложение выполнять логический вывод по заданным правилам для получения результата).

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

Напишите пакет XML для включения в повышение (эй, вы хотели что-то, что заставит вас действительно проверить свои навыки).

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

Напишите пакет AI, позволяющий легко разрабатывать и реализовывать различные нейронные сети с настраиваемыми функциями обучения / обратной связи.

Или, по крайней мере, должно быть очень сложно или даже невозможно закодировать с базовыми знаниями C ++

Только с базовыми знаниями C вы можете писать графические платформы, операционные системы и системы управления базами данных, математические и криптографические пакеты и так далее (практически все). Нет ничего , что невозможно было бы закодировать с базовыми знаниями C ++ ).

Ваше воображение действительно ваше предел.

0
ответ дан 3 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

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