"Вот уже три недели я решаю Advent of Code в прямом эфире. Это не первый мой заход, но пока что самый стабильный, с реальным шансом дойти до Рождества.
Зачем? Мне кажется, он тренирует несколько полезных навыков, которые в обычной жизни у меня слабо развиты.
Во-первых, решать быстро. Я вообще люблю все делать размеренно, подумать, погулять, подождать, когда придет хорошее решение. Адвент не про это - чем быстрее, тем лучше.
Во-вторых, он учит решать настоящую задачу, а не какую-то более сложную выдуманную вместо нее. Это важный концепт, но попробую ужать.
Допустим, в спорте обнаруживается какой-то очень простой, но мощный удар, который позволяет при минимуме тренировки побеждать очень часто. При этом он скучный, неинтересный, «подлый», но валидный. И очень уж хорошо работает.
Так вот, у людей, этим спортом занимающимся, могут возникнуть в голове некие «соображения совести», которые будут мешать им пользоваться, потому что «неправильно», «неэтично», «скучно», «так все могут». И тут-то собственно и вскрывается, что они не ради победы спортом занимаются и поэтому, возможно, у них и нет особых результатов. Они придумали себе более сложные, чем реально необходимо, условия и страдают, пытаясь в них существовать. Не надо так.
В программировании такое сплошь и рядом, но в первую очередь, наверное, там, где разводят архитектуру и инфраструктуру вместо того, чтобы написать простой перл-скрипт. И это нормально, естественно, но неэффективно, и хотелось бы научиться видеть и решать настоящие проблемы максимально эффективно, а не те, которые хочется или интересно решать.
И тут помогает Адвент. Для меня настоящий прорыв случился, когда я понял, что могу редактировать вход программы руками, если мне так удобнее. Формально там всегда есть один текстовый файл на вход, и, кажется, что надо бы в первую очередь написать его парсер. На практике парсер можно писать дольше, чем просто захардкодить значения. Сегодня, например, файл был такой:
Player 1 starting position: 1 Player 2 starting position: 3
Ну да, парсер написать несложно, но в этом нет смысла: не нужно писать программу, обрабатывающую все подобные файлы, нужно решить для конкретно вот этого, а он никогда не поменяется. Так же как Player 1 и Player 2 нет смысла абстрагировать: их всегда будет ровно два и ровно в таком порядке.
Или вот тоже сегодня я написал фунцию, складывающую семь векторов. Не шесть, не восемь, а именно семь: на любом другом количестве она работать не будет. И ничего, брат жив.
Третье чему учит Адвент это не планировать на будущее. У каждой задачи две похожие части с одним и тем же входом, но, пока не решишь первую, условие второй не видно. Можно попробовать угадать и приготовить какие-то заготовки на будущее, но довольно быстро становится понятно, что угадываешь ты редко, заготовки не так уж и сильно помогают, а поменять код, когда наконец появляются новые требования, не так уж и сложно. Прямо как в жизни.
Ну и четвертое важное это то, что программа здесь в общем-то никого не интересует. Отправлять код некуда, нужен только ответ на проблему - как правило, одно число или слово. Сможешь решить на бумажке - флаг тебе в руки, никто косо не посмотрит. Иногда программа нужна, чтобы понять проблему, а дальше уже включается человеческая смекалочка. Более того, программу даже не всегда можно написать. Короче, дрель никому не нужна, нужны дырки в стене. Прямо как в жизни!
Все в целом для меня такая когнитивно-поведенческая терапия. Даже если умом я понимаю все это, попробовать и увидеть, как эти принципы работают на практике, обжечься, ошибиться и сформировать правильные привычки - бесценно. Кроме того, писать медленно, решать не те задачи и автоматизировать ненужное я уже и так хорошо умею, почему бы не потренировать те навыки, которые проседают? Присоединяйтесь!"
Я в боксе плохо разбираюсь. А тут автор погрешил против истины? Нет там такой ситуации, с тупым, но подлым ударом, который писаными правилами не запрещен, но который не принято использовать, он это типа просто чисто гипотетически придумал? Или всё-таки что-то такое есть?
Да и я плохо разбираюсь. Но категорически не согласен с тем, что ради победы можно забить на мораль (и на совесть). Тем более, что в спорте эти ограничения не просто так появляются. Скажем, в Формуле 1 было неписанное правило: не смещаться на торможении. Потому что оппонент бывает вынужден из-за этого совершать маневр, который может закончиться в стене. Именно поэтому мне это сравнение не нравится. Давай не писать комментарии в программе? Явно же искусственное усложнение задачи, код и без комментариев работает... Или может я уже старый просто?
Ну вот кстати про комментарии в программе - вполне холиварная тема. Есть мнение, что если программа такая, что к ней требуется комментарий - то надо ее переделать так, чтобы код был настолько читаем, что никаких комментариев и не требовалось бы.
И у автора, кстати, "подлый" написано все-таки в кавычках. То есть "подлый", а не подлый.
Я не знаю, чем отличается "подлый" от подлого. Если удар приносит победу и не запрещен прямо или косвенно - он будет использоваться чуть менее, чем всеми. Если прямо или косвенно запрещен, то не просто так. Плохой пример. Лучше бы из программизма что-нибудь, непосредственно по теме. Все-таки программистов больше, чем боксеров, программированию даже в школе учат.
"Вот уже три недели я решаю Advent of Code в прямом эфире. Это не первый мой заход, но пока что самый стабильный, с реальным шансом дойти до Рождества.
Зачем? Мне кажется, он тренирует несколько полезных навыков, которые в обычной жизни у меня слабо развиты.
Во-первых, решать быстро. Я вообще люблю все делать размеренно, подумать, погулять, подождать, когда придет хорошее решение. Адвент не про это - чем быстрее, тем лучше.
Во-вторых, он учит решать настоящую задачу, а не какую-то более сложную выдуманную вместо нее. Это важный концепт, но попробую ужать.
Допустим, в спорте обнаруживается какой-то очень простой, но мощный удар, который позволяет при минимуме тренировки побеждать очень часто. При этом он скучный, неинтересный, «подлый», но валидный. И очень уж хорошо работает.
Так вот, у людей, этим спортом занимающимся, могут возникнуть в голове некие «соображения совести», которые будут мешать им пользоваться, потому что «неправильно», «неэтично», «скучно», «так все могут». И тут-то собственно и вскрывается, что они не ради победы спортом занимаются и поэтому, возможно, у них и нет особых результатов. Они придумали себе более сложные, чем реально необходимо, условия и страдают, пытаясь в них существовать. Не надо так.
В программировании такое сплошь и рядом, но в первую очередь, наверное, там, где разводят архитектуру и инфраструктуру вместо того, чтобы написать простой перл-скрипт. И это нормально, естественно, но неэффективно, и хотелось бы научиться видеть и решать настоящие проблемы максимально эффективно, а не те, которые хочется или интересно решать.
И тут помогает Адвент. Для меня настоящий прорыв случился, когда я понял, что могу редактировать вход программы руками, если мне так удобнее. Формально там всегда есть один текстовый файл на вход, и, кажется, что надо бы в первую очередь написать его парсер. На практике парсер можно писать дольше, чем просто захардкодить значения. Сегодня, например, файл был такой:
Player 1 starting position: 1
Player 2 starting position: 3
Ну да, парсер написать несложно, но в этом нет смысла: не нужно писать программу, обрабатывающую все подобные файлы, нужно решить для конкретно вот этого, а он никогда не поменяется. Так же как Player 1 и Player 2 нет смысла абстрагировать: их всегда будет ровно два и ровно в таком порядке.
Или вот тоже сегодня я написал фунцию, складывающую семь векторов. Не шесть, не восемь, а именно семь: на любом другом количестве она работать не будет. И ничего, брат жив.
Третье чему учит Адвент это не планировать на будущее. У каждой задачи две похожие части с одним и тем же входом, но, пока не решишь первую, условие второй не видно. Можно попробовать угадать и приготовить какие-то заготовки на будущее, но довольно быстро становится понятно, что угадываешь ты редко, заготовки не так уж и сильно помогают, а поменять код, когда наконец появляются новые требования, не так уж и сложно. Прямо как в жизни.
Ну и четвертое важное это то, что программа здесь в общем-то никого не интересует. Отправлять код некуда, нужен только ответ на проблему - как правило, одно число или слово. Сможешь решить на бумажке - флаг тебе в руки, никто косо не посмотрит. Иногда программа нужна, чтобы понять проблему, а дальше уже включается человеческая смекалочка. Более того, программу даже не всегда можно написать. Короче, дрель никому не нужна, нужны дырки в стене. Прямо как в жизни!
Все в целом для меня такая когнитивно-поведенческая терапия. Даже если умом я понимаю все это, попробовать и увидеть, как эти принципы работают на практике, обжечься, ошибиться и сформировать правильные привычки - бесценно. Кроме того, писать медленно, решать не те задачи и автоматизировать ненужное я уже и так хорошо умею, почему бы не потренировать те навыки, которые проседают? Присоединяйтесь!"
Reply
Reply
Reply
Reply
Reply
Reply
Именно поэтому мне это сравнение не нравится.
Давай не писать комментарии в программе? Явно же искусственное усложнение задачи, код и без комментариев работает...
Или может я уже старый просто?
Reply
И у автора, кстати, "подлый" написано все-таки в кавычках. То есть "подлый", а не подлый.
"скучный, неинтересный, «подлый», но валидный"
Reply
Если удар приносит победу и не запрещен прямо или косвенно - он будет использоваться чуть менее, чем всеми. Если прямо или косвенно запрещен, то не просто так.
Плохой пример.
Лучше бы из программизма что-нибудь, непосредственно по теме. Все-таки программистов больше, чем боксеров, программированию даже в школе учат.
Reply
Leave a comment