17 февр. 2009 г.

Секрет эффективности

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

Если человек очень увлечён какой-то темой, то его эффективность вырастает не в разы, а на порядки. Даже если сама эта тема не очень полезна для его будущего, то огромные пласты дополнительных знаний и навыков, которые возникают в процессе освоения интересного, могут иметь определяющее значение.

Недавно я видел, как паренёк девяти лет отроду решал нашу задачку («одним росчерком превратить 5+5+5+5=555 в верное равенство») способом, который был грубо назван не очень творческим.

Поскольку сам ребёнок интересовался компьютерами не как игровыми приставками, а как средством саморазвития, то программировал он решительно всё, что только мог найти. В данном случае, он тут же открыл текстовый редактор, создал файл 555.html и написал примерно следущее (для большей ясности я поместил раскрашенную версию с комментариями):

<script type="text/javascript">
s='5+5+5+5=555'; // initial string
p='0123456789'; // possible values
for(i=0;i<s.length;i++) {
 for(j=0;j<p.length;j++) {
  t=s.substr(0,i)+p.substr(j,1)+s.substr(i+1); // test string
  if(t.indexOf('=')>-1){ // if it is equation
   e='if('+t.replace('=','==')+")document.write('"+t+"<br>');";
   eval(e); // check
  }
 }
}
</script>

После чего, не сомневаясь лишний раз, он открыл этот файл браузером (попробуйте, если ещё не решили задачку сами). Программа мгновенно выдала три строки, что сразу позволило сформулировать ответ (по ссылке изображение с решением).

Хорошо это или плохо? Некоторые программисты тут же смогут объяснить, что ребёнку надо учить нормальные языки программирования, а не делать всякую ерунду под web, другие одобрят, потому что считают, что будущее за браузерными приложениями. Кто-то скажет, что лучше научиться решать такие простые задачки головой, а не привлекать ко всему компьютер, что тоже имеет смысл. Недавно мы говорили о проблеме олимпиадников, что лишний раз нас возвращает к вопросу о том, правы ли родители, позволяющие своему чаду так увлекаться компьютером... Все эти аргументы надо обдумывать. Но одно можно точно сказать: ребёнок понимает логику (потому что компьютер не прощает логических ошибок), способен решать весьма сложные математические задачки (это побочный эффект от освоения базовых алгоритмов), имеет хорошую память и цепкий ум, быстро оперирует разношёрстной информацией (ведь в каждом языке программирования свои тонкости), быстро читает и осваивает материал (так как есть много интересных книг о компьютерах). Ребёнку потом не обязательно становиться программистом, интересы могут поменяться через пару лет... Но развитую голову он уже получил :) Удалось бы этого достичь, если бы его заставляли читать и учить «просто так»?

Если чем-то очень увлечён, то становишься эффективнее в тысячи раз, а все «побочные» умения появляются сами собой, не вызывая трудностей.

17 комментариев:

  1. Ребенок молодец, подход отличный. Он сам догадался найти инструмент, а это уже говорит о том, что голова работает на поиск решения что есть тренировка мозга ничуть не худшая, чем вручную перебирать варианты.

    ОтветитьУдалить
  2. Да, мне тоже показалось, что такой подход - прекрасное проявление большой внутренней работы и индикатор перспектив :)

    Одно обидно: этого паренька в школе на уроках "программирования" будут учить пользоваться MS-Paint'ом, MS-Word'ом, MS-Excel'ем и MS-PowerPoint'ом. Другими словами, ему никак не помогут в школе развиваться в сторону программирования, а попробуют привить отвращение к нему :(
    Благо, я уверен, что им это не удастся :) Но остальных детей жалко.

    ОтветитьУдалить
  3. Анонимный17.02.2009, 15:51

    Это же типичный так называемый инженерный подход :( На самом деле, печально. Я таких кодеров в штате имел и рад никто впоследствии не был, хотя работа выполнялась в огромных объемах и в срок.

    Мозг (mind?) надо иметь открытый и свободный...

    ОтветитьУдалить
  4. Hungryforester, есть такая беда. Но я стараюсь видеть обе стороны медали, а не только плохую :) Хорошая состоит в том, что ребёнок освоил много полезного (научился печатать 10-пальцевым слепым методом, прочитал описание многих классических алгоритмов, понял, что надо уметь писать код на любом языке программирования, если есть документация (хоть на русском, хоть на английском, что важно в нынешнем мире), освоил операционную систему до весьма продвинутого уровня... многие проблемы современных пользователей он вообще не замечает, так как для него они уже слишком просты, а это позволит ему в будущем меньше времени терять на ерунду).

    Но, безусловно, надо ему подкидывать задачи, которые такими методами не могут быть решены, чтобы "голова включалась" больше :)

    ОтветитьУдалить
  5. Промышленный метод, однако.
    Илья Весенний правильно заметил, что нужно подкидывать в том числе и задачи, которые решаются головой.

    ОтветитьУдалить
  6. В данном случае этот способ "проканал"... Но есть и другая задачка - разделить число 188 пополам так, что бы получилась единица. Вот здесь данный подход вообще не подойдет)))

    Кстати, именно из-за того, что я знал вот эту приведенную задачу, я не смог быстро решить "пятерочную"... Только потом я начал думать "что мне не хватает в сумме 4х пятерек, что бы получить 555? А если трех? А если 2х? Оп-па!!! А ведь 5+5 это же есть почти 545"

    ЗЫ. А мальчик молодец.

    ОтветитьУдалить
  7. Sergey, спасибо, что описали свой путь решения (я собираю статистику :).
    Понятно, что переборное решение сработает далеко не для всех задачек, но оно быстрое, поэтому порой стоит его попробовать, чтобы отбросить заведомо простые варианты. Есть такая позиция: если мы уже убедились, что "задача для головы", то пора подключать голову, а до этого - нечего тратить ценный ресурс :)

    ОтветитьУдалить
  8. Этот "ценный ресурс" всё равно простаивает. Я не верю, что можно написать такой скрипт, не зная ответ. Скорее всего он просто хотел удостовериться, что ответ единственный. Но тогда нужно было включить в перебор математические знаки и вставку символов (сейчас замена).

    ОтветитьУдалить
  9. Добавлю свои 5 копеек по поводу решения всё-таки... Я не нашёл правильное, но зато нашёл условно верное :).. Правда я и потратил не более 5 минут, прежде чем пошёл смотреть ответы :)

    В общем вариант такой...
    "5+5+5+5 = 55/5" - в 19-ричной системе счисления :)

    Напомнило довольно известную задачку для начальных классов... Где были даны пары чисел и надо было найти соответсвие последнему числу без пары... И ответ был - число "кружочков"... Для большинства взрослых - почти неваозможна для решения ;)
    Иногда думать просто - сложно, а думать сложно - просто...

    ОтветитьУдалить
  10. Dzmitry Paulenka, спасибо за оригинальное решение!

    ОтветитьУдалить
  11. Задачу не решил,так как предпочитаю иное написание цифры 4. Несправедливо :)

    ОтветитьУдалить
  12. Долго не мог понять, как 20=11 в 19-ричной системе исчисления. Всё время получал 1=11... Пока не понял, что почему-то правую часть нужно читать в десятичной системе счисления, а левую в 19-ричной. Абсолютно нелогично, ИМХО.

    ОтветитьУдалить
  13. alexsmail, пусть не очень логично, но важен навык замечать такое. Потом уже можно фильтровать полученные "решения" по правдоподобности и адекватности... Главное, чтобы было из чего выбирать :)

    ОтветитьУдалить
  14. Анонимный24.11.2010, 02:00

    по-моему - классический хак. все более замороченное было бы преждевременной оптимизацией. Только вот теперь надо еще совсем из другой области привнести знание - в математике красота это критерий силы теории. Т.е. просто перебор - это не красиво. Но вот его такой хитрый перебор, да еще и в оппортунистическом компьютере (браузере) - это красиво.

    ОтветитьУдалить
  15. Анонимный24.01.2013, 19:36

    Хочу научить своего младшего брата программировать. Где бы найти достаточное количество подходящих задачек, чтобы ребёнок и подумать мог, но не слишком сложных, и нескучных?

    ОтветитьУдалить
    Ответы
    1. Зависит от возраста брата. Можно начать с игр Light Bot и Light Bot 2, потом перейти на Snakes от Gamos. А если это всё уже кажется простым, то можно выбрать из трёх программ (как раз задания начального уровня, отличающиеся повышенной интересностью, если работать в паре).
      Тут искать надо, что ему ближе, что увлечь сильнее может. Если любит языки, то можно регулярные выражения освоить, например. Кому-то интересно свой архиватор написать, кому-то простейший шифр, кому-то 2d-лабиринт, кому-то решатель автобусных билетиков. Надо пробовать!

      Удалить