Риона Ким : другие произведения.

Хочу научиться думать

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками

  
Хочу научиться думать
  
  Но не знаю, как.
  
  Идиотом при этом я себя отнюдь не считаю. Думаю я медленно, это правда, но достаточно эффективно - и среди людей, с которыми я знаком лично, есть всего пара человек, которых я считаю умнее себя.
  
  С математикой у меня никогда проблем не было - потому что в математике практически не приходится думать. Всего раз было, что я на экзамен по математическому анализу забыл выучить одну достаточно обширную тему, она мне попалась - и мне пришлось самостоятельно выводить и доказывать теоремы. И то, "ум" здесь был задействован лишь постольку поскольку.
  
  Дело в том, что математические задачи не требуют изобретения решения - решение всех этих задач сводится к перебору известных алгоритмов решения и последовательного их комбинирования (если задача не решается за один ход). Чтобы взять интеграл, нужно вспомнить, как берутся интегралы. Если под интегралом какая-то чудовищная муть - надо вспомнить, какие есть методы рассеивания чудовищной мути, исходя из её структуры и знакомых элементов. Если необходимо решить дифференциальное уравнение - нужно вспомнить методы решения диффур конкретного типа.
  
  При этом стоит отметить, что я сейчас говорил не о математической науке в целом, а лишь о той её части, которая преподаётся в институтах. Доказательство новых теорем (вроде пятнадцать лет назад сдавшейся сэру Уайлсу Великой теоремы Ферма), получение совершенно новых результатов, нахождение способов практически применить математические методы - это, безусловно, задачи для ума, но именно эти задачи перед студентами никогда и не ставят. Соответственно, и я эти задачи почти никогда не решал.
  
  Единственный раз, когда передо мной встала задача найти практическое применение полученным в институте теоретическим знаниям, был на моём дипломе, и задачу эту я решал очень долго. В конце концов, я её решил: создал веб-магазин, который подбирал из имеющихся в наличии компонент комплектацию компьютера максимально близко к введённой сумме, исходя из предпочтений пользователя. Вводите, к примеру, предел 4000 грн и приоритет процессора и видеокарты - получаете комплектацию на 4000 грн и ещё две - на 3998 и 3997 грн. Короче говоря, я нашёл практическое применение методам оптимизации (был у нас такой курс), которые (методы, в смысле), правда, пришлось несколько доработать. Однако же, и эта задача связана с "умом" лишь опосредованно - ведь, по сути, поиск её решения (то есть поиск возможности присобачить куда-нибудь методы оптимизации) свёлся к перебору всего, что вообще можно оптимизировать.
  
  Задача же, непосредственно решаемая в дипломе (то есть сама по себе оптимизация применительно к комплектации компьютеров в соответствии с предпочтениями пользователя), больше апеллировала к интеллекту. Но программирование для меня - особый случай, и вот почему.
  
  С программированием у меня тоже никогда особых проблем не было. Точнее, были - в том, что касается внимательности к деталям (к слову, в математике я на этом тоже не раз спотыкался). Иногда уходит целый час лишь на то, чтобы выяснить, что неправильная работа алгоритма вызвана опечаткой в одной строке, и целый день - что неправильными параметрами. А потом оказывается, что алгоритм всё равно работает неправильно, только уже по-другому неправильно, и вновь начинается поиск ошибок...
  
  Но в том, что касается алгоритмизации задач - я достаточно силён. Просто потому, что я могу представить себе работающий результат - а потом остаётся лишь при помощи алгоритмизации понять, как именно он работает, и построить нисходящую цепочку к тому, с чего я начинаю, структурным разбиением и всё той же алгоритмизацией. Программистские задачи, наверное, тоже задачи для ума, хотя и не совсем ясно, почему именно - алгоритмизация суть известный метод, а умение представить себе работающий результат - наверное, вопрос воображения. В общем, тут я ещё не разобрался.
  
  Иначе дело обстоит с задачами дизайнерскими. Дизайнерская задача - это необходимость решить какую-либо проблему, не имея готовых алгоритмов или методов решения. "Дизайнерская" она потому, что именно такие проблемы возникают в дизайне чаще всего: как выразить такую-то идею, как побудить людей делать то-то, что нужно изменить, чтобы стало так-то... Здесь существует огромный разрыв между тем, что мы имеем (художественные выразительные средства, конкретные материалы, известные приёмы) и тем, что нужно получить в итоге - второе можно получить из первого, только если результат уже известен, а вот выстроить из имеющихся элементов неизвестное решение по каким-то алгоритмам нельзя. Представить этот результат себе - вот задача дизайнера, и это уж точно вопрос воображения. Но - не только.
  
  Методы, позволяющие воображать в правильном направлении, у дизайнеров наверняка есть - просто мне они неизвестны. Возможно даже, эти методы в письменном виде лежат где-то в свободном доступе - только вот мне они не попадались. Жаль. Но мы отвлеклись, вернёмся к проблеме "думать".
  
  Есть такая игра - "Портал" - а в игре той есть "продвинутые" уровни. Эти уровни я прошёл, за исключением последнего - побившись об стенку (в буквальном смысле) в течении часа, я вынужден был искать подсказки в интернете. Нашёл, естественно, - и тогда я понял, в чём же моя проблема.
  
  Оказалось - я не способен (точнее, просто не привык) думать даже на шаг вперёд. Я получал информацию о первом шаге, "прорабатывал" данные мне элементы решения, а потом приступал ко второму шагу - и оказывалось, что здесь решения нет. Потому что элемент решения находился там, где был первый шаг - и если бы я всегда помнил, что моя промежуточная цель - не только пройти первый шаг, но и все остальные, и искал пути достижения следующих шагов с самого начала - я бы этот момент не упустил. А когда я это просёк, я увидел, что и некоторые обычные уровни этой игры можно пройти гораздо быстрее - если помнить о конечной цели (пройти комнату, пройти уровень), а не зацикливаться на комбинировании всех элементов решения, которые мне предоставлены дизайнерами уровня.
  
  Пожалуй, получилось слишком невнятно, так что я попробую разъяснить. Возьмём, для примера, игры-стратегии. Вот у нас есть база, и нам нужна энергия и ресурсы - мы строим электростанцию и завод. Это первый шаг. Потом мы вспоминаем, что играем мы не одни, а против компьютера, и сейчас к нам в гости с недружеским визитом нагрянет армия - и строим оборону. Это второй шаг. Когда оборона достаточно укреплена, мы строим под её прикрытием армию вторжения - это третий шаг. Ну и, наконец, этой могучей армией мы выносим врага за пределы карты - это последний шаг.
  
  Это, в общем-то, стандартная "стратегия", которая работает в большинстве случаев и которую я нашёл эмпирическим путём. Однако бывает, стратегия эта не работает - например, в условиях нехватки ресурсов, когда денег на оборону хватает, а на армию вторжения - уже нет. И тут начинаются проблемы с достижением победы. Знаете, почему?
  
  Да потому что я (ну, мы же обо мне говорим) просто забываю, что истинная цель игры - победить врага или выполнить определённое задание, а отнюдь не пройти последовательно все приведённые выше шаги. И тогда я понял, что в некоторых ситуациях вовсе не нужно строить могучую базу с могучей обороной и могучей армией вторжения. Достаточно построить могучую кучку бомбардировщиков - никто из них обратно на базу уже не вернётся, зато последний из выживших под обстрелом на подлёте к врагу последней бомбой таки разнесёт цель на куски. И всё, миссия выиграна. Светлая память бомбардировщикам - но выживание юнитов целью игры и не является.
  
  В общем, мне следовало помнить, что каждый шаг нужно "прорабатывать" лишь в той степени, в которой он способствует достижению конечной и промежуточных целей. Никакой шаг сам по себе целью не является, и не стоит сосредотачиваться целиком на нём.
  
  Была, кстати, на ZX Spectrum"е забавная игра, не помню названия. В ней нужно было роботом последовательно захватывать базы противника и нейтральные заводы, производящие запчасти для роботов - строить из запчастей новых роботов и дальше продвигаться вперёд. Так вот, когда до меня дошло, что настоящая цель игры - захватить базы противника, а не захватить вообще всё, я просто перестал захватывать заводы - и роботом, данным мне в начале, быстренько захватывал все базы. Длинная и сложная игра превратилась в пятиминутную прогулку.
  
  Так вот, к чему я это всё веду. Умение видеть ситуацию на несколько ходов вперёд сразу - это здорово, и это, в общем-то, одна из составляющих настоящего умения думать. Иногда я об этом вспоминаю, чаще всего - нет, а когда вспоминаю - далеко не всегда способен это знание применить. В шахматы, к примеру, я играл весьма посредственно - потому что размышлял над текущим ходом и следующим, не видя глобального развития игры и не просчитывая возможный исход.
  
  Так как же мне научиться думать? Как научиться считать на несколько ходов вперёд, как научиться считать, исходя из цели, а не из текущего хода, и как ввести это умение в привычку?
  
  Оригинал статьи "Хочу научиться думать" в журнале Информация о ШутёнкеШутёнка.
  

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"