Один з простих способів поліпшити свої навички програмування — читати чужий код

Примітка: спочатку ця стаття була написана для сайту Fuel Your Coding back у травні 2010 року. На жаль, цей сайт зараз не працює, тому я публікую статтю тут, щоб зберегти її для нащадків. Я збирався оновити її, враховуючи останні віяння, але вирішив залишити так, як вона була написана. Ті частини, що застаріли, можуть здатися трохи смішними, але да ладно. Отримуйте задоволення…

Найбільш очевидним способом підвищити якість свого програмування є писати більше програм. Кожен знає це. Однак інший спосіб, який, я впевнений, поліпшить ваше програмування, — абсолютно протилежний. Викладу це так ясно, як зможу.

Якщо ви бажаєте різко підняти ваше вміння програмувати, необхідно… читати код, написаний іншими програмістами.

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

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

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

Читайте програми, мають до вас відношення
Відмінним місцем для старту є якісь плагіни або бібліотеки, які ви вже використовуєте.

• Плагін WordPress, який вам дійсно подобається;
• Ruby gem, який ви вважаєте корисним;
• Плагін jQuery, до якого ви продовжуєте повертатися.

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

Читайте програми, впечатлившие вас
Пам'ятаю, що, коли я перший раз переглядав сервіс створення презентацій 280 Slides, я подумав: «Так! Круто!». Я швидко з'ясував, що програма, що управляє цим сайтом, є проектом Cappuccino з відкритим кодом. Це знання увійшло глибоко в мою свідомість, і коли я якось натрапив на ще одне вражаюче додаток, яке працювало на Cappuccino, я вже знав, що на цьому проекті я зможу багато чому навчитися. Що справило сильне враження на вас останнім часом? Ця програма має відкритий вихідний код? Якщо так, то вона — відмінний вибір для читання: код, швидше за все, вас вразить так само, як і сам додаток.

Читайте програми, написані тими, кого ви поважаєте
image
Програмісти, гідні поваги

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

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

Читайте програми, які ви зможете, дійсно, досить глибоко зрозуміти
Якщо ви схильні ризикувати, то можете розглянути занурення у великий проект, як, наприклад, Ruby на Rails, Drupal або jQuery. Але я запропонував би вам не використовувати поки такі проекти, якщо ви, звичайно, не є досвідченим читачем програм.

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

читати
Тепер, коли код для читання обраний, як найкращим способом читати його? Я прочитав на сьогодні безліч програм і можу запропонувати кілька способів максимізації вашого ККД.

Вивчіть загальну картину
image
Структура каталогу twitter gem

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

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

Насамперед, зафіксуйте для себе структуру файлу. Цей крок легше виконати за допомогою редактора, який має вигляд ієрархії папок, як, наприклад, TextMate. Тут, як приклад, показаний прекрасний вид Twitter Ruby gem.

Мета цього кроку полягає просто в ознайомленні з джерелом. Розберіться, які файли включають в себе / викликають / завантажують інші файли, де знаходиться основна частина коду, які простору імен використовуються (якщо такі є) та інше такого роду. Отримавши загальне уявлення, можна занурюватися в деталі.

Документуйте ваші результати
Читання коду не повинно бути якимось пасивним дією. Рекомендую додавати коментарі по мірі просування, документувати ваші припущення і ваші висновки, коли ви почнете розуміти хід виконання програми. Коли ви почнете вперше, ваші коментарі будуть виглядати, певно, так:

# Вважаю, що виклик цієї функції відбувається після "initialize"
# Що ж робить ця задача?
# Впевнений, ця змінна втрачає свою область дії після рядка 17

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

Використовуй тести, Люк
(Прим. перекладача: автор згадав «Використовуй силу, Люк» з «Зоряних воєн»)

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

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

Змінити код, скомпілюйте
Хто сказав, що читання коду має бути пасивним? Ви почнете, дійсно, розуміти код, тільки після того, як зламаєте все і знову зберете разом. Згадайте пройдені тести? Зробіть так, щоб вони завершилися невдало, додайте дещо або спробуйте змінити реалізацію так, щоб вони пройшли нормально. Спробуйте додати яку-небудь невелику «фічу», яка вам здається «крутий», або налаштуйте реєстрацію проекту в цілому так, щоб можна було роздрукувати висновок на різних етапах виконання програми. Це читання? Абсолютно, але такий підхід є більше власним пригодою, ніж читанням детективного роману. І це — саме те, що треба!

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

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

Де почати
Єдиним, самим важливим джерелом для читання коду є для мене GitHub. Цей сайт дозволяє так легко знайти нові проекти і справді великих програмістів, що ви дієте собі на шкоду, якщо не використовуєте його. Я пропоную почати на GitHub і читати код прямо на сайті, поки не знайдете проект, з якого, на вашу думку, ви зможете витягти якісь уроки. Потім склонируйте його і читайте!

А ви використовуєте читання коду як навчальний інструмент? Які проекти ви порекомендували б колегам? Прочитали якусь хорошу програму останнім часом?
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.