Прошу помощи коллективного разума. Прежде всего программистов и примкнувших к ним айтишников, но также и всех остальных заинтересованных.
После поста о психологии программистов мне поступил запрос программиста, которого в процессе лечения поломали психологи (подлечили как человека, поломали как программиста): восстановить профессиональные качества программиста.
Нижеследующее - первые наброски методики. Прошу дополнять и корректировать.
Тезисы:
1. Курс должен проходить в обстановке, приближённой к нормальной работе программиста. То есть годиться для индивидуальной самостоятельной работы. Роль ведущего - направлять и подсказывать, если понадобится. Дистанционно.
2. Это не должен быть очередной практический курс языков программирования, фреймворков и технологий. Таких курсов уже 100500, незачем их повторять. Цель - развить базовые качества психики, которые делают программиста программистом.
3. Я планирую фокусироваться на следующих качествах:
* способность к рабочему трансу (состоянию потока)
* в качестве помощи - техники организации работы и времени
* мышление абстракциями и категориями
* деятельный интерес к тому, как всё устроено, как работает и как это можно улучшить
* удовольствие от программирования как процесса
Далее, собственно, упражнения и рекомендации, как это всё развивать. Тут советы особенно нужны.
1. Рабочий транс:
Программы для упражнений в трансе вообще - headspace и им подобные.
Игры, требующие сосредоточенного напряжения мыслей, но не скорости реакций. Puzzle Forge.
Игры, требующие сосредоточенного внимания, но не скорости реакций. Shisen, Mahjongg, 2048.
1a. Техники организации. Тут полностью хватит "Джедайских техник" Дорофеева.
2. Абстракции и категории:
Казуальные игры на логическое мышление и внимание, с минималистической графикой или без неё. Simon Tatham's Puzzles, Sudoku, Sherlock (Эйнштейн), Triple Town.
Тестовые стратегии и бродилки. Nethack, ADoM, Dwarf Fortress, что ещё? Принципиально: никаких графических надстроек, только условные текстовые символы.
Следующий уровень: взять несколько принципиально разных языков программирования, не для практического применения, а чтобы прочувствовать, какие идеи и способы несёт каждый из них, ощутить, как каждый из языков выворачивает мозги в свою сторону. Примерный список: C (не C++), Forth, Scala, Haskell (или F#), javascript (Node.js). Изучить основы, порешать на них простые упражнения типа CodeKata.
3. Интерес "как это работает":
Упражнения: Возьмите любую программу или устройство, которыми вы регулярно пользуетесь. Изучите все его возможности как пользователь: разберитесь в назначении каждой кнопки и рычажка, изучите все режимы работы; пройдитесь по всех пунктам меню, настройкам и панелям, убедитесь, что понимаете назначение всего, что там есть. Обращайтесь к инструкциям и Google для прояснения.
Следующий этап: изучите хотя бы в первом приближении, как оно устроено внутри, что там к чему и зачем. Опять же инструкции и Google, how stuff works. Следующий этап: найдите хотя бы три условия или ситуации, на которые эта штуковина не рассчитана и заглючит. Придумайте хотя бы по три способа, как это исправить.
Общее развитие: смотрите лекции с TED.com и им подобные
4. Удовольствие от программирования:
Подберите себе pet project - программистскую задачку, которую вам будет интересно сочинять и делать, не связывая себя обязательством вообще кому-либо её показывать. И делайте её на любом известном вам языке программирования. Позвольте себе делать только интересные части, наплюйте на документацию и рутинное вылизывание скучных подробностей, если они вам не интересны. Снимайте в этой задаче сливки и слизывайте крем с тортика. Позвольте себе бросить её недоделанной, когда надоест, и переключиться на другую подобную задачку. Цель - получать удовольствие от самого процесса сочинения структур и алгоритмов с последующим их кодированием. Дисциплине в рабочих проектах вы научитесь отдельно в соответствующих курсах, а это - место для игры.
Уф. Комментарии, мнения, дополнения?
[
DW ]