Прием в чужой код

Да, я имею. Я записал программу количества строки для двоичного файла (снабженный префиксом длину, а не разграниченный) выходной файл BCP однажды и закончил тем, что имел необходимость восстановить его в C, потому что Python каждый был слишком медленным. Эта программа была довольно маленькой (только потребовалось несколько дней для переписывания его в C), таким образом, я не потрудился пытаться создать гибридное приложение (связующее звено Python с центральными стандартными программами, записанными в C), но это также будет жизнеспособным маршрутом.

объемное приложение А с производительностью критические биты могут быть записаны в комбинации C и высокоуровневого языка. Можно записать критические по отношению к производительности части в C с интерфейсом к Python для остальной части системы. БОЛЬШОЙ ГЛОТОК , Пирекс или Повышение. Python (если Вы используете C++) все обеспечивают хорошие механизмы, чтобы сделать инфраструктуру для Вашего интерфейса Python. API C для python более сложен, чем это для Tcl или Lua, но не неосуществим создать вручную. Для примера изготовленного вручную API Python/C проверьте cx_Oracle.

Этот подход использовался на множестве успешных приложений, возвращающихся до 1970-х (что я знаю). Mozilla был существенно записан в JavaScript вокруг базового механизма, записанного в C. Несколько пакеты CAD , Прокладочный лист (технический документ, публикующий систему) и конечно EMACS, существенно записаны в LISP с центральным C, ассемблером или другим ядром. Довольно много коммерческого применения и приложений с открытым исходным кодом (например, Chandler или Передняя Арена SunGard ) используют встроенные интерпретаторы Python и реализуют существенные части приложения в Python.

РЕДАКТИРОВАНИЕ: В rsponse к комментарию голландского Masters, сохраняя кого-то с C или навыками программирования на C++ в команде для проекта Python дает Вам опцию записи части приложения для скорости. Области, где можно ожидать получать значительное увеличение производительности, - то, где приложение делает что-то очень повторяющееся по большой структуре данных или большому объему данных. В случае счетчика строки выше его должен был вдохнуть серию файлов в общей сложности несколько гигабайтов и пройти процесс, где это считало переменный префикс длины и использовало это для определения длины поля данных. Большинство полей было коротко (всего несколько байтов длиной). Это было несколько разрядно-извилистым и очень низким уровнем и повторяющийся, который сделал его естественным пригодным для C.

Многие библиотеки Python такой как [1 114] numpy, cElementTree или cStringIO использует оптимизированное ядро C с API Python, который упрощает работу с данными в агрегате. Например, numpy имеет матричные структуры данных и операции, записанные в C, которые делают всю тяжелую работу и API Python, который предоставляет услуги на совокупном уровне.

5
задан John Kraft 22 October 2009 в 13:51
поделиться

17 ответов

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

5
ответ дан 18 December 2019 в 05:23
поделиться

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

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

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

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

0
ответ дан 18 December 2019 в 05:23
поделиться

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

0
ответ дан 18 December 2019 в 05:23
поделиться

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

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

0
ответ дан 18 December 2019 в 05:23
поделиться

В первую очередь я начинаю с базы данных.

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

1
ответ дан 18 December 2019 в 05:23
поделиться

Все, что говорили все, верно для изучения того, что сделал кодировщик.

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

1
ответ дан 18 December 2019 в 05:23
поделиться

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

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

1
ответ дан 18 December 2019 в 05:23
поделиться

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

1
ответ дан 18 December 2019 в 05:23
поделиться

Нет серебряной пули в том, как быстро понять чужой код. Особенно, если там полно хаков и нет документации.

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

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

2
ответ дан 18 December 2019 в 05:23
поделиться

Настройте ведение журнала, чтобы наблюдать, в какой последовательности что-то происходит.

Прочтите здесь: Нанят в качестве разработчика для поддержки и обновления текущей базы кода, без документации!

10
ответ дан 18 December 2019 в 05:23
поделиться

Ведение журнала позволяет увидеть, что делает код.

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

Иногда я считаю полезным попытаться как-то понять стиль кода программиста, это помогает мне понять, как он мог думать о проблеме и решать ее.

1
ответ дан 18 December 2019 в 05:23
поделиться

Документация? Чтение самого кода без запуска отладчика?

В остальном вы делаете то же, что и я.

4
ответ дан 18 December 2019 в 05:23
поделиться

Исправьте в нем простую проблему.

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

5
ответ дан 18 December 2019 в 05:23
поделиться

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

6
ответ дан 18 December 2019 в 05:23
поделиться

По возможности поговорите с пользователями кода другого человека (либо с конечными пользователями, либо с другими разработчиками, которым приходилось работать с его кодом). Это даст вам представление о качестве кода других людей - был ли он выпущен с небольшим количеством ошибок или потребовалось 6 месяцев исправлений, чтобы исправить это? Был ли разработчик осторожен, создавая красиво отполированное приложение, или это был беспорядок? Это должно дать вам некоторое представление о том, нужно ли вам просто немного настроить код или начать заменять большие его фрагменты.

1
ответ дан 18 December 2019 в 05:23
поделиться

One thing that helps me learn systems faster is writing the documentation myself.

  • I get a overview
  • I will see many bugs/bad design decisions. Which makes it easier to order and prio them. (instead of picking a irrelevant bug and solving it, I will fix those that really matters)
  • I later on have an documentation.
  • Documentation will make it easier to justify refactoring/rewrite to the suit's
0
ответ дан 18 December 2019 в 05:23
поделиться

Большую часть прошлого года я провел, работая над кодом, который я унаследовал от кого-то еще. Документации не было, и большая часть того, что должна была делать система, не было записано нигде, а в голове клиента. Ключевым моментом для меня было задать как можно больше вопросов и собрать информацию из всех доступных источников. Я бы порекомендовал составлять вашу собственную документацию по ходу дела.

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

Еще одна полезная вещь - это некий документ стандартов, прежде чем вы начнете. Документация по стандартам поможет вам расшифровать код или привести код в соответствие со спецификацией и упростить понимание.

0
ответ дан 18 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: