Как стать автором
Обновить

Чтобы научиться мыслить как программист, надо научиться мыслить как не программист

Время на прочтение 5 мин
Количество просмотров 23K
Всего голосов 24: ↑14 и ↓10 +4
Комментарии 19

Комментарии 19

Чтобы мыслить, как программист, сначала желательно научиться мыслить хотя бы чуть-чуть как математик.
Вот пример: сейчас на https://www.codingame.com идёт контест: https://www.codingame.com/contests/mean-max. Один из ключевых моментов: освоить законы движения объектов с учётом сопротивления среды (трение), в условиях дискретного движения (по шагам/тикам). Можно просчитывать некоторое дерево вариантов движения с различными векторами ускорения — но это вариант не очень, т.к. процессорное время сильно ограничено. А можно состаить математическую модель и вывести ряд математических формул, описывающих данное движение в различных вариантах: один юнит (дестроер) должен просто достигнуть некоторой точки (разрушить танкер тараном), другой юнит (лутер) должен достигнуть этой же точки, но с нулевой скоростью в конце пути — задачка посложнее, третий юнит должен просто нарезать круги на максимально возможной скорости (генерировать ресурс "ярости", нужный для абилок) избегая столкновений (диаграмма Вороного в помощь? хотя можно и наоборот: преграждать дорогу вражеским лутерам, просчитывая траекторию их движения, но это уже детали выбора стратегии)… Да, несколько лет назад mail.ru group проводил контест "Russian AI cup", связанный с гоночной тематикой — там данная тема тоже рулила...

Да, несколько лет назад mail.ru group проводил контест «Russian AI cup», связанный с гоночной тематикой — там данная тема тоже рулила...

Вот только тогда все кто был в топе пользовались перебором возможных стратегий, а не рассчётом одной оптимальной.

Ага, я тоже читал публикации топов на хабре :)
Там не настолько жёсткие были ограничения по ЦП, поэтому можно было уделить больше внимания другим аспектам стратегии… Но тем интереснее сейчас влезать в codingame.com :)

Чтобы мыслить, как программист, сначала желательно научиться мыслить хотя бы чуть-чуть как математик.

Вот и ответ на вопрос, почему программистам нужно ВУЗовское образование и математика в частности.

В котором в (абстрактный большой процент вузов) (абстрактный большой процент тем) нужной математики не дается, либо дается настолько отвратительно что она забывается сразу после сдачи экзамена ибо студенту никто не объясняет ни где ни как она применяется
НЛО прилетело и опубликовало эту надпись здесь
Почему-то при решении задачи большинство оставляют козу с волком\капустой на другом берегу без присмотра крестьянина.
Разве? Откуда статистика?
Студентов опрашивал. Интервьюеров озадачивал на собеседованиях (да, я слышал про репрезентативность выборки, но кроме личного опыта предложить ничего, увы, не могу).
Спасибо. У меня лично вообще никакой выборки. А знакомые решили её правильно.

Я не программист, но мне до этого очень далеко, интересно к кому я тогда вообще отношусь;-)

Я, как программист, не стал бы пользоваться предложенным подходом. Крайне тяжёлый и багообразующий.


Полагаю, порядок ходов должен быть такой?
11111 — начальная позиция
10101 — перевезли козу туда
11101 — приехали обратно
10001 — перевезли волка туда
11011 — привезли козу обратно
10010 — увезли капусту
11010 — приехали обратно
10000 — увезли козу


При этом "допустимые позиции" — это
11000, 11101, 11010. Явно не хватает 11011 (когда коза, капуста и перевозчик на стартовом берегу, никто никого не съест) или 11110, по выбору.


На лицо баг в рассуждениях.

И ход рассуждений, и использования битов и даже примеры напоминают книгу к языку который был создан в МВТУ им. Баумана. Там в качестве задач рассматривались обработки очереди к парикмахеру, работа порта с танкерами и распиловка бревен. Фишка была в том, что этот язык был "заточен" под решения подобных задач. Книгу прочитал с удовольствием, а языком пользоваться не пришлось и названия не помню. Это было в конце 90-х.
Мне рассказали что за решение оптимизационной задачи по распиловки бревен немцы создателю выплачивали вознаграждение.
Может кто из выпускников Бауманки вспомнит об этом.

Простите, где в этой статье мышление «не как у программиста»?
Задался тем же вопросом. Зашел почитать о логике мышления программистов, а увидел решение задачки. Мне кажется заголовок не подходящий посту.

Я, конечно, извиняюсь, но если Вы читали комментарии к статье, на которую отвечаете, то не могли не заметить изящного решения Dr_Dash, а также скрипт vaniacer, которые делают именно то, для чего предназначены машины — автоматизируют решение задачи, снижая нагрузку на человека. Конечно, полезен любой опыт, но иногда лишь как пример "как не надо". Приведенное решение не экономит ни время, ни ресурсы, и притом даже не упрощает его поддержку/сопровождение по сравнению с указанными выше.

Ради простой задачи городить такое? А как же главный принцип программиста — не усложняй?
Я может глупый человек, но мне кажется, что основная сложность этой задачи это понять, что с другого берега можно вернуть один/несколько объектов назад. Причем, что в первой, что во второй статье, я не нашел ни математического, ни программистского, ни философского способа до этого дойти.
Если озвучить данную подсказку в самом начале то задача решается тупым перебором. Благо дело «летальных» исходов всего два: коза и капуста, коза и волк.
Да, неудачная статья получилась — отрывок из верновика дедовского курсовика. Что-ж, буду тренироваться.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории