Як ви читаєте код інших? [зачинено]


23

Майже кожен досвідчений програміст каже, що дуже корисно читати код інших професіоналів. Зазвичай вони консультуються з відкритим кодом.

Чи читаєте ви це чи ні? Якщо так, то як часто і яка процедура читання коду? Також новачкам трохи важко впоратися з SVN - згустками файлів. Яке рішення?

Відповіді:


25

Чи читаєте ви це чи ні?

Так.

Якщо так, то як часто

Щодня. Постійно. Я працюю з численними проектами з відкритим кодом (в основному пов'язані з Python) і повинен прочитати джерело, оскільки це найбільш точна документація.

і яка процедура читання коду?

Гм. Відкрийте і прочитайте.

Також новачкам трохи важко впоратися зі SVN - згустками файлів. Яке рішення?

Відкрийте і прочитайте. Потім читайте більше.

Це не легко. Ніщо не спрощує. Королівської дороги до розуміння немає. Це вимагає роботи.


Дякую за відповідь Який спосіб визначити, чи добре код чи ні? Тому що не кожен проект з відкритим кодом виконується справжніми професіоналами?
Сергій

1
@Sergey: "Який спосіб визначити, чи хороший код чи ні?" Прочитайте код. "Добре" є суб'єктивним. Якщо це корисно, і ви можете це зрозуміти, це добре. Якщо це заплутано, або насправді не працює, це не добре. Є багато, багато атрибутів якості: ремонтопридатний, безпечний, пристосований, високоефективний тощо, і т. Д. І т.д.
S.Lott

7
Я не міг протистояти: osnews.com/images/comics/wtfm.jpg
Gary Willoughby

@Sergey - навіть якщо це найбільший код, який коли-небудь написаний, якщо ви не можете його прочитати (через рівень досвіду), він не принесе вам користі. Хоча ви можете вважати, що це не найкраще використовувати свій час, ви зіткнетесь із погано написаним кодом, тож ви зможете навчитися різниці. Як сказав С.Лотт, це вимагає роботи та часу.
JeffO

Хоча я захоплююся тими, хто може сидіти і читати код так, як читають роман, я часом вважаю це трохи нудним. Я зрозумів, що для мене «читання коду» насправді не описує діяльності, яку я здійснюю - краща фраза для того, що я роблю, - «розуміння коду», і це включає читання документації, перехід її через налагоджувач і навіть читання тестів. Я написав довгий пост про читання коду - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

До головоломки у вас є кілька шарів. Спочатку почніть з високого рівня, так би мовити, з пташиного польоту. Після того, як ви перевірите проект, у структурі каталогу з’явиться купа файлів. Це те саме, чи ви дивитесь на відкритий чи закритий джерело (вихідний код все-таки є вихідним кодом). Тож почніть з цього:

  • Як організовані вихідні файли? Чи можете ви сказати за назвою файлу чи назвою каталогу, що ви можете знайти всередині? Нам, програмістам, подобається передбачувані імена та логічна структура. Ви повинні мати можливість скласти приблизне уявлення про те, де слід шукати конкретну проблему.
  • Яка природа програми, чи це веб-інтерфейс, командний рядок, графічний інтерфейс? Причина, що це важливо, полягає в тому, що ви хочете знати, з чого почати відстеження виконання. Якщо це веб-версія, ви хочете почати з того, звідки програма починає обробляти запит. Якщо він побудований на каркасі, тим краще. Після того, як ви дізнаєтесь про рамки, ви можете зрозуміти код, який там є. Інакше ви почнете з відповідної точки входу для командного рядка / додатку GUI.
  • Візьміть аркуш паперу та олівець, або якщо вам пощастило, дошку та фломастери. Дайте назви компонентів (або використовуйте ті, що вказані в коді) та намалюйте лінії між полями зі стрілками, щоб ви могли бачити, як обробляються речі. Крім того, якщо ви дивитесь на алгоритм, замальовуйте структури даних таким чином, щоб ви могли зрозуміти та замальовувати, як цим маніпулюють.

Це вимагає практики, але це, безумовно, можливо. Чим більше ви знаєте про бібліотеки та рамки, якими користується додаток, тим більше ви знаєте, як потрібно впорядкувати код і де шукати відповіді на конкретні запитання. Деякий код дотримуватися трохи складніше, особливо якщо він досить непрямий. Ось чому вам потрібен олівець і папір. Зрештою в голові згасає лампочка, і ти її отримуєш. Ось якщо читати решту коду має набагато більше сенсу.


Одним з аспектів читання коду є абстракція. Такі речі, як з'ясування способів організації джерел, безумовно, абстрагують процес зчитування коду.
Девід Гао

5

Це не читання, як ти читаєш роман, а більше, як ти читаєш довідник. Хороший спосіб - вибрати нещодавно виправлену помилку з повідомлення в чеку, зробіть різницю, що змінилося, і прочитайте відповідні частини, поки не зрозумієте і проблему, і рішення. Добре розрекламовані вразливості безпеки - це цікаві помилки, оскільки їх можна обговорити на форумах. Потім виберіть одну з помилок "низько висячих фруктів" із трекера помилок і прочитайте, поки не зрозумієте, як її виправити самостійно. Більшість професіоналів з читання коду роблять випадково під час виправлення помилок або додавання функцій.

Зазвичай найкращі зразки коду ледь помітні. Ви моментально їх зрозумієте, не читаючи їх більше одного разу. Вони виглядають так, що писати було надзвичайно просто, навіть незважаючи на те, що хороший код зазвичай проходить через багато проектів. Це створює парадоксальне відчуття, що, звичайно, даний код - це очевидний спосіб зробити це, навіть якщо це не перший спосіб, який ви придумали.

Коли ви зіткнетеся з таким кодом, постарайтеся зрозуміти розуміння, яке було написане ним, та принципи проектування, тому, коли ви опинитесь у подібній ситуації в майбутньому, ви можете сподіватися застосувати ті самі принципи.


4

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


1
+1: Я теж. // Я колись мав начальника, який помітив рефакторинг і звинуватив мене у витраченні часу. Він не міг зрозуміти. Який дурень.
Джим Г.

2

Як важко поводитися з "купою файлів"? Це не відрізняється від написання власного коду, за винятком того, що ви не маєте попередніх знань про його організацію, якщо це не підтверджено документально.

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

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


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

0

Найкраще, на що ви можете сподіватися, читаючи код іншого проекту, будь то API чи фрагмент програмного забезпечення, - це те, що змінні, функції та назви макросів не скорочуються неоднозначно і не називаються, щоб ви могли з'ясувати їх наміри.

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

Я зараз намагаюся побачити, як Луа виконує щось своє чарівне, але я переходжу до точки, де багато ідентифікаторів названі неясно і досить скорочено до того, що я не можу зрозуміти, яка лінія намагається робити те, що я знаю, треба робити в якийсь момент коду функції ... Часті змінні однієї літери та досить скорочені імена макро / функцій роблять мою голову.


0

Подивившись на "По-перше, почніть з високого рівня, з виду пташиного польоту", як @Berin Loritsch засумував, ви можете шукати одиничні тести та / або інтеграції, якщо такі є.

Експерименти цікаво подивитися, як (api-) деталі працюють.

Інтеграціятесту зазвичай дає хороший огляд бізнес-процесів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.