Как разобратся много кода
От: zorba  
Дата: 04.08.11 10:45
Оценка:
Допустим есть огроменный проект. Как максимально эфективно разобратся в нем? Я обычно стараюсь гонять его под отладчиком, смотрю workflow, и т.д. Эффективность не слишком высока. Особенно неприятно, что "за бортом" остаюстся огромные фрагменты кода не учавствующие в основном workflow. Есть идея попробовать тупо читать файл за файлом и строить диаграммы.

Как Вы подходите к такой задаче?
Re: Как разобратся много кода
От: Undying Россия  
Дата: 04.08.11 10:48
Оценка: +3
Здравствуйте, zorba, Вы писали:

Z>Допустим есть огроменный проект. Как максимально эфективно разобратся в нем? Я обычно стараюсь гонять его под отладчиком, смотрю workflow, и т.д. Эффективность не слишком высока. Особенно неприятно, что "за бортом" остаюстся огромные фрагменты кода не учавствующие в основном workflow. Есть идея попробовать тупо читать файл за файлом и строить диаграммы.

Z>Как Вы подходите к такой задаче?

Начинаю исправлять ошибки и добавлять функциональность, т.е. решать текущие задачи.
Re[2]: Как разобратся много кода
От: zorba  
Дата: 04.08.11 10:56
Оценка:
Когда-то работал в крупной компании. Использовал именно этот метод. К своему стыду, даже через два года нифига не понимал за пределами своего маленького мирка в котором давали поработать. Не хочу повторить еще раз эту ошибку...

U>Начинаю исправлять ошибки и добавлять функциональность, т.е. решать текущие задачи.
Re: Как разобратся много кода
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.08.11 11:00
Оценка: 1 (1)
Алгоритм следующий. Берешь Doxygen + Graphwiz и строишь максимально подробную "документацию" для всего проекта. Включаешь построение UML моделей, генерацию кода в виде HTML.
Дальше, смотря на получившиеся схемы в документации, выбираешь узел, с которым связанно наибольшее количество других узлов. Обычно таких узлов несколько, так что берешь любой из них. Разбираешься с узлом, понимаешь почему с ним столько связей, пишешь заметки в тетради. После того как пройдешь основные узлы, станет более менее понятно, с чем ты имеешь дело. Если есть время, стоит немного посмотреть на второстепенные узлы. В процессе разбора активно читаешь сгенерированные из кода странички (благо Doxygen делает удобную навигацию).

На этот процесс стоит потратить до 1-й недели. По прошествию которой у тебя будет более-менее сносное представление о проекте (как минимум ты сможешь задавать нормальные вопросы коллегам).
Дальше берешь задачку и начинаешь решать ее исходя из имеющихся знаний, в процессе дорабатываешь свои заметки по поводу архитектуры.
Re: Как разобратся много кода
От: _Obelisk_ Россия http://www.ibm.com
Дата: 04.08.11 11:18
Оценка: 3 (1) +2
Здравствуйте, zorba, Вы писали:

Z>Допустим есть огроменный проект. Как максимально эфективно разобратся в нем? Я обычно стараюсь гонять его под отладчиком, смотрю workflow, и т.д. Эффективность не слишком высока. Особенно неприятно, что "за бортом" остаюстся огромные фрагменты кода не учавствующие в основном workflow. Есть идея попробовать тупо читать файл за файлом и строить диаграммы.


Z>Как Вы подходите к такой задаче?


Фиксю конкретные проблемы и изучаю то, что к ним относится. Зубрить весь код смысла не вижу. Это не самоцель. Возникает задача — изучаю соответствующий кусок.


http://www.rsdn.org:80/File/18435/5278.png
Душа обязана трудиться! (с) Н.Заболоцкий.
Re[3]: Как разобратся много кода
От: Undying Россия  
Дата: 04.08.11 11:54
Оценка:
Здравствуйте, zorba, Вы писали:

Z>Когда-то работал в крупной компании. Использовал именно этот метод. К своему стыду, даже через два года нифига не понимал за пределами своего маленького мирка в котором давали поработать. Не хочу повторить еще раз эту ошибку...


А в чем смысл понимать код за пределами своего мирка, если тебе задачи выходящие за рамки этого мирка не дают?

U>>Начинаю исправлять ошибки и добавлять функциональность, т.е. решать текущие задачи.


Это начальный этап. После прохождения этого этапа начинаешь думать как следует изменить архитектуру для того, чтобы код стал проще.
Re[2]: Как разобратся много кода
От: Murom Россия  
Дата: 04.08.11 12:14
Оценка: +3
Здравствуйте, kaa.python, Вы писали:

KP>Алгоритм следующий. Берешь Doxygen + Graphwiz и строишь максимально подробную "документацию" для всего проекта. Включаешь построение UML моделей, генерацию кода в виде HTML.

KP>Дальше, смотря на получившиеся схемы в документации, выбираешь узел, с которым связанно наибольшее количество других узлов. Обычно таких узлов несколько, так что берешь любой из них. Разбираешься с узлом, понимаешь почему с ним столько связей, пишешь заметки в тетради. После того как пройдешь основные узлы, станет более менее понятно, с чем ты имеешь дело. Если есть время, стоит немного посмотреть на второстепенные узлы. В процессе разбора активно читаешь сгенерированные из кода странички (благо Doxygen делает удобную навигацию).

KP>На этот процесс стоит потратить до 1-й недели. По прошествию которой у тебя будет более-менее сносное представление о проекте (как минимум ты сможешь задавать нормальные вопросы коллегам).

KP>Дальше берешь задачку и начинаешь решать ее исходя из имеющихся знаний, в процессе дорабатываешь свои заметки по поводу архитектуры.

В итоге обычно получается много знаний, которые не связаны, и применения которым найти не получается, т.к. нет понимания верхнего дизайна проекта.
Тут в самую точку подходит пословица — "за деревьями леса не видим".

Имеет смысл найти архитектора/дизайнера(не гуй)/многоопытного разработчика, которые могут пояснить макроструктуру проекта. Основные идеи, концепции, логические блоки и их структуру.

И уже только после этого можно опускаться до диаграмм классов и исходников.
Иначе так и не получится выйти из мирка пары классов и их связи.
- Eugeny
Re: Как разобратся много кода
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.08.11 12:19
Оценка:
Здравствуйте, zorba, Вы писали:

Z>Как Вы подходите к такой задаче?


Такую задачу я перед собой просто не ставлю.
Re[3]: Как разобратся много кода
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.08.11 12:21
Оценка:
Здравствуйте, zorba, Вы писали:

Z>Когда-то работал в крупной компании. Использовал именно этот метод. К своему стыду, даже через два года нифига не понимал за пределами своего маленького мирка в котором давали поработать. Не хочу повторить еще раз эту ошибку...


А что в этом необычного? Что в этом отрицательного?
Re[4]: Как разобратся много кода
От: zorba  
Дата: 04.08.11 12:44
Оценка:
Не люблю работать с черными ящиками.

M>А что в этом необычного? Что в этом отрицательного?
Re[5]: Как разобратся много кода
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.08.11 12:59
Оценка:
Здравствуйте, zorba, Вы писали:

Z>Не люблю работать с черными ящиками.


И тобой изучена каждая строчка .Net Framework-а, дизасемблировал полностью Windows? С чем ты там еще работаешь?
Re[6]: Как разобратся много кода
От: zorba  
Дата: 04.08.11 13:14
Оценка:
M>И тобой изучена каждая строчка .Net Framework-а, дизасемблировал полностью Windows? С чем ты там еще работаешь?

Не нужно передергивать. Кстати ядро винды (плюс WRK, ReactOS и утекшие исходники Win2000) продизассемблировал и прочитал вдоль и поперек

8 лет работаю в одной фирме, в которой нахожусь с самого основания. Очень приятно когда понимаешь или можешь легко понять как работает любая строчка в любом файле. При переходе в другую фирму хотелось бы максимально эффективно потратить время на освоение наработанного кода.
Re[7]: Как разобратся много кода
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.08.11 13:17
Оценка:
Здравствуйте, zorba, Вы писали:

Z>8 лет работаю в одной фирме, в которой нахожусь с самого основания. Очень приятно когда понимаешь или можешь легко понять как работает любая строчка в любом файле. При переходе в другую фирму хотелось бы максимально эффективно потратить время на освоение наработанного кода.


Ну если ты разобрался в Windows, что мешает делать так же? Например, решая конкретную задачу заглядывать чуть-чуть больше в те методы, что используются? И с каждой новой фрикцией входить глубже и глубже?
Re[8]: Как разобратся много кода
От: zorba  
Дата: 04.08.11 13:38
Оценка:
Просто делал это по мере необходимости год за годом. А сейчас мне хотелось бы "положить винт с исходниками на ночь под подушку, проснуться, и вуаля!" Т.е. я ищу совета людей которые столкнулись с подобной задачей и нашли эффективные методы ее решения.

M>Ну если ты разобрался в Windows, что мешает делать так же? Например, решая конкретную задачу заглядывать чуть-чуть больше в те методы, что используются? И с каждой новой фрикцией входить глубже и глубже?
Re[9]: Как разобратся много кода
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.08.11 13:42
Оценка: -1
Здравствуйте, zorba, Вы писали:

Z>Просто делал это по мере необходимости год за годом. А сейчас мне хотелось бы "положить винт с исходниками на ночь под подушку, проснуться, и вуаля!" Т.е. я ищу совета людей которые столкнулись с подобной задачей и нашли эффективные методы ее решения.


А испанский так не хочешь выучить? Моментально ничего не бывает. Что-то из серии, как выучить что-то за 21 день?
Re: Как разобратся много кода
От: Chrome  
Дата: 04.08.11 15:40
Оценка:
Здравствуйте, zorba, Вы писали:

Z>Допустим есть огроменный проект. Как максимально эфективно разобратся в нем? Я обычно стараюсь гонять его под отладчиком, смотрю workflow, и т.д. Эффективность не слишком высока. Особенно неприятно, что "за бортом" остаюстся огромные фрагменты кода не учавствующие в основном workflow. Есть идея попробовать тупо читать файл за файлом и строить диаграммы.


Z>Как Вы подходите к такой задаче?


Был в такой ситуации.
Практика показала следующее.
Если не сделать над собой усилие и не потратить время целенаправленно изучая систему — даже спустя 1-2 года никакое просветление не приходит само. То есть научаешься ходить строго по циркулю, ни шагу в сторону от типового кода и не понимаешь, почему нужно именно так.
К счастью, в системе всего несколько процентов кода, который следует прочесть.
Его надо идентифицировать и целенаправлено изучать.
Как идентифицировать — это шаманская наука в каждом конкретном случае.
Re[4]: Как разобратся много кода
От: _Obelisk_ Россия http://www.ibm.com
Дата: 04.08.11 17:05
Оценка:
Здравствуйте, Undying, Вы писали:

U>Это начальный этап. После прохождения этого этапа начинаешь думать как следует изменить архитектуру для того, чтобы код стал проще.


Зрелый этап — начинаешь понимать, что не стоит менять архитектуру без крайней необходимости. Архитектура — не самоцель. Цель — удовлетворение кастомеров.


http://www.rsdn.org:80/File/18435/5278.png
Душа обязана трудиться! (с) Н.Заболоцкий.
Re[3]: Как разобратся много кода
От: AlexNek  
Дата: 04.08.11 19:32
Оценка: 1 (1)
Здравствуйте, zorba, Вы писали:

Z>Когда-то работал в крупной компании. Использовал именно этот метод. К своему стыду, даже через два года нифига не понимал за пределами своего маленького мирка в котором давали поработать. Не хочу повторить еще раз эту ошибку...


А стоит ли считать это ошибкой? Когда вообще НУЖНО знать как работает вся система в подробностях? И почему на работе это нужно делать самому?

Мне кажется важно оставаться на определенном уровне абстрагирования. Если допустим, я определяю архитектуру проекта, я не собираюсь подробно разбираться во всех деталях работы конкретной части. Достаточно чтобы она работала "в концепте". Детали определяет разработчик части. И разработчику части совсем не обязательно знать в деталях как работает весь проект в целом, достаточно иметь общее представление.
Зачем мне допустим, изучать как работает система печати, когда достаточно знать как ее использовать, ведь править её я не буду.
Cообщение написано в ... << RSDN@Home 1.2.0 alpha 5-AN-R5 rev. 7279>>
Re[5]: Как разобратся много кода
От: Undying Россия  
Дата: 05.08.11 05:46
Оценка:
Здравствуйте, _Obelisk_, Вы писали:

U>>Это начальный этап. После прохождения этого этапа начинаешь думать как следует изменить архитектуру для того, чтобы код стал проще.

_O_>Зрелый этап — начинаешь понимать, что не стоит менять архитектуру без крайней необходимости. Архитектура — не самоцель. Цель — удовлетворение кастомеров.

Думать над тем как можно было сделать проще надо в независимости от того собираешься завтра архитектуру менять или нет. Хотя бы для того, чтобы завтра при решение схожей задачи решить ее лучше.
Re[3]: Как разобратся много кода
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 05.08.11 09:57
Оценка:
Здравствуйте, Murom, Вы писали:

M>Имеет смысл найти архитектора/дизайнера(не гуй)/многоопытного разработчика, которые могут пояснить макроструктуру проекта. Основные идеи, концепции, логические блоки и их структуру.


M>И уже только после этого можно опускаться до диаграмм классов и исходников.

M>Иначе так и не получится выйти из мирка пары классов и их связи.

Зависит от твоего подхода к разработке. То что ты пишешь — подход типичного кодера, которому вобщем-то на все, за пределами его задчи, пофигу. Но, безусловно, он тоже работает.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.