Советы по C++

    Предыстория



    За 2 года, я прочитал очень много книг по C++. Лучшим вариантом запоминания информации считаю ведение конспектов.
    Несколько дней назад я остался без компьютера и интернета. Чтобы не тратить время впустую решил пересмотреть все свои записи. В тот момент ко мне и пришла идея сервиса, о котором я расскажу ниже.


    Основная идея


    Решено было создать минималистический сервис, который будет показывать пользователю совет по языку программирования C++.
    За пару часов был набросан дизайн и выбран инструментарий. Я далеко не идеальный веб-программист (да и вообще не веб программист), поэтому выбрал стандартную связку php+js/html.

    На даный момент в базе создано 50 записей. Создавая их, я взял за правило следующие пункты:
    • Везде, где можно, должна быть ссылка на стандарт C++, где подтверждается текст заметки
    • По возможности, пример должен содержать минимальный исходный код примера
    • Ссылки на полезные статьи (а-ля Википедия)

    Как все работает


    Чтобы максимально упростить чтение заметок, я решил реализовать сайт, используя ajax-технологию. Управлять порядком заметок можно 3 разными логическими путями:
    • Случайный совет
    • Мне повезёт — случайная выборка с учетом рейтинга заметки
    • Следующая/предыдущая заметка — ручное и прямое управление

    Сформированный get-запрос передается специальному php-скрипту распределителю с элементарной логикой. Информация берется из mysql-базы и отдается json-массивом.

    Результат:


    Много функций еще не реализовано, так как я не знаю, понадобится ли кому вообще подобный сервис. Из возможных улучшений:
    • Авторизация через социальные сети
    • Добавление заметок в избранное
    • Игнорирование заметок
    • Рандом по непрочитанным заметкам
    • Не ограничиваться C++, ввести подобие хабов на хабре

    Ссылка на проект.

    Ожидания:
    • Нужно/Не нужно
    • Отзывы по дизайну и архитектуре
    • Отзывы по тексту заметок/советов


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

    Если есть дизайнеры, которые готовы помочь проекту, буду только рад предложениям и исправлениям.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 59

      +23
      Обоже, уберите «лучайный совет». Ваша дизайнерская метафора не работает. Ну ни чуточки.
      И еще больше это касается «не повезет».
        +3
        Жаль. Еще одно доказательство тому, что программисты не должны заниматься дизайном. :)
          0
          Тут дело даже не только в том, что, например, я был около 2-3 секунд в состоянии WTF и после этого примерно столько же был уверен, что вы опечатались. Тут еще то, что текст кликабелен, а «C» нет, что разумно означает, что «C» — это логически другая часть документа.
            0
            Оу, я поизучал и нашел, что таки кликабельно! Просто понять это сложно. Наводишь на один элемент, подсвечивается другой.
            +3
            лол, смотря какие, я видел немало хороших программистских дизайнов
              +1
              Просто подчеркните первую букву
                0
                Простое подчёркивание сработало бы, как уже принято в интерфейсах
                +18
                А мне нравится.
                • UFO just landed and posted this here
                    +1
                    В следующей версии проекта проработаю это, спасибо.
                  +5
                  Я прочитал нормально.

                  Покажите свои макеты :) Часто дизайнеры рисуют красиво, но юзабилити — кал.

                  Программисты же обладают логикой, и при должной тренировке, могут стать гораздо более сильными проектировщиками интерфейсов.
                  +7
                  Нужно вычитать тексты, а то сборник вредных советов и неправильной терминологии получится. Например:

                  > friend-аттрибут

                  friend — не атрибут.

                  > Старайтесь писать вместо int* a → int a[].

                  Вредный совет. int a[] автоматически заменяется (type adjustment) на int *a во многих местах, например, в параметрах функции.

                  > Если нужно указать точный размер массива, передаваемого в функцию, сделайте аргумент ссылочного типа:
                  > void Foo(int (&array)[42]);

                  Я бы не хотел это поддерживать. std::array же.

                  > tips.wincode.org/#24

                  И зачем этот хак? А как же mutable?

                  И так далее, к каждому второму совету у меня есть уточнения или претензии?

                  Ссылки на разделы стандарта следует писать в удобочитаемом виде, а не в виде номера раздела (например, [lex.icon]).

                    +1
                    Спасибо за дельный комментарий. Скажем так, первым делом я хотел узнать у общества, нужно ли вообще подобное. Естественно, далее все тексты будут пересмотрены.
                      +2
                      Это может быть нужно только если советы во-первых, правильные, во-вторых, с объяснением почему так, а в-третьих, спорные (полезность зависит от проекта и прежде чем применять стоит хорошо подумать) должны быть явно отмечены как таковые.
                  • UFO just landed and posted this here
                      +4
                      Спасибо за репорт, в одном месте предусмотрел, а в комментариях — нет.
                      Получается, что подобным сервисом я узнаю не меньше, чем остальные :)
                    • UFO just landed and posted this here
                        0
                        Можете сказать. что вам не понравилось в дизайне? В следующей версии попробую убрать недочеты. С кнопкой назад тоже разберусь, спасибо.
                        +2
                        поднимите кнопки вперёд и назад вверх — кнопки управления не должны менять своего местоположения из-за изменения строк в выводимом тексте.
                          +1
                          Надо сделать цикличность, чтоб с первого на последний совет можно было перейти. Или убирать кнопку на первом.
                            +1
                            Благодарю, хорошая идея.
                            0
                            Что за 47-м советом?
                              +4
                              Надо запретить голосовать одному человеку несколько раз.
                                +3
                                Кто-то (это не я) уже написал бота, и на первом совете красуется рейтинг в -5545.
                                  +3
                                  Это не бот. Это хабраэффект.
                                    +1
                                    Рейтинг падает с неизменной скоростью в 2 балла/сек. Препятствий для написания бота нет никаких. То есть вообще никаких. Поэтому, не думаю, что это хабраэффект.

                                    Например, чтобы заплюсовать 25й совет достаточно запускать GET запросы на tips.wincode.org/Logic.php?action=vote&id=25&positive=true.
                                      0
                                      CSRF:
                                      <img src="http://tips.wincode.org/Logic.php?action=vote&id=25&positive=true" />
                                        0
                                        О, там даже на повтор никак не проверяется?
                                        javascript:setInterval('vote(false)',100)
                                        

                                        Немного полезных проверок сайту бы не помешало.
                                    +1
                                    Хабр такой хабр. (: Но я знал, на что шёл. Просто решил заняться более важным функционалом. В следующей версии предусмотрю подобное.
                                  +1
                                  Проект нужный, интересный, но с таким наполнением некоторым может быть вреден.
                                  Примеры:
                                  #4 Пустой класс автоматически получает 4 метода...

                                  Тут только информация — совета не видно. Какой совет дается?

                                  #13 Аттрибуты методов класса:

                                  Примерно понял о чем речь, но скорее всего, это потому что я в курсе предмета. Новичок не поймет.

                                  Некоторые советы даются без объяснения, например:
                                  #9 В конструктор std::shared_ptr опасно передавать массив.

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

                                  Я вижу следующие шаги:
                                  1. Разграничение советов прошедших ревью и вновь добавленных. Добавленным верить нельзя — их нужно смотреть сообществом.
                                  2. Возможность ревью, обсуждения советов, одним словом, возможность коллаборации до попадания в список доверительных.
                                  3. Тематический каталог и поиск
                                    +2
                                    А где комментарии к советам? Без них, имхо. никак… Где жизнь?
                                      +6
                                      Ага, еще было бы неплохо прикрутить возможность «задать вопрос» … и получить StackOverflow.
                                        0
                                        Вообщем-то думал о комментариях, но мне кажется, что они излишни. Достаточно будет только «сделать ревью» кода, наверное.
                                        +3
                                        Поддерживаю развитие проекта. Это как карточки слов в английском и т.д. было бы круто rss и/или приложение под мобильные системы. Так же хотелось бы видеть другие языки. Удачи
                                          +1
                                          Замечания по юзабилити.

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

                                          Далее, кнопки вперёд-назад (которые внизу) не реагируют, если совет на весь экран. FF16, Oracle Linux если что
                                            0
                                            Спасибо за репорт! Учту.
                                            +2
                                            Идея хороша, совет — не стоит делать переносы у слов выделеным красным, сделайте отдельной строкой.
                                              0
                                              Что-то мне подсказывает, что чисто с точки зрения юзабилити было бы полезным поменять местами блоки mainHeader и contentWrapper. Это позволит не «ловить» каждый раз навигацию при изменении размера блока.
                                              Для элементов управления с Клавиатуры давно придуман вполне внятный способ обозначения — подчёркивание первой буквы. А при наведении выводится подсказка. Например, для Случайный совет:
                                              Случайный совет из базы знаний. Вы можете использовать кнопку <u>С</u> на клавиатуре.
                                              И предложение от себя, поэтому спорное: для рейтинга заменить стрелочки на "+" и "-".
                                                0
                                                Гм-гм-гм.Есть некоторые сомнения по поводу проекта. Ну, для начала сразу косячок: в 4-м совете говорим, что в пустом классе создаются 4 метода, а в 34-м упоминаем nullptr. Не, тут либо 6 методов по умолчанию в C++11 либо nullptr у нас еще нет.

                                                Но ошибки можно отловить, более важно — кто целевая аудитория проекта. Для новичков полезнее будет систематически проштудировать Мейерса и Саттера, чем случайный набор советов. А профи должны копать глубже.
                                                • UFO just landed and posted this here
                                                    0
                                                    Советы я записывал из разных книг, на сайте все своим текстом, поэтому нужно дорабатывать. Спасибо! :)
                                                    +1
                                                    Идея сама по себе отличная. Но просто советы в стиле fortune особенной пользы не приносят. Хороший поиск «сделает» половину проекта. Другую половину сделает сообщество :) То есть, два-три хороших грамотных программиста для ревью советов нужны как воздух.

                                                    Мой список желаний:
                                                    1. Тематический каталог.
                                                    2. Тэги — их не должно быть слишком много, по возможности.
                                                    3. Несколько авторитетных (хотя бы для Вас) C++ программистов.
                                                      +4
                                                      +1 за каталогизацию
                                                      Справа внизу где теги у вас много пустого места, можно туда перенести рейтинг и комментарии.
                                                      Просто рейтинг ни о чем не говорит, а вот соотношение нравится не нравится
                                                      image
                                                      Только цвет стандартный зеленый/красный и простой плоский like/dislike
                                                      image

                                                      Для комментариев есть стандартные облачка, еще полезно сразу видеть число комментариев
                                                      image

                                                      Избранное Отлично смотрится лентой, например вверху справа вот так
                                                      image
                                                      Только размер поменьше, напрмер как в wunderlist
                                                      image

                                                      Фон для кода можно менять на нейтральный, красный (не делайте так), зеленый (лучше так)
                                                      Сверху в заголовке одна крупная кнопка добавить совет
                                                      image
                                                      справа на кнопке можно сделать выбор языка при наведении
                                                      +1
                                                      Идея хорошая, поддерживаю! Я даже для себя писал 5 лет назад небольшую программку, в которую записывал такие же тонкости, и не только о С++. Нужен каталог или какое-нибудь оглавление.
                                                        +2
                                                        Есть замечательный (ну просто замечательный) C++ FAQ, там может с дизайном и не так всё хорошо, зато содержимое на высоте.

                                                        В принципе, Вы могли бы перевести часть информации оттуда, русскоязычного аналога я не нашёл. Было бы полезно.

                                                        И да, структурировать Ваши «советы» обязательно надо! Опять же, см. указанный сайт. Найти именно то, что тебе нужно — вот для чего сайты.

                                                        UPD: нашёл куцый перевод на русский: quirks.chat.ru/cpp/faq/
                                                          +1
                                                          В том и проблема, что все подобные сайты перегружены информацией и очень сложные. Я хотел больше написать какой-то очень минималистичный интерфейс, без излишних нажатий и поисков. Если вы знаете, что искать, то для этого есть гугл. У меня же больше «карточки», которые дают вам новую информацию.

                                                          За сайт спасибо, займусь переводом для новых советов.
                                                            +1
                                                            «карточки», которые дают вам новую информацию

                                                            без излишних нажатий и поисков

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

                                                            Получается, что Ваши карточки — что-то вроде шпаргалок. Но если это шпаргалки, то как найти нужную для «подготовки к экзамену»? Поиска-то и каталога нет.

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

                                                            Извините, что раскритиковал тут всё, проект в чём-то интересный и я рад, что такие проекты бывают )
                                                            Вполне вероятно, что этот проект действительно найдёт свою аудиторию (и даже немаленькую).
                                                              0
                                                              Если вы знаете, что искать, то для этого есть гугл.

                                                              Последнее время гугл меня кидает на мои запросы именно на C++ FAQ, поэтому уже рефлекторно хочется вместо гугла открыть его. =)
                                                            0
                                                            Комментарий не по сути.
                                                            "(М)не повезёт" читается лично мною просто как «не повезёт» (а «м» — некий хоткей). Может отбивку поменьше сделать?
                                                              0
                                                              Недавно начал писать подобное только по Ruby, есть еще несколько интересных идей, надеюсь в скором времени и от меня появится статья…
                                                                +2
                                                                Идея прикольная, посмотрел советы, но не вижу причин по которым я зашел бы на этот сайт еще раз. Просто не знаю зачем.
                                                                  0
                                                                  Я бы добавил поиск по ключевым словам.
                                                                    0
                                                                    Хочу ровно такую же штуку с задачами по тонким местам C++.
                                                                      0
                                                                      >Не ограничиваться C++, ввести подобие хабов на хабре
                                                                      +1
                                                                      > Авторизация через социальные сети
                                                                      любая регистрация должна быть по желанию…
                                                                      чел должен пользоваться ресурсом без регистрации…

                                                                      > Добавление заметок в избранное
                                                                      не обязат
                                                                      > Игнорирование заметок
                                                                      не обязат
                                                                        0
                                                                        Я бы добавил ряд советов по проэктированию программ — мое имхо, криво спроеэктированая программа хуже криво написанной.
                                                                          0
                                                                          лично я смысла в сайте не вижу. Для подобного есть cplusplus.com.
                                                                          Однако, если увеличить количество тонкостей, вроде количества битов в limits.h, то да — смысл имеется.
                                                                            –3
                                                                            я считаю, что лучший совет по С++ — это, использовать его там где это действительно нужно.
                                                                              +3
                                                                              Мне идея ресурса нравится. Считаю, что автору и дальше стоит продолжать его позиционировать не как очередной FAQ, а скорее как набор коротких статей/советов для спокойного и размеренного изучения в отрыве от текущих задач и проектов. Ведь от чтения хорошего кода можно получить не меньше эстетического удовольствия, чем от чтения хорошей книги.
                                                                                0
                                                                                Открыл на экране 22'' :(

                                                                                Only users with full accounts can post comments. Log in, please.