Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 20 из 91

Тема: Как разбираться в чужом коде?

  1. #1
    Активный участник
    Регистрация
    26.02.2011
    Сообщений
    9,243

    Как разбираться в чужом коде?

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

    Но зачастую приходится разбираться в уже написанном коде. Иногда даже намеренно(лично встречал таких людей) написанного так чтобы другие в нем не разобрались?
    Как эффективнее и быстрее всего разбиратся в чужом коде?
    Как разбираетесь вы?
    Какие интересные приемы, вы знаете?

    Я вот например запускаю пример, и отладчиком иду по каждой строчке, выписывая на бумажку, примерно схему. С разными связями.

  2. #2
    Read-Only
    Регистрация
    05.06.2010
    Сообщений
    772
    Я научился читать код только благодаря тому что пришлось часто разбираться в чужом коде, в итоге, с опытом, выучил почти все конструкции и способы, особенно те которые используют чаще всего. Причем, так как я работал над некоторыми проектами в течении 3-4 лет, причем с перерывами, получилось так что во многих проектах я и на свой код смотрю как на какой то чужой. Так как просто многое забыл уже там - каким образом что там работает. И восновном читаю код без использования отладчки и построения каких то схем. Зачастую я смотрю в чужой код и просто понимаю что хотел сделать тот кто писал код, потому что то ли где то я уже сам подобное писал, то ли где то я уже такое видел. Ну вообщем, как то так. Я считаю что это приходит с опытом и сложно придумать какие то методики как это выработать, просто много работать с чужим кодом и программировать разные вещи.

  3. #3
    Активный участник Аватар для Dargi
    Регистрация
    17.05.2010
    Сообщений
    12,359
    врятли есть какойто общий подход. Как ты сам сказал каждый может переделать код как угодно.
    Единственный способ разобраться это дебагать и оставлять коментарии по ходу дела если понял что происходит.

  4. #4
    Активный участник Аватар для NoTimeToWait
    Регистрация
    08.11.2010
    Сообщений
    1,260
    Собственно в любом коде существуют некоторые стереотипы\шаблоны + недоработки конкретного разработчика + личный почерк.
    Т.е. формально каждый программист безсознательно обфусцирует общепринятые нормы кода последними двумя перечисленными факторами.
    Соответственно анализ чужого кода заключается в разделении этих трех составляющих.

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

    К личному почерку привыкаешь спустя несколько часов прочитанного кода, и уже не составляет проблемы в чтении кода.

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

    А вообще, могу посоветовать пару часиков в день штудировать опенсорсные проекты на гитхабе. Быстро привыкаешь к разным школам кода, манерам и техникам.
    Последний раз редактировалось NoTimeToWait; 15.10.2014 в 14:21.

  5. #5
    Активный участник Аватар для EatsFullLemons
    Регистрация
    17.05.2014
    Сообщений
    715
    просто читаю, как читал бы книгу. смотреть что на что ссылается, да и все вроде. Не так сложно как многие говорят

  6. #6
    Активный участник Аватар для NoTimeToWait
    Регистрация
    08.11.2010
    Сообщений
    1,260
    Цитата Сообщение от EatsFullLemons Посмотреть сообщение
    просто читаю, как читал бы книгу. смотреть что на что ссылается, да и все вроде. Не так сложно как многие говорят
    Зависит от "древности" кода. Есть проекты, которые тянут 10 лет, а то и больше. Там можно найти решения, которые не актуальны более 5-7 лет и вводят в ступор любого с меньшим стажем.
    Ну а с древностью также нарастает избыточность, которая представляет собой код, который ничего не делает.
    Это как читать книгу на старорусском языке, в котором, к тому, текст писало человек 100, при этом только половина из них понимала, что пишет. Как книгу почитать не получится

  7. #7
    Активный участник Аватар для botka4aet
    Регистрация
    27.10.2012
    Сообщений
    7,624
    Цитата Сообщение от Dargi Посмотреть сообщение
    врятли есть какойто общий подход. Как ты сам сказал каждый может переделать код как угодно.
    Единственный способ разобраться это дебагать и оставлять коментарии по ходу дела если понял что происходит.
    Только так
    Цитата Сообщение от Cuddlez Посмотреть сообщение
    Цитата Сообщение от botka4aet Посмотреть сообщение
    Цитата Сообщение от Cuddlez Посмотреть сообщение
    А кто это?
    Тот, кто умнее тебя
    Я из будущего? :O

  8. #8
    Активный участник Аватар для KoptecW
    Регистрация
    10.05.2011
    Сообщений
    1,234
    Я по специфике своей работы сопровождаю проект (устранение багов, энхансмент и прочая фигня).
    Проект относительно большой и старый. Поэтому многие куски написаны разными людьми и в разное время. Весь его изучить практически не возможно (много времени уйдет, да и нет необходимости). В общем приходится быстро разбираться в отдельных кусках кода, дабы найти проблему и решить.

    Самое основное - это конечно опыт, но для себя выработал небольшой алгоритм, так наверное проще:

    1) Понять на уровне восприятия, что должен делать кусок кода (обычно с помощью документации или описания бага).
    2) Начать разбираться с того конца этого куска, где он меньше всего соприкасается с другими кусками.
    (Чаще всего это для меня или вывод информации в логи, или непосредственная отправка команды на устройство).
    3) Разматывать постепенно иерархию вызовов "вверх", пытаясь понять уже почему именно так работает.
    4) После построения почти полной картины, начать разбираться с фрагментами кода, которые наименее понятны (уже на уровне синтаксиса).

    Может так делаю только я, но мне удобно.
    Последний раз редактировалось KoptecW; 15.10.2014 в 14:33.

  9. #9
    Активный участник Аватар для il maestro
    Регистрация
    18.01.2012
    Сообщений
    5,132
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Я вот например запускаю пример, и отладчиком иду по каждой строчке, выписывая на бумажку, примерно схему. С разными связями.
    Ты достиг в этом совершенства
    Либо так (хотя можно и без бумажки), либо когда много опыта, то многое становится понятно и без отладки. Чем лучше понимаешь суть работы приложения и чем чаще в нем копался, тем проще прочитать. Методов имхо особо нет: садишься и читаешь и либо понимаешь, либо нет)

    Цитата Сообщение от pror0ck Посмотреть сообщение
    Причем, так как я работал над некоторыми проектами в течении 3-4 лет, причем с перерывами, получилось так что во многих проектах я и на свой код смотрю как на какой то чужой.
    такая же фигня)

    - - - Добавлено - - -

    Цитата Сообщение от KoptecW Посмотреть сообщение
    2) Начать разбираться с того конца этого куска, где он меньше всего соприкасается с другими кусками.
    (Чаще всего это для меня или вывод информации в логи, или непосредственная отправка команды на устройство).
    3) Разматывать постепенно иерархию вызовов "вверх", пытаясь понять уже почему именно так работает.
    Кстати да, примерно так же делаю. Смотрю значения переменных "снизу вверх", каким образом они формируются.
    Последний раз редактировалось Мастер; 15.10.2014 в 14:38.

  10. #10
    забанен навсегда
    Регистрация
    25.11.2013
    Сообщений
    4,143
    1. Покупаешь (а не воруешь) и читаешь книжку Michael Feathers "Working Effectively with Legacy Code".
    2. Понимаешь, что любой код без юнит-тестов является legacy code.
    3. Учишься писать юнит-тесты.
    4. Пишешь их к чужому коду и, тем самым, одновременно и понимаешь, и усовершенствуешь его.

    В целом, использование отладчика в программировании - плохая практика, до которой лучше не доходить.

  11. #11
    Активный участник Аватар для Megaherz
    Регистрация
    06.01.2013
    Адрес
    Симферополь
    Сообщений
    303
    как уже выше сказали, спустя N-ое время на свой код начинаешь смотреть как на чужой особенно если пишешь несколько проектов одновременно. всегда подписываю код комментариями, хотя бы 3-мя словами, в идеале составляю схему и обьяснения в тхт. ну и в софтверных компаниях, почти везде, уже давно есть правило - обязательное комментирование, более менее крупных программ

  12. #12
    Активный участник
    Регистрация
    14.03.2011
    Сообщений
    850
    полбутылки хорошего горячительного напитка. Уже 5 лет использую. Всегда работает. Главное нащупать свой собственный пик Балмера.

  13. #13
    Активный участник
    Регистрация
    26.02.2011
    Сообщений
    9,243
    Megaherz, Ну есть другая задача. Как писать свой код так чтобы он потом не показался чужим.
    Мой код - это мой код. Там мои коментарии, в первую очередь, а я люблю все комментировать дотошно. То там просто читаешь комментарии и вспоминаешь все.

  14. #14
    Активный участник
    Регистрация
    17.05.2010
    Сообщений
    2,508
    только реальный опыт, книжки и чужие советы могут помочь, но не научить.

  15. #15
    Активный участник Аватар для Winterhearted
    Регистрация
    26.02.2011
    Сообщений
    4,786
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Как разбираться в чужом коде?
    знания и опыт
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Ну есть другая задача. Как писать свой код так чтобы он потом не показался чужим.
    опыт и знания
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Мой код - это мой код. Там мои коментарии, в первую очередь, а я люблю все комментировать дотошно. То там просто читаешь комментарии и вспоминаешь все.
    Сразу скажу, что это плохой код. Хороший код читаем без комментариев . Почти всегда комментарий в каком-либо месте сигнализирует о проблеме в коде или дизайне, решив которую комментарий можно будет удалить за ненадобностью. Есть, конечно, исключения вроде JavaDoc либо уж совсем необходимых комментариев, но на то они и исключения чтобы подтверждать правило, тем более даже по поводу необходимости в таких комментариях можно задать много неудобных вопросов. Код переполненный комментариями является либо учебным либо написанным начинающим программистом.

  16. #16
    Активный участник
    Регистрация
    17.05.2010
    Сообщений
    2,508
    Цитата Сообщение от Winterhearted Посмотреть сообщение
    Сразу скажу, что это плохой код. Хороший код читаем без комментариев . Почти всегда комментарий в каком-либо месте сигнализирует о проблеме в коде или дизайне, решив которую комментарий можно будет удалить за ненадобностью. Есть, конечно, исключения вроде JavaDoc либо уж совсем необходимых комментариев, но на то они и исключения чтобы подтверждать правило, тем более даже по поводу необходимости в таких комментариях можно задать много неудобных вопросов. Код переполненный комментариями является либо учебным либо написанным начинающим программистом.
    Вместо комментов полезный лог.дебаг, тогда и отладчиком можно реже пользоваться

  17. #17
    Активный участник Аватар для Winterhearted
    Регистрация
    26.02.2011
    Сообщений
    4,786
    Цитата Сообщение от DieMust Посмотреть сообщение
    тогда и отладчиком можно реже пользоваться
    "I don't like debuggers. Never have, probably never will." — Linus Torvalds

  18. #18
    Активный участник
    Регистрация
    26.02.2011
    Сообщений
    9,243
    Цитата Сообщение от Winterhearted Посмотреть сообщение
    опыт и знания
    Об это и тема. Об обмене опытом и знаниями.

    Цитата Сообщение от Winterhearted Посмотреть сообщение
    Сразу скажу, что это плохой код.
    Я не согласен.

  19. #19
    Активный участник Аватар для Winterhearted
    Регистрация
    26.02.2011
    Сообщений
    4,786
    Цитата Сообщение от Спалланцани Посмотреть сообщение
    Я не согласен.
    Сколько лет программистом работаешь?

  20. #20
    Активный участник
    Регистрация
    26.02.2011
    Сообщений
    9,243
    Winterhearted, с 87 года. Тот человек который от меня это требовал.

Страница 1 из 5 123 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Проблема смены пола: ощущение себя в чужом теле
    от Миша Ня в разделе Общий форум
    Ответов: 60
    Последнее сообщение: 26.10.2015, 13:27
  2. Баг(ошибка в коде), не работает таймер
    от Slow_GiiM в разделе Сервисы
    Ответов: 14
    Последнее сообщение: 09.08.2014, 00:25

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •