Посоветуйте "вспоминатор" для C++
От: Basil2 Россия https://starostin.msk.ru
Дата: 09.05.19 08:20
Оценка: 38 (6) +2 :)
После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.

Некоторые моменты, типа RVO и ECO, еще держаться в памяти, но такие вещи как SFINAE, правило Кенига уже скорее просто какие-то "базз-ворды", нежели конкретные понятия. Даже постоянное программирование (по работе и не только) не помогает. А новые стандарты еще подлили масла в огонь. Да, они сделали практически невозможное, одновременно сделав язык и мощнее, и быстрее. Но они же добавили кучу новых понятий и новых подводных камней.

В итоге помнить язык мне удается, только если я постоянно что-то читаю. Книги, статьи, форумы. Перед собеседованиями я всегда читал Мейерса Effective *. Все три книги, а теперь уже и четыре. Помогало очень прилично. Но не оставляет неприятное ощущение, что давно пора бы изучить что-то новое, тем более что язык не стоит на месте. А еще и старое-то не все знаю и многое подзабыл.

Запрос:

Ищу сайт со статьями по С++ для (средне) опытных программистов. Где бы в первую очередь разбирались нюансы языка, подходы к хорошему дизайну и архитектуре, современные практики программирования. То есть всё то, что позволяет освежить в памяти те моменты, с которыми не сталкиваешься при рутинном кодинге.

Что уже пробовал: доклады с CppCon. В целом неплохо (многовато специализированных, но всегда можно найти и достаточно общий), но видеоформат это не мое. А если просто скачивать презентации с гитхаба, то далеко не все понятно. Поэтому лучше конечно традиционные статьи. Возможно книги, но умеренно длинные. А в идеале нужен именно "вспоминатор", то есть сайт с перечнем тонких моментов С++ и их подробным объяснением. Чтобы время от времени перечитывать и проникаться...


Ответ:

(в порядке увеличения объема статей)

https://www.walletfox.com/course/cheatsheets_cpp.php
http://cppquiz.org/
http://scrutator.me
https://thispointer.com
https://isocpp.org/wiki/faq
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Отредактировано 14.05.2019 8:32 Basil2 . Предыдущая версия .
Re: Посоветуйте "вспоминатор" для C++
От: SomeOne_TT  
Дата: 09.05.19 13:09
Оценка: 4 (2)
Здравствуйте, Basil2, Вы писали:

B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.


https://isocpp.org/wiki/faq
Re: Посоветуйте "вспоминатор" для C++
От: Kswapd Россия  
Дата: 09.05.19 13:53
Оценка: 3 (1) +2
B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.

Аналогично. C++ настолько громаден, что даже постоянно читая книги и статьи, стараясь не забыть в чём, например, фишка CRTP и так далее (подставить сотни базвордов, понятий, библиотек, практик, трюков...), оставалось неприятное ощущение, что ты не знаешь язык. Конечно, помог бы психолог , но я выбрал более дешёвый путь — переквалифицировался на Go. Тоже не самый простой язык (время от времени открываю новенькие нюансы), но хотя бы обозримый. А может, просто старость подкралась .

По теме: посмотри блог scrutator.me.
Отредактировано 09.05.2019 14:20 Kswapd . Предыдущая версия . Еще …
Отредактировано 09.05.2019 13:58 Kswapd . Предыдущая версия .
Re[2]: Посоветуйте "вспоминатор" для C++
От: sergey2b ЮАР  
Дата: 09.05.19 14:32
Оценка:
Здравствуйте, Kswapd, Вы писали:

B>>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.


K>Аналогично. C++ настолько громаден, что даже постоянно читая книги и статьи, стараясь не забыть в чём, например, фишка CRTP и так далее (подставить сотни базвордов, понятий, библиотек, практик, трюков...), оставалось неприятное ощущение, что ты не знаешь язык. Конечно, помог бы психолог , но я выбрал более дешёвый путь — переквалифицировался на Go. Тоже не самый простой язык (время от времени открываю новенькие нюансы), но хотя бы обозримый. А может, просто старость подкралась .


а достаточно ли сейчас работы на Go
Re[3]: Посоветуйте "вспоминатор" для C++
От: Kswapd Россия  
Дата: 09.05.19 14:50
Оценка:
S>а достаточно ли сейчас работы на Go

Более чем. В Москве нашёл без труда, на hh сотни вакансий.
Re: Посоветуйте "вспоминатор" для C++
От: Дрободан Фрилич СССР  
Дата: 09.05.19 17:33
Оценка:
Basil2:

B>Ищу сайт со статьями по С++ для (средне) опытных программистов. Где бы в первую очередь разбирались нюансы языка, подходы к хорошему дизайну и архитектуре, современные практики программирования. То есть всё то, что позволяет освежить в памяти те моменты, с которыми не сталкиваешься при рутинном кодинге.


Могу посоветовать поискать заковыристые вопросы/задачки для собеседований. Можно даже походить по собеседованиям.

Еще можно реализовать что-нибудь нетривиальное в compile-time. Обходя тёмные углы языка знания прокачаешь знания + будет повод заглянуть в новые стандарты...

Насчет специализированных сайтов самому интересно...
Re: Посоветуйте "вспоминатор" для C++
От: PM  
Дата: 09.05.19 19:31
Оценка: 51 (4)
Здравствуйте, Basil2, Вы писали:

B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.

...
B>Запрос:

B>Ищу сайт со статьями по С++ для (средне) опытных программистов. Где бы в первую очередь разбирались нюансы языка, подходы к хорошему дизайну и архитектуре, современные практики программирования. То есть всё то, что позволяет освежить в памяти те моменты, с которыми не сталкиваешься при рутинном кодинге.


Недавно узнал про https://www.walletfox.com/course/cheatsheets_cpp.php
Re[2]: Посоветуйте "вспоминатор" для C++
От: AlexGin Беларусь  
Дата: 10.05.19 09:44
Оценка: 27 (3) +1
Здравствуйте, Kswapd, Вы писали:

K>Аналогично. C++ настолько громаден, что даже постоянно читая книги и статьи, стараясь не забыть...

+100500
Да, ситуация знакомая.

K> ...переквалифицировался на Go...


Не уверен, что Go также востребован сегодня на рынке, как тот же C++
При этом, следует учитывать, что для C++ имеется множество прикладных бибилиотек классов и компонентов, что придаёт любому языку практическую полезность...
ИМХО, мне не понятно, когда до такого же состояния дойдёт Go, и дойдет ли вообще?

K>По теме: посмотри блог scrutator.me.


...добавлю от себя несколько ссылочек:

http://www.cs.technion.ac.il/users/yechiel/c++-faq/index.html
https://www.fluentcpp.com
https://thispointer.com

...для общего развития:

http://conference.corehard.by
https://www.meetingcpp.com
Отредактировано 10.05.2019 9:56 AlexGin . Предыдущая версия . Еще …
Отредактировано 10.05.2019 9:49 AlexGin . Предыдущая версия .
Re: Посоветуйте "вспоминатор" для C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 10.05.19 10:03
Оценка: 37 (7)
Здравствуйте, Basil2, Вы писали:

B>Что уже пробовал: доклады с CppCon. В целом неплохо (многовато специализированных, но всегда можно найти и достаточно общий), но видеоформат это не мое. А если просто скачивать презентации с гитхаба, то далеко не все понятно. Поэтому лучше конечно традиционные статьи. Возможно книги, но умеренно длинные. А в идеале нужен именно "вспоминатор", то есть сайт с перечнем тонких моментов С++ и их подробным объяснением. Чтобы время от времени перечитывать и проникаться...


О да, при сложности C++ это очень нужная штука и она есть — http://cppquiz.org Я, иногда, когда еду куда-то, разгадываю задачки оттуда. Очень увлекательно
Re[4]: Посоветуйте "вспоминатор" для C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 10.05.19 10:05
Оценка: +1
Здравствуйте, Kswapd, Вы писали:

S>>а достаточно ли сейчас работы на Go


K>Более чем. В Москве нашёл без труда, на hh сотни вакансий.


Ой ли? Идем на ХХ, вбиваем Go, фильтруем по уровню ЗП "хотя бы 200К" и получаем 32 вакансии. Тот же фокус с C++ дает 92 вакансии.
Re[5]: Посоветуйте "вспоминатор" для C++
От: Kswapd Россия  
Дата: 10.05.19 10:57
Оценка:
KP>Ой ли? Идем на ХХ, вбиваем Go, фильтруем по уровню ЗП "хотя бы 200К" и получаем 32 вакансии. Тот же фокус с C++ дает 92 вакансии.

Без предыдущего Go-опыта я не осмеливался подаваться на такие вакансии. Набираю опыт с меньшей зарплатой.

А так, конечно, работы на C++ больше на любом уровне. Мой посыл был в том, что при желании сбежать с C++ на другие технологии довольно легко.
Re[3]: Посоветуйте "вспоминатор" для C++
От: Kswapd Россия  
Дата: 10.05.19 10:59
Оценка:
AG>При этом, следует учитывать, что для C++ имеется множество прикладных бибилиотек классов и компонентов, что придаёт любому языку практическую полезность...
AG>ИМХО, мне не понятно, когда до такого же состояния дойдёт Go, и дойдет ли вообще?

Мне кажется, уже близок. На открытых репозиториях моря Go-библиотек практически для всего.
Re[4]: Посоветуйте "вспоминатор" для C++
От: AlexGin Беларусь  
Дата: 10.05.19 11:56
Оценка: +2
Здравствуйте, Kswapd, Вы писали:

K>Мне кажется, уже близок. На открытых репозиториях моря Go-библиотек практически для всего.


Хорошо!
Вот пример из моей сегодняшней ситуации — требуется найти интерактивный компонент GIS (карта местности) и применить его в моём творческом проекте.

Я открываю:
https://wiki.openstreetmap.org/wiki/Frameworks

Смотрю под-раздел — "Displaying interactive maps"
Ни одного варианта на Go

Представлены в ассортименте компоненты для языков: JavaScript, Java, C# и C++

P.S. Боюсь, что для других прикладных областей ситуация будет примерно аналогичной...
Отредактировано 10.05.2019 11:58 AlexGin . Предыдущая версия .
Re[5]: Посоветуйте "вспоминатор" для C++
От: night beast СССР  
Дата: 10.05.19 14:51
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Смотрю под-раздел — "Displaying interactive maps"

AG>Ни одного варианта на Go

AG>Представлены в ассортименте компоненты для языков: JavaScript, Java, C# и C++


если нет необходимости генерить картинку из osm файла (очень сомневаюсь что JavaScript этим занимается), то там банальное скачивание по известному адресу.
никакой библиотеки не требуется.
Re[5]: Посоветуйте "вспоминатор" для C++
От: Kswapd Россия  
Дата: 10.05.19 19:13
Оценка:
AG>Вот пример из моей сегодняшней ситуации — требуется найти интерактивный компонент GIS (карта местности) и применить его в моём творческом проекте.

Это что-то из гуя? Да, Go в этом пока не силён. Он больше для бэкенда; есть библиотеки для работы со структурами того же OSM.
Re: Посоветуйте "вспоминатор" для C++
От: lpd Черногория  
Дата: 10.05.19 21:46
Оценка:
Здравствуйте, Basil2, Вы писали:

B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.


B> Чтобы время от времени перечитывать и проникаться...


Да в современном С++ куча фич, которые очень сложны и никогда реально не нужны. Перед программистами выбор: либо забывать все и зубрить заново перед собеседовниями, или на ровном месте превращать код в лес из угловых скобочек. Первое безусловно лучше чем второе. К счастью, мне не 15 лет, и в эту игру я предпочитаю не играть.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 10.05.2019 21:47 lpd . Предыдущая версия .
Re: Посоветуйте "вспоминатор" для C++
От: velkin Удмуртия https://kisa.biz
Дата: 11.05.19 00:30
Оценка: 32 (4) +1
Здравствуйте, Basil2, Вы писали:

B>А в идеале нужен именно "вспоминатор", то есть сайт с перечнем тонких моментов С++ и их подробным объяснением. Чтобы время от времени перечитывать и проникаться...


Техника позволяющая запоминать и обновлять знания называется: интервальные повторения. Она не единственная, но остальные рассматривать не вижу смысла (Топ-5 методов запоминания для профессионалов)

1) Метод локусов
2) Мнемоника
3) Чанкинг-метод (дробление, фрагментирование)
4) Интервальные повторения <= лучший метод
5) Метод сторителлинга

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

Минусы Anki:
1) испытуемый сам оценивает свой результат, что необъективно и затрачивает у него лишнее время
2) единственный объективный тест это ввод текста, но он однострочный (по крайне мере я многострочного не видел)
3) исключение из повтора карт, которые как иногда ошибочно думает пользователь он помнит (повторение никогда не бывает лишним)
4) попытки дать несколько ответов на один вопрос (нет чёткой связи между мыслями, отвлечение внимания на постороннюю информацию)
5) слишком долго вводить собственные карточки
6) уникальный формат неудобочитаемый другими программами

Мои сторонние размышления:
1) графика vs консоль
... графика часто перегружена лишней информацией в интерфейсах, консоль обычно чище и позволяет лучше сосредотачиваться на цели изучения
... если не использоваться разделитель (splitter) как принято в gui, то в консоли зачастую можно сэкономить место на экране
... в консоли можно почитать документы rfc не отвлекаясь на форматирование шрифтов и прочего, но тоже касается и других текстов, включая браузеры вроде links2
... да и в целом исходя из материальной логики раньше программисты были другими потому, что они воспринимали информацию иначе, старая школа (old school)
2) клавиатура vs мышь
... клавиатурой иногда сложнее пользоваться, но можно проще и быстрее выражать свои мысли
... клавиатура позволяет создавать ascii-графику, повышенная творческая свобода
3) пакеты знаний
... могли бы упростить процесс обучения и поддержания знаний
... обучаясь по такому пакету ученик затрачивая минимум усилий получает максимальный результат
... опять же становится доступно целостное единообразие знаний среди множества людей
4) скорость доступа к знаниям
... в компьютерах есть иерархия скорости доступа к данным, уровни кэшей, оперативная память, твердотельный накопитель, интернет
... с другой стороны у людей есть кратковременная и долговременная память, ссылка в памяти на внешний источник информации (книга, ссылка в интернете), обрывок знаний о понятии после чего используется поисковая система (гугл, звонок "другу")
... но так же нужных знаний может и вовсе не быть, тогда можно отталкиваться от задачи и уйти в свободный поиск

В итоге я пришёл к выводу, что нужна программа компьютерного тестирования в консоли с простым текстовым форматом. Если идти стандартным путём, то есть карточки (card) и колоды (deck).
1) Традиционно карточка это бумажка, на одной стороне вопрос, на другой ответ. Да, в том же Anki можно сделать сколько угодно полей, но это уже не изначальная техника интервальных повторений, потому это могло бы стать ещё одним минусом.
2) Карточки собираются в колоды (карточные колоды), а далее уже по ним проводится обучение и повторение.

Для проверки идеи наговнокодил программу с такими особенностями (features)
1) в чисто консольной версии используется только c++ и stl, системы сборки вроде qmake на это никак не влияют, библиотеки qt исключены
2) многострочный вывод вопроса, многострочный ввод ответа
3) колода это обычный файл в формате плоского текста имеющий разделитель карт (card delimiter) и разделитель полей (field delimiter)
4) в карточке только два поля, вопрос (question) и ответ (answer), и кроме них на экране не должно быть лишней информации
5) ответ нужно полностью ввести с клавиатуры
6) если в ответе нет ошибки, тогда сразу переходим к следующему вопросу не тратя за зря время испытуемого, если есть, выводим сообщение "ошибка" и правильный ответ
7) в конце выводится однострочный отчёт об ошибках
8) возможность через аргументы командной строки загружать за раз множество колод
9) каждый раз при запуске случайным образом тасовать собранные в одну колоды
10) в конце всех испытаний выводим напоминания об отдыхе (чтобы сформировать долгосрочное воспоминание, нужно 10 минут побыть в тишине)
можно придумать, что угодно, обратные карты, повтор ошибочных карт, и так далее, но это уже не важно, важны колоды

Возьмём для примера химию, разделитель карточек строка из звёздочек шириной 80 символов, разделитель полей строка из точек шириной 80 символов:
название молекулы

        H    H      H
        .      .  .
H       C       C
  .   .   .   .   .
    N       C      H
    .       .
    C       C
  .   .    .  . 
O       N       O
        .
        H
................................................................................
тимин
********************************************************************************
название молекулы

        H
        .
H       C       H
  .   .   .   .
    C       C
    .       .
    C       C
  .   .    .  . 
H       C       H
        .
        H
................................................................................
бензол


Или можем попытаться создать карточки по языкознанию:
перевод с древнегреческого физика
................................................................................
природа
********************************************************************************
перевод с древнегреческого био
................................................................................
жизнь
********************************************************************************
перевод с древнегреческого техно
................................................................................
умение
********************************************************************************
перевод с древнегреческого логика
................................................................................
мышление
********************************************************************************
перевод с древнегреческого софия
................................................................................
мудрость
********************************************************************************
перевод с арабского арифметика
................................................................................
числа
********************************************************************************
перевод с латинского модель
................................................................................
подобие


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

Идеи для колод карточек можно брать из личной базы знаний в которую допустимо включать чужие книги и статьи, или собственные мысли. По сути же это ситуация, когда слепой ведёт слепого. Хотя метод и работает, но без обширных колод позволяющих получить полную специализацию в определённом виде деятельности на выходе получаем пшик. Малой кровью здесь не отделаться, надо или самому составлять колоды или нанимать кого-либо, как нанимают тех же программистов.
Re[6]: Посоветуйте "вспоминатор" для C++
От: AlexGin Беларусь  
Дата: 11.05.19 13:10
Оценка:
Здравствуйте, night beast, Вы писали:

NB>если нет необходимости генерить картинку из osm файла (очень сомневаюсь что JavaScript этим занимается), то там банальное скачивание по известному адресу.

NB>никакой библиотеки не требуется.

Это очень-очень упрощенное представление

Да, скачиваются растровые изображения, масштабируются, отображаются, анализируется необходимость докачки новых изображений, кешируются старые.
Кроме этого, обеспечивается наличие многих "слоёв_пирога" — layers, при этом, изображения слоя привязываются к широте и долготе объектов на карте.

Альтернативный вариант — работа с векторными изображениями (потребуется скачивать и кешировать намного меньше, чем для растровых).
В этом случае именно происходит "генерация_картинки", но наличие этой "низкоуровневой" задачи, не отменяет высокоуровневый API на JS, Java, C#
C++ как раз интересен тем, что низко- и высоко-уровневые задачи одного проекта, могуь быть закрыты одним ЯП.

Возвращаясь к теме: именно наличие таких библиотек, это то, что так необходимо языку для наличия массовой популярности.
Пока НЕ нужно, не приперло — ты даже не понимаешь, сколько трудозатрат экономит та или иная библиотека.
Я ведь и сам не представлял, пока не занялся вплотную — например, теми же GIS системами...

Именно это (отсутствие библиотек) — фактор замедления при внедрении нового языка.
Именно поэтому, весьма часто, разработчик тратит время и силы на изучение актуальных предметных наработок в "старом" языке,
нежели вкладывается в изучение "нового" языка.

Как обстоят с этим дела в Go — сказать не берусь, но подозреваю что пока библиотек всё-же мало
Отредактировано 11.05.2019 13:39 AlexGin . Предыдущая версия .
Re[2]: Посоветуйте "вспоминатор" для C++
От: AlexGin Беларусь  
Дата: 11.05.19 14:33
Оценка: :)
Здравствуйте, уважаемый velkin!!!

Поздравляем!!!
С возвращением на КЫВТ!
Re: Посоветуйте "вспоминатор" для C++
От: Vain Россия google.ru
Дата: 11.05.19 23:42
Оценка: +1
Здравствуйте, Basil2, Вы писали:

B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.

А ещё, в памяти надо держать не только С++ и даже не столько. Про само переусложнение С++ я тут отписывался, но комитет несёт как поезд без тормозов. Удачи.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.