1. Уроки письма? Не зовсім.
Написання вихідного коду досить відрізняється від написання книги.
Хоча обидва переслідують однакові цілі: будучи максимально однозначними і легко зрозумітими, вони роблять це зовсім по-різному, і речі, які повинен вивчити автор, не є такими ж, як речі, які повинен вивчити розробник програмного забезпечення.
Приклад 1: фігури мови
Цифри мови є цінними при написанні романів, віршів тощо, оскільки вони підвищують виразність написаного.
Який останній раз ви бачили оксиморон або літоту у вихідному коді ? Чи допомогло б це мати, або це було б надзвичайно шкідливим для будь-якого розробника, якому доведеться підтримувати такий вихідний код пізніше?
Приклад 2: словниковий запас
Багатий словниковий запас високо оцінюється в літературі. Лексика Вільяма Шекспіра, наприклад, становить двадцять тисяч до двадцяти п’яти тисяч слів. Багатій лексиці робить цікавіше читати роман чи вірш.
Коли ви пишете вихідний код, ви очікуєте, що його прочитають люди, які не дуже добре розмовляють англійською . Показати, наскільки добре ви знаєте англійську, було б надзвичайно шкідливим для вашого коду. Якщо ви знаєте вигадливе слово, яке означає саме те, що вам потрібно, але ви знаєте, що багато людей не знають значення цього слова, слід скоріше знайти менш виразний синонім або набір слів, які пояснюють значення. Словниковий запас з кількох тисяч слів часто значною мірою достатній для даного проекту.
Зверніть увагу на важливий аспект: хоча Google Translate може бути корисною для мови, яка не є носієм мови, у будь-якого перекладача є дві проблеми:
Пара мов не обов'язково має відповідати 1: 1 між словами. Деякі слова не мають жодного перекладу на інші мови, або декілька слів можуть перекласти на одне слово іноземною мовою. Наприклад, російською мовою є величезна кількість слів, націлених на конкретні стани снігу та холодної погоди, і перекласти їх французькою чи іспанською мовами, як правило, неможливо, не втрачаючи своєї специфіки.
Слово іноді має кілька значень, а значення виводиться з контексту. Google Translate, незважаючи на високу якість, зазвичай не в змозі вказати значення для будь-яких, але найпростіших ситуацій.
Приклад 3: вирази
Вислови роблять і прозу багатшою. Автор очікує, що читач матиме певну кількість загальної культури, і використовує цю можливість, щоб зробити текст більш виразним.
Як і в попередньому прикладі, такі вирази можуть бути дуже проблематичними, коли їх читають люди, які не є носіями мови. Але якщо загальну лексику зазвичай можна перекласти, вирази набагато проблемніші.
Наприклад, англійська мова не є моєю першою мовою, і я щодня зустрічаю вирази, в тому числі тут, на StackExchange, які я не знаю. Я намагаюся відгадати їх значення, а іноді маю рацію. Але іноді я помиляюся, і гугл цих виразів не допомагає.
Користувач у своєму коментарі нагадав мені приклад, який змусив мене довго страждати, коли я щойно розпочав програмування: голка та сіна PHP . Мені не було відомо про відповідну фігуру мови, тому щоразу, коли я читав документацію, мені було цікаво, що це таке. Зайве говорити, що C # sequence.Contains(element)
або відмінний Python element in sequence
- це набагато краща альтернатива. Ну, принаймні, розробники, які не знають івриту, теж повинні були страждати від PHP , але це вже інша історія.
Приклад 4: культурні посилання
Культурна література. У літературі заманливо включити елементи даної культури, і це теж робить книгу багатшою, а часом і цікавішою для читання.
Однак код адресований розробникам з усього світу. Тому те, що є очевидним посиланням на італійського розробника, може бути не таким очевидним для російського, а те, що знає кожен індійський хлопчик чи дівчинка, не обов'язково може знати американський програміст.
Той самий користувач, який розповідав про голку та сіно, подав чудовий приклад такої культурної орієнтації: Грааль. Хто не знає, що таке Грааль? Ну, я маю на увазі, це "Graal" по-французьки, "Grial" по-іспанськи і ... "Kutsal Kâse" по-турецьки, але все ж. Однак наскільки американські чи європейські розробники знають середньовічну історію Китаю чи Індії? Чому хтось припускає, що кожен китайський та індійський програміст повинен знати посилання на Святий Грааль?
2. Уроки написання виразного вихідного коду? Звичайно.
Будь-який розробник повинен навчитися писати виразний вихідний код.
Будь-який розробник повинен пояснити, чому коментар у:
int j = i + 1; // Creating i and adding 1 to it.
це погано, навіть убік того, що це абсолютно неправильно.
Будь-який розробник повинен мати можливість зрозуміти основний рефакторинг і як це допомагає зробити вихідний код більш виразним.
Будь-який розробник повинен пам’ятати, що 20% часу витрачається на розробку коду, а 80% часу - на його підтримку. Для деяких проектів це більше як 5% - 95%.
тощо.
По суті, програмування близьке до технічної документації. Чи потрібно людині, яка пише аркуш на болт, брати уроки письма? Не зовсім. Те саме стосується розробників. Будь-хто повинен писати, не роблячи орфографічних помилок у кожному слові, і будь-хто повинен мати можливість донести її ідеї досить чітко. Окрім цього, я не впевнений, як уроки письма були б кориснішими, ніж, скажімо, курс інформатики, інформатики та іншої безпеки.
Виразність вихідного коду можна дізнатися іншими способами. superM згадав про одну з них у своїй відповіді : читання хорошого коду. Я можу згадати кілька інших:
Читання книг, таких як Beautiful Code або Code Complete,
Попросивши досвідченішого розробника переглянути ваш код,
Розуміння шаблонів, як і коли їх використовувати.