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,
Попросив более опытного разработчика пересмотреть ваш код,
Понимание моделей и как и когда их использовать.