Мои твиты

Dec 23, 2021 12:00

#adventofcode, twitter

Leave a comment

general_manjago December 24 2021, 09:12:24 UTC
Цитирую другого человека:

"Вот уже три недели я решаю Advent of Code в прямом эфире. Это не первый мой заход, но пока что самый стабильный, с реальным шансом дойти до Рождества.

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

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

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

Допустим, в спорте обнаруживается какой-то очень простой, но мощный удар, который позволяет при минимуме тренировки побеждать очень часто. При этом он скучный, неинтересный, «подлый», но валидный. И очень уж хорошо работает.

Так вот, у людей, этим спортом занимающимся, могут возникнуть в голове некие «соображения совести», которые будут мешать им пользоваться, потому что «неправильно», «неэтично», «скучно», «так все могут». И тут-то собственно и вскрывается, что они не ради победы спортом занимаются и поэтому, возможно, у них и нет особых результатов. Они придумали себе более сложные, чем реально необходимо, условия и страдают, пытаясь в них существовать. Не надо так.

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

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

Player 1 starting position: 1
Player 2 starting position: 3

Ну да, парсер написать несложно, но в этом нет смысла: не нужно писать программу, обрабатывающую все подобные файлы, нужно решить для конкретно вот этого, а он никогда не поменяется. Так же как Player 1 и Player 2 нет смысла абстрагировать: их всегда будет ровно два и ровно в таком порядке.

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

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

Ну и четвертое важное это то, что программа здесь в общем-то никого не интересует. Отправлять код некуда, нужен только ответ на проблему - как правило, одно число или слово. Сможешь решить на бумажке - флаг тебе в руки, никто косо не посмотрит. Иногда программа нужна, чтобы понять проблему, а дальше уже включается человеческая смекалочка. Более того, программу даже не всегда можно написать. Короче, дрель никому не нужна, нужны дырки в стене. Прямо как в жизни!

Все в целом для меня такая когнитивно-поведенческая терапия. Даже если умом я понимаю все это, попробовать и увидеть, как эти принципы работают на практике, обжечься, ошибиться и сформировать правильные привычки - бесценно. Кроме того, писать медленно, решать не те задачи и автоматизировать ненужное я уже и так хорошо умею, почему бы не потренировать те навыки, которые проседают? Присоединяйтесь!"

Reply

litophage December 24 2021, 12:07:44 UTC
О! Так намного понятнее!

Reply

arat0r December 24 2021, 13:39:39 UTC
Уж больно мне не нравится сравнение.

Reply

general_manjago December 24 2021, 14:52:07 UTC
Какое именно?

Reply

arat0r December 24 2021, 19:10:52 UTC
Да вроде оно одно тут, со спортом (боксом).

Reply

general_manjago December 24 2021, 19:38:17 UTC
Я в боксе плохо разбираюсь. А тут автор погрешил против истины? Нет там такой ситуации, с тупым, но подлым ударом, который писаными правилами не запрещен, но который не принято использовать, он это типа просто чисто гипотетически придумал? Или всё-таки что-то такое есть?

Reply

arat0r December 24 2021, 20:56:05 UTC
Да и я плохо разбираюсь. Но категорически не согласен с тем, что ради победы можно забить на мораль (и на совесть). Тем более, что в спорте эти ограничения не просто так появляются. Скажем, в Формуле 1 было неписанное правило: не смещаться на торможении. Потому что оппонент бывает вынужден из-за этого совершать маневр, который может закончиться в стене.
Именно поэтому мне это сравнение не нравится.
Давай не писать комментарии в программе? Явно же искусственное усложнение задачи, код и без комментариев работает...
Или может я уже старый просто?

Reply

general_manjago December 25 2021, 18:48:04 UTC
Ну вот кстати про комментарии в программе - вполне холиварная тема. Есть мнение, что если программа такая, что к ней требуется комментарий - то надо ее переделать так, чтобы код был настолько читаем, что никаких комментариев и не требовалось бы.

И у автора, кстати, "подлый" написано все-таки в кавычках. То есть "подлый", а не подлый.

"скучный, неинтересный, «подлый», но валидный"

Reply

arat0r December 26 2021, 15:34:11 UTC
Я не знаю, чем отличается "подлый" от подлого.
Если удар приносит победу и не запрещен прямо или косвенно - он будет использоваться чуть менее, чем всеми. Если прямо или косвенно запрещен, то не просто так.
Плохой пример.
Лучше бы из программизма что-нибудь, непосредственно по теме. Все-таки программистов больше, чем боксеров, программированию даже в школе учат.

Reply


Leave a comment

Up