Что я должен написать, чтобы проникнуть в глубины продвинутого C ++? - PullRequest
10 голосов
/ 13 июля 2010

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

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

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

Ответы [ 11 ]

6 голосов
/ 13 июля 2010

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

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

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

Взгляните на Полное руководство и список книг C ++ и сделайте свой выбор.
Я бы рекомендовал Современный дизайн C ++ от Андрея Александреску и Шаблоны C ++ Полное руководство от Vandevoorde & Josuttis. Одних этих двух достаточно для того, чтобы один программист мог получать новые идеи месяцами, если не годами. (Обратите внимание, что чтение их в таком порядке имеет преимущество в том, что книга Андрея тоньше и заставляет вас хотеть читать другую, просто чтобы полностью понять, что он пишет. Чтение их в обратном порядке имеет то преимущество, что вы не потеряетесь так часто в книге Андрея. Все, что вы предпочитаете.)

4 голосов
/ 13 июля 2010

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

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

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

2 голосов
/ 13 июля 2010

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

1 голос
/ 13 июля 2010

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

1 голос
/ 13 июля 2010

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

0 голосов
/ 13 июля 2010

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

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

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

Хорошо, вот несколько идей, которые мне не нравятся:

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

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

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

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

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

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

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

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

0 голосов
/ 13 июля 2010

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

0 голосов
/ 13 июля 2010

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

0 голосов
/ 13 июля 2010

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

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

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

0 голосов
/ 13 июля 2010

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...