После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.
Некоторые моменты, типа RVO и ECO, еще держаться в памяти, но такие вещи как SFINAE, правило Кенига уже скорее просто какие-то "базз-ворды", нежели конкретные понятия. Даже постоянное программирование (по работе и не только) не помогает. А новые стандарты еще подлили масла в огонь. Да, они сделали практически невозможное, одновременно сделав язык и мощнее, и быстрее. Но они же добавили кучу новых понятий и новых подводных камней.
В итоге помнить язык мне удается, только если я постоянно что-то читаю. Книги, статьи, форумы. Перед собеседованиями я всегда читал Мейерса Effective *. Все три книги, а теперь уже и четыре. Помогало очень прилично. Но не оставляет неприятное ощущение, что давно пора бы изучить что-то новое, тем более что язык не стоит на месте. А еще и старое-то не все знаю и многое подзабыл.
Запрос:
Ищу сайт со статьями по С++ для (средне) опытных программистов. Где бы в первую очередь разбирались нюансы языка, подходы к хорошему дизайну и архитектуре, современные практики программирования. То есть всё то, что позволяет освежить в памяти те моменты, с которыми не сталкиваешься при рутинном кодинге.
Что уже пробовал: доклады с CppCon. В целом неплохо (многовато специализированных, но всегда можно найти и достаточно общий), но видеоформат это не мое. А если просто скачивать презентации с гитхаба, то далеко не все понятно. Поэтому лучше конечно традиционные статьи. Возможно книги, но умеренно длинные. А в идеале нужен именно "вспоминатор", то есть сайт с перечнем тонких моментов С++ и их подробным объяснением. Чтобы время от времени перечитывать и проникаться...
B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.
Аналогично. C++ настолько громаден, что даже постоянно читая книги и статьи, стараясь не забыть в чём, например, фишка CRTP и так далее (подставить сотни базвордов, понятий, библиотек, практик, трюков...), оставалось неприятное ощущение, что ты не знаешь язык. Конечно, помог бы психолог , но я выбрал более дешёвый путь — переквалифицировался на Go. Тоже не самый простой язык (время от времени открываю новенькие нюансы), но хотя бы обозримый. А может, просто старость подкралась .
Здравствуйте, Kswapd, Вы писали:
B>>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.
K>Аналогично. C++ настолько громаден, что даже постоянно читая книги и статьи, стараясь не забыть в чём, например, фишка CRTP и так далее (подставить сотни базвордов, понятий, библиотек, практик, трюков...), оставалось неприятное ощущение, что ты не знаешь язык. Конечно, помог бы психолог , но я выбрал более дешёвый путь — переквалифицировался на Go. Тоже не самый простой язык (время от времени открываю новенькие нюансы), но хотя бы обозримый. А может, просто старость подкралась .
Basil2:
B>Ищу сайт со статьями по С++ для (средне) опытных программистов. Где бы в первую очередь разбирались нюансы языка, подходы к хорошему дизайну и архитектуре, современные практики программирования. То есть всё то, что позволяет освежить в памяти те моменты, с которыми не сталкиваешься при рутинном кодинге.
Могу посоветовать поискать заковыристые вопросы/задачки для собеседований. Можно даже походить по собеседованиям.
Еще можно реализовать что-нибудь нетривиальное в compile-time. Обходя тёмные углы языка знания прокачаешь знания + будет повод заглянуть в новые стандарты...
Насчет специализированных сайтов самому интересно...
Здравствуйте, Basil2, Вы писали:
B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.
... B>Запрос:
B>Ищу сайт со статьями по С++ для (средне) опытных программистов. Где бы в первую очередь разбирались нюансы языка, подходы к хорошему дизайну и архитектуре, современные практики программирования. То есть всё то, что позволяет освежить в памяти те моменты, с которыми не сталкиваешься при рутинном кодинге.
Здравствуйте, Kswapd, Вы писали:
K>Аналогично. C++ настолько громаден, что даже постоянно читая книги и статьи, стараясь не забыть...
+100500
Да, ситуация знакомая.
K> ...переквалифицировался на Go...
Не уверен, что Go также востребован сегодня на рынке, как тот же C++
При этом, следует учитывать, что для C++ имеется множество прикладных бибилиотек классов и компонентов, что придаёт любому языку практическую полезность...
ИМХО, мне не понятно, когда до такого же состояния дойдёт Go, и дойдет ли вообще?
K>По теме: посмотри блог scrutator.me.
Здравствуйте, Basil2, Вы писали:
B>Что уже пробовал: доклады с CppCon. В целом неплохо (многовато специализированных, но всегда можно найти и достаточно общий), но видеоформат это не мое. А если просто скачивать презентации с гитхаба, то далеко не все понятно. Поэтому лучше конечно традиционные статьи. Возможно книги, но умеренно длинные. А в идеале нужен именно "вспоминатор", то есть сайт с перечнем тонких моментов С++ и их подробным объяснением. Чтобы время от времени перечитывать и проникаться...
О да, при сложности C++ это очень нужная штука и она есть — http://cppquiz.org Я, иногда, когда еду куда-то, разгадываю задачки оттуда. Очень увлекательно
AG>При этом, следует учитывать, что для C++ имеется множество прикладных бибилиотек классов и компонентов, что придаёт любому языку практическую полезность... AG>ИМХО, мне не понятно, когда до такого же состояния дойдёт Go, и дойдет ли вообще?
Мне кажется, уже близок. На открытых репозиториях моря Go-библиотек практически для всего.
Здравствуйте, Kswapd, Вы писали:
K>Мне кажется, уже близок. На открытых репозиториях моря Go-библиотек практически для всего.
Хорошо!
Вот пример из моей сегодняшней ситуации — требуется найти интерактивный компонент GIS (карта местности) и применить его в моём творческом проекте.
Здравствуйте, AlexGin, Вы писали:
AG>Смотрю под-раздел — "Displaying interactive maps" AG>Ни одного варианта на Go
AG>Представлены в ассортименте компоненты для языков: JavaScript, Java, C# и C++
если нет необходимости генерить картинку из osm файла (очень сомневаюсь что JavaScript этим занимается), то там банальное скачивание по известному адресу.
никакой библиотеки не требуется.
Здравствуйте, Basil2, Вы писали:
B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.
B> Чтобы время от времени перечитывать и проникаться...
Да в современном С++ куча фич, которые очень сложны и никогда реально не нужны. Перед программистами выбор: либо забывать все и зубрить заново перед собеседовниями, или на ровном месте превращать код в лес из угловых скобочек. Первое безусловно лучше чем второе. К счастью, мне не 15 лет, и в эту игру я предпочитаю не играть.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, Basil2, Вы писали:
B>А в идеале нужен именно "вспоминатор", то есть сайт с перечнем тонких моментов С++ и их подробным объяснением. Чтобы время от времени перечитывать и проникаться...
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
................................................................................
бензол
Или можем попытаться создать карточки по языкознанию:
перевод с древнегреческого физика
................................................................................
природа
********************************************************************************
перевод с древнегреческого био
................................................................................
жизнь
********************************************************************************
перевод с древнегреческого техно
................................................................................
умение
********************************************************************************
перевод с древнегреческого логика
................................................................................
мышление
********************************************************************************
перевод с древнегреческого софия
................................................................................
мудрость
********************************************************************************
перевод с арабского арифметика
................................................................................
числа
********************************************************************************
перевод с латинского модель
................................................................................
подобие
Поскольку поля карточек многострочные, нет проблем вводить куски кода. Вводить проблем нет, проблема в том, что вводить, то есть какие карточки и колоды составлять. Понятно, что в полях вопросов и ответов есть логическая форма (вид мысли) по которым можно формировать колоды. "Название тимина", и "названия бензола" из примера выше это получение "названия молекулы" по рисунку, потому они и находятся в одной колоде. Сама карточка выражает мысль, которую нужно вспомнить.
Идеи для колод карточек можно брать из личной базы знаний в которую допустимо включать чужие книги и статьи, или собственные мысли. По сути же это ситуация, когда слепой ведёт слепого. Хотя метод и работает, но без обширных колод позволяющих получить полную специализацию в определённом виде деятельности на выходе получаем пшик. Малой кровью здесь не отделаться, надо или самому составлять колоды или нанимать кого-либо, как нанимают тех же программистов.
Здравствуйте, night beast, Вы писали:
NB>если нет необходимости генерить картинку из osm файла (очень сомневаюсь что JavaScript этим занимается), то там банальное скачивание по известному адресу. NB>никакой библиотеки не требуется.
Это очень-очень упрощенное представление
Да, скачиваются растровые изображения, масштабируются, отображаются, анализируется необходимость докачки новых изображений, кешируются старые.
Кроме этого, обеспечивается наличие многих "слоёв_пирога" — layers, при этом, изображения слоя привязываются к широте и долготе объектов на карте.
Альтернативный вариант — работа с векторными изображениями (потребуется скачивать и кешировать намного меньше, чем для растровых).
В этом случае именно происходит "генерация_картинки", но наличие этой "низкоуровневой" задачи, не отменяет высокоуровневый API на JS, Java, C#
C++ как раз интересен тем, что низко- и высоко-уровневые задачи одного проекта, могуь быть закрыты одним ЯП.
Возвращаясь к теме: именно наличие таких библиотек, это то, что так необходимо языку для наличия массовой популярности.
Пока НЕ нужно, не приперло — ты даже не понимаешь, сколько трудозатрат экономит та или иная библиотека.
Я ведь и сам не представлял, пока не занялся вплотную — например, теми же GIS системами...
Именно это (отсутствие библиотек) — фактор замедления при внедрении нового языка.
Именно поэтому, весьма часто, разработчик тратит время и силы на изучение актуальных предметных наработок в "старом" языке,
нежели вкладывается в изучение "нового" языка.
Как обстоят с этим дела в Go — сказать не берусь, но подозреваю что пока библиотек всё-же мало
Здравствуйте, Basil2, Вы писали:
B>После 15+ лет программирования на С++ вдруг понял, что начинаю забывать язык.
А ещё, в памяти надо держать не только С++ и даже не столько. Про само переусложнение С++ я тут отписывался, но комитет несёт как поезд без тормозов. Удачи.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]