Следует ли избегать определенных программных конструкций (и других) ради обслуживания?
Я работаю над неличным проектом, поэтому можно с уверенностью сказать, что программист по обслуживанию не будет мной, иначе мне не пришлось бы задавать этот вопрос.
Теперь есть некоторые конструкции (делегаты, лямбда-выражения), которые я хотел бы попробовать в своем коде, не для того, чтобы преднамеренно усложнить чтение кода, а потому, что они поддаются ситуации (и меньше кода для ввода), и практиковаться в их использовании, так как я новичок в языке.
Тем не менее, я не уверен, что программист обслуживания будет знать каждую конструкцию, так как многие из нас не пришли из aC# background, и я не уверен, что он так же увлечен программированием, как я, или просто относиться к нему как к обычному дневная работа. Итак, мои вопросы:
Следует ли избегать определенных программных конструкций для улучшения сопровождения?
Если ответ на поставленный выше вопрос - "да", то следует ли избегать использования подмножества конструкций?
Обязан ли программист по техническому обслуживанию полностью выучить язык?
4 ответа
Я против кодирования наименьшего общего знаменателя. Мы профессионалы, и от нас ожидают, что мы научимся тому, чего не знаем.
С другой стороны, я также против кодирования славы. Используйте простейшие конструкции, которые могут выполнить работу - отладка кода вдвое сложнее, чем его написание, поэтому лучше писать код только вдвое умнее, чем вы способны!
Я думаю, что общее правило - убедиться, что ваш код читабелен с большим количеством комментариев, особенно в тех местах, где вы делаете что-то непростое.
Избегание определенных конструкций, таких как делегаты и лямбда-выражения, не должно быть подходящим способом, если их правильно и разумно использовать, языковые функции, подобные этим, могут значительно снизить сложность вашего кода и сделать их более краткими и выразительными. В конце концов, это красота LINQ, не так ли?;-)
Я думаю, вам следует сосредоточиться на том, чтобы выполнить свою часть работы как можно лучше, независимо от того, обладают ли другие программисты всеми необходимыми знаниями, чтобы понять, что ваш код находится вне вашего контроля. Если тот программист обслуживания уходит, и кто-то еще входит, что тогда? Вы не должны адаптировать свой код в соответствии с требованиями программиста по техническому обслуживанию, адаптировать свой код в соответствии с проблемой, которую вы вместо этого решаете.
Я считаю, что особенно лямбда-выражения облегчают чтение кода. Вместо того, чтобы иметь несколько для каждого с большим количеством условных выражений - чистая лямбда может быть почти прочитана.
Исходя из моего опыта, вещи, которые делают код трудным для чтения, - это умные универсальные аргументы Func... Они часто убирают только более 0+ легко читаемых функций и заменяют их на обычные трудно читаемые.
Поэтому в моей книге важнее иметь методы с хорошими именами, чем избегать определенных конструкций. Но не беспокойтесь о том, что они не знают их - они должны все равно их выучить.
Я думаю, что даже если вы пишете о своем собственном проекте, стоит придерживаться, насколько это возможно, общих / стандартных идиом на любом языке, который вы используете.
Я сам наткнулся на эту ловушку - написал код, который сделал что-то "умное", недостаточно документировал его и представил серьезную ошибку, когда вернулся через несколько месяцев, чтобы изменить код.
Мое эмпирическое правило - используйте "основной язык" настолько, насколько это возможно, и когда вы отойдете от этого, тщательно документируйте свой подход. Избегайте использования синтаксического сахара, чтобы сделать ваш код короче, если это не действительно стандартная идиома (например, свойства в C#). Читаемость должна превосходить скорость печати каждый раз.
Если вы ожидаете, что кодировщики обслуживания возьмут на себя вашу работу, все это вдвойне верно. Вы не можете ожидать, что кодировщики обслуживания будут опытными в нескольких парадигмах в большинстве организаций. Поэтому, если вы, например, начнете использовать логические / функциональные конструкции программирования, такие как лямбды, в своем объектно-ориентированном коде, это будет немного похоже на написание главы на немецком языке в английской книге. Вы могли бы пожелать, чтобы ваши читатели были многоязычными энтузиастами, но, скорее всего, это не так.