Как программист, насколько важно читать чужой код?

25

Я начинающий инженер-программист (сейчас второкурсник, специализируюсь в CS), и я действительно изо всех сил пытаюсь понять программы других людей. Я хочу знать, может ли этот навык (или его отсутствие) стать помехой для меня, и если да, то как я могу его развить?

Джеймс Бонд
источник
1
Чувствуете ли вы, что понимаете код, когда он вам также объясняется, или вы просто учитесь методом проб и ошибок?
JeffO
1
Почему этот тег маркирован как «стиль кодирования»? Является ли причиной проблемы с чтением кода, потому что он плохо отформатирован? Умение читать код не означает, что вам нужна способность понимать очень плохо отформатированный или запутанный код. Сначала запустите код через инструмент форматирования, если это поможет.
Брандин
Просто прочитайте статью этим утром, которая напомнила мне об этом вопросе. Почему работа над Chrome заставила меня разработать инструмент для чтения исходного кода
Эрик Кинг,
Это большой вопрос! У меня был дополнительный вопрос: если вы работаете в основном самостоятельно над собственным кодом (например, как научный программист над небольшим проектом), как вы находите хороший код для чтения? Об этом уже спрашивали: softwareengineering.stackexchange.com/questions/69892/…
Гаурав

Ответы:

49

Это важно.

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

Проблема, конечно, в том, что не все думают так, как вы. Я давным-давно учился на первом курсе Java, и нам дали задание. Вопреки тому, во что я верил (а именно в том, что ответы сошлись на трех или четырех общих решениях), у каждого в классе было уникальное решение для задания.

Отсюда следует, что вы должны читать хороший код.

Это одна из причин того, что шаблоны проектирования стали настолько популярными, и почему вы должны их изучать. Шаблоны проектирования предоставляют общий словарь для общения программистов и настраивают ваш ум на «лучшие» способы решения вычислительных задач.

Вам также следует изучить алгоритмы и структуры данных.

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

Роберт Харви
источник
7
Следствие: Начните с простого,
стараясь
4
Как правило, хороший ответ, за исключением части о шаблонах. Большинство паттернов GoF (о чем думают люди, когда вы используете этот термин) являются чрезмерно сложными, слишком мелкозернистыми, слишком сфокусированными на ОО или просто простыми анти-паттернами. И тут появляются люди, которые спрашивают, какой из этих шаблонов они должны использовать для своего решения. Пожалуйста, никогда не советуйте разработчикам тратить свое время на шаблоны.
Дэвид Арно
Для небольших задач (скажем, перевернуть числа в списке) возможные ответы должны сходиться к небольшому числу возможных решений. Хорошие задания должны требовать решения многих таких проблем и каким-то образом организовать их решение, поэтому общее число возможных решений этого задания будет расти очень быстро.
Брандин
15

Это очень важно

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

Это навык , который приобретается через практику и терпение, и во многих случаях, это навык , который многие люди не получают много возможностей для работы на до после того, как они закончат обучение и получить ту первую работу. Расслабьтесь!

(хотя, если в вашей школе есть совместная программа, это даст вам опыт до окончания работы над большими проектами, которые в основном написаны другими людьми, и это даст вам академические кредиты! Что-то посмотреть, если оно доступно)

FrustratedWithFormsDesigner
источник
7

Это основной навык , в зависимости от специфики того, где вы работаете, это может быть даже важнее, чем написание самого кода.

Как и другие навыки, практика совершенствует! Попробуйте прочитать код другого программиста, отладить его и то, что мне лично помогает, это реорганизовать или улучшить небольшие фрагменты кода и расширяться оттуда.

RMalke
источник
Кроме того, может быть полезно познакомиться с проектом с открытым исходным кодом, который вы используете, и попытаться понять, как работает внутренний код
RMalke
4

Есть отличные навыки как в чтении, так и в написании кода.

  • Одним из них является синтаксис. Зная, как выглядит объявление метода.
  • Другой намерен. Знание, почему метод существует и для чего он предназначен.

Что касается чтения против письма. Да, чтение важно.
Вот некоторые из принципов, которые помогают многим из нас:

  • Код читается 10 раз (как минимум) за каждый раз, когда он написан.
  • Кто-то другой читает код часто ... я в будущем буду читать код.
  • Я бы не стал защищать свой стиль кода более 1 года назад, с тех пор он улучшился.

ХОРОШО. Так что все отлично. Теперь о том, что вы, вероятно, испытываете.

ооо, это чертовски огромная кодовая база с десятками тысяч строк исходного кода и классами длиной в сотни строк с сумасшедшими зависимостями, и каждый раз, когда я пытаюсь следовать чему-то, я должен держать в голове 10 уровней и т. д., и т. д.
Звучит знакомо ? Да. Глубокий вдох. Расслабьтесь. Это нормально. Это то, из чего сделаны производственные системы. Люди выживают (и расцветают) в этих, казалось бы, непостижимых ситуациях, потому что:

  • существуют тесты (надеюсь), которые также помогают документировать систему.
  • пара программистов и часто это приносит результат более чем вдвое.
  • хороший программист говорит, что не понимает, пока не поймет.
  • изменения часто представляют собой одну или несколько строк кода, помогая выделить то, что тестировать
  • основы кода занимают месяцы и даже годы, чтобы ознакомиться с
Майкл Даррант
источник
И, наконец, хорошие программисты пишут значимые сообщения коммита при фиксации изменений в системах контроля версий исходного кода. (Не стесняйтесь добавлять, чтобы ответить)
Rwong
1

Большинство из этих ответов сосредоточены на важности чтения кода для самосовершенствования. Я искренне согласен с этим и поддерживаю его.

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

Необходимость читать код просто для понимания существующей кодовой базы и процессов реальна. Всегда можно задать другим разработчикам вопросы о коде, но это может занять очень много времени. Люди уходят, меняют проекты, или время просто проходит. Низкоуровневые детали исчезают из памяти, а программисты по обслуживанию применяют исправления. В какой-то момент нет единого источника правды, кроме самого кода.

Хорошая гигиена кода, руководства по стилю, обзоры кода и документация помогают, но в какой-то момент код является источником правды для того, что происходит, и единственный способ найти ответ - это пойти и получить его самостоятельно. Помимо использования в саморазвитии, способность читать код - это совершенно отдельный навык от написания.

Майкл
источник
0

Понимание чужого кода - это то, чего вы не можете избежать, так как вы, скорее всего, будете работать в команде, даже если не в команде, вы будете гуглить разные вещи и вам придется понимать пример кода. Так что да, это необходимо.

Я чувствую, что у всех возникает такое чувство, что при старте это чувство может быть немного меньше, чем у других, вы понимаете свой код лучше, чем код других, так как вы тратите гораздо больше времени на собственный код, чем на чужой код, поскольку вы не только читаете, но пишете и структурируете это в вашем уме. Если вы начнете проводить больше времени с чужим кодом и сначала попытаетесь увидеть, какая структура / поток используется, это, безусловно, поможет вам лучше понять код.

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

Надеюсь, что это поможет, не разочаровывайтесь, это совершенно нормально. Потратьте больше времени с кодом, и вы в конечном итоге получите его.

techExplorer
источник
0

Ну, мне только что дали проект с около 100 000 строк кода, написанного командой из другой страны, и я должен внести некоторые очень существенные изменения в копию их кода в течение следующих месяцев, оставляя столько кода в общем, насколько это возможно.

Вы говорите мне, как я могу выполнять свою работу без возможности быстро читать чужой код. Если вы не можете читать чужой код, вы полностью застряли.

gnasher729
источник