Top down design. Принципы, критерии мастерства и как этому учиться.
Сегодня у меня удивительно конструктивное настроение, по этой причине тут будет не сарказм, а кое-что полезное. Там много, так что всё сразу под катом.
Проблема софтописания в том, что уровни дизайна не видны. Вначале, когда компьютеры были большие и медленные, всё было просто, потому что было сложно. Приходилось применять обычные инженерные практики: сначала рисовались эскизы, потом диаграммы с наглядным представлением потоков данных, модулей программ, входных и выходных интерфейсов. Даже алгоритмы рисовали в виде блок-схем. Уровень кода был настолько сложен, что всем было понятно, что, не поднявшись выше, не получится охватить взглядом всё целиком или хотя бы достаточно большой объём задачи.
Потом появились языки высокого уровня. Языки упрощённые. Языки, прощающие ошибки. Языки примитивные для совсем тупых. Языки запутанные для трудолюбивых снобов. Цветные мониторы. Большие экраны. Программы, подкрашивающие и подсказывающие...
И возникла иллюзия.
Иллюзия, потому что хороший дизайн во время кодирования сделать не получится. Для этого нужен принципиально другой режим работы сознания и другой тип структурирования информации. Но его очень легко сымитировать. Настолько легко, что многие, даже весьма продвинутые кодописатели, научились себя обманывать.
Этому сильно помогли профессора, никогда в жизни не производившие чего-то в реальных условиях, но считающие, что во всём разбираются, производители тулов, которые не помогают реализовать сложные принципы дизайна, а просто переводят кодирование в формат расстановки прямоугольничков и стрелочек, и, конечно, авторы книг, распространяющие свои ошибки и иллюзии в массы.
Я не буду тут расписывать дальше этот феномен и объяснять причины. Кто видит, понял. Кто не понял, может поверить. Кто не верит - я не настаиваю. Объяснять долго и сложно, и сейчас здесь я этого делать не буду.
Просто примем как факт, что в рамках софтопроизводства при нынешнем состоянии индустрии научиться правильному дизайну не получится.
К счастью, человеческий мозг работает на аналоговых принципах. Это значит, что кроме пути "найти информацию, понять, запомнить, попытаться применить", есть ещё путь наработки навыков. (На немецком я бы это назвал die Kraft, на английском - что-то между power, strength, skill, ability... Термина, чётко отражающего то, что мне нужно, я ещё не выбрал.)
Грубо говоря, человек сначала учится что-то делать хорошо, потом может объяснить, почему данная цепочка решений - это хорошо для данного конкретного случая, и только набрав значительный опыт пытается его обосновать и вербализировать теории о том, как сделать хорошо в целом классе задач.
Недостаток этого метода в слабой доказуемости результата на первом этапе. Преимущество - в том, что он великолепно переносится на смежные и, даже, отдалённые области. Как только мозг распознаёт знакомые структуры, он начинает работать в правильном направлении.
Короче, если начальник дурак (то есть, в большинстве случаев), развитие навыков на уровне интуиции не поможет. Но, если для себя хочется сделать что-то хорошее, этот путь самый правильный.
Из всех областей, где можно набить руку на разработке сложных систем сверху вниз, я предпочитаю рисование и написание художественных текстов.
Под рисованием я имею ввиду не курсы "красиво срисуем эту фотографию", а классический подход, начинающийся с разметки композиции, выяснения пропорций, выделения крупных форм и проработки деталей. Кому нравится возюкать кисточкой по бумаге, можно добавить живопись, позволяющую освоить правильное понимание цветов.
Под литературными упражнениями тоже имеется ввиду не описание природы или повторение вариации прохождения компьютерной игры, а что-нибудь динамичное с завязкой, кульминацией и концовкой. Лучше всего на заданную тему и с предварительной проработкой сюжета.
Согласно одному из сценаристов Диснея нужно создать:
1) мир, в котором хочется оказаться,
2) героев, с которыми хочется себя ассоциировать,
3) обстоятельства, оказаться в которых абсолютно не хочется.
Если мир и персонажи хорошо проработаны, они начинают действовать сами. Если дизайн мира плох, а характеристики персонажей туманны, при написании будут ощущения, что приходится таскать валуны по болоту. (Некоторые называют это тяжёлым писательским трудом, но не стоит им верить. Когда персонажи оживают, начинается драйв.)
Короче говоря, для тренировки надо не слушать тех, кто говорит, что писатели работают по наитию, а сделать упор на разработке мира и продумывании персонажей, после чего прогнать их по нескольким сюжетным линиям. Важно довести продукт до конечного результата, потому что именно в мелочах и будут видны все ошибки дизайна и нарушения баланса в проработке уровней.
На самом деле, я просто немного поигрался с сеттингом Энимы, созданным
makkawity, и только сегодня подумал, что стоит написать этот короткий пост, потому что до полноценного изложения темы я если и доберусь, то совсем не скоро.
Ниже в первом комментарии взятый мной для эксперимента кусок "техзадания" и то, что у меня из этого получилось. Если разбираться, можно понять, что и почему я поменял или добавил.
По рисованию я советую:
1. "I'd Love to Draw!" by Andrew Loomis: Читать с карандашом в руке и стопкой бумаги под рукой.
2. "Imaginative Realism: How to Paint What Doesn't Exist" by James Gurney : Просто читать, думать и рассматривать картинки. Потом думать и пытаться делать выводы. Даже, если они не правильные, это полезно. Тем более, картинки хорошие. Дети могут книгу часами рассматривать.
3. Какой-нибудь курс рисования, удовлетворяющий вышеперечисленным критериям. Тут уже зависит от личных предпочтений, потому что для понимания того, что художники знают только руками, процесс надо повторить самостоятельно. Практически любая хорошая книжка подойдёт. Кому не нравится рисовать цветы и людей, можно взять что-нибудь вроде "Drawing Scenery: Landscapes and Seascapes" by Jack Hamm и просто проделать те упражнения, которые показались интересными, а потом попробовать применить это в рисовании реального или воображаемого ландшафта.
Дизайн и комиксы, наверно, не годятся, потому что первый - это в основном срисовывание, а второе слишком примитивно.
Кому жалко денег на книжки и не жалко времени, можно попытаться поискать тематические посты в блогах типа Gurney Journey и Muddy Colors или рисовать по лекциям вроде Proko.
Набив руку на технике, можно развлекаться быстрым рисованием интерфейсов, придумывании визуальных аллегорий для функций программы или быстро набросать от руки нужную картинку вместо того, чтобы долго перерывать помойки с картинками, выбирая ту, что можно вставить в презентацию. И схематичное улыбающееся лицо вместо точка-точка-огуречек на доске во время обсуждения техзадания может растопить сердце заказчика. (Можно, конечно, поручить это профессиональным дизайнерам, но они часто выпендриваются и редко досконально понимают, что именно от них нужно.)
Для того, чтобы писать, стоит почитать теорию. Для начала:
1. "The Marshall Plan for Novel Writing: A 16-Step Program Guaranteed to Take You from Idea to Completed Manuscript" by Evan Marshall
2. или же в компактной форме, если удастся найти и не пугает формат "Shoujo Manga Techniques: Writing Stories" by Mako Itsuki
В принципе, книг много и я могу заполнить рекомендациями несколько постов, но это для описываемой задачи самое подходящее.
Потом можно поучаствовать в конкурсах на заданную тему или пописать для души. Чего-то большого создавать не надо, достаточно рассказов среднего объёма. Просто чтобы понять, как создавать сюжет, что надо в описании персонажа, а какие подробности приходится менять или выбрасывать по мере превращения идеи в текст. Заодно можно потренироваться в изложении мыслей в подтексте и выборе правильных слов.
В продвинутой версии можно попытаться переписать чью-то графоманию во что-то интересное, связать цепочку сюжетов, построить многоуровневый сюжет, написать весь рассказ короткими предложениями или одними диалогами без ремарок, чтобы персонажи отличались только стилем речи...
Только в конкурсах не стоит рассчитывать на победу, потому что на русском сейчас спрос или кровавых партизанах верхом на медведях или на глубокомысленное нытьё интеллигентсвующих эмигрантов.
Короче, если хотите освоить методы построения сложных информационных систем, я рекомендую пойти одним из этих двух путей. Или же можно выбрать сразу оба.
Сегодня у меня удивительно конструктивное настроение, по этой причине тут будет не сарказм, а кое-что полезное. Там много, так что всё сразу под катом.
Проблема софтописания в том, что уровни дизайна не видны. Вначале, когда компьютеры были большие и медленные, всё было просто, потому что было сложно. Приходилось применять обычные инженерные практики: сначала рисовались эскизы, потом диаграммы с наглядным представлением потоков данных, модулей программ, входных и выходных интерфейсов. Даже алгоритмы рисовали в виде блок-схем. Уровень кода был настолько сложен, что всем было понятно, что, не поднявшись выше, не получится охватить взглядом всё целиком или хотя бы достаточно большой объём задачи.
Потом появились языки высокого уровня. Языки упрощённые. Языки, прощающие ошибки. Языки примитивные для совсем тупых. Языки запутанные для трудолюбивых снобов. Цветные мониторы. Большие экраны. Программы, подкрашивающие и подсказывающие...
И возникла иллюзия.
Иллюзия, потому что хороший дизайн во время кодирования сделать не получится. Для этого нужен принципиально другой режим работы сознания и другой тип структурирования информации. Но его очень легко сымитировать. Настолько легко, что многие, даже весьма продвинутые кодописатели, научились себя обманывать.
Этому сильно помогли профессора, никогда в жизни не производившие чего-то в реальных условиях, но считающие, что во всём разбираются, производители тулов, которые не помогают реализовать сложные принципы дизайна, а просто переводят кодирование в формат расстановки прямоугольничков и стрелочек, и, конечно, авторы книг, распространяющие свои ошибки и иллюзии в массы.
Я не буду тут расписывать дальше этот феномен и объяснять причины. Кто видит, понял. Кто не понял, может поверить. Кто не верит - я не настаиваю. Объяснять долго и сложно, и сейчас здесь я этого делать не буду.
Просто примем как факт, что в рамках софтопроизводства при нынешнем состоянии индустрии научиться правильному дизайну не получится.
К счастью, человеческий мозг работает на аналоговых принципах. Это значит, что кроме пути "найти информацию, понять, запомнить, попытаться применить", есть ещё путь наработки навыков. (На немецком я бы это назвал die Kraft, на английском - что-то между power, strength, skill, ability... Термина, чётко отражающего то, что мне нужно, я ещё не выбрал.)
Грубо говоря, человек сначала учится что-то делать хорошо, потом может объяснить, почему данная цепочка решений - это хорошо для данного конкретного случая, и только набрав значительный опыт пытается его обосновать и вербализировать теории о том, как сделать хорошо в целом классе задач.
Недостаток этого метода в слабой доказуемости результата на первом этапе. Преимущество - в том, что он великолепно переносится на смежные и, даже, отдалённые области. Как только мозг распознаёт знакомые структуры, он начинает работать в правильном направлении.
Короче, если начальник дурак (то есть, в большинстве случаев), развитие навыков на уровне интуиции не поможет. Но, если для себя хочется сделать что-то хорошее, этот путь самый правильный.
Из всех областей, где можно набить руку на разработке сложных систем сверху вниз, я предпочитаю рисование и написание художественных текстов.
Под рисованием я имею ввиду не курсы "красиво срисуем эту фотографию", а классический подход, начинающийся с разметки композиции, выяснения пропорций, выделения крупных форм и проработки деталей. Кому нравится возюкать кисточкой по бумаге, можно добавить живопись, позволяющую освоить правильное понимание цветов.
Под литературными упражнениями тоже имеется ввиду не описание природы или повторение вариации прохождения компьютерной игры, а что-нибудь динамичное с завязкой, кульминацией и концовкой. Лучше всего на заданную тему и с предварительной проработкой сюжета.
Согласно одному из сценаристов Диснея нужно создать:
1) мир, в котором хочется оказаться,
2) героев, с которыми хочется себя ассоциировать,
3) обстоятельства, оказаться в которых абсолютно не хочется.
Если мир и персонажи хорошо проработаны, они начинают действовать сами. Если дизайн мира плох, а характеристики персонажей туманны, при написании будут ощущения, что приходится таскать валуны по болоту. (Некоторые называют это тяжёлым писательским трудом, но не стоит им верить. Когда персонажи оживают, начинается драйв.)
Короче говоря, для тренировки надо не слушать тех, кто говорит, что писатели работают по наитию, а сделать упор на разработке мира и продумывании персонажей, после чего прогнать их по нескольким сюжетным линиям. Важно довести продукт до конечного результата, потому что именно в мелочах и будут видны все ошибки дизайна и нарушения баланса в проработке уровней.
На самом деле, я просто немного поигрался с сеттингом Энимы, созданным
Ниже в первом комментарии взятый мной для эксперимента кусок "техзадания" и то, что у меня из этого получилось. Если разбираться, можно понять, что и почему я поменял или добавил.
По рисованию я советую:
1. "I'd Love to Draw!" by Andrew Loomis: Читать с карандашом в руке и стопкой бумаги под рукой.
2. "Imaginative Realism: How to Paint What Doesn't Exist" by James Gurney : Просто читать, думать и рассматривать картинки. Потом думать и пытаться делать выводы. Даже, если они не правильные, это полезно. Тем более, картинки хорошие. Дети могут книгу часами рассматривать.
3. Какой-нибудь курс рисования, удовлетворяющий вышеперечисленным критериям. Тут уже зависит от личных предпочтений, потому что для понимания того, что художники знают только руками, процесс надо повторить самостоятельно. Практически любая хорошая книжка подойдёт. Кому не нравится рисовать цветы и людей, можно взять что-нибудь вроде "Drawing Scenery: Landscapes and Seascapes" by Jack Hamm и просто проделать те упражнения, которые показались интересными, а потом попробовать применить это в рисовании реального или воображаемого ландшафта.
Дизайн и комиксы, наверно, не годятся, потому что первый - это в основном срисовывание, а второе слишком примитивно.
Кому жалко денег на книжки и не жалко времени, можно попытаться поискать тематические посты в блогах типа Gurney Journey и Muddy Colors или рисовать по лекциям вроде Proko.
Набив руку на технике, можно развлекаться быстрым рисованием интерфейсов, придумывании визуальных аллегорий для функций программы или быстро набросать от руки нужную картинку вместо того, чтобы долго перерывать помойки с картинками, выбирая ту, что можно вставить в презентацию. И схематичное улыбающееся лицо вместо точка-точка-огуречек на доске во время обсуждения техзадания может растопить сердце заказчика. (Можно, конечно, поручить это профессиональным дизайнерам, но они часто выпендриваются и редко досконально понимают, что именно от них нужно.)
Для того, чтобы писать, стоит почитать теорию. Для начала:
1. "The Marshall Plan for Novel Writing: A 16-Step Program Guaranteed to Take You from Idea to Completed Manuscript" by Evan Marshall
2. или же в компактной форме, если удастся найти и не пугает формат "Shoujo Manga Techniques: Writing Stories" by Mako Itsuki
В принципе, книг много и я могу заполнить рекомендациями несколько постов, но это для описываемой задачи самое подходящее.
Потом можно поучаствовать в конкурсах на заданную тему или пописать для души. Чего-то большого создавать не надо, достаточно рассказов среднего объёма. Просто чтобы понять, как создавать сюжет, что надо в описании персонажа, а какие подробности приходится менять или выбрасывать по мере превращения идеи в текст. Заодно можно потренироваться в изложении мыслей в подтексте и выборе правильных слов.
В продвинутой версии можно попытаться переписать чью-то графоманию во что-то интересное, связать цепочку сюжетов, построить многоуровневый сюжет, написать весь рассказ короткими предложениями или одними диалогами без ремарок, чтобы персонажи отличались только стилем речи...
Только в конкурсах не стоит рассчитывать на победу, потому что на русском сейчас спрос или кровавых партизанах верхом на медведях или на глубокомысленное нытьё интеллигентсвующих эмигрантов.
Короче, если хотите освоить методы построения сложных информационных систем, я рекомендую пойти одним из этих двух путей. Или же можно выбрать сразу оба.
no subject
Date: 2017-11-15 04:44 pm (UTC)Результат попытки его реализации.
no subject
Date: 2017-11-15 07:58 pm (UTC)Я бы сказал что по английски это будет a craftsmanship.
no subject
Date: 2017-11-15 08:11 pm (UTC)no subject
Date: 2017-11-15 09:17 pm (UTC)Есть такая эвристика, если человек не может объяснить суть предмета на пальцах пятилетнему ребенку, то он просто сам не понимает предмета=)
Насчет рисования и программирования - занятная связка, первый раз такое вижу.
no subject
Date: 2017-11-15 09:55 pm (UTC)А в оригинале там не человек, а учёный, не пятилетнему ребёнку, а уборщице, и объяснить не суть, а смысл своей работы. Проверочное слово "Резерфорд".
Испорченный телефон - жуткое дело.
Объяснить я могу. Но это бесполезная потеря времени. Тем более, в письменном виде и программистам, которые в психологии разбираются хуже пятилетнего ребёнка, потому что познали компьютер и думают, что мозг работает также.
То, что "первый раз" - это не показатель. Например, визуальной лингвистикой комиксов занимается только один человек. По крайней мере из тех, кто пишет на английском.
Тем, кто разбирается в обеих областях связь между процессами будет понятна, но таких людей слишком мало. Даже те программисты, кто от нечего делать берёт в руки кисточку, в основном выбирают курсы срисовывания.
no subject
Date: 2017-11-15 11:24 pm (UTC)Не только мозг, а вообще всё остальное, известное дело. Когда в руках молоток, то всё вокруг похоже на гвоздь.
no subject
Date: 2017-11-16 07:42 am (UTC)Да, редкая вещь, поэтому и обратил внимание. Хотя судя по гиктаймсу, писательство среди программистов - уже чуть ли не мейнстрим.
>>Даже те программисты, кто от нечего делать берёт в руки кисточку, в основном выбирают курсы срисовывания.
Печально то, что многие начинающие художники тоже теряют годы на подобном срисовывании.
no subject
Date: 2017-11-16 09:37 am (UTC)no subject
Date: 2017-11-21 06:26 pm (UTC)no subject
Date: 2017-11-21 09:05 pm (UTC)Для вспелеска сознания нужно сознание. А с этим проблемы уже сейчас. Не говоря о том, что будет через десять лет.