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

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

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

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

Ответ 1

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

  • Подробнее...
  • узнать еще больше,
  • узнать еще больше.

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

Посмотрите Окончательное руководство и список книг на С++ и сделайте выбор.
Я бы рекомендовал Modern С++ Design от Andrei Alexandrescu и С++ Templates. Полное руководство от Vandevoorde и Josuttis. Только эти двое - достаточно захватывающий вход, чтобы один программист получал новые идеи в течение нескольких месяцев, если не лет. (Обратите внимание, что чтение их в этом порядке имеет то преимущество, что книга Андрея тоньше и заставляет вас читать другую, чтобы полностью понять, что он пишет. Чтение их в обратном порядке имеет то преимущество, что вы не потеряетесь так часто в книге Андрея. Что бы вы ни выбрали.)

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

из Math libs, графики, связи, windows/x-windows/kde/gnome и т.д.

если вы хотите изучить зрелую библиотеку коммуникаций, я предлагаю использовать АДАПТИВНАЯ среда связи (ACE (TM)), которая немного старомодная, но имеет очень приятный набор передовых концепций языка.

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

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

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

ОК, вот некоторые идеи из головы:

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

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

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

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

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

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

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

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

Ответ 11

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

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

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