Буквально сегодня работал с моделью наших библиотек и меня "осенила" одна банальная мысль.
Я "поймал себя за руку" на том факте, что я "уже давно" начал мыслить не в категориях строк кода и текстовых файлов, а именно "графическими образами".
Раньше я "держал в голове" реально строки кода. Я помнил где и что находится. Какой класс за что отвечает. Какие связи между классами существуют. Что и где в каком модуле находится.
Я после работы "прокручивал в голове" эти мегабайты текста в поисках осознания того "что я сделал за сегодняшний день" и "как оно повлияет на дальнейшее развитие проекта(-ов)".
Но дело в том, что текстовая информация - очень "детальна и избыточна". КАЖДАЯ (непустая) строка кода что-то значит.
А этих строк - много... МИЛЛИОНЫ... Десятки миллионов....
И в конце концов - "память кончается". Более новые строки вытесняют более старые.
И к "старым строкам" подчас бывает "мучительно больно возвращаться". Вспоминать. Восстанавливать "кеши".
И главное, что мне же не нужны "детали".
Точнее так - "мне ДАЛЕКО НЕ ВСЕГДА" нужны детали.
А "строки кода" предполагают именно ДЕТАЛЬНОЕ "погружение" в архитектуру проекта. Так, а не иначе.
Другое дело - "графические образы".
Приведу пример - я давно заметил, что многие люди воспринимают картинку с иконками на рабочем столе - как "некое рабочее окружение". Они НЕ ЗАДУМЫВАЮТСЯ - "какая иконка что означает". Они лишь видят "разноцветные пятна" и "узорчики". Мозг САМ "додумывает" за людей "а какая функциональность скрывается за этим узорчиком".
И более того - "нарабатывается механистическая моторика" движения мышью. Люди не задумываясь откатываю мышь в правый нижний угол, а потом перемещают её на НУЖНОЕ количество пикселей к нужному "узорчику".
Так и с UML.
Те же "разноцветные пятна", "узорчики". Та же "механистическая моторика".
А ГЛАВНОЕ - при "чтении" или работе с диаграммой - мозг записывает на подкорку ВСЮ архитектуру системы в виде "графических образов".
И уже МИЛЛИОНЫ строк кода превращаются в ТЫСЯЧИ квадратиков и стрелочек. Да ещё и устроенных как "матрёшка". Таким образом - сложность системы - ЛОГАРИФМИРУЕМСЯ, да и не один раз.
Я понял, что я реально мыслю "графическими образами". Если я решают какю-то практическую задачу, то у меня в голове встают уже не "строки кода", а "узорчики". Которые МОЙ мозг уже по-другому воспринимает и по-другому обрабатывает.
КОНЕЧНО - я говорю ТОЛЬКО про СЕБЯ. У других людей мозг устроен по-другому. Но исходя из "закона больших чисел" - существует ХОРОШАЯ вероятность, что я НЕ ОДИНОК.
Ну вот и всё что я хотел сказать про UML сегодня.
P.S. за скобками остались такие "банальности" как годогенерация и модульное тестирование.
P.P.S. у меня есть ОДИН проект где НЕТ UML ВООБЩЕ. И я часто крайне мучительно приступаю к правкам кода в этом проекте. Притом, что этот проект на два или три порядка меньше остальных. Теперь меня "осенило" - почему так происходит. ЛОГАРИФМИРОВАНИЯ сложности - нету.
Я "поймал себя за руку" на том факте, что я "уже давно" начал мыслить не в категориях строк кода и текстовых файлов, а именно "графическими образами".
Раньше я "держал в голове" реально строки кода. Я помнил где и что находится. Какой класс за что отвечает. Какие связи между классами существуют. Что и где в каком модуле находится.
Я после работы "прокручивал в голове" эти мегабайты текста в поисках осознания того "что я сделал за сегодняшний день" и "как оно повлияет на дальнейшее развитие проекта(-ов)".
Но дело в том, что текстовая информация - очень "детальна и избыточна". КАЖДАЯ (непустая) строка кода что-то значит.
А этих строк - много... МИЛЛИОНЫ... Десятки миллионов....
И в конце концов - "память кончается". Более новые строки вытесняют более старые.
И к "старым строкам" подчас бывает "мучительно больно возвращаться". Вспоминать. Восстанавливать "кеши".
И главное, что мне же не нужны "детали".
Точнее так - "мне ДАЛЕКО НЕ ВСЕГДА" нужны детали.
А "строки кода" предполагают именно ДЕТАЛЬНОЕ "погружение" в архитектуру проекта. Так, а не иначе.
Другое дело - "графические образы".
Приведу пример - я давно заметил, что многие люди воспринимают картинку с иконками на рабочем столе - как "некое рабочее окружение". Они НЕ ЗАДУМЫВАЮТСЯ - "какая иконка что означает". Они лишь видят "разноцветные пятна" и "узорчики". Мозг САМ "додумывает" за людей "а какая функциональность скрывается за этим узорчиком".
И более того - "нарабатывается механистическая моторика" движения мышью. Люди не задумываясь откатываю мышь в правый нижний угол, а потом перемещают её на НУЖНОЕ количество пикселей к нужному "узорчику".
Так и с UML.
Те же "разноцветные пятна", "узорчики". Та же "механистическая моторика".
А ГЛАВНОЕ - при "чтении" или работе с диаграммой - мозг записывает на подкорку ВСЮ архитектуру системы в виде "графических образов".
И уже МИЛЛИОНЫ строк кода превращаются в ТЫСЯЧИ квадратиков и стрелочек. Да ещё и устроенных как "матрёшка". Таким образом - сложность системы - ЛОГАРИФМИРУЕМСЯ, да и не один раз.
Я понял, что я реально мыслю "графическими образами". Если я решают какю-то практическую задачу, то у меня в голове встают уже не "строки кода", а "узорчики". Которые МОЙ мозг уже по-другому воспринимает и по-другому обрабатывает.
КОНЕЧНО - я говорю ТОЛЬКО про СЕБЯ. У других людей мозг устроен по-другому. Но исходя из "закона больших чисел" - существует ХОРОШАЯ вероятность, что я НЕ ОДИНОК.
Ну вот и всё что я хотел сказать про UML сегодня.
P.S. за скобками остались такие "банальности" как годогенерация и модульное тестирование.
P.P.S. у меня есть ОДИН проект где НЕТ UML ВООБЩЕ. И я часто крайне мучительно приступаю к правкам кода в этом проекте. Притом, что этот проект на два или три порядка меньше остальных. Теперь меня "осенило" - почему так происходит. ЛОГАРИФМИРОВАНИЯ сложности - нету.
Не скажу, что мыслю квадратиками, но при проектировании какой-нить новой функциональности для нашей системы, я сначала тоже рисую квадратики и стрелки между ними. На бумаге.
ОтветитьУдалитьПотом детализирую связи, "кручу" "модули"... и только потом уже рождаются объекты БД и код (pl/sql и в Delphi).
Причём код я научился писать так, как об этом рассказывал Александр Алексеев: http://www.gunsmoker.ru/2010/07/blog-post_31.html
Это пришло как-то само-собой, и такой код (почти без комментариев, с разделением большого по маленьким) легче читать и держать в голове.
ВОТ! :-) А "квадратики" это - "следующий уровень" :-) Цитату я у вас украл :-)
Удалитьhttp://myrobot.ru/articles/rev_marvin_minsky.php
ОтветитьУдалитьЦитата: "Если вы думаете о чем-то, то можете думать об этом с точки зрения языка и с точки зрения логики либо в виде диаграмм, рисунков или структур. Если один метод не работает, вы можете быстро переключиться к другому. Именно поэтому мы настолько хорошо справляемся с очень многими ситуациями."
Оффтоп небольшой... ближе к концу Марвин говорит "вот бы мне 4-5 программистов для создания ИИ".
Теперь я знаю, зачем мне нужны деньги в олигархических масштабах.
Собрать Люлина, Янковского, Зверева... и рвануть к Марвину :)
"Оффтоп небольшой... ближе к концу Марвин говорит "вот бы мне 4-5 программистов для создания ИИ".
УдалитьТеперь я знаю, зачем мне нужны деньги в олигархических масштабах.
Собрать Люлина, Янковского, Зверева... и рвануть к Марвину :)"
У меня специализация в ВУЗе была - "автоматизация и интеллектуализация процессов управления". Посему к ИИ - я отношусь ОЧЕНЬ скептически. Потому что "не вынес из ВУЗа" ничего "практически применимого".
Я лично всй больше "на коленке" практикую. Ну от "чертежей" (читай "инженерная графика").
Хотя и ИГ - я не очень любил в ВУЗе.
>>P.P.S. у меня есть ОДИН проект где НЕТ UML ВООБЩЕ.
ОтветитьУдалитьXcode/Objective-C? :)